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

时间:2011-12-16 05:03:26

标签: wolfram-mathematica precision numerical

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

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]];
  ]
]

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

作为另一种选择,您可以使用Rationalize[0.000247],然后使用N[expr, prec]导出数字数量。在M-中,如果你给出不精确的输入,你会得到不精确的输出,对于精确的输入,你得到准确的输出。