c++ - 霍纳算法在 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];
如果代码朝着正确的方向发展,请坚持 下去。到目前为止我得到了什么:
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;
}
解决方案
假设在第一个片段中使用参数调用函数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];
}
推荐阅读
- prolog - 列表序言中的总和
- react-tsx - 使用 API 使用输入(字符串数组)启动 UiPath 作业
- c# - 用 0 小时分钟和秒声明 DateTime 的更好方法
- ios - SwiftUI List 重绘已呈现工作表的内容
- reactjs - 无法从本地存储加载布局 - getLayout 功能不起作用
- scala - 用于示例的 Swagger Scala 注释
- email - Nodemailer 发送电子邮件慢/晚
- sql - 编写查询以生成一些脚本以重命名整个数据库中的某些列
- java - 如果我们指定文件名,File 类会创建文件吗?
- php - 使用 Laravel 创建 MySql 视图 -> 查询有效。迁移将其移至失败的 MySql