حل معادلات در متلب و دستورات مرتبط با حل انواع معادلات

بازدید: 10032 بازدید
حل معادلات در متلب

در این مطلب آموزشی از نرم افزار 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,xدو آرگومان اصلی دارد. تابع f که می تواند به صورت رشته یا گیره وارد شود.( اگر در مقابل نام تابع علامت @ بیاید گیره آن تابع را ایجاد کرده ایم ) و حدس اولیه ،  xمقداری است نزدیک به ریشه و دستی وارد می شود.

پارامترهای دیگر:

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را به دو طریق می توان تعیین کرد:

  1. می توانیم ابتدا و انتهای فاصله زمانی را تعیین و آن را به این شکل معرفی کنیم:

[T = [T1 T2 در این صورت تعداد عناصر بردار زمان توسط MATLAB تعیین می شود.

  1. تعداد عناصر T را خودمان معین کنیم، مثلاً . T = 1:40تعداد درایه های بردارهای جواب معادله دیفرانسیل برابر با تعداد درایه های بردار زمان خواهد بود.

Yبردار شرائط اولیه است که محل شروع ستون های 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 به صورت تصویری در قالب ۲ دی وی دی آموزشی به صورت اینتراکتیو همراه با نرم افزار متلب ۲۰۱۶ را از لینک زیر می توانید تهیه کنید.

آموزش تصویری MATLAB

منبع: نواندیشان

ادامه مطلب