Найти тему
Skarlupka

Пишем метод дихотомии (деления отрезка пополам) на языке Java.

Нам необходимо:

  • Реализовать программно метод дихотомии
  • Построить график функции

Для написания программы будем использовать язык Java в среде Eclipse и библиотеку JFreeChart, для создания графика.

Использовать будем данную функцию:

Начнём с подключения библиотеки. Для этого необходимо скачать JFreeChart с офф. сайта или здесь.

После того как скачали, распаковываем архим идём в папку lib и находим там файлы jcommon и jfreechart. Копируем файлы в папку вашего проекта и заходим в конфигурации сборки. 

-2

Нажимаем добавить внешний jar файл и ищем наши файлы. в итоге оны должны отобразится как на рисунке.

-3

Сохраняем и выходим. Мы подключили всё что нам понадобиться для реализации данного задания.

Перейдём к написанию кода. Сперва подключим нашу библиотеку.

import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

Далее объявим переменные, которые будем использовать в ходе вычислений:

static double a = 2;
static double b = 200;
static double sigma = 0.01;
static int max_step = 10000;
static double x;static int k;

a и b - левая и правая граница диапазона по условию, sigma - допустимая погрешность, максимальное количество шагов для решения(необходимо, что не было бесконечного вычисления), x - значение функции в точке, k - количество итераций.

Теперь необходимо описать используемую функцию в отдельном методе:

public static double function(double x) { double f = Math.pow(( x - 15 ), 2) + 5; return f;}

Math.pow - возводит число слева в степень являющееся числом справа. Таким способом в этом методе вы можете описать свою функцию.

Теперь необходимо написать алгоритм дихотомии и вывести график функции.

public static void main(String[] args) {
XYSeries series = new XYSeries("(x - 15)^2 + 5");
double Xm; //Середина диапазона
double f_Xm; //Значение функции в середине
double f_a = function(a); //Значение функции слева
//Отображаем крайне левую точку в графике
series.add(a, function(a)); //применимо к конкретно этой функции. Удалите если другая.
double f_b = function(b); //Значение функции справа
//Вычисляем методом дихотомии
while(((b-a) > sigma) && (k < max_step)) {
Xm = (a + b)/2;
f_Xm = function(Xm);
series.add(Xm, function(Xm)); //Записываем данные для графика
if(f_a > f_Xm) { b = Xm; f_b = f_Xm; } else { a = Xm; f_a = f_Xm; } k++;
}
//Используем библиотеку для вывода графика
XYDataset xyDataset = new XYSeriesCollection(series);
JFreeChart chart = ChartFactory .createXYLineChart("y = (x - 15)^2 + 5", "x", "y", xyDataset,  PlotOrientation.VERTICAL, true, true, true);
JFrame frame = new JFrame("Метод дихотомии!");
// Помещаем график на фрейм
frame.getContentPane().add(new ChartPanel(chart));
frame.setSize(400,300);
frame.show();
}

В итоге у нас должно выйти что-то на подобии этого:

-4

А остальные данные вы можете вывести в удобном для вас месте и способом.

Наука
7 млн интересуются