Численное моделирование ситуации blow-up для нелинейных дифференциальных уравнений

Описание физических явлений нелинейными уравнениями и неравенствами с сингулярными коэффициентами. Условия возникновения ситуации blow-up для нелинейных дифференциальных неравенств. Постановка задачи и алгоритм ее решения, код программы на языке C#.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 15.10.2016
Размер файла 2,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Федеральное государственное бюджетное образовательное учреждение высшего образования

"Московский государственный технологический университет "СТАНКИН"

Отчет по лабораторной работе на тему:

"Численное моделирование ситуации blow-up для нелинейных дифференциальных уравнений"

Выполнил:

студент группы ИДБ-13-09

Котельникова А.

Москва 2016

Содержание

  • 1. Постановка задачи и алгоритм ее решения
    • 2. Код программы (на языке C#)
    • 3. Результат работы программы для h=0.25
  • 4. Результат работы программы для h=0.05
    • 5. Результат работы программы для h=0.0025
    • 6. Сравнение метода Эйлера и метода Рунге-Кутты четвертого порядка
    • 7. Порядок фактической погрешности времени жизни решения относительно шага h по сетке времени
    • Заключение
    • Список литературы
    • 1. Постановка задачи и алгоритм ее решения

Точное решение представленного дифференциального уравнения:

Ситуация blow-up имеет место при времени blow-up

.

Найдем приближенное время жизни и приближенное решение этой же задачи Коши при помощи метода Эйлера. Фактически использование этого метода заключается в итерационном подсчете значений до тех пор, пока новое значение не превзойдет некого наперед заданного числа M. Время жизни в таком случае будет равно

.

Производить подсчет значений будем по формуле:

Где по условию, а шаг по сетке времени.

Теоретическую оценку погрешности времени жизни приближенного решения для метода Эйлера найдем по формуле

(данная формула взята из [1]). По условию задачи , поэтому формула выше принимает вид

Фактическую погрешность времени жизни приближенного решения найдем как разность между времени жизни приближенного решения, полученного при приближенном решении задачи методом Эйлера, и временем жизни точного решения. Также на каждом шаге будем считать разницу между точным и приближенным решением для данного значения t.

2. Код программы (на языке C#)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace salieva

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void chart1_Click(object sender, EventArgs e)

{

}

private void button1_Click(object sender, EventArgs e)

{

chart1.Series["Приближенное"].Points.Clear();

chart1.Series["Точное"].Points.Clear();

dataSet1.Tables[0].Rows.Clear();

double m, y, h, y_chast, t;

int n;

if (!double.TryParse(textBox1.Text,out m))

{

MessageBox.Show("Неверно введено M");

return;

}

h = Convert.ToDouble(comboBox1.SelectedItem.ToString());

y = 0.3;

n = 0;

do

{

t = n * h;

y_chast = Math.Sqrt(1.0 / (2.0 * (50.0 / 9.0 - t)));

if (double.IsNaN(y_chast))

{

y_chast = 0;

}

else

{

if (y_chast < m)

{

chart1.Series["Приближенное"].Points.Add(new System.Windows.Forms.DataVisualization.Charting.DataPoint(t, y_chast));

}

}

if (y < m)

{

chart1.Series["Точное"].Points.Add(new System.Windows.Forms.DataVisualization.Charting.DataPoint(t, y));

}

dataSet1.Tables[0].Rows.Add(t, y, y_chast, y-y_chast);

y = y + Math.Pow(y, 3) * h;

n++;

} while (y < m);

t = n * h;

y_chast = Math.Sqrt(1.0 / (2.0 * (50.0 / 9.0 - t)));

if (double.IsNaN(y_chast))

{

y_chast = 0;

}

else

{

chart1.Series["Приближеное"].Points.Add(new System.Windows.Forms.DataVisualization.Charting.DataPoint(t, y_chast));

}

chart1.Series["Точное"].Points.Add(new System.Windows.Forms.DataVisualization.Charting.DataPoint(t, y));

dataSet1.Tables[0].Rows.Add(t, y, y_chast, y - y_chast);

label4.Text = n.ToString();

solveRungeKutta();

}

private double getF(double x)

{

return x * x * x;

}

private void solveRungeKutta()

{

listBox1.Items.Clear();

listBox2.Items.Clear();

double m;

if (!double.TryParse(textBox1.Text, out m))

{

MessageBox.Show("Неверно введено M");

return;

}

double h = Convert.ToDouble(comboBox1.SelectedItem.ToString());

chart1.Series["Метод Рунге-Кутты"].Points.Clear();

double y = 0.3;

double t = 0.0;

int n = 0;

do

{

if (!double.IsNaN(y))

{

chart1.Series["Метод Рунге-Кутты"].Points.Add(new System.Windows.Forms.DataVisualization.Charting.DataPoint(t, y));

}

listBox1.Items.Add(String.Format("t={0}, y={1}", t, y));

if (dataSet1.Tables[0].Rows.Count > n)

{

listBox2.Items.Add((double)dataSet1.Tables[0].Rows[n][1] - y);

}

y = calcNextStep(t, h, y);

t += h;

n++;

} while (y < m);

/*if (!double.IsNaN(y))

{

chart1.Series["Метод Рунге-Кутты"].Points.Add(new System.Windows.Forms.DataVisualization.Charting.DataPoint(t, y));

}*/

listBox1.Items.Add(y.ToString());

if (dataSet1.Tables[0].Rows.Count > n)

{

listBox2.Items.Add((double)dataSet1.Tables[0].Rows[n][1] - y);

}

label6.Text = n.ToString();

}

private double calcNextStep(double t, double h, double y)

{

double k1 = getF(y);

double k2 = getF(y + (h / 2.0) * k1);

double k3 = getF(y + (h / 2.0) * k2);

double k4 = getF(y + h * k3);

y += (h / 6.0) * (k1 + 2.0 * k2 + 2.0 * k3 + k4);

return y;

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

}

private void Form1_Load(object sender, EventArgs e)

{

comboBox1.SelectedItem = comboBox1.Items[0];

}

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)

{

}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

{

}

private void label3_Click(object sender, EventArgs e)

{

}

private void label4_Click(object sender, EventArgs e)

{

}

private void listBox2_SelectedIndexChanged(object sender, EventArgs e)

{

}

}

}

