حل انواع معادله در متلب با انواع روشها (با مثال و نکات کاربردی)

معادلات چند جمله ای از معروفترین انواع معادلات در ریاضی هستند. دانستن نحوه حل آنها یک چیز است اما در واقع حل عملی آنها چیز دیگری است. روش های زیادی برای حل این معادلات وجود دارد اما اگر هدفتان بیشتر حل معادله باشد تا راه حل معادله می توانید با استفاده از متلب در زمان خود صرفه جویی کنید.
نکته: روش های زیر کمک می کند تا معادلات چند جمله ای را به سرعت حل کنید اما نحوه حل دستی آنها را نشان نمی دهند. با استفاده از این روش ها به راحتی می توانید سریعترین نتیجه بگیرید.
حل معادلات پایه ریاضی با تابع solve در متلب
از تابع solve برای حل معادلات ریاضی در متلب استفاده می شود. در ساده ترین حالت آن، تابع solve معادله ریاضی را بین علامت های نقل قول ها به عنوان آرگومان ورودی دریافت می کند.
برای مثال معادله زیر را در نظر بگیرید، می خواهیم مقدار x را در آن به دست آوریم:
solve(‘x-5=0’)
خروجی
ans =
5
می توانید تابع را به صورت زیر نیز فراخوانی کنید:
y = solve(‘x-5 = 0’)
خروجی
y =
5
اگر سمت راست معادله را وارد نکنید:-
solve(‘x-5’)
خروجی
ans =
5
اگر معادله شامل چند متغیر یا نماد باشد، متلب به طور پیشفرض آن را براساس x حل می کند. با این حال تابع solve فرم دیگری نیز دارد:
solve(معادله, متغیر)
در این فرم می توانید متغیر مورد نظر در معادله را مشخص کنید.
به عنوان مثال برای حل معادله v – u – 3t2 = 0 براساس متغیر v باید به شکل زیر نوشته شود:
solve(‘v-u-3*t^2=0’, ‘v’)
متلب دستور بالا را اجرا کرده و نتیجه زیر را برمی گرداند:
ans =
3*t^2 + u
حل معادلات درجه دو با تابع solve در متلب
تابع solve برای حل معادلات مرتبه بالاتر به خصوص معادلات درجه دوم نیز استفاده می شود.
فرم کلی معادله درجه دوم به شکل زیر است:
![]()
به صورتی که،
![]()
معادلات درجه دوم به فرم های زیر نیز نوشته می شوند:
![]()
![]()
تابع solve ریشه های معادله را در یک آرایه برمیگرداند.
معادله درجه دو x2 -7x +12 = 0 را در نظر بگیرید. کد زیر را تایپ کنید:
eq = ‘x^2 -7*x + 12 = 0’;
s = solve(eq);
disp(‘The first root is: ‘), disp(s(1));
disp(‘The second root is: ‘), disp(s(2));
نتیجه زیر برگردانده می شود: –
The first root is:
3
The second root is:
4
حل معادلات درجه بالاتر با تابع solve در متلب
تابع solve می تواند معادلات مرتبه های بالاتر را حل کند. به عنوان مثال معادله درجه سه زیرا را در نظر بگیرید:
تابع solve به شکل زیر نوشته می شود:
solve(‘(x-3)^2*(x-7)=0’)
متلب دستور بالا را اجرا کرده و نتیجه زیر را برمیگرداند:
ans =
3
3
7
برای معادلات با درجه های بالاتر ریشه ها اعشار طولانی دارند. برای کوتاه کردن تعداد اعشار می توانید از نوع double استفاده کنید. معادله مرتبه چهار زیر را در نظر بگیرید:
x4 − 7x3 + 3x2 − 5x + 9 = 0
کد زیر را در متلب تایپ کنید:
eq = ‘x^4 – 7*x^3 + 3*x^2 – 5*x + 9 = 0’;
s = solve(eq);
disp(‘The first root is: ‘), disp(s(1));
disp(‘The second root is: ‘), disp(s(2));
disp(‘The third root is: ‘), disp(s(3));
disp(‘The fourth root is: ‘), disp(s(4));
% double استفاده از نوع
disp(‘Numeric value of first root’), disp(double(s(1)));
disp(‘Numeric value of second root’), disp(double(s(2)));
disp(‘Numeric value of third root’), disp(double(s(3)));
disp(‘Numeric value of fourth root’), disp(double(s(4)));
نتیجه زیر را برمیگرداند،
The first root is:
6.630396332390718431485053218985
The second root is:
1.0597804633025896291682772499885
The third root is:
– 0.34508839784665403032666523448675 – 1.0778362954630176596831109269793*i
The fourth root is:
– 0.34508839784665403032666523448675 + 1.0778362954630176596831109269793*i
Numeric value of first root
6.6304
Numeric value of second root
1.0598
Numeric value of third root
-0.3451 – 1.0778i
Numeric value of fourth root
-0.3451 + 1.0778i
نکته: توجه داشته باشید که دو ریشه آخر اعداد مختلط هستند.
حل دستگاه معادلات با تابع solve در متلب
تابع solve برای حل دستگاه های معادلات با بیش از یک متغیر نیز استفاده شود. این را با یک مثال ساده نشان می دهیم.
معادلات زیر را در نظر بگیرید:
5x + 9y = 5
3x – 6y = 4
برای به دست آوردن حل آن، کد زیر را در متلب تایپ کنید،
s = solve(‘5*x + 9*y = 5′,’3*x – 6*y = 4’);
s.x
s.y
خروجی
ans =
22/19
ans =
-5/57
به همین ترتیب می توانید دستگاه های معادلات خطی بزرگتر مانند مثال زیر را نیز حل کنید.
x + 3y -2z = 5
3x + 5y + 6z = 7
2x + 4y + 3z = 8
حل معادلات درجه دو با استفاده از تابع roots
همانطور که گفتیم فرم کلی معادله درجه دو به شکل زیر است:
![]()
در ادامه نحوه حل معادله زیر را با استفاده از تابع roots توضیح می دهیم.
![]()
کد زیر را در متلب وارد کنید:
roots([1 -3 2])
متلب ریشه های معادله چند جمله ای را برمیگرداند:

