Читать практическое задание по Отсутствует: "Методы многомерной безусловной минимизации. Сравнение правой РП и центральной РП на примере минимизации функции нескольких аргументов методом сопряженных градиентов" Страница 2

назад (Назад)скачать (Cкачать работу)

Функция "чтения" служит для ознакомления с работой. Разметка, таблицы и картинки документа могут отображаться неверно или не в полном объёме!

h

4

49 / 49*

48 / 55*

48 / 172

48 / 51

5

31 / 71*

31 / 49*

31 / 34

31 / 26

6

24 / 37*

24 / 31*

24 / 28

24 / 26

7

37 / 71*

35 / 42*

35 / 40

35 / 49

8

40 / 49*

43 / 64*

43 / 59

43 / 55

9

30 / 46*

30 / 36*

30 / 48

30 / 37

10

42 / 31*

42 / 50*

42 / 45

42 / 42

11

36 / 34*

36 / 34*

36 / 37

36 / 41

12

38 / 49*

39 / 48*

39 / 39

39 / 37

13

37 / 53*

38 / 52*

38 / 43

38 / 40

14

37 / 43*

37 / 57*

37 / 43

37 / 51

15

41 / 46*

42 / 75*

42 / 48

42 / 43

16

35 / 49*

35 / 66*

35 / 37

35 / 35

17

41 / 52*

40 / 51*

40 / 55

40 / 41

18

41 / 37*

44 / 90*

42 / 45

43 / 44

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

К тому же, при больших значения h применение ПРП, в данном примере, привило к очень малому изменению аргументов, т.е. к зацикливанию.

В таблице (*) помечено то количество итераций, где применение ПРП привело к зацикливанию, что не позволило достичь заданной точности (из-за этого значения некоторых чисел у ПРП меньше чем у ЦРП).

Можно увидеть, что при h равномииспользование ЦРП эффективнее чем ПРП.

Для сравнения ПРП и ЦРП при большом шаге h точность для останова сделаем более грубой . Тогда увидим, что:

n

h

5

22 / 21*

20 / 36*

20 / 24

20 / 21

6

13 / 25*

15 / 19*

15 / 26

15 / 18

7

20 / 29*

19 / 29*

19 / 23

19 / 19

Видно, что при h равномииспользование ЦРП по-прежнему эффективнее, чем ПРП. А при h равноми , даже при не достижении требуемой точности у ПРП, количество итераций при использовании ЦРП меньше чем при использовании ПРП.

Можно сделать вывод, что применение центральной РП предпочтительней, как с точки зрения эффективной работы программы, так и с точки зрения быстроты получения результата.

Код программы на Си:

#include

#include

#include

#define EPS 0.000000002

#define f function

#define nv the_number_of_variables

#define CENTRAL 0

#define RIGHT 1

#define LEFT 2int the_number_of_variables = 4;function(double * x){pow(x[0]+10*x[1],2)+5*pow(x[2]-x[3],2)+pow(x[1]-2*x[2],4)+10*pow(x[0]-x[3],4);

}* ToRus(const char text []);* gradient(double * x, double h, int ds);CentralDS(double * x, double h, int i);RightDS(double * x, double h, int i);LeftDS(double * x, double h, int i);(*DS[3])( double * x, double h, int i ) = {CentralDS, RightDS, LeftDS};NormaV(double * x, int n);* minimi(double * x, double * p, double dx);zoloto(double * x, double * p, double a, double b, double eps);argminf(double * x, double * g, double eps);main(){i, k, n, ds;*g, *g_old, *x, *p, yI,yII;eps1, eps2, h, Sc, Sz, betta, alfa;= (double *)malloc(nv*sizeof(double));= (double *)malloc(nv*sizeof(double));

k = 1;= 6;//цикличность(через сколько итерации произойдет рестарт)= 0.001;= 1e-6;=1e-6;//шаг при вычисления градиента в РС

ds = CENTRAL;//RIGHT("%s ",ToRus("При расчетах использована"));(ds+1){1: printf("%s",ToRus("центральная"));break;2:


Интересная статья: Быстрое написание курсовой работы