C++ 生成多项式系数和计算其值的函数的过程

C++ 生成多项式系数和计算其值的函数的过程,c++,math,pascal,polynomials,C++,Math,Pascal,Polynomials,所以本质上,我正在尝试编写一个小程序块,它应该为多项式n度创建或生成系数,可以通过向量a=[a0,a1..an]表示,给定基本公式是 问题是,当做一个函数,从点“x”得到多项式p的值时,它完全使用霍纳规则返回值,这与预期的结果不同,尽管不确定应该使用哪一个。数学基本解释告诉我至少有以下几点: 例如:n=2;(A[i]将项叠加4,2,1)并计算P(x的值)=4*x^0–2*x^1+1*x^2=4–2x+x2=x2–2x+4=4 换句话说,当“x”值通过指数编号错误的“i”变量时,找不到罪魁祸首,

所以本质上,我正在尝试编写一个小程序块,它应该为多项式n度创建或生成系数,可以通过向量a=[a0,a1..an]表示,给定基本公式是

问题是,当做一个函数,从点“x”得到多项式p的值时,它完全使用霍纳规则返回值,这与预期的结果不同,尽管不确定应该使用哪一个。数学基本解释告诉我至少有以下几点:

例如:n=2;(A[i]将项叠加4,2,1)并计算P(x的值)=4*x^0–2*x^1+1*x^2=4–2x+x2=x2–2x+4=4

换句话说,当“x”值通过指数编号错误的“i”变量时,找不到罪魁祸首,结果得到p(0)=7的输出,而它不应该像p(0)=0^2–2*0+4=4那样具体

这里有一个小片段,到目前为止,如果有人能给我指出正确的方向,我将不胜感激

double horner(const double&x, const int& n, const double& nn) {
    if (n < 0)
        return nn;
     else {
        double m; cin>>m;
        return horner(x, n-1, nn*x+m);
     }
}
int main() {
    int n;double x;
    cout << "n=";cin >> n;
    cout << "x=";cin >> x;
    cout << "P(0)=" << horner(x, n, 0);
    return 0;
}
double horner(常数double&x、常数int&n、常数double&nn){
if(n<0)
返回nn;
否则{
双m;cin>>m;
返回角(x,n-1,nn*x+m);
}
}
int main(){
int n;双x;
cout>n;
cout>x;
cout=0;i--)
val=val*x+p[i];
返回val;
}
int main()
{
float p[20];//初始多项式的系数
int n;//多项式次数-n
float x;//计算P->x的值
cout>n;
对于(int i=n;i>=0;i--)
{
cout x;

cout这可能是学习如何使用调试器的好时机。使用调试器,您可以在监视变量及其值的同时逐条检查您的代码语句。另外两个注意事项:如果您期望某个输出,请始终在问题本身内指定您给出的确切输入(或对于测试,硬编码输入)。此外,无需通过引用将参数传递给您的
horner
函数。IMHO,您应该首先输入所有系数,并在
horner
函数中删除
cin>>m
。由于递归,请考虑需要输入的系数的顺序。顺序很重要。图片不错对于输出场景,但您给程序的数字顺序是什么。请用信息文本编辑您的帖子。使用
std::vector
保存系数的一个好处是,您可以将一组已知的值传递给
horner
函数(无需每次键入它们)。更易于调试。这可能是学习如何使用调试器的好时机。使用调试器,您可以在监视变量及其值的同时逐条检查代码语句。另外两个注意事项:如果您期望某个输出,请始终在问题本身内指定您给出的确切输入(或对于测试,硬编码输入)。此外,无需通过引用将参数传递给您的
horner
函数。IMHO,您应该首先输入所有系数,并在
horner
函数中删除
cin>>m
。由于递归,请考虑需要输入的系数的顺序。顺序很重要。图片不错对于输出场景,但您给程序的数字顺序是什么。请用信息文本编辑您的帖子。使用
std::vector
保存系数的一个好处是,您可以将一组已知的值传递给
horner
函数(无需每次键入它们).更容易调试。
float honer(float p[], int n, float x)
{
    int i;
    float val;
    val = p[n];
    for (i = n - 1; i >= 0; i--)
        val = val * x + p[i];
    return val;
}
int main()
{

    float p[20]; // Coefficient of the initial polynomial
    int n;       // Polynomial degree -n
    float x;     // Value that evaluates P -> X
    cout << "(n) =  ";
    cin >> n;
    for (int i = n; i >= 0; i--)
    {
        cout << "A[" << i << "]=";
        cin >> p[i];
    }
    cout << "x:= ";
    cin >> x;
    cout << "P(" << x << ")=" << honer(p, n, x);

    //Result (input):
    //n: 2,
    //P[i]: 4, -2, 1 -> x: 0, 1
    // Result (output):
    //P() = 4
}