如果我有一个描述质量弹簧阻尼系统的一阶微分方程的二阶微分方程,那么当我不知道第一个时,我如何使用欧拉方法绘制这个方程? - 阶差?我想在MatLab中这样做。这是一个家庭作业问题,所以我没有发布任何代码。我只想简要介绍一下你是如何做到这一点的。
二阶导数是d2(t + 1)=( - 1 / m)*(c * d1 + k * y)其中c,m,k是常数,y最初是1,d1是第一个-order差分从0开始,t是时间。
有什么想法吗?
谢谢:)。
答案 0 :(得分:3)
将二阶方程重写为一阶方程组。未知数对应于位置和速度。
答案 1 :(得分:3)
二阶方程可以转换为一阶微分方程组。
function dy = ex(y)
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = -c/m*y(2) - k/m*y(1);
从这里你可以使用Matlab的内置求解器。 ode23s
可以正常使用:
[t,y] = ode23s(@ex, y0, tspan)
答案 2 :(得分:2)
一阶微分方程组可能看起来像y1 = y
。 '
用于表示时间导数。
y1' = y2
y2' = -c/m*y2 - k/m*y1
答案 3 :(得分:1)
存在形式(x(t),x'(t))= exp(A t)*(x(0),x'(0))的解析解,其中A是2×2矩阵。如果您不需要使用matlab的ODE求解器,这是找到系统时间演变的正确方法。
要查找A,请以此格式编写系统
所以这里A = [0 1; -k / m -c / m]
设置k / m = 1,并且c / m = 0.1,我们可以写
t = linspace(0,20, 1000);
A = [0 1; -1 -0.1];
for j = 1:length(t); x(j,:) = expm([0 1; -1 -0.1]*t(j))*[1;0]; end
plot (t,x)
legend ('position', 'velocity');
title ('underdamped spring starting at y = 1; y'' = 0')