相关疑难解决方法(0)

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

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

我正在使用Mathematica生成大而复杂的分析表达式,然后我需要将其插入到预先存在的Fortran77代码中.我把一切都在数学的前端与正常工作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.
...
Run Code Online (Sandbox Code Playgroud)

但得到这个:

MM11 = FortranForm[mH1^2 + (g2^2*v1^2)/2 - ...
Run Code Online (Sandbox Code Playgroud)

或这个:

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

formatting wolfram-mathematica fortran77

7
推荐指数
1
解决办法
1809
查看次数

Mathematica内部数字格式和精度

这个问题切线相关,这里的数字格式究竟发生了什么?

In[1]  := InputForm @ 3.12987*10^-270
Out[1] := 3.12987`*^-270

In[2]  := InputForm @ 3.12987*10^-271
Out[2] := 3.1298700000000003`*^-271
Run Code Online (Sandbox Code Playgroud)

如果你*10.^用作乘数,过渡就是你天真地期望的过渡:

In[3]  := InputForm @ 3.12987*10.^-16
Out[3] := 3.12987`*^-16

In[4]  := InputForm @ 3.12987*10.^-17
Out[4] := 3.1298700000000004`*^-17
Run Code Online (Sandbox Code Playgroud)

然后*^进一步转换,虽然它是机器精度开始剥落:

In[5]  := InputForm @ 3.12987*^-308
Out[5] := 3.12987`*^-308

In[6]  := InputForm @ 3.12987*10.^-309
Out[6] := 3.12987`15.954589770191008*^-309
Run Code Online (Sandbox Code Playgroud)

基地很晚才开始分手

In[7]  := InputForm @ 3.12987*^-595
Out[7] := 3.12987`15.954589770191005*^-595

In[8]  := InputForm @ 3.12987*^-596
Out[8] := 3.1298699999999999999999999999999999999999`15.954589770191005*^-596
Run Code Online (Sandbox Code Playgroud)

我假设这些转换与Mathematica内部保存数字的格式有关,但是有人知道,或者关心有害的教育猜测,如何?

wolfram-mathematica number-formatting

5
推荐指数
1
解决办法
618
查看次数