Casio Basic: 行列計算

Casio Basic
コマンドリファレンス

Casio fx-5800P、fx-9860GII、fx-CG20 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
2015/01/31 更新

fx-5800P / fx-9860GII / fx-CG20
行列計算

◆概 要: プログラム内で行列に関する計算を行う。
※ fx-5800P の取扱説明書には、行列をプログラムで使える説明がありませんが、実際に使えます。但し、fx-5800P の内部仕様の変更があったときに、行列機能について影響が出る可能性が無いとは言えません。
※ fx-9860GII は公式に行列を使えます。


◆使える行列の最大サイズ:
fx-5800P: 行と列のそれぞれの最大が 10 と思われる。
fx-9860GII/fx-CG20: 行と列のそれぞれの最大は 999 となる。
但し、メモリ不足になると、これ以下でも Memory ERRORとなる。


◆行列変数: AZ、および Ans を使える


◆行列の生成:
行列変数をAとし、3X3の行列を生成する場合、
fx-5800P: [[0,0,0][0,0,0][0,0,0]]→Mat A
fx-9860GII/fx-CG20{3,3}→Dim Mat A

[2015/01/31 修正]
fx-5800P では、3x3の行列の領域確保の際に、各要素の初期値を指定する。
fx-9860GII / fx-CG20 では、3x3の行列の領域確保を行う際、各要素が0に初期化される。

※ Mat A を記述するには (fx-5800P); 
プログラム編集画面で、[FUNCTION] [8] で 8:MATRIX を選択後、[1]で 1:Mat を選択すると Mat を入力できる。その後[ALPHA] [ i ] でAを入力する。

fx-5800P で大きな行列を生成する際、fx-9960GII/fx-CG20 のような簡潔な方法が用意されていないようです。上記の方法で10 × 10 の行列を生成するのは結構な記述量です。このあたりは、正式に使えるとしていないので仕方ありません。もっとも、fx-5800P で大きな行列を使うのは、その処理速度を考えると現実的ではないので、致し方なしではあります。

◆行列の要素;
行列Aの X行 Y列の要素は、
Mat A[X,Y]


◆行列の任意の要素に値や変数を代入する方法:
行列Aの1行3列めの要素に、X を入力する場合、
X→Mat A[1,3]

※ 行列の要素指定 [行,列] は、横の並びが行、縦の並びが列となる。Locate X,Y,"HOGE" の X と Y の並びとは異なることに注意。

3X3行列;
1 2 3 ← 1行目
2 5 9
6 3 4

1列目


において、[1,3] の要素は、1行目&3列目なので 3 であり、6 ではない。


◆行列の任意の要素を読み出す方法:
行列Aの2行3列めの要素を読み出して、変数Xに代入する場合
Mat A[2,3]→X

3X3行列;
1 2 3 
2 5 9
6 3 4

において、[2,3] の要素は 9 なので、Xには が代入される。代入されるのは 3 ではない。


◆行列式を求める方法:
行列Aの行列式を変数Dに代入する場合、
fx-5800P: det(Mat A)→D
fx-9860GII/fx-CG20Det Mat A→D

det( を fx-5800P で記述するには;
プログラム編集画面で、[FUNCTION] [8]8:MATRIX を選択後、[2]2:det を選択する。


◆逆行列を求める方法:
行列式が0の時には逆行列を求められない。
※ 逆行列の計算では、分母に行列式がくるので、行列式が0の場合は、0で除算するエラーが発生する。

行列Aの行列式が0でない場合の逆行列を 行列Bに代入する場合、
先ず、3X3行列Bを生成する(要素は任意)。その上で、det(Mat A)が0でない場合の逆行列は Mat A-1 と記述できる。

[[0,0,0][0,0,0][0,0,0]]→Mat B
If det(Mat A)
Then Mat A-1→Mat B
IfEnd


或いは、

[[0,0,0][0,0,0][0,0,0]]→Mat B
det(Mat A)⇒Mat A-1→Mat B



◆転置行列を求める記述方法:
fx-5800P: Trn(Mat A)
fx-9860GII/fx-CG20Trn Mat A

※ fx-5800P で Trn を入力するには、プログラム編集画面で、[FUNCTION] [8]8:MATRIX を選択後、[3]3:Trn を選択する。


◆行列Aの各要素の絶対値をとる記述方法:
Abs(Mat A)


◆行列の加算
Mat A+Mat B


◆行列の乗算
Mat AxMat X


◆行列の表示
Mat A◢

※ 出力命令を用いると、fx-5800P や fx-9860GII 内蔵の行列閲覧画面に切り替わり、全ての要素を確認することができる。
ここで表示されるのは、Mat Ans であり要素を編集することはできません。そこで「行列編集画面」ではなく「行列閲覧画面」と呼ぶことにしています。

◆行列領域解放
ClrMat

※ 生成した行列は、メモリを使っていて、プログラムの最後でそのメモリ領域を解放しないと、メモリを無駄に使ったままになります。領域解放のために用います。ClrMat を入力するには、プログラム編集画面で、[FUNCTION] [6] (CLR) [3] (Mat) と入力します。



行列計算プログラム例 (fx-5800P)

[[0,0,0,0][0,0,0,0][0,0,0,0][0,0,0,0]]→Mat A
-7→N
For 1→Y To 4
For 1→X To 4
N-(3)→Mat A[Y,X]
Isz N
Next:Next

Mat A◢
det(Mat A)→D
D⇒Mat A-1
Trn(Mat A)◢

Cls
For 1→X To 4
For 1→Y To 4
Locate 4X-3,Y,Mat A[Y,X]
Next:Next

出力命令◢ により、行列閲覧画面が開いて、それぞれの行列要素を確認できる。
行列式は、5308416 となる。

このプログラムの最後で行列Aの要素をLocateコマンドを使って表示します。

表列Aの各要素は下記の通り;

-343-216-125-65
-27-8-10
192764
125216343512





応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ

keywords: fx-5800PCasioBasic行列計算プログラミング入門プログラム関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

最新記事
最新コメント
カテゴリ
C# (3)
検索フォーム
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム関数電卓は、プログラムを作り・使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています

おもしろい・役に立つならクリックしてください。励みになります。

人気ブログランキングへ


FC2ブログランキングへ


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR