Advertisement
Guest User

moze byc?

a guest
Apr 24th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.27 KB | None | 0 0
  1. package funkcje_sklejane;
  2.  
  3.  
  4. import java.util.ArrayList;
  5.  
  6.  
  7. class Punkt {
  8.  
  9.     double x, y;
  10.  
  11.     Punkt(double x, double y) {
  12.         this.x = x;
  13.         this.y = y;
  14.     }
  15.  
  16.     @Override
  17.     public String toString() {
  18.         return "(" + x + "," + y + ")";
  19.     }
  20.  
  21. }
  22. public class Funkcje_sklejane {
  23.  
  24.     public static void main(String[] args) {
  25.  
  26.         //mój przyklad
  27.         Punkt punkt1 = new Punkt(-4, 444);
  28.         Punkt punkt2 = new Punkt(-2, 32);
  29.         Punkt punkt3 = new Punkt(0, 4);
  30.         Punkt punkt4 = new Punkt(2, 0);
  31.         Punkt punkt5 = new Punkt(4, 92);
  32.  
  33.         Punkt pochodna1 = new Punkt(-4, -404);
  34.         Punkt pochodna2 = new Punkt(4, 124);
  35.  
  36.         interpolacja nowa_interpolacja = new interpolacja();
  37.          nowa_interpolacja.ustawN(5);
  38.          nowa_interpolacja.ustawX(1);
  39.          nowa_interpolacja.punkty.add(punkt1);
  40.          nowa_interpolacja.punkty.add(punkt2);
  41.          nowa_interpolacja.punkty.add(punkt3);
  42.          nowa_interpolacja.punkty.add(punkt4);
  43.          nowa_interpolacja.punkty.add(punkt5);
  44.          nowa_interpolacja.pochodne.add(pochodna1);
  45.          nowa_interpolacja.pochodne.add(pochodna2);
  46.  
  47.          nowa_interpolacja.inicjalizacja();
  48.          nowa_interpolacja.WyświetlTaby();
  49.          nowa_interpolacja.Eliminacja_Gaussa();
  50.        
  51.  
  52.         for (int i = 0; i <  nowa_interpolacja.pobierzWektor().length; i++)
  53.             System.out.println( nowa_interpolacja.pobierzWektor(i));
  54.  
  55.             System.out.println();
  56.             System.out.println("mój wynik wynosi: " +  nowa_interpolacja.Wyniki());
  57.     }
  58.  
  59. }
  60.  
  61.  
  62.  
  63. class interpolacja {
  64.    
  65.     private double[] wektory;
  66.     private double[][] tablica;
  67.     private int n;
  68.     private double x;
  69.     private double[][] Alfy;
  70.     private double[][] różnice;
  71.     private double[] wolne;
  72.    
  73.     private static final double E = 1e-10;
  74.     private int pomocnicza = 0;
  75.  
  76.     ArrayList<Punkt> punkty = new ArrayList<>();
  77.     ArrayList<Punkt> pochodne = new ArrayList<>();
  78.  
  79.    //
  80.  
  81.    
  82.  
  83.     double[] pobierzWektor() {
  84.         return wektory;
  85.     }
  86.  
  87.     double pobierzWektor(int i) {
  88.         return wektory[i];
  89.     }
  90.    
  91.      void ustawN(int n) {
  92.         this.n = n;
  93.     }
  94.  
  95.  
  96.     void ustawX(double x) {
  97.         this.x = x;
  98.     }
  99.  
  100.     void inicjalizacja() {
  101.         tablica = new double[n + 2][2 + n];
  102.         Alfy = new double[n - 1][n - 1];
  103.         różnice = new double[2][3 + n - 2];
  104.         wolne= new double[n + 2];
  105.         wektory = new double[n + 2];
  106.         WypełnienieTablic();
  107.     }
  108.  
  109.  
  110.  
  111.     private void Wypełnianie_Alf() {
  112.         for (int i = 0; i < Alfy.length; i++) {
  113.             for (int j = 0; j < Alfy.length; j++) {
  114.                 if (j <= i) {
  115.                     Alfy[i][j] = Math.pow(punkty.get(i).x - punkty.get(j).x, 3);
  116.                 } else {
  117.                     Alfy[i][j] = 0;
  118.                 }
  119.  
  120.             }
  121.         }
  122.  
  123.     }
  124.  
  125.     private void wypełnienie_różnice() {
  126.         for (int i = 0; i < różnice.length; i++) {
  127.             for (int j = 0; j < różnice[i].length; j++) {
  128.                 if (j < 3) {
  129.                     różnice[i][j] = (j + 1) * Math.pow(pochodne.get(i).x, j);
  130.                 } else {
  131.                     różnice[i][j] = 0;
  132.                 }
  133.             }
  134.         }
  135.  
  136.     }
  137.  
  138.     private void WypełnienieRóżnic() {
  139.         for (int i = 0; i < różnice.length; i++) {
  140.             for (int j = 3; j < różnice[i].length; j++) {
  141.                 if (i == 1) {
  142.                     różnice[i][j] = 3 * Math.pow(pochodne.get(1).x - punkty.get(j - 2).x, 2);
  143.                 }
  144.             }
  145.         }
  146.  
  147.     }
  148.  
  149.     private void wypelnianieTablic() {
  150.         int pomocnicza;
  151.         for (int i = 0; i < tablica.length; i++) {
  152.             if (i < n) {
  153.                 tablica[i][0] = 1;
  154.             } else {
  155.                 tablica[i][0] = 0;
  156.             }
  157.         }
  158.  
  159.         for (int i = 0; i < n; i++) {
  160.             for (int j = 1; j <= 3; j++) {
  161.                 tablica[i][j] = Math.pow(punkty.get(i).x, j);
  162.             }
  163.  
  164.         }
  165.  
  166.         for (int i = 1; i <= Alfy.length; i++) {
  167.  
  168.             pomocnicza = 0;
  169.             for (int j = n-1; j < tablica.length; j++) {
  170.                 tablica[i][j] = Alfy[i - 1][pomocnicza];
  171.                 pomocnicza++;
  172.             }
  173.  
  174.         }
  175.  
  176.         for (int i = n; i < tablica.length; i++) {
  177.             System.arraycopy(różnice[i - n], 0, tablica[i], 1, tablica.length - 1);
  178.  
  179.         }
  180.     }
  181.  
  182.     private void wypełnianieWolnych() {
  183.         for (int i = 0; i < wolne.length; i++) {
  184.  
  185.             if (i < n) {
  186.                 wolne[i] = punkty.get(i).y;
  187.             } else {
  188.                 wolne[i] = pochodne.get(pomocnicza).y;
  189.                 pomocnicza++;
  190.             }
  191.         }
  192.  
  193.     }
  194.    
  195.     private void WypełnienieTablic() {
  196.  
  197.         Wypełnianie_Alf();
  198.         wypełnienie_różnice();
  199.         WypełnienieRóżnic();
  200.         wypelnianieTablic();
  201.         wypełnianieWolnych();
  202.     }
  203.  
  204.         private void WyswietlTablice() {
  205.         for (double[] TablicaA : tablica) {
  206.             for (double TablicA : TablicaA) {
  207.                 System.out.print(TablicA + " ");
  208.             }
  209.             System.out.println();
  210.         }
  211.  
  212.     }
  213.  
  214.     private void WyswietlWolne() {
  215.         System.out.println();
  216.         for (double Wolne : wolne) {
  217.             System.out.print(Wolne + " ");
  218.         }
  219.  
  220.     }
  221.     void WyświetlTaby() {
  222.         WyswietlTablice();
  223.         WyswietlWolne();
  224.     }
  225.        void Eliminacja_Gaussa() {
  226.         int N = wolne.length;
  227.  
  228.         for (int a = 0; a < N; a++) {
  229.  
  230.             int maximum = a;
  231.             for (int i = a + 1; i < N; i++) {
  232.                 if (Math.abs(tablica[i][a]) > Math.abs(tablica[maximum][a])) {
  233.                     maximum = i;
  234.                 }
  235.             }
  236.             double[] temp = tablica[a];
  237.             tablica[a] = tablica[maximum];
  238.             tablica[maximum] = temp;
  239.             double t = wolne[a];
  240.             wolne[a] = wolne[maximum];
  241.             wolne[maximum] = t;
  242.  
  243.             if (Math.abs(tablica[a][a]) <= E) {
  244.                 throw new RuntimeException("Tablica jednowymiarowa");
  245.             }
  246.  
  247.             for (int i = a + 1; i < N; i++) {
  248.                 double alpha = tablica[i][a] / tablica[a][a];
  249.                 wolne[i] = wolne[i]- (alpha * wolne[a]);
  250.                 for (int j = a; j < N; j++) {
  251.                     tablica[i][j] = tablica[i][j]- (alpha * tablica[a][j]);
  252.                 }
  253.             }
  254.         }
  255.  
  256.         for (int i = N - 1; i >= 0; i--) {
  257.             double suma = 0.0;
  258.             for (int j = i + 1; j < N; j++) {
  259.                 suma =suma + (tablica[i][j] * wektory[j]);
  260.             }
  261.             wektory[i] = (wolne[i] - suma) / tablica[i][i];
  262.         }
  263.  
  264.     }
  265.  
  266.     double Wyniki() {
  267.         double wynik = 0;
  268.         int pomocnicza = 0;
  269.  
  270.         for (int i = 0; i < 4; i++) {
  271.             wynik = wynik + wektory[i] * Math.pow(x, i);
  272.         }
  273.  
  274.         for (int i = 1; i <= n -1; i++) {
  275.             if (x >= punkty.get(i).x) {
  276.                 wynik = wynik + wektory[4 + pomocnicza] * Math.pow(x - punkty.get(i).x, 3);
  277.             }
  278.             pomocnicza++;
  279.         }
  280.  
  281.         return wynik;
  282.     }
  283.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement