Casio Basic: 行列計算

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

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となる。


◆行列変数: AZ、および 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には が代入される。代入されるのは 3 ではない。


◆行列式を求める方法:
行列Aの行列式を変数Dに代入する場合、
fx-5800P: det(Mat A)→D
fx-9860GII や fx-CG20/50Det 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/50Trn 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





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


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

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

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

プログラム電卓を実際に使って気づいたこと、自作プログラム、電卓での Casio Basic, C.Basic そして Casio Python プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではありません。いつでもどこでもプログラミングができるプログラム電卓が好きな1ユーザーです。


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR