تالار گفتمان مانشت
خطا در نرم افزار متلب - نسخه‌ی قابل چاپ

خطا در نرم افزار متلب - ag13 - 10 فروردین ۱۳۹۳ ۱۱:۴۶ ب.ظ

سلام
نوروز بر همه مبارک.
یه سوال داشتم در مورد نرم افزار متلب:
'' Matrix is singular to working precision"
این هشدار در متلب به چه دلیل است و برای حل آن باید چه کرد؟
D=inv(C'*C)*C'*E
این هشدار برای خط بالاست.
برنامه به صورت زیر است:
G1=input('G1')
G2=input(G2)
for k=1:n
C(2*k-1,Smile=[G1(1,k),G2(1,k),1,0,0,0];
C(2*k,Smile=[0,0,0,G1(1,k),G2(1,k),1];
end
for h=1:n
E(2*h-1,Smile=[G1(2,h)];
E(2*h,Smile=[G2(2,h)];
end
D=inv(C'*C)*C'*E
ممنون

RE: خطا در نرم افزار متلب - Morris - 11 فروردین ۱۳۹۳ ۰۱:۵۶ ب.ظ

لطفا کد ها را در تگ مربوطه قرار دهید.

کد:
G1=input('G1')
G2=input(G2)
for k=1:n
   C(2*k-1,:)=[G1(1,k),G2(1,k),1,0,0,0];
   C(2*k,:)=[0,0,0,G1(1,k),G2(1,k),1];
end
for h=1:n
   E(2*h-1,:)=[G1(2,h)];
   E(2*h,:)=[G2(2,h)];
end
D=inv(C'*C)*C'*E


خطا در نرم افزار متلب - blackhalo1989 - 11 فروردین ۱۳۹۳ ۰۲:۲۶ ب.ظ

احتمالا از دید متلب با دقت خوبی C'*C منفرده.

RE: خطا در نرم افزار متلب - Morris - 12 فروردین ۱۳۹۳ ۱۰:۱۵ ق.ظ

البته مطمئن نیستم مشکل از کجا است ولی کد شما کمی عجیب است.

به این دستور توجه کنید :
کد:
for k=1:n
   C(2*k-1,:)=[G1(1,k),G2(1,k),1,0,0,0];
   C(2*k,:)=[0,0,0,G1(1,k),G2(1,k),1];
end

وقتی مقدار k برابر ۱ باشد، سطر شماره صفر از ماتریس C طلب شده است در حالی که در متلب اندیس ماتریس ها و بردار ها ۱ شمار است.

RE: خطا در نرم افزار متلب - ag13 - 12 فروردین ۱۳۹۳ ۱۲:۴۳ ب.ظ

(۱۲ فروردین ۱۳۹۳ ۱۰:۱۵ ق.ظ)Morris نوشته شده توسط:  البته مطمئن نیستم مشکل از کجا است ولی کد شما کمی عجیب است.

به این دستور توجه کنید :
کد:
for k=1:n
   C(2*k-1,:)=[G1(1,k),G2(1,k),1,0,0,0];
   C(2*k,:)=[0,0,0,G1(1,k),G2(1,k),1];
end

وقتی مقدار k برابر ۱ باشد، سطر شماره صفر از ماتریس C طلب شده است در حالی که در متلب اندیس ماتریس ها و بردار ها ۱ شمار است.
سلام از پاسخ شما ممنون...
در برنامه فوق وقتیk=1است در واقع ماسطر۱از ماتریسkتشکیل میدهیم که سطر اول ماتریس k برابر است با درایه های G .
در برنامه فوق هرگز سطر صفر به وجو نخواهد آمد.

(۱۱ فروردین ۱۳۹۳ ۰۲:۲۶ ب.ظ)blackhalo1989 نوشته شده توسط:  احتمالا از دید متلب با دقت خوبی C'*C منفرده.
سلام
بابت پاسخ به سوال من متشکرم.
با دقت خوبی منفرده یعنی چی؟

(۱۱ فروردین ۱۳۹۳ ۰۱:۵۶ ب.ظ)Morris نوشته شده توسط:  لطفا کد ها را در تگ مربوطه قرار دهید.

کد:
G1=input('G1')
G2=input(G2)
for k=1:n
   C(2*k-1,:)=[G1(1,k),G2(1,k),1,0,0,0];
   C(2*k,:)=[0,0,0,G1(1,k),G2(1,k),1];
end
for h=1:n
   E(2*h-1,:)=[G1(2,h)];
   E(2*h,:)=[G2(2,h)];
end
D=inv(C'*C)*C'*E

nدر برنامه فوق:

[m,n]=size(G1)
و ماتریس های Gدارای ۲ سطر و تعداد دلخواه ستون است.
این هشدار را زمانی میدهد که از inv استفاده کنیم.

RE: خطا در نرم افزار متلب - diligent - 12 فروردین ۱۳۹۳ ۰۳:۳۵ ب.ظ

سلام. میبخشید وسط بحث تون وارد شدم،نخواستم تاپیک جدا ایجاد کنم.
این خطا برای چیه؟

RE: خطا در نرم افزار متلب - ag13 - 12 فروردین ۱۳۹۳ ۰۴:۰۸ ب.ظ

(۱۲ فروردین ۱۳۹۳ ۰۳:۳۵ ب.ظ)diligent نوشته شده توسط:  سلام. میبخشید وسط بحث تون وارد شدم،نخواستم تاپیک جدا ایجاد کنم.
این خطا برای چیه؟
این خطا برای کدوم قسمت از برنامه است؟
فکر کنم مفهومش اینه که بهتره این زسم به عنوان ی تابع اجرا بشه.

RE: خطا در نرم افزار متلب - diligent - 12 فروردین ۱۳۹۳ ۰۵:۰۱ ب.ظ

مال هیچ قسمتی از برنامه نیست؛من داشتم امتحان میکردم ببینم چه جوری میشه توی متلب یه نمودار ترسیم کرد و این اعداد رو بهش دادم.
چیکار باید بکنم؟؟Huh

فهمیدم چرا اینجوریه.
فایل m فایلم رو به اسم plot ذخیره کرده بودم، نام فایل رو عوض کردم درست شد. :-)

RE: خطا در نرم افزار متلب - Morris - 12 فروردین ۱۳۹۳ ۰۵:۲۱ ب.ظ

(۱۲ فروردین ۱۳۹۳ ۱۲:۴۳ ب.ظ)ag13 نوشته شده توسط:  سلام از پاسخ شما ممنون...
در برنامه فوق وقتیk=1است در واقع ماسطر۱از ماتریسkتشکیل میدهیم که سطر اول ماتریس k برابر است با درایه های G .
در برنامه فوق هرگز سطر صفر به وجو نخواهد آمد.



بله حق با شماست.
من اشتباه برداشت کردم.

احتمالا برنامه شما به شکل زیر اجرا شده است که با چنین پیغامی برخورد کرده اید.
این پیغام توسط متد inv ایجاد شده است و معنی آن این است که دترمینان ماتریسی که معکوس آن مطلوب است، برابر صفر شده است و بنابراین معکوس ندارد.
کد:
n = 9;
G1= ones(2,n)
G2= ones(2,n)
for k=1:n
   C(2*k-1,:)=[G1(1,k),G2(1,k),1,0,0,0];
   C(2*k,:)=[0,0,0,G1(1,k),G2(1,k),1];
end
for h=1:n
   E(2*h-1,:)=[G1(2,h)];
   E(2*h,:)=[G2(2,h)];
end
D=inv(C'*C)*C'*E


خطا در نرم افزار متلب - blackhalo1989 - 12 فروردین ۱۳۹۳ ۰۶:۴۴ ب.ظ

کدتون رو تغییر بدید تا نشون بده دترمینان C'*C رو.

RE: خطا در نرم افزار متلب - ag13 - 13 فروردین ۱۳۹۳ ۰۹:۵۸ ب.ظ

(۱۲ فروردین ۱۳۹۳ ۰۵:۲۱ ب.ظ)Morris نوشته شده توسط:  
(12 فروردین ۱۳۹۳ ۱۲:۴۳ ب.ظ)ag13 نوشته شده توسط:  سلام از پاسخ شما ممنون...
در برنامه فوق وقتیk=1است در واقع ماسطر۱از ماتریسkتشکیل میدهیم که سطر اول ماتریس k برابر است با درایه های G .
در برنامه فوق هرگز سطر صفر به وجو نخواهد آمد.



بله حق با شماست.
من اشتباه برداشت کردم.

احتمالا برنامه شما به شکل زیر اجرا شده است که با چنین پیغامی برخورد کرده اید.
این پیغام توسط متد inv ایجاد شده است و معنی آن این است که دترمینان ماتریسی که معکوس آن مطلوب است، برابر صفر شده است و بنابراین معکوس ندارد.
کد:
n = 9;
G1= ones(2,n)
G2= ones(2,n)
for k=1:n
   C(2*k-1,:)=[G1(1,k),G2(1,k),1,0,0,0];
   C(2*k,:)=[0,0,0,G1(1,k),G2(1,k),1];
end
for h=1:n
   E(2*h-1,:)=[G1(2,h)];
   E(2*h,:)=[G2(2,h)];
end
D=inv(C'*C)*C'*E
خیلی ممنون از راهنماییتون
در مورد دیگر ماتریس ها بدون این هشدار عمل میکند.کد مذکور نیز در متلب پاسخی برابر ۲ دارد.

(۱۲ فروردین ۱۳۹۳ ۰۵:۰۱ ب.ظ)diligent نوشته شده توسط:  مال هیچ قسمتی از برنامه نیست؛من داشتم امتحان میکردم ببینم چه جوری میشه توی متلب یه نمودار ترسیم کرد و این اعداد رو بهش دادم.
چیکار باید بکنم؟؟Huh

فهمیدم چرا اینجوریه.
فایل m فایلم رو به اسم plot ذخیره کرده بودم، نام فایل رو عوض کردم درست شد. :-)
Smile

(۱۲ فروردین ۱۳۹۳ ۰۶:۴۴ ب.ظ)blackhalo1989 نوشته شده توسط:  کدتون رو تغییر بدید تا نشون بده دترمینان C'*C رو.
این برنامه به طور کامل اجرا می شود فقط این هشدار را در زمان inv گرفتن میدهد که به دلیل ماتریس های ورودی بود.
ممنون بابت راهنمایی هاتون.

RE: خطا در نرم افزار متلب - Morris - 15 فروردین ۱۳۹۳ ۱۱:۲۷ ب.ظ

سلام دوست عزیز. لطفا سوال خود را در موضوعی جدید مطرح کنید. هر موضوع، یک سوال!!!