formatting - 从 Mathematica 导出自定义格式的表达式

如何让 Mathematica 导出/保存/写入具有正确 Fortan77 格式的文本文件,即 72 列和第六列上的继续标记?

我正在使用 Mathematica 生成大而复杂的分析表达式,然后我需要将其插入到预先存在的 Fortran77 代码中。我在 Mathematica 的前端使用 FortranForm[]

一切正常

SetOptions[$Output, PageWidth -> 72]

但是,我不知道如何让 Mathematica 正确输出到文本文件。我想要这样的东西:

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

但是得到这个:

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

或者这个:

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

最佳答案

这是一个鲜为人知的 Splice 的工作。功能。首先,您制作一个模板文件,扩展名为 ".mf" ,就像这样:

file = "test.mf";

out = OpenWrite[file];

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

Close[out];

现在当您使用 Splice , Mathematica 将自动替换 <* 之间的所有内容和 *>分隔符及其评估形式。所以如果你设置

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;

然后打电话

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

它会自动推断你想要FortranForm文件扩展名的输出,它允许您设置 PageWidth作为一个选项,您将在自动生成的文件 "test.f" 中获得相当不错的结果。 (注意新的扩展):

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

查看 Splice 的文档更多选项(更改输出文件的名称等)。

https://stackoverflow.com/questions/1687705/

相关文章:

sql-server-2005 - 在 SQL Reporting 2005 中更改货币符号

R - 绘图标签文本的文本格式 - 删除线

mysql - 如何将 MySQL 结果以表格式存储到文件中

html - Crystal Report 显示 HTML 文本,但不显示项目符号。为什么?

c# - Visual Studio 2013 丢失代码格式,C#

c++ - printf() 中宽度小于精度的意义何在?

c - 是否有 "null"printf 代码不打印任何内容,用于跳过参数?

string - 什么函数用于格式化/替换 Grails/Groovy 中字符串中的 {0} {1}

haskell - 将 NominalDiffTime 打印为小时、分钟和秒

linq - ReSharper LINQ 扩展方法格式化