前提・実現したいこと
12×12の行列式において、逆行列を計算するシステムを製作しています。
そのためにeigenを利用しています。
行列の要素の値を2桁の整数にした場合は、逆行列の計算は可能でした。
値を複雑に変えると、計算結果がnanになってしまいました。
実行結果として値を返してくれるプログラムにするために、ぜひお力を貸してください。
発生している問題・エラーメッセージ
エラーメッセージ
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind)
-nan(ind) -inf -nan(ind) -nan(ind) -nan(ind) inf -nan(ind) -nan(ind) -nan(ind) -nan(ind) -nan(ind) inf
該当のソースコード
C++ソースコード
int main(){
MatrixXd temp(12, 12);
temp=MatrixXd::Zero(12,12);
double k[9] = { 1 ,1,1,1,1,1,1,1 ,1}; temp(0, 0) = k[0] * k[1] / k[2]; temp(1, 1) = 12.0 * k[0] * k[6] / k[4]; temp(2, 2) = 12.0 * k[0] * k[5] / k[4]; temp(3, 3) = k[8] * (k[5] + k[6]) * k[2]; temp(4, 4) = 4.0 * k[0] * k[5] / k[2]; temp(5, 5) = 4.0 * k[0] * k[6] / k[2]; temp(6, 6) = k[0] * k[1] / k[2]; temp(7, 7) = 12 * k[0] * k[6] / k[4]; temp(8, 8) = 12 * k[0] * k[5] / k[4]; temp(9, 9) = k[8] * (k[5] + k[6]) * k[2]; temp(10, 10) = 4 * k[0] * k[5] / k[2]; temp(11, 11) = 4 * k[0] * k[6] / k[2]; temp(0, 6) = -k[0] * k[1] / k[2]; temp(6, 0) = -k[0] * k[1] / k[2]; temp(1, 5) = 6 * k[0] * k[6] / k[3]; temp(5, 1) = 6 * k[0] * k[6] / k[3]; temp(1, 7) = -12 * k[0] * k[6] / k[4]; temp(7, 1) = -12 * k[0] * k[6] / k[4]; temp(1, 11) = 6 * k[0] * k[6] / k[3]; temp(11, 1) = 6 * k[0] * k[6] / k[3]; temp(2, 4) = -6 * k[0] * k[5] / k[3]; temp(4, 2) = -6 * k[0] * k[5] / k[3]; temp(2, 8) = -12 * k[0] * k[5] / k[4]; temp(8, 2) = -12 * k[0] * k[5] / k[4]; temp(2, 10) = -6 * k[0] * k[5] / k[3]; temp(10, 2) = -6 * k[0] * k[5] / k[3]; temp(3, 9) = -k[8] * (k[5] + k[6]) / k[2]; temp(9, 3) = -k[8] * (k[5] + k[6]) / k[2]; temp(4, 8) = 6 * k[0] * k[5] / k[3]; temp(8, 4) = 6 * k[0] * k[5] / k[3]; temp(4, 10) = 2 * k[0] * k[5] / k[2]; temp(10, 4) = 2 * k[0] * k[5] / k[2]; temp(5, 7) = -6 * k[0] * k[5] / k[3]; temp(7, 5) = -6 * k[0] * k[5] / k[3]; temp(5, 11) = 2 * k[0] * k[6] / k[2]; temp(11, 5) = 2 * k[0] * k[6] / k[2]; temp(7, 11) = -6 * k[0] * k[6] / k[3]; temp(11, 7) = -6 * k[0] * k[6] / k[3]; temp(8, 10) = 6 * k[0] * k[5] / k[3]; temp(10, 8) = 6 * k[0] * k[5] / k[3]; cout<<temp.inverse(); return 0;
}
試したこと
・kの配列内の値をいろいろ、いじっても結果は基本的にnanになります。
・inverse()関数の代わりに、掃き出し法も試しましたが、同じ結果になりました。
・桁が大きすぎるのが原因なのかなとも考えましたが、ポインタのやり方わかりません。
補足情報(FW/ツールのバージョンなど)
visual studio 2019
回答1件
あなたの回答
tips
プレビュー