Ho da confrontare graficamente il metodo di Newton e quello modificato. Allora io ho fatto disegnare gli incrementi ad ogni passo dell'iterazione in un grafico.
- Codice:
format long;
% Dati del problema.
f = @(x) (x-1)*log(x);
df = @(x) log(x)+(x-1)/x;
x0 = 1.5;
tol = 1e-6;
itmax = 100;
% Grafico della funzione.
fplot(f, [-2, 2], "LineWidth", 2);
grid on;
print graph2.png
% Collezione degli incrementi e relativi grafici.
[errs1] = newton_errors(f, df, x0, 1, tol, itmax);
[errs2] = newton_errors(f, df, x0, 2, tol, itmax);
semilogy(errs1, "red", "LineWidth", 2);
hold on;
semilogy(errs2, "blue", "LineWidth", 2);
hold off;
title(["[rosso] m=1, " "[blu] m=2"]);
xlabel("n");
ylabel("|x_{n+1}-x_n|");
print convergences.png
dove:
- Codice:
function [errs] = newton_errors(f, df, a, m, tol, itmax)
% INPUT:
% f : funzione di cui cercare le radici
% df : derivata prima della funzione f
% a : punto da cui far partire il metodo
% m : molteplicità della radice attesa
% tol : sulla soluzione trovata
% itmax : numero massimo di iterazioni disposti
% a fare per l'approssimazione
% OUTPUT:
% errs : lista degli errori commessi da un passo
% al successivo
iter = 0;
delta = tol+1; % per innescare il loop
while iter < itmax && abs(delta) > tol
iter = iter+1;
delta = m * f(a)/df(a);
a = a-delta;
errs(iter) = abs(delta);
end
end
La prof chiede: come faccio graficamente a stabilire l'ordine del metodo? Io non ho capito (e ad ora non sembra aver letto la risposta). Ho interpretato male la richiesta?