Решение обыкновенных дифференциальных уравнений (задача Коши)

Содержание

Слайд 2

Классификация дифференциальных уравнений обыкновенные дифференциальные уравнения, содержащие одну независимую переменную и

Классификация дифференциальных уравнений

обыкновенные дифференциальные уравнения, содержащие одну независимую переменную и производные

по ней;
дифференциальные уравнения в частных производных, содержащие несколько независимых переменных и производные по ним.

В зависимости от числа независимых переменных и, следовательно, типа входящих в них производных:

Слайд 3

Примеры дифференциальных уравнений уравнение свободных колебаний уравнение вынужденных колебаний уравнение Лапласа одномерное волновое уравнение уравнение теплопроводности

Примеры дифференциальных уравнений

уравнение
свободных колебаний

уравнение
вынужденных колебаний

уравнение Лапласа

одномерное
волновое уравнение

уравнение

теплопроводности
Слайд 4

Типы задач задача Коши краевая задача Чтобы решить обыкновенное дифференциальное уравнение,

Типы задач

задача Коши
краевая задача

Чтобы решить обыкновенное дифференциальное уравнение, необходимо знать значения

зависимой переменной и (или) ее производных при некоторых значениях независимой переменной.

Задача Коши (задача с начальными условиями) –

дополнительные условия задаются при одном значении независимой переменной

Краевая задача – дополнительные условия задаются при двух или более значениях независимой переменной.

Решение ОДУ

Слайд 5

Решение ОДУ в MathCAD Given :=Odesolve( , ,[ ])

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

Given
<дифференциальное уравнение>
<начальные или гран. условия>
<имя

функции>:=Odesolve(,,[])
Слайд 6

Пример Решить задачу Коши для дифференциального уравнения Решение ДУ в MathCAD

Пример

Решить задачу Коши для дифференциального уравнения

Решение ДУ в MathCAD

Слайд 7

Использование функции rkfixed

Использование функции rkfixed

Слайд 8

Численные методы решения задачи Коши Две группы методов: одношаговые методы; методы прогноза и коррекции (многошаговые методы).

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

Две группы методов:
одношаговые методы;
методы прогноза и коррекции

(многошаговые методы).

 

 

Слайд 9

Численные методы решения задачи Коши Одношаговые методы: метод Эйлера; модифицированный метод

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

Одношаговые методы:
метод Эйлера;
модифицированный метод Эйлера;
метод Рунге-Кутты.

Методы прогноза

и коррекции:
метод Милна;
метод Адамса–Башфорта;
метод Хемминга.
Слайд 10

Погрешности Источники погрешностей: погрешность округления; погрешность усечения; погрешность распространения. Погрешность распространения

Погрешности

Источники погрешностей:
погрешность округления;
погрешность усечения;
погрешность распространения.

Погрешность распространения – результат накопления погрешностей, появившихся

на предыдущих этапах счета.

Указанные три источника погрешностей являются причиной наблюдаемых ошибок двух типов:
локальная ошибка – сумма погрешностей, вносимых в вычислительный процесс на каждом шаге вычислений;
глобальная ошибка – суммарная погрешность, накопившаяся с момента начала вычислений.

Слайд 11

Метод Эйлера Формула Эйлера рекуррентное соотношение

Метод Эйлера

Формула Эйлера

рекуррентное соотношение

Слайд 12

Шуп Т. Решение инженерных задач на ЭВМ Метод Эйлера

Шуп Т. Решение инженерных задач на ЭВМ

Метод Эйлера

Слайд 13

Программирование метода Эйлера double f(double x, double y) { return 2*x*x + 2*y; }

Программирование метода Эйлера

double f(double x, double y)
{
return 2*x*x + 2*y;
}

Слайд 14

