numerical-methods - 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
解决方案
从您的代码中,我想您正在尝试实现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)
推荐阅读
- amqp - 具有多个客户端的 AMQ 地址到多播队列
- processwire - 在 processwire 中更改页面的 url 链接
- excel - 我正在尝试使用一个公式来计算基于完成的小时数/完成的项目与估计的小时数/项目总数相比的百分比
- php - 如何在树枝页面中填充数组中的所有项目而不是最新的项目
- c++ - 调用 CreateGraphicsPipelineState 时的 E_INVALIDARG
- c# - 自定义 GUID 始终在 object.Equals 上返回 false
- javascript - 在 React 原生应用中应用 Redux
- swift - Xcode 4 没有声音
- magento2 - 获取错误代码 201 CCAvenue 支付网关
- php - 谷歌云语音识别 API (PHP) - 文件编码问题