حل دستگاه چند معادله و چند مجهول، با دستور solve ، در متلب (MATLAB) (در نسخه های قدیمی)
دستور
solve
در متلب (MATLAB)، برای حل معادلات به کار می رود و چنانچه بخواهیم یک دستگاه چند معادله و چند مجهول را حل کنیم، باید معادلات را به دستور
solve
بدهیم تا این دستور، پاسخ دستگاه را محاسبه کند.
دستور
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) است، بنابراین اگر از نسخه های جدید متلب (MATLAB) استفاده می کنید، به جای این آموزش، کلید شماره 28198 را بخوانید.
به مثال زیر توجه کنید :
فرض کنید بخواهیم دستگاه دو معادله و دو مجهول زیر را حل کنیم :
\[ \begin{aligned} \begin{cases} x+2y=7 \\ x-y=1 \end{cases} \end{aligned} \]
برای این منظور، دو معادله را درون پرانتز دستور
solve
می نویسیم. هر معادله، باید درون دو علامت
'
قرار بگیرد :
close all
clc
S=solve('x+2*y=7','x-y=1')
S=[S.x S.y]
3 خط اول کدها، برای عدم تداخل برنامه فعلی با برنامه های قبلی اجرا شده در متلب (MATLAB) می باشد.
دستور
S=solve('x+2*y=7','x-y=1')
، دستگاه دو معادله و دو مجهول را حل می کند و عبارت
S=[S.x S.y]
نیز برای نمایش نتایج به دست آمده از حل دستگاه دو معادله و دو مجهول است.
نتیجه :
x: [1x1 sym]
y: [1x1 sym]
S =
[ 3, 2]
فرض کنید بخواهیم دستگاه سه معادله و سه مجهول زیر را حل کنیم :
\[ \begin{aligned} \begin{cases} x+y+z=6 \\ x-y^2+2z=7 \\ x+y-z=0 \end{cases} \end{aligned} \]می نویسیم :
close all
clc
S=solve('x+y+z=6','x-y^2+2*z=7','x+y-z=0')
S=[S.x S.y S.z]
نتیجه :
x: [2x1 sym]
y: [2x1 sym]
z: [2x1 sym]
S =
[ 2, 1, 3]
[ 5, -2, 3]
مشاهده می کنید که دستگاه سه معادله و سه مجهول فوق، دارای دو سری پاسخ می باشد.
سلام
اگر بخواهیم تعداد معادلات و مجهولات نامعین باشه چی؟
مثلا یه n رو کاربر به برنامه بده، و براساس اون ، بعد از تعیین معادلات، بشه n مجهول رو بدست اورد. متلب میتونه این کار رو انجام بده؟ یعنی مجهولات رو بدون اینکه دستی با دستور syn تعیین کنیم، به صورت خودکار خودش انجام بده؟
ممنون
سلام اگه بخواهیم فقط ریشه های حقیقی رو پیدا کنه چکار باید کنیم؟یعنی ریشه های مختلط رو نمی خواهیم
سلام.
با استفاده از دستور isreal ()، می توانید چک کنید که کدام ریشه ها (پاسخ ها) حقیقی (real) می باشند و سپس آنها را در یک بردار جدید کپی کنید.
سلام اگر بخواهیم فقط ریشه های مثبت رو به ما بده باید چه دستوری استفاده کنیم ؟؟؟
کاری نداره که با یه if کارت حله
سلام من یک معادله دارم با 3 متغیر که هر متغیر چند سری شرط دارد.چ طور با متلب حل کنم ممنون میشم پاسخ دهید.
سلام
اين يك را بايد با بخش ژنتيك حل كنيد Ga
سلام خسته نباشید
من این کدی که شما اینجا فرستادین رو عینا وارد متلب میکنم ولی ارور پایین رو برای من میفرسته میشه خواهش کنم بفرمایید مشکل از کجاست؟؟
??? Undefined function or method 'solve' for input arguments of type 'char'.
سلام.
در مورد این خطا، کلید زیر را بخوانید :
با سلام
من یک دستگاه 5معادله 5 مجهول دارم که همگن است.پس برای محاسبه جواب تنها می توانیم ریشه ها را بر مبنای یکی از ریشه ها محاسبه کنیم.مثلا c2/c1,c3/31,c4/c1,c5/c1, و بعد از ان با قرار دادن c1های مختلف جوابهای مختلف بدست می اید. لطفا اگه میشه منو کمک کنید.
عالیییییییییییی بود مال پایه چندمه ؟اخه من هفتمم
سلام اگر معادلات از مجهولات بیشتر باشد مانند مثال زیر
A+b+c+d+e=100
A0.1+b0.40+c0.13+e0.3=18
چگونه کمترین min معادله زیر محاسبه می شود
A850+b2500+c2000+e1800=min
باتشکر
سلام.
من برای یک تابع چند جمله ای طولانی بدست آمده از حاصل بسط تیلور، از دستور solve استفاده کردم در نهایت خروجی که به من داده شامل یک متغییر هست که اصلا تعریفش نکردم X1 .
جواب به شکل زیر هست. ممنون میشم اگر راهنماییم کنید.
یه سوال دیگه اینکه آیا این که اول جواب بیاید بنویسه RootOf آیا درسته؟ من تا حالا ندیدم. آیا این جواب قابل اعتماده؟
ans=RootOf(yek seri function bar hasbe 'X1' va syms haye ghadimi ke dashtam , X1)
ممنونم از وقتی که برای خوندن و جواب دادن میگذارید.
سلام میشه منم کمک کنید
چطوری می تونم دستگاه ۵معادله ۶مجهول رو حل کنم
وقتی مجهولات بیشتر از معادلات باشد بینهایت جواب دارد.
خیلی خیلی ممنون
سلام ببخشيد اگر ماتريسي داشته باشم و در ماتريس فقط يك مجهول وجود داشته باشد و بايد دترمينان ماتريس را برابر صفر قرار بدهم تا مجهول بدست بياد از هر روش كه حساب ميكنم ارور ميدهد ميشه لطفا كمك كنيد.
سلام چطور میشه دستگاه چند معادله چند مجهول رو با متلب پارامتری حل کرد؟ یعنی ضرایب مجهولات پارامتر بوده و می خواهیم مجهولات بر حسب این پارامترها بدست آیند مثل فرمول بشن...
همه ضرایب و حتی خود مجهولاتت رو ابتدا به صورت سمبولیک تعریف کن
ax+by =c
dx+ey=f
;syms x ,y ,a, b ,c, d, e ,f
سلام.
می توانید با استفاده از دستور
syms
ضرایب مورد نظرتان را به صورت سمبلیک (Symbolic) تعریف کنید (
کلید شماره 4 ).
به عنوان مثال، دستگاه دو معادله و دو مجهول زیر را در نظر می گیریم :
\[ \left\{ {\matrix{ {ax + by = c} \hfill \cr {dx + ey = f} \hfill \cr } } \right. \]
آنگاه می توانیم کد متلب (MATLAB) زیر را بنویسیم (دقت کنید که در کد زیر، دستور
solve
را به شیوه ای که در نسخه های جدید متلب (MATLAB) به کار می رود، نوشته ایم. اگر از نسخه های قدیمی متلب (MATLAB) استفاده می کنید، بخش مربوط به دستور
solve
را بر اساس شیوه قدیمی به کار بردن آن تغییر دهید) :
3 خط اول کدها، برای عدم تداخل برنامه فعلی با برنامه های قبلی اجرا شده در متلب (MATLAB) می باشد.
نتیجه :
در هر زمانی که مقدار مربوط به یکی از ضرایب را به دست آوریم، می توانیم با استفاده از دستور
subs
، مقدار آن را در عبارت های مورد نظرمان قرار دهیم (
کلید شماره 36 ).
سلام دستگاه 4 معادله 4 مجهول دارم . با استفاده از تکنیکی که گفتین کد زیر رو زدم ولی اررور میده مشکل از کجاست
clear all
close all
clc
S=solve('-2*x-y-z=23.59','39.12*x^2+2*x*y+2*x*z+y*z=9784.9','-39.12*y*x^2-39.12*z*x^2-2*Z*y*x-0.7883k=81190.04','z+y*x^2+38.12*z*y*x^2-42.45k=3493193')
S=[S.x S.y S.z S.k]
سلام
من یک دستگاه معادله دارم که ماتریس ضرایبش مستطیلی هستش یعنی یک ماتریس m*n - تعداد مجهولات من n تا هستش.
برای حل همچین دستگاه معادله ای من از دستور A=B\C استفاده کردم که متلب ضمن ارائه جواب یک اخطار هم میده و جوابهای منطقی هم اغلب داده نمیشه میخواستم ببینم برای مساله من روش خاصی رو میتونید پیشنهاد کنید که بدون خطا دستگاه معادله حل بشه؟
ممنون
سلام 25 معادله با 25 مجهول را چگونه میتونم به صورت پارامتری وابسته به دو پارامتر دیگه حل کنم.؟ مثلا 25 معادله داریم میخواهیم که مجهولات آنها p1 p2 p3.....p25 هستند و این مجهولات را میخواهیم بر حسب پارامتر r1 , r2 به دست بیاریم.
4 معادله چهار مجهول بر حسب دو پارامتر را میتونم به دست بیارم. با اتفاده از syms r1 r2 ,و ('............')solve حل کردم. ولی برا 25 معادله دیگه جواب نمیده.
سلام دوست گرامی من هم مشگل شما را دارم اگر به جوابی رسیدید مرا هم یاری کنید ممنونم
سلام دستگاه ده معادله و سه مجهول رو در متلب با چه دستوری انجام بدم؟؟هر کاری میکنم ارور میده!
سلام.اگر تعداد معادلات ما زیاد باشه باید چیکار کنیم؟nمعادله و nمجهول
با سلام و خسته نباشید برای حل معادله سه معادله پنج مجهولی چکار باید باید کرد در ضمن طریقه نوشتن کدگذاریش در متلب چگونه هس با تشکر
سلام خسته نباشید. ببخشید من این کدی که فرمودید برای حل دستگاه رو در متلب کپی کردم اما این پیغام رو داد:
Error in solve (line 226)
[eqns,vars,options] = getEqns(varargin{:});
Error in Untitled11 (line 6)
S=solve('x+2*y=7','x-y=1')
سلام. ببخشید میشه بگید مشکل چیه؟
یکی از معادلات به صورت نمایی هست؟
format rat;
syms x y;
eq = [2*exp(x*1000/52)-exp(y*1000/52)==-1,x+y==80];
[x y]=solve(eq,[x y])
x =
(13*log(- (8*exp(20000/13) + 1)^(1/2)/4 - 1/4))/250
(13*log((8*exp(20000/13) + 1)^(1/2)/4 - 1/4))/250
ب سلام و خسته نباشید
من یک 2معادله 2 مجهول دارم. به طوری که ضرایب ثابت 2متغیر x,y، ضرایبِ a,b,c,d هستند. من a,b,c,d را از نوع string تعریف کردم. اما این ارور را میدهد. چه کنم؟
Check for incorrect argument data type or missing argument in call to function 'solve'o
سلام.
می توانید با استفاده از دستور
syms
ضرایب مورد نظرتان را به صورت سمبلیک (Symbolic) تعریف کنید (
کلید شماره 4 ).
به عنوان مثال، اگر دستگاه دو معادله و دو مجهول را به صورت زیر در نظر بگیریم :
\[ \left\{ {\matrix{ {ax + by = c} \hfill \cr {dx + ey = f} \hfill \cr } } \right. \]
آنگاه می توانیم کد متلب (MATLAB) زیر را بنویسیم (دقت کنید که در کد زیر، دستور
solve
را به شیوه ای که در نسخه های جدید متلب (MATLAB) به کار می رود، نوشته ایم. اگر از نسخه های قدیمی متلب (MATLAB) استفاده می کنید، بخش مربوط به دستور
solve
را بر اساس شیوه قدیمی به کار بردن آن تغییر دهید) :
3 خط اول کدها، برای عدم تداخل برنامه فعلی با برنامه های قبلی اجرا شده در متلب (MATLAB) می باشد.
نتیجه :
در هر زمانی که مقدار مربوط به یکی از ضرایب را به دست آوریم، می توانیم با استفاده از دستور
subs
، مقدار آن را در عبارت های مورد نظرمان قرار دهیم (
کلید شماره 36 ).