Advertisement
100hahahaha

Untitled

Dec 23rd, 2024
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.55 KB | None | 0 0
  1. import java.math.BigDecimal;
  2. import java.math.RoundingMode;
  3. public class Main {
  4.     public static double[] xn = {0.135, 0.876, 1.336, 2.301, 2.851};
  5.     public static double[] yn = {2.382,-0.212,-1.305,-3.184,-4.365};
  6.     public static double x = 0;
  7.     public static double[] znam = new double[5];
  8.     public static String[] langStr = new String[5];
  9.     public static double [] lang = new double[5];
  10.     public static String[] p = new String[5];
  11.     public static double[][] razn = new double[5][5];
  12.     public static double [] razn1 =new double[5];
  13.     public static String[] newtStr = new String[5];
  14.     public static double[] newt = new double[5];
  15.     public static double[] a = new double[4];
  16.     public static double [] b = new double[4];
  17.     public static BigDecimal [] a1 = new BigDecimal[4];
  18.     public static BigDecimal [] b1 = new BigDecimal[4];
  19.     public static String [] lineStr = new String[4];
  20.     public static void main(String[] args) {
  21.         lagrange();
  22.         newton();
  23.         lineSpline();
  24.     }
  25.     public static void lagrange(){
  26.         System.out.println("Polimom lagrange:");
  27.         for (int i = 0;i< xn.length;i++){
  28.             double tmp = 1;
  29.             for(int j = 0;j< xn.length;j++){
  30.                 if(i!=j){
  31.                     tmp *= xn[i]-xn[j];
  32.                 }
  33.             }
  34.             znam[i] = 1/tmp;
  35.             BigDecimal z = new BigDecimal(znam[i]).setScale(3, RoundingMode.HALF_UP);
  36.             p[i]= "p("+i+") = " + z;
  37.             for (int j = 0;j<p.length;j++){
  38.                 if(i!=j){
  39.                     p[i]+="(x- "+ xn[j] +")";
  40.                 }
  41.             }
  42.             System.out.println(p[i]);
  43.         }
  44.         for(int j = 0;j< p.length;j++){
  45.             int ch= p[j].indexOf("(",2);
  46.             int l = p[j].length();
  47.             p[j] = p[j].substring(ch, l);
  48.         }
  49.         System.out.println("Iteratciony process langrage: ");
  50.         for(int i = 0;i<xn.length;i++){
  51.             znam[i]*=yn[i];
  52.             BigDecimal z = new BigDecimal(znam[i]).setScale(3, RoundingMode.HALF_UP);
  53.             langStr[i] = z+p[i];
  54.             if(znam[i]>0 && i!=0) {
  55.                 System.out.println("+ "+langStr[i]);
  56.             }else{
  57.                 System.out.println(langStr[i]);
  58.             }
  59.         }
  60.         double ans = 0;
  61.         x =xn[1]+xn[2];
  62.         for(int i = 0;i<xn.length;i++){
  63.             double tmp = 1;
  64.             for(int j = 0;j< xn.length;j++){
  65.                 if(i!=j){
  66.                     tmp*= x- xn[j];
  67.                 }
  68.             }
  69.             lang[i] = znam[i]*tmp;
  70.         }
  71.         for(Double i:lang){
  72.             ans+=i;
  73.         }
  74.         BigDecimal answer = new BigDecimal(ans).setScale(3, RoundingMode.HALF_UP);
  75.         System.out.println("L4(x1+x2) = "+"L4("+x+") = " + answer);
  76.     }
  77.     public static void newton(){
  78.         System.out.println("\nPolinom Newton:");
  79.         //заполенение y 1 строку razn
  80.         for(int i=0;i< razn.length;i++){
  81.             razn[0][i] = yn[i];
  82.             razn1[0] = yn[0];
  83.         }
  84.         //1 порядок
  85.         for(int i = 1;i< razn.length;i++){
  86.             razn[1][i] = (razn[0][i]-razn[0][i-1])/(xn[i]-xn[i-1]);
  87.         }
  88.         razn1[1] = razn[1][1];
  89.         //2 порядок
  90.         for(int i = 2;i< razn.length;i++){
  91.             razn[2][i] = (razn[1][i]-razn[1][i-1])/(xn[i]-xn[i-2]);
  92.         }
  93.         razn1[2] = razn[2][2];
  94.         //3 порядок
  95.         for(int i = 3;i< razn.length;i++){
  96.             razn[3][i] = (razn[2][i]-razn[2][i-1])/(xn[i]-xn[i-3]);
  97.         }
  98.         razn1[3] = razn[3][3];
  99.         //4 порядок
  100.         for(int i = 4;i< razn.length;i++){
  101.             razn[4][i] = (razn[3][i]-razn[3][i-1])/(xn[i]-xn[i-4]);
  102.         }
  103.         razn1[4] = razn[4][4];
  104.         BigDecimal [] raz = new BigDecimal[5];
  105.         for(int i = 0;i<razn1.length;i++){
  106.             raz[i] = new BigDecimal(razn1[i]).setScale(3,RoundingMode.HALF_UP);
  107.         }
  108.         newtStr[0] = String.valueOf(raz[0]);
  109.         for(int i = 1;i<raz.length;i++) {
  110.             if (razn1[i] < 0) {
  111.                 newtStr[i] = String.valueOf(raz[i]);
  112.             } else {
  113.                 newtStr[i] = " + " + String.valueOf(raz[i]);
  114.             }
  115.         }
  116.         newtStr[1]+="(x-"+xn[0]+")";
  117.         newtStr[2]+="(x-"+xn[0]+")(x-"+xn[1]+")";
  118.         newtStr[3]+="(x-"+xn[0]+")(x-"+xn[1]+")(x-"+xn[2]+")";
  119.         newtStr[4]+="(x-"+xn[0]+")(x-"+xn[1]+")(x-"+xn[2]+")(x-"+xn[3]+")";
  120.         x =xn[1]+xn[2];
  121.         System.out.print("N4 = ");
  122.         for(int i = 0;i<newtStr.length;i++){
  123.             System.out.println(newtStr[i]);
  124.         }
  125.         newt[0] = razn1[0];
  126.         newt[1] = razn1[1]*(x-xn[0]);
  127.         newt[2] = razn1[2]*(x-xn[0])*(x-xn[1]);
  128.         newt[3] = razn1[3]*(x-xn[0])*(x-xn[1])*(x-xn[2]);
  129.         newt[4] = razn1[4]*(x-xn[0])*(x-xn[1])*(x-xn[2])*(x-xn[3]);
  130.         double ans = newt[0]+newt[1]+newt[2]+newt[3]+newt[4];
  131.         BigDecimal answer = new BigDecimal(ans).setScale(3, RoundingMode.HALF_UP);
  132.         System.out.println("N4(x1+x2) = "+"N4("+x+") = " + answer);
  133.     }
  134.     public static void lineSpline(){
  135.         System.out.println("\nLinear spline:");
  136.         System.out.println("Ф(x) = ");
  137.         for(int i = 1;i< xn.length;i++){
  138.             System.out.println("a"+i+"x + b"+i+", "+xn[i-1]+"<x<"+xn[i]);
  139.         }
  140.         System.out.println("\nSystem: ");
  141.         for(int i = 1;i< xn.length;i++){
  142.             lineStr[i-1] = String.valueOf(xn[i-1])+"a"+String.valueOf(i)+" + b"+String.valueOf(i)
  143.                     +" = "+String.valueOf(yn[i-1])+"\n"
  144.                     +String.valueOf(xn[i])+"a"+String.valueOf(i)+" + b"+String.valueOf(i)
  145.                     +" = "+String.valueOf(yn[i]);
  146.             System.out.println(lineStr[i-1]+"\n");
  147.         }
  148.         System.out.println("Coefficient: ");
  149.         for(int i = 1;i< yn.length;i++){
  150.             a[i-1] = (yn[i-1]-yn[i])/(xn[i-1]-xn[i]);
  151.             b[i-1] = yn[i]-xn[i]*a[i-1];
  152.             a1[i-1] = new BigDecimal(a[i-1]).setScale(3, RoundingMode.HALF_UP);
  153.             b1[i-1] = new BigDecimal(b[i-1]).setScale(3, RoundingMode.HALF_UP);
  154.             System.out.println("a"+i+" = "+a1[i-1]+"\nb"+i+" = "+b1[i-1]+"\n");
  155.         }
  156.         System.out.println("Ф(x) = ");
  157.         int j = 0;
  158.         for(int i = 1;i< xn.length;i++){
  159.             if(b[j]<0) {
  160.                 System.out.println(a1[j] + "x " + b1[j] + ", " + xn[i- 1] + "<x<" + xn[i]);
  161.             }else{
  162.                 System.out.println(a1[j] + "x + " + b1[j] + ", " + xn[i- 1] + "<x<" + xn[i]);
  163.             }
  164.             j++;
  165.         }
  166.     }
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement