حل معادله در متلب- دیگر هیچ معادلهای را دستی حل نکنید
حتما حل معادله درجه 2 را در دوره دبیرستان به خاطر دارید که در آنجا برای حل معادله درجه 2 اصلیترین روش برای محاسبه روش دلتا بود که با آن میتوانستیم ریشههای یک معادله درجه 2 را بدست آوریم. اما اگر معادلات درجه بالاتر بود روشی برای محاسبه آن بصورت کلی وجود نداشت و مجبور بودیم حداقل یکی از ریشهها را حدس بزنیم و از تقسیم معادله اصلی بر معادله جوابی که بدست آوردیم، معادله جدیدی بدست آورده و روند را ادامه دهیم. حل معادلات در متلب به راحتی انجام میشود.
حل معادله به روش تحلیلی برای معادلات درجه 3 به بالا عملا مشکل بوده و روشی کلی برای آن وجود ندارد. بنابراین برای حل معادله درجه 3 در متلب و یا حتی معادلات درجه بالاتر و معادلات غیرخطی باید از روشهای عددی در این نرمافزار استفاده نماییم زیرا انجام این روشها با دست نیازمند تکرار بسیار زیادی میباشد که این کار توسط متلب در زمان بسیار کوتاه انجام میشود.
در این مقاله بنا داریم تا با حل انواع معادلات در متلب بصورت عددی و تحلیلی بطور کامل آشنا شویم. همچنین شما میتوانید از کدهای آماده نوشته شده توسط تیم گام98 که در طول متن آدرس آنها قرار داده شده استفاده نمایید و به راحتی معادلات خود را حل نمایید. در وبلاگ گام98 سایر « آموزش های مقدماتی متلب » نیز قابل مشاهده است.
حل معادله پارامتری در متلب- دستور solve
برای حل معادله پارامتری با متلب دستور solve قرار داده شده است که میتواند انواع معادلات را در متلب بصورت پارامتری حل کند. از این دستور میتوان برای انواع مختلفی از معادلات استفاده کرد و همچنین میتوان برای حل معادله پارامتری در متلب با چندین پارامتر از آن استفاده کرد. نحوه استفاده از این دستور به این صورت است که تابع مورد نظر را به دستور داده و در ادامه متغیری که میخواهیم نسبت به آن معادله حل شود را مشخص کرده و به دستور خواهیم داد.
به عنوان نمونه برای حل معادله پارامتری در متلب یک معادله با دو پارامتر و یک معادله دیگر با یک پارامتر را بیان خواهیم کرد.
1 2 3 |
syms x a b c A=solve(a*x^3+b*x^2+c*x==0,x) B=solve(sin(x)*cos(x)==1,x) |
Answer:
A= 0
(b + (b^2 – 4*a*c)^(1/2))/(2*a)
(b – (b^2 – 4*a*c)^(1/2))/(2*a)
B=asin(2)/2
pi/2 – asin(2)/2
توجه: دستور asin در متلب همان معکوس sin میباشد. همچنین لازم به ذکر است که معادله اول از درجه 3 است و دارای حداکثر 3 جواب میباشد.
شما در گام98 بعنوان فروشگاه آنلاین محصولات آموزشی، میتوانید انواع پروژههای نرمافزار متلب را به همراه فایل کامل توضیحات و الگوریتم حل دانلود نمایید. برای دسترسی به این پروژهها به صفحه « پروژه متلب » مراجعه نمایید.
حل معادله پارامتری در متلب – تنظیمات دستور solve
لازم به توجه است که در صورتی که دستور solve نتواند معادله را بصورت تحلیلی حل کند ( حل معادله بصورت تحلیلی امکان پذیر نباشد ) در صورت امکان حل را بصورت عددی انجام خواهد داد. و در توضیحات جواب این حل را اعلام خواهد کرد. از این دستور برای حل معادله درجه 3 در متلب و درجات بالاتر بصورت پارامتری و تحلیل نیز میتوان بهره برد.
همچنین جواب معادله را میتوان در این دستور با زیر دستوراتی بصورت خاصتر و با جزئیات بیشتری تعیین کرد مثلا به عنوان نمونه میتوانیم فقط ریشههای حقیقی یا مثلا جواب اصلی معادله را دریافت کنیم. بصورت زیر:
1 2 |
C=solve(sin(3*x) + cos(2*x) == 1, x,'PrincipalValue', true) D=solve(x^7 == -1, x, 'Real') |
Answer:
C=0;
D=-1
معادله C پنج جواب دارد که با زیر دستور PrincipalValue ریشه اصلی معادله در متلب گرفته شده که مقدار صفر میباشد.
همچنین برای حل معادله D در متلب با این دستور 7 ریشه بدست میآوریم که فقط عدد 1- ریشه حقیقی معادله میباشد و بقیه ریشهها موهومی (مختلط ) هستند که میتوانیم با زیر دستور Real فقط ریشههای حقیقی معادله را دریافت کنیم که این زیر دستور حل معادله در متلب میتواند بسیار کاربردی در کد نویسیها و مسائل ما باشد.
همچنین زیر دستورات دیگری نیز برای ریشه معادله در متلب با دستور solve تعریف شده است که میتوانید با مراجعه به help نرمافزار و سایت نرمافزار متلب آنها را با توجه به نیاز خود استفاده کنید.
همچنین میتوانیم پارامترها و مشخصات پارامترهای حل را بصورت خروجی از این دستور دریافت کنیم. این کار با گرفتن خروجیهای بیشتر از دستور solve امکان پذیر میباشد. به عنوان مثال برای معادله زیر این کار را انجام داده ایم.
1 |
[solx, parameter, condition ] = solve(cos(3*x) == 0, x, 'ReturnConditions', true) |
Answer:
Solx= pi/6 + (pi*k)/3
Parameter=k
Condition= in(k, ‘integer’)
پارامتر موجود در این مثال k میباشد که مشخصات آن بصورت عدد صحیح است.
حل معادلات در متلب برای توابع چند جملهای – دستور roots
دستور حل معادلات در متلب برای توابع چند جملهای که از آن میتوانیم در حل معادله درجه 3 در متلب و درجات بالاتر استفاده نماییم، بصورت اختصاصی تعریف شده است همانطور که برای مشتق گیری در متلب و انتگرال گیری در متلب داریم. برای بدست آوردن ریشه معادله در متلب برای توابع چند جملهای از دستور roots استفاده میشود که کافی است ضرایب چندجملهای را در این دستور تعریف کرده و ریشههای معادله را بدست آوریم . به عنوان مثال برای معادله زیر، ریشهها را در متلب بدست میآوریم:
1 2 |
a=[5 2 3 -4 0 1]; % (a(x)=5x^5+2x^4+3x^3-4x^2+1=0 ) r=roots(a) |
Answer
r= -0.5099 + 1.0416i
-0.5099 – 1.0416i
-0.4331 + 0.0000i
0.5265 + 0.2571i
0.5265 – 0.2571i
همانطور که مشاهده میشود چون معادله از درجه 5 میباشد، 5 ریشه دارد که فقط یکی از آنها ریشه حقیقی میباشد.
اگر ریشهها را داشته باشیم و بخواهیم معادله متناظر با آنها را بنویسیم از دستور بعدی برای نوشتن معادله در متلب استفاده میکنیم.
برای دانلود کدهای حل انواع معادلات جبری در متلب (شامل روشهای تکرار ساده، نیوتن-رافسون، سکانت، نصف کردن و نابجایی بصورت یکجا) به صفحه « پکیج حل انواع معادلات جبری در متلب » مراجعه کنید.
نوشتن معادله در متلب برای توابع چند جمله ای با استفاده از ریشهها – دستور poly
تا اینجا فرا گرفتیم که چطور ریشه معادلات را بدست آوریم اما در خیلی از مواقع ممکن است ریشهها را داشته باشیم و بخواهیم ببینم که معادله متناظر با آنها چه معادلهای خواهد شد. قطعا خواهید گفت که این کار سادهای است اما اگر چند جواب مختلط داشته باشیم نوشتن معادله ریشهها کار زمانبری خواهد بود.
برای نوشتن معادله در متلب میتوانیم از دستور poly استفاده کنیم که کوتاه شده عبارت polynomial به معنای چندجملهای میباشد. نحوه استفاده از دستور مشابه دستور roots میباشد به این صورت که ریشهها را بصورت یک بردار به دستور poly خواهیم داد. به عنوان مثال برای 6 ریشه زیر معادله متناظر با آن را بدست میآوریم:
1 2 |
r=[2 7 5 -2 -12 -4]; b=poly(r) |
Answer:
b=[1 4 -13 -32 2116 64 -2670]
% b(x)=x^6+4x^5-13x^4-32x^3+2116x^2+64x-2670
همانطور که مشاهده میکنید برای نوشتن معادله در متلب: خروجی ماتریس، ضرایب چند جملهای مورد نظر میباشد که چون 6 ریشه داشتیم 7 ضریب داده شده است که ضریب آخر عدد ثابت معادله چندجملهای میباشد.
اگر به جای بردار در ورودی این دستور به آن ماتریس داده شود خروجی این دستور معادلهای خواهد بود که اگر ریشههای این معادله را بدست آوریم مقادیر ویژهی ماتریس اولیه جوابهای این معادله خواهند بود. به عنوان نمونه برای ماتریس R این موضوع را کنترل میکنیم:
1 2 3 4 |
R=[2 1; 4 -1]; B=poly(R) r1=roots(B); r2=eig(R); |
Answer:
B=[1 -1 -6] % B(x)= x^2-x-6
r1=r2=(3 , -2)
همانطور که مشاهده میکنید اعداد 3 و 2- ریشههای معادله B هستند که همان مقادیر ویژه ماتریس R خواهند بود. برای درک بیشتر این موضوع حتما این مسئله را انجام دهید.
نوشتن معادله در متلب برای ریشههای حقیقی و مختلط با تعداد زیاد با این دستور به راحتی انجام میشود.
حل معادله غیر خطی در متلب – دستور fzero
در عمل بسیاری از معادلاتی که با آن سروکار داریم بصورت خطی یا حتی چندجملهای نخواهند. برای حل معادله غیر خطی در متلب دستور fzero در محیط متلب قرار داده شده است که میتوانیم ریشه توابع غیر خطی را با این دستور بدست آوریم.
برای حل معادله غیر خطی در متلب نحوه استفاده از این دستور به این صورت است که تابع مورد نظر را به دستور داده و یک نقطه شروع برای آن وارد میکنیم که الگوریتم بتواند جستوجو را از آن نقطه شروع کند که اگر این نقطه به جواب نزدیکتر باشد مسلما حل سریعتر و با گام کمتری انجام میگردد.
همچنین ممکن است معادله چندین جواب داشته باشد که در اینصورت مناسب دادن نقطه شروع خیلی میتواند موثر باشد و جوابی که به نقطه شروع نزدیکتر باشد نمایش داده خواهد شد. به عنوان مثال برای تابع زیر خواهیم داشت:
1 2 3 |
f=@(x) cos(x)-log(x^2)-2; ezplot('cos(x)-log(x.^2)-2') R1=fzero(f,1) |
answer
R1=0.5617
R2=fzero(f,-1)
Answer:
R2=-0.5617
همانطور که در شکل زیر هم مشاهده میکنید معادله بالا دو جواب دارد و در اینجا نقطه شروع برای بدست آوردن جواب مورد نظر حائز اهمیت است.
همچنین برای حل معادلات در متلب بصورت عددی میتوانیم به جای یک عدد ثابث از یک بازه استفاده کنیم که در این صورت دستور fzero جستوجو را برای جواب در این بازه انجام خواهد.
مهم: اگر بازه مورد نظر [a b] در نظر بگیریم، شرط لازم برای وجود ریشه در این بازه این است که f(a)*f(b)<0 حتما برقرار باشد. البته این شرط، شرط لازم برای وجود ریشه است و شرط کافی نیست.
برای نمونه مثال زیر را خواهیم داشت:
1 2 3 |
f=@(x) cos(x)-log(x^2)-2; R1=fzero(f,[-0.5 2]) R2=fzero(f,[-2 -0.5]) |
Answer:
R1=0.5617
R2=-0.5617
با توجه به نمودار بالا ملاحظه میفرمایید که بازه طوری انتخاب شده است که ریشه در بازه وجود داشته باشد. لازم به ذکر است که از عدد صفر در بازه نمیتوانیم استفاده کنیم زیرا این عدد در دامنه تابع تعریف نشده است.
حل معادله با متلب بصورت عددی- تنظیمات دستور fzero
برای اعمال برخی از تغییرات در تنظیمات این دستور میتوانیم از دستور optimset استفاده کنیم. به طور کلی این دستور برای تنظیمات تولباکس بهینهسازی است. برای دستور fzero نحوه نمایش جزئیات حل و مقدار خطای حل را میتوانیم تغییر دهیم.
در حالت کلی دستور fzero چهار خروجی نیز میتواند داشته باشد که خروجی اول مقدار جواب (x) ، خروجی دوم مقدار تابع در نقطه جواب که در صورت همگرا بودن با خطای کم برابر صفر خواهد بود. خروجی سوم یک عدد میباشد که نشان دهنده نوع جواب میباشد که به عنوان مثال عدد 1 نشان دهنده همگرا شدن تابع به عدد x میباشد و خروجی چهارم اطلاعات نحوه حل را به ما خواهد داد.
از دستور optimset میتوانیم به عنوان نمونه جزئیات نمایش حل را تغییر دهیم. بصورت زیر:
1 |
options =optimset('Display','iter'); |
همانطور که مشاهده میکنید نحوه نمایش را به iter تغییر دادیم که تکرارها و مسیر حل را تا همگرا شدن به تقریب مورد نظر نشان میدهد. در ادامه این options را به عنوان ورودی سوم به دستور fzero خواهیم داد. همچنین میتوانید جزئیات زیردستورات fzero را در قسمت help نرمافزار متلب یا با search در سایت نرم افزار متلب مطالعه کنید.
برای همان مثال قبل جزئیات کامل حل بصورت زیر است:
1 |
[x fval exitflag output] = fzero(f,1,options) |
x=0.5671
fval=0
exitflag=1
output=
intervaliterations: 9
iterations: 5
funcCount: 23
algorithm:’bisection, interpolation’
message: ‘Zero found in the interval [0.547452, 1.32]’
همچنین روند حل را هم با زیردستور options مشاهده خواهیم کرد که در اینجا برای اجتناب از طولانی شدن متن نیاورده ایم.
با استفاده از روش سکانت دیگر نیازی به مشتق گیری از تابع در روش نیوتن نبوده و به راحتی میتوان معادلات را حل نمود.
حل دستگاه معادلات خطی در متلب بدون دستور و با دستور linsolve
در ادامه حل دستورات حل معادله در متلب اینبار دستگاه معادلات را به کمک نرمافزار متلب حل نماییم.
یک سیستم دستگاه معادلات خطی بصورت زیر است:
که برای حل این دستگاه باید ماتریس ضرایب و بردار ضرایب سمت راست دستگاه را بصورت زیر مشخص نماییم:
R2=-0.5617
یک روش این است که از ماتریس ضرایب سمت چپ معادله با دستور pinv معکوس گرفته و در بردار ضرایب ثابت سمت راست ضرب میکنیم تا مجهولات محاسبه شود.
اما اگر بخواهیم خیلی سریع دستگاه را حل نماییم از دستور linsolve استفاده میکنیم که در ورودی اول ماتریس ضرایب و در ورودی دوم بردار ضرایب سمت راست را گرفته و حل دستگاه را به ما میدهد.
به عنوان یه تمرین مثال زیر را در نظر بگیرید:
1 2 3 |
A = [2 3 1 5; -2 -4 12 1 ; 5 8 -7 1 ; 3 5 -6 9] ; B = [ 10 15 -12 7]' ; X = linsolve(A,B) |
خب امیدوارم حل معادلات در متلب را به خوبی فرا گرفته باشید و بتوانید انواع معادلات خطی و غیرخطی را در متلب به راحتی حل نمایید و امیدوارم این آموزش بتواند برای شما مفید باشد و گامی رو به جلو برای توسعه آموزش متلب باشد. برای دانلود انواع روشهای حل معادلات جبری در متلب بصورت کدنویسیشده، شامل روشهای تکرار ساده، نیوتن-رافسون، سکانت، نصف کردن و نابجایی، به صفحه « کد حل معادلات جبری در متلب » مراجعه کیند.
این مقاله آموزشی به کوشش تیم تولید محتوای علمی و نرمافزاری گام98 در راستای ارتقای دانش شما در استفاده از نرمافزار متلب تولید شده است. درصورتی مفید بودن این مقاله آن را به دوستان و آشنایان خود معرفی نمایید.
مطالب زیر را حتما مطالعه کنید
کار با بردارها در متلب
آموزش کامل انواع دستورات توزیعهای آماری در متلب
در این مقاله قصد داریم انواع دستورات مهم توزیع های آماری در متلب را به همراه رسم انواع توزیعها و برازش با استفاده از توزیع های آماری بیان نماییم.
آموزش صفر تا 100 تحلیل المان میله به روش اجزا محدود
در ادامه دومین سری از آموزشهای روش المان محدود در این مقاله تحلیل المان میله به روش اجزا محدود را همراه با مثال به طور صفر تا صدی آموزش خواهیم داد.
آموزش جامع و کامل تحلیل المان فنر به روش اجزا محدود
در اولین مجموعه از مقالات آموزشی روش اجزا محدود، آموزش جامع و کامل تحلیل المان فنر به روش المان محدود را همراه با مثال برای شما عزیزان بیان خواهیم کرد.
روش اجزا محدود – Finite Element Method
روش اجزا محدود یک روش عددی برای حل مسائل مهندسی و فیزیکی میباشد. در این مقاله به طورکلی با کاربرد، تاریخچه و مراحل حل این روش آشنا خواهیم شد.
آموزش جامع انواع دستورات توزیع نرمال در متلب
در این مقاله انواع دستورات توزیع نرمال در متلب را به شما آموزش میدهیم.همچنین نحوه کار با توزیع های نرمال تک متغیره و چند متغیره را با جزئیات خواهید آموخت.
دیدگاهتان را بنویسید