Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- public class Main {
- public static double f(double x1, double x2) {
- return x1+(2*x2) + (Math.pow(x1, 2)) + (3*Math.pow(x2, 2));
- }
- public static double[] fGrad(double x1, double x2) {
- double grad[] = {1+2*x1, 2+6*x2};
- return grad;
- }
- public static double[] fGrad(double[] grad, double[] gradNew) {
- double gr[] = {gradNew[0] + modulGrad(gradNew) / modulGrad(grad) * grad[0],
- gradNew[1] + modulGrad(gradNew) / modulGrad(grad) * grad[1]};
- return gr;
- }
- public static double[][] fGessian(double x1, double x2) {
- double ges[][] = {{2, 0},
- {0, 6}};
- return ges;
- }
- public static double dGessian(double[][] gessian) {
- return gessian[0][0] * gessian[1][1] - (-gessian[0][1]) * (-gessian[1][0]);
- }
- public static double[] mul(double[][] G, double[] grad) {
- double[] direct = {G[0][0] * grad[0] + G[1][0] * grad[1], G[0][1] * grad[0] + G[1][1] * grad[1]};
- return direct;
- }
- public static double modulGrad(double[] grad) {
- return Math.sqrt(Math.pow(grad[0], 2) + Math.pow(grad[1], 2));
- }
- public static void main(String[] args) throws Exception {
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- System.out.print("Enter x1:");
- double x1 = Double.parseDouble(reader.readLine());
- System.out.println("Enter x2:");
- double x2 = Double.parseDouble(reader.readLine());
- double h = 0;
- System.out.println("Enter ε:");
- double ebc = Double.parseDouble(reader.readLine());
- double[][] gessian = fGessian(x1, x2);
- double[] grad = fGrad(x1, x2);
- while (modulGrad(grad) > ebc) {
- x1 = x1 - mul(gessian, grad)[0] / dGessian(gessian);
- x2 = x2 - mul(gessian, grad)[1] / dGessian(gessian);
- grad = fGrad(x1, x2);
- gessian = fGessian(x1, x2);
- }
- System.out.println("x1= " + x1 + " x2= " + x2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement