Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni5 pagine

Algoritmi

Il documento descrive vari algoritmi di matematica numerica, inclusi metodi diretti come la sostituzione in avanti e all'indietro, e metodi iterativi come Jacobi e Gauss-Seidel. Viene anche trattato il metodo di Richardson e il metodo del gradiente precondizionato. Inoltre, il documento include informazioni su polinomi e formule di quadratura per il calcolo degli integrali.

Caricato da

rwfhzzbbt4
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
3 visualizzazioni5 pagine

Algoritmi

Il documento descrive vari algoritmi di matematica numerica, inclusi metodi diretti come la sostituzione in avanti e all'indietro, e metodi iterativi come Jacobi e Gauss-Seidel. Viene anche trattato il metodo di Richardson e il metodo del gradiente precondizionato. Inoltre, il documento include informazioni su polinomi e formule di quadratura per il calcolo degli integrali.

Caricato da

rwfhzzbbt4
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 5

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

Potrebbero piacerti anche