这是我的一个程序。看看。
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之类的值的实际数据,计算就会到来出错了,我得到了一个不对称的矩阵。我已经彻底检查了代码,但我找不到任何错误。我还通过手动计算检查了程序的结果。
答案 0 :(得分:7)
您可以尝试通过全局设置来提高计算的精确度,例如$MinPrecision=50
并使用foo = SetPrecision[0.000247,50]
或使用速记0.000247`50
以高精度指定数据值。
答案 1 :(得分:2)
作为另一种选择,您可以使用Rationalize[0.000247]
,然后使用N[expr, prec]
导出数字数量。在M-中,如果你给出不精确的输入,你会得到不精确的输出,对于精确的输入,你得到准确的输出。