![]() | |
|
Главная Радио и связь . Щюхрашю поиска ииншоша функции двух переменных методом скорейшего спуска на языке FORERAN raCIODE: EXEC.PI G »««««««««»««««««»«»«»««»««*««*««««»*«»«««««« С ПОИСК точки МИНИМУМА ФУНКЦИИ ДВУХ ПЕРЕМЕННЫХ С МЕТОДОМ СКОРЕЙШЕГО СПУСКА С ******************************************** program MlnOfPuncByCoordDescent INTEGER*2 system COMMON x(2),s(2),absgrad,K,et,W l=system(clsC) WRITE (*,*) Введите координаты вектора (x1,x2) READ (*,*) (x(i),i=1,2) GALL GradDlrectlon IP (absgrad.LT.0.000001) THEN WRITE(*,(A9,E12.6,A4,E12.6)) C.T. xl.Xd), x2=.x(2) PAUSE Нажмите клавишу ENTER для продолжения... GO TO 1 END IP WRITE (*,*) Задайте точность нахождения точки mln Г(х) READ (*,*) е WRITE (*,*) h = 0.2 К = 2 el = e / К d = 1 l=system( clsO CALL OutputResult DO WHILE (d.GE.e) d = ABS(h) hi = h CALL ScanPorOneDIM l=system(clsO CALL OutputResult h = h/K END DO WRITE (*,(A8,E12.6,A4,E12.6)) Mln Xl=,X(1), x2=,x(2) Прилоаенне к главе 9> §4 361 WRITE (♦.•(А14,Е12.6)*) Погрешность =.е PAUSE Нажмите клавишу ENTER для продолжения... 1 END С--- С ШДОРОГРАМШ С ----------------------- FUNCTION Г(х) DIMENSION х{2) t = (х(1)*«2 + х(2) - 11)**2 + (х(1) + х(2)**2 - 7)**2 RETURN END SUBROUTINE GradDlrection COMMON X(2),8(2),absgrad gradx= 4*x(1)**3 + 4*x(1)*x(2) + 2«x(2)»»2 - 42*x(1) - 14 grady= 4»x(2)**3 + 4*x(1)*x(2) + 2»x(1)*»2 - 26*x(2) - 22 absgrad = SQRT (gradx»»2 + grady*»2) s(1) = gradx / absgrad s(2) = grady / absgrad RETURN SUBROUTINE ScanForOneDIM GCMIMON x(2),3(2),absgrad,K,el,h1 LOGICAL a z = f(x) GALL GradDlrection dt=t DO WHILE (a.OR. (dl .GE.et)) DO 1=1.2 x(l) = x(l) + ht « s(l) END DO zl = f(X) dl = ABS(h1) a = (zl.LT.z) IP (-NOT.a) hi = -hl/K z = zl БШ) DO RETURN END G --------Вывод на экран промещуточных вычислений------- SUBROUTINE OutputResult GOMMON х(2) WRITE (*,*) Вектор приближения (х1,х2) на шаге вычислений* WRITE (*,(А5,Е12.6,А6,Е12.6)) х1 =.х(1). х2 =,х(2) WRITE (*,{А11,Е12.6)) f(x1,x2) -.Г(х) PAUSE Нажмите клавишу ENTER для продолжения... RETURN END 5. Программа поиска минимума функции двух переменных методом скорейшего спуска на языке С помок ТОЧКИ МИНИМУМА ФУНКЦИИ ДВУХ ПЕРЕМЕННЫХ МЕТОДОМ СКОРЕЙШЕГО СПУСКА ***************************** ****** ******M*illc/ ♦Include <stdio.h> ♦Include <conlo.ii> ♦Include <math.h> ♦define N 2 ♦define к 2 Int 1; float absgrad,et,n,h1 ,z,s[N+l ],X[N+1]; /*-------------------------------------------------- ПОДПРОГРАММЫ «/ float refloat x[N+1]) (float a,b,y; a=x[1 ]*x[t ]+х[2]~П ; b=x[ 1 ]+x[2]*x[2]-7; у = a*a + b*b; retinn y; ) /» ------------------------------------------------ »/ 40 Id graddlrec t Ion (vo Id) { float gradx,grady; gradx = 4*x[1 ]*х[П*х[П+4*хт*х[2]+2*х[2]*х[2]-42*X[1]~!4; grady 4*x[2]*x[2]*x[2l44*x[n*x[2]+2*x[1 ]*x[П-26*x[2]-22; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 [ 119 ] 120 121 122 123 124 125 126 127 0.01 |