حل معادلات، در متلب (MATLAB) (در نسخه های قدیمی)
در متلب، می توان با دو دستور solve یا fzero ، معادلات شامل متغیرها را حل نمود.
دستور
solve
در نسخه های قدیمی متلب (MATLAB)، تعریف معادلات را به صورت ذکر شده در بین علامت های
'
دریافت می کرد (مثل کد
solve('x+2*y=7','x-y=1')
)، اما در نسخه های جدید متلب (MATLAB)، دیگر علامت
'
در تعریف معادله به کار نمی رود و به جای آن، از دستور
syms
برای تعریف متغیرها به صورت سمبلیک (Symbolic) و همچنین ازعلامت های
==
در تعریف معادله استفاده می شود (مثل کدهای
syms x y
و
solve(x+2*y==7, x-y==1)
).
با توجه به این نکته، این آموزش برای نسخه های قدیمی متلب (MATLAB) است.
دستور solve :
دستور solve در متلب، برای حل معادلات چندجمله ای به کار می رود.
نتیجه :
5^(1/2) + 1
1 – 5^(1/2)
دقت شود که معادله باید بین علامت ' قرار بگیرد.
دو پاسخ معادله در خروجی نمایش داده شده است. دو پاسخ معادله، پاسخ های دقیق معادله می باشند و چنانچه بخواهیم آنها را به صورت عددی ببینیم باید دستور double(ans) و یا vpa(ans) را اجرا کنیم. به عنوان مثال با دستور double داریم :
B=double(A)
نتیجه :
5^(1/2) + 1
1 - 5^(1/2)
B =
3.2361
-1.2361
و با دستور vpa داریم :
B=vpa(A)
نتیجه :
5^(1/2) + 1
1 - 5^(1/2)
B =
3.2360679774997896964091736687313
-1.2360679774997896964091736687313
دستور solve همچنین قادر است که معادلات شامل دو متغیر را حل نماید :
نتیجه :
exp(2*x - 1)
دقت شود چون می خواهیم متغیر y را بر حسب x به دست آوریم، باید عبارت 'y' را پس از معادله بنویسیم .
چنانچه دو معادله بر حسب x و y داشته باشیم، آنگاه می توان مقادیر دو متغیر x و y را به دست آورد :
نتیجه :
2*2^(1/2) + 1
1 - 2*2^(1/2)
y =
4*2^(1/2) + 7
7 - 4*2^(1/2)
این دو معادله دارای دو سری پاسخ است، پاسخ سری اول x(1) و y(1) و پاسخ سری دوم x(2) و y(2) می باشد. چنانچه پاسخ اول مورد نظر ما باشد، می نویسیم :
y1=y(1)
نتیجه :
2*2^(1/2) + 1
y1 =
4*2^(1/2) + 7
دقت شود که در کد قبل، پاسخ دو معادله را به بردار [x,y] نسبت دادیم و پاسخ ها در خروجی نمایش داده شدند. چنانچه پاسخ دو معادله را به بردار [x,y] نسبت ندهیم، آنگاه پاسخ ها در خروجی نمایش داده نمی شوند :
نتیجه :
x: [2x1 sym]
y: [2x1 sym]
برای دیدن مقادیر بردارهای x و y ، کافی است که دستورات solution.x و solution.y را اجرا کنید :
y=solution.y
نتیجه :
2*2^(1/2) + 1
1 - 2*2^(1/2)
y =
4*2^(1/2) + 7
7 - 4*2^(1/2)
پاسخ سری اول solution.x(1) و solution.y(1) و پاسخ سری دوم solution.x(2) و solution.y(2) می باشد. چنانچه پاسخ اول مورد نظر ما باشد می نویسیم :
y1=solution.y(1)
نتیجه :
2*2^(1/2) + 1
y1 =
4*2^(1/2) + 7
برخی معادلات نمی توانند به صورت سمبلیک حل شوند و در اینگونه موارد دستور solve سعی می کند که یک حل عددی را بیابد. به مثال زیر توجه کنید :
نتیجه :
1.1060601577062719106167372970301
در بعضی موارد، معادله بیش از یک پاسخ دارد و دستور solve پاسخی را برمی گرداند که مد نظر ما نبوده است. به عنوان مثال :
معادله زیر را در نظر بگیرید :
\[ {e^{ - x}} = \sin (x) \]معادله را با استفاده از دستور solve حل می کنیم :
نتیجه :
0.5885327439818610774324520457029
به شکل زیر توجه کنید :
با توجه به شکل بالا، پاسخ دیگری مد نظر ما بوده است که حدود $ x = 3 $ می باشد. چنانچه بخواهیم این پاسخ را به دست آوریم باید از دستور fzero در متلب استفاده کنیم که در ادامه در مورد آن توضیح خواهیم داد.
دستور fzero :
همان مثال قبل را این بار با fzero حل می کنیم و برای دستور fzero مشخص می کنیم که پاسخ نزدیک $ x = 3 $ را بیابد :
نتیجه :
3.0964
بنابراین دستور fzero دقیقا همان پاسخ مد نظر ما که نزدیک $ x = 3 $ می باشد را برگرداند.
دقت شود که در تعریف معادله، از علامت = استفاده نکردیم و دستور به طور خودکار، عبارت درون دو علامت ' را برابر صفر قرار می دهد.
سلام و خسته نباشین .0=(0.4164sin(6t)+.017sin(14.49t
ببخشید من این معادله رو به این روشهایی که گفتین نمیتونم حل کنم
سلام میخاستم معادله x*tan(x)=3.896*10^-6 را چطور میشه حل کرد
مقادیر مختلف x را میخاستم
و میخاستم بدونم میشه رسمش کرد
با تشکر
سلام من با این کد ها مشکل دارم حل نمیشه
s=solve('(108354-Z0)*(-4.617*(cosd(p)*cosd(k))+0.392*(-cosd(p)*cosd(k))-151.992*(sind(p)))/(-4.617*(-cosd(w)*sind(p)*cosd(k)+sind(w)*sind(k))+0.392*(cosd(w)*sind(p)*sind(k)+sind(w)*cosd(k))-151.992*(cosd(w)*cosd(p)))=4296851-X0','(108354-Z0)*(-4.617*(sind(w)*sind(p)*cosd(k)+cosd(w)*sind(k))+0.392*(-sind(w)*sind(p)*sind(k)+cosd(w)*cosd(k))-151.992*(-sind(w)*cosd(p)))/(-4.617*(-cosd(w)*sind(p)*cosd(k)+sind(w)*sind(k))+0.392*(cosd(w)*sind(p)*sind(k)+sind(w)*cosd(k))-151.992*(cosd(w)*cosd(p)))=4233813-Y0','(123791-Z0)*(87.296*(cosd(p)*cosd(k))+(-0.309)*(-cosd(p)*cosd(k))-151.992*(sind(p)))/(87.296*(-cosd(w)*sind(p)*cosd(k)+sind(w)*sind(k))+(-0.309)*(cosd(w)*sind(p)*sind(k)+sind(w)*cosd(k))-151.992*(cosd(w)*cosd(p)))=4553579-X0','(123791-Z0)*(87.296*(sind(w)*sind(p)*cosd(k)+cosd(w)*sind(k))+(-0.309)*(-sind(w)*sind(p)*sind(k)+cosd(w)*cosd(k))-151.992*(-sind(w)*cosd(p)))/(87.296*(-cosd(w)*sind(p)*cosd(k)+sind(w)*sind(k))+(-0.309)*(cosd(w)*sind(p)*sind(k)+sind(w)*cosd(k))-151.992*(cosd(w)*cosd(p)))=4473130-Y0','(112791-Z0)*(83.690*(cosd(p)*cosd(k))+(-100.003)*(-cosd(p)*cosd(k))-151.992*(sind(p)))/(83.690*(-cosd(w)*sind(p)*cosd(k)+sind(w)*sind(k))+(-100.003)*(cosd(w)*sind(p)*sind(k)+sind(w)*cosd(k))-151.992*(cosd(w)*cosd(p)))=5483104-X0','(112791-Z0)*(83.690*(sind(w)*sind(p)*cosd(k)+cosd(w)*sind(k))+(-100.003)*(-sind(w)*sind(p)*sind(k)+cosd(w)*cosd(k))-151.992*(-sind(w)*cosd(p)))/(83.690*(-cosd(w)*sind(p)*cosd(k)+sind(w)*sind(k))+(-100.003)*(cosd(w)*sind(p)*sind(k)+sind(w)*cosd(k))-151.992*(cosd(w)*cosd(p)))=3900089-Y0')
s=[s.X0 x.Z0 s.p s.k s.w s.Y0]
تصویر ارور رو زمینه میکنم...
سلام برای استفاده از genfis3 در متلب باید چ کدی بنویسم ؟من برای مدل انفیس ۷ورودی دارم ک درgenfis1 اخطار نبود حافظه میده .لطفا کمکم کنین...
سلام
من در حل معادله حالت موندم
یه سوال سه قسمته هست
تو قسمت اول حل از طریق معادله ردیچ وانگ
تو قسمت دوم حل از طریق ردیچ وانگ سو
سلام
من عین همین کد که اینجا هست رو توی کامند متلب کپی میکنم ولی برنامه هنگ میکنه!
A=solve('x^2-2*x-4=0');
B=double(A)
your version mathlab is low.install update version
منم همین مشکلو دارم ورژن متلبمم R2018b هست
سلام
من برا اینکه بتونم چندتا سوال درس استاتیک رو تو متلب پیاده کنم باید کدوم بخش نرم افزار رو یاد بگیرم؟
سلام ببخشید برای حل معادله ۲۴ معادله ۲۴ مجهول در متلب چقدر زمان میخواد؟برنامه ی من سه روزه در حال رانه اما جواب نداده.لطفا راهنمایی کنید
تو رو خدا اگه کسی میدونه جواب بده خیلی ضروریه
چقد زمان برای حل معادله ۲۴ معادله ۲۴ مجهول میخواد.من ماتریسی نوشتم
بسیار مفید و کامل و مختصر بدون توضیحات اضافه احسنت بر شما
خیلی مفید مختصر عاااااااالی بود