// optimalizovana funkce double fce(double x,double y) { double c = sin(sqrt(x*x+y*y)) ; return (1-c*c)/(1+(x*x+y*y)/1000); } // derivace dle X double derivX(double x,double y) { double c = sin(sqrt(x*x+y*y)); double derivSqrt = 0.5/sqrt(x*x+y*y); //derivace odmocniny derivSqrt *= 2*x; double derivc = cos(sqrt(x*x+y*y))*derivSqrt; // derivace C - slozena funkce (sin' -> cos) double f = 1 - c*c; double fderiv = - 2*c*derivc; // derivace f double g = (1+(x*x+y*y)/1000); double gderiv = 2*x/1000; // derivace g return (fderiv*g -f*gderiv)/(g*g); // derivace podilu } double odhadX(double x,double y) { return (fce(x+0.000001,y)-fce(x,y))/0.000001; } // derivace dle Y double derivY(double x,double y) { double c = sin(sqrt(x*x+y*y)); double derivSqrt = 0.5/sqrt(x*x+y*y); //derivace odmocniny derivSqrt *= 2*y; double derivc = cos(sqrt(x*x+y*y))*derivSqrt; // derivace C - slozena funkce (sin' -> cos) // fce = f/g double f = 1 - c*c; double fderiv = - 2*c*derivc; // derivace f double g = (1+(x*x+y*y)/1000); double gderiv = 2*y/1000; // deriface g return (fderiv*g -f*gderiv)/(g*g); // derivace podilu } double odhadY(double x,double y) { return (fce(x,y+0.000001)-fce(x,y))/0.000001; }