Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Новые рефераты » Методи багатовимірної безумовної мінімізації. Порівняння правої РП та центральної РП на прикладі мінімізації функції декількох аргументів методом сполучених градієнтів

Реферат Методи багатовимірної безумовної мінімізації. Порівняння правої РП та центральної РП на прикладі мінімізації функції декількох аргументів методом сполучених градієнтів





озволило досягти заданої точності (через це значення деяких чисел у ПРП менше ніж у ЦРП).

Можна побачити, що при h рівному і використання ЦРП ефективніше ніж ПРП.

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


nh 522/21 * 20/36 * 20/2420/21613/25 * 15/19 * 15/2615/18720/29 * 19/29 * 19/2319/19

Видно, що при h рівному і використання ЦРП раніше ефективніше, ніж ПРП. А при h рівному і, навіть при не досягненні необхідної точності у ПРП, кількість ітерацій при використанні ЦРП менше ніж при використанні ПРП.

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

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

# include lt; stdio.h gt;

# include lt; math.h gt;

# include lt; windows.h gt;

# 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 raquo ;, ToRus ( центральна )); break; 2: printf (% s , ToRus ( права )); break; 3: printf (% s , ToRus ( ліва )) ; break;

} (% s n , ToRus ( різницева схема знаходження градієнта )); (% s: tx0=(, ToRus ( Початкова точка ));

for (i=0; i lt; nv; i ++) {[i]=1; printf (%. 0lf, , x [i]);

} (), tf (x0) =% .6lf n , function (x));

printf (% s: teps1 =% .3lf n , ToRus ( Максимальна величина норми градієнта при останове ), eps1); (% s: teps2= % lf n , ToRus ( Точність обчислення аргументу alfa на кожній ітерації ), eps2); (% s: th =% lf n , ToRus ( Крок в різницевій похідною ), h );

g_old=gradient (x, h, ds); (i=0; i lt; nv; i ++) p [i]=- g_old [i]; ( n% s t t t% s t t t% s n , ToRus ( МСГ [ОМ/ЗС]raquo;),ToRus(laquo;Аргументыraquo;),ToRus(laquo;Функцияraquo;));(laquo;---------------------------------------------------------------------------raquo;);(laquo;%2d , k);=f (x);=argminf (x, p, eps2); (i=0; i lt; nv; i ++) {x [i] +=alfa * p [i]; } (i=0; i lt; nv; i ++) {printf ( x% d =%. 4lf , i + 1, x [i]);} ( f =%. 6lf n , f (x)); ++; yII=f (x); {= gradient (x, h, ds);=0;=0; (i=0; i lt; nv; i ++) {+=g [i] * g [i]; +=g_old [i] * g_old [i];

}=Sc/Sz; (k% n == 1) {= 0; (fabs (yI-yII) lt; EPS) {

eps1=NormaV (g, nv) +1.; ( t% s n , ToRus ( Зупинка унаслідок надзвичайно малої зміни y (x) ));

}

} (i=0; i lt; nv; i ++) {_ old [i]=g [i]; [i]=betta * p [i] - g [i];

} (% 2d , k);=argminf (x, p, eps2); (i=0; i lt; nv; i ++) {x [i] + =alfa * p [i];} (i=0; i lt; nv; i ++) {printf ( x% d =%. 4lf , i + 1, x [i]);}= yI;=f (x); ( f =%. 6lf n , yI); ++;

} while (NormaV (g, nv) gt; eps1);(laquo;---------------------------------------------------------------------------raquo;);(laquo;%s: f (, ToRus ( Підсумок розрахунків )); (i=0; i lt; nv; i ++) {printf (%. 4lf, , x [i]);} ( laquo ;) =% .6lf n , f (x)); (x); (g); (g_old); (p); 0;

} CentralDS (double * x, double h, int i) {j; * y; df;=(double *) malloc (nv * sizeof (double)); (j=0; j lt ; nv; j ++) {[j]=x [j];

} [i] +=0.5 * h;=f (y); [i] -=h; -=f (y); /=h; (y); df;

} RightDS (double * x, double h, int i) {j; * y; df;=(double *) malloc (nv * sizeof (doub...


Назад | сторінка 2 з 3 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Double Standards in Modern Politics
  • Реферат на тему: Double Entry Types of Balance Sheet
  • Реферат на тему: Double electric layer. Mechanism of formation and theory of structure
  • Реферат на тему: Розробка алгоритму синтаксичного аналізу оператора виведення printf мови C ...
  • Реферат на тему: Коли працювати можна менше ...