MATLAB在求解微分方程的时候怎么同时输出所求函数的导数?(使用ode45的同时输出微分方程结果)

以Van Del Pol这样一个微分方程为例:
Van Del Pol方程
求解这样一个微分方程,MATLAB代码如下:

tspan=0:0.01:15;
q0=[2;0];%初值 [q;q']
[t,q]=ode45(@vdp1,tspan,q0);

plot(t,q(:,1),t,q(:,2))
title('Solution of van der Pol Equation (\mu = 1) with ODE45');
xlabel('Time t');
ylabel('Solution q dq');
legend('q_1','q_2')


%将以下代码保存为vdp1.m
function qdot=vdp1(t,q)
%求Van Der Pol 方程
% 令q1=q' ,q2=q'' 把q''+(q^2-1)q'+q=0写成状态方程
qdot=zeros(2,1);%使xdot成为二元列向量
qdot(1)=q(2);
qdot(2)=(1-q(1)^2)*q(2)-q(1);

end

结果如图:
在这里插入图片描述

所获得的结果是q 和 dq

这时候我们想获得ddq的结果,该怎么办呢?

有两个办法:
1.使用deval函数
2.使用gradient函数

下面分别叙述

1.使用deval函数

tspan=0:0.01:15;
q0=[2;0];%初值 [q;q']
sol=ode45(@vdp1,tspan,q0);
[q,dq]=deval(sol,tspan)
plot(t,q(1,:),t,q(2,:),'ro')
title('Solution of van der Pol Equation (\mu = 1) with ODE45');
xlabel('Time t');
ylabel('Solution q');
legend('q','q''')

figure(2)
plot(t,dq(1,:),'ro',t,dq(2,:))
xlabel('Time t');
ylabel('Solution dq');
legend('q''','q''''')


%以下代码保存为vdp1.m
function qdot=vdp1(t,q)
%求Van Der Pol 方程
% 令q1=q' ,q2=q'' 把q''+(q^2-1)q'+q=0写成状态方程
qdot=zeros(2,1);%使xdot成为二元列向量
qdot(1)=q(2);
qdot(2)=(1-q(1)^2)*q(2)-q(1);

end

结果如图
在这里插入图片描述
输出的结果是 dq和ddq
从dq结果的对比可以看到,此方法有效。

2.使用gradient函数

tspan=0:0.01:15;
q0=[2;0];%初值 [q;q']
[t,q]=ode45(@vdp1,tspan,q0);
[~,dq] = gradient(q, mean(diff(t)));

plot(t,q(:,1),t,q(:,2),'ro')
title('Solution of van der Pol Equation (\mu = 1) with ODE45');
xlabel('Time t');
ylabel('Solution q');
legend('q','q''')

figure(2)
plot(t,dq(:,1),'ro',t,dq(:,2))
xlabel('Time t');
ylabel('Solution dq');
legend('q''','q''''')



%以下代码保存为vdp1.m
function qdot=vdp1(t,q)
%求Van Der Pol 方程
% 令q1=q' ,q2=q'' 把q''+(q^2-1)q'+q=0写成状态方程
qdot=zeros(2,1);%使xdot成为二元列向量
qdot(1)=q(2);
qdot(2)=(1-q(1)^2)*q(2)-q(1);

end

输出结果如图所示:
在这里插入图片描述
同样,gradient也是实现输出所要求解微分方程的导数。

从下图可以看到:两个函数实现的效果是一样的.

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值