с плавающей запятой — вычисление указанной функции с помощью функции ряда Переполнение стека

Вот функция и серия

Функция 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 и n до 100
результаты всегда разные …
функция и сумма ряда должны иметь очень близкие, если не равные ответы, но это не в моем случае ..

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

-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;
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]