formatting - Exportar expresiones formateadas a medida desde Mathematica
wolfram-mathematica fortran77 (1)
Este es un trabajo para la sorprendentemente poco conocida función Splice
. Primero, crea un archivo de plantilla, con la extensión ".mf"
, así:
file = "test.mf";
out = OpenWrite[file];
WriteString[out, "MH1 = <* form *>"];
Close[out];
Ahora, cuando utilice Splice
, Mathematica reemplazará automáticamente todo entre los delimitadores <*
y *>
con su forma evaluada. Entonces si estableces
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 llama
Splice["test.mf", PageWidth -> 72];
que automáticamente FortranForm
que desea la salida de FortranForm
desde la extensión de archivo, y que le permite configurar PageWidth
como una opción, obtendrá un resultado bastante decente 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
Consulte los documentos de Splice
para ver más opciones (cambiar el nombre del archivo de salida y similares).
¿Cómo puedo obtener Mathematica para exportar / guardar / escribir un archivo de texto con el formato Fortan77 adecuado, es decir, 72 columnas y un marcador de continuación en la sexta columna?
Estoy usando 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 el front end de Mathematica con FortranForm[]
y
SetOptions[$Output, PageWidth -> 72]
Sin embargo, no puedo entender cómo hacer que Mathematica emita correctamente 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 consigue 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))*
...