Advertisement
100hahahaha

Untitled

Dec 23rd, 2024
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.13 KB | None | 0 0
  1. import java.math.BigDecimal;
  2. import java.math.RoundingMode;
  3. import java.util.ArrayList;
  4. import java.util.Scanner;
  5. public class Main {
  6.     public static ArrayList<Double> xn = new ArrayList<>();
  7.     public static ArrayList<Double> absXn = new ArrayList<>();
  8.     public static ArrayList<BigDecimal> absXn1 = new ArrayList<>();
  9.     public static double eps = 0;
  10.     public static int rd = 0;
  11.     public static int n = 0;
  12.     public static void main(String[] args) {
  13.         Scanner sc = new Scanner(System.in);
  14.         eps = sc.nextDouble();
  15.         rd = rd(eps);
  16.         double x = sc.nextDouble();
  17.         xn.add(x);
  18.         x =sc.nextDouble();
  19.         xn.add(x);
  20.         int k = 0;
  21.         System.out.println("k\tXn\t\t|Xn-Xn-1|");
  22.         for(int i = 0;i<100;i++){
  23.             boolean f = false;
  24.             if(i!=0) {
  25.                 if (i == 1) {
  26.                     f = true;
  27.                     absXn.add(Math.abs(xn.get(i)- xn.get(0)));
  28.                 } else {
  29.                     double s = iteration(xn.get(i- 2), xn.get(i- 1));
  30.                     BigDecimal rounded = new BigDecimal(s).setScale(rd,
  31.                             RoundingMode.HALF_UP);
  32.                     xn.add(Double.parseDouble(String.valueOf(rounded)));
  33.                     s = Math.abs(xn.get(i)- xn.get(i- 1));
  34.                     if(Math.abs(s) >= 0.001) {
  35.                         f = true;
  36.                         rounded = new BigDecimal(s).setScale(rd,
  37.                                 RoundingMode.HALF_UP);
  38.                         absXn.add(Double.parseDouble(String.valueOf(rounded)));
  39.                     }else{
  40.                         rounded = new BigDecimal(s).setScale(rd+1,
  41.                                 RoundingMode.HALF_UP);
  42.                         absXn1.add(rounded);
  43.                         k++;
  44.                     }
  45.                 }
  46.             }
  47.             if (i == 0) {
  48.                 System.out.println(i + "\t" + xn.get(i));
  49.             } else {
  50.                 if(f) {
  51.                     System.out.println(i + "\t" + xn.get(i) + " \t" + absXn.get(i- 1));
  52.                 }else {
  53.                     System.out.println(i + "\t" + xn.get(i) + "\t" + absXn1.get(k-1));
  54.                 }
  55.             }
  56.             if (i != 0) {
  57.                 if(f) {
  58.                     if (absXn.get(i- 1) <= eps) {
  59.                         n =i-1;
  60.                         break;
  61.                     }
  62.                 }else {
  63.                     BigDecimal r = new BigDecimal(eps);
  64.                     if (r.compareTo(absXn1.get(k-1))==1) {
  65.                         n =i-1;
  66.                         break;
  67.                     }
  68.                 }
  69.             }
  70.         }
  71.         System.out.println("x* = " + xn.get(n));
  72.     }
  73.     public static double func(double x){
  74.         return Math.exp(-0.5*Math.pow(x,2.0))-Math.pow(x, 3.0) + 0.2;
  75.     }
  76.     public static double iteration(Double x1, Double x2){
  77.         return x1- (func(x1)/(func(x2)-func(x1))) * (x2-x1);
  78.     }
  79.     public static int rd(double e){
  80.         int k = 0;
  81.         while(e > 0 && e < 1){
  82.             e *= 10;
  83.             k++;
  84.         }
  85.         return k;
  86.     }
  87.  
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement