Advertisement
100hahahaha

Untitled

Dec 23rd, 2024
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.95 KB | None | 0 0
  1. import java.math.BigDecimal;
  2. import java.math.RoundingMode;
  3. import java.util.Scanner;
  4. public class Main {
  5.     public static double alpha = 0.135;
  6.     public static double [] xk = new double[2];
  7.     public static double [] xk1 = new double[2];
  8.     public static double [] phi = new double[2];
  9.     public static double eps = 0;
  10.     public static int rd = 0;
  11.     public static int n = 0;
  12.     public static double norma = 0;
  13.     public static BigDecimal x0;
  14.     public static BigDecimal x1;
  15.     public static void main(String[] args) {
  16.         Scanner sc = new Scanner(System.in);
  17.         eps = sc.nextDouble();
  18.         xk[0] = sc.nextDouble();
  19.         xk[1] = sc.nextDouble();
  20.         rd = rd(eps);
  21.         System.out.println("k\txk\t\t |xk-xk-1|");
  22.         for(int i = 0;i<100;i++){
  23.             if(n==0){
  24.                 System.out.println(n + "\t" + xk[0]+"\n\t"+xk[1]);
  25.                 n++;
  26.             }else{
  27.                 xk1 = getXk1(xk);
  28.                 phi = getPhi(xk,alpha);
  29.                 xk = getXk(xk,phi,alpha);
  30.                 norma = getNorma(xk1,xk);
  31.                 BigDecimal r = new BigDecimal(eps).setScale(rd, RoundingMode.HALF_UP);
  32.                 BigDecimal nor = new BigDecimal(norma).setScale(rd+1,
  33.                         RoundingMode.HALF_UP);
  34.                 x0 = new BigDecimal(xk[0]).setScale(rd, RoundingMode.HALF_UP);
  35.                 x1 = new BigDecimal(xk[1]).setScale(rd, RoundingMode.HALF_UP);
  36.                 System.out.println(n + "\t" + x0+"\t\t"+nor+"\n\t"+x1);
  37.                 if(r.compareTo(nor)==1 ||r.compareTo(nor)==0 ){
  38.                     break;
  39.                 }
  40.                 n++;
  41.             }
  42.         }
  43.         System.out.println("x* = " + x0+"\n\t "+x1);
  44.     }
  45.     public static double [] getPhi(double [] xk,double alpha){
  46.         phi[0] =
  47.                 (2*(Math.tan(xk[0]*xk[1])-Math.pow(xk[0],2)))*(-2*xk[0]+xk[1]*Math.pow(1/Math.cos(xk[
  48.                         0]*xk[1]),2))+
  49.                         +(2*(0.7*xk[0]*xk[0]+2*xk[1]*xk[1]-1))*(xk[0]*Math.pow(1/Math.cos(xk[0]*xk[1]),2));
  50.         phi[1] = (2*(Math.tan(xk[0]*xk[1])-Math.pow(xk[0],2)))*(1.4*xk[0])+
  51.                 +(2*(0.7*xk[0]*xk[0]+2*xk[1]*xk[1]-1))*(4*xk[1]);
  52.         return phi;
  53.     }
  54.     public static double getNorma(double [] xk1,double [] xk){
  55.         double a = Math.abs(xk[0]-xk1[0]);
  56.         double b = Math.abs(xk[1]-xk1[1]);
  57.         return Math.max(a,b);
  58.     }
  59.     public static double [] getXk1(double [] xk){
  60.         xk1[0] = xk[0];
  61.         xk1[1] = xk[1];
  62.         return xk1;
  63.     }
  64.     public static double [] getXk(double [] xk,double [] phi,double alpha){
  65.         for(int i = 0;i<2;i++){
  66.             phi[i] = alpha * phi[i];
  67.         }
  68.         for(int i = 0;i<2;i++){
  69.             xk[i] = xk[i]- phi[i];
  70.         }
  71.         return xk;
  72.     }
  73.     public static int rd(double e){
  74.         int k = 0;
  75.         while(e > 0 && e < 1){
  76.             e *= 10;
  77.             k++;
  78.         }
  79.         return k;
  80.     }
  81.  
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement