2017-05-20 13 views
0

ich diewie Macht Methode Matlab verwenden, um den höchsten Eigenwert

power method

erhalten die höchste Eigenwert und seine corrresponding Eigenvektor aus einer randamly Matrix von Matlab (es erzeugt zu verwenden, ich versuche zu bekommen sollte quadratisch sein und die Größe wird vom Benutzer angegeben, kann mir jemand helfen und rate mir, wie ich Anweisungen zu diesem Code ändern/hinzufügen kann, um zu bekommen, was ich brauche? bitte helfen!

function [ v d] = power_method(A) 
% for finding the largest eigen value by power method 
input (' Enter the size n*n matrix A : \n') 
A=single(1*rand(size,size)); 
% loop starts 

while 
    X(: ,k+ 1) = A*X(: ,k); %POWER METHOD formula 
    % normalizing the obtained vector 
    [ v i ] = max(abs(A*X(: ,k+ 1))); 
    E = X(: ,k+ 1); 
    e = E(i,1); 
    X(:,k+1) = X(:,k+1)/e; 
    k = k + 1; 
end 


fprintf (' The largest eigen value after %d itarations is %7.7f \n', k, e) 
disp('and the corresponding eigen vector is ') 
X(: ,k) 
+0

Sie sollten vermeiden oder zumindest zeigen Querbuchungen wie in https://math.stackexchange.com/questions/2288319/power-method-matlab, um Doppelanstrengungen bei Antworten oder Links zu vermeiden. – LutzL

Antwort

0

enter image description here

hier meine Quelle in Delphi (Pascal), können Sie den Algorithmus verwenden

Lambda:=0; 
    Count:=0; 
    Err:=1; 
    for i:=1 to MaxIterasi do 
    begin 

    for k:=1 to n do 
    begin 
    Y[k]:=0; 
    for j:=1 to n do 
    begin 
    Y[k]:=Y[k]+A[k,j]*X[j]; 
    end; 
    end; 


    MaxElement:=0; 
    for j:=1 to n do 
    begin 
    if(abs(Y[j])>abs(MaxElement)) then 
    MaxElement:=Y[j]; 
    end; 

    C1:=MaxElement; 

    for k:=1 to n do 
    Y[k]:=(1/C1)*Y[k]; 


    for k:=1 to n do 
    X[k]:=Y[k]; 

    Lambda:=C1; 
    end; 

GridEigen.Cells[0,n+3]:='Lambda='; 
GridEigen.Cells[1,n+3]:=floattostr(lambda); 
for k:=1 to n do 
begin 
    GridEigen.Cells[k,n+4]:='X'+inttostr(k)+'='+floattostr(X[k]); 
end; 

GridEigen.Cells[n+2,0]:='Result:'; 
GridEigen.Cells[n+2,1]:='Lambda='+floattostr(lambda); 
for k:=1 to n do 
begin 
    GridEigen.Cells[n+2,k+2]:='X'+inttostr(k)+'='+floattostr(X[k]); 
end; 

[enter image description here][1] 
Verwandte Themen