[英]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 = 2
, A[] = {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.