3. Результат работы программы для h=0.25

нелинейный дифференциальный уравнение алгоритм

На графике красная линия - точное решение, черная линия - приближенное решение.

Таким образом, программе понадобилось 27 итераций для получения приближенного времени жизни. Видно, что приближенное решение "опережает" по сравнению с точным. Также разница между точным и приближенным решениями до какого-то момента времени оказывается достаточно незначительной (линии на графике практически накладываются друг на друга), но при приближении к ситуации blow-up разность между ними начинает резко возрастать (красная линия отделяется от черной).

Оценка погрешности равна -1,98361481316321

4. Результат работы программы для h=0.05

На графике красная линия - точное решение, черная линия - приближенное решение.

Программе понадобилось несколько больше итераций, но не на порядок, для получения приближенного времени жизни. По сравнению с графиком для h=0.05 кривые гораздо меньше отстают друг от друга, что говорит о том, что приближенное решение гораздо точнее оценивает точное. Из этого делаем достаточно логичный вывод о том, что уменьшение шага h по времени положительно сказывается на точности алгоритма.

Приближенное время жизни равно 6,5, а точное равно 5.555556, т.е. фактическая погрешность времени жизни равна 0.4, в то время как теоретическая оценка погрешности времени жизни равна 0.3443878 .

5. Результат работы программы для h=0.0025

На графике красная линия - точное решение, черная линия - приближенное решение.

Программе понадобилось 230 итераций для получения приближенного времени жизни. Кривые еще меньше отстают друг от друга, то есть оценка стала еще точнее. С другой стороны, количество итераций тоже резко возросло.

Приближенное время жизни равно 5,565, а точное равно 5.55556, т.е. фактическая погрешность времени жизни равна 0.01, в то время как теоретическая оценка погрешности времени жизни равна 0.01626939 .

Мы исследовали зависимость от М для всех h.

Подводя промежуточный итог на данном этапе, можно сделать вывод, что для моделирования ситуации М blow-up нам не стоит брать слишком большую верхнюю границу, поскольку будем наблюдать слишком огромный скачок на последней итерации. Напротив, если брать слишком маленькое М ситуация blow-up нами не смоделируется.

6. Сравнение метода Эйлера и метода Рунге-Кутты четвертого порядка

Хоть теоретическая оценка погрешности времени жизни для метода Рунге-Кутты нам неизвестна, мы все равно можем сравнить эффективность этих методов по фактической погрешности и по количеству итераций, необходимых для получения приближенного времени жизни.

Метод Рунге-Кутты четвертого порядка имеет четвертый порядок точности. Это значит, что ошибка на одном шаге имеет порядок , а суммарная ошибка на конечном интервале имеет порядок . Для :

