Eigenvectoren berekenen

Moderators: dirkwb, Xilvo

Forumregels
(Middelbare) school-achtige vragen naar het forum "Huiswerk en Practica" a.u.b.
Zie eerst de Huiswerkbijsluiter
Reageer

Eigenvectoren berekenen

ik heb een 2x2 matrix waarbij a12 alijd gelijk is aan &21. a11 en a22 veranderen constant.

ik reken de eigenwaarden uit mbv de volgende formule:

double EigenVal1(double m1, double m2, double m3, double m4)

{ return 0.5 * ((m1+m4) + sqrt( (4*m2*m3) + pow((m1 - m4),2))); }

double EigenVal2(double m1, double m2, double m3, double m4)

{ return 0.5 * ((m1+m4) - sqrt( (4*m2*m3) + pow((m1 - m4),2))); }

die worden correct berekend. Vraag is hoe ik uit deze matrix en eigenwaarden de eigenvectoren kan bepalen.

Ik doe gewoon:

(a11 - lan) X1 + a12 X2 = 0

stel X1 = 1 en reken X2 uit.

(rest van de verelijkingen vervalt gewoon want ik heb die niet nodig (?))

De hoek van deze eigenvector is dan atan (X2/X1).

1) Kan dit ?

2) wat doe ik fout

3) heeft er soms iemand van jullie een scriptje/voorbeeld waarmee ik onder C++ eigenvectoren kan berekenen van 2x2 matrices ?

Tkx;

Gebruikersavatar
Berichten: 3.437

Re: Eigenvectoren berekenen

Om de eigenvectoren v uit te rekenen die behoren bij de matrix A, los je gewoon het volgende stelsel op:

det[A - l I] v = 0

waar l de eigenwaarde is, en I de identiteitsmatrix.

Zie ook hier: http://mathworld.wolfram.com/Eigenvector.html
Never underestimate the predictability of stupidity...

Re: Eigenvectoren berekenen

:shock:

Zou je dat iets of wat concreet kunnen uitleggen wat ik moet doen ?

iets in de stijl van:

- eigenwaarden berekenen

- die aftrekken van de diagonale getallen

- ?????? zie ik daar ook ergens een determinant staan ?

en hoe moet ik dat stelsel oplossen ?

Tkx in advance;

Gebruikersavatar
Berichten: 24.578

Re: Eigenvectoren berekenen

Ik heb een voorbeeld even voor je uitgewerkt.

Om het eenvoudig te houden zal ik een 2x2 matrix A diagonaliseren.

Daarvoor stel je de karakteristieke determinant op, stelt die gelijk aan 0 om dan daaruit de karakteristieke veelterm op te stellen waar je dan de eigenwaarden kan uithalen:

Afbeelding

Dan moet je voor elke eigenwaarde dat stelsel (A-eI)X = 0 oplossen waarbij ik 'e' de eigenwaarde bedoel en I de eenheidsmatrix. Dit ziet er misschien ingewikkeld uit, maar het komt er in feite op neer dat je in die karakteristieke determinant twee keer de gevonden eigenwaarde gaat invullen (en dus aftrekken van de hoofddiagonaal). We hebben nu echter niet meer de determinant nodig, maar de oplossingen van het stelsel waarbij we die matrix gelijk stellen aan 0. Dit kan gewoon door een kolom nullen toe te voegen.

Daaruit haal je dan steeds een eigenvector, die overigens op een evenredigheidsfactor na bepaald is.

Afbeelding

De diagonalisatie van de matrix A voldoet aan:

A = P*D*P-1

Waarbij A de originele matrix is, D de diagonaalmatrix met op de hoofddiagonaal de eigenwaarden en P de matrix met in de kolommen de eigenvectoren. (P-1 is hier uiteraard de inverse van)

Afbeelding

Je hebt nu de eigenwaarden en bijbehorende eigenvectoren berekend en de matrix gediagonaliseerd.

Let wel dat ik een gemakkelijk voorbeeld heb genomen om de methode te illustreren. Je kan namelijk verschillende 'problemen' tegenkomen en een matrix is ook niet altijd te diagonaliseren.

Gebruikersavatar
Berichten: 1.460

Re: Eigenvectoren berekenen

Hulde voor TD voor deze visuele uitleg.

Alleen heeft hosti nog steeds zijn code niet in C++, maar beste hosti, ik zou daar niet teveel op rekenen. Er zijn weinig pcfreaks voor wat betreft programmeren hier...
<i>Iets heel precies uitleggen roept meestal extra vragen op</i>

Gebruikersavatar
Berichten: 24.578

Re: Eigenvectoren berekenen

Van C++ ken ik helaas niets maar het lijkt me belangrijk dat je de wiskunde erachter alvast begrijpt.

Overigens is het m'n ervaring dat methodes gewoonlijk veel duidelijker worden met een 'praktijkvoorbeeld' dan a.d.v. de theorie.

Gebruikersavatar
Berichten: 1.460

Re: Eigenvectoren berekenen

TD schreef:Van C++ ken ik helaas niets maar het lijkt me belangrijk dat je de wiskunde erachter alvast begrijpt.

Overigens is het m'n ervaring dat methodes gewoonlijk veel duidelijker worden met een 'praktijkvoorbeeld' dan a.d.v. de theorie.
C++ is mij net zo vreemd als D-- (grapje), maar idd TD, voorbeelden zijn vaak de elementaire dingen waardoor het voor een grote groep duidelijk wordt.
<i>Iets heel precies uitleggen roept meestal extra vragen op</i>

Gebruikersavatar
Berichten: 3.437

Re: Eigenvectoren berekenen

Voor een mooi algoritme in C (helaas niet in C++), kan je eens in Numerical Recipies bladeren. Dit is de "bijbel" voor elke fysicus/mathemaat die grootschalig rekent. :shock:
Never underestimate the predictability of stupidity...

Re: Eigenvectoren berekenen

Allemaal super hard bedankt. Deze uitleg zou mij al een eindje verder moeten helpen. Vooral de hierbovenstaande link komt me zeer goed van pas. Daarin staat de methode vermeld die ik zou willen toepassen (jacobi) maar mijnen C (++) flipt daar helemaal op, om nog maar te zwijgen van windows.

Rest er mij misschien nog 1 vraagje: hoe bereken ik de variantie (van getallen) van een matrix ? Ik dacht gewoon het verschil van de kwadraten maar.....

[ A B C ]

[ X Y Z ]

[ U V W ]

Reageer