1. 微分方程的解析解
%%
clc; clear;
r = dsolve('Du=1+u^2', 't');
disp(r);
tan(C3 + t)
i
-i
%%
clc; clear;
y = dsolve('D2y+4*Dy+29*y = 0', 'y(0)=0, Dy(0)=15', 'x');
disp(y);
3*sin(5*x)*exp(-2*x)
%%
clc; clear;
[x, y, z] = dsolve('Dx=2*x-3*y+3*z', 'Dy=4*x-5*y+3*z', 'Dz=4*x-4*y+2*z', 't');
disp(x);
disp(y);
disp(z);
exp(-t)*(C8 + C10*exp(3*t))
exp(-2*t)*(C9 + C8*exp(t) + C10*exp(4*t))
exp(-2*t)*(C9 + C10*exp(4*t))
2. 微分方程的数值解
注意
- 在解n个未知函数的方程组时,x0和x均为n维向量,m-文件中的待解方程组应以x的分量形式写成
- 使用Matlab软件求数值解时,高阶微分方程必须等价地变换成一阶微分方程组
3. 微分方程数值例题
function dy = fun4(t, y)
dy = zeros(2, 1);
dy(1) = y(2);
dy(2) = 1000*(1 - y(1)^2)*y(2) - y(1);
end
%%
% 例4
clc; clear;
[T, Y] = ode15s('fun4', [0 3000], [2 0]);
plot(T, Y(:, 1), '-');
function dy = fun5(t, y)
dy=zeros(3, 1);
dy(1)=y(2)*y(3);
dy(2)=-y(1)*y(3);
dy(3)=-0.51*y(1)*y(2);
end
%%
clc; clear;
[T, Y] = ode45('fun5', [0 12], [0 1 1]);
plot(T, Y(:, 1), '-', T, Y(:, 2), '*', T, Y(:, 3), '+');
4. 导弹追踪问题
设位于坐标原点的甲舰向位于x轴上点A(1, 0)处的乙舰发射导弹,导弹头始终对准乙舰.如果乙舰以最大的速度v0(是常数)沿平行于y轴的直线行驶,导弹的速度是5v0,求导弹运行的曲线方程.又乙舰行驶多远时,导弹将它击中?
假设导弹在 t 时刻的位置为 P(x(t), y(t)),乙舰位于 (1, ) 0 Q v t .由于导弹头始终对准乙舰,此时直线 PQ就是导弹的轨迹曲线弧 OP 在点 P 处的切线
- 数值解
function dy = eq1(x, y)
dy = zeros(2, 1);
dy(1)=y(2);
dy(2)=1/5*sqrt(1+y(1)^2)/(1-x);
end
%%
clc; clear;
x0 = 0;
xf=0.9999;
[x, y]=ode15s('eq1',[x0 xf],[0 0]);
plot(x,y(:,1),'b.')
hold on
y=0:0.01:2;
plot(1,y,'b*');