Нам необходимо:
- Реализовать программно метод дихотомии
- Построить график функции
Для написания программы будем использовать язык Java в среде Eclipse и библиотеку JFreeChart, для создания графика.
Использовать будем данную функцию:
Начнём с подключения библиотеки. Для этого необходимо скачать JFreeChart с офф. сайта или здесь.
После того как скачали, распаковываем архим идём в папку lib и находим там файлы jcommon и jfreechart. Копируем файлы в папку вашего проекта и заходим в конфигурации сборки.
Нажимаем добавить внешний jar файл и ищем наши файлы. в итоге оны должны отобразится как на рисунке.
Сохраняем и выходим. Мы подключили всё что нам понадобиться для реализации данного задания.
Перейдём к написанию кода. Сперва подключим нашу библиотеку.
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();
}
В итоге у нас должно выйти что-то на подобии этого:
А остальные данные вы можете вывести в удобном для вас месте и способом.