在等式中使用2D数组

时间:2015-04-23 03:06:43

标签: c++ arrays

最近我一直致力于发动机推力计算给定值的斜率。

我已经有很多代码可以使用,但我似乎无法使方程函数正常工作。该人应该根据图表和牛顿上的特定点列出值,然后给出不同的时间,计算机将在给定的时间之间找到一个值并进行斜率计算。

当然那不起作用,我现在真的迷失了,我100%肯定我的循环在函数中是错的,但我不确定我的方程是错的。

基本上该程序应该这样做

id

来源

x   y
.19 14.5
.24  6.0
.40  4.4

Enter a time: .21

((.21-.19)/.24-.19))*(6-14.5)+14.5=11.1

the thrust at time .21 is 11.1

1 个答案:

答案 0 :(得分:1)

double slope(double thrust[50][2],double time)
{
  double newton;

  while(time > thrust[50][2]);
  {
    for(int i=0;i < grid_rows; i++)
    {
      for( int j=0; j< grid_cols;j++)
      {
        newton=((time - thrust[i][j])/(thrust[i][j]-thrust[i][j]))
            *(thrust[i][j]-thrust[i][j])+thrust[i][j];
        return newton; 
      }
    }
   }
 }

我发现你的算法存在一些问题。

1)你在这里得到零除错误。

((time - thrust[i][j])/(thrust[i][j]-thrust[i][j]))

2)你的循环永远不会运行(总是在第一次迭代时返回)。

return newton; 

3)如果你修复(2)记住你可能永远被困在循环中,(时间和推力的值[50] [2]从未改变过。)

也是“;”在while循环结束时是故意的吗?

while(time > thrust[50][2]);

您可能希望将斜率方法更改为以下内容。

double slope (double x1, double x2, double y1, double y2, double time){

    double result = 0;
    if ((x2-x1) != 0 ){ // google 'double comparison" you may want to use EPSILON instead
        result = ((time - x1)/(x2-x1)) * (y2-y1) + y1
    } 
    return result;
}

使用它你可能想要做以下事情。

... assuming trust 
    [row][0] contains all the x
    [row][1] contains all the y
    double [lastEntry-1] results;
for(int i=0; i< lastEntry-1; i++){

    results[i] = slope ( thrust[i][0],  //x1
                         thrust[i+1][0],//x2
                         thrust[i][1],  //y1
                         thrust[i+1][1],//y2 
                         time);
}

我留下如何将cin的推力作为锻炼给你。