در این مطلب آموزشی از نرم افزار Matlab به آموزش حل معادلات در متلب پرداخته می شود و نحوه حل انواع معادلات در متلب و دستورات مختلف در این زمینه بیان می گردد که از آن جمله می توان به حل دستگاه معادله، حل معادله دیفرانسیلی و . . . اشاره کرد.
حل معادلات در متلب
معادله چند جمله ای، دستورهای roots و poly
دستور (roots(d ریشه های چندجمله ای را به دست می دهد که ضرائب آن اعضاء بردار [ . . . d = [n1 n2 باشند. این دستور از روشهای پیشرفته ی محاسبات عددی برای رسیدن به ریشه ها استفاده می کند و نیازی به حدس اولیه ندارد. roots ریشه های موهومی و حقیقی را به دست می آورد.
دستور (poly(b چند جمله ای را به دست می دهد که ریشه های آن اعضاء بردار b باشند. این دو توابع معکوس یکدیگر هستند.
مثال : ریشه ی معادله ی چند جمله ای
>> r1 = roots ([3 4.6 -5.8])
یا
P = [3 4.6 -5.8];
r=roots(p)
حل معادله با تابع کتاب خانه ای fzero
fzero سعی می کند که مقدار ریشه واقعی را حول یک حدس اولیه یا نقطه شروع که دستی وارد می شود، پیدا کند fzero در واقع محل تغییر علامت تابع را پیدا می کند، از اینرو بهتر است برای توابع پیوسته به کار رود.
این تابع که به این شکل نوشته می شود: (fzero(f,x0 دو آرگومان اصلی دارد. تابع f که می تواند به صورت رشته یا گیره وارد شود.( اگر در مقابل نام تابع علامت @ بیاید گیره آن تابع را ایجاد کرده ایم ) و حدس اولیه ، x0 مقداری است نزدیک به ریشه و دستی وارد می شود.
پارامترهای دیگر:
P به صورت مقابل وارد می شود (fzero(f, X0, P در صورت مراجعه به تابع، P مقدار ورودی تابع f خواهد بود.
Options به صورت مقابل وارد می شود (fzero(f, X0, options
مثال: ارسال به صورت رشته
>> y = ‘cos(x)+sin(x)+log(x)’;
>> X0 = fzero(y,1)
X0 = 0.2885
ریشه را امتحان می کنیم
>> cos(X0) + sin(X0) + log(X0)
ans = 0119
حل دستگاه معادلات غیر خطی با fsolve
فرم کلی این تابع به شکل زیر است:
x = fsolve(fun,x0,options,P1,P2, … )
fun تابع مخصوصی است که فرم معادلات غیرخطی خود را در آن می گذاریم، و ویژه کاربرد در آرگومان fsolve یا نظیر آن مانند ode45 است. بقیه پارامترها مشابه fzero هستند.
اگر سمت چپ تساوی [x,fval] قرار دهیم، جواب معادلات دستگاه نیز در ازای ریشه های به دست آمده چاپ خواهند شد.
دستگاه زیر را حل می کنیم:
x2 – x1-x2 = 0
۲x1– x2-x1 = 0
function F = fsl (X)
F (1) = X (2) – X (1) ^ -X (2);
F (2) = 2 * X (1) – X (2) ^ -X (1);
% The following form of writing F is also accepted
% F = [X (2) – X (1) ^ -X (2);
% ۲ * X (1) – X (2) ^ -X (1)];
در تابع فوق فرض زیر برقرار است:
F = [F (1) F (2)]
X = [X (1) X (2)]
که fsolve بردار X را به دست خواهد داد.
>> format bank
>> X0 = [2 1];
>> [X, F] = fsolve (@fsl, X0)
X = 2.98 0.55 F = -0.00 -0.00
حل معادلات با دستور Solve
از دستور (solve(fun برای تعیین سمبلیک ریشه های معادلات استفاده می شود. fun دستگاهی از معادلات است. متغیر مستقل نزدیک ترین حرف به x است، اما در فرم (solve(fun,var پارامتر var تعیین کننده متغیر مستقل است.
معادله fun می تواند به صورت سمبلیک یا به صورت رشته نوشته شود. اگر طرف راست معادله صفر باشد می توانیم آن را ننویسیم، در غیر این صورت باید طرف راست بعد از علامت تساوی نوشته شود.
اگر معادله دارای ضرائب عددی باشد، پاسخ های عددی سمبلیک حاصل می شود، که قابل تبدیل به عدد است. اگر معادله دارای ضرائب سمبلیک باشد، پاسخ های سمبلیک حاصل می شود.
حل معادله دیفرانسیل عادی با ODE45
شکل کلی این دستور این گونه است:
[T,Y] = ODE45(odefun, T, Y0, options, p1, p2,…)
odefun تابع مخصوصی است که فرم معادلات دیفرانسیل خود را در آن می گذاریم، و ویژه کاربرد در آرگومان ode45 یا نظائرش مانند fsolve است.
T فاصله ای است که در آن تابع انتگرال گیری شده به دست می آید منحنی یا شکل موج جواب معادلات در آن فاصله ترسیم می شود.
Tرا به دو طریق می توان تعیین کرد:
- می توانیم ابتدا و انتهای فاصله زمانی را تعیین و آن را به این شکل معرفی کنیم:
[T = [T1 T2 در این صورت تعداد عناصر بردار زمان توسط MATLAB تعیین می شود.
- تعداد عناصر T را خودمان معین کنیم، مثلاً . T = 1:40تعداد درایه های بردارهای جواب معادله دیفرانسیل برابر با تعداد درایه های بردار زمان خواهد بود.
Y0 بردار شرائط اولیه است که محل شروع ستون های Yمنحنی جواب و مشتقات آن را تعیین می کند.
optionsیک بردار از نوع ساختار structure است و شامل انتخاب هائی است که توسط مقادیر odeset تعیین می شوند.
p2, p1, …بردارهایی هستند که در صورت وجود داشتن در آرگومان odefun به آن رد می شوند.
Yماتریس جواب است که هر ستون آن یکی از معادله های پاسخ (“y,y’,y) است که برحسب بردار T باید در نظر گرفته شوند رسم شوند.
حل معادلات دیفرانسیل عادی
دستور زیر برای حل سمبولیک معادلات دیفرانسیل عادی به کار می رود:
r = dsolve ( ‘eq1’, ‘eq2’, …, ‘cond1’, ‘cond2’, …, ‘v’)
eqها معادلات، condها شرائط اولیه، و vمتغیر مستقل است، در صورت نبود آن نزدیک ترین حرف به x متغیر مستقل فرض می شود.
حل دستگاه معادلات خطی
بهتر است دستگاه معادلات خطی با استفاده از تقسیم راست به چپ ماتریسی حل شود.
مثال: حل دستگاه سه معادله خطی
x + 1/2 y + 1/3 z = 1
۱/۳ x + 1/4 y + 1/5 z = 1
۱/۲ x + 1/3 y + 1/4 z = 1
صورت ماتریسی دستگاه فوق چنین است:
│ ۱ ۱/۲ ۱/۳ │ │X1│ │۱│
│ ۱/۳ ۱/۴ ۱/۵ │ × │X1│ = │۱│
│ ۱/۲ ۱/۳ ۱/۴ │ │X1│ │۱│
که به صورت M * X = B نمایش داده شده و با فرمول X = M\B یا X = inv (M) * B حل می شود.
>> M = [1 1/2 1/3; 1/2 1/3 1/4; 1/3 1/4 1/5];
>> B = [1 1 1]’;
>> X = M\B
X = 3.0000 -24.0000 30.0000
تابع معکوس یک تابع باfinverse
این دستور تابع معکوس تابعی یک تابع ریاضی را بر می گرداند.
ترکیب تابعی با compose
عبارت (compose(f,g تابع (g = g(y را در (f = f(x ترکیب می کند به نحوی که ((f(g(y به دست آید.
آموزش MATLAB & SIMULINK 2016 به صورت تصویری در قالب ۲ دی وی دی آموزشی به صورت اینتراکتیو همراه با نرم افزار متلب ۲۰۱۶ را از لینک زیر می توانید تهیه کنید.
سلام ممنون از سایت خوب و آموزندتون
من یه دستگاه با چهار معادله و چهار مجهول دارم که علاوه بر اینکه مجهول هام به صورت حاصل ضرب همدیگه در معادله ظاهر می شن بلکه ازشون انتگرال هم گرفته می شه مقادیر اولیه داریم می تونیم یه عددی بذاریم همینجوری
ولی اصلا نمی دونم چطور این مسیله رو وارد متلب کنم