محاسبات جبری در متلب یکی از مهمترین کاربردهای متلب (مخصوصا در رشتههای مهندسی) است. در این مقاله از دوره آموزش متلب فنولوژی، به طور کامل درمورد محاسبات جبری در متلب صحبت میکنیم. در ادامه به فاکتورگیری و ساده سازی محاسبات جبری در متلب نیز میپردازیم. با ما همراه باشید.
حل معادلات سادهی جبری در متلب
تا به اینجای دوره تقریبا تمام مثالهای ذکر شده در متلب و octave یکسان بود اما از این پس در حل معادلات جبری کمی تفاوت است که باید به آن دقت کنید. برای حل معادلهی x-5 = 0 در متلب از تابع solve استفاده میکنیم. در سادهترین حالت، معادلهای که باید حل شود را درون تابع solve با علامت مساوی «==» قرار دهید و متلب معادله را حل میکند و جواب ans = 5 را برمیگرداند. توجه کنید ابتدا باید متغیر سمبولیک x را تعریف کنید.
1 2 |
syms x solve(x-5==0) |
به حالتهای زیر نیز میتوانید این کار را انجام دهید:
1 2 3 |
syms x y = solve(x-5 == 0); solve(x-5) |
جوابی که متلب برمیگرداند ans = 5 خواهد بود و مقدار y نیز برابر ۵ است.
اگر معادله دارای چندمتغیر باشد، به طور پیشفرض متلب متغیر x را به عنوان متغیر اصلی در نظر میگیرد. اما اگر بخواهید متغیر خاصی را لحاظ کنید میتوانید از سینتکس زیر استفاده کنید:
1 |
solve(equation, variable) |
به مثال زیر توجه کنید که میخواهیم معادلهی v – u – ۳t^2 = 0 را حل کنیم. در این صورت مینویسیم:
1 2 |
syms v u t solve(v-u-3*t^2==0, v) |
متلب دستور بالا را اجرا میکند و جواب زیر را برمیگرداند:
1 2 |
ans = 3*t^2 + u |
حل معادله درجه دو در متلب
تابع solve میتواند معادلات درجه بالاتر را نیز حل کند. بیشتر از این تابع برای حل معادلات درجه دو در متلب استفاده میکنیم. با فراخوانی این تابع، جوابهای معادله به صورت یک آرایه در متلب برگردانده میشود.
مثال: یک فایل اسکریپت مانند زیر ایجاد کنید. در این مثال معادلهی درجه دوی x2 -7x +12 = 0 را حل میکنیم.
1 2 3 4 5 |
syms x 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)); |
با اجرای فایل به نتایج زیر خواهید رسید:
1 2 3 4 |
The first root is: 3 The second root is: 4 |
حل معادلات درجه بالاتر در متلب
با استفاده از تابع solve این بار اقدام به حل معادلات درجه بالاتر میکنیم.
مثال ۱: یک فایل اسکریپت مانند زیر ایجاد کنید:
1 2 |
syms x solve((x-3)^2*(x-7)==0) |
مشاهده جواب:
1 2 3 4 |
ans = 3 3 7 |
مثال ۲: در این مثال برای پرهیز از ارقام بالای اعشاری در معادله، نتایج را به double تبدیل میکنیم.
1 2 3 4 5 6 7 8 |
syms x eq = x^4 - 7*x^3 + 3*x^2 - 5*x + 9 == 0; s = solve(eq); 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))); |
با اجرای کد بالا نتایج به صورت زیر خواهد بود:
1 2 3 4 5 6 7 8 |
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 میتوانیم چند مجموعه معادله را با چندین متغیر حل کنیم. تایع خروجی را طوری برمیگرداند که برای فراخوانی هر متغیر باید از سینتکس زیر استفاده کنید:
یک فایل اسکریپت مانند زیر ایجاد کنید. (در زیر مجموعه معادلات را مشاهده میکنید)
۵x + 9y = 5
۳x – ۶y = 4
1 2 3 4 |
syms x y s = solve(5*x + 9*y == 5,3*x - 6*y == 4); double(s.x) double(s.y) |
با اجرای کد بالا نتایج زیر را مشاهده میکنید:
1 2 3 4 5 6 7 |
ans = 1.157895 ans = -0.087719 |
همچنین میتوانید سایر دستگاه معادلات با تعداد متغیرهای بیشتر مانند زیر را نیز با همین روش حل کنید:
x + 3y -2z = 5
۳x + 5y + 6z = 7
۲x + 4y + 3z = 8
بازکردن و مرتب کردن معادلات در متلب
برای بازکردن معادلات در متلب از تابع expand، و برای مرتب کردن یک معادله برحسب یک متغیر خاص (از بزرگترین توان به کوچکترین توان) از تابع collect استفاده میکنیم. (به طور پیشفرض در تابع collect متغیر x میباشد) به مثالهای زیر توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
syms x y % بازکردن معادله expand((x-5)*(x+9)) expand((x+2)*(x-3)*(x-5)*(x+7)) expand(sin(2*x)) expand(cos(x+y)) f = expand(sin(x + 3*y)) % مرتب سازی بر حسب X collect(x^3 *(x-7)) collect(x^4*(x-3)*(x-5)) % مرتب سازی بر حسب cos(y) collect(f, cos(y)) |
با اجرای دستورات بالا به نتایج زیر خواهید رسید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
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) f = 4*cos(y)^3*sin(x) - 3*cos(y)*sin(x) - cos(x)*sin(y) + 4*cos(x)*cos(y)^2*sin(y) ans = x^4 - 7*x^3 ans = x^6 - 8*x^5 + 15*x^4 ans = 4*sin(x)*cos(y)^3 + 4*cos(x)*sin(y)*cos(y)^2 + (-3*sin(x))*cos(y) - cos(x)*sin(y) |
فاکتورگیری و سادهسازی عبارات جبری در متلب
فاکتورگیری که نوعی تجزیهی عبارات جبری است، در متلب با تابع factor و سادهسازی که میتواند برعکس تجزیه باشد، نوعی ترکیب عبارات جبری است که در متلب با تابع simplify انجام میشود. به مثالهای زیر دقت کنید:
1 2 3 4 5 6 7 8 9 |
syms x y %تجزیه یا فاکتورگیری factor(x^3 - y^3) %ترکیب یا ساده سازی simplify((x - y)*(x^2 + x*y + y^2)) |
با اجرای کد بالا به نتایج زیر میرسید:
1 2 3 4 5 6 7 8 |
ans = [ x - y, x^2 + x*y + y^2] ans = x^3 - y^3 |
توجه کنید که میتوانید در تابع simplify ورودیها را به صورت آرایهای از عبارات جبری دهید و هر خانه در آن آرایه به صورت مجزا ساده سازی میشود.
محاسبات جبری در octave
ممکن است بخواهید به جای استفاده از محاسبات جبری در متلب، برای این کار از octave استفاده کنید. برای این کار تفاوتهایی در سینتکس وجود دارد که به طور مختصر به آنها میپردازیم.
معادلات مرتبه اول در octave
برای این کار از تابع roots استفاده میکنیم و با دادن ضرایب معادله، ریشهها محاسبه میشوند. برای معادلهی x-5 = 0 داریم:
1 |
roots([1, -5]) |
با اجرای کد بالا جواب برابر ۵ خواهد شد.
معادله درجه دو در octave
برای این کار نیز مجددا ضرایب معادله را به تابع roots میدهیم. به معادله x2 -7x +12 = 0 دقت کنید:
1 2 3 4 |
s = roots([1, -7, 12]); disp('The first root is: '), disp(s(1)); disp('The second root is: '), disp(s(2)); |
مشاهده پاسخ:
1 2 3 4 |
The first root is: 4 The second root is: 3 |
معادلات درجه بالاتر در octave
برای این کار مجددا تابع x4 − ۷×۳ + ۳×۲ − ۵x + 9 = 0 را در نظر بگیرید:
1 2 3 4 5 6 7 8 9 |
v = [1, -7, 3, -5, 9]; s = roots(v); % converting the roots to double type 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))); |
مشاهده نتیجه:
1 2 3 4 5 6 7 8 |
Numeric value of first root 6.6304 Numeric value of second root -0.34509 + 1.07784i Numeric value of third root -0.34509 - 1.07784i Numeric value of fourth root 1.0598 |
حل سیستم معادلات در octave
برای این کار ابتدا با معادلهی ماتریسی Ax = b، ماتریس ضرایب A و بردار b، را تشکیل میدهیم. سپس با عملایت ماتریسی این معادله را حل میکنیم. به مثال زیر توجه کنید و آن را با سینتکس متلب مقایسه کنید:
۵x + 9y = 5
۳x – ۶y = 4
1 2 3 |
A = [5, 9; 3, -6]; b = [5;4]; A \ b |
1 2 3 4 |
ans = 1.157895 -0.087719 |
عملیات بازکردن، مرتبسازی، تجزیه و ترکیب عبارات جبری در octave
برای این کار توابع مورد استفاده مشابه سینتکس متلب است. فقط توجه کنید سمبلهایتان را نصب کرده باشید و ماژول مرتبط را فراخوانی کنید:
1 2 3 4 5 6 7 |
% نصب پکیج pkg load symbolic % اطمینان از دسترسی ماژول symbols |