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(" "); } } }