Я пытаюсь построить интегратор четвертого порядка Runge Kutta для моделирования простого движения снаряда. Мой код выглядит следующим образомExploding Runge Kutta Method
double rc4(double initState, double (*eqn)(double,double),double now,double dt)
{
double k1 = eqn(initState,now);
double k2 = eqn(initState + k1*dt/2.0,now + dt/2.0);
double k3 = eqn(initState + k2*dt/2.0,now + dt/2.0);
double k4 = eqn(initState + k3*dt, now + dt);
return initState + (dt/6.0) * (k1 + 2*k2 + 2*k3 + k4);
}
Это называется в цикле в то время как
while (time <= duration && yPos >=0)
{
xPos = updatePosX(xPos,vx,timeStep);
yPos = updatePosY(yPos,vy,timeStep);
vx = rc4(vx,updateVelX,time,timeStep);
vy = rc4(vy,updateVelY,time,timeStep);
cout << "x Pos: " << xPos <<"\t y Pos: " << yPos << endl;
time+=timeStep;
myFile << xPos << " " << yPos << " " << vx << " " << vy << endl;
}
Однако, вопреки тому, что должно произойти, мои результаты просто взорвать. Что тут происходит?
вы имели в виду назвать 'RC4 (updateVelX, ух, время, Timestep) 'вместо' rc4 (vx, updateVelX, time, timeStep) (обратите внимание на инверсию первых 2 аргументов)? – SleuthEye
Да, я хочу обновить, используя шаг времени – user3277807
Я попытался исправить код, как показано выше, и я все еще сталкиваюсь с той же проблемой. – user3277807