基本行列による行列の基本変形 リウ 2007/10/06 01:18:27 (修正1回) ├・飛び先番号100の削除 山中和義 2007/10/07 20:09:02 │└行番号はそのようにして消すのですか。私は... リウ 2007/10/08 11:57:05 └有理数モード素晴らしい 島村1243 2007/10/08 10:55:21
基本行列による行列の基本変形 リウ 2007/10/06 01:18:27 (修正1回) ツリーへ
基本行列による行列の基本変形 |
返事を書く ノートメニュー |
リウ <lphmnuwytg> 2007/10/06 01:18:27 ** この記事は1回修正されてます | |
!左基本変形を繰り返して階段行列を作る
OPTION ARITHMETIC RATIONAL !有理数モード DIM A(4,5) !基本変形される行列 DATA 1,1,1,-2,-1,1,2,3,-4,-4,3,0,-3,1,7,0,-1,-2,-1,0 MAT READ A MAT PRINT A LET gyo=SIZE(A,1) !行数 LET retu=SIZE(A,2) !列数 DIM X(gyo,gyo) !基本行列を入れるためのもの DECLARE EXTERNAL SUB P !2つの行を入れ替える基本行列 DECLARE EXTERNAL SUB Q !ある行を定数倍する基本行列 DECLARE EXTERNAL SUB R !ある行に他の行の定数倍を加える基本行列 LET K=1 !階段の行成分 FOR J=1 TO retu !Jは列 IF K>gyo THEN EXIT FOR END IF LET I=K !Iは行 DO WHILE A(K,J)=0 !Oでない成分を(K,J)にもってくる LET I=I+1 IF I>gyo THEN 100 !(K,J)より下の成分すべてが0ならば、次の列ベクトルの処理に移る CALL P(X,I,K) MAT A=X*A MAT PRINT A LOOP CALL Q(X,K,1/A(K,J)) !さきほどもってきた成分を1にする MAT A=X*A MAT PRINT A FOR I=1 TO gyo !Jは行 IF NOT I=K THEN !列ベクトルを単位ベクトルにする CALL R(X,I,K,-A(I,J)) MAT A=X*A MAT PRINT A END IF NEXT I LET K=K+1 100 NEXT J END !基本行列を求める EXTERNAL SUB P(A(,),I,J) !I行とJ行を入れ替える基本行列Aを作る OPTION ARITHMETIC RATIONAL !有理数モード MAT A=IDN LET A(I,I)=0 LET A(J,J)=0 LET A(I,J)=1 LET A(J,I)=1 END SUB EXTERNAL SUB Q(A(,),I,C) !I行をC倍する基本行列Aを作る OPTION ARITHMETIC RATIONAL !有理数モード MAT A=IDN LET A(I,I)=C END SUB EXTERNAL SUB R(A(,),I,J,C) !I行にJ行のC倍を加える基本行列Aを作る OPTION ARITHMETIC RATIONAL !有理数モード MAT A=IDN LET A(I,J)=C END SUB |
├・飛び先番号100の削除 山中和義 2007/10/07 20:09:02 ツリーへ
Re: 基本行列による行列の基本変形 |
返事を書く ノートメニュー |
山中和義 <drdlxujciw> 2007/10/07 20:09:02 | |
・飛び先番号100の削除
・筆算の参考になるように、掃き出し法の「変形」を記述 の修正 OPTION ARITHMETIC RATIONAL !有理数モード !!!DIM A(4,5) !基本変形される行列 !!!DATA 1, 1, 1,-2,-1 !!!DATA 1, 2, 3,-4,-4 !!!DATA 3, 0,-3, 1, 7 !!!DATA 0,-1,-2,-1, 0 DIM A(3,4) !連立方程式 Ax=b DATA 0, 3, 4, 7 !3y+4z=7 DATA 3, 5,-7,10 !3x+5y-7z=10 DATA -1,-1, 2,-3 !-x-y+2z=-3 !DIM A(3,6) !逆行列 !DATA 1,1,1, 1,0,0 !前半分は該当する行列、後半分は単位行列 !DATA 1,2,3, 0,1,0 !DATA 2,4,5, 0,0,1 MAT READ A MAT PRINT A LET gyo=SIZE(A,1) !行数 LET retu=SIZE(A,2) !列数 DIM X(gyo,gyo) !基本行列を入れるためのもの DECLARE EXTERNAL SUB P !2つの行を入れ替える基本行列 DECLARE EXTERNAL SUB Q !ある行を定数倍する基本行列 DECLARE EXTERNAL SUB R !ある行に他の行の定数倍を加える基本行列 LET K=1 !Kは階段の行 FOR J=1 TO retu !Jは列 FOR I=K TO gyo !A(K,J)が0以外の行を探す LET p=A(I,J) IF p<>0 THEN EXIT FOR NEXT I !K行以降がすべて0ならば、次の列へ IF I<=gyo THEN !そうでなければ IF I<>K THEN !交換してA(K,J)を0以外にする CALL P(X,I,K) MAT A=X*A MAT PRINT A END IF IF p<>1 THEN !A(K,J)で割る(1にする) CALL Q(X,K,1/p) MAT A=X*A MAT PRINT A END IF FOR I=1 TO gyo !ピボット列の掃き出し(0にする) IF I<>K THEN !ピボットは除く IF A(I,J)<>0 THEN !既に0なら何もしない CALL R(X,I,K,-A(I,J)) MAT A=X*A MAT PRINT A END IF END IF NEXT I LET K=K+1 !次の行へ END IF NEXT J END !行に関する基本変形を行う基本行列を求める EXTERNAL SUB P(A(,),I,J) !I行とJ行を入れ替える基本行列Aを作る OPTION ARITHMETIC RATIONAL !有理数モード MAT A=IDN LET A(I,I)=0 LET A(J,J)=0 LET A(I,J)=1 LET A(J,I)=1 PRINT I;"行と";J;"行を入れ替える" END SUB EXTERNAL SUB Q(A(,),I,C) !I行をC倍する基本行列Aを作る OPTION ARITHMETIC RATIONAL !有理数モード MAT A=IDN LET A(I,I)=C PRINT I;"行 ×"; IF C<0 THEN PRINT " ( ";C;")" ELSE PRINT C END SUB EXTERNAL SUB R(A(,),I,J,C) !I行にJ行のC倍を加える基本行列Aを作る OPTION ARITHMETIC RATIONAL !有理数モード MAT A=IDN LET A(I,J)=C PRINT I;"行 +";J;"行 ×"; IF C<0 THEN PRINT " ( ";C;")" ELSE PRINT C END SUB |
│└行番号はそのようにして消すのですか。私は... リウ 2007/10/08 11:57:05 ツリーへ
Re: ・飛び先番号100の削除 |
返事を書く ノートメニュー |
リウ <lphmnuwytg> 2007/10/08 11:57:05 | |
行番号はそのようにして消すのですか。私はまだまだ未熟ですね。
自分でも気付かなかったところがわかったので、参考になりました。 |
└有理数モード素晴らしい 島村1243 2007/10/08 10:55:21 ツリーへ
Re: 基本行列による行列の基本変形 |
返事を書く ノートメニュー |
島村1243 <bjllmpcujp> 2007/10/08 10:55:21 | |
有理数モード素晴らしい
リウさんのプログラムを実行して、有理数モードと言う機能を初めて知りました。 ExcelVBA等での行列計算ではすべて浮動小数点数値でしか答えが出なかったので、 分数表示で正確な答えが得られるこの機能は素晴らしいですね。 |