我的Mathematica程序中的大数值错误

2 precision numerical wolfram-mathematica

这是我的一个程序.看一看.

For[m = 1, m <= mode1, m++,
  For[n = 0, n <= mode2, n++,
    A[m, n][t_] = a[m, n]*Cos[\[Omega]*t];
    B[m, n][t_] = b[m, n]*Cos[\[Omega]*t];
  ]
]

temp = 0;
For[m = 1, m <= mode1, m++,
  For[n = 0, n <= mode2, n++,
    temp++;
    equation[temp] = 
      ExpandAll[Integrate[eqC[m, n]*Cos[\[Omega]*t], {t, 0, (2*Pi)/\[Omega]}]];
    equation[temp] = ExpandAll[Simplify[equation[temp]/10^9]];
    Print["\n\nEquation ", temp, "-\n", equation[temp]];
    temp++;
    equation[temp] = 
      ExpandAll[Integrate[eqS[m, n]*Cos[\[Omega]*t], {t, 0, (2*Pi)/\[Omega]}]];
    equation[temp] = ExpandAll[Simplify[equation[temp]/10^9]];
    Print["\n\nEquation ", temp, "-\n", equation[temp]];
  ]
]
Run Code Online (Sandbox Code Playgroud)

在运行这段代码后,我应该得到几个方程,然后通过一系列的微分来创建一个矩阵.我知道矩阵必须是对称的.问题是,当我输入简单数据,即e = 1,h = 1等时,我得到准确的结果并且矩阵是对称的,但是一旦我给出具有71.02e9,0.000247之类的值的实际数据,计算就会到来出错了,我得到了一个不对称的矩阵.我已经彻底检查了代码,但我找不到任何错误.我还通过手动计算检查了程序的结果.

Tim*_*imo 7

您可以尝试通过全局设置来提高计算的精度,例如,$MinPrecision=50使用foo = SetPrecision[0.000247,50]或使用速记将数据值指定为高精度0.000247`50.