برای معادله زیر،
![]()
کد زیر را باید در متلب وارد کنید:
roots([1 0 -4])
خروجی:

حل معادلات درجه سه با استفاده از تابع roots
معادله زیر را در نظر بگیرید:
![]()
کد متلب آن در مقایسه با مثال قبلی تفاوت زیادی ندارد. تنها تفاوت در اینجا اضافه شدن ضریب درجه سوم غیر صفر است.
roots([1 6 0 -20])
نکته: دقت داشته باشید که 0 را بین 6 تا -20 وارد کنید زیرا ضریب جمله مرتبه اول معادله برابر با صفر است.
نتیجه زیر را برمیگرداند:

حل معادلات درجه چهار با استفاده از تابع roots
معادله چند جمله ای درجه چهار زیر را در نظر بگیرید:
![]()
کد متلب آن،
roots([1 2 -6*sqrt(10) +1])
نتیجه زیر را برمیگرداند:

برای معادلات با درجه های بالاتر تعداد ضریب ها بیشتر می شود. فقط باید ترتیب وارد کردن ضریب ها در کد رعایت شود زیرا روی نتیجه تأثیر می گذارد. همیشه به یاد داشته باشید که 0 برای نشان دادن ضریبی است که در معادله وجود ندارد.
آموزش کامل برنامه نویسی در متلب (22 جلسه رایگان به زبان فارسی)
توابع expand و collect در متلب
توابع expand و collect به ترتیب برای گسترش و جمع آوری معادله در متلب به کار می روند. مثال زیر این مفاهیم را بهتر نشان خواهد داد.
زمانیکه با توابع نمادین کار می کنید باید متغیرهای نمادین را تعریف کنید. متغیر نمادین یا سمبلیک در متلب یعنی اینکه عدد خاصی به آن متغیر نسبت نمی دهیم و تنها با نماد آن کار می کنیم همانطور که بسیاری از معادلات ریاضی به همین ترتیب حل می شوند. دو نماد x و y رایجترین نمادها هستند.
در متلب از دستور syms برای تعریف متغیر نمادین استفاده می شود.
syms x %symbolic variable x
syms y %symbolic variable y
% expanding equations
expand((x-5)*(x+9))
expand((x+2)*(x-3)*(x-5)*(x+7))
expand(sin(2*x))
expand(cos(x+y))
% collecting equations
collect(x^3 *(x-7))
collect(x^4*(x-3)*(x-5))
نتیجه زیر را برمیگرداند:
ans =
x^2 + 4*x – 45
ans =
x^4 + x^3 – 43*x^2 + 23*x + 210
ans =
2*cos(x)*sin(x)
ans =
cos(x)*cos(y) – sin(x)*sin(y)
ans =
x^4 – 7*x^3
ans =
x^6 – 8*x^5 + 15*x^4
فاکتورگیری و ساده سازی عبارت های جبری در متلب
تابع factor یک عبارت را در معادله فاکتورگیری می کند و تابع simplify یک عبارت را ساده می کند. در مثال زیر این مفاهیم بهتر نشان داده شده است:
syms x
syms y
factor(x^3 – y^3)
factor([x^2-y^2,x^3+y^3])
simplify((x^4-16)/(x^2-4))
نتیجه زیر را برمیگرداند:
ans =
(x – y)*(x^2 + x*y + y^2)
ans =
[ (x – y)*(x + y), (x + y)*(x^2 – x*y + y^2)]
ans =
x^2 + 4
آموزش مشتق در متلب (به زبان ساده)
سریعترین روشها برای هر نوع معادله
انتخاب دستور درست، نیمی از مسیر حل مسئله است. جدول زیر به شما نشان میدهد برای هر معادله سراغ کدام ابزار بروید:
| نوع معادله | بهترین دستور متلب | ساختار کلی |
| معادلات جبری ساده و دقیق | solve |
solve(x^2 - 4 == 0, x) |
| دستگاه معادلات خطی | عملگر تقسیم چپ (\) |
X = A \ B |
| معادلات چندجملهای | roots |
roots([1, 0, -4]) |
| معادلات پیچیده و بدون جواب تحلیلی | fzero یا vpasolve |
fzero(@(x) cos(x)-x, 1) |
۴ ترفند و قانون طلایی در حل معادلات
۱. تفاوت حیاتی = و ==
رایجترین خطای مبتدیان در متلب، استفاده اشتباه از علامت مساوی است.
در متلب، علامت مساویِ تک (=) به معنای تخصیص مقدار است (مثلاً قرار دادن عدد ۵ در متغیر x). اما برای تعریف یک معادله ریاضی، باید حتماً از دو علامت مساوی (==) استفاده کنید.
-
نادرست:
eqn = x^2 = 4 -
درست:
eqn = x^2 == 4
۲. معرفی مجهولات با syms (جادوی حل نمادین)
متلب به طور پیشفرض متغیرها را به عنوان ماتریسهای عددی میشناسد. اگر میخواهید متلب با حرف $x$ یا $y$ مانند یک مجهول ریاضی رفتار کند (مثل روی کاغذ)، باید قبل از هر کاری آنها را به عنوان متغیرهای سمبولیک (نمادین) تعریف کنید:
syms x yeqn = x^2 + 5*x + 6 == 0;answer = solve(eqn, x);۳. ماتریسها؛ میانبرِ دستگاه معادلات خطی
اگر یک دستگاه معادلات خطی دارید (مثلاً $3x + 2y = 7$ و $x - y = 1$)، استفاده از دستور solve کار غیرحرفهای و کندی است. بهترین و سریعترین روش متلب، استفاده از ماتریس ضرایب و عملگر «تقسیم چپ» (Left Division) است:
۱. ضرایب مجهولات را در ماتریس $A$ قرار دهید.
۲. اعداد سمت راست معادله را در بردار $B$ قرار دهید.
۳. با دستور X = A \ B جوابها را در کسری از ثانیه بگیرید.
۴. وقتی solve جواب نمیدهد چه کنیم؟
گاهی اوقات متلب در برابر دستور solve پیام اخطار (Warning) میدهد یا جوابی برنمیگرداند. این یعنی معادله شما آنقدر پیچیده است که فرمول ریاضی مشخصی برای حل آن وجود ندارد. در این مواقع باید از حلگرهای عددی استفاده کنید:
-
استفاده از
vpasolve: این دستور همان معادله سمبولیک شما را میگیرد اما به جای فرمول، یک عدد اعشاری دقیق به عنوان جواب تحویل میدهد. -
استفاده از
fzero: اگر میدانید جواب معادله حدوداً نزدیک به چه عددی است، تابع را به صورت بینام (Anonymous Function) تعریف کرده و به متلب یک نقطه شروع میدهید تا ریشه را در همان حوالی پیدا کند.


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