C++ velocity-verlet算法c++;
我试图用verlet算法得到汽车下山的位置和速度。然而,我不断地 错误:“double”和“double[((sizetype)(n)+-1))+1)]类型的操作数对二进制“运算符*”无效| 为什么会这样C++ velocity-verlet算法c++;,c++,arrays,C++,Arrays,我试图用verlet算法得到汽车下山的位置和速度。然而,我不断地 错误:“double”和“double[((sizetype)(n)+-1))+1)]类型的操作数对二进制“运算符*”无效| 为什么会这样 #include <iostream> #include <cmath> #include <fstream> #include <iomanip> int n=100; int m=100; double const gx=0; double
#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;
}
}
#包括
#包括
#包括
#包括
int n=100;
int m=100;
双常数gx=0;
双常数gy=-9.8;
使用名称空间std;
int main()
{
int i;
双t[n],x[n],y[n],r[n],vx[n],vy[n],gx[n],gy[n];
双h=2.0/(n-1),h2=h*h/2,r2,r3;
//双t[0]=0,x[0]=0,y[0]=20;
//双r[0]=x[0],vx[0]=0,vy[0]=0;
双ke[n],质量=1500;
t[0]=0;
x[0]=0;
y[0]=20;
r[0]=x[0];
vx[0]=0;
vy[0]=0;
ke[0]=0;
对于(i=0;i
h2
是一个double
gx
是一个数组。很明显,你不能将一个double
值乘以一个数组。这是一个错误,这正是编译器的错误消息所说的
这不是出现此错误的唯一一行
您可能打算在这里编写gx[i]
和gy[i]/> >下一行。为什么使用原始数组而不是<代码> STD::<代码> GX是数组类型,不是<代码>双< /代码>,因此错误。非常感谢。我修复了它。实际上他有另一个定义为双的GX,所以它必须是一个错误,即C++不允许乘以数组的双倍-但是在那里我没有什么特别明显的。我完全可以想象一种语言,其中double*数组产生了一个数组。
... h2*gx;