Question

Nous voulons étudier l'erreur dans l'approximation de différence pour la différence avant et différence centrale, tabulate l'erreur pour h=[1.E-3 1.E-4 1.E-5 1.E-6 1.E-7 1.E-8 1.E-9 1.E-10 1.E-11 1.E-12 1.E-13] et dessiner un diagramme loglog. Aucune astuce sur comment le faire? Ceci est notre différence et centra- avant.

centdiff=(subs(f, x+h))/(2*h) - (subs(f, x-h))/(2*h)
framdiff=(subs(f, x+h) - f)/h

Et notre fonction:

f=60*x-(x.^2+x+0.1).^6./(x+1).^6-10*x.*exp(-x);
Était-ce utile?

La solution

L'erreur dans l'approximation est la différence entre les résultats que vous obtenez l'utiliser, et le résultat d'analyse. Heureusement, vous avez une belle fonction f, qui peut facilement (bien, sorta) être différencié. Après avoir trouvé le dérivé et la création de la fonction Matlab correspondant, il vous suffit de comparer le résultat d'analyse avec le résultat approximatif. La façon la plus simple serait sans doute utiliser une boucle de for sur vos différents h.

Alors, l'idée est quelque chose comme ça (non testé, juste pour vous donner une idée):

cent_error = zeros(size(h));
forw_error = zeros(size(h));
for idx = 1:size(h)
    cent_error(idx) = abs(analytical_diff - centdiff(f, h));
    forw_error(idx) = abs(analytical_diff - forwdiff(f, h));
end

loglog(...)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top