簡體   English   中英

c++中的Horner算法實現

[英]Horner algorithm implementation in c++

實現確定多項式值的霍納算法。 輸入數據應作為程序參數給出:多項式系數和值。

下面是一個示例調用:/horner 1.0 2.2 -3.3 7.0

-145.3

計算 W (7.0) 的值,其中 W (x) = 1.0 + 2.2x ^ 1-3.3x ^ 2

轉這個:

double Horner(int n, double A[], double x0)
{
  double w;

  w = A[n];
  for (int i = n - 1; i >= 0; i--)
    w = w * x0 + A[i];
  return w;
}

進入帶有指針和字符的代碼,所以它看起來像任務示例。 卡在w=A[n]; 如果代碼朝着正確的方向發展,則 idk。 到目前為止我得到了什么:

int main(int argc, char *argv[])
{
  int n = argc - 3;
  double x0 = atof(argv[argc - 1]);
  double *A = new double[n + 1];

  for (int i = 0; i <= n; i++)
  {
    A[i] = atof(argv[i + 1]);
  }
  double w;
  w=A[n]; 
  for(int k =n; k>=0; k=k-1) {
    w=w*x0+A[k];
  }
  cout << w;
  delete[] A;
  return 0;
}

假設在第一個代碼段中調用 function 並使用參數n = 2A[] = {1.0, 2.2, -3.3}x0 = 7.0 ,如果我們跟蹤它的執行,我們會發現:

w = A[n] = A[2] = -3.3
i = n - 1 = 1  // <----- Note this.
w = w * x0 + A[1] = -3.3 * 7.0 + 2.2 = -20.9
w = w * x0 + A[0] = -20.9 * 7.0 + 1.0 = 145.3

但是,在第二個片段中,idices 差了一個。

int n = argc - 3;

假設命令行是/horner 1.0 2.2 -3.3 7.0 ,如 OP 所述,其中最后一個數字表示x0 ,其他數字是多項式的系數。 該公式為其度數提供了正確的值(2,在一個完美的世界中,用戶總是以所需的確切順序鍵入正確數量的值)。

系數和w已正確初始化,但是接下來的循環從錯誤的索引開始(它應該跳過最后一個,已經用於初始化w )。

for( int k = n; k >= 0; k = k - 1) {
//       ^^^^^
    w = w * x0 + A[k];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM