Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование. Вычисление функции разложением в ряд.

Иван Сулимов . Ученик (60), открыт 5 дней назад
Помогите решить, пожалуйста, 20 номер на паскале/с++/питоне.
1 ответ
Андрей Высший разум (460615) 5 дней назад
 #include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main() {
double x, s, t, a, q, e;
long n = 2;
cin >> x >> e;
s = (t = x / 2) * (2 - x);
q = x * x * x * x;
do {
n += 4;
s += (a = (t *= q / (n * (n - 1) * (n - 2) * (n - 3))) * (n - x));
} while (fabs(a) >= e);
cout << setprecision(16) << s << ' ' << (sin(x) + cos(x) - exp(-x)) / 2;
}
Ксения РайтГений (97140) 5 дней назад
Не могу понять почему при х=10 грубая ошибка возникает и в Вашем варианте, и в таком:
 #include <cmath> 
#include <iostream>
int main()
{
double E, e, p, s, q, x, y;
std::cout.precision(16);
while (true)
{
std::cout << "x E: ";
std::cin >> x >> E;
p = x * x;
y = p * p;
p = 0.5 * x;
s = p * (2. - x);
q = e = 2.;
while (fabs(e) > E)
s+=(e=(((q+=4.)-x)*(p*=(y/(q*(q-1.)*(q-2.)*(q-3.))))));
y = (sin(x) + cos(x) - exp(-x)) * 0.5;
std::cout << s << ", err=" << s - y << std::endl;
}
}
Прямо мистика какая-то! То ли что-то тут не то со сходимостью, хотя при близких к х=10 значениях всё вроде нормально, то ли ещё что-то не так...
Андрей Высший разум (460615) Ксения Райт, При x = 10 множитель (n - x) (или (q - x) в вашем коде) уже на второй итерации равен 0 и вычисление заканчивается - задолго до того, как достигнута заданная точность.
Иван Сулимов . Ученик (60) 4 дня назад
А можете объяснить, пожалуйста, как разложить ряд на рекуррентные соотношения?
Андрей Высший разум (460615) Иван Сулимов . , Тут рекуррентность получается не совсем прямой:
 S = ∑(aₖ∙(4k-2-x)) 
где:
 a₁ = x/2
aₖ = aₖ₋₁∙x⁴/((4k-2)∙(4k-3)∙(4k-4)∙(4k-5)) 
Иван Сулимов . Ученик (60) 4 дня назад
Спасибо
Похожие вопросы