Решение оду методом эйлера программа

Лабораторная работа по нахождению численных решений ОДУ тремя методами: Эйлера, Эйлера-Коши и Рунге-Кутты. В архиве представлена постановка задачи, блок схемы реализации методов, коды программ трёх методов на C++, а так же подведён итог проделанной работы.

Фрагменты из архива:

Постановка задачи:

Найти приближенное решение ОДУ y’= x^3 + y^3 при заданном начальном условии y(0) = 0 в трех узлах на отрезке [0,1] с шагом h = 0.3 методами Эйлера, Эйлера-Коши и Рунге – Кутты.

Код программ:

#include «stdafx.h»
#include
#include
#include

typedef double typeOfFloat;

typeOfFloat f( typeOfFloat x, typeOfFloat y );

typeOfFloat integral( typeOfFloat a, typeOfFloat b, typeOfFloat y, int n );

typeOfFloat integralOnPiece( typeOfFloat a, typeOfFloat b, typeOfFloat y, typeOfFloat E );

typeOfFloat a,b;
typeOfFloat h;
typeOfFloat e;
typeOfFloat y0;

using namespace std;

// Нахождение f(x,y)

Численное решение задачи Коши методом Эйлера


typeOfFloat f( typeOfFloat x, typeOfFloat y )
<
return ( x*x*x + y*y*y );
>

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

Похожие материалы:

  • Complex Matrix
  • Численные методы. Мудров А.Е
  • ЛР №1 — Работа с Adobe Photoshop
  • QT 4.3.1
  • Организация многооконного интерфейса

Источник: fevt.ru

lab_4 / lab4_25

Точное аналитическое решение ДУ находится методом разделения переменных:

После интегрирования и преобразования данного выражения получаем:

Подставим и в выражение, чтобы найти :

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

Читайте также:
Какая информация отражается в области просмотра программы konqueror

Значения точного решения ОДУ —

Вычислим в сценарии Scilab значения полученного решения на отрезке с шагом изменения аргумента :

Численное решение заданного ОДУ методом Эйлера

Вычислим в сценарии Scilab значения численного решения ОДУ методом Эйлера — — в точках отрезка с шагом . Для этого метода ОДУ записывают в виде . Общая формула для определения очередного значения функции по методу Эйлера имеет вид , где .

Погрешность метода Эйлера

Решение ОДУ методом Эйлера (программа)

Вычислим в сценарии значения погрешностей , где :

Решение ОДУ методом Рунге-Кутта 4-го порядка, дополненным методом автоматического выбора шага, обеспечивающим точность

Вычислим в программе значения численного решения ОДУ с точностью и получим решение в точках отрезка с шагом — — методом Рунге-Кутта 4-го порядка, используя формулу: , где

Схема алгоритма приведена в разделе 2.5 пособия по алгоритмам.

Значения погрешностей

Вычислим в сценарии Scilab значения погрешностей:

Решение ОДУ средствами пакета Scilab

Решим ОДУ, используя функцию ode():

Сведём полученные значения в таблицу:

Источник: studfile.net

Решение ОДУ в Matlab

Решение ОДУ в Matlab

Доброго времени суток! Сегодня мы поговорим о решении ОДУ (обыкновенных дифференциальных уравнений) в Matlab. Перед тем как мы начнём обсуждать данную тему, советую вам ознакомиться с темой: Численное дифференцирование в Matlab, чтобы лучше понимать теоретическую составляющую решения ОДУ.

Обыкновенные дифференциальные уравнения

  • Задача Коши
  • Краевая задача
  • Задача на собственные значения

Кратко расскажу о их сути:

Задача Коши предполагает дополнительные условия в виде значения функции в определённой точке.
Краевая задача подразумевает поиск решения на заданном отрезке с краевыми (граничными) условиями в концах интервала или на границе области.
Задача на собственные значения — помимо искомых функций и их производных, в уравнение входят дополнительное несколько неизвестных параметров, которые являются собственными значениями.

Читайте также:
Задачи из школьной программы

Методы решения дифференциальных уравнений

Решение ОДУ в Matlab и не только, в первую очередь, сводится к выбору порядка численного метода решения. Порядок численного метода не связан с порядком дифференциального уравнения. Высокий порядок у численного метода означает его скорость сходимости.

В случае большого интервала, с помощью алгоритмов с низким порядком сжимают интервал с решениями и находят приблизительные корни, а затем уже уточняют корни с помощью методов с высоким порядком.

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

Метод Рунге-Кутта первого порядка

Методы Рунге-Кутта представляют собой разложения в ряд Тейлора и от количества использованных элементов ряда зависит порядок этого метода. Следовательно, помимо Рунге-Кутта первого порядка, вы сможете увидеть методы других порядков. Иногда их называют другими именами.

Например, Метод Рунге-Кутта первого порядка, также известен как Метод Эйлера или Метод ломаных. Информацию о его математическом и графическом представлении советую поискать в гугл. Мы же поговорим о том, как Метод Рунге-Кутта первого порядка реализуется в Matlab для решения ОДУ. Например:

Решить и привести график ошибки уравнения y’ = y*x методом Рунге-Кутта первого порядка (Методом Эйлера, Методом ломаных).

Setka=10:10:10000; for k=1:length(Setka) %определяем параметры сетки N=Setka(k); h=1.0/(N-1); %задаем начальное условие y(1)=1; %применяем алгоритм метода ломаных/Эйлера for n=1:(N-1) y(n+1)=y(n)+ h*((n-1)*h*y(n)); %где (n-1)*h -> x end %вычисляем величину M(1) в оценке %погрешности численного решения M(k)=abs(y(N)-exp(0.5))/h; step(k)=h; end %рисуем зависимость величины M(1) от шага plot(step,M);

Погрешность метода 1 порядка

На данном графике показана зависимость величины ошибки от шага.

Метод Рунге-Кутта второго порядка

Также известен как Метод Эйлера-Коши. Как видите, во второй части уравнения происходит обращения к следующему шагу. Но как тогда быть, если нам ещё не известен следующий шаг? Всё просто. Метод Рунге-Кутта второго порядка — это всё тот же метод первого порядка, однако, на половине шага происходит нахождение «первичного» решения, а затем происходит его уточнение.

Читайте также:
Программа не было бы счастья

Это позволяет поднять порядок скорости сходимости до двух.

Решить и привести график ошибки уравнения u’ = u*x методом Рунге-Кутта второго порядка.

Погешность Рунге-Кутта второго порядка

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

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru