بردار های ویژه به صورت یکامتعامد و یافتن اولیه آن

skyzare

عضو جدید
ا سلام .

اساتید فرض کنید یه ماتریس A داریم و بردارهای ویژه اش و مقادیر ویژه اش رو به دست اوردیم . مثلا مثل زیر :

الان ستون های Eigenvector در واقع بردارهای ویژه ماتریس A هستند و ستون ها Eigenvalue هم مقادیر ویژه ماتریس A هستند . ( البته فقط همون عدد غیر صفرش )

ولی این بردار های ویژه یه صورت یکامتعامد هست به نظرتون چه جوری میشه فهمید اون بردار اصلی چی بوده که بعد از یکامتعامد این جوری شده ؟



PHP:
>> A=[2 1 0 ; 1 2 0 ; 0 0 1 ]

A =

     2     1     0
     1     2     0
     0     0     1

>> [Eigenvector  Eigenvalue ]=eig(A)

Eigenvector =

   -0.7071         0    0.7071
    0.7071         0    0.7071
         0    1.0000         0


Eigenvalue =

     1     0     0
     0     1     0
     0     0     3





 

Bahman_mech

عضو جدید
کاربر ممتاز
درود بر شما.از همون روش معمول اگه بردار ویژه رو به دست بیارید به جواب میرسید.وقتی خود ماتریس رو دارید نیازی نیست که از بردار ویژه نرمالایز شده (منظورم همون یکا متعامده)به بردار ویژه قبل از نرمالایز برسید.
 

skyzare

عضو جدید
درود بر شما.از همون روش معمول اگه بردار ویژه رو به دست بیارید به جواب میرسید.وقتی خود ماتریس رو دارید نیازی نیست که از بردار ویژه نرمالایز شده (منظورم همون یکا متعامده)به بردار ویژه قبل از نرمالایز برسید.

با سلام .
با تشکر از شما .
میدونم توی محاسبه دستی مشکلی ندارم . ولی حالا میخوام بدونم چه جوری میتونم اون حالت اولیه بردار رو به دست بیارم . اخه این نرم افزار متلب حالت یکامتعامد رو میده .
 

skyzare

عضو جدید
در واقع هدفم این هست که یه برنامه ای باشه که جوابش یکامتعامد نباشه معمولی باشه . من الان خودم یکی توی نت دیدم از توی جزوه یکی از اساتید بود . ولی این برنامه نمیدونم چرا به بعضی از ماتریس ها جواب نمیده در صورتی که درست هم هست . خودم که تحلیلش کردم مشکلی نداشت نمیدونم چرا متلب خطا میده . میگه ابعاد یکسان نیست .

نگاه کنید این برنامه ای بود که نوشته بود :




PHP:
function [ v , l] =myeig(A)
%Calculate Eigenvalue and Eigenvector
l=eig(A)
n=size(l,1)
v=zeros(size(A))
for i=1:n
    v(:,i)=null(l(i)*eye(size(A))-A,'r') 
end
end


الان مثلا این برنامه رو به یه ماتریس میدم جواب میده مشکلی نداره حتی با وجود این که مقادیر ویژه تکراری هست مثلا :




PHP:
>> A

A =

     6     3    -8
     0    -2     0
     1     0    -3

>> [V L]=myeig(A)

V =

     8     1     1
     0     0     0
     1     1     1


L =

     5
    -2

    -2

ولی مثلا به این ماتریس خطا میده :

PHP:
>> B=[2 1 0 ; 1 2 0 ; 0 0 1 ]

B =

     2     1     0
     1     2     0
     0     0     1

>> [V L]=myeig(B)
Subscripted assignment dimension mismatch.

Error in myeig (line 7)
    v(:,i)=null(l(i)*eye(size(A))-A,'r') ;


برنامه اش هم به ظاهر مشکلی نداره .
 
آخرین ویرایش:

(هادی)

کاربر فعال تالار ریاضی ,
سلام
تستش کردم
مشکلش اینه که وقتی دو تا از مقدار ویژه ها یکی میشن، اون ماتریسی که می خواد فضای تهیش رو حساب کنه "بعضی وقتا" رنکش دو تا کم میشه.
یعنی کرنل اون دوبعدی میشه و دیگه توی بردار v:),i) جا نمیشه
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
ا سلام .

اساتید فرض کنید یه ماتریس A داریم و بردارهای ویژه اش و مقادیر ویژه اش رو به دست اوردیم . مثلا مثل زیر :

الان ستون های Eigenvector در واقع بردارهای ویژه ماتریس A هستند و ستون ها Eigenvalue هم مقادیر ویژه ماتریس A هستند . ( البته فقط همون عدد غیر صفرش )

ولی این بردار های ویژه یه صورت یکامتعامد هست به نظرتون چه جوری میشه فهمید اون بردار اصلی چی بوده که بعد از یکامتعامد این جوری شده ؟



PHP:
>> A=[2 1 0 ; 1 2 0 ; 0 0 1 ]

A =

     2     1     0
     1     2     0
     0     0     1

>> [Eigenvector  Eigenvalue ]=eig(A)

Eigenvector =

   -0.7071         0    0.7071
    0.7071         0    0.7071
         0    1.0000         0


Eigenvalue =

     1     0     0
     0     1     0
     0     0     3






عجبا! یک سؤال کوتاه پرسیدید، که این همه اشکال داره.
ـ اول اینکه مقادیر ویژه اعداد روی قطر اصلی دومین ماتریس خروجی متلب هستند.
ـ دوم اینکه متلب بردارهای ویژه یک ماتریس رو به صورت یکامتعامد نمیده، بلکه به صورت یکه میده؛ دلیل اون برداشتتون اینه که شما ماتریس متقارن استفاده کردید، و خروجی متلب به ناچار یکامتعامد در اومده.
ـ سوم اینکه بردارهای ویژه یک ماتریس یگانه نیستند که بشه بگی قبلش چی بودن. به عبارت دیگه اگر 10 نفر بردارهای ویژه یک ماتریس رو به دست بیارن و جواب همشون هم درست باشه ممکنه هیچ کدوم از دو جوابی یک جور نباشه. همیشه هر مضرب ناصفری از یک بردار ویژه یک ماتریس، بردار ویژه ای از همون ماتریسه. اگه هدفت اینه که بردارهای ویژه رو با عددهای روند و سرراست (البته در صورت امکان) نشون بدی، می تونی از این خاصیت استفاده کنی.

نمونه:
کد:
A=[6 3 -8; 0 -2 0; 1 0 -3]
[V,D]=eig(A)

A =
     6     3    -8
     0    -2     0
     1     0    -3
V =
    0.9923    0.7071    0.7071
         0         0    0.0000
    0.1240    0.7071    0.7071
D =
     5     0     0
     0    -2     0
     0     0    -2

VA=V./repmat([V(3,1),V(1,2),V(1,3)],length(V),1)

VA =

    8.0000    1.0000    1.0000
         0         0    0.0000
    1.0000    1.0000    1.0000

کد:
B=[2 1 0 ; 1 2 0; 0 0 1]
[V,D]=eig(B)

B =
     2     1     0
     1     2     0
     0     0     1
V =
   -0.7071         0    0.7071
    0.7071         0    0.7071
         0    1.0000         0
D =
     1     0     0
     0     1     0
     0     0     3

VB=V./repmat([V(2,1),V(3,2),V(1,3)],length(V),1)

VB =

    -1     0     1
     1     0     1
     0     1     0

 

skyzare

عضو جدید
سلام
تستش کردم
مشکلش اینه که وقتی دو تا از مقدار ویژه ها یکی میشن، اون ماتریسی که می خواد فضای تهیش رو حساب کنه "بعضی وقتا" رنکش دو تا کم میشه.
یعنی کرنل اون دوبعدی میشه و دیگه توی بردار v:),i) جا نمیشه

