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

Министерство образования и науки РФ

Санкт-Петербургский государственный электротехнический университет

“ЛЭТИ”

кафедра МОЭВМ

Лабораторная работа №5 по дисциплине вычислительная математика

на тему:

«Метод Ньютона».

г. Санкт-Петербург

  1. Год

I. Цель работы:

Найти корень уравнения для функции методом Ньютона с заданной точностью Eps, исследовать скорость сходимости и обусловленности метода.

II. Общие сведения:

В случае, когда известно хорошее начальное приближение решения уравнения , эффективным методом повышения точности является метод Ньютона. Он состоит в построении итерационной последовательности сходящейся к корню уравнения .

Метод Ньютона допускает простую геометрическую интерпретацию (рис. 2). Если через точку с координатами провести касательную, то абсцисса точки пересечения этой касательной с осью Ох будет очередным приближением xn+1 корня уравнения .

Для оценки погрешности n-го приближения корня предлагается пользоваться неравенством

где М2-наибольшее значение модуля второй производной на отрезке [a,b]; m1-наименьшее значение модуля первой производной на отрезке [a,b]. Таким образом, если то Это означает, что при хорошем начальном приближении корня после каждой итерации число верных десятичных знаков в очередном приближении удваивается, т.е. процесс сходится очень быстро (имеет место квадратическая сходимость). Из указанного следует, что при необходимости нахождения корня с точностью  итерационный процесс можно прекращать, когда

(3.1)

Рассмотрим один шаг итераций. Если на (n-1)-м шаге очередное приближение xn-1 не удовлетворяет условию окончания процесса, то вычисляются величины и следующие приближение корня При выполнении условия (3.1) величина xn принимается за приближенное значение корня с, вычисленное с точностью .

III. Порядок выполнения работы:

  1. Графически или аналитически отделить корень уравнения (т.е. найти отрезки [Left, Right], на которых функция удовлетворяет условиям сходимости метода Ньютона).

  2. Составить подпрограмму - функцию вычисления функции , f’(x) предусмотрев округление значений функции с заданной точностью Delta.

  3. Составить головную программу, вычисляющую корень уравнения и содержащую обращение к подпрограммам , , (x), Round, NEWTON и индикацию результатов.

  4. Выбрать начальное приближение корня x0 из [Left, Right] так, чтобы >0.

  5. Провести вычисления по программе. Исследовать скорость сходимости метода и чувствительность метода к ошибкам в исходных данных.

IV. Выполнение работы:

  1. Отделим графическим методом корни уравнения , т.е. найдем отрезки

[Left, Right], на которых функция удовлетворяет условиям применимости метода бисекции. Для этого сначала определим абсолютное число обусловленности задачи вычисления корня:

= ,

тогда Eps ≤ Delta / |1/(3x2-3+2e-x) |.

Теперь графически определим отрезок [Left, Right].

Где .

Проанализировав результаты, мы получаем отрезок [1, 2]. На этом отрезке мы можем брать любое начальное приближение x, т. к. >0 всюду на отрезке [1, 2].

2)Составим подпрограмму вычисления функции и производной этой функции f’(x) = 3x2 – 3 + 2e(-x).

double F(double x)

{

extern double c,d,delta;

double s;

long int S;

s = x*x*x-3*x-2*exp(-x);

if( s/delta < 0 )

S = s/delta - .5;

else

S = s/delta + .5;

s = S*delta;

s = Round( s,delta );

return(s);

}

double F1(double x)

{

extern double delta;

double s;

long int S;

s = 3*x*x-3+2*exp(-x);

if( s/delta < 0 )

S = s/delta - .5;

else

S = s/delta + .5;

s = S*delta;

s = Round( s,delta );

cout<<" {f'(x)="<<s<<"}"<<endl;

return(s);

}

3)Составляем головную программу, вычисляющую корень уравнения с заданной точностью Eps и содержащую обращение к подпрограмме f(x), программам-функциям NEWTON, Round и представление результатов.

void main()

{

clrscr();

int k;

long int s;

float x11,eps1,delta1;

double x1,eps,x;

double F(double);

printf("Input eps: ");

scanf("%f",&eps1);

eps = eps1;

printf("Input x1: ");

scanf("%f",&x11);

x1 = x11;

printf("Input delta: ");

scanf("%f",&delta1);

delta = delta1;

x = NEWTON(x1,eps,k);

printf("x=%f k=%d\n",x,k);

getch();

}

4) Проведем вычисления по программе, варьируя значения параметров Eps (точность вычисления корня) и Delta (точность задания исходных данных).

eps

delta

a

b

x1

x*

k

f(x*)

 

0,000001

0,1

1

2

1,5

1,792345

2

0,047736173

0,143459

0,00001

0,1

1

2

1,5

1,792345

2

0,047736173

0,143459

0,0001

0,1

1

2

1,5

1,792345

2

0,047736173

0,143459

0,001

0,1

1

2

1,5

1,792345

2

0,047736173

0,143459

0,01

0,1

1

2

1,5

1,792345

2

0,047736173

0,143459

0,1

0,1

1

2

1,5

1,792345

2

0,047736173

0,143459

0,000001

0,01

1

2

1,5

1,785154

3

-0,002120657

0,145014

0,00001

0,01

1

2

1,5

1,785154

3

-0,002120657

0,145014

0,0001

0,01

1

2

1,5

1,785154

3

-0,002120657

0,145014

0,001

0,01

1

2

1,5

1,785154

3

-0,002120657

0,145014

0,01

0,01

1

2

1,5

1,785154

3

-0,002120657

0,145014

0,1

0,01

1

2

1,5

1,790901

2

0,03768143

0,143769

0,000001

0,001

1

