速度verlet算法c++

velocity verlet algorithm c++

本文关键字:c++ 算法 verlet 速度      更新时间:2023-10-16

我尝试使用verlet算法获得汽车下山的位置和速度。但是我总是得到

错误:类型'double'和'double [((sizetype)(((sizetype)n) + -1)) + 1)]'到二进制'operator*'的操作数无效|

为什么会发生这种情况?

#include <iostream>
#include <cmath>
#include <fstream>
#include <iomanip>
int n=100;
int m=100;
double const gx=0;
double const gy=-9.8;
using namespace std;
int main()
{
    int i;
    double t[n], x[n], y[n], r[n], vx[n], vy[n], gx[n], gy[n];
    double h = 2.0/(n-1), h2=h*h/2, r2, r3;
    //double t[0]=0,x[0]=0,y[0]=20;
    //double r[0]=x[0],vx[0]=0,vy[0]=0;
    double ke[n], mass=1500;
    t[0]=0;
    x[0]=0;
    y[0]=20;
    r[0]=x[0];
    vx[0]=0;
    vy[0]=0;
    ke[0]=0;
    for(i=0; i<n-1; i++){
        t1=t[0]+h;
        x[i+1]=x[i]+h*vx[i]+h2*gx;
        y[i+1]=y[i]+h*vy[i]+h2*gy;
        r2=x[i+1]*x[i+1]+y[i+1]*y[i+1];
        r[i+1] = sqrt(r2);
        r3=r2*r[i+1];
        vx[i]=vx[i]+h*gx/2;
        vy[i]=vy[i]+h*gy/2;
        cout << t[i+1] << x[i+1] << y[i+1] << r[i+1] << vx[i] << vy[i] << endl;
    }
}
... h2*gx;

h2doublegx为阵列。显然,您不能将单个double值乘以一个数组。这是一个错误,而这正是编译器的错误信息所显示的。

并不是只有这一行出现了这个错误。

您可能想在这里写gx[i],在下一行写gy[i]