【发布时间】:2020-01-12 06:10:26
【问题描述】:
我必须求解一个二阶微分方程,并且我特别需要 y 在最后时间点的一阶导数的值。我的代码如下:
[T Y]=ode45(@(t y)vdp4(t,y,0.3),[0 1],[0.3/4,((3*0.3)^0.5)/2]);
我知道输出将包含 ode45 评估函数的值。要获得特定时间值的 y 值,建议在 MATLAB documentation 中给出两个以上的时间点。我也是这么做的。
tspan=[0:0.01:1]
[T Y]=ode45(@(t y)vdp4(t,y,0.3),tspan,[0.3/4,((3*0.3)^0.5)/2]);
T 向量仍然没有从 0 到 1 的所有值(最后一个值为 0.39)。这种情况尤其发生在多次执行 ode45 函数之后。我在MATLAB documentation 中发现了其他内容:使用“sol”结构来降低特定 t 值的值。这是正确的方法吗? 作为参考,我的微分方程在以下函数中。
function dy = vdp4(t,y,k)
dy = zeros(2,1); % a column vector
dy(1)=y(2);
dy(2)=(y(2)^2-2*t*y(2)+2*y(1))/k+2;
end
编辑:我提供了参数值。它现在应该可以执行了。
【问题讨论】:
-
您是否收到有关时间步太小或值超出浮点范围的任何错误消息或警告?请通过提供所有参数使您的示例可执行,在本例中为
k。 -
我提供了 k 值。是的,有关于时间步长的警告。
-
一般来说,方程
v' = (v^2+c)/k有一个包含正切的解,因此如您在t=0.39262926中找到的那样,它在有限时间显示极点。这是精确解的一个特征,因此在任何半途胜任的数值解中都无法避免。是否有一些物理背景可以让您期望有界的解决方案?可能是建模错误。 -
是
/k+2还是/(k+2)? -
微分方程由 y''(t)=(((y'(t))^2 - 2ty'(t)+2y(t))/k)+2 给出。