Search code examples
wolfram-mathematicaprecisionevaluationpdedeviation

How does this deviation come out after I use Evaluate and Plot in Mathematica?


I ran into this problem when I try to solve a partial differential equation. Here is my code:

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]

It's strange that the deviation showed in the graph reaches up to more than 5*10^-7 around t=0.01, while it's only -3.88578*10^-16 when calculated by N[kkg[0.01] - kkk[0.01], 1], I wonder how this error comes out.

By the way, I feel it strange that the output of N[kkg[0.01] - kkk[0.01], 1] has so many decimal places, I've set the precision as 1, right?


Solution

  • Using Mathematica 7 the plot I get does not show a peak at 0.01:

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

    Mathematica graphics

    There is a peak at about 0.00754:

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

    Regarding N, it does not change the precision of machine precision numbers as it does for exact or arbitrary precision ones:

    N[{1.23456789, Pi, 1.23456789`50}, 2]
    
    Precision /@ %
    
    {1.23457, 3.1, 1.2}
    
    {MachinePrecision, 2., 2.}
    

    Look at SetPrecision if you want to force (fake) a precision, and NumberForm if you want to print a number in a specific format.