Как это отклонение получается после того, как я использую Evaluate и Plot в Mathematica?

Я столкнулся с этой проблемой, когда пытался решить дифференциальное уравнение в частных производных. Вот мой код:

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, в то время как при расчете N[kkg[0.01] - kkk[0.01], 1] оно составляет всего -3.88578*10^-16, интересно, как появляется эта ошибка.

Кстати, мне кажется странным, что в выводе N[kkg[0.01] - kkk[0.01], 1] так много знаков после запятой, я установил точность равной 1, верно?


person xzczd    schedule 25.07.2012    source источник


Ответы (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, если вы хотите принудительно (подделать) точность, и < a href="http://reference.wolfram.com/mathematica/ref/NumberForm.html" rel="nofollow noreferrer">NumberForm, если вы хотите напечатать число в определенном формате.

person Mr.Wizard    schedule 26.07.2012
comment
Спасибо за ваш ответ о точности! Затем, что ж, увидев ваш график, я перепроверил свой и с грустью обнаружил, что неправильно понял координаты на графике... - person xzczd; 26.07.2012
comment
@ user1551513, надеюсь, GridLines поможет с этим в будущем. Кроме того, вы можете щелкнуть график правой кнопкой мыши и выбрать Получить координаты, чтобы определить значение. - person Mr.Wizard; 26.07.2012