14-es / ЭС - Информатика (ИСФ) / умк_Спиридонов_Информатика_ч.1_2013
.pdfРешаем систему с помощью встроенной функции
Z := rkfixed(N ,0,tmax ,npoints, D) , k := 1...npoints .
Представим на графике результаты расчета – зависимость численно-
сти популяций от времени (рис. 8.22) и зависимость числа жертв от чис- ла хищников (рис. 8.23).
40
Zk , 2
20
Zk , 3
0
0 |
50 |
100 |
150 |
200 |
Zk , 1 , Zk , 1
Рис. 8.22
Можно использовать обозначе-
ния Z<i > k или Zk , i – это одно и то же. Поскольку дифференциальное
уравнение порядка выше первого мо- жет быть преобразовано к системе дифференциальных уравнений первого порядка, функция rkfixed может быть использована и для решения диффе- ренциальных уравнений.
15 |
|
|
|
10 |
|
|
|
Zk , 3 |
|
|
|
5 |
|
|
|
0 |
10 |
20 |
30 |
0 |
|||
|
Zk , 2 |
|
|
|
Рис. 8.23 |
|
|
8.12.5. Решение дифференциальных уравнений второго порядка
В качестве примера решим задачу о гармоническом осцилляторе, для которого известно аналитическое решение, и легко может быть оценена точность вычислений. Дифференциальное уравнение второго порядка
y′′ + 2βy′ + ω2 y = 0
преобразуем к системе из двух дифференциальных уравнений первого по- рядка
y′ = x,
x′ = −2βx − ω2 y.
231
Пусть декремент затухания β := 0.0 и циклическая частота ω := 1.
Зададим начальные условия y := |
0 |
. |
|
1 |
|
Начальной координате соответствует y0, а y1 – начальной скорости.
Зададим теперь матрицу D. С учетом того, что искомая величина соответ- ствует нулевому элементу массива y, ее первая производная – первому, а вторая – второму, имеем
|
|
y |
|
|
D(t, y) := |
−2βy |
1 |
, Z := rkfixed( y,0,5π,100, D) . |
|
|
− ω2 y |
|
|
|
|
1 |
0 |
|
|
Представим результаты расчета на графике (рис. 8.24) и сравним их с |
||||
аналитическим решением |
f (x) := y1 exp(-b × x) × cos(w × x) , |
k ≡ 0..100 |
x := 0,0.1..5π.
1 |
|
|
|
Zk , 2 |
|
|
|
0 |
|
|
|
f( x ) |
|
|
|
1 |
5 |
10 |
15 |
0 |
|||
|
|
Zk , 0 , x |
|
|
|
Рис. 8.24 |
|
|
Для контроля точности вычислений нарисуем фазовую траекторию |
||
(зависимость смещения от скорости) (рис. 8.25). Для гармонического ос- |
|||
циллятора фазовая траектория должна иметь вид эллипса. |
|||
|
1 |
|
Mathcad имеет еще две функции для |
|
|
решения задачи Коши. Это функции Rka- |
|
|
|
|
|
|
|
|
dapt и Bulstoer. Эти функции имеют те же |
Zk , 2 |
0 |
|
самые аргументы и возвращают решения |
|
в такой же форме, что и функция rkfixed. |
||
|
|
|
|
|
|
|
Первая из этих функций использует ме- |
|
|
|
тод Рунге – Кутты с переменным шагом, |
|
1 |
|
что позволяет повысить точность вычис- |
|
1 |
0 |
|
|
1 |
||
|
|
Zk , 1 |
лений и сократить их объем, если иско- |
|
|
мое решение имеет области, где ее значе- |
|
|
|
|
|
|
|
Рис. 8.25 |
ния меняются быстро, и области плавного |
|
|
|
232 |
изменения. Функция Rkadapt будет варьировать величину шага в зависи- мости от скорости изменения решения.
Функция Bulstoer реализует иной численный метод – метод Бу- лирша – Штера. Ее следует применять, если известно, что решение являет- ся гладкой функцией.
8.12.6. Решение краевой задачи
Пусть требуется найти |
решение |
дифференциального уравнения |
|
y′′ + 2βy + ω02 y = 0 при условиях |
y(0) = 1 |
и |
y(5π) = 0 . |
При значениях параметров |
β := 0.1, |
ω0 := 1. |
Для решения краевой задачи имеется встроенная функция sbval, реа- лизующая метод стрельб и позволяющая свести краевую задачу к задаче Коши. Функция sbval имеет следующие параметры:
−v – вектор, содержащий начальные приближения для недостаю- щих начальных условий;
−xmin, xmax – границы интервала, на котором ищется решение;
−D(x,y) – вектор-функция, содержащая правые части системы диф- ференциальных уравнений первого порядка, эквивалентной исходному уравнению, размер вектора n совпадает со степенью старшей производной дифференциального уравнения;
− load(xmin,v) – вектор-функция, элементы которой соответствуют n значениям функций на левой границе интервала. Часть этих значений из- вестна, а для части заданы начальные приближения в векторе v. Их уточ- ненные значения будут найдены в процессе вычисления
− score(xmax,y) – вектор-функция, имеющая то же число элементов, что и v. Каждое значение является разностью между начальными значе- ниями в конечной точке интервала и соответствующей оценки для реше- ния. Этот вектор показывает, на сколько близко найденное решение к ис- тинному.
Наша задача сводится к системе двух дифференциальных уравнений первого порядка:
y′ = z,
z′ = −2βz − ω02 y.
Поэтому функция D имеет вид |
|
|
y |
|
D(t, y) := |
−2βy |
1 |
. |
|
|
|
− ω 2 y |
|
|
|
|
1 |
0 |
0 |
233
Задаем граничные условия: хmin = 0, хmax = 5π.
Задача Коши для дифференциального уравнения второго порядка со- держит два начальных условия. Нам известно только одно. Начальное приближение для недостающего значения задаем в векторе v, который в нашем случае состоит только из одного элемента. Несмотря на это, индекс 0 должен быть обязательно указан, чтобы подчеркнуть векторный характер этой величины: v0 := 0.1.
На левой границе интервала нам известно значение y ( y(0) = 1)) и
задано начальное приближение для |
y′ ( y′ = 0) . Это значение записано в |
||||
v0 . Задаем вектор-функцию load. Ее нулевой элемент – |
начальное значение |
||||
для y0 , первый – для y1 . |
|
|
|
|
|
load(x |
,v) := 1 |
, |
score(x |
) := y |
− 0 , |
min |
|
|
max, y |
0 |
|
|
v0 |
|
|
|
|
S := sbval(v, xmin , xmax , D,load,score) , S = 12.511.
Теперь, когда нам стало известно недостающее начальное условие в за- даче Коши, можно воспользоваться, например, функцией rkfixed (рис. 8.26):
n :=500 i := 0..n |
y := |
|
1 |
|
Z := rkfixed( y, x |
, x ,500, D) . |
|
|
|
|
min |
max |
|
|
|
S0 |
|
|
|
|
10 |
|
|
|
Zi , 1 |
0 |
|
|
|
|
10 |
|
|
|
|
0 |
5 |
10 |
15 |
|
|
Zi , 0 |
|
|
|
|
Рис. 8.26 |
|
|
8.12.7. Решение обыкновенных дифференциальных уравнений в
Mathcad
Mathcad предлагает новый способ для решения обыкновенных диф- ференциальных уравнений, разрешенных относительно старшей производ-
234
ной. Для этих целей служит уже известный нам блок given совместно с функцией odesolve. Дифференциальное уравнение совместно с начальными или граничными условиями записывается в блоке Given. Производные можно обозначать как штрихами (Ctrl+F7), так и с помощью знака про-
изводной d . Приведем пример использования функции для решения за-
|
|
dx |
|
|
|
|
|
|
|
дачи Коши (рис. 8.27): |
|
|
|
|
|
|
|||
β := 0.1 |
|
1 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|||
Given |
|
|
|
|
|
|
|
||
′′ |
|
′ |
|
|
|
|
|
|
|
x (t) |
+ 2βx (t) + x(t) = 0 |
|
|
|
|
|
|
||
x(0) = 1 |
x( t) |
0 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|||
′ |
= 1 |
|
|
|
|
|
|
|
|
x (0) |
|
|
|
|
|
|
|
||
x := odesolve(t,5π,0.1) |
1 |
|
|
|
|
|
|||
|
|
|
5 |
|
10 |
15 |
20 |
||
t := 0,0.1..5π |
0 |
|
|||||||
|
|
|
t |
|
|
||||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
Рис. 8.27 |
|
|
||
|
У искомой функции явно указан аргумент, знак производной стоит |
||||||||
перед скобкой. Функция odesolve |
имеет три аргумента. Первый аргумент – |
||||||||
независимая переменная, вторая – |
граница интервала, на котором ищется |
||||||||
решение, |
последний аргумент – шаг, |
с которым ищется решение. Послед- |
|||||||
ний аргумент может быть опущен. |
|
|
|
|
|
||||
|
Следующий пример демонстрирует решение краевой задачи. Пока- |
||||||||
зан другой способ записи производных, используется odesolve функция с |
|||||||||
двумя аргументами (рис. 8.28): |
|
|
|
|
|
|
|||
Given |
|
20 |
|
|
|
|
|
||
d 2 x(t) + 2β d x(t) + x(t) = 0 |
|
|
|
|
|
|
|||
dt 2 |
|
dt |
0 |
|
|
|
|
|
|
x(0) = 1 |
x( t) |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|||
x(5π) = 0.1 |
|
|
|
|
|
|
|||
x := odesolve(t,5π) |
20 |
|
|
|
|
|
|||
t := 0,0.1..5π |
0 |
5 |
10 |
15 |
20 |
||||
|
|||||||||
|
|
|
t |
|
|
||||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
Рис. 8.28 |
|
|
235
8.13. Решение уравнений в частных производных
Одним из методов решения дифференциальных уравнений в частных производных является метод сеток. Идея метода заключается в следую- щем. Для простоты, ограничимся случаем только функции двух перемен- ных, и будем полагать, что решение уравнения ищется на квадратной об- ласти единичного размера. Разобьем область сеткой. Шаг сетки по оси x и по оси y, вообще говоря, может быть разный. По определению частная производная равна
|
∂u(x, y) |
= lim |
u(x + x, y) − u(x) |
≈ |
u(x + x, y) − u(x) |
. |
||||
|
∂x |
|
|
|||||||
|
x →0 |
|
x |
|
|
|
|
x |
||
Если рассматривать функцию только в узлах сетки, то частную про- |
||||||||||
изводную можно записать в форме |
|
|
|
|
|
|
|
|||
|
|
|
∂u(x, y) |
≈ |
ui +1, j |
− ui, j |
, |
|
||
|
|
|
∂x |
|
|
|
|
|
||
|
|
|
|
h |
|
|||||
|
|
|
|
|
|
|
где узел (i, j) соответствует точке (x, y) . Полученное выражение называ-
ется правой конечной разностью. Название связано с тем, что для вычис- ления производной в точке используются значения функций в этой точке и точке, лежащей правее. Очевидно, что сходное выражение можно было бы получить, используя точку, лежащую слева
∂u(x, y) |
≈ |
ui, j |
− ui −1, j |
. |
∂x |
|
|
||
|
h |
|||
|
|
|
Такое выражение называется левой конечной разностью. Можно по- лучить центральную конечную разность, найдя среднее этих выражений.
Теперь получим выражения для вторых производных
∂2u(x, y) |
≈ |
ui +1, j − 2ui, j |
+ ui −1, j |
. |
∂x2 |
h2 |
|
||
|
|
|
В данном случае для нахождения производной использованы сим- метричные точки. Однако, очевидно, можно было бы использовать точки с несимметричным расположением.
8.13.1. Уравнения гиперболического типа
В качестве примера рассмотрим решение волнового уравнения (уравнения гиперболического типа).
∂2U |
= |
1 |
∂2U . |
∂ x2 |
|
||
|
v2 ∂ t2 |
236
Уравнение будем решать методом сеток. Запишем уравнение в ко- нечных разностях
ui +1, j − 2ui, j + ui −1, j |
= |
1 |
|
ui, j +1 − 2ui, j + ui, j |
. |
h2 |
v2 |
|
|||
|
|
τ2 |
Полученное уравнение позволяет выразить значение функции u в момент времени j + 1 через значения функции в предыдущие моменты времени
u |
= v2 |
|
τ 2 |
(u |
|
− 2u |
+ u |
|
) + 2u |
− u |
. |
|
|
|
|
j |
j |
||||||||
|
||||||||||||
i, j +1 |
|
|
i +1, |
i, j |
i −1, |
i, j |
i, j −1 |
|
||||
|
|
h |
|
|
|
|
|
|
|
|
Такая разностная схема называется явной, т.к. искомая величина по- лучается в явном виде. Она устойчива, если τ ≤ hv .
Зададим начальные условия: смещение струны U в начальный и по- следующий моменты времени описывается синусоидальной функцией:
n := 20 j := 0..n |
i := 0..100 |
||||
|
|
|
i |
|
|
Ui,0 |
:= sin |
π |
|
|
Ui,1 := Ui,0 . |
|
|||||
|
|
|
50 |
|
Совпадение смещений при j = 0 и j = 1 соответствует нулевой на- чальной скорости.
Зададим граничные условия: на концах струны смещение равно 0 в любой момент времени: U0, j := 0 , U100, j := 0 .
Будем полагать коэффициент a := 1, k := 0.02, i := 1..99, j := 1..n – 1.
Записываем уравнение в конечных разностях, разрешенное относи- тельно Ui, j +1
Ui, j +1 := a2 k (Ui +1, j − 2Ui, j + Ui −1, j ) + 2Ui, j − Ui, j −1.
Представляем результат на графике (рис. 8.29)
8.13.2. Уравнения параболического типа
Еще один пример использования конечных разностей – уравнение диффузии
∂u = D ∂2u . ∂t ∂x2
Это уравнение параболического типа. Явная разностная схема для этого уравнения имеет вид
u |
= D |
τ |
(u |
− 2u |
+ u |
) + u |
. |
(8.1) |
|
||||||||
i, j +1 |
|
h2 |
i +1, j |
i, j |
i −1, j |
i, j |
|
|
|
|
|
|
|
|
|
|
237
|
Ul , 0 |
|
|
|
|
|
Ul , 10 |
|
|
|
|
|
Ul , 15 |
|
|
|
|
|
Ul , 20 |
|
|
|
|
|
|
l |
|
|
|
|
|
Рис. 8.29 |
|
|
|
Эта разностная схема устойчива, если τ ≤ h2 |
. Для краткости в даль- |
||||
|
|
|
2D |
|
|
нейшем будем обозначать весь множитель, стоящий перед скобкой, как κ. |
|||||
Задаем коэффициент |
κ := 0.15 и диапазон изменения пространст- |
||||
венной и временной координат: t := 0..29, |
x := 1..49. |
|
|||
Задаем начальные и |
граничные |
условия: |
f0, x := 0 , |
f0,0 := 0 , |
|
f0,50 := 0 , |
f0,25 := 1. |
|
|
|
|
Уравнение в конечных разностях имеет вид |
|
|
ft +1, x := ft, x + κ( ft, x −1 − 2 ft, x + ft, x +1 ) .
Представляем результаты на графике (рис. 8.30) (для большей на- глядности изображена только центральная часть) x := 15…35.
1 |
|
|
|
|
f0 , x |
|
|
|
|
f4 , x |
|
|
|
|
f9 , x |
|
|
|
|
0.5 |
|
|
|
|
f19 , x |
|
|
|
|
f29 , x |
|
|
|
|
0 |
20 |
25 |
30 |
35 |
15 |
||||
|
|
x |
|
|
|
|
Рис. 8.30 |
|
|
|
|
238 |
|
|