математическая задача c++
Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) для x, изменяющегося от a до b с шагом h = (b – a)/10:
как сказал преподаватель, после компиляции столбцы y и x должны быть примерно одинаковы, но они не сходятся, жду помощи.
Скрин вывода:

код:
#include <iostream>
#include <iomanip>
using namespace std;
static long float fac(int n)
{
long float r = 1;
for (int i = 2; i <= n; ++i)
r *= i;
return r;
}
int main() {
double x=0, y, s=0, h, b = 1, a = 0.1;
short int k;
short int n = 1;
h = (b - a) / 10;
for (k = 0; k != 80; k++) {
x += h;
y = 2 * (pow(cos(x), 2) - 1);
do{
s += pow(-1, n) * pow(2 * x, 2 * n) / fac(2 * n);
n += 1;
if (x > 1) {
return 0;
}
} while (n < k);
cout << "x: " << setw(15) << x;
cout << " y(x): " << setw(15) << y ;
cout << " s(x): " << s << endl;
}
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
У вас сам подход с явным вычислением факториала и степени мне не нравится, так что я лучше покажу с нуля, как это лучше сделать. Чтобы понять — начните с рассмотрения отношения соседних членов ряда.
Да, и метка рекурсия тут совершенно ни при чем, рекурсии у вас никакой нет...
int main()
{
double b = 1, a = 0.1, eps = 0.00000001;
for(double x = a; x <= b; x += (b-a)/10)
{
double t = 1, s = 0;
for(int n = 0; abs(t) > eps; ++n)
s += t *= -2*x*x/(2*n+1)/(n+1);
double c = cos(x);
cout << "x: " << setw(15) << x;
cout << " y(x): " << setw(15) << 2*(c*c-1);
cout << " s(x): " << s << endl;
}
}
См. результаты тут: https://ideone.com/gfEUbk
