借助系列函数c ++计算指定的函数

时间:2016-08-29 17:08:32

标签: c++ floating-point formula series pow

Here is the function and series

函数f(x)和系列需要以相同的答案结束 这是我尝试这项任务,但它给了我不同的结果,我不完全理解C ++中的系列概念

#include <iostream>
#include <math.h>
#include <cstdlib>

using namespace std;

int main()
{
    float x, y1, y2, a;
    int n;
    cout<<"Enter x: ";
    cin>>x;
    cout<<"Enter n: ";
    cin>>n;
    if (x == 0) x = 3.0;
    y1 = 1.0/(2.0*x+5.0);
    a = 1.0/11;
    y2 = a;
    cout<<"f(x) = "<<y1<<endl;
    if(x > -5.0/2.0 && x < 17.0/2.0){
        for (int k = 0; k <= n; k++){
            a = (a*(-1)*pow(2.0/11.0,k))/pow(11.0,k);
            y2 = y2 + a;
        }
    }
    else{
        return 1;
    }

    cout<<"Sum = "<<y2<<endl;

    system("pause");
    return 0;
}

我使用了从-2,5到8,5的任何x和n到100 结果总是不同的...... 该系列的功能和总和应该具有非常接近的,如果不是相同的答案,但它不在我的情况下..

我该怎么办?会很高兴得到解释)

1 个答案:

答案 0 :(得分:2)

您应该只使用正确的术语来表示总和:

a = pow(-2.0 / 11.0 * (x - 3), k) / 11.0;

请注意,我合并了权力中的条款。除11之前的划分也可以移到最后,从而节省了一些操作。但是那时你需要一个不同的初始化。但是,这也允许您逐步计算a。像这样:

//Initialization
a = 1.0;
y2 = a;
double factor = -2.0 / 11.0 * (x - 3);
//...

for (int k = 1; k <= n; k++) 
{
    a *= factor;
    y2 += a;
}

//Finally
cout << "Sum = " << y2 / 11.0f << endl;