Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Lr_2_2 {
- //функция F(x) = 6.67*Math.cos(5.387*x)-5.25*x на отрезке [-2,1; 6,9]
- //интервал разбивается с шагом shift = 0.00001
- //получаем 900001 точек на отрезке [-2,1; 6,9]
- private static double a = -2.1; //-2.1
- private static double b = 6.9; //6.9
- private static double L = 41.18129; //30.68129 - максимальное значение производной функции на отрезке [-2,1; 6,9]
- private static double shift = 0.00001; //0.00001
- public static void main(String[] args) {
- double[] U = new double[100]; //массив для хранения точек ui
- double u0 = a; //нулевая точка выбирается произвольно
- U[0] = u0;
- double F0 = getValFunJ(u0);
- double[] g0 = getValuesG(u0);
- double[] min = getMin(g0); //координаты точки минимума [y, x];
- double u1 = min[1];
- double F1 = getValFunJ(u1);
- U[1] = u1;
- int n = 2; //количество итераций
- double u = u1;
- double[] p = g0;
- while(Math.abs(F0 - F1) > 0.0001){
- double[] P = getValuesP(p, u);
- min = getMin(P);
- u = min[1];
- p = P;
- U[n] = u;
- n++;
- F0 = F1;
- F1 = getValFunJ(u);
- }
- System.out.println(u);
- //System.out.println("Точки ui: " + Arrays.toString(U));
- System.out.println(getValFunJ(u));
- System.out.println("Количество итераций: " + n);
- for(int i = 0; i <=5; i++){
- System.out.println(U[i]);
- }
- }
- private static double getValFunJ(double x){return 6.67*Math.cos(5.387*x)-5.25*x;}
- private static double getValFunG(double u, double x){return getValFunJ(u) - L*Math.abs(x - u);}
- private static double[] getMin(double[] N){
- double[] res = new double[2];
- res[0] = N[0];
- res[1] = a;
- for(int i = 1; i < N.length; i++){
- if(res[0] > N[i]){
- res[0] = N[i];
- res[1] = a + shift*i;
- }
- }
- return res;
- }
- private static double[] getValuesG(double u){
- double[] res = new double[(int) ((b - a)/shift + 1)]; //90001 значение
- double x = a;
- for(int i = 0; i < res.length; i++){
- res[i] = getValFunG(u, x);
- x += shift;
- }
- return res;
- }
- private static double[] getValuesP(double[] P, double u){
- double[] res = new double[P.length];
- double[] G = getValuesG(u);
- for(int i = 0; i < P.length; i++){
- res[i] = Math.max(P[i], G[i]);
- }
- return res;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement