<分区>
我正在尝试使用四阶 RK 方法对炮弹的弹丸运动进行编码。我在以下代码中遇到问题。
for (i=1; i<=n; i=i+1)
{
ax[i]= (-kk[i]*v[i]*vx[i])/m;
ay[i]= ((-kk[i]*v[i]*vy[i])-(m*g))/m;
k1= ax[i];
m1= ay[i];
k2= (-kk[i]*v[i]*(vx[i]+(k1*delt/2)))/m;
m2= (-kk[i]*v[i]*(vy[i]+(m1*delt/2)))/m;
k3= (-kk[i]*v[i]*(vx[i]+(k2*delt/2)))/m;
m3= (-kk[i]*v[i]*(vy[i]+(m2*delt/2)))/m;
k4= (-kk[i]*v[i]*(vx[i]+(k3*delt)))/m;
m4= (-kk[i]*v[i]*(vy[i]+(m3*delt)))/m;
vx[i+1]= vx[i]+((1/6)*(k1+2*k2+2*k3+k4)*delt);
vy[i+1]= vy[i]+((1/6)*(m1+2*m2+2*m3+m4)*delt);
x[i+1]= vx[i+1]*delt;
y[i+1]= vy[i+1]*delt;
xx[i+1]= x[i+1] + xx[i];
yy[i+1]= y[i+1] + yy[i];
t[i+1]= t[i]+delt;
v[i+1]= sqrt((vx[i+1]*vx[i+1])+(vy[i+1]*vy[i+1]));
if ((yy[i+1]<0)&&(i!=1))
//if (i==100)
{
nn=i;
i=n;
}
printf ("%f\t%f\t%f\t%f\t%f\t%f\t\n", t[i], vx[i], vy[i], v[i], xx[i], yy[i]);
上面代码中的ax
, ay
, vx
and vy
分别是x和y方向的加速度和速度directions,delt
代表时间步长。 xx
和yy
是对应时间步长的位置。
使用四阶 RK 方法后,我尝试在下一个时间步中找到速度,以获得循环中的相应值,直到弹丸撞击地面。但是对于每个相应的迭代和重复,我只得到与 vx[1]
和 vy[1]
相同的值。我是 C 编程的初学者并且仍然在使用循环的初始阶段。