2

1,5

1,785470

3

5,89554E-05

0,144945

0,00001

0,001

1

2

1,5

1,785470

3

5,89554E-05

0,144945

0,0001

0,001

1

2

1,5

1,785470

3

5,89554E-05

0,144945

0,001

0,001

1

2

1,5

1,785470

3

5,89554E-05

0,144945

0,01

0,001

1

2

1,5

1,785470

3

5,89554E-05

0,144945

0,1

0,001

1

2

1,5

1,790933

2

0,037904014

0,143762

0,000001

0,0001

1

2

1,5

1,785461

4

-3,13644E-06

0,144947

0,00001

0,0001

1

2

1,5

1,785461

4

-3,13644E-06

0,144947

0,0001

0,0001

1

2

1,5

1,785461

4

-3,13644E-06

0,144947

0,001

0,0001

1

2

1,5

1,785461

4

-3,13644E-06

0,144947

0,01

0,0001

1

2

1,5

1,785490

3

0,00019694

0,144941

0,1

0,0001

1

2

1,5

1,790882

2

0,037549275

0,143773

0,000001

0,00001

1

2

1,5

1,785462

4

3,76262E-06

0,144947

0,00001

0,00001

1

2

1,5

1,785462

4

3,76262E-06

0,144947

0,0001

0,00001

1

2

1,5

1,785462

4

3,76262E-06

0,144947

0,001

0,00001

1

2

1,5

1,785462

4

3,76262E-06

0,144947

0,01

0,00001

1

2

1,5

1,785483

3

0,000148645

0,144943

0,1

0,00001

1

2

1,5

1,790886

2

0,037577097

0,143772

0,000001

0,000001

1

2

1,5

1,785462

4

3,76262E-06

0,144947

0,00001

0,000001

1

2

1,5

1,785462

4

3,76262E-06

0,144947

0,0001

0,000001

1

2

1,5

1,785462

4

3,76262E-06

0,144947

0,001

0,000001

1

2

1,5

1,785462

4

3,76262E-06

0,144947

0,01

0,000001

1

2

1,5

1,785483

3

0,000148645

0,144943

0,1

0,000001

1

2

1,5

1,790886

2

0,037577097

0,143772

eps

delta

a

b

x1

x*

k

f(x*)

 

0,000001

0,1

0

90

86

1,785440

12

-0,000148014

0,371503

0,00001

0,1

0

90

86

1,785440

12

-0,000148014

0,371503

0,0001

0,1

0

90

86

1,785440

12

-0,000148014

0,371503

0,001

0,1

0

90

86

1,785440

12

-0,000148014

0,371503

0,01

0,1

0

90

86

1,785440

12

-0,000148014

0,371503

0,1

0,1

0

90

86

1,785440

12

-0,000148014

0,371503

0,000001

0,01

0

90

86

1,786826

13

0,00942374

0,370994

0,00001

0,01

0

90

86

1,786826

13

0,00942374

0,370994

0,0001

0,01

0

90

86

1,786826

13

0,00942374

0,370994

0,001

0,01

0

90

86

1,786826

13

0,00942374

0,370994

0,01

0,01

0

90

86

1,785826

13

0,002515709

0,371361

0,1

0,01

0

90

86

1,787271

12

0,012501153

0,370831

0,000001

0,001

0

90

86

1,785465

13

2,44599E-05

0,371494

0,00001

0,001

0

90

86

1,785465

13

2,44599E-05

0,371494

0,0001

0,001

0

90

86

1,785465

13

2,44599E-05

0,371494

0,001

0,001

0

90

86

1,785465

13

2,44599E-05

0,371494

0,01

0,001

0

90

86

1,785465

13

2,44599E-05

0,371494

0,1

0,001

0

90

86

1,786623

12

0,00802057

0,371069

0,000001

0,0001

0

90

86

72,462218

4

380265,2739

0,004664

0,00001

0,0001

0

90

86

72,462218

4

380265,2739

0,004664

0,0001

0,0001

0

90

86

72,462218

4

380265,2739

0,004664

0,001

0,0001

0

90

86

72,462218

4

380265,2739

0,004664

0,01

0,0001

0

90

86

72,462218

4

380265,2739

0,004664

0,1

0,0001

0

90

86

75,762224

3

434641,4079

0,004459

0,000001

0,00001

0

90

86

84,415770

36

601295,4058

0,003996

0,00001

0,00001

0

90

86

84,415770

36

601295,4058

0,003996

0,0001

0,00001

0

90

86

84,415770

36

601295,4058

0,003996

0,001

0,00001

0

90

86

84,415770

35

601295,4058

0,003996

0,01

0,00001

0

90

86

84,415770

35

601295,4058

0,003996

0,1

0,00001

0

90

86

86,222318

25

640742,8875

0,003911

0,000001

0,000001

0

90

86

25,841938

82

17179,86922

0,013418

0,00001

0,000001

0

90

86

25,841938

82

17179,86922

0,013418

0,0001

0,000001

0

90

86

25,841938

81

17179,86922

0,013418

0,001

0,000001

0

90

86

25,841938

81

17179,86922

0,013418

0,01

0,000001

0

90

86

25,841938

81

17179,86922

0,013418

0,1

0,000001

0

90

86

25,822004

2

17140,0237

0,013429

Точное значение:

x* = 1,7854615

f(x*) = 0.00000031

5) Из полученных результатов видно, что, чем более высокая точность выходных данных нам необходима, тем больше нам необходимо сделать итераций. Кроме того, из таблицы видно, что с ростом ошибок в исходных данных, уменьшается точность выходных данных. Таким образом, теоретические результаты совпадают с экспериментальными данными.

Соседние файлы в папке LR_5