Domanda

Ho corso in questo problema quando cerco di risolvere un'equazione differenziale parziale.Ecco il mio codice:

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

È strano che la deviazione mostrata nel grafico raggiunga fino a più del 5*10^-7 attorno al t=0.01, mentre è solo -3.88578*10^-16 quando calcolato da N[kkg[0.01] - kkk[0.01], 1], mi chiedo come questo errore viene fuori.

A proposito, lo sento strano che l'output di N[kkg[0.01] - kkk[0.01], 1] abbia così tanti punti decimali, ho impostato la precisione come 1, giusto?

È stato utile?

Soluzione

Utilizzo Mathematica 7 La trama I ottengo non mostra un picco a 0,01:

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

grafica matematica

è un picco su 0.00754:

kkk[0.00754] - kkg[0.00754] // N
.

.
{6.50604*10^-7}
.
.

Per quanto riguarda N, non modifica la precisione dei numeri di precisione della macchina come funziona per quelli precisi o arbitrari:

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

Precision /@ %
.

.
{1.23457, 3.1, 1.2}

{MachinePrecision, 2., 2.}
.

Guarda SetPrecision se si desidera forzare (falso) una precisionee NumberForm se si desidera stampare un numero in un formato specifico. .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top