- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
下面是我的 Verlet 函数代码,将从我的主脚本中调用。
% verlet.m
% uses the verlet step algorithm to integrate the simple harmonic
% oscillator.
% stepsize h, for a second-order ODE
function vout = verlet(vinverletx,h,params)
% vin is the particle vector (xn,yn)
x0 = vinverletx(1);
x1 = vinverletx(2);
% find the verlet coefficients (F=0)
D = (2*params(1))+(params(3)*h);
A = (2/D)*((2*params(1))-(params(2)*h^2));
B=(1/D)*((params(3)*h)-(2*params(1)));
x2 = (A*x1)+(B*x0);
vout = x2;
% vout is the particle vector (xn+1,yn+1)
end
我写了一个脚本来测试这个功能。上下文是简谐运动,将测试 Verlet 算法与其他算法相比的相对精度。
这是我的测试脚本:
% verlet test
clear all
close all
% don't define fixed paramaters every loop
h = 0.001;
m = 7.4; % Mass
k = 7.7; % Return force
b = 0; % Drag
params = [m,k,b];
% verlet
x=2; % define initial values and put into vector form
v=0;
vin = [x,v];
vstorex = vin(1);
vstorev = vin(2);
for n=1:200
if n == 1
vnext = eulerintegrate(vin,n,h,params); % the next position and velocity
vstorex = [vstorex;vnext(1)]; %#ok<*AGROW> % store xn and vn+1
vinverletx = [vin(1),vnext(1)]; % now we have two x values for the verlet algorithm!
else if n ==2
xnext=verlet(vinverletx,h,params);
vstorex = [vstorex;xnext];
else
vinverletx = [vstorex(n),vstorex(n-1)];
xnext=verlet(vinverletx,h,params);
vstorex = [vstorex;xnext];
end
end
end
plot(vstorex);
生成的图在步长为 0.001 的 200 次运行中大幅膨胀 - http://i.imgur.com/GF2Zdvu.png
这是步长为 0.0001 的 200 次运行:http://i.imgur.com/u0zCUWS.png
正如您很容易看出的那样,它也会以类似的方式爆炸。我的代码中一定有问题(我看不到)。
提前致谢!
最佳答案
你的微分方程是 x''=a(x)=-k/m*x
,带有基本 Verlet 方法的中点公式
x0-2*x1+x2= h*h*a(x1)
你得到了
x2 = -x0+(2-h*h*k/m)*x1
要获得正确的错误顺序,您需要尽可能最好的初始化,即
x1 = x0 + v0*h + 0.5*a(x0)*h*h
您不能在存在拖动的情况下使用 Verlet 方法。或者至少您不能指望它具有广告宣传的特性。这些仅适用于保守系统,其中力来自势场,并且仅来自势场。
在该过程中,您希望这两个值按递增的索引顺序排列。在函数调用中,您按索引降序构造输入。除了更正该错误之外,我还会更改整个循环以将其简化为
vin = [x,v];
vnext = eulerintegrate(vin,n,h,params); % the next position and velocity
vstorex = [vin(1), vnext(1)]; % or to the same effect: [x, x+h*v]
for n=2:200
vinverletx = [vstorex(n-1),vstorex(n)];
xnext=verlet(vinverletx,h,params);
vstorex = [vstorex;xnext];
end
关于algorithm - MATLAB:Verlet 算法 -,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29701350/
我使用此处找到的时间校正 Verlet 集成:http://www.gamedev.net/page/resources/_/technical/math-and-physics/a-simple-t
我正在尝试学习 Verlet 集成,主要是因为我很无聊,并且想为我正常的“弹跳球”学习练习增添趣味。 我在 http://sandbox.electricgrey.com:8080/physics/
有一个常用的verlet-integration Johnathan Dummer 在网上的公式,称为 Time-Corrected Verlet。但是我读过几个论坛帖子,人们在某些情况下会得到奇怪或
我正在使用 Haskell 制作 Verlet 积分器来模拟重力。积分器使用对象的前两个位置作为种子,并在此后生成其余位置。 我认为在 Haskell 中实现此目的的一个好方法是使用无限列表。然而,当
我知道这个标题让人大跌眼镜,但它主要是一个副作用问题。我正在编写一个 Android 应用程序,我可以将它与我在物理课上学习的数学一起使用。这是一个 2D 弹跳球应用程序。我正在使用时间校正的 Ver
我想为游戏创建一些 physx,我从小例子开始了解它是如何工作的。在此期间我遇到了一些问题,但我在 90% 内解决了它们。 为了创建我的示例,我研究了一些其他示例并创建了我使用的示例:codeflow
我正在尝试使用 verlet integration用于制作软体球体。 我主要是创建一个网格并通过 Spring 连接每个顶点。我正在使用 three.js 来渲染球体。我相信一切正常,但我不确定如何
我的印象是,如果被建模的系统确实如此,算法应该能够节约能源。我正在模拟太阳系,它应该节约能源。该程序保留了角动量并确实产生了稳定的轨道,但总能量(动能 + 重力势能)围绕某个基线振荡。振荡是显着的。是
我知道 Velocity Verlet 没有 Verlet 的初始化问题并且在其工作中有速度计算,而 Time Corrected Verlet 对于不同的时间步长是正确的但不包括速度计算。我想要像“
下面是我的 Verlet 函数代码,将从我的主脚本中调用。 % verlet.m % uses the verlet step algorithm to integrate the simple ha
我正在构建一个物理引擎,我有某种“伪 verlet”的东西在运行,我想将它升级到“真正的”verlet。所以我找到了一篇文章并开始工作。在我添加了我认为是一个很好的近似值之后,引擎不再工作了。有人可以
我是 Haskell 的新手,作为练习,我一直在尝试实现 Joel Franklin 的《物理计算方法》一书中的一些代码(用 Mathematica 编写)。我编写了以下代码以将 lambda 表达式
我正在尝试为具有周期性或反射性边界条件的二维盒子中的 lennard-jones 流体编写分子动力学模拟。模拟似乎在有反射边界的情况下运行良好,但出于某种原因,周期性盒子中的粒子在几百个积分步骤后开始
我的下面的代码(应该)求解两个物体的运动方程,但结果是粒子运行方式,我无法找到错误在哪里 import numpy as np import matplotlib.pyplot as plt plt.
对于我的建模和仿真类(class)项目,我想模拟一个太阳系。我从一颗恒星(太阳)和一颗行星(地球)开始,但我已经遇到了一些问题。我现在花了一些时间来回顾和学习不同的公式和方法来模拟行星的轨道将如何受到
问题 我实现了 Verlet 速度算法来计算 2 个物体在重力作用下相互作用的轨迹(仅限牛顿引力)。绕轨道运行的小天体质量很小,位于轨道中心的天体质量很大。 理论上,Velocity Verlet 不
我正在尝试通过速度 verlet 模拟地球-太阳系统,但不知何故,太阳不会围绕原点(质量减少的位置)运行,而是漂移。我花了很多时间查看我的算法,但找不到缺陷。 有人知道这里出了什么问题吗? 这是模拟图
我只是在测试游戏中轨道动力学的几种集成方案。我在这里以持续和适应性的步骤参加了 RK4 http://www.physics.buffalo.edu/phy410-505/2011/topic2/ap
我在理解我尝试使用 Three.js 和 yomboprime 的 GPUComputationRenderer 实现的逻辑时遇到了问题。 ( https://github.com/yomboprim
我是一名优秀的程序员,十分优秀!