logo search
Дифф_ур_в_MathCad

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

Рассмотрим систему двух обыкновенных дифференциальных уравнений первого порядка с двумя неизвестными и начальными условиями в одной точке (задача Коши)[7,8]:

Распространенным численным методом решения поставленной задачи является метод Рунге-Кутта 2-го порядка (подробно этот метод рассмотрен в работах 5, 6).

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

,

где .

После этого получают значения неизвестных функций

.

Таким образом, зная значения и в точке , можно вычислить значения и в произвольной точке .

Для одного уравнения формулы принимают вид

.

Геометрическая иллюстрация этого случая приведена на рис.

Рис.7

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

Рассмотренный метод Рунге-Кутта имеет второй порядок точности: . На практике точность решения определяют по правилу Рунге:

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

Варианты работы даны для линейного ОДУ 2-го порядка

.

Для перехода к системе ОДУ первого порядка надо ввести новую функцию . Тогда

(в наших обозначениях: ).

Можно написать программу на языке пакета, реализующую метод Рунге-Кутта второго порядка. Для этого метода задают точность вычислений. Вычисления будем проводить с шагом и . Проверим результаты расчета с заданной точностью. Если точность не достигнута, то в качестве шага выбираем значение и повторяем вычисления и так делаем до тех пор пока не получим заданную точность. Напомним, что при изменении шага h перерасчет производится автоматически.

Рассмотрим в качестве примера ДУ второго порядка из лабораторной работы №2: . Решение ищем на отрезке [1,2].

Сведем данное ДУ к системе ДУ первого порядка:

Зададим точность вычислений .

Как видно из листинга решения, точность результатов не достигла заданной точности и вычисления надо повторить.

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

Для решения этого уравнения (системы ДУ первого порядка) можно использовать функции rkfixed, Rkadapt или Bulstoer , которые описаны в работе №2.

Разрешим данное ДУ относительно второй производной . Запишем функцию :

Реализация этого примера в MathCad приведена в лабораторной работе №2.

Задание

1. Найти точное решение ОДУ.

2. Вычислить с заданной точностью решение уравнения в точках 0.25, 0.5, 0.75, 1.

  1. Найти решение этого уравнения (системы ДУ 1-го порядка) с использованием функций rkfixed или Rkadapt или Bulstoer.

  2. Сравнить приближенные решения с точным решением.

  3. Построить интегральную кривую.

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

Варианты работы № 3

.

Значения и во всех вариантах равны 0 и 1, соответственно .

Номер варианта

p(x)

q(x)

f(x)

A

C

1

-2

1

2

3

2

-7

12

5

1

2

3

-4

3

3

9

4

-1

0

1

1

5

-8

16

0

1

6

-8

7

14

1

0

7

0

4

8

3

4

8

0

1

1

2/3

9

-2

0

2

2

10

0

1

4

-3

11

0

-1

1

1

12

0

4

0

0

13

-4

0

0

3,5625

14

0

-4

0

3

15

1

-2

1

-1

16

-6

8

10

1

2

17

-2

2

0

1

18

-5

0

7

1

0,6

19

-3

2

0

-0,2

20

6

0

8

2

6

21

1

-2

1

2

22

-1

0

3

6

2

23

0

4

1

1

24

0

4

1

3

25

-1

-6

2

1

0

26

-8

7

14

1

5

27

0

1

1

2

28

4

4

1

2

29

0

4

2

0,75

30

0

-1

3

1,5