wasyl
Administrator
Dołączył: 03 Lut 2006
Posty: 17
Przeczytał: 0 tematów
Ostrzeżeń: 0/5 Skąd: Żywiec
|
Wysłany: Sob 11:32, 25 Mar 2006 Temat postu: Metody numeryczne 2 |
|
|
Metoda Gausa Jordana + rozwiazanie układu + wykres
function x=metgj(A,B,n)
for i=1:n
s=A(i,i);
for j=1:n
A(i,j)=A(i,j)/s;
endfor
B(i)=B(i)/s;
for k=1:n
if k!=i
s=A(k,i);
for j=1:n
A(k,j)=A(k,j)-A(i,j)*s;
endfor
B(k)=B(k)-B(i)*s;
endif
endfor
endfor
x=B;
endfunction
%Podanie danych do A*x=B
A=[1 -1 ;0 1;6 -1;3 1];
B=[0;4;-4;4];
%metoda najmniejszych kwadratow
S=A'*A;
t=A'*B;
x=metgj(S,t,2);
%sprawdzenie
r=A*x-B;
if max(abs(r))>1.e-9
printf("Pseudorozwiazanie");
printf("a=%f b=%f",x(1),x(2));
else
printf("Rozwiazanie");
printf("a=%f b=%f",x(1),x(2));
endif
%rysunek
gset xlabel"x";
gset ylabel"y";
a=[-5 2];
y1=a;
y2=[4,4];
y3=6*a+4;
y4=4-3*a;
plot(x(1), x(2),'*');hold on;
plot(a,y1);hold on;
plot(a,y2);hold on;
plot(a,y3);hold on;
plot(a,y4);hold off;grid;pause
Metoda Iteracji odwrotnej
A=[1 -1 0;-2 4 -2;0 -1 2];
function[x,lambda]=met_iteracji_odwrotnej(A)
xk=[1 0 0];
lamk=0;
c=(xk*xk')^(1/2);
uk=xk'/c;
epsL=1;
epsR=1;
iter=1;
A=inv(A);
while (epsL>1.e-6) && (epsR>1.e-6)
xk1=A*uk;
lamk1=uk'*xk1;
c=(xk1'*xk1)^(1/2);
uk1=xk1/c;
epsL=abs((lamk1-lamk)/lamk1);
epsR=((uk1-uk)'*(uk1-uk))^(1/2);
iter=iter+1;
if (iter>200)
printf("proces jest rozbieżny\n");
exit;
endif
lamk=lamk1;
uk=uk1;
endwhile
lambda=1/lamk1;
x=uk1;
endfunction
%wywołanie
[x,lambda]=met_iteracji_odwrotnej(A)
[x,lambda]=eig(A)
Post został pochwalony 0 razy
|
|