Facebook
From tfuj stary, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 154
  1.  
  2. public class Main{
  3.  
  4.     private static final double eps = 0.0000001;
  5.     private static final double h = 0.00001;
  6.  
  7.     public static double liczfunckje(double x,double y)
  8.     {
  9.         return (y*y*y) + (x*x) - (9*x*y) - (3*x) + 2;
  10.     }
  11.     public static double dx(double x,double y)
  12.     {
  13.         return (1/h)*(liczfunckje(x+h,y)-liczfunckje(x, y));
  14.     }
  15.     public static double dy(double x,double y)
  16.     {
  17.         return (1/h)*(liczfunckje(x,y+h)-liczfunckje(x, y));
  18.     }
  19.     public static double dx2(double x,double y)
  20.     {
  21.         return (1/Math.pow(h,2))*(liczfunckje(x+h, y)-(2*liczfunckje(x, y))+liczfunckje(x-h, y));
  22.     }
  23.     public static double dxy(double x,double y)
  24.     {
  25.         return (1/h)*(((1/h)*(liczfunckje(x+h, y+h)-liczfunckje(x+h, y)))-((1/h)*(liczfunckje(x, y+h)-liczfunckje(x, y))));
  26.     }
  27.     public static double dyx(double x,double y)
  28.     {
  29.         return (1/h)*(((1/h)*(liczfunckje(x+h, y+h)-liczfunckje(x+h, y)))-((1/h)*(liczfunckje(x, y+h)-liczfunckje(x, y))));
  30.     }
  31.     public static double dy2(double x,double y)
  32.     {
  33.         return (1/Math.pow(h,2))*(liczfunckje(x, y+h)-(2*liczfunckje(x, y))+liczfunckje(x, y-h));
  34.     }
  35.  
  36.  
  37. //-----------------------------------------------------------------------------------------------------------------------------------------
  38.  
  39.     //gradient f(xk)
  40.     public static double[] tab1(double x,double y)
  41.     {
  42.         double a,b;
  43.         double [] tab = new double [2];
  44.         tab[0]=dx(x, y);
  45.         tab[1]=dy(x, y);
  46.         return tab;
  47.     }
  48.  
  49.  
  50.     //gradient do kwadratu - nie pamietam jak sie nayzwa --- macierz hessego przypomnialem sobie :)))
  51.     public static double[] tab2(double x,double y){
  52.         double c,d,e,f;
  53.         double [] tab2 = new double[4];
  54.  
  55.         tab2[0]=dx2(x, y);
  56.         tab2[1]=dxy(x, y);
  57.         tab2[2]=dyx(x, y);
  58.         tab2[3]=dy2(x, y);
  59.         return tab2;
  60.     }
  61.  
  62.  
  63.  
  64.     //-----------------------
  65.     public static void main(String[] args) {
  66.  
  67.         double x=3;
  68.         double y=7;
  69.         double a,b,c,d,e,f,falka;
  70.  
  71.  
  72. //a,b wartosci z gradientu a pzoostale z hessego -- > przypisanie do zmiennych
  73. // do falki podstawiam wartosci do wzoru Ak i przypisuje do zmiennej falka
  74.         a=tab1(x, y)[0];
  75.         b=tab1(x, y)[1];
  76.         c=tab2(x, y)[0];
  77.         d=tab2(x, y)[1];
  78.         e=tab2(x, y)[2];
  79.         f=tab2(x, y)[3];
  80.         falka=(Math.pow(a, 2)+Math.pow(b,2))/(a*(a*c+b*e)+b*(a*d+b*f));
  81.         System.out.println(falka);
  82.  
  83.         double x1 = x;
  84.         double y1 = y;
  85.  
  86.         while((Math.abs(dx(x1, y1))>eps && Math.abs(dy(x1, y1))>eps) || (Math.abs(x1-x)>eps && Math.abs(y1-y)>eps))
  87.         {
  88.             x=x1;
  89.             y=y1;
  90.         a=tab1(x, y)[0];
  91.         b=tab1(x, y)[1];
  92.         c=tab2(x, y)[0];
  93.         d=tab2(x, y)[1];
  94.         e=tab2(x, y)[2];
  95.         f=tab2(x, y)[3];
  96.             falka=(Math.pow(a, 2)+Math.pow(b,2))/(a*(a*c+b*e)+b*(a*d+b*f));
  97.  
  98.             x1=x-falka*dx(x, y);
  99.             y1=y-falka*dy(x, y);
  100.  
  101.             System.out.printf("x: %.8f y: %.8f", x,y);
  102.             System.out.println(" ");
  103.         }
  104.     }
  105. }
  106.