[Matlab] Przekształcić problem własny w problem standardowy

Awatar użytkownika
armand
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 11 lis 2011, o 18:55
Płeć: Mężczyzna
Lokalizacja: Zielonki
Podziękował: 9 razy
Pomógł: 7 razy

[Matlab] Przekształcić problem własny w problem standardowy

Post autor: armand »

Witam...

Mam do napisania taki temat :

Przekształcić uogólniony problem własny
\(\displaystyle{ (A - \lambda_2 B)wektor2=0}\)
w odpowiedni problem standardowy
\(\displaystyle{ (Z - \lambda I)wektorwlasny=0}\)
Macierz A =

Kod: Zaznacz cały

4 1 1
1 6 2
1 2 6
Macierz B =

Kod: Zaznacz cały

6 0 0
0 4 1
0 1 8
wektor x0 początkowy

Kod: Zaznacz cały

1
0
0

Napisać funkcje zawierające:
1. Rozkład Choleskiego A= L L(')
2. Obliczającą macierz Z
3. Znajdującą najmniejszą wartość własną Lambda oraz odpowiadający jej wektor własny x.

Napisałem tak :

Kod: Zaznacz cały

 
function l=chole(A)
n=size(A);
for k=1:n
s=0;
for p=1:k-1
s=s+(l(k,p)^2);
end
l(k,k)=sqrt(A(k,k)-s);
for i=k+1:n
s=0;
for p=1:k-1
s=s+l(i,p)*l(k,p);
end
l(i,k)=(A(k,i)-s)/l(k,k);
end
end
end

function[Z]=StandaryzacjaMacierzy(L,B)
Lto=inv(L);
Lc=(Lto)';
Z=(Lto*B*Lc);
end

function [x,lam,it]= IterOdwrotna(A,n,epsl,epsr)
A=inv(A);
x=[1;0;0];
c=sqrt(x'*x);
u0=x/c;
it=1;
epl=1;
epr=1;
lam0=1;
while (epl>epsl & epr>epsr); 
	x1=A*u0;
	lam1=u0'*x1;
	c=sqrt(x1'*x1);
	u1=x1/c;
	epl=(abs(lam1-lam0))/lam1;
	epr=sqrt((u1-u0)'*(u1-u0));
	it=it+1;
	if	it>200
		printf("proces rozbiezny\n")
		return
	end
lam0=lam1;
u0=u1;
end
lam=1/lam1;
x=u1;
end 

A=[4,1,1;1,6,2;1,2,6]
B=[6,0,0;0,4,1;0,1,8]
L=chole(A)
Z=StandaryzacjaMacierzy(L,B)
[wektorwlasny,lambda,it]=IterOdwrotna(Z,1,0.0000000000001,0.0000000000001)


[C,M]=eig(Z)
lambda2=1/lambda
wektor2=(inv(L))'*(wektorwlasny)




Proszę o jakieś sprawdzenie, nie mam pojęcia czy to dobrze liczy.
Ostatnio zmieniony 7 gru 2012, o 19:36 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
Awatar użytkownika
pyzol
Użytkownik
Użytkownik
Posty: 4346
Rejestracja: 26 kwie 2010, o 11:39
Płeć: Mężczyzna
Lokalizacja: Nowa Ruda
Podziękował: 5 razy
Pomógł: 929 razy

[Matlab] Przekształcić problem własny w problem standardowy

Post autor: pyzol »

Najlepiej sprawdzić używając wbudowanych funkcji. Poszukaj w helpie:

Kod: Zaznacz cały

help eig
help chol
Bądź zajrzyj tam:

Awatar użytkownika
armand
Użytkownik
Użytkownik
Posty: 65
Rejestracja: 11 lis 2011, o 18:55
Płeć: Mężczyzna
Lokalizacja: Zielonki
Podziękował: 9 razy
Pomógł: 7 razy

[Matlab] Przekształcić problem własny w problem standardowy

Post autor: armand »

Sprawdzam w linijce 61, dla macierzy Z się zgadza.
Nie wiem natomiast czy ma się też zgadzać dla macierzy A z problemu uogólnionego.
Awatar użytkownika
pyzol
Użytkownik
Użytkownik
Posty: 4346
Rejestracja: 26 kwie 2010, o 11:39
Płeć: Mężczyzna
Lokalizacja: Nowa Ruda
Podziękował: 5 razy
Pomógł: 929 razy

[Matlab] Przekształcić problem własny w problem standardowy

Post autor: pyzol »

Twój kod powinien działać dla dowolnej macierzy. A najlepiej sprawdzić wynik za pomocą wbudowanych funkcji.
ODPOWIEDZ