2009-11-06 9 views
7

Come posso ottenere da Mathematica l'esportazione/salvataggio/scrittura di un file di testo con formattazione Fortan77 corretta, ovvero 72 colonne e un marcatore di continuazione sulla sesta colonna?Esporta espressioni formattate personalizzate da Mathematica

Sto utilizzando Mathematica per generare espressioni analitiche grandi e complesse, che devo quindi inserire nel codice Fortran77 preesistente. Ho tutto funziona correttamente nel front-end di Mathematica con FortranForm[] e

SetOptions[$Output, PageWidth -> 72]

Tuttavia, non riesco a capire come ottenere Mathematica per emettere correttamente un file di testo. Voglio qualcosa di simile:

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

ma ottenere sia questo:

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

o questo:

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

Ho cambiato il titolo della domanda in modo più generale, poiché la risposta risolve il problema più generale della formattazione dell'output personalizzato in Mathematica. – Timo

risposta

8

Questo è un lavoro per il sorprendentemente poco conosciuto Splice funzione. In primo luogo, si fa un file di modello, con l'estensione ".mf", in questo modo:

file = "test.mf"; 

out = OpenWrite[file]; 

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

Close[out]; 

Ora, quando si utilizza Splice, Mathematica sostituirà automaticamente tutto tra le <* e *> delimitatori con la sua forma valutata. Quindi, se si imposta

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; 

e chiamare

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

che vi dedurre automaticamente che si desidera FortranForm uscita dalla estensione del file, e che permette di impostare PageWidth come opzione, si otterrà un abbastanza decente comportare il file generato automaticamente "test.f" (notare la nuova estensione):

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 

Guardate la documentazione per 0.123.801,619 milaper ulteriori opzioni (modifica del nome del file di output e simili).

+0

Grazie mille! Non avevo pensato di provare Splice. Ora ho solo bisogno di fare una generazione dinamica del file test.mf (come ad esempio nella pagina di aiuto Splice) e ho finito. – Timo

+0

Pillsy, ho usato 'Splice' per generare test completi per alcuni documenti matematici che stavo scrivendo. Molto utile, ma a volte difficile da ottenere Mathematica per produrre risultati corretti. – rcollyer