مشخصات مقاله
-
1696
-
0.0
-
15079
-
0
-
0
حل معادلات جبری
Algebra
حل معادلات جبری
به نظر می رسد که تمامی مثال ها در متلب بهتر از GNU کار می کنند که به طور جایگزین Octave نامیده می شود. اما برای حل معادلات جبری پایه، MATLAB و Octave کمی با هم تفاوت دارند، بنابراین باید تلاش کنیم در بخش های جداگانه MATLAB و Octave را پوشش دهیم.
حل معادلات پایه ای جبری در متلب
از تابع solve برای حل معادلات جبری استفاده می شود. در ساده ترین حالت، تابع solve معادله را در داخل کوتیشن قرار می دهد. برای مثال فرض کنید می خواهیم x ای که در معادله x-5 = 0 صدق می کند را پیدا کنیم.
solve('x-5=0')
متلب عبارت بالا را اجرا کرده و جواب را به صورت زیر بر می گرداند.
ans =
5
همچنین می توانیم برای جواب یک نام تعیین کنیم، به صورت زیر
y = solve('x-5 = 0')
متلب عبارت بالا را اجرا کرده و جواب را به صورت زیر بر می گرداند.
y =
5
همچنین می توانیم سمت راست معادله چیزی ننویسیم.
solve('x-5')
متلب عبارت بالا را اجرا کرده و جواب را به صورت زیر بر می گرداند.
ans =
5
اگر معادله شامل علامت های متعدد باشد آنگاه متلب به صورت پیش فرض فرض می کند که شما جواب x را می خواهید، گرچه تابع solve حالت های دیگر را هم دارد.
solve(equation, variable)
همچنین می توان متغیر را ذکر کرد. به عنوان مثال می خواهیم معادله v – u – 3t2 = 0 را برای v حل کنیم. در این حالت به صورت زیر می نویسیم.
solve('v-u-3*t^2=0', 'v')
متلب عبارت بالا را اجرا کرده و جواب را به صورت زیر بر می گرداند.
ans =
3*t^2 + u
حل معادلات جبری پایه در Octave
در Octave از تابع roots برای حل معادلات جبری استفاده می شود. به عنوان مثال معادله x-5 = 0 را در Octave حل می کنیم.
مثال
roots([1, -5])
Octave عبارت بالا را اجرا کرده و به صورت زیر بر می گرداند.
ans = 5
همچنین می توان به صورت زیر نوشت.
y = roots([1, -5])
و نتیجه به صورت زیر دیده می شود.
y = 5
حل معادلات درجه دوم در متلب
تابع 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
حل معادلات درجه دوم در Octave
فرض کنیم می خواهیم معادله x2 -7x +12 = 0 را در Octave حل کنیم.
مثال
یک فایل اسکریپت ایجاد کرده و کد های زیر را بنویسید.
s = roots([1, -7, 12]);
disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));
فایل بعد از اجرا به صورت زیر نوشته می شود.
The first root is:
4
The second root is:
3
حل معادلات از درجه بالاتر در متلب
تابع solve همیشه می تواند معادله از درجه بالا را حل کند.
مثال
معادله (x-3)2(x-7) = 0 را حل کنید.
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));
% 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)));
فایل را اجرا می کنیم.
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
قابل ذکر است که دو تا از این ریشه ها مختلط می باشد.
حل معادلات از درجه بالاتر در Octave
معادله درجه چهار x4 − 7x3 + 3x2 − 5x + 9 = 0 را در Octave حل کنید.
مثال
یک فایل اسکریپت ایجاد کنید و کد های زیر را در آن بنویسید.
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)));
فایل بعد از اجرا به صورت زیر نوشته می شود.
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
دستگاه جواب معادلات در متلب
تابع 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
حل دستگاه معادلات در Octave
یک روش برای حل دستگاه معادلات خطی 'n' تایی با 'n' متغیر با اندکی تفاوت با روش قبلی وجود دارد.
دستگاه زیر را در نظر بگیریم.
5x + 9y = 5
3x – 6y = 4
یک دستگاه از معادلات خطی به صورت Ax = b نوشته می شود، که A ماتریس ضرایب نام دارد و b بردار ستونی در سمت راست معادلات خطی و X بردار ستونی جواب می باشد که در برنامه زیر نوشته شده است.
یک فایل اسکریپت ایجاد کرده و کد های زیر را در آن بنویسید.
A = [5, 9; 3, -6];
b = [5;4];
A \ b
وقتی فایل اجرا می شود، نتیجه به صورت زیر نمایش داده می شود.
ans =
1.157895
-0.087719
به طور مشابه، می توان دستگاه خطی بزرگ تر را حل کرد.
x + 3y -2z = 5
3x + 5y + 6z = 7
2x + 4y + 3z = 8
معادلات گسترش و جمع آوری در متلب
تابع expand و collect به ترتیب گسترش و جمع آوری یک معادله می باشد. مثال زیر این مفهوم را بهتر نشان می دهد.
یک فایل اسکریپت ایجاد کرده و کد های زیر را در آن بنویسید.
syms x %symbolic variable x
syms y %symbolic variable x
% 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
معادلات گسترش و جمع آوری در Octave
از پکیج symbolic استفاده می کنیم، توابع expand و collect به ترتیب گسترش و جمع آوری یک معادله می باشد. مثال زیر این مفهوم را بهتر نشان می دهد.
یک فایل اسکریپت ایجاد کرده و کد های زیر را در آن بنویسید.
% first of all load the package, make sure its installed.
pkg load symbolic
% make symbols module available
symbols
% define symbolic variables
x = sym ('x');
y = sym ('y');
z = sym ('z');
% 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), z)
collect(x^4*(x-3)*(x-5), z)
وقتی فایل را اجرا می کنید، نتیجه زیر در آن دیده می شود.
ans =
-45.0+x^2+(4.0)*x
ans =
210.0+x^4-(43.0)*x^2+x^3+(23.0)*x
ans =
sin((2.0)*x)
ans =
cos(y+x)
ans =
x^(3.0)*(-7.0+x)
ans =
(-3.0+x)*x^(4.0)*(-5.0+x)
تجزیه و ساده سازی عبارات جبری
تابع 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