حل معادله در متلب
معادلات در مباحث مختلف مهندسی نقش اساسی دارند. در علوم مهندسی و فیزیک، حل معادلات دیفرانسیل در مدلسازی سیستمهای دینامیکی و در علوم داده و آمار، تحلیل و پیشبینی با استفاده از مدلهای ریاضی و آماری انجام میپذیرد. حل این معادلات با استفاده از تکنیکهای عددی و الگوریتمهای پیچیده امکانپذیر است. نرمافزار متلب با ابزارهای متنوع خود امکان حل معادلات مختلف را به شیوهای مؤثر فراهم میکند. این معادلات معمولا شامل معادلات خطی و غیرخطی، معادلات دیفرانسیل میباشد که نرم افزار متلب هم ابزارهای متعددی برای حل این معادلات ارائه میدهد.
آگاهی از نحوه استفاده از نرم افزار متلب لازمه انجام پروژه در متلب می باشد. می توانید از مجموعه مقالات موسسه پروژستان استفاده کنید. اگر میخواهید مطالب گسترده از متلب را فرابگیرید، وبسایت tutorialspoint پیشنهاد می شود.
1- حل معادلات خطی
مثال1- معادلات خطی با استفاده از ماتریس
معادلات خطی به صورت (Ax = b) مدل میشوند که در آنA ماتریس ضرایب و b بردار مقادیر ثابت است.
clc; clear; close all
A = [13 20; 1 25];
b = [51; 125];
x = A\b;
disp(x);
خروجی برنامه:
-4.0164
5.1607
توضیح: با استفاده از عملگر \ برای حل معادلات خطی توسط ماتریس استفاده میشود.
اگر میخواهید از ماتریس برای حال معادلات خطی خود استفاده کنید باید با مبحث ماتریس به حد کافی آشنا باشید. مطالعه مقالات زیر برای علاقه مندان به مبحث ماتریس پیشنهاد می شود:
1- ماتریس همانی در متلب
2- آموزش ایجاد ماتریس در متلب
3- تغییر شکل و اندازه متلب در ماتریس
4- نحوه تبدیل ماتریس سطری به ستونی و برعکس در متلب
5- چگونگی ضرب ماتریس در MATLAB
6- تقسیم ماتریس ها در Matlab
مثال2- حل معادلات خطی با سایر روشها
در این حالت میتوان از روشهای مستقیم یا تکراری استفاده کرد. روش محاسباتی مستقیم مثل روشهای حذف گاوس و روشهای تکراری مثل روش ژاکوبی و گوس-سایدل است.
clc; clear; close all
A = [13 20; 1 25];
b = [51; 125];
x0=[0;0];
tol=0.001;
maxIter=100;
x = jacobi(A, b, x0, tol, maxIter);
disp(x)
% تعریف تابع ژاکوپی
function x = jacobi(A, b, x0, tol, maxIter)
n = length(b);
x = x0;
for k = 1:maxIter
x_new = zeros(n, 1);
for i = 1:n
sum1 = A(i, 1:i-1)*x(1:i-1);
sum2 = A(i, i+1:n)*x(i+1:n);
x_new(i) = (b(i) – sum1 – sum2) / A(i, i);
end
if norm(x_new – x, inf) < tol
break;
end
x = x_new;
end
end
خروجی برنامه:
-4.0163
5.1606
توضیح: در این مثال از روش ژاکوبی برای حل معادله استفاده شده است.
2. حل معادلات غیرخطی
معمولا برای حل معادلات غیر خطی روش نیوتن-رافسون و روش بیزیر پیشنهاد میشود.
مثال3- روش نیوتن-رافسون
برای حل معادلات غیرخطی به صورت (f(x) = 0) میتوان از روش نیوتن-رافسون استفاده کرد.
clc; clear; close all
f = @(x) x^3 – 12*x; % تابع
df = @(x) 3*x^2-12; % مشتق تابع
x0 = 1; % حدس اولیه
tol = 1e-3;
maxIter = 150;
x = x0;
for k = 1:maxIter
x_new = x – f(x) / df(x);
if abs(x_new – x) < tol
break;
end
x = x_new;
end
disp(x);
خروجی برنامه:
-1.0584e-09
توضیح: توجه شود که جواب مثال نزدیک صفر است که از صورت مساله هم مشخص بود که یکی از جوابهای مساله صفر است.
مثال4- روش بیزیر(روش قدرتمند برای حل معادلات غیرخطی)
clc; clear; close all
f = @(x) 5*x^3 – 2*x – 2; % تابع
x0 = 1; % حدس اولیه
tol = 1e-4;
maxIter = 150;
x = fzero(f, x0);
disp(x);
خروجی برنامه:
0.9150
توضیح: با قرار دادن جواب مثال در تابع اولیه صحت خروجی قابل است.
3. حل معادلات دیفرانسیل
برای حل معادلات دیفرانسیل معمولی میتوان از توابع پرکاربرد ode45, ode23 و غیره استفاده کرد.
مثال5- معادلات دیفرانسیل معمولی (ODE) با روش ode45
clc; clear; close all
% تعریف تابع دیفرانسیل
f = @(t, y) -12*y + t^2 + 1;
tspan = [0 2];
y0 = 0;
[t, y] = ode45(f, tspan, y0);
plot(t, y);
xlabel(‘t’);
ylabel(‘y’);
title(‘Solving diff Eq.’)
grid on
خروجی برنامه:
توضیح: این مثال برای حل معادله زیر است:
dy/dt=-12*y + t^2 + 1;
که در آن شرایط اولیه y0=0 و مدت زمان شبیه سازی از زمان tspan =[0,2] است.
مثال6- معادلات دیفرانسیل معمولی (ODE) با روش ode23
clc; clear; close all
% تعریف تابع دیفرانسیل
f = @(t, y) -y^2 + t*sin(t);
tspan = [1 4];
y0 = 1;
[t, y] = ode23(f, tspan, y0);
plot(t, y);
xlabel(‘t’);
ylabel(‘y’);
title(‘Solving diff Eq.’)
grid on
خروجی برنامه:
توضیح: این مثال برای حل معادله زیر است:
dy/dt= -y^2 + t*sin(t);
که در آن شرایط اولیه y0=1 و مدت زمان شبیه سازی از زمان tspan =[ 1 4] است.
4- معادلات دیفرانسیل جزئی (PDE)
حل معادلات دیفرانسیل جزئی به روشهای عددی مانند روش تفاضلات محدود نیاز دارد.
مثال7- حل معادله لاپلاس
clc; clear; close all
% پارامترها
L = 10; % طول دامنه
Nx = 50; % تعداد نقاط در جهت x
dx = L / (Nx-1); % فاصله بین نقاط
% ماتریس و مقادیر اولیه
u = 0.85*ones(Nx, 1);
u_new = zeros(Nx, 1);
alpha = 0.01;
for t = 1:1000
for i = 2:Nx-1
u_new(i) = u(i) + alpha * (u(i+1) – 2*u(i) + u(i-1));
end
u = u_new;
end
x = linspace(0, L, Nx);
plot(x, u);
xlabel(‘x’);
ylabel(‘u’);
title(‘Laplace Eq Solving’);
grid on
خروجی برنامه:
توضیح: با توجه به ضرایب و تعریف معادله لاپلاس این مساله از طریق تعریف بصورت معادله عددی قابل حل است که در آن طول فضای مساله (L) و تعداد نقاط (N) است و شرایط اولیه 0.85 است.


