2009-11-06 8 views
7

Comment puis-je demander à Mathematica d'exporter/enregistrer/écrire un fichier texte au format Fortan77 approprié, c'est-à-dire 72 colonnes et un marqueur de continuation dans la sixième colonne? J'utilise Mathematica pour générer des expressions analytiques complexes et volumineuses que je dois ensuite insérer dans le code Fortran77 préexistant. J'ai tout fonctionne correctement à l'extrémité avant de Mathematica avec FortranForm[] etExporter des expressions au format personnalisé à partir de Mathematica

SetOptions[$Output, PageWidth -> 72]

Cependant, je ne peux pas comprendre comment obtenir Mathematica à la sortie correctement dans un fichier texte. Je veux quelque chose comme ceci:

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

mais je reçois ce soit:

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

ou ceci:

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

J'ai changé le titre de la question pour être plus général, puisque la réponse résout le problème plus général du formatage de sortie personnalisé dans Mathematica. – Timo

Répondre

8

C'est un emploi pour la fonction Splice étonnamment peu connu. Tout d'abord, vous faites un fichier modèle, avec l'extension ".mf", comme ceci:

file = "test.mf"; 

out = OpenWrite[file]; 

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

Close[out]; 

Maintenant, lorsque vous utilisez Splice, Mathematica remplacera automatiquement tout entre les <* et *> délimiteurs avec sa forme évaluée. Donc, si vous définissez

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; 

et appelez

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

qui déduira automatiquement que vous voulez FortranForm sortie de l'extension de fichier, et qui vous permet de définir PageWidth en option, vous obtiendrez un joli décent résultat dans le fichier généré automatiquement "test.f" (notez la nouvelle extension):

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 

Regardez les docs pour Splice pour plus d'options (changer le nom du fichier de sortie et autres).

+0

Merci beaucoup! Je n'avais pas pensé à essayer Splice. Maintenant, j'ai juste besoin de faire une génération dynamique du fichier test.mf (comme par exemple dans la page d'aide Splice) et j'ai terminé. – Timo

+0

Pillsy, j'ai utilisé 'Splice' pour générer des cas de test exhaustifs pour certains aspects mathématiques que j'écrivais. Très utile, mais parfois difficile à obtenir pour que Mathematica produise une sortie correcte. – rcollyer