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

А) выполнения оператора while ; б) функции примера 8.6

Значение функции с точностью до 10-3 будет получено в y. Перед оператором while переменная y принимает начальное приближение кубического корня из 21, равное 2. В процессе выполнения оператора это значение последовательно приближается к истинному значению функ­ции.

Пример 8.10

Составить программу для вычисления квадратного корня 13 числа х по формуле (8.1) с погрешностью (8.2). В качестве начального приближения принять У0 = (1 + х/2). Блок-схема решения примера приведена на рис. 8.1.

Таблица 8.6

Идентификаторы примера 8.10

В исходном выражении

x

Yk

Yk-1

В программе на С++

x

y

y0

eps

Фрагмент программы, реализующей итерационные вычисления квадратного корня из числа, может иметь вид:

x = …;

eps = …;

y0 = 0;

y = 1 + x/2;

while(fabs(y – y0) > eps)

{

y0 = y;

y = 0.5*(x/y0 + y0);

}

cout <<"Значение квадратного корня = "; << y;

Пример 8.11

Необходимо вычислить квадраты и кубы положительных чисел в интервале 1 ≤ х ≤ 100.

Блок-схема алгоритма программы приведена на рис. 8.7,а. Эта часть программы может быть записана следующим образом:

x =1;

while(x <= 100)

{

quadrat = x*x;

kub = quadrat*x;

cout <<"x = " << x << " quadrat = " << quadrat << " kub = " << kub << endl;

x = x + 1;

}

Пример 8.12

Используя оператор цикла while составить программу для вычисления функции у = sin х примера 8.7. Значение х задать вводом.

Таблица 8.7

Таблица идентификаторов примера 8.12

8

В исходном выражении

U

x

K

| |

В программе на С++

u

x

eps

K

fabs

а)

б)

Рис. 8.7. Блок-схемы алгоритмов: а) примера 8.8; б) примера 8.5

Программа на С++, реализующая указанные вычисления, имеет вид:

int main()

float u, x, y, eps;

int k;

y = 0;

k = 0;

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

u = x;

CUCLE: while(fabs(u)>eps)

{

u = - x*x/(2*k*(2*k + 1))*u;

y = y + u;

k = k + 1;

}

cout << "x = " << x << " y= " << y << " k = " << k;

1.5. Уточнение корней уравнений

Аналитическое решение для многих алгебраических и трансцендентных уравнений получить не удается. Для решения таких уравнений использу­ют приближенные итерационные методы (методы последовательных прибли­жений). Решение уравнения производится определением грубого значения корня (например, графическим путем) и последующим его уточнением.

Уточнение значения корня уравнения рассматривается на примере ме­тода итераций. Сущность метода заключается в том, что исходное урав­нение представляется в виде х = f (х).

Если в интервале между приближенным значением корня х0 и корнем уравнения х выполняется условие , то метод дает возмож­ность вычислить значение корня с заданной точностью. Если это усло­вие не выполняется, то надо перейти к обратной функции. Новое зна­чение корня вычисляется через предыдущее по формуле . Повторяя этот процесс для x1, x2, x3, …, можно найти значение кор­ня с заданной точностью, определяемой с помощью соотношения

Пример 8.13

Найти действительный корень уравнения

х - sin х = 0,25

с заданной абсолютной погрешностью 0,001.

Представим это уравнение в виде

х = 0,25 + sin х,

и будем вычислять его корень методом последовательных приближений

хk+1 = 0,25 + sin хk,

до соблюдения неравенства

k+1 - хk | ≤ 0,001.

В качестве исходного приближения примем x0 = 1,2.

Блок-схема алгоритма приведена на рис. 8.7,б. Фрагмент программы, реализующий указанные вычисления, может иметь вид:

x1 = 0;

х2 = 1,2;

while(fabs(x2 – x1)> 1e-03)

{

x1 = x2;

x2 = 0/25 + sin(x1);

}

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