AG FB
Matematica Numerica: Algoritmi
Metodi Diretti
METODO DI SOSTITUZIONE IN AVANTI
function x=fwsub(A,b)
n=length(b);
x = zeros(n,1);
x(1) = b(1) / A(1,1);
for i=2:n
x(i) = (b(i) - A(i,1:i-1)*x(1:i-1)) / A(i,i);
end
METODO DI SOSTITUZIONE ALL’INDIETRO
function x=bksub(A,b)
n=length(b);
x = zeros(n,1);
x(n) = b(n) / A(n,n);
for i=n-1:-1:1
x(i) = (b(i) - A(i,i+1:n)*x(i+1:n)) / A(i,i);
end
Metodi Iterativi
METODO DI JACOBI CON SOMME
function [xn,iter]=myjacobi(A,b,x0,nmax,toll)
xv = x0;
xn = x0;
iter = 0;
err = toll + 1;
normb = norm(b);
while iter < nmax && err > toll
for i=1:n
AG FB
xn(i) = ( b(i) - A(i,[1:i-1,i+1:n])*xv([1:i-1,i+1:n]) )/A(i,i);
end
iter = iter + 1;
err = norm(b - A*xn)/normb;
xv = xn;
end
end
METODO DI GAUSS SEIDEL CON SOMMA
function [xn,iter]=myGS(A,b,x0,nmax,toll)
xv = x0;
xn = x0;
iter = 0;
err = toll + 1;
normb = norm(b);
while iter < nmax && err > toll
for i=1:n
xn(i) = ( b(i) - A(i,[1:i-1])*xn([1:i-1]) - A(i,[i+1:n])*xv([i+1:n]))/
A(i,i);
end
iter = iter + 1;
err = norm(b - A*xn)/normb;
xv = xn;
end
end
RICHARDSON PRECONDIZIONATO
function [x, n] = richardson(A, b, P, x0, tol, nmax, alpha)
r=b-A*x0;
n=0;
err=tol+1;
x=x0;
while n<nmax && err>tol
z=P\r;
x=x+alpha*z;
AG FB
r=b-A*x;
err=norm(r)/norm(b);
n=n+1;
end
end
GRADIENTE PRECONDIZIONATO
function [x, n] = gradiente(A, b, P, x0, tol, nmax)
x=x0;
r=b-A*x;
n=0;
err=tol+1;
while n<nmax && err>tol
z=P\r;
alpha=(z'*r)/(z'*A*z);
x=x+alpha*z;
r=b-A*x;
err=norm(r)/norm(b);
n=n+1;
end
end
VISUALIZZARE FORMA QUADRATICA
clc
clear
close all
A=[4.24 -4.32
-4.32 6.76];
b=[4; 8];
x=linspace(-10,10,80);
y=linspace(-10,10,80);
AG FB
[X,Y]=meshgrid(x,y);
Phi= 0.5* ( A(1,1)*X.^2 + A(2,2)*Y.^2 + 2*A(1,2)*X.*Y ) - b(1)*X - b(2)*Y;
figure();
subplot(1,2,1)
surf(X,Y,Phi,'Lines','no');
VISUALIZZARE CURVE DI LIVELLO E PERCORSO
x0=[-9; -9];
P=eye(2);
tol=10^(-7);
nmax=1000;
[xk1, k] = richardson_iterate(A, b, P, x0, 10^(-7), 1000, 0.05);
subplot(1,2,1)
contour(X,Y,Phi,20);
hold on;
plot(xk1(1,:),xk1(2,:));
axis([-10,10,-10,10]);
Polinomi
POLINOMIO DI LAGRANGE:
c=polyfit(xn,yn,n);
z=polyval(c,punti);
POLINOMIO COMPOSITO LINEARE:
z=interp1(xn,yn,punti);
POLINOMIO CON MINIMI QUADRATI:
c=polyfit(xn,yn,m);
z=polyval(c,punti);
POLINOMIO CON MINIMI QUADRATI:
M=vander(x);
M=M(:,m+1-n:m+1);
c=(M'*M)\M'*y
[Q, R]= qr(M,0);
c=R\Q’*y; (m>n)
c=Q*(R’)\b; (m<n)
AG FB
Integrali
FORMULE DI QUADRATURA DEL PUNTO MEDIO, DEL TRAPEZIO, DI SIMPSON
function [Ipm It Is]= integrali(a,b,N,f)
x=linspace(a,b,N+1);
Ipm=0;
It=0;
Is=0;
for i=1:N
Ipm = Ipm+(x(i+1)-x(i))*f((x(i+1)+x(i))/2);
It = It+0.5*(x(i+1)-x(i))*(f(x(i+1))+f(x(i)));
Is= Is+(1/6)*(x(i+1)-x(i))*(f(x(i+1))+4*f((x(i+1)+x(i))/2)+f(x(i)));
end
end