تبلیغات
برنامه نویسی متلب MATLAB - حل دستگاه معادلات خطی و غیرخطی در متلب
برنامه نویسی متلب MATLAB
با MATLAB (متلب) هر کاری رو که بخواهید میتونید انجام بدید, هرکاری!

لینکدونی

آرشیو موضوعی

آرشیو

← آمار وبلاگ

  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :

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

به نام خدا

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

 

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

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

 

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) باید ستونی باشد.

 

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

 ال مو یا

حجت
چهارشنبه 18 اردیبهشت 1392
سلام خیلی مطالب مفیدبودن برای اینکه یکی از سوال های امتحانم شبیه مثالتون بود.المرسی
ساناز
سه شنبه 1 اسفند 1391
سلام من یه راهنمایی در مورد حل معادله به شکلax+xb=cکهa,b,cماتریس مختلط اند میخوام اگه ممکنه ایمیل کنید
ملیکا
یکشنبه 22 بهمن 1391
سلام

مطلبتون خیلی مفید بود.خیلی ممنون.

فقط من یه سوال داشتم. اگه یکی از مجهولای من درون سامِیشن بود چطوری باید تابعمو تعریف کنم؟ مثلا شکل زیر رو مشاهده کنید:
http://s3.picofile.com/file/7646405799/Untitled.png

که اینجا u یکی از مجهولات منه.
ممنون میشم اگه راهنمایی کنید.
مرسی
abbasi
پنجشنبه 19 بهمن 1391
با سلام.
متغیر M رو در صورتی که درون function تعریف می کنم error میده که M رو نمی شناسه و در صورتی که بیرونش تعریف کنم error زیر رو میده، مشکل از کجاست؟
Function definitions are not permitted in this context.
ata_ata
پنجشنبه 5 بهمن 1391
کارتون عالیه متشکر
nahid
سه شنبه 26 دی 1391
من یک دستگاه معادلات غیر خطی دارم میتونم درخواست کنو لطف کنید حلش کنید با چه آدرس ایمیلی بفرستمش نهایت تشکر از راهنماییتون
مسعود صاحبکار
جمعه 22 دی 1391
تشکر
f
چهارشنبه 13 دی 1391
واقعا ممنون
شما با این کارتون خمس علمتون رو میدید
اجرتون با خدا
sajad
جمعه 8 دی 1391
salam .kheyli mamnun alie.
hala age bekhaym har javab ro ba andis khodesh moshakhas kone che bayad kard?
masalan x=066667
y=-1.0000 va z=-1.6667
mahshid
شنبه 2 دی 1391
salam
mamnoon az webloge khubetoon
man ye soal dashtam
mitunam benivisam
rahnamayeem konid
dar morede ye barnameye 2majhooli,dar vaghe tabe hast tuye mfile
حمید
چهارشنبه 29 آذر 1391
دمت گرم...سرحال باشی!
حسن
یکشنبه 26 آذر 1391
احسنت
اجرت با امام حسین(علیه السلام)
من
شنبه 25 آذر 1391
خیلی عالی بود. ساده و روان توضیح دادین
haltamti
سه شنبه 21 آذر 1391
عالی بود:)
مهدی
یکشنبه 21 آبان 1391
سلام
وقتی از این دستور استفاده میکنم error زیر و میده
Error in ==> fsolve at 248
fuser = feval(funfcn{3},x,varargin{:});

Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.
وحید
شنبه 20 آبان 1391
سلام
خیلی خیلی ممنون
ولی برای حل NمعادلهNمجهول باید چکار کنیم؟لطفا کمکم کنید
Mr.joker
شنبه 13 آبان 1391
سلام خیلی ممنون.عالی بود خیلی کمکم کرد
farhad
شنبه 13 آبان 1391
khyli khyli thanks
alone monk
شنبه 13 آبان 1391
واقعا مفید و راهگشا بود تشکر فراوان دارم
reza
جمعه 12 آبان 1391
agha vaghean damet garm.
jaber
شنبه 29 مهر 1391
سلام خسته نباشید،من برای اولین بار دارم با تابع fsolve کار میکنم و تقریبا چیزی ازش نمیدونم،منظورم ترتیب وارد کردن دستورات تو پنجره های مربوطشونو ایناست،هرجوری وارد میکنم یه errorری میده،اگه لطف کنید و پایه ای تر و مرحله به مرحله بگید واقعا ممنون میشم.
ahmad
پنجشنبه 27 مهر 1391
خیلی خوب بود دست شما درد نکنه لطف کردید.
داود
جمعه 21 مهر 1391
خیلی ممنوووون
مهدی
یکشنبه 16 مهر 1391
مرسی فوق العاده به دردم خورد..
noora
سه شنبه 24 مرداد 1391
سلام
من یه برنامه به صورت fanction handle نوشتم که در تابع fsolve اونو به همراه بردار اولیه وارد می کنم ولی دستور fsolve به ازای هر ورودی که میدم exitflag=-2
میده و warning زیر را هم میده
Optimization stopped.
Unrecognized exitflag input to createExitMsg.

لطفا راهنمایی کنید باید چه کار کرد که جواب درست گرفت؟
چهارشنبه 11 مرداد 1391
مرسی فراوان
یی
یکشنبه 8 مرداد 1391
ممنون
شنبه 7 مرداد 1391
سلام
معادله DX=Yبا شرط اولیه X(0)=Kكه Kماتریس ثابتی است كه كاربر هنگام اجرای برنامه وارد میكند و Yماتریسی است كه هنگام اجرای برنامه تولید میشودچگونه است. حل عددی مورد نظر نیست( جواب برحسب t باشد) ممنون
hana
پنجشنبه 5 مرداد 1391
بسیار عالی بود. واقعا ممنون. امیدوارم همیشه سالم،موفق و در آرامش زندگی کنید.
با سپاس
محسن
شنبه 31 تیر 1391
عالی بود
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر
 
  • تعداد صفحات :2
  • 1  
  • 2  
 

درباره وبلاگ

مدیر وبلاگ : Elmoya

آخرین پست ها

جستجو

نظرسنجی

  • مطالب این وبلاگ را چگونه یافتید؟



نویسندگان