Решение дифференциальных уравнений методом Рунге-Кутты - Программирование, компьютеры и кибернетика курсовая работа

Решение дифференциальных уравнений методом Рунге-Кутты - Программирование, компьютеры и кибернетика курсовая работа




































Главная

Программирование, компьютеры и кибернетика
Решение дифференциальных уравнений методом Рунге-Кутты

Реализация решения обыкновенных дифференциальных уравнений 1-го и 2-го порядка методом Рунге-Кутты. Построение на ЭВМ системы отображения результатов в табличной форме и в виде графика. Архитектура и требования к разрабатываемым программным средствам.


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

2.2 Общая постановка задачи решения ОДУ
3. ПРОЕКТИРОВАНИЕ МАТЕМАТИЧЕСКОГО ОБЕСПЕЧЕНИЯ
3.1 Математический метод решения задачи
3.1.1 Блок-схема метода Рунге-Кутты
3.1.3 Достоинства и недостатки метода
3.2 Архитектура разрабатываемых програмних средств
3.3 Требования к программному изделию
3.4 Требования к программной документации
5.1 Контрольные примеры для решения на ЭВМ
Дифференциальные уравнения - это уравнения, в которых неизвестными являются не переменные (т. е. числа), а функции одной или нескольких переменных. Эти уравнения (или системы) включают соотношения между искомыми функциями и их производными. Если в уравнения входят производные только по одной переменной, то они называются обыкновенными дифференциальными уравнениями (ОДУ). В противном случае говорят об уравнениях в частных производных. Таким образом, решить дифференциальное уравнение - значит определить неизвестную функцию на определенном интервале изменения ее переменных.
Как известно, одно обыкновенное дифференциальное уравнение или система ОДУ имеет единственное решение, если помимо уравнения определенным образом заданы начальные или граничные условия. В соответствующих курсах высшей математики доказываются теоремы о существовании и единственности решения в зависимости от тех или иных условий. Имеются два типа задач:
1. задачи Коши - для которых определены начальные условия на искомые функции, т. е. заданы значения этих функций в начальной точке интервала интегрирования уравнения;
2. краевые задачи - для которых заданы определенные соотношения сразу на обеих границах интервала.
Как правило, решение задач Коши для ОДУ - задача, хорошо разработанная и с вычислительной точки зрения не слишком сложная. Большое значение здесь имеет представление результатов и анализ зависимостей решения от различных параметров системы.
В данной работе рассматривается один из способов решение дифференциальных уравнений - метод Адамса.
Целью данного проекта есть реализация решения ОДУ 1-го и 2-го порядка методом Рунге-Кутты и построение на ЭВМ системы отображения результатов в табличной форме и в виде графика.
Разрабатываемая программа должна выполнять следующие функции:
2) Построение на их основе дифференциального уравнения.
3) Проведение анализа такой модели на адекватность, построение графика.
5) Вывод полученных результатов на экран.
Данная программа должна работать на любом персональном компьютере с процессором Pentium и объемом оперативной памяти, не менее 256 Мб.
Необходимым условием правильной работы программы является факт установления на ЭВМ JVM (Java Virtual Machine, виртуальной машины Джава - специального программного средства, необходимого для работы программ файлов разрабатываемой программы).
Дифференциальные уравнения являются основным математическим инструментом моделирования и анализа разнообразных явлений и процессов в науке и технике.
Методы их решения подразделяются на два класса:
аналитические методы, в которых решение получается в виде аналитических функций;
численные (приближенные) методы, где искомые интегральные кривые получают в виде таблиц их численных значений.
Применение аналитических методов позволяет исследовать полученные решения методами математического анализа и сделать соответствующие выводы о свойствах моделируемого явления или процесса. К сожалению, с помощью таких методов можно решать достаточно ограниченный круг реальных задач. Численные методы позволяют получить с определенной точностью приближенное решение практически любой задачи. В работе рассмотрен один из численных методов решения дифференциального уравнения - метод Рунге-Кутта.
2.2 Общая постановка задачи решения обыкновенных дифференциальных уравнений
Обыкновенными дифференциальными уравнениями описывают задачи движения системы взаимодействующих материальных точек, сопротивление материалов и многое другое. Ряд важных задач для уравнений в частных производных также сводятся к задачам для обыкновенных дифференциальных уравнений. Таким образом, решение обыкновенных дифференциальных уравнений занимает важное место среди прикладных задач физики, химии, техники.
Конкретная прикладная задача может приводить к дифференциальному уравнению любого порядка или системе уравнений любого порядка. Однако обыкновенные дифференциальные уравнения n-го порядка можно с помощью замены свести к эквивалентной системе n уравнений первого порядка.
Различают три основных типа задач для решения обыкновенных дифференциальных уравнений: задачи Коши, краевые задачи и задачи на собственные значения. В этой курсовой работе будут рассматриваться методы решения задач Коши.
Пусть задано дифференциальное уравнение первого порядка в виде
Задача Коши состоит в том, чтобы найти функцию
являющуюся решением уравнения (1.1) и удовлетворяющую условию(1.2).
Методы решения можно условно разбить на точные, приближенные и численные. К точным относятся методы, с помощью которых можно выразить решение дифференциального уравнения через элементарные функции. Приближенные методы - это методы, в которых решение получается как предел некоторой последовательности. Численные методы - это алгоритмы вычисления приближенных значений искомого решения на некоторой выбранной сетке значений аргумента. Решение при этом получается в виде таблицы.
3. ПРОЕКТИРОВАНИЕ МАТЕМАТИЧЕСКОГО ОБЕСПЕЧЕНИЯ
3.1 Математический метод решения задачи
Метод Рунге-Кутта -- важное семейство численных алгоритмов решения обыкновенных дифференциальных уравнений и их систем. Формально, методом Рунге -- Кутты является модифицированный и исправленный метод Эйлера, они представляют собой схемы второго порядка точности. Существуют стандартные схемы третьего порядка, не получившие широкого распространения. Наиболее часто используется и реализована в различных математических пакетах (Matlab, MathCAD) стандартная схема четвёртого порядка.
Тогда приближенное значение в последующих точках вычисляется по итерационной формуле:
где h -- величина шага сетки по x и вычисление нового значения проходит в четыре стадии:
Этот метод имеет четвёртый порядок точности, т.е. суммарная ошибка на конечном интервале интегрирования имеет порядок O(h 4 ) (ошибка на каждом шаге порядка O(h 5 )) [1].
3.1.1 Блок схема метода Рунге-Кутты
3.1.2 Анализ погрешности метода Рунге-Кутты
Из теории приближенных методов известно, что при шаге интегрирования h имеет место оценка
так что погрешность одного шага вычислений имеет порядок . Суммарная погрешность за n шагов будет порядка . Отсюда, если увеличить n в два раза. То погрешность уменьшиться примерно в 16 раз. Поэтому для оценки приближенного решения , полученного с шагом h, повторяют вычисление с шагом 2h и за абсолютную погрешность принимают число
где - приближенное решение с шагом 2h.
Приведенная оценка является оценкой метода и не учитывает погрешность при округлении.[2]
3.1.3Достоинства и недостатки метода Рунге-Кутты
Методы Рунге-Кутта обладают следующими отличительными свойствами:
* Эти методы одноступенчатые: чтобы найти y[m+1], нужна информация только о предыдущей точке x[m],y[m].
* Они согласуются с рядом Тейлора вплоть до членов порядка h^p,
где p - различна для разных методов и называется порядком метода.
* Они не требуют вычисления производных от f(x,y), а требуют только вычисления самой функции.
Именно благодаря 3) эти методы удобны для практических вычислений, однако для вычисления одной последующей точки решения нам придется вычислять f(x,y) несколько раз при различных x и y.
3.2 Архитектура разрабатываемых програмних средств
Программа представляет собой следующие функциональные блоки :
функции: общее управление программой;
вх.данные: команды пользователя и ОС;
вих. данные: управляющие команды другими блоками программы;
Подпрограмма изображения пользовательского интерфейса:
функции: изображение удобных для пользователя элементов управления и руководство ими;
вх. данные: типы элементов управление, их свойства;
вых. данные: элементы управления на экране, меню;
функции: ввод данных пользователем;
вх. данные: исходные данные, метод получения информации;
вых. данные: преобразование входных данных во внутренние переменные;
функции: нахождение очередной точки
вх. данные: начальная точка, шаг, значение функции и производной в ней ;
вых. данные: масив значений производных в четырех точках;
функции: вывод результатов работы программы;
вх. данные: массивы значений связанных определенным отношением x и y(x) отображающие результаты расчёта произвольного дифференциального уравнения 1-го или 2-го порядка методом Рунге-Кутты;
вых. данные: результаты работы программы на экране;
Подпрограмма графического представления результатов:
функции: вывод на экран графического представления результатов;
вх. данные: : массивы значений связанных определенным отношением x и y(x) отображающие результаты ращета произвольного дифференциального уравнения 1-го и 2-го порядка методом Адамса;
вых. данные: вывод решаемого графика;
Подпрограмма выдачи контекстной справки:
вых. данные: справочная информация о системе на экране;
3.3 Требования к программному изделию
Входными данными для программы является само уравнение интервал интегрирования ,шаг . Выходными данными является выдача результатов в виде таблицы и графика.
Требования к техническим средствам:
Требования к программным средствам:
· подпрограмма сравнения и управления;
· подпрограмма решения дифференциальных уравнений
3.4 Требования к программной документации
Пользовательский интерфейс разработан, используя язык объектно-ориентированного программирования Java. Исходя из этого, пользователю рекомендуется установить среду NetBeans.
При запуске программы открывается окно, представленное на рис.1.
Для вивода справки нужно нажать "Help".
Рис.2. Справка о работе с программой
Чтобы описать задачу пользователя, то есть указать задачу Коши, которую необходимо решить, нужно нажать кнопку Equation и появится следущее окно
В окне задачи, которое появится необходимо установить такие поля: Порядок(указывает какого порядка уравнение будем решать. Возможные значения: "" - не выбрано, "Первый" - первого порядка, "Второй"-второго порядка), Уравнение(может вмещать любую формулу использую стандартную библиотеку Math, для удобства описание наиболее часто используемые функций было сокращено. Сокращенная запись Math.cos(x)acos(x), Math.sin(x)asin(x), Math.tan(x)atan(x), Math.pow(x,y) =>pow(x,y) - вознесение в степень у значение х, остальные тригонометрические, а также иные функции следует использовать как стандартные вызовы функций из библиотеки Math, Точка x 0 (условие задачи Коши, может быть дробным, если надо указать его дробным, соблюдайте следующий формат целая_часть.дробная_часть), Точка y(x 0 )( условие задачи Коши, может быть дробным, если надо указать его дробным, соблюдайте следующий формат целая_часть.дробная_часть).
Точка y'(x 0 ) (может быть задана при решении уравнения второго порядка, условие задачи Коши, может быть дробным, если надо указать его дробным, соблюдайте следующий формат целая_часть.дробная_часть), Шагов (указать во сколько шагов осуществить решение, этот параметр повлияет на точечность графика), Интервал (интервал, на котором будет отображена функция, нижняя_граница_интервала: верхняя_граница_интервала, интервал задается так чтобы нижняя граница интервала была меньше верхней и больше x 0 , заданного ранее). Вид формы представлен на Рис.4.
Рис.4. Введение основных параметров для решения диф. уравнения.
Чтобы подтвердить заданные параметры следует нажать кнопку `Solve' внизу окна. Отменить и закрыть форму можно с помощью кнопки `Cancel'. Появится окно с решением(рис. 5)
Чтобы на основании сгенерированной таблицы решения уравнения построить график следует нажать кнопу `Make graph', которая находится справа от таблицы (Рис.6.).
5.1 Контрольные примеры для решения на ЭВМ
дифференциальный уравнение программный график
Решением данного дифференциального уравнения есть функция tan(x) которая имеет разрывы. Поскольку деление на нуль невозможно, эти функции определены не для всех значений аргумента. Тангенс определен для всех x?р/2+рn, n€Z. Функция непрерывна на всей области определения и имеют разрывы в точках вида р/2+рn. Поскольку метод Адамса ищет значение в точках, зависящих от предыдущих точек , то в данной функции наступит момент когда решение в следующие точке отобразить нельзя, т.к оно стремится к ?. Это видно исходя из графика tan(x).
Решение дифференциального уравнения вида y'(x)=1+y+x
Решение дифференциального уравнения вида y'(x)=tan(x)
Решение дифференциального уравнения вида y'(x)=x*(x 2 +1)
Решение дифференциального уравнения вида y'(x)=x*(y 2 +1)
В данном примере решения нет . В связи с тем что решением задачи коши есть функция tan(x) которая на интервале [2.0;9.0] является разрывной и при значении р уходит в ?.
Решение дифференциального уравнения вида y''(x)=x+y+z+cos(z)
Решение дифференциального уравнения вида y''(x)=cos(x)+y+tan(z)
Результатом выполнения курсового проекта является готовый программный продукт, позволяющий решать задачу Коши для дифференциальных уравнений при помощи метода Рунге-Кутта, демонстрирующий возможности численного решения поставленной задачи с заданной степенью точности.
Готовый программный продукт может найти широкое применение при решении многих прикладных технических задач, а в частности, эффективно использование применённого метода Рунге-Кутты для решения ОДУ, для которых существует лишь численное решение.
Данная программа решает заданное пользователем дифференциальное уравнений с указанной точностью за минимальный промежуток времени. При этом пользователю предоставляется возможность визуально оценить неточность решения, сравнивая графики полученного и точного решений.
К достоинствам программы можно отнести также удобный пользовательский интерфейс, возможность ввода пользовательского дифференциального уравнения, а также высокая стабильность работы. Однако имеются и некоторые недостатки. К недостаткам программы можно отнести: критичность к вводимым пользователем функций. Это, естественно, ограничивает возможности программы. Но это нормально, т.к. иначе невозможно было бы обеспечить правильность вводимых даннях и, соответственно, гарантировать нормальную работу программы.
Чтобы улучшить данный программный код, можно призвести такие действия:
1) Перевести интерфейс на русский язык, что поможет пользователям, плохо знакомым с английским
2) Добавить возможность решения дифференциальных уравнений болем високого порядка. Это возможно сделать, но достаточно сложно
3) Изменить поведение программы для разрывных функций - в таком случае не обходимо будет вводить данные о значении функции и её производных сразу за точками разрыва
4) Добавить возможность импорта результатов в Excel-документы
1. http://ru.wikipedia.org/wiki/Метод_Рунге_--_Кутта
2. Алексеев Е.Р, Чеснокова О.В. Решение задач вычислительной математики в пакетах Mathcad 12, MATLAB 7, Maple 9
3. Тихонов А. Н., Горбунов А. <Д., "Ж. Вычисл. матем. и матем. физ.", 1962, т. 2, № 4, с. 537-48;
4. Лозинский С. М., "Изв. высш. учебн. заведений. Математика", 1958, М" 5, с. 52-90;
5. Беленький В. 3., в сб.: Вычислительные методы и программирование, М., 1965, с. 253-61;
7 .Бахвалов Н. С., Численные методы, 2 изд., М., 1975;
8.Березин И. С., Жидков Н. П., Методы вычислений, 2 изд., т. 2, М., 1962;
public class RungeKuttForm extends JFrame {
private JMenu jMenuAction = new JMenu("Terminate");
private JMenu jMenuHelp = new JMenu("Help");
private JMenu jMenuCreate = new JMenu("Equation");
private JMenuBar jMenuBar = new JMenuBar();
public JDesktopPane getJdpDesktop() {
for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(laf.getName())) {
UIManager.setLookAndFeel(laf.getClassName());
UIManager.put("oceanBase", new Color(51, 51, 51));
UIManager.put("oceanBlueGrey", new Color(204, 204, 204));
UIManager.put("control", new Color(255, 255, 255));
{//--forming all the menus and adding them to jMenuBar on top
jMenuAction.setMnemonic(KeyEvent.VK_A);
jMenuAction.add(new CloseAction());
jMenuBar.add(new JButton(new CreateTask(this)));
jMenuBar.add(new JMenuItem(new HelpAction(this)));
//--describes reaction if frame closed
class CloseAction extends AbstractAction {
putValue(MNEMONIC_KEY, KeyEvent.VK_O);
public void actionPerformed(ActionEvent e) {
for (JInternalFrame frame : jdpDesktop.getAllFrames()) {
public RungeKuttForm() throws HeadlessException {
setDefaultCloseOperation(EXIT_ON_CLOSE);
getRootPane().setContentPane(jdpDesktop);
setSize((int) (Toolkit.getDefaultToolkit().getScreenSize().width * 0.9),
(int) (Toolkit.getDefaultToolkit().getScreenSize().height * 0.1));
FrameDragger frameDragger = new FrameDragger(this);
jMenuBar.addMouseListener(frameDragger);
jMenuBar.addMouseMotionListener(frameDragger);
text.setFont(new Font("Serif", Font.ITALIC, 16));
text.setText("This program is designed to solve Cauchy problem with"
+ " Runge-Kutt method. It solves differential equations of"
+ " first and second levels. Click \"Equation\" to start.");
panelView.setBackground(Color.DARK_GRAY);
jdpDesktop.putClientProperty("JDesktopPane.dragMode", "outline");
public static void main(String... args) {
import javax.swing.table.AbstractTableModel;
public class TableModel extends AbstractTableModel {
private String[] columnName = new String[] { "X", "Y(x)" };
public TableModel(double[] xdata, double[] ydata) {
this.xdata = Arrays.copyOf(xdata, xdata.length);
this.ydata = Arrays.copyOf(ydata, ydata.length);
return xdata.length; // To change body of implemented methods use
// File | Settings | File Templates.
return 2; // To change body of implemented methods use File | Settings
public Object getValueAt(int rowIndex, int columnIndex) {
public String getColumnName(int column) {
public boolean isCellEditable(int rowIndex, int columnIndex) {
public Class getColumnClass(int columnIndex) {
import javax.swing.table.AbstractTableModel;
public class TableModel2 extends AbstractTableModel {
private String[] columnName = new String[] { "X", "Y(x)","Y'(x)" };
public TableModel2(double[] xdata, double[] ydata,double[] zdata) {
this.xdata = Arrays.copyOf(xdata, xdata.length);
this.ydata = Arrays.copyOf(ydata, ydata.length);
this.zdata = Arrays.copyOf(zdata, zdata.length);
return xdata.length; // To change body of implemented methods use
// File | Settings | File Templates.
return 3; // To change body of implemented methods use File | Settings
public Object getValueAt(int rowIndex, int columnIndex) {
public String getColumnName(int column) {
public boolean isCellEditable(int rowIndex, int columnIndex) {
public Class getColumnClass(int columnIndex) {
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
public class TaskFrame extends JDialog {
static final int xOffset = 30, yOffset = 30;
private JPanel contentPane = new JPanel();
public TaskFrame(final DiffValues valXY, RungeKuttForm basicForm)
setTitle("Equation ?" + (openFrameCount + 1) + ": "
final JTable table = new JTable(new Object[][]{}, new String[]{"x","y"});
table.setBorder(BorderFactory.createLineBorder(Color.BLACK,2));
table.setForeground(Color.darkGray);
// -- perfoms adams method for an equation
DiffValues diffRes = MainMethod.action(valXY.getA(), valXY.getB(),
valXY.getN(), valXY.getG(),valXY.getX0(), valXY.getYX0());
(int) (Toolkit.getDefaultToolkit().getScreenSize().width * 0.28),
(int) (Toolkit.getDefaultToolkit().getScreenSize().height * 0.48)));
table.setModel(new TableModel (diffRes.getXi(),diffRes.getYi()));
JButton showGraphButton = new JButton("Make graph");
showGraphButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
JScrollPane jSP = new JScrollPane(table);
tablePanel.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 2));
tablePanel.setBackground(Color.LIGHT_GRAY);
ChartFrame frame = new ChartFrame(myDif.getXi(), myDif.getYi(), Double
.toString(myDif.getA()), Double.toString(myDif.getB()));
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
public class TaskFrame2 extends JDialog {
static final int xOffset = 30, yOffset = 30;
private JPanel contentPane = new JPanel();
public TaskFrame2(final DiffValues valXYZ, RungeKuttForm basicForm)
setTitle("Equation ?" + (openFrameCount + 1) + ": "
//-- perfoms adams method for an equation
DiffValues diffRes = MainMethod.action2(valXYZ.getA(), valXYZ.getB(),
valXYZ.getN(), valXYZ.getF(),valXYZ.getX0(), valXYZ.getYX0(), valXYZ.getYPohX0());
(int) (Toolkit.getDefaultToolkit().getScreenSize().width * 0.28),
(int) (Toolkit.getDefaultToolkit().getScreenSize().height * 0.48)));
table.setModel(new TableModel2 (diffRes.getXi(),diffRes.getYi(),diffRes.getYPohi()));
final JButton showGraphButton = new JButton("Make graph");
showGraphButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
ChartFrame frame = new ChartFrame(myDif.getXi(), myDif.getYi(), Double.toString(myDif.getA()),Double.toString(myDif.getB()));
import org.jfree.chart.ChartFactory;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.function.Function2D;
import org.jfree.data.function.NormalDistributionFunction2D;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeriesCollection;
* Describes all actions with graphics
public class ChartFrame extends JDialog {
* Constructs the chart frame, calling for constructing XYdataset and
public ChartFrame( double[] xi, double[] yi, String a, String b) {
this.xi = Arrays.copyOf(xi, xi.length);
this.yi = Arrays.copyOf(yi, yi.length);
// -creates series of data we should show
XYDataset dataset = createDataset();
final JFreeChart chart = ChartFactory.createXYLineChart(
+ a + ";" + b + "] ", "X", "Y", dataset,
PlotOrientation.VERTICAL, true, true, false);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(400, 400));
setSize(new java.awt.Dimension(400, 400));
private XYDataset createDataset() {
// -- Creates series, set name of series
final XYSeries mySeries = new XYSeries(
for (int i = 0; i < xi.length; i++) {
// -- pushes to one collection and adds this collection to the dataset
final XYSeriesCollection dataset = new XYSeriesCollection();
public class CreateTask extends AbstractAction{
private RungeKuttForm rungeKuttForm;
public CreateTask(RungeKuttForm basicForm) {
putValue(MNEMONIC_KEY, KeyEvent.VK_C);
public void actionPerformed(ActionEvent e) {
new CreateTaskDialog(rungeKuttForm);
public class CreateTask extends AbstractAction{
private RungeKuttForm rungeKuttForm;
public CreateTask(RungeKuttForm basicForm) {
putValue(MNEMONIC_KEY, KeyEvent.VK_C);
public void actionPerformed(ActionEvent e) {
new CreateTaskDialog(rungeKuttForm);
public class ExitAction extends AbstractAction{
putValue(MNEMONIC_KEY, KeyEvent.VK_E);
public void actionPerformed(ActionEvent e) {
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseListener;
class FrameDragger implements MouseListener, MouseMotionListener {
public FrameDragger(JFrame frameToDrag) {
public FrameDragger(JDialog frameToDrag) {
public void mouseDragged(MouseEvent e) {
Point currentDragPosition = e.getLocationOnScreen();
int deltaX = currentDragPosition.x - lastDragPosition.x;
int deltaY = currentDragPosition.y - lastDragPosition.y;
int x = frameToDrag.getLocation().x + deltaX;
int y = frameToDrag.getLocation().y + deltaY;
int x = frameToDrag1.getLocation().x + deltaX;
int y = frameToDrag1.getLocation().y + deltaY;
lastDragPosition = currentDragPosition;
public void mouseMoved(MouseEvent e) {
public void mouseExited(MouseEvent e) {
public void mouseEntered(MouseEvent e) {
public void mouseReleased(MouseEvent e) {
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()==2&&e.getButton()== MouseEvent.BUTTON1) {
frameToDrag.setState(Frame.ICONIFIED);
public void mousePressed(MouseEvent e) {
lastDragPosition = e.getLocationOnScreen();
public class HelpAction extends AbstractAction
public HelpAction(RungeKuttForm basicForm) {
putValue(MNEMONIC_KEY, KeyEvent.VK_I);
public void actionPerformed(ActionEvent e) {
import java.awt.event.ActionListener;
public class HelpDialog extends JDialog {
private JPanel contentPane = new JPanel();
private JButton buttonOK = new JButton("Close");
private JTextArea infoTextArea = new JTextArea();
infoTextArea.setFont(new Font("Serif", Font.ITALIC, 14));
" ->To start set all the parametres needed due to:\n" +
"1. x0,y(x0),y'(x0) => double values"+"\n"+
"2. Values for interval should be described like " +"\n"+
" low_value:high_value, for example 3:4. This shows we want to build from 3 to 4."+"\n"+
"3. If second pow eqaution prefered we replace y'(x) by z, so y''(x)=y'(x)+x"+"\n"+
"4. Steps needed are integer values."+"\n"+
"5. To close Equation panel push Cancel or Close all on Equation->Close all tip."+"\n"
contentPane.setLayout(new GridBagLayout());
contentPane.setBackground(Color.LIGHT_GRAY);
contentPane.setBorder(BorderFactory.createTitledBorder(
new Font("Serif", Font.ITALIC, 14),
constrain(contentPane, infoTextArea, 0, 1, 1, 1,
GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST, 1.0,
constrain(contentPane, buttonOK, 0, 2, 2, 2, GridBagConstraints.CENTER,
GridBagConstraints.CENTER, 1.0, 1.0, 0, 0, 0, 3);
getRootPane().setDefaultButton(buttonOK);
buttonOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
public void constrain(Container container, Component component, int grid_x,
int grid_y, int grid_width, int grid_height, int fill, int anchor,
double weight_x, double weight_y, int top, int left, int bottom,
GridBagConstraints c = new GridBagConstraints();
if (top + bottom + left + right > 0)
c.insets = new Insets(top, left, bottom, right);
((GridBagLayout) container.getLayout()).setConstraints(component, c);
* Describes all main properties of differential equation, also can incaprulate
* realising function y''(x)=g(x,y,z)
* value of y'(x0), parameter of the Koshi task
* value of y(x0), parameter of the Koshi task
* value of x0, parameter of the Koshi task
* Constructs the differential equation with no solution, only information
* @param yx0 value of y(x0), parameter of the Koshi task
* @param x0 value of x0, parameter of the Koshi task
public DiffValues(double a, double b, int n, ScriptedF g, double x0,
* Constructs the differential equation with solution
* @param yx0 value of y(x0), parameter of the Koshi task
* @param x0 value of x0, parameter of the Koshi task
public DiffValues(double a, double b, int n, ScriptedF g, double x0, double yx0,
* Constructs the differential( y''=f(x,y,y')) equation with solution
* @param g Function y''(x)=g(x,y,z), where z = y'
* @param yx0 value of y(x0), parameter of the Koshi task
* @param x0 value of x0, parameter of the Koshi task
public DiffValues(double a, double b, int n, ScriptedF2 f, double x0,double yx0, double ypohx0) {
* Constructs the differential( y''=f(x,y,y')) equation with solution
* @param g Function y''(x)=g(x,y,z), where z = y'
* @param yx0 value of y(x0), parameter of the Koshi task
* @param x0 value of x0, parameter of the Koshi task
public DiffValues(double a, double b, int n, ScriptedF2 g, double x0,double yx0, double ypohx0,
double[] xi, double[] yi, double[] ypohi) {
public void setYpohi(double[] ypohi) {
* Forms the values of y(x) from a to b, due to y(x0)=yx0
* Function in the right side of equation y'(t) = g(x,y)
* Due to Kochi problem value og y(x0)
* @return Instance of DiffValues, that encapsulates set table of y due
public static DiffValues action(double a, double b, int n, ScriptedF g,
// -- Names are retained from the book
double step = ((double) (b - a)) / n;
// --forming ti array from t0 to b with step 'step'
// --forming first 4 values of function due to argument
* Making iteration to achive a from x0, to learn y(a)
xi[0] = getYofA(t0, a, step, g, x0);
* Starts back to standart algorythm
K[0] = g.evaluate(t[i - 1], xi[i - 1]);
K[1] = g.evaluate(t[i - 1] + step / 2, xi[i - 1] + step * K[0] / 2);
K[2] = g.evaluate(t[i - 1] + step / 2, xi[i - 1] + step * K[1] / 2);
K[3] = g.evaluate(t[i - 1] + step, xi[i - 1] + step * K[2]);
xi[i] += (step / 6) * (K[0] + 2 * K[1] + 2 * K[2] + K[3]);
* reruns all diff information with initialized values of y(x)
return new DiffValues(a, b, n, g, t0, x0, t, xi);
* Forms the values of y(x) from a to b, due to y(x0)=yx0
* Function in the right side of equation y'(t) = g(x,y)
* Due to Kochi problem value og y(x0)
* @return Instance of DiffValues, that encapsulates setted table od y due
public static DiffValues action2(double a, double b, int n, ScriptedF2 g,
double x0, double yx0, double yx0poh) {
// -- Names are retained from the book
ScriptedF2 f = new ScriptedF2("z");
double step = ((double) (b - a)) / n;
// --forming xi array from a to b with step
double[] ypohi = new double[n + 1];
K[i - 1] = g.evaluate(xi[i - 1], yi[i - 1], ypohi[i - 1]);
L[i - 1] = f.evaluate(xi[i - 1], yi[i - 1], ypohi[i - 1]);
K[i] = g.evaluate(xi[i - 1] + step / 2, yi[i - 1] + step * K[0] / 2, ypohi[i - 1] + (K[i - 1] / 2));
L[i] = f.evaluate(xi[i - 1] + step / 2, yi[i - 1] + step * K[0] / 2, ypohi[i - 1] + (K[i - 1] / 2));
K[i + 1] = g.evaluate(xi[i - 1] + step / 2, yi[i - 1] + step * K[1] / 2, ypohi[i - 1] + (L[i] / 2));
L[i + 1] = f.evaluate(xi[i - 1] + step / 2, yi[i - 1] + step * K[1] / 2, ypohi[i - 1] + (L[i] / 2));
K[i + 2] = g.evaluate(xi[i - 1] + step, yi[i - 1] + step * K[2], ypohi[i - 1] + L[i + 1]);
L[i + 2] = f.evaluate(xi[i - 1] + step, yi[i - 1] + step * K[2], ypohi[i - 1] + L[i + 1]);
yi[i] += (step / 6) * (K[i - 1] + 2 * K[i] + 2 * K[i + 1] + K[i + 2]);
ypohi[i] += (K[i - 1] + 2 * (K[i] + K[i + 1]) + K[i + 2])
Решение дифференциальных уравнений методом Рунге-Кутты курсовая работа. Программирование, компьютеры и кибернетика.
Реферат по теме Теория статистики (Станкин)
Реферат: The Feelings Of Falling In Love Essay
Курсовая Работа На Тему Заработная Плата На Предприятии
Отчет по практике по теме Каменные работы
Творчество В Жизни Выдающихся Личностей Реферат
Реферат Развитие Живописи По Схеме Официальная Культура
Проблемы развития информационных технологий в республике Беларусь
Эссе На Тему Золотая Середина
Реферат: Валютный курс 7
Эссе Вош По Обществознанию
Реферат На Тему Рациональное Питание
Реферат по теме Проблема развития аудита в Украине
Контрольная работа по теме Организация многоагрегатной работы и совмещение профессий
Курсовая работа: ООН: цели, языки, членство
Реферат по теме Технічний аналіз ринку форексних операцій
Реферат по теме Военные реформы Петра I
Сочинение О Земле 3 Класс
Конфликты Разрешения Конфликтов Реферат
Сочинение На Тему Кто Может Совершить Подвиг
Курсовая Работа На Тему Особенности Развития Различных Форм Мышления У Младших Школьников
Історичні особистості України (IX-XX ст.) - История и исторические личности презентация
Феномен рыцарства - История и исторические личности реферат
Организация Североатлантического договора - Международные отношения и мировая экономика презентация


Report Page