Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР8-С++-10-апреля-2012.doc
Скачиваний:
9
Добавлен:
15.09.2019
Размер:
3.09 Mб
Скачать

2.4.3.2. Пример

Провести вычисления значения функции Y(x) с помощью ее разложения в ряд S(x)

.

Вычисление суммы ряда S(x) провести с использованием рекуррентной формулы. Сравнить значения S(x) и Y(x). Близость значений S(x) и Y(x) для конкретного x указывает на правильность вычисления S(x) и Y(x). Вывести число итераций, необходимое, для достижения заданной точности. Вычисления произвести: вариант а) – с точностью ε; вариант б) – для заданного количества членов ряда n.

Решение:

1. Запишем формулу члена ряда в аналитическом виде

2. Полученная формула члена ряда относится к типу (а) (см. стр … ), то есть очередной член ряда связан с предыдущим рекуррентным соотношением.

3. Рекуррентная формула в данном примере достаточно проста и очевидна: каждый последующий числитель отличается от предыдущего на сомножитель 2x/((k + 1):

,

2.4.3.3. Программа

а) для случая с заданным n = 100 и x =5

//Лабораторная работа № 8

// Задание 8-3-1k

//Использование рекуррентных формул в цикле

//Вариант 30

//Автор Петрова Мария гр. ИНФО-101

// 10.04.2012

//= = = = = = = = = = = = == = = = == = = = ==

# include <stdio.h>

# include <conio.h>

#include <iostream.h>

# include <math.h>

int main ()

{

int k,i,n;

float x,y, ak, ak1,s,eps;

// i - параметр цикла

// k - счетчик членов ряда

// аk - k-й член ряда

// аk1 - k+1 -й член ряда

// eps - заданная погрешность

// n - число членов ряда

// s - сумма членов ряда

cout << " Введите значение для x :"; cin >> x;

cout << " Введите число членов ряда n :"; cin >> n;

s = 0;

k = 1;

ak = 1;

for(i=1;i<=n;i++)

{

s = s + ak;

ak1 = ak*2*x/(k + 1);

ak=ak1;

k=k + 1;

}

y= exp(2*x);

/* вывод результата */

cout << "\n Результаты решения:" << endl;

cout << " Значение x = :" << x << endl;

cout << " Число членов ряда n = :" << n << endl;

cout << " Сумма ряда равна s = " << s << endl;

cout << " Расчет по формуле y = " << y << endl;

getch();

return 0;

}

б) для случая с точностью ε = 10-5 и x =5

//Лабораторная работа № 8.

//Задание 8-3-2k

//Использование рекуррентных формул в цикле

//Вариант 30

//Автор Петрова Мария гр. ИНФО-101

// 10.04.2012

//= = = = = = = = = = = = == = = = == = = = ==

# include <stdio.h>

# include <conio.h>

#include <iostream.h>

# include <math.h>

int main ()

{

int k;

float x,y, ak, ak1,s,eps;

// k - счетчик членов ряда

// аk - k-й член ряда

// аk1 - k+1 -й член ряда

// eps - заданная погрешность

// n - число членов ряда

// s - сумма членов ряда

cout << " Введите значение для x: "; cin >> x;

cout << " Введите погрешность вычислений для eps: "; cin >> eps;

s = 0;

k = 1;

ak = 1;

do

{

s = s + ak;

ak1 = ak*2*x/(k + 1);

ak=ak1;

k=k + 1;

}

while(ak>=eps);

y= exp(2*x);

/* вывод результата */

cout << "\n Результаты решения:" << endl;

cout << " Значение x = " << x << endl;

cout << " Погрешность вычислений eps = " << eps << endl;

cout << " Сумма ряда равна s = " << s << endl;

cout << " Количество итераций k = " << k << endl;

cout << " Расчет по формуле y = " << y << endl;

getch();

return 0;

}

2.4.3.4. Тестирование

2.5.4.4. Тестирование

а) для случая с заданным n = 100 и x =5

б) для случая с точностью ε = 10-5 и x =5

2.4.4. Задание 4. Решение алгебраических и трансцендентных уравнений

2.4.4.1. Условия задания

Составить программу для нахождения (уточнения) корня алгебраического или трансцендентного уравнения (табл. 8.11) методом итераций, расположенного на отрезке [a; b], с абсолютной погрешностью  = 10-4. В программе предусмот­реть подсчет и вывод на печать числа итераций, за которое удается найти значение корня с заданной точностью. Результаты и исходные данные вывести на экран дисплея.

Таблица 8.11