مطالب جالب

کاری کنیم پیش از آن کز ما نیاید هیچ کار!

حل دستگاه معادلات خطی و غیرخطی در متلب

به نام خدا

در این پست می خواهم حل دستگاه معادلات جبری خطی و غیر خطی به کمک متلب رو بهتون آموزش بدم.

 

حل دستگاه معادلات خطی:

حل دستگاه معادلات خطی در متلب بسیار ساده می باشد و این روش رو در هندسه تحلیلی در پیش دانشگاهی که ما خونده بودیم. فرض کنید دستگاه معادلات زیر را می خواهید حل کنید:

 

2x+3y-4z=5

x+y+z=-2

2x-z=4y+7

 

در ابتدا دستگاه معادلات را به فرم منظم AX=B تبدیل می کنیم که ماتریس A ماتریس ضرایب و بردار B بردار معلومات می باشد. X هم بردار مجهولات خواهد بود.

 

2x+3y-4z=5

x+y+z=-2

2x-4y-z=7

نتیجتا ماتریس A و بردار B برابر خواهند شد با:

 

      2    3  -4

A= 1    1    1

      2  -4   -1

 

      5

B= -2

      7

 

>>A=[2 3 -4;1 1 1;2 -4  -1];

>>B=[5;-2;7];

>> X=A\B

 

X =

    0.6667

   -1.0000

   -1.6667

 

یا

 

>> X=inv(A)*B

 

X =

    0.6667

   -1.0000

   -1.6667

 همانطور که میبینید X دارای یک بردار با 3 مولفه (به اندازه متغیرها) می باشد که مولفه اول جواب x و مولفه دوم جواب y و مولفه سوم جواب z می باشد.

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

 

حل دستگاه معادلات غیر خطی:

حل دستگاه معادلات غیر خطی به سادگی دستگاه معادلات خطی نمی باشد. همانطور که در محاسبات عددی خوانده ایم روشهای حل این گونه دستگاهها روش های تکراری با یک حدس اولیه برای متغیر ها می باشد که روش نیوتن یکی از مهمترین این روشها می باشد.

فرض کنید می خواهیم دستگاه معادله زیر را به کمک متلب حل کنیم:

x^2+sin(y)=10.5

tan(x)-exp(y)=-0.05

 قدم اول: در قدم اول باید همه معادلات را به یک سمت مساوی برده و برابر صفر قرار دهیم:

 x^2+sin(y)-10.5=0

tan(x)-exp(y)+0.05=0

قدم دوم: در قدم دوم باید توجه کنید که باید دستگاه معادلات را به صورت یک function در متلب بنویسیم.

توجه کنید این دستگاه دو معادله و دو مجهول x و y دارد. اما در متلب تمامی مجهولات باید مولفه هایی از یک متغیر باشند. یعنی باید مجهولات را برابر با بردار مجهول M قرار دهیم که بردار M برابر می باشد با:

M=[x y]

در واقع مجهول M(1) همان جواب x و مجهول M(2) همان y می باشد. پس در هنگام نوشتن دستگاه معادلات در function باید به جای x مقدار M(1) و به جای y مقدار M(2) را قرار دهیم.

نکته: باید دو معادله ای را که برابر با صفر قرار دادید در یک بردار به صورت ستونی در function بازنویسی کنید.

 حال با این توضیحات این function را می نویسیم:

 

function  out=myfun(M)

out=[ M(1)^2+sin(M(2))-10.5 ;  tan(M(1))-exp(M(2))+0.05];

 حال به کمک ابن تابع می توانیم این دستگاه معادله را حل کنیم و جواب M را بدست بیاوریم.

دستور حل دستگاه معادلات غیرخطی در متلب دستور fsolve می باشد. ابتدا نحوه نوشتن این دستور را توضیح می دهم:

 fsolve ( function , initial_guess)

 به جای کلمه function شما باید اسم تابع خودتان را به همراه @ بنویسید.

به جاب initial_guess هم باید بردار حدس اولیه برای متغیرهایتان را وارد کنید. فرض کنید که بردار حدس اولیه برای متغیرهایمان به صورت زیر است:

[x0 y0]=[2  -3]

حال می توانیم دستور fsolve را به کار ببریم:

 

>> M=fsolve(@myfun , [2  -3])

Equation solved.

fsolve completed because the vector of function values is near zero

as measured by the default value of the function tolerance, and

the problem appears regular as measured by the gradient.

 

M =

    3.1074         -4.1460

 همانطور که میبینید متلب یک بردار با دو عضو را به شما خواهد داد که عضو اول همان x و عضو دوم همان y می باشد. مسلما اگر دستگاه 4 معادله و 4 مجهول داشته باشید M دارای 4 مولفه خواهد بود.

نکات مهم : 1- روشهای تکراری مثل نیوتن بسیار به حدس اولیه حساس می باشند. چنانچه حدس اولیه خیلی پرت زده شود ممکن است الگوریتم نتواند جوابی برای معادلات بدست آورد!

2- حتما در نوشتن function دقت کنید که خروجی تابع (در اینجا out) باید ستونی باشد.

 

امیدوارم که این پست هم برای شما مفید بوده باشد. خوشحال میشم اگه با نظراتتون منو راهنمایی کنید و اگه انتقاد یا پیشنهادی دارید به من بگید. مرسی

به نقل از:

http://elmoya.mihanblog.com/post/22

+ نوشته شده در  یکشنبه 1391/03/14ساعت   توسط رضا  | 

 
سایت کلاک دات آی آر ساعت تهران و نقاط مختلف جهان