دانشجویان مهندسی صنایع

Industrial Engineering Students

دانشجویان مهندسی صنایع

Industrial Engineering Students

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

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

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

 

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.

<stopping criteria details>

 

M =

    3.1074         -4.1460

 

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

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

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

نظرات 21 + ارسال نظر
علیرضا جلالی چهارشنبه 8 خرداد 1392 ساعت 01:42 http://ferdosi-toosi.blogsky.com/

ممنون مهندس

هما پوراسفندیانی چهارشنبه 8 خرداد 1392 ساعت 08:10

ممنون

معصومه اکبری چهارشنبه 8 خرداد 1392 ساعت 11:20

خیلی ممنون

ازاده سهرابی نژاد پنج‌شنبه 9 خرداد 1392 ساعت 12:49

muchas gracias senior vafaii

مریم جمعه 6 دی 1392 ساعت 22:30

سلام
بچه ها میشه یکیتون کد مربوط به این برنامه رو برام بنویسید<اخه من خیلی با تابع ها هم اشنا نیستم
مرسی

امیر یکشنبه 22 دی 1392 ساعت 19:49

سلام من ام فایل حل دستگاه 8 معادله 8 مجهول به روش نیوتن رو میخام کسی داره برام بفرسته ممنون میشمafshin_dj55@yahoo.com

amir.logano دوشنبه 25 فروردین 1393 ساعت 16:52

salam bacheha kasi mitone to hamin mozoe f solve b man komak kone man kodesho neveshtam faghat b man eror mide

emaile man hast amir_mesh22@yahoo.com

cezar یکشنبه 11 خرداد 1393 ساعت 07:54

عاااااالی بود، مرســـــــــــــــــتی

سارا سه‌شنبه 27 خرداد 1393 ساعت 01:53

خیلی مفید بود ممنون

fateme چهارشنبه 1 مرداد 1393 ساعت 23:10

اگه تعداد معادلات کمتر از تعداد مجهولات باشد می توان از دستور solve استفاده کرد

sudii جمعه 3 مرداد 1393 ساعت 16:52

mishe bedune hadse avalye dastgaho hal kard,gofte shode ba raveshe kamtarin morabaat,age komakam konid mamnu misham...

معمولا حدس اولیه 0 است.
قاسم

احمد دوشنبه 13 مرداد 1393 ساعت 02:41

فدات

محسن پنج‌شنبه 23 مرداد 1393 ساعت 19:45

سلام. من می خواهم fsolve رو داخل یک حلقه قرار بدم و ضرایب معادله غیر خطی که یک معادله درجه دو هست هر بار متفاوت ه. داخل تابع چطور می تونم متغیرها رو فراخوانی کنم؟ ممنون

مائده جمعه 9 آبان 1393 ساعت 00:21

سلام
ممنون از راهنمائیاتون
یه سوال متلبی داشتم امیدوارم فرصت داشته باشید که جواب بدید
من با یه تعدادی(حدود 100تا) مختصات [x,y] یه شکل لوبیائی رو تو متلب پلات کردم. حالا میخوام این لوبیاهه از هر طرف به اندازه 10 پیکسل بزرگ بشه و مختصات جدید رو دوباره پلات کنم.
خودم چندتا ایده به ذهنم رسیده و کدشو نوشتم، ولی جواب چندان درستی نمیده.
میخواستم ببینم شما نظری ندارید؟خیلی درگیرش شدم.اگر کمک کنید ممنون میشم.

مصطفی پنج‌شنبه 15 آبان 1393 ساعت 11:29

با سلام .متشکرم.

فرگل شنبه 2 خرداد 1394 ساعت 13:13

سلام
اگه AX=B باشه، X=B/A که شما نوشتین X=A/B
اصلاح بفرمایید

فاطمه دوشنبه 4 خرداد 1394 ساعت 09:50

سلام،فرگل جان درست نوشتن،برای ماتریس بایدبه همین شکل بنویسیم

ارام سه‌شنبه 19 خرداد 1394 ساعت 10:54

سلام
حل دستگاه دو معادله و دو مجهول غیرخطی به روش نیوتن چطوره؟

محمد چهارشنبه 12 آبان 1395 ساعت 19:14

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

Aliye پنج‌شنبه 18 آذر 1395 ساعت 10:34

سلام لطفا حل معادلهAx=Bرا به روش ماتریس معکوس در متلب بزارین.ممنون

سمی شنبه 24 فروردین 1398 ساعت 20:24

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

ایمیل شما بعد از ثبت نمایش داده نخواهد شد