Casio Basic: 行列計算
Casio Basic
コマンドリファレンス
Casio fx-5800P、fx-9860GII、fx-CG20、fx-CG50 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
fx-5800P / fx-9860GII / fx-CG20 / fx-CG50
行列計算
◆概 要: プログラム内で行列に関する計算を行う。
※ fx-5800P の取扱説明書には、行列をプログラムで使える説明がありませんが、実際に使えます。但し、fx-5800P の内部仕様の変更があったときに、行列機能について影響が出る可能性が無いとは言えません。
※ fx-9860GII は公式に行列を使えます。
◆使える行列の最大サイズ:
・ fx-5800P: 行と列のそれぞれの最大が 10 と思われる。
・ fx-9860GII や fx-CG20/50: 行と列のそれぞれの最大は 999 となる。
但し、メモリ不足になると、これ以下でも Memory ERRORとなる。
◆行列変数: A~Z、および Ans を使える
◆行列の生成:
行列変数をAとし、3X3の行列を生成する場合、
・ fx-5800P: [[0,0,0][0,0,0][0,0,0]]→Mat A
・ fx-9860GII や fx-CG20/50: {3,3}→Dim Mat A
[2015/01/31 修正]
fx-5800P では、3x3の行列の領域確保の際に、各要素の初期値を指定する。
fx-9860GII や fx-CG20/50 では、3x3の行列の領域確保を行う際、各要素が0に初期化される。
※ Mat A を記述するには (fx-5800P);
プログラム編集画面で、[FUNCTION] [8] で 8:MATRIX を選択後、[1]で 1:Mat を選択すると Mat を入力できる。その後[ALPHA] [ i ] でAを入力する。
fx-5800P で大きな行列を生成する際、fx-9960GII や fx-CG20/50 のような簡潔な方法が用意されていないようです。上記の方法で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には 9 が代入される。代入されるのは 3 ではない。
◆行列式を求める方法:
行列Aの行列式を変数Dに代入する場合、
・ fx-5800P: det(Mat A)→D
・ fx-9860GII や fx-CG20/50: Det 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-CG20/50: Trn 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の各要素は下記の通り;
応援クリックをお願いします。励みになるので...
コマンドリファレンス
Casio fx-5800P、fx-9860GII、fx-CG20、fx-CG50 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
2015/01/31 更新
fx-5800P / fx-9860GII / fx-CG20 / fx-CG50
行列計算
◆概 要: プログラム内で行列に関する計算を行う。
※ fx-5800P の取扱説明書には、行列をプログラムで使える説明がありませんが、実際に使えます。但し、fx-5800P の内部仕様の変更があったときに、行列機能について影響が出る可能性が無いとは言えません。
※ fx-9860GII は公式に行列を使えます。
◆使える行列の最大サイズ:
・ fx-5800P: 行と列のそれぞれの最大が 10 と思われる。
・ fx-9860GII や fx-CG20/50: 行と列のそれぞれの最大は 999 となる。
但し、メモリ不足になると、これ以下でも Memory ERRORとなる。
◆行列変数: A~Z、および Ans を使える
◆行列の生成:
行列変数をAとし、3X3の行列を生成する場合、
・ fx-5800P: [[0,0,0][0,0,0][0,0,0]]→Mat A
・ fx-9860GII や fx-CG20/50: {3,3}→Dim Mat A
[2015/01/31 修正]
fx-5800P では、3x3の行列の領域確保の際に、各要素の初期値を指定する。
fx-9860GII や fx-CG20/50 では、3x3の行列の領域確保を行う際、各要素が0に初期化される。
※ Mat A を記述するには (fx-5800P);
プログラム編集画面で、[FUNCTION] [8] で 8:MATRIX を選択後、[1]で 1:Mat を選択すると Mat を入力できる。その後[ALPHA] [ i ] でAを入力する。
fx-5800P で大きな行列を生成する際、fx-9960GII や fx-CG20/50 のような簡潔な方法が用意されていないようです。上記の方法で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には 9 が代入される。代入されるのは 3 ではない。
◆行列式を求める方法:
行列Aの行列式を変数Dに代入する場合、
・ fx-5800P: det(Mat A)→D
・ fx-9860GII や fx-CG20/50: Det 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-CG20/50: Trn 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 | -1 | 0 |
1 | 9 | 27 | 64 |
125 | 216 | 343 | 512 |
応援クリックをお願いします。励みになるので...