- public class Main{
- private static final double eps = 0.0000001;
- private static final double h = 0.00001;
- public static double liczfunckje(double x,double y)
- {
- return (y*y*y) + (x*x) - (9*x*y) - (3*x) + 2;
- }
- public static double dx(double x,double y)
- {
- return (1/h)*(liczfunckje(x+h,y)-liczfunckje(x, y));
- }
- public static double dy(double x,double y)
- {
- return (1/h)*(liczfunckje(x,y+h)-liczfunckje(x, y));
- }
- public static double dx2(double x,double y)
- {
- return (1/Math.pow(h,2))*(liczfunckje(x+h, y)-(2*liczfunckje(x, y))+liczfunckje(x-h, y));
- }
- public static double dxy(double x,double y)
- {
- return (1/h)*(((1/h)*(liczfunckje(x+h, y+h)-liczfunckje(x+h, y)))-((1/h)*(liczfunckje(x, y+h)-liczfunckje(x, y))));
- }
- public static double dyx(double x,double y)
- {
- return (1/h)*(((1/h)*(liczfunckje(x+h, y+h)-liczfunckje(x+h, y)))-((1/h)*(liczfunckje(x, y+h)-liczfunckje(x, y))));
- }
- public static double dy2(double x,double y)
- {
- return (1/Math.pow(h,2))*(liczfunckje(x, y+h)-(2*liczfunckje(x, y))+liczfunckje(x, y-h));
- }
- //-----------------------------------------------------------------------------------------------------------------------------------------
- //gradient f(xk)
- public static double[] tab1(double x,double y)
- {
- double a,b;
- double [] tab = new double [2];
- tab[0]=dx(x, y);
- tab[1]=dy(x, y);
- return tab;
- }
- //gradient do kwadratu - nie pamietam jak sie nayzwa --- macierz hessego przypomnialem sobie :)))
- public static double[] tab2(double x,double y){
- double c,d,e,f;
- double [] tab2 = new double[4];
- tab2[0]=dx2(x, y);
- tab2[1]=dxy(x, y);
- tab2[2]=dyx(x, y);
- tab2[3]=dy2(x, y);
- return tab2;
- }
- //-----------------------
- public static void main(String[] args) {
- double x=3;
- double y=7;
- double a,b,c,d,e,f,falka;
- //a,b wartosci z gradientu a pzoostale z hessego -- > przypisanie do zmiennych
- // do falki podstawiam wartosci do wzoru Ak i przypisuje do zmiennej falka
- a=tab1(x, y)[0];
- b=tab1(x, y)[1];
- c=tab2(x, y)[0];
- d=tab2(x, y)[1];
- e=tab2(x, y)[2];
- f=tab2(x, y)[3];
- falka=(Math.pow(a, 2)+Math.pow(b,2))/(a*(a*c+b*e)+b*(a*d+b*f));
- System.out.println(falka);
- double x1 = x;
- double y1 = y;
- while((Math.abs(dx(x1, y1))>eps && Math.abs(dy(x1, y1))>eps) || (Math.abs(x1-x)>eps && Math.abs(y1-y)>eps))
- {
- x=x1;
- y=y1;
- a=tab1(x, y)[0];
- b=tab1(x, y)[1];
- c=tab2(x, y)[0];
- d=tab2(x, y)[1];
- e=tab2(x, y)[2];
- f=tab2(x, y)[3];
- falka=(Math.pow(a, 2)+Math.pow(b,2))/(a*(a*c+b*e)+b*(a*d+b*f));
- x1=x-falka*dx(x, y);
- y1=y-falka*dy(x, y);
- System.out.printf("x: %.8f y: %.8f", x,y);
- System.out.println(" ");
- }
- }
- }