با سلام .

با تشکر از شما .

اره دقیقا همین جوری هست که شما فرموید . الان توی همین مورد دومی هم همین اتفاق میفته . حالا باید یه کاری کرد که اگه متلب پایه های فضای پوچ رو که داد اگه بیشتر از 1 بود فقط یکی اش رو انتخاب کنه . حالا میخوام بدونم فرقی که نداره کدام رو انتخاب کنم ؟
 

skyzare

عضو جدید
عجبا! یک سؤال کوتاه پرسیدید، که این همه اشکال داره.
ـ اول اینکه مقادیر ویژه اعداد روی قطر اصلی دومین ماتریس خروجی متلب هستند.
ـ دوم اینکه متلب بردارهای ویژه یک ماتریس رو به صورت یکامتعامد نمیده، بلکه به صورت یکه میده؛ دلیل اون برداشتتون اینه که شما ماتریس متقارن استفاده کردید، و خروجی متلب به ناچار یکامتعامد در اومده.
ـ سوم اینکه بردارهای ویژه یک ماتریس یگانه نیستند که بشه بگی قبلش چی بودن. به عبارت دیگه اگر 10 نفر بردارهای ویژه یک ماتریس رو به دست بیارن و جواب همشون هم درست باشه ممکنه هیچ کدوم از دو جوابی یک جور نباشه. همیشه هر مضرب ناصفری از یک بردار ویژه یک ماتریس، بردار ویژه ای از همون ماتریسه. اگه هدفت اینه که بردارهای ویژه رو با عددهای روند و سرراست (البته در صورت امکان) نشون بدی، می تونی از این خاصیت استفاده کنی.

نمونه:
کد:
A=[6 3 -8; 0 -2 0; 1 0 -3]
[V,D]=eig(A)

A =
     6     3    -8
     0    -2     0
     1     0    -3
V =
    0.9923    0.7071    0.7071
         0         0    0.0000
    0.1240    0.7071    0.7071
D =
     5     0     0
     0    -2     0
     0     0    -2

VA=V./repmat([V(3,1),V(1,2),V(1,3)],length(V),1)

VA =

    8.0000    1.0000    1.0000
         0         0    0.0000
    1.0000    1.0000    1.0000

کد:
B=[2 1 0 ; 1 2 0; 0 0 1]
[V,D]=eig(B)

B =
     2     1     0
     1     2     0
     0     0     1
V =
   -0.7071         0    0.7071
    0.7071         0    0.7071
         0    1.0000         0
D =
     1     0     0
     0     1     0
     0     0     3

VB=V./repmat([V(2,1),V(3,2),V(1,3)],length(V),1)

VB =

    -1     0     1
     1     0     1
     0     1     0


با سلام .

ممنون از پاسخ جامع و کامل شما .

شرمنده خیلی کلی اون دستور repmat چی هست ؟
 

(هادی)

کاربر فعال تالار ریاضی ,
با سلام .

با تشکر از شما .

اره دقیقا همین جوری هست که شما فرموید . الان توی همین مورد دومی هم همین اتفاق میفته . حالا باید یه کاری کرد که اگه متلب پایه های فضای پوچ رو که داد اگه بیشتر از 1 بود فقط یکی اش رو انتخاب کنه . حالا میخوام بدونم فرقی که نداره کدام رو انتخاب کنم ؟

اگه یکیش رو انتخاب کنی یکی دیگه رو از دست میدی که!
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
با سلام .

ممنون از پاسخ جامع و کامل شما .

شرمنده خیلی کلی اون دستور repmat چی هست ؟

دستور زیر رو در نظر بگیرید
کد:
B = repmat(A,m,n)

اگر ماتریس A رو مثل یک درایه برای ماتریس B در نظر بگیرید، B دارای m سطر و n ستون است. به عنوان نمونه
کد:
B = repmat(A,2,3)

به معنی زیر است

 
بالا