2016-08-29 3 views
-2

Here is the function and seriesВычислить указанную функцию с помощью функции серии C++

Функция ф (х) и серии должны в конечном итоге с тем же ответом Это моя попытка решения этой задачи, но это дает мне разные результаты, и я не в полной мере понять концепцию серии в 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 и п до 100 результаты всегда разные ... предполагается, что функция и сумма ряда должны иметь очень близкие, если не равные ответы, но это не в моем случае ..

Как я должен это делать? был бы рад за объяснением)

+7

«Не работает» не является полезным описанием. –

+1

Какие значения вы использовали для 'x' и' n'? Какие результаты вы получили? Как это неправильно? О, и вы делаете свои вычисления, используя значения «double», но сохраняете их в 'float'. Это само по себе вызывает проблемы округления. –

+0

Сроки, в которых вы связаны, почти полностью не соответствуют вашим условиям. – molbdnilo

ответ

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;