Программирование метода Эйлера void rdy_Eiler(double *x, double *y, double b, int

Программирование метода Эйлера

void rdy_Eiler(double *x, double *y, double b, int n)
{

int i;
double h = (b-x[0])/n;
for (i=0; i {
x[i+1] = x[i] + h;
y[i+1] = y[i] + h*f(x[i], y[i]);
}
}
Слайд 15

Программирование метода Эйлера void __fastcall TForm1::Button1Click(TObject *Sender) { double *x, *y;

Программирование метода Эйлера

void __fastcall TForm1::Button1Click(TObject *Sender)
{
double *x, *y;
int i,

n = 10;
char s[100];
x = new double[n+1];
y = new double[n+1];
x[0] = 0;
y[0] = 1;
rdy_Eiler(x, y, 1, n);
Memo1->Lines->Clear();
for (i=0; i<=n; i++)
{
sprintf(s, "%4.1f %9.4f", x[i], y[i]);
Memo1->Lines->Add(s);
}
delete[] y;
delete[] x;
}
Слайд 16

Модифицированный метод Эйлера Ошибка

Модифицированный метод Эйлера

Ошибка

Слайд 17

Модифицированный метод Эйлера void rdy_MEiler(double *x, double *y, double b, int

Модифицированный метод Эйлера

void rdy_MEiler(double *x, double *y, double b, int n)
{

int i;
double h = (b-x[0])/n, y1;
for (i=0; i {
x[i+1] = x[i] + h;
y1 = y[i] + h*f(x[i], y[i]);
y[i+1] = y[i]+0.5*h*(f(x[i], y[i])+f(x[i+1], y1));
}
}
Слайд 18

Метод Рунге-Кутты Ошибка

Метод Рунге-Кутты

Ошибка

Слайд 19

Результаты расчетов

Результаты расчетов

Слайд 20

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

Общая характеристика одношаговых методов

чтобы получить информацию в новой точке, надо иметь

данные лишь в одной предыдущей точке (свойство «самостартования»);
в основе всех одношаговых методов лежит разложение функции в ряд Тейлора;
все одношаговые методы не требуют вычисления производных;
свойство «самостартования» позволяет легко менять величину шага.
Слайд 21

Методы прогноза и коррекции Для этого применяются две формулы: формула прогноза;

Методы прогноза и коррекции

Для этого применяются две формулы:
формула прогноза;
формула коррекции.

В этих

методах для вычисления положения новой точки используется информация о нескольких ранее полученных точках.
Слайд 22

Метод Милна Этап прогноза (формула Милна): Этап коррекции (формула Симпсона): Методы

Метод Милна

Этап прогноза (формула Милна):

Этап коррекции (формула Симпсона):

Методы прогноза и коррекции

не обладают свойством «самостартования»
(в формулах используется информация о нескольких ранее полученных точках).
Перед применением метода прогноза и коррекции необходимо вычислить исходные данные с помощью какого-либо одношагового метода.
Слайд 23

Метод Милна void rdy_Miln(double *x, double *y, double b, int n)

Метод Милна

void rdy_Miln(double *x, double *y, double b, int n)
{
int

i;
double h = (b-x[0])/n, y1, dy1, dy2;
double *dy;
dy = new double[n+1];
rdy_RKT(x, y, x[0]+3*h, 3);
for (i=0; i<=3; i++)
dy[i] = f(x[i], y[i]);
for (i=3; i {
x[i+1] = x[i] + h;
y1 = y[i-3]+4./3*h*(2*dy[i]-dy[i-1]+2*dy[i-2]);
dy1 = f(x[i+1], y1);
Слайд 24

Метод Милна while (1) { y1 = y[i-1] + h/3*(dy1 +

Метод Милна

while (1)
{
y1 = y[i-1] + h/3*(dy1 +

4*dy[i] + dy[i-1]);
dy2 = f(x[i+1], y1);
if (fabs(dy2-dy1)<1e-3) break;
dy1 = dy2;
}
dy[i+1] = dy2;
y[i+1] = y[i-1]+h/3*(dy[i+1]+4*dy[i]+dy[i-1]);
}
delete[] dy;
}
Слайд 25

Методы Рунге–Кутты для системы дифференциальных уравнений Начальные условия

Методы Рунге–Кутты для системы дифференциальных уравнений

Начальные условия

Слайд 26

Методы Рунге–Кутты для системы дифференциальных уравнений

Методы Рунге–Кутты для системы дифференциальных уравнений

Слайд 27

Методы Рунге–Кутты для системы дифференциальных уравнений

Методы Рунге–Кутты для системы дифференциальных уравнений

Слайд 28

Методы Рунге–Кутты для системы дифференциальных уравнений

Методы Рунге–Кутты для системы дифференциальных уравнений

Слайд 29

Задание Написать программу решения обыкновенного дифференциального уравнения с использованием метода Эйлера

Задание

Написать программу решения обыкновенного дифференциального уравнения с использованием метода Эйлера (Delphi)

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