2009-11-06 25 views
7

Wie kann ich Mathematica zum Exportieren/Speichern/Schreiben einer Textdatei mit der richtigen Fortan77-Formatierung, dh 72 Spalten und einer Fortsetzungsmarkierung in der sechsten Spalte, erhalten?Benutzerdefinierte formatierte Ausdrücke von Mathematica exportieren

Ich verwende Mathematica, um große und komplexe analytische Ausdrücke zu generieren, die ich dann in bereits vorhandenen Fortran77-Code einfügen muss. Ich habe alles richtig in dem vorderen Ende des Mathematica mit FortranForm[] und

SetOptions[$Output, PageWidth -> 72]

Allerdings arbeiten, ich kann nicht herausfinden, wie Mathematica zur Ausgabe in eine Textdatei korrekt zu erhalten. Ich möchte etwas wie folgt aus:

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. 
... 

aber erhalten entweder das:

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

oder dies:

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

Ich änderte den Titel der Frage, um allgemeiner zu sein, da die Antwort das allgemeinere Problem der benutzerdefinierten Ausgabeformatierung in Mathematica löst. – Timo

Antwort

8

Dies ist eine Aufgabe für die überraschend wenig bekannte Splice Funktion. Zuerst Sie eine Vorlagendatei machen, mit der Erweiterung ".mf", etwa so:

file = "test.mf"; 

out = OpenWrite[file]; 

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

Close[out]; 

Wenn Sie jetzt Splice verwenden, wird Mathematica automatisch alles zwischen den <* und *> Trennzeichen mit seiner ausgewerteten Form ersetzen. Also, wenn Sie setzen

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; 

und rufen

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

, die automatisch schließen, werden Sie FortranForm Ausgabe von der Dateierweiterung werden soll, und das ermöglicht es Ihnen, PageWidth als Option zu setzen, werden Sie eine ziemlich anständig erhalten führen in der automatisch generierten Datei "test.f" (die neue Erweiterung beachten):

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 

Schauen Sie sich die Dokumentation für Splice für weitere Optionen (Ändern des Namens der Ausgabedatei und dergleichen).

+0

Vielen Dank! Ich hatte nicht daran gedacht Splice auszuprobieren. Jetzt muss ich nur eine dynamische Generierung der Datei test.mf durchführen (wie zum Beispiel auf der Hilfeseite Splice) und fertig. – Timo

+0

Pillsy, ich habe 'Splice' verwendet, um erschöpfende Testfälle für mathematische s/w zu erstellen, die ich geschrieben habe. Sehr nützlich, aber manchmal schwierig, um Mathematica dazu zu bringen, eine korrekte Ausgabe zu erzeugen. – rcollyer