package optimizationMethods;
import java.io.*;
import java.lang.Math;
public class MethodSegmentIntoThree
{
public static final double EPS = 0.0001;
public static double f (double x)
{
return (Math.sqrt(x*x + 25) + Math.sqrt ((20-x)*(20-x)+100) +0.1);
}
public static double[] setSegment() throws IOException
{
double[] x = new double[4];
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Введите отрезок ;a; b], на котором будем искать стационарную точку");
System.out.println("x1 = ");
x[0] = Double.parseDouble(reader.readLine());
x[1] = 0; x[2] = 0;
System.out.println("x4= ");
x[3] = Double.parseDouble(reader.readLine());
System.out.prinln("Ищем стационарную точку...");
return x;
}
public static double segIntoThree (double[] x)
{
while ( Math.abs(x[3] - x[0] ) >=EPS )
{
x[1]=x[0]+(x[3]-x[0])/3;
x[2]=x[3]-(x[3]-x[0])/3;
if (f(x[1]) < f(x[2]))
x[3]= x[2];
else
x[0] = x[1];
}
return (x[0] + x[3] ) / 2;
}
public static void main(String[] args)
{
try
{
double[] x = setSegment();
System.out.println("Точка минимума z = " + segIntoThree(x));
System.out.println("f(z) = " +f(segIntoThree(x)));
System.out.println("Значение функции(для проверки): f(z) = f(3) = " +f(6.6667));
}
catch (IOException e)
{
e.printStackTrace();
}
}
}