2009-11-06 8 views
7

¿Cómo puedo obtener que Mathematica exporte/guarde/escriba un archivo de texto con el formato Fortan77 adecuado, es decir, 72 columnas y un marcador de continuación en la sexta columna?Exportar expresiones formateadas personalizadas de Mathematica

Estoy utilizando Mathematica para generar expresiones analíticas grandes y complejas, que luego tengo que insertar en el código Fortran77 preexistente. Tengo todo funcionando correctamente en la parte delantera de Mathematica con FortranForm[] y

SetOptions[$Output, PageWidth -> 72]

Sin embargo, no puedo encontrar la manera de llegar a la salida Mathematica correctamente a un archivo de texto. Quiero algo como esto:

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

pero entiendo bien esto:

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

o esto:

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

He cambiado el título de la pregunta para que sea más general, ya que la respuesta resuelve el problema más general del formato de salida personalizado en Mathematica. – Timo

Respuesta

8

Este es un trabajo para la función sorprendentemente poco conocido Splice. En primer lugar, se hace un archivo de plantilla, con la extensión ".mf", así:

file = "test.mf"; 

out = OpenWrite[file]; 

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

Close[out]; 

Ahora cuando se utiliza Splice, Mathematica reemplazará automáticamente todo lo que entre los <* y *> delimitadores con su forma evaluado. Así que si se establece

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; 

y llamar

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

que inferir automáticamente que desea FortranForm salida de la extensión del archivo y que le permite establecer PageWidth como una opción, obtendrá una muy decente resultar en el archivo generado automáticamente "test.f" (tenga en cuenta la nueva extensión):

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 

mirada a la documentación para Splice para obtener más opciones (cambiar el nombre del archivo de salida y similares).

+0

¡Muchas gracias! No había pensado en probar Splice. Ahora solo necesito hacer una generación dinámica del archivo test.mf (como, por ejemplo, en la página de ayuda de Splice) y listo. – Timo

+0

Pillsy, he usado 'Splice' para generar casos de prueba exhaustivos para algunos matemáticos s/w que estaba escribiendo. Muy útil, pero ocasionalmente complicado para que Mathematica produzca resultados correctos. – rcollyer

Cuestiones relacionadas