Untitled

 avatar
unknown
plain_text
2 years ago
3.2 kB
7
Indexable
```package com.company;

import java.math.RoundingMode;
import java.text.DecimalFormat;

public class MetodaDwudzielna {

    private double a = -2, b = 3, dokladnosc = 0.0001;
    double x_sr = (a + b) / 2;
    double L = b - a;

    private double f(double x) {
        //return (1.0/3) * Math.pow(x, 3) + 2.05 * Math.pow(x, 2) - 6.36*x + 5;
        //return x*x*x - 3 * x * x - 45 * x + 10;
        //return Math.pow((100-x), 2);
        return -0.2 * x*x*x + 9.9 *x*x + 7.1*x - 2.5;
    }

    public static void main(String[] args) {
        new MetodaDwudzielna().liczMinimum();
    }

    private double x1() {
        return a + L/4;
    }

    private double x2() {
        return b - L/4;
    }

    private void liczMaks() {
        int iteracja = 1;

        System.out.println("xsr: " + x_sr + ", f(xsr): " + f(x_sr) + ", L: " + L);

        while (true) {

            // krok 2
            double x1 = x1(), x2 = x2();

            if (f(x1) > f(x_sr)) {
                b = x_sr;
                x_sr = x1;
            } else {
                // krok 4.
                if (f(x2) > f(x_sr)) {
                    a = x_sr;
                    x_sr = x2;

                    // przejdz do kroku 5
                } else {
                    a = x1;
                    b = x2;
                    // przejdz do kroku 5
                }
            }
            System.out.println("x1: " + x1);

            System.out.println("Iteracja " + iteracja + ", wynik: " + x_sr);

            L = b - a;
            System.out.println("x1: " + x1 + " x2:" + x2 + " f(x1):" + f(x1) + " f(x2):" + f(x2) + " L:" + L);
            System.out.println("(" + a + "; " + b + ")");

            iteracja++;
            // krok 5
            if (L <= dokladnosc) {
                System.out.println("Maksimum wynosi: " + x_sr);
                break;
            }
            System.out.println();

        }
    }

    private void liczMinimum() {
        int iteracja = 1;

        System.out.println("xsr: " + x_sr + ", f(xsr): " + f(x_sr) + ", L: " + L);

        while (true) {
            // krok 2
            double x1 = x1(), x2 = x2();

            if (f(x1) < f(x_sr)) {
                b = x_sr;
                x_sr = x1;
            } else {
                // krok 4.
                if (f(x2) < f(x_sr)) {
                    a = x_sr;
                    x_sr = x2;

                    // przejdz do kroku 5
                } else {
                    a = x1;
                    b = x2;
                    // przejdz do kroku 5
                }
            }

            System.out.println("Iteracja " + iteracja);

            L = b - a;
            System.out.println("x1: " + x1 + " x2:" + x2 + " f(x1):" + f(x1) + " f(x2):" + f(x2) + " L:" + L);
            System.out.println("(" + a + "; " + b + ")");

            iteracja++;


            // krok 5
            if (L <= dokladnosc) {
                System.out.println("Minimum wynosi: " + x_sr);
                DecimalFormat df = new DecimalFormat("#.######");
                df.setRoundingMode(RoundingMode.CEILING);
                break;
            }
            System.out.println();

        }
    }
}
```
Editor is loading...