Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.83 KB | None | 0 0
  1. package lab1;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Lab1 {
  6.  
  7.     public static void main(String[] args) {
  8.         double a = 0, b = 2, eps = 0.005;
  9.         int n = 9;
  10.         System.out.println("Алгоритм блочного равномерного поиска - 1");
  11.         System.out.println("Метод касательных - 2");
  12.         System.out.println("Выход - 3");
  13.         int number = 0;
  14.         Scanner sc = new Scanner(System.in);
  15.         while (number != 3) {
  16.             number = sc.nextInt();
  17.             if (number == 1) {
  18.                 blockSearch(a, b, eps, n);
  19.             } else if (number == 2) {
  20.                 tangent(a, b , eps);
  21.             }
  22.         }
  23.     }
  24.  
  25.     static int tangent(double a, double b, double eps) {
  26.         double x = 0, y = 0, y1, y2, z, z1, z2;
  27.         int n = 0;
  28.         y1 = function(a);
  29.         y2 = function(b);
  30.         z1 = derivative(a);
  31.         z2 = derivative(b);
  32.         boolean found = false;
  33.         while (b - a > 2 * eps) {
  34.             double c = ((b * z2 - a * z1) - (y2 - y1)) / (z2 - z1);
  35.             y = function(c);
  36.             n++;
  37.             z = derivative(c);
  38.             if (z == 0) {
  39.                 x = c;
  40.                 found = true;
  41.                 break;
  42.             } else if (z < 0) {
  43.                 a = c;
  44.                 y1 = y;
  45.                 z1 = z;
  46.             } else {
  47.                 b = c;
  48.                 y2 = y;
  49.                 z2 = z;
  50.             }
  51.         }
  52.         if (!found) {
  53.             x = (a + b) / 2;
  54.             y = function(x);
  55.         }
  56.         System.out.println("X = " + x);
  57.         System.out.println("Y = " + y);
  58.         System.out.println("n = " + n);
  59.         System.out.println();
  60.         return n;
  61.     }
  62.  
  63.     static double function(double x) {
  64.         return Math.pow(x, 2) + 8 * Math.exp(0.55 * x);
  65.     }
  66.  
  67.     static double derivative(double x) {
  68.         return 2 * x + ( 22 * Math.exp(0.55 * x) ) / 5;
  69.     }
  70.  
  71.     static int blockSearch(double a, double b, double eps, int n) {
  72.         double x = (a + b) / 2;
  73.         double y = function(x);
  74.         double xi = 0, yi = 0, minxi = Double.MIN_VALUE, minyi = Double.MIN_VALUE;
  75.         while (b - a > 2 * eps) {
  76.             minxi = Double.MIN_VALUE;
  77.             minyi = Double.MIN_VALUE;
  78.             for (int i = 1; i <= n; i++) {
  79.                 xi = a + i * (b - a) / (n + 1);
  80.                 yi = function(xi);
  81.                 if (minyi == Double.MIN_VALUE || yi < minyi) {
  82.                     minxi = xi;
  83.                     minyi = yi;
  84.                 }
  85.             }
  86.             a = minxi - (b - a) / (n + 1);
  87.             b = minxi + (b - a) / (n + 1);
  88.         }
  89.         System.out.println("X = " + minxi);
  90.         System.out.println("Y = " + minyi);
  91.         System.out.println("n = " + n);
  92.         return n;
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement