آموزش متلب (MATLAB)
۵۴۳ آموزش
نمایش دسته بندی ها (۵۴۳ آموزش)

حل دستگاه چند معادله و چند مجهول، با دستور 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 می نویسیم. هر معادله، باید درون دو علامت ' قرار بگیرد :


clear all
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] نیز برای نمایش نتایج به دست آمده از حل دستگاه دو معادله و دو مجهول است.

نتیجه :


S =
 
    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} \]

می نویسیم :


clear all
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]

نتیجه :


S =
 
    x: [2x1 sym]
    y: [2x1 sym]
    z: [2x1 sym]
 
 
S =
 
[ 2,  1, 3]
[ 5, -2, 3]

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

نویسنده علیرضا گلمکانی
شماره کلید 140
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 32 32 0
دانشجو
۱۳۹۵/۰۷/۱۱
۱۶:۱۵

سلام
اگر بخواهیم تعداد معادلات و مجهولات نامعین باشه چی؟
مثلا یه n رو کاربر به برنامه بده، و براساس اون ، بعد از تعیین معادلات، بشه n مجهول رو بدست اورد. متلب میتونه این کار رو انجام بده؟ یعنی مجهولات رو بدون اینکه دستی با دستور syn تعیین کنیم، به صورت خودکار خودش انجام بده؟

ندا
۱۳۹۵/۰۷/۱۴
۱۲:۵۷

ممنون  

عرفان
۱۳۹۵/۰۸/۰۶
۱۲:۱۱

سلام اگه بخواهیم فقط ریشه های حقیقی رو پیدا کنه چکار باید کنیم؟یعنی ریشه های مختلط رو نمی خواهیم

admin
۱۳۹۵/۰۸/۰۶
۱۹:۵۳

سلام.
با استفاده از دستور isreal ()، می توانید چک کنید که کدام ریشه ها (پاسخ ها) حقیقی (real) می باشند و سپس آنها را در یک بردار جدید کپی کنید.

علی
۱۳۹۵/۰۹/۰۵
۱۱:۵۴

سلام اگر بخواهیم فقط ریشه های مثبت رو به ما  بده باید چه دستوری استفاده کنیم ؟؟؟ 

E l h
۱۳۹۸/۰۶/۱۷
۰۸:۳۹

کاری نداره که با یه if کارت حله

sima
۱۳۹۵/۰۹/۱۸
۱۳:۳۳

سلام من یک معادله دارم با 3 متغیر که هر متغیر چند سری شرط دارد.چ طور با متلب حل کنم ممنون میشم پاسخ دهید.
 


  20x1+50x2+40x3=z         max
subject to 
x1<=80
x2<=11
x1+x2+x3<=80
 

۱۳۹۶/۰۲/۱۵
۱۱:۱۰

سلام
اين يك را بايد با بخش ژنتيك حل كنيد Ga

میلاد
۱۳۹۶/۰۳/۰۵
۱۶:۰۹

سلام خسته نباشید
من این کدی که شما اینجا فرستادین رو عینا وارد متلب میکنم ولی ارور پایین رو برای من میفرسته میشه خواهش کنم بفرمایید مشکل از کجاست؟؟
??? Undefined function or method 'solve' for input arguments of type 'char'.

admin
۱۳۹۶/۰۳/۰۷
۱۷:۵۹

سلام.
در مورد این خطا، کلید زیر را بخوانید :



احمد
۱۳۹۶/۰۳/۱۶
۲۱:۲۸

با سلام
من یک دستگاه 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)



ممنونم از وقتی که برای خوندن و جواب دادن میگذارید.

fAtemeh
۱۳۹۶/۰۸/۲۵
۲۰:۱۱

سلام میشه منم کمک کنید 
چطوری می تونم دستگاه ۵معادله ۶مجهول رو حل کنم

م
۱۳۹۷/۰۳/۲۲
۱۷:۲۱

وقتی مجهولات بیشتر از معادلات باشد بینهایت جواب دارد. 

مهر
۱۳۹۶/۰۹/۳۰
۲۱:۲۶

خیلی خیلی ممنون

كورش
۱۳۹۶/۱۱/۰۹
۰۱:۳۶

سلام ببخشيد اگر ماتريسي داشته باشم و در ماتريس فقط يك مجهول وجود داشته باشد و بايد دترمينان ماتريس را برابر صفر قرار بدهم تا مجهول بدست بياد از هر روش كه حساب ميكنم ارور ميدهد ميشه لطفا كمك كنيد.

کیوان
۱۳۹۷/۰۲/۲۴
۱۵:۵۳

سلام چطور میشه دستگاه چند معادله چند مجهول رو با متلب پارامتری حل کرد؟ یعنی ضرایب مجهولات پارامتر بوده و می خواهیم مجهولات بر حسب این پارامترها بدست آیند مثل فرمول بشن...

E l h
۱۳۹۸/۰۶/۱۷
۰۹:۰۲

همه ضرایب و حتی خود مجهولاتت  رو ابتدا به صورت سمبولیک تعریف کن 
  ax+by =c    
     dx+ey=f
;syms x ,y ,a, b ,c, d, e ,f

            

admin
۱۴۰۰/۰۷/۲۵
۱۶:۲۰

سلام.

می توانید با استفاده از دستور 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 ).

mhn
۱۳۹۷/۰۴/۱۳
۲۳:۴۶

سلام دستگاه 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 معادله دیگه جواب نمیده.

لیلا
۱۳۹۸/۱۱/۲۵
۰۸:۳۱

سلام دوست گرامی من هم مشگل شما را دارم اگر به جوابی رسیدید مرا هم یاری کنید ممنونم

Anita
۱۳۹۷/۰۷/۲۲
۲۲:۵۰

سلام دستگاه ده معادله و سه مجهول رو در متلب با چه دستوری انجام بدم؟؟هر کاری میکنم ارور میده!

سعید
۱۳۹۷/۱۰/۰۱
۱۷:۲۹

سلام.اگر تعداد معادلات ما زیاد باشه باید چیکار کنیم؟nمعادله و nمجهول

رحیم جوانی
۱۳۹۸/۰۷/۱۱
۱۹:۰۲

با سلام و خسته نباشید برای حل معادله  سه معادله پنج مجهولی چکار باید باید کرد در ضمن طریقه نوشتن کدگذاریش در متلب چگونه هس با تشکر

فرید
۱۴۰۰/۰۳/۰۴
۱۱:۲۸

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

Error using solve>getEqns (line 418)
List of equations must not be empty.

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

mahdi.bhi
۱۴۰۰/۰۷/۲۳
۲۲:۲۵

ب سلام و خسته نباشید
من یک 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

admin
۱۴۰۰/۰۷/۲۵
۱۶:۰۷

سلام.

می توانید با استفاده از دستور 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 ).

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)