ش | ی | د | س | چ | پ | ج |
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
حل دستگاه معادلات خطی:
حل دستگاه معادلات خطی در متلب بسیار ساده می باشد و این روش رو در هندسه تحلیلی در پیش دانشگاهی که ما خونده بودیم. فرض کنید دستگاه معادلات زیر را می خواهید حل کنید:
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) باید ستونی باشد.
ممنون مهندس
ممنون
خیلی ممنون
muchas gracias senior vafaii
سلام
بچه ها میشه یکیتون کد مربوط به این برنامه رو برام بنویسید<اخه من خیلی با تابع ها هم اشنا نیستم
مرسی
سلام من ام فایل حل دستگاه 8 معادله 8 مجهول به روش نیوتن رو میخام کسی داره برام بفرسته ممنون میشمafshin_dj55@yahoo.com
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
عاااااالی بود، مرســـــــــــــــــتی
خیلی مفید بود ممنون
اگه تعداد معادلات کمتر از تعداد مجهولات باشد می توان از دستور solve استفاده کرد
mishe bedune hadse avalye dastgaho hal kard,gofte shode ba raveshe kamtarin morabaat,age komakam konid mamnu misham...
معمولا حدس اولیه 0 است.
قاسم
فدات
سلام. من می خواهم fsolve رو داخل یک حلقه قرار بدم و ضرایب معادله غیر خطی که یک معادله درجه دو هست هر بار متفاوت ه. داخل تابع چطور می تونم متغیرها رو فراخوانی کنم؟ ممنون
سلام
ممنون از راهنمائیاتون
یه سوال متلبی داشتم امیدوارم فرصت داشته باشید که جواب بدید
من با یه تعدادی(حدود 100تا) مختصات [x,y] یه شکل لوبیائی رو تو متلب پلات کردم. حالا میخوام این لوبیاهه از هر طرف به اندازه 10 پیکسل بزرگ بشه و مختصات جدید رو دوباره پلات کنم.
خودم چندتا ایده به ذهنم رسیده و کدشو نوشتم، ولی جواب چندان درستی نمیده.
میخواستم ببینم شما نظری ندارید؟خیلی درگیرش شدم.اگر کمک کنید ممنون میشم.
با سلام .متشکرم.
سلام
اگه AX=B باشه، X=B/A که شما نوشتین X=A/B
اصلاح بفرمایید
سلام،فرگل جان درست نوشتن،برای ماتریس بایدبه همین شکل بنویسیم
سلام
حل دستگاه دو معادله و دو مجهول غیرخطی به روش نیوتن چطوره؟
خیلی ممنون از راهنماییتان. اگه ممکنه حالتی را هم بگید که برای یک متغیر عددی لحاظ کنیم که در حین برنامه عدد ثابت بشه.
سلام لطفا حل معادلهAx=Bرا به روش ماتریس معکوس در متلب بزارین.ممنون
من یه دستگاه معادلات غیر خطی دارم با fsolve حلش کردم ولی جواب درست نمیده با تغییر مقدار اولیه هم عوض میشه