首页 > 解决方案 > Verlet方法中后向差分的幅度增加

问题描述

我在使用反向差异的简单谐振子上增加振荡时遇到了麻烦。这是我在 Scilab 中的代码

function [x] = back(h, tf)
k = 2;
m = 1;
i = 2;

t(i - 1) = 0;
x(i - 1) = 10;
v(i - 1) = 0;
t(i) = t(i - 1) + h
v(i) = v(i - 1) - h * (k / m) * x(i - 1)

while t(i) < tf
    t(i + 1) = t(i) + h
    x(i + 1) = x(i - 1) - 2 * (k / m) * v(i) * h
    i = i + 1
end

plot(t, x, 'b');

endfunction

标签: numerical-methodsdifferential-equationsscilab

解决方案


从您的代码中,我想您正在尝试实现velocity-Verlet 方案。这是具有微分方程的简单振荡器的实现:

                                              
function [x] = back(h, tf)
  k = 2;
  m = 1;

  t = 0:h:tf;
  x(1) = 10;
  v(1) = 0;

  for i=2:length(t)
    x(i) = x(i - 1) + v(i - 1) * h - k / m * x(i-1) * h^2 / 2;
    v(i) = v(i - 1) - k / m * (x(i) + x(i-1)) * h / 2;
  end

  plot(t, x, 'b');
endfunction

[x] = back(0.01, 10)

在此处输入图像描述


推荐阅读