我想用matlab 四阶龙格库塔公式 模拟振动模型
这里还没有设置碰撞条件,绘制x-v图,最后绘图应该得到椭圆,但是我得到
用四阶龙格库塔公式的matlab代码为
```bash
zeta=0;
omega=2;
h=0.01;
tau=0;
t=0;
X_last=[-1,0]; % 初始二维向量
x_list = zeros(1,314);
v_list = zeros(1,314);
% 计算相空间轨道
for i=1:314
X_next = next_point(X_last, t, zeta, omega, tau, h);
x_list(i) = X_next(1);
v_list(i) = X_next(2);
X_last = X_next;
t = t + h;
end
plot(x_list,v_list);
% 求导式,X,DX为二维向量形式
% 这个函数被next_piont调用
function DX=f(X, t, zeta, omega, tau)
DX(1)=X(2);
DX(2)=-X(1) - 2*zeta*X(2) + sin(omega*t + tau);
end
% 单步龙格库塔公式,从上一个点计算下一个点
% 这个函数调用函数f
function X_next = next_point(X_last, zeta, omega, t, tau, h)
K1 = f(X_last, t, zeta, omega, tau);
K2 = f(X_last + h*K1/2, t + h/2, zeta, omega, tau);
K3 = f(X_last + h*K2/2, t + h/2, zeta, omega, tau);
K4 = f(X_last + h*K3, t+h, zeta, omega, tau);
X_next = X_last + h*(K1 + 2*K2 + 2*K3 + K4)/6;
end
```