,

,

Метод

h=0.25

h=0.05

h=0.0025

Эйлера

?

1.5

0.4

0.01

Итераций

26

116

2226

Рунге-Кутты

?

0.22

0.04

10-8

Итераций

23

112

2221

Как по фактической погрешности времени жизни решения, так и по количеству итераций метод Рунге-Кутты оказывается точнее. Но хоть количество итераций для метода Рунге-Кутты меньше (причем меньше весьма незначительно), количество операций оказывается значительно больше, т.к. в цикле для вычисления нового значения методом Эйлера выполняется одна операция, а методом Рунге-Кутты - пять операций.

Для современной вычислительной техники такое количество операций не является большой проблемой, поэтому в целом стоит признать метод Рунге-Кутты более эффективным для априорного оценивания времени жизни решения.

7. Порядок фактической погрешности времени жизни решения относительно шага h по сетке времени

Попытаемся оценить порядок x в уравнении

Составим пропорцию:

;

;

;

;

log(1.5/0.4)/log(0.25/0.05)=0.8212531

log(0.4/0.0225)/log(0.05/0.0025)=0.9606831

log(1.5/0.0225)/log(0.25/0.0025)=0.9119544

log(0.004/1.5)/log(0.0005/0.25)=0.9537087

Посчитав х для нескольких значений из таблицы выше, получаем близкие к 1 значения, что соответствует порядку метода Эйлера.

Заключение

Далеко не всегда для дифференциального уравнения можно получить точное решение и точное время жизни данного решения. В таких случаях приходится прибегать к численным методам для поиска приближенного решения поставленной задачи. Данная работа позволяет нам понять, насколько эффективно численные методы могут оценивать как само решение уравнения, так и время жизни решения, а также выявить зависимость точности приближения от шага сетки (h) по времени и от момента остановки работы итерационного цикла (M).

Приближенное решение оказывается весьма точной оценкой точного решения до того момента по времени, пока мы не оказываемся вблизи , вблизи же оно уже достаточно сильно отличается от точного решения. Величина h, как и ожидалось, напрямую влияет на точность получаемой оценки времени жизни решения: чем меньше h, тем ближе оценка к реальному значению. Ситуация с M не такая однозначная: с одной стороны, маленькое значение M не даст смоделировать ситуацию blow-up, с другой стороны, для больших значений M и погрешность оценки времени жизни решения оказывается больше, так как решения успевают "разойтись" дальше друг от друга. Для реального прогнозирования ситуаций blow-up стоит брать большое значение M, теряя в точности оценки. Сделать оценку более точной поможет меньшее значение h.

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

Список литературы

1. Chiaki Hirota, Kazufumi Ozawa. Numerical method of estimating the blow-up time and rate of the solution of ordinary differential equations--An application to the blow-up problems of partial differential equations. Akita Prefectural University, 2004.

Размещено на Allbest.ru

...

