MATLAB求解代数方程、微分方程的一些常用指令

时间:2022-03-30 10:52:40

MATLAB版本:R2015b

1.求解符号矩阵的行列式、逆、特征值、特征向量

A = sym('[a11, a12; a21, a22]');
deltaA = det(A)
invA = inv(A)
[V, D] = eig(A) %V的列向量为特征向量,D的主对角线元素为相应的特征值

2.求解代数方程的解析解

syms a b c
x = solve('a * x^2 + b * x + c = 0', 'x')

3.求解微分方程(组)的解析解

syms x y
Y1 = dsolve('D2y - 3 * Dy + 2 * y = x', 'x') %通解
Y2 = dsolve('D2y - 3 * Dy + 2 * y = x', 'y(0) = 1', 'y(1) = 2', 'x') %特解

syms f g
[f, g] = dsolve('Df = f + g', 'Dg = g - f', 'Df(0) = 1', 'Dg(0) = 1')

4.泰勒展开

syms x y;
y=sin(x);
taylor(y, x, 'ExpansionPoint', 0, 'Order', 4)

5.多项式拟合

x=linspace(0, 2 * pi, 20);
y = sin(x);
P = polyfit(x, y, 3);
y1 = polyval(P, x);
plot (x, y, ':o', x, y1, '-*')
legend('sin(x)', 'fit')

6.数值法求解微分方程(组)

已知y(0)=2,y'(0)=y"(0)=0.试求方程y'''-e^(-ty)+tyy''+t^2y^2y'=0的数值解。

第一种方式,使用匿名函数:

f = @(t, x)[x(2); x(3); exp(-t * x(1)) - t * x(1) * x(3) - t^2 * x(1)^2 * x(2)];
x0 = [2; 0; 0];
tf = 4;
a1 = [2, 3];
a2 = 8;
options = odeset;
options.RelTol = 1e-7;
[t, x] = ode45(f, [0, tf], x0, options);
plot(t, x)

第二种方式,使用M-函数:

(必须)新建一个M文件,编写M-函数

function dx = fun(t, x, r, g)
dx = [r(1) + x(2); r(2) * x(3); g + exp(-t * x(1)) - t * x(1) * x(3) - t^2 * x(1)^2 * x(2)];

在另一个文件中

x0 = [2; 0; 0];
tf = 4;
r = [2, 3];
g = 8;
options = odeset;
options.RelTol = 1e-7;
[t, x] = ode45(@fun, [0, tf], x0, options, r, g);
plot(t, x)

求得的t是一个NX1的列向量,x是一个NX3的矩阵。

相似的函数还有:ode15s, ode23, ode23s, ode23t, ode23tb, ode113.