MATLAB求解代数方程、微分方程的一些常用指令
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.