Не получается получить правильный ответ при разложении в ряд, что можно поменять в формуле?
Есть условие: Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) для x, изменяющегося от a до b с шагом h = (b – a)/10.
Не получается получить правильный ответ, ошибка скорее всего в формуле, пытался n-e кол-во раз исправить, но что-то не идёт.
КОД:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double a = 0.2, b = 0.8, h = (b - a) / 10, x, y, sum, koef;
int n = 120;
cout << "TABLICA ZNACHENIY x, Y(x), S(x)" << endl << setw(15) << "x: " << setw(15) << "Y(x):" << setw(15) << "S(x):" << setw(15) << endl;
for (double x = a; x <= b + h / 2; x += h)
{
koef = x;
sum = 0;
for (int i = 1; i < n; i++)
{
koef *= i * i * x / (2 * i + 1);
sum += koef;
}
y = 1 / 4. * ((x + 1.) / sqrt(x) * sinh(sqrt(x)) - cosh(sqrt(x)));
cout << setw(15) << x << setw(15) << y << setw(15) << sum << setw(15) << endl;
}
return 0;
}
Нужна помощь!!!
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
Смущает счет не до точности, а по количеству членов, но - хозяин - барин...
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
double a = 0.2, b = 0.8, h = (b - a) / 10, n = 120;
cout << "TABLICA ZNACHENIY x, Y(x), S(x)" << endl
<< setw(15) << "x: " << setw(15) << "Y(x):" << setw(15) << "S(x):" << setw(15) << endl;
for (double x = a; x <= b + h/2; x += h)
{
double term = x/6, sum = term;
for (int i = 2; i <= n; i++)
{
term *= i*i*x/((i-1)*(i-1)*(2*i)*(2*i+1));
sum += term;
}
double y = 1 / 4. * ((x + 1.) / sqrt(x) * sinh(sqrt(x)) - cosh(sqrt(x)));
cout << setw(15) << x << setw(15) << y << setw(15) << sum << setw(15) << endl;
}
return 0;
}
Вы просто отношение членов записали неверно :(
Автор решения: Aziz Umarov
→ Ссылка
Думаю что у вас где-то пропал факториал
koef *= i * i * x / (2 * i + 1);
Тут думаю.
Но в любом случае 2*n +1 = 120*2+1 = 241! Это не маленькое число.
