- •Оглавление
- •Введение
- •Краткий обзор системы
- •Знакомство с интерфейсом Scilab
- •Функции, определяемые пользователем и процедуры
- •Циклы
- •Погрешность результата численного решения задачи
- •Приближенные вычисления определенных интегралов
- •Методы прямоугольников
- •Метод трапеций
- •Метод Симпсона
- •Квадратуры Гаусса
- •Методы Монте-Карло
- •Вычисление определенных интегралов в системе Scilab
- •Решение систем линейных алгебраических уравнений
- •Метод Гаусса
- •Формула Крамера
- •Метод простых итераций
- •Метод Зейделя
- •Метод отражений
- •Метод LU-разложений
- •Решение нелинейных алгебраических уравнений
- •Метод половинного деления
- •Метод секущих
- •Метод секущих (с изменяемым углом)
- •Метод Ньютона (касательных)
- •Метод Бернулли
- •Аппроксимация и интерполирование функций
- •Интерполяционный многочлен Лагранжа
- •Интерполяционная формула Ньютона
- •Интерполяционные формулы Гаусса
- •Линейная аппроксимация по методу наименьших квадратов
- •Кусочно-кубические сплайны
- •Анимация на плоскости
- •Анимация в пространстве
- •Метод Рунге-Кутта
- •Метод Эйлера
- •Метод Прогонки
- •Метод Пикара
- •Возможности Scilab для решения ОДУ
- •Список Литературы
99
Рис. 2. Результат работы Листинга_7.2
3) Метод прогонки
Данный метод применяется для приближенного решения краевых задач. Рассмотрим его на примере решения следующей краевой задачи.
A(x) y"+B(x) y'+C(x) y = f (x), x [a,b],
|
|
|
|
|
|
|
|
|
|
|
|
|
y(a) =α, y(b) = β. |
|
|
|
|
|
|||||
Подставляя y'= |
yi+1 |
− yi−1 |
|
|
для точности h2 |
и y'= |
yi+1 − yi−1 |
|
для точности h , а |
||||||||||||||
|
|||||||||||||||||||||||
2h |
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
h |
|
|
|
|||
также y"= |
yi+1 − 2yi |
+ yi−1 |
|
, получим разностное уравнение: |
|
||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
h2 |
|
|
|
|
ai yi−1 + bi yi + ci yi+1 = di , |
|
|
|
|||||||||
где: |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
A(xi ) |
|
B(xi ) |
|
|
|
|
|
|
2A(xi ) |
|
A(xi ) |
|
|
B(xi ) |
|
|
|
|
|
||||
ai = |
− |
, bi = C(xi ) − |
, ci = |
|
+ |
, di = |
fi - |
для точности h2 и |
|||||||||||||||
h2 |
|
|
h2 |
h2 |
2h |
||||||||||||||||||
|
|
|
2h |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
ai = |
A(xi ) |
, bi = C(xi ) − |
2A(xi ) |
− |
B(xi ) |
, ci = |
A(xi ) |
|
+ |
B(xi ) |
, di = |
fi - для точности h . |
|||||||||||
h2 |
|
h |
h2 |
h |
|||||||||||||||||||
|
|
|
|
|
|
h2 |
|
|
|
|
|
|
|
|
|
|
|
||||||
100
Решение данной краевой задачи запишется в виде
|
|
|
|
|
|
|
yi+1 = Li yi + Ki , |
||
где Li = |
|
−ci |
, Ki = |
di |
− ai Ki−1 |
- прогоночные коэффициенты. |
|||
a L |
+b |
a L |
+b |
||||||
|
|
|
|||||||
|
i |
i−1 |
i |
|
i |
i−1 |
i |
|
|
Итак, вычисления по методу прогонки проводятся в два этапа:
-осуществляется прямой ход прогонки, по которому находятся
прогоночные коэффициенты Ki и Li , с учетом того, что L0 = 0, K0 = α ;
- осуществляется обратная прогонка, в которой вычисляются значения yi .
Пример 7. 1. Решить краевую задачу методом прогонки.
(0.34x2 +1.5)0.4 y" + [cos(0.7 + x) +1.3] y' − ( 2x +1.1) y = lg(2x) −0.7 cos x2 ,
y(0.5) = −0.4, y(1.5) = 0.9.
Отрезок [0.5; 1.5] разобьем на 15 равных частей. Вычисления удобно располагать в виде следующей таблицы:
xi |
ai |
bi |
ci |
fi |
li |
ki |
yi |
0,500000 |
258,049106 |
-542,383579 |
282,984473 |
-0,678239 |
0,000000 |
-0,400000 |
-0,400000 |
0,566667 |
260,163923 |
-545,703123 |
284,155867 |
-0,539057 |
0,520715 |
-0,189712 |
-0,273561 |
0,633333 |
262,476497 |
-549,398225 |
285,505061 |
-0,408051 |
0,691760 |
-0,119661 |
-0,161027 |
0,700000 |
264,979051 |
-553,457610 |
287,028558 |
-0,281161 |
0,775427 |
-0,084901 |
-0,059798 |
0,766667 |
267,663433 |
-557,869323 |
288,722557 |
-0,155078 |
0,824177 |
-0,064427 |
0,032373 |
0,833333 |
270,521194 |
-562,620868 |
290,583007 |
-0,027061 |
0,855503 |
-0,051232 |
0,117450 |
0,900000 |
273,543663 |
-567,699333 |
292,605670 |
0,105138 |
0,876900 |
-0,042314 |
0,197174 |
0,966667 |
276,722022 |
-573,091523 |
294,786168 |
0,243260 |
0,892118 |
-0,036172 |
0,273108 |
1,033333 |
280,047372 |
-578,784076 |
297,120037 |
0,388486 |
0,903241 |
-0,031976 |
0,346680 |
1,100000 |
283,510799 |
-584,763568 |
299,602768 |
0,541344 |
0,911520 |
-0,029228 |
0,419219 |
1,166667 |
287,103434 |
-591,016613 |
302,229846 |
0,701591 |
0,917750 |
-0,027612 |
0,491978 |
1,233333 |
290,816499 |
-597,529953 |
304,996787 |
0,868102 |
0,922463 |
-0,026912 |
0,566156 |
1,300000 |
294,641365 |
-604,290527 |
307,899162 |
1,038757 |
0,926027 |
-0,026973 |
0,642919 |
1,366667 |
298,569583 |
-611,285539 |
310,932623 |
1,210366 |
0,928706 |
-0,027669 |
0,723404 |
1,433333 |
302,592927 |
-618,502511 |
314,092917 |
1,378658 |
0,930693 |
-0,028893 |
0,808731 |
1,500000 |
306,703422 |
-625,929327 |
317,375905 |
1,538334 |
0,932136 |
-0,030545 |
0,900000 |
Приведем реализацию данного метода в системе Scilab.
Листинг 7.3.
//Метод прогонки |
|
function [A]=A(x) |
|
A = (0.34*x^2+1.5)^0.4; |
//задаем коэффициенты A, B, C нашего ОДУ |
endfunction |
|
function [B]=B(x) |
|
B = cos(0.7+x)+1.3; |
//задаем коэффициенты A, B, C нашего ОДУ |
endfunction |
|
function [C]=C(x) |
|
C = -x/2-1.1; |
// задаем коэффициенты A, B, C нашего ОДУ |
101
endfunction function [f]=f(x)
f = log(2*x)-0.7*cos(x*x); //задаем правую часть – функцию f(x) endfunction
left=0.5; |
//задаем отрезок [a;b] |
right=1.5; |
//задаем отрезок [a;b] |
n=15; |
|
h = (right - left)/n; |
|
y(1) = -0.4; |
|
y(n+1) = 0.9; |
|
l(1) = 0; |
|
k(1) = -0.4; |
|
x(1) = left; |
|
x(n+1) = right; |
|
for i = 1: n
x(i+1) = left + i*h;
c(i+1) = A(x(i+1))/(h*h) + B(x(i+1))/(2*h); b(i+1) = C(x(i+1)) - 2*A(x(i+1))/(h*h); a(i+1) = A(x(i+1))/(h*h) - B(x(i+1))/(2*h); d(i+1) = f(x(i+1));
l(i+1) = -c(i+1)/(a(i+1)*l(i)+b(i+1)); k(i+1)=(d(i+1)-a(i+1)*k(i))/(a(i+1)*l(i)+b(i+1));
end
for i = n:-1:1
y(i) = y(i+1)*l(i) + k(i);
end
for i=1:n+1 plot2d(x,y); end
//результат работы данной программы представляется в виде графика (смотри //ниже)
102
Рис. 3. Результат работы Листинга_7.3
4) Метод Пикара
Данный метод является представителем класса приближенных методов решения. Идея метода чрезвычайно проста и сводится к процедуре последовательных приближений для решения интегрального уравнения, к которому приводится исходное дифференциальное уравнение.
Пусть поставлена задача Коши:
′ |
≤ x ≤ xi , |
|
v (x) =ϕ(x,v(x)), x0 |
|
|
v(x0 ) = v0 . |
|
(1) |
Проинтегрируем выписанное уравнение |
|
|
v( x) = v0 + ∫x ϕ(t, v(t ))dt . |
(2) |
|
x0 |
|
|
Процедура последовательных приближений метода Пикара реализуется согласно следующей схеме
