LabView7.1のCVIProjectでC言語でdllを作ろうとしています。
GenInvMatrixで逆行列を計算しようと思いましたが、出来ません。
別の方法で自分でCプログラムで逆行列を計算する機能を作ろうともしていますが、
今日締め切りのものを作っていて非常に急いでいます。
GenInvMatrixを使えると非常に嬉しい状況です。お助けください。
例えば、入力行列
S[2][2]=
4 -3
-3 9
に対して、
S~1[2][2]=
0.333... 0.111...
0.111... 0.444...
という出力が正しいのですが、
S~1[2][2]=
0.333... 0.148...
0.333... 0.148...
と出てきます。
入力する行列は、正しく
S[2][2]=
4 -3
-3 9
となっていることが確認されています。
また、引数の行列サイズも正しく2が渡っています。
また、備考として、行列式は27で、これはきちんとDeterminant関数で27と計算できていますので、
逆行列が計算できない行列ではないということは私もCVIでもわかっているようで
GenInvMatrix関数は、呼び出されて一応答えを返して(データを格納して)きます。しかし、それが間違っています。
なぜ出来ないのか、お手上げです。
GenInvMatrixを使えないコンパイルの環境とすればそもそもGenInvMatrixが動いて何らかの計算を返してくれないはずですが、
間違って返してくれます。
何か、使い方がまずいのでしょうか?
ご回答よろしくお願いします。
なお、S~1=1/{(4)*(-9)-(-3)*(-3)*
9 -3
-3 4
=1/27*
9 -3
-3 4
=
0.333... 0.111...
0.111... 0.444...
が正しく動くかどうかを簡単に確かめようとしています。
2次元なら簡単に自分でも求められますが、、、本当に困りました。
以下は、/プログラムの中から抜粋したプログラム内の記述です
int iColSize, iLp1,iLp0;
double *dVar, *dXvarInv; //本当は2次元マトリックスですが、メモリ上には、一次元配列として格納[]={1行目、2行目、3行目、、、n行目}
dXvar = (double *) malloc( sizeof(double) * iColSize * iColSize );
dXvarInv = (double *) malloc( sizeof(double) * iColSize * iColSize );
//iColSizeのデータを入力・
//出力確認 OK
2
//dVarにデータをviからのデータを入力
4 -3
-3 9
//dVarInvを決行
//出力確認 NG
lReturn = GenInvMatrix(dXvar, iColSize, 0, dXvarInv);
S~1[2][2]=
0.333... 0.148...
0.333... 0.148...
と出てきます。
本来は
S~1[2][2]=
0.333... 0.111...
0.111... 0.444...
という出力が正しい