Extras din laborator
Metoda Substitutiei inapoi
1) creati un m-file numit subs_inapoi.m si puneti in el liniile de cod
---------------------------------------------------------
function z=subs_inapoi(a,b)
%metoda substitutiei inapoi, a este matricea sistemului
% b este termenul liber
n=length(b);
z=zeros(n,1);
z(n)=b(n)/a(n,n);
for(i=n-1:-1:1)
s=a(i,i+1:n)*z(i+1:n);
z(i)=mmmmmmmmmmmmmm;
end
--------------------------------------------------------
Intrebari:
1)care e rostul liniei de cod 'z=zeros(n,1);' ?
2) Inlocuiti linia mmmmmmmmmmmmm
din codul de mai sus cu lina de cod potrivita pentru
implementarea algoritmului de substitutie inapoi.
3) verificati ca acest cod merge tiparind la linia de comanda
> a=[1,2,3;0,1,2;0,0,3];
> b=[1;2;3];
>z=subs_inapoi(a,b)
>a*z-b
alternativ, pentru debug puteti introduce in cod
la sfarsit de tot
linia de cod
norm(a*z-b)
care evalueaza norma euclidiana a vectorului a*z-b
Metoda lui Gauss fara pivotare:
Problema 2:
1) creati un m-file numit gauss-lu.m si puneti in el liniile de cod
-----------------------------------------------------------
function z=gauss_lu(a,b)
%metoda lui Gauss fara pivotare,
%a este matricea sistemului
% b este termenul liber
%se cauta x asa ca Ax=b
aext=[a,b];
n=length(b);
z=zeros(n,1);
for(i=1:n-1)
for(j=i+1:n)
m=aext(j,i)/aext(i,i); %m este multiplicatorul
aext(j,i:n+1)=mmmmmmmmmmmmmmmmm;
end
end
z=subs_inapoi(aext(:,1:n),aext(:,n+1));
norm(a*z-b)
-----------------------------------------------------
1) ce credeti ca reprezinta variabila aext? Dar
aext(i,j:n)? Indicatie: definiti o matrice a=[1,2,3;4,5,6;7,8,9]
si apoi execuati a(1,2:3).
2) Inlocuiti in codul de mai sus
linia mmmmmmmmmmmmmmmmmmmmmmm
cu codul corespunzator pentru implementarea metodei lui Gauss fara pivotare.
3) verificati codul tiparind la linia de comanda
>a=[1,2,3; 3,2,1;1,7,1];
>b=[1;2,3];
>z=gauss_lu(a,b);
>a*z-b
o alta verificare
>a=randn(100,100);
>b=randn(100,1);
>tic;gauss_lu(a,b);toc
Preview document
Conținut arhivă zip
- Metode Numerice.doc