1

偏微分方程式を解こうとすると、この問題に遭遇しました。これが私のコードです:

dd = NDSolve[{D[tes[t, x], t] ==D[tes[t, x], x, x] + Exp[-1/(tes[t, x])],
   tes[t, 0] == 1, tes[t, -1] == 1, tes[0, x] == 1}, {tes[t, x]}, {t, 0, 5}, {x, -1, 0}]

f[t_, x_] = tes[t, x] /. dd
kkk = FunctionInterpolation[Integrate[Exp[-1.1/( Evaluate[f[t, x]])], {x, -1, 0}], {t, 0, 0.05}]
kkg[t_] = Integrate[Exp[-1.1/( Evaluate[f[t, x]])], {x, -1, 0}]
Plot[Evaluate[kkk[t]] - Evaluate[kkg[t]], {t, 0, 0.05}]
N[kkg[0.01] - kkk[0.01], 1]

で計算した時だけなのに、グラフの偏差値が5*10^-7周り以上に及んでいるのが不思議で、どうしてこの誤差が出るのか不思議です。t=0.01-3.88578*10^-16N[kkg[0.01] - kkk[0.01], 1]

ところで、 の出力がN[kkg[0.01] - kkk[0.01], 1]小数点以下の桁数が多いのがおかしいので、精度を 1 に設定しましたね。

4

1 に答える 1

1

Mathematica 7を使用すると、取得したプロットに 0.01 のピークが表示されません。

Plot[kkk[t] - kkg[t], {t, 0, 0.05}, GridLines -> Automatic]

Mathematica グラフィックス

約 にピークあります0.00754

kkk[0.00754] - kkg[0.00754] // N
{6.50604*10^-7}

に関してNは、正確または任意精度のもののように機械精度の数値の精度を変更しません。

N[{1.23456789, Pi, 1.23456789`50}, 2]

Precision /@ %
{1.23457, 3.1, 1.2}

{MachinePrecision, 2., 2.}

SetPrecision精度を強制する (偽造する)NumberForm場合と、数値を特定の形式で出力する場合を調べてください。

于 2012-07-26T08:35:36.577 に答える