Скачиваний:
24
Добавлен:
01.05.2014
Размер:
517 Кб
Скачать
☆

6) Метод простых итераций.

Метод простых итераций решения уравнения состоит в замене исходного уравнения эквивалентным ему уравнением и построении последовательности , сходящейся при n   к точному решению.

Рассмотрим один шаг итерационного процесса. Исходя из найденного на предыдущем шаге значения , вычисляется . Если , то принимается xn = y и выполняется очередная итерация. Если же , то вычисления заканчиваются и за приближенное значение корня принимается величина xn = y. Погрешность результата вычислений зависит от знака производной при погрешность определения корня составляет , а при погрешность не превышает . Здесь q - число такое, что на отрезке (a, b).

Для применения метода простых итераций определяющее значение имеет выбор функции в уравнении , эквивалентном исходному. Функцию необходимо подбирать так, чтобы . Это обусловливается тем, что если на отрезке (a, b), то последовательные приближения будут колебаться около корня c, если же , то последовательные приближения будут сходиться к корню c монотонно. Следует также помнить, что скорость сходимости последовательности {xn} к корню c функции тем выше, чем меньше число q.

З

ависимость числа итераций от Eps.

eps

итерации

0,1

2

0,01

5

0,001

9

0,0001

13

0,00001

18

0,000001

22

Обусловленность метода при разном delta при .

delta

0,1

0,8603335890

0,9

0,039666411

0,047011931

0,01

0,8603335890

0,86

0,000333589

0,004701193

0,001

0,8603335890

0,86

0,000333589

0,000470119

0,0001

0,8603335890

0,8603

3,3589E-05

4,70119E-05

0,00001

0,8603335890

0,86033

3,589E-06

4,70119E-06

0,000001

0,8603335890

0,860334

4,11E-07

4,70119E-07

3) Сравнительная характеристика методов.

Корень уравнения, рассчитанный различными методами (Eps=0.000001).

Бисекции

Хорд

Ньютона

Пр. итераций

X

0.860334

0.860334

0.860333

0.860334

Зависимость числа итераций от Eps для различных методов.

Eps

Бисекции

Хорд

Ньютона

Пр. итераций

0.1

2

1

1

2

0.01

5

1

2

5

0.001

8

2

3

9

0.0001

12

3

3

13

0.00001

15

4

3

18

0.000001

18

5

3

22

3. Текст программы.

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <iostream.h>

extern double F(double);

double BISECT(double Left,double Right,double Eps,int &N)

{ double E = fabs(Eps)*2.0;

double FLeft = F(Left);

double FRight = F(Right);

double X = (Left+Right)/2.0;

double Y;

if (FLeft*FRight>0.0) {puts("Неверное задание интервала\n");exit(1);}

if (Eps<=0.0) {puts("Неверное задание точности\n");exit(1);}

N=0;

if (FLeft==0.0) return Left;

if (FRight==0.0) return Right;

while ((Right-Left)>=E)

{

X = 0.5*(Right + Left); /* вычисление середины отрезка */

Y = F(X);

if (Y == 0.0) return (X);

if (Y*FLeft < 0.0)

Right=X;

else

{ Left=X; FLeft=Y; }

N++;

};

return(X);

}

//------------------------------------------------------------------------

double Round (double X,double Delta)

{

if (Delta<=1E-9) {puts("Неверное задание точности округления\n");exit(1);}

if (X>0.0) return (Delta*(long((X/Delta)+0.5)));

else return (Delta*(long((X/Delta)-0.5)));

}

//-------------------------------------------------------------------------

//-------------------------- End of module --------------------------------

double c, d;

double F(double x)

{

return tan(x)-(1/x);

}

//------------------------------------------------------------------------

void main()

{

double delta, left, right,eps;

cout<<"\nВведите левую границу: ";

cin>>left;

cout<<"\nВведите правую границу: ";

cin>>right;

cout<<"\nВведите коэффициент точности вычислений: ";

cin>>eps;

cout<<"\nВведите коэффициент точности округления: ";

cin>>delta;

double x;

int k;

x=BISECT(left,right,eps,k);

x=Round(x,delta);

cout<<"\nx= "<<x;

cout<<"\nКоличество шагов при вычислении: "<<k;

}

Выводы: рассчитали корень уравнения различными методами. С точностью Eps=0.000001 x=0.860334 (методы бисекции, хорд и простых итераций), x=0.860333 (метод Ньютона).

8

Соседние файлы в папке Лабораторные работы №3_4_5_6