Подобные документы

  • Численные методы решения нелинейных уравнений, систем линейных и нелинейных алгебраических уравнений, дифференциальных уравнений, определенных интегралов. Методы аппроксимации дискретных функций и методы решения задач линейного программирования.

    методичка [185,7 K], добавлен 18.12.2014

  • Исследование свойств и поведения динамических объектов, описываемых системами обыкновенных нелинейных дифференциальных уравнений. Описание методов, программ и алгоритмов решения систем линейных и нелинейных алгебраических уравнений в системе MathCAD.

    контрольная работа [255,1 K], добавлен 16.01.2009

  • Обзор существующих методов по решению нелинейных уравнений. Решение нелинейных уравнений комбинированным методом и методом хорд на конкретных примерах. Разработка программы для решения нелинейных уравнений, блок-схемы алгоритма и листинг программы.

    курсовая работа [435,8 K], добавлен 15.06.2013

  • Основные этапы математического моделирования. Метод Эйлера как наиболее простой численный метод решения обыкновенных дифференциальных уравнений. Написание компьютерной программы, которая позволит изучать графики системы дифференциальных уравнений.

    курсовая работа [1,9 M], добавлен 05.01.2013

  • Расчет трансформатора питания. Численное решение нелинейных уравнений с заданной точностью и дифференциальных уравнений первого порядка. Разработка программы с использованием средств визуального программирования на алгоритмическом языке программирования.

    курсовая работа [1,2 M], добавлен 17.08.2013

  • Решение нелинейных уравнений методом простых итераций и аналитическим, простым и модифицированным методом Ньютона. Программы на языке программирования Паскаль и С для вычислений по вариантам в порядке указанных методов. Изменение параметров задачи.

    лабораторная работа [191,0 K], добавлен 24.06.2008

  • Сравнительный анализ итерационных методов решения нелинейных алгебраических и трансцендентных уравнений. Простейший алгоритм отделения корней нелинейных уравнений. Метод половинного деления. Геометрический смысл метода Ньютона. Метод простой итерации.

    реферат [95,0 K], добавлен 06.03.2011

  • Схема и основные параметры элементов цепи. Вывод системы дифференциальных уравнений. Реализация алгоритма на языке программирования высокого уровня Pascal. Решение дифференциальных уравнений в пакете MathCAD. Решение интерполяции в пакете Excel.

    курсовая работа [375,4 K], добавлен 06.01.2011

  • Метод половинного деления как один из методов решения нелинейных уравнений, его основа на последовательном сужении интервала, содержащего единственный корень уравнения. Алгоритм решения задачи. Описание программы, структура входных и выходных данных.

    лабораторная работа [454,1 K], добавлен 09.11.2012

  • Разработка программы на языке Turbo Pascal 7.0 для преобразования кинетической схемы протекания химических реакций при изотермических условиях в систему дифференциальных уравнений. Ее решение в численном виде методом Рунге-Кутта четвертого порядка.

    курсовая работа [929,7 K], добавлен 06.01.2013

  • Суть основных идей и методов, особенностей и областей применения программирования для численных методов и решения нелинейных уравнений. Методы итераций, дихотомии и хорд и их использование. Алгоритм метода Ньютона, создание программы и ее тестирование.

    курсовая работа [423,0 K], добавлен 17.02.2010

  • Особенности решения уравнений с одной переменной методом половинного деления. Оценка погрешности метода простой итерации. Суть решения уравнений в пакете Mathcad. Векторная запись нелинейных систем. Метод Ньютона решения систем нелинейных уравнений.

    курсовая работа [2,1 M], добавлен 12.12.2013

  • Разработка быстрого и эффективного алгоритма для решения задачи оценки параметров обыкновенных дифференциальных уравнений с запаздывающими аргументами, не разрешаемых аналитически. Реализация алгоритма в виде библиотеки на языке программирования MATLAB.

    дипломная работа [1,6 M], добавлен 19.06.2012

  • Вывод системы дифференциальных уравнений. Описание методов численного решения задачи Коши. Моделирование переходных процессов в электрической цепи. Решение задачи аппроксимации. Расчет количества теплоты, выделившейся на резисторе, реализация в MathCAD.

    курсовая работа [202,5 K], добавлен 11.11.2013

  • Математическая постановка задачи. Алгоритм решения системы обыкновенных дифференциальных уравнений методом Эйлера. Параметры программы, ее логическая структура и функциональное назначение. Анализ входных и выходных данных. Описание тестовых задач.

    курсовая работа [38,0 K], добавлен 26.04.2011

  • Особенности точных и итерационных методов решения нелинейных уравнений. Последовательность процесса нахождения корня уравнения. Разработка программы для проверки решения нелинейных функций с помощью метода дихотомии (половинного деления) и метода хорд.

    курсовая работа [539,2 K], добавлен 15.06.2013

  • Решение дифференциальных уравнений с использованием классических алгоритмов численных методов Эйлера и Рунге-Кутта 4-го порядка. Команды, используемые при решении обыкновенных дифференциальных уравнений в системе вычислений. Результат работы программы.

    курсовая работа [226,6 K], добавлен 05.04.2013

  • Изучение методов решения нелинейных уравнений таких как: метод Ньютона, модифицированный метод Ньютона, метод Хорд, метод простых Итераций. Реализация программы для персонального компьютера, которая находит решение нелинейного уравнения разными способами.

    практическая работа [321,9 K], добавлен 24.06.2012

  • Программирование нестандартных функций. Матрицы и операции над ними. Решение нелинейных уравнений и численное интегрирование. Оптимизация функции и численное дифференцирование. Аппроксимация функции: методы решения, описание программы, результаты.

    курсовая работа [70,5 K], добавлен 12.08.2011

  • Суть метода Рунге-Кутта и его свойства. Решение дифференциальных уравнений первого порядка. Вычислительный блок Given/Odesolve. Встроенные функции rkfixed, Rkadapt, Bulstoer. Решения линейных алгебраических уравнений в среде MathCad и Microsoft Excel.

    курсовая работа [1,1 M], добавлен 02.06.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.