LabWindows/CVI

cancel
Showing results for 
Search instead for 
Did you mean: 

緊急:GenInvMatrix

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からのデータを入力
//出力確認 OK
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...
という出力が正しい
 
0 Kudos
Message 1 of 2
(3,169 Views)
何時もお世話になっております。
日本ナショナルインスツルメンツ技術部のサハと申します。
 
お客様の場合問題が起きている関数GenInvMatrixについて調べた
ところ、この関数の動作には問題はありません。お客様が指定した値
を使ってすごく簡単なプログラムを書いて見ました。結果はお客様の期待
通りになりました。サンプルプログラムを添付させて頂きますのでお試し
願います。
 
サンプルでも期待通りの結果が出ない場合、ご連絡頂ければと思います。
今後とも宜しくします。
0 Kudos
Message 2 of 2
(3,143 Views)