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

2.4.4.2. Пример

Рекомендация: предварительно прочтите раздел ?????

Методом итераций найти корень уравнения

f(x) = arcsin (2x + 1) - х2=0, (8.25)

расположенный на отрезке [-0,5; 0], с абсолютной погрешностью е = 10-4. Определить также число итераций, необходимое для нахож­дения корня.

Уравнение (8.25) преобразуем, выразив переменную х в явном виде, следующим образом:

arcsin (2x + l) = x2

sin (arcsin (2x +1)) = sin x2

2x + l = sin x2

х = 0,5(sin x2 -1) (8.26)

На основании уравнения (8.26) составляем рекуррентную формулу для уточнения корней методом итераций

(8.27)

Обратите внимание, что процесс преобразования уравнения (8.26) в рекуррентную формулу (8.27) носит формальный характер: переменной х в левой части добавили индекс n+1, а переменной х правой добавили индекс n.

За начальное приближение можно принять любую точку отрезка [-0,5; 0], например, x0 = -0,4.

Алгоритм нахождения корня урав­нения (8.25) представляет следующую последовательность действий:

1. Полагаем х0 = - 0,4; еps=0,0001 и n=0.

2. Вычисляем следующее приближение xn+1 , по формуле (8.27).

3. Вычисляем разность d = xn+1 - xn и увеличиваем величину n на единицу.

4. Проверяем условие | d | > еps. Если это условие выполняется, то возвращаемся к вычислению следующего приближения хn+1 по фор­муле (8.27), т. е. к п. 2. Если условие не выполняется, т. е. | d | ≤ еps, то результатом считаем величину хn+1 и заканчиваем вычисления. При этом значение n будет равно числу выполненных итераций.

В программы вводить переменную с индексом хn нет необходимости, поскольку результатом будет одно число (корень уравнения), а все последовательные приближения в конеч­ном счете не нужны. Кроме того, для каждого значения индекса n хn отводится свое место в памяти вычислительной машины, а это приво­дит к неразумному использованию памяти. На каждом этапе вычис­лений необходимо помнить лишь два соседних приближения, поэтому приближение хn обозначим через хn, а приближение хn+1 через хn1. По окончании каждой итерации будем полагать d = хn1 - хn.

Далее приводится программа для решения уравнения (8.25) и результат ее выполнения.

2.4.4.3. Программа

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

// Задание 8-4k

//Уточнение корней уравнений методом итерации

//Вариант 30

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

// 10.04.2012

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

# include <stdio.h>

# include <conio.h>

#include <iostream.h>

# include <math.h>

int main ()

{

int n = 0;

float x, xn, xn1, eps;

// n - счетчик числа итераций;

// xn - значение корня на n-й итерации;

// xn1 - значение корня на n+1-й итерации;

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

//x - первое приближение корня

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

cout << " Введите первое приближение корня x: "; cin >> x;

xn1=x;

xn = 0;

while(fabs(xn1 - xn)> eps)

{

xn = xn1;

xn1 = 0.5*(sin(xn*xn) -1);

n = n + 1;

}

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

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

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

cout << " Первое приближение корня x = " << x << endl;

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

cout << " Искомый корень = " << xn1 << endl;

getch();

return 0;

}

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

2.5. Задания для выполнения дома

2.5.1. Задание 1. Накопление сумм в цикле

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

Составить программу для вычисления суммы (табл. 8.12) .

В качестве значения для х выбрать любое число, лежащее в диапазоне от 0,1 до 1,2.

Результаты и исходные данные вывести на экран дисплея.

Таблица 8.12

Варианты заданий

Сумма

Произведение

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

, k = 20