2009-11-06 7 views
7

Mathematicaに適切なFortan77フォーマット(つまり、72列と6番目の列に継続マーカー)のテキストファイルを書き出し/保存/書き込むようにするにはどうすればよいですか?カスタムフォーマットの式をMathematicaからエクスポートする

私はMathematicaを使用して大規模で複雑な解析式を生成しています。この式を既存のFortran77コードに挿入する必要があります。私はすべてがしかし、私はテキストファイルに正しく出力にMathematicaを取得する方法を見つけ出すことはできませんFortranForm[]

SetOptions[$Output, PageWidth -> 72]

でのMathematicaのフロントエンドで正しく動作しています。私はこのような何かしたい:

MM11 = mH1**2 + (g2**2*v1**2)/2. - 
    - (g2**2*(v1**2/2. - 
    -  ((v2*Cos(phi2) - (0,1)*v2*Sin(phi2))* 
    -   (v2*Cos(phi2) + (0,1)*v2*Sin(phi2)))/2.))/2. 
... 

をしかし、このいずれかを取得:これは意外にもあまり知られていないSplice機能のための仕事です

MM11 = mH1**2 + (g2**2*v1**2)/2. - (g2**2* 
(v1**2/2. - ((v2*Cos(phi2) - (0,1)*v2*Sin(phi2))* 
... 
+0

質問のタイトルをMathematicaのカスタム出力書式のより一般的な問題を解決するより一般的なものに変更しました。 – Timo

答えて

8

MM11 = FortranForm[mH1^2 + (g2^2*v1^2)/2 - ... 

またはこれを。まず、あなたがそうのように、拡張子".mf"で、テンプレートファイルを作る:

file = "test.mf"; 

out = OpenWrite[file]; 

WriteString[out, "MH1 = <* form *>"]; 

Close[out]; 

を今、あなたはSpliceを使用する場合、Mathematicaは自動的にその評価を行っ形で<**>区切り文字の間のすべてを置き換えます。あなたは

form = 4 + b9^2 + c1^5 + c4^5 + h10^4 + j2 + k10^4 + p10^4 + q5^5 + 
     q8 + s3^3 + s7^2 + t6^3 + u3^2 + u9^3 + x8^4 + z2^3; 

を設定して呼び出すのであれば

Splice["test.mf", PageWidth -> 72]; 

自動的にファイルの拡張子からFortranForm出力をしたい推測するであろう、そしてあなたはオプションとしてPageWidthを設定することを可能にする、あなたはかなりまともなを取得します(新しい拡張子を注意してください)自動的に生成されたファイル"test.f"の結果:ためのドキュメントで

MH1 =   4 + b9**2 + c1**5 + c4**5 + h10**4 + j2 + k10**4 + p10**4 + 
    - q5**5 + q8 + s3**3 + s7**2 + t6**3 + u3**2 + u9**3 + x8**4 + 
    - z2**3 

ルック(出力ファイルの名前を変更するなど)

+0

ありがとう!私はスプライスを試したことは考えていませんでした。これで、test.mfファイルの動的生成(たとえばSpliceのヘルプページなど)を行うだけで済みます。 – Timo

+0

Pillsy、私は 'Splice'を使って、私が書いていたいくつかの数学的なS/Wの網羅的なテストケースを生成しました。 Mathematicaに正しい出力が得られるようにするには非常に便利ですが、時には微妙です。 – rcollyer

関連する問題