Mathematicaから非常に複雑な行列(〜1.3MBのプレーンテキスト)をFortranプログラムで使用するために出力しようとしています。私がこれを行うと(Splice
を介して)、変数に数値が与えられると、結果の行列は〜2%だけオフになります。これは、正確にゼロである固有値が必要であり、固有ベクトルの構成が正確である必要があるため、問題である。Mathematica CForm/FortranFormのバグ?
精度、正しい変数、適切な対角化コードなどの通常のデューデリジェンスをすべて実行しました。そのような大きな行列やMathematicaがFortranFormの出力を乱してしまったことが起こりました。
私はMathematicaに行列のCFormを与え、それを試しました。 FortranFormマトリックスと同じ(マシンの精度内)でした。
誰かがこの種の問題に遭遇しましたか?何が原因かもしれないか考えていますか?これを理解するためにMathematicaでフォーマットされたFortranコードの25000行を調べる必要があります。
EDIT:問題のマトリックスは複雑で、大きくはありません。それはわずか6x6ですが、各要素は三角関数、対数、さまざまなルーツとパワーを含めて、代数的に非常に乱雑です。
本発明のマトリックスの(1,1)元素のPlaintext,C codeおよびFortran codeである。正当なパラメータ値は、0 <ラムダ、カッパ、Y *** < 1; 100と1000
小さな行列でエラーを再現できますか? –
エクスポートする象徴的な行列であることを正しく理解していますか?そして、Fortran/Cで評価し、数値結果をMathematicaにインポートすると、Mathematicaの記号式を評価するのと比べて、2%のエントリーが削除されますか? – Janus
@HighPerformanceMark:いいえ、はるかに単純な行列を使ってテストしました。それらはすべて機械精度で再現されています。 – Timo