Top.Mail.Ru
Ответы

Программа на C++

Составить программу, вычисляющую f(x) в виде бесконечного ряда с заданной точностью ε=10^
-3 (10^-6, 10^-9). Значение x вводится с клавиатуры. Проверить вычислении с помощью системной функции. Подсчитать количество итераций, потребовавшихся для получения результата с заданной точностью. (Слева функция, справа разложение в ряд)

По дате
По рейтингу
Аватар пользователя
Мудрец

У Вас в задании - грубая ошибка, потому что разложение гиперболического косинуса на самом деле такое:
ch x = Σ(n=0;∞)x²ⁿ/(2n)! , а вовсе даже не то, что у Вас написано. А вот так вот всё правильно:

12345678910111213141516171819202122232425262728293031323334
 #include <cmath> 
#include <iostream> 
using namespace std; 
 
double ch(double x, double ε) 
{ 
    double y = x * x, p = 1., s = p, q = 0.; 
    while (p / s > ε) 
    { 
	q += 2.; 
	p *= y / (q * (q - 1.)); 
	s += p; 
    } 
    cout << q / 2 << " iterations, "; 
    return s; 
} 
 
int main() 
{ 
    double ε, x, y; 
    cout.precision(16); 
    while (true) 
    { 
    	cout << "x ε: "; 
    	cin >> x >> ε; 
    	if (fabs(x) > 710.47) break; 
    	y = ch(x, ε); 
    	cout << y << ", err=" <<
           y / cosh(x) - 1. << endl; 
    } 
    cin.get(); 
    cin.get(); 
    return 0; 
} 

Можно и без отдельной функции обойтись, но это не важно. Ошибка вычислений тут существенна только относительная, а абсолютная точность здесь вообще как-то неуместна так как ch(x) - всюду положительная функция экспоненциального роста. Количество итераций на единицу меньше взятого количества первых слагаемых ряда.



Видео по теме