Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.84 KB | None | 0 0
  1.  
  2.  
  3. public class Lr_2_2 {
  4.     //функция F(x) = 6.67*Math.cos(5.387*x)-5.25*x на отрезке [-2,1; 6,9]
  5.     //интервал разбивается с шагом shift = 0.00001
  6.     //получаем 900001 точек на отрезке [-2,1; 6,9]
  7.  
  8.     private static double a = -2.1;  //-2.1
  9.     private static double b = 6.9;   //6.9
  10.     private static double L = 41.18129; //30.68129 - максимальное значение производной функции на отрезке [-2,1; 6,9]
  11.     private static double shift = 0.00001;  //0.00001
  12.  
  13.     public static void main(String[] args) {
  14.         double[] U = new double[100]; //массив для хранения точек ui
  15.         double u0 = a; //нулевая точка выбирается произвольно
  16.         U[0] = u0;
  17.         double F0 = getValFunJ(u0);
  18.         double[] g0 = getValuesG(u0);
  19.         double[] min = getMin(g0); //координаты точки минимума [y, x];
  20.         double u1 = min[1];
  21.         double F1 = getValFunJ(u1);
  22.         U[1] = u1;
  23.         int n = 2;  //количество итераций
  24.         double u = u1;
  25.         double[] p = g0;
  26.         while(Math.abs(F0 - F1) > 0.0001){
  27.             double[] P = getValuesP(p, u);
  28.             min =  getMin(P);
  29.             u = min[1];
  30.             p = P;
  31.             U[n] = u;
  32.             n++;
  33.             F0 = F1;
  34.             F1 = getValFunJ(u);
  35.         }
  36.         System.out.println(u);
  37.         //System.out.println("Точки ui: " + Arrays.toString(U));
  38.         System.out.println(getValFunJ(u));
  39.         System.out.println("Количество итераций: " + n);
  40.         for(int i = 0; i <=5; i++){
  41.             System.out.println(U[i]);
  42.         }
  43.  
  44.     }
  45.  
  46.     private static double getValFunJ(double x){return 6.67*Math.cos(5.387*x)-5.25*x;}
  47.     private static double getValFunG(double u, double x){return getValFunJ(u) - L*Math.abs(x - u);}
  48.     private static double[] getMin(double[] N){
  49.         double[] res = new double[2];
  50.         res[0] = N[0];
  51.         res[1] = a;
  52.         for(int i = 1; i < N.length; i++){
  53.             if(res[0] > N[i]){
  54.                 res[0] = N[i];
  55.                 res[1] = a + shift*i;
  56.             }
  57.         }
  58.         return res;
  59.     }
  60.     private static double[] getValuesG(double u){
  61.         double[] res = new double[(int) ((b - a)/shift + 1)]; //90001 значение
  62.         double x = a;
  63.         for(int i = 0; i < res.length; i++){
  64.             res[i] = getValFunG(u, x);
  65.             x += shift;
  66.         }
  67.         return res;
  68.     }
  69.     private static double[] getValuesP(double[] P, double u){
  70.         double[] res = new double[P.length];
  71.         double[] G = getValuesG(u);
  72.         for(int i = 0; i < P.length; i++){
  73.             res[i] = Math.max(P[i], G[i]);
  74.         }
  75.         return res;
  76.     }
  77.  
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement