3. Методы не требуют вычисления производных функций fi (X,t), i=1,n, а только самой функции в нескольких точкахна шаге hm .
Методом Рунге-Кутта 1-го порядка является явный метод Эйлера:
Х/ =F(Х, t) ;
Xm+1 = Xm + hm·F (Xm, tm)
Ошибка аппроксимации εα ~ h2т. Область абсолютной устойчивости – круг радиусом, равным 1 и центром в точке (0, -1) – см. рис. 1.3, кривая 1; область относительной устойчивости – вся правая полуплоскость.
Рассмотрим методы Рунге-Кутта 2-го и 4-го порядка, которые также используются довольно часто.
Алгоритм метода Рунге-Кутта 2-го порядка состоит в следующем:
Xm+1 = Xm + (hm/2)·(K1 + K2), где
K1= F(Xm, tm), K2= F(Xm+ hm·K1, tm + hm).
Ошибка аппроксимации εα=kh3т. Область абсолютной устойчивости показана на рис. 1.3 (кривая 2). Область относительной устойчивости - вся правая полуплоскость.
Xm+1 = Xm + (hm/6) · (K1 + 2K2 + 2K3 + K4), где
K1= F(Xm, tm), K2= F(Xm + (hm/2)·K1, tm + hm/2);
K3= F(Xm + (hm/2) ·K2, tm + hm/2);
K4= F(Xm + h·K3, tm + hm);
Ошибка аппроксимации εα=kh5т. Область абсолютной устойчивости показана на рис. 1.3 (кривая 3). Область относительной устойчивости - вся правая полуплоскость.
Рис. 1.3
Итерационная формула дискретного метода Ньютона имеет вид
Xm+1=Xm – J-1(Xm) ·F(Xm) ,
где J (Хm) = F/X/ X=Xm– матрица Якоби.
Характеристики метода.
1. Сходимость.
Условие сходимости метода
ρ(G’Х(Х))= ρ(I – (J-1(Х) ·F(Х))/Х)<1.
Имеем ρ(I – J-1(Х*) · F/Х(Х*))=0; это означает, что метод обладает локальной сходимостью, т.е. сходится только вблизи точного решения. Поэтому при реализации метода дифференцирования по параметру вначале нужно получить приближенное значение. Чем ближе к Х*, тем быстрее сходится метод.
2. Выбор начального приближения Х0.
Поскольку метод сходится только вблизи точного решения, значит, начальное приближение также нужно выбирать вблизи Х*. Насколько близко, зависит от скорости изменения функции F(Х) вблизи Х*: чем выше скорость, тем меньше область, где соблюдается условие сходимости.
3. Скорость сходимости.
Она определяется соотношением
||Em+1||=Cm||Em||1+ Р,
0<р<1. При Х→Х* величина р→1. Это значит, что вблизи точного решения скорость сходимости близка к квадратичной.
4. Критерий окончания итераций.
Таким критерием может быть любое соотношение из описанных выше в обобщенном алгоритме решения нелинейных САУ.
1.5 Дискретный метод Ньютона
Трудности практического применения метода Ньютона состоят в следующем:
1.Необходимость определения матрицы J = F/X.
При этом существует два подхода:
- аналитический способ. Здесь метод Ньютона особенно эффективен. Однако точные формулы могут быть слишком громоздкими, что повышает вероятность ошибки. Кроме того функцииF(X)могут быть заданы таблично;
- конечно-разностная аппроксимация. При этом используется формула:
δfi/δxj = (fi(x1, …, xj + ∆xj, …, xn) - fi(x1, …, xj - ∆xj, …, xn)) / 2δxj .
В этом случае имеем дискретный метод Ньютона, который уже не обладает квадратичной сходимостью. Скорость сходимости можно увеличить, уменьшая ∆xj по мере приближения к X*.
2. Вычисление матрицы J-1 на каждом шаге требует значительных вычислительных затрат. Поэтому часто вместо этого решают систему линейных АУ, которая формируется следующим образом. Очевидно, что ∆Xm = Xm+1 - Xm. Тогда после алгебраических преобразований алгоритм Xm+1=Xm – J-1(Xm) ·F(Xm) примет вид:
J(Xm) · ∆Xm = -F(Xm).
На каждом m-м шаге матрицыJ(Xm) и F(Xm) известны. Необходимо найти ∆Xm, как решение системы линейных АУ J(Xm) · ∆Xm = -F(Xm). Тогда
Xm+1 = Xm + ∆Xm.
Решение системы J(Xm) · ∆Xm = -F(Xm) – наиболее трудоемкий этап, который определяет вычислительную эффективность каждой итерации.
2. ОПИСАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Наименования файлов, из которых состоит пакет: main.m, rk1.m, rk2, rk4.m, funf.m, dmn.m, dif.m .
Головная программа – файл main.m, остальные – внешние функции данной программы.
Программное обеспечение: ОС класса Windows.
Язык, на котором написана программа: MatLab (Version 5.1).
Программа разработана для решения нелинейных систем алгебраических уравнений методом дифференцирования по параметру. Решение проводится с использованием трех различных методов Рунге – Кутта первого, второго и четвертого порядка. Решение уточняется с помощью дискретного метода Ньютона.
Файл описания системы - funf.m. С помощью файла dif.m формируется система ОДУ, затем система интегрируется с помощью явных методов Рунге-Кутта (rk1.m, rk2, rk4.m), и полученное решение уточняется дискретным методом Ньютона (dmn.m). В файле main.m можно изменять шаг интегрирования, начальное решение системы, допустимую ошибку при уточнении, начальный и конечный моменты времени…
Головная программа
В головной программе задаются начальные значения необходимых параметров, а также производится вызов основных функций, необходимых для реализации метода дифференцирования по параметру. В течение одного цикла работы программы вызываются последовательно функции rk1.m, rk2.m, rk4.m, вычисляющие приближенные значения по методам Рунге – Кутта 1-го, 2-го и 4-го порядков. После каждого из них производится вызов функции dmn.m, вычисляющей уточненное значение по дискретному методу Ньютона, строятся графики и выводятся значения полученных решений системы и ошибок интегрирования; значения уточненных решений системы и ошибок интегрирования, полученных в процессе итераций. В конце работы каждого цикла выводится число шагов, за которое было получено приближенное решение и число итераций, за которое было получено уточненное решение.
subplot(2,1,1);
grid;
title(sprintf('МетодРунге - Кутта 1го порядка'));
ylabel('y(1)'); xlabel('t');
subplot(2,1,2);
plot(tout,yout(:,2));
grid;
ylabel('y(2)'); xlabel('t');
pause;
subplot(111);
title(sprintf(‘Уточнение решения системы’));
ylabel('x(m)'); xlabel('m');
pause;
plot(m,dx(:,1),m,dx(:,2));
ylabel('dx(m)'); xlabel('m');
pause;
out=[m,x,dx]
disp('Метод Рунге - Кутта 2го порядка');pause;
[tout,yout,x]=rk2('dif',t0,tfinal,y0,h,trace);
subplot(2,1,1);
grid;
title(sprintf('МетодРунге-Кутта 2гопорядка'));
ylabel('y(1)'); xlabel('t');
subplot(2,1,2);
plot(tout,yout(:,2));
grid;
ylabel('y(2)'); xlabel('t');
pause;
x0=x';
dx=[0.01;0.01];
[x,dx,m] = dmn('funf',x0,dx,Ed);
subplot(111);
title(sprintf(‘Уточнение решения системы’));
ylabel('x(m)'); xlabel('m');
pause;
plot(m,dx(:,1),m,dx(:,2));
ylabel('dx(m)'); xlabel('m');
pause;
out=[m,x,dx]
disp('Метод Рунге - Кутта 4го порядка');pause;
[tout,yout,x]=rk4('dif',t0,tfinal,y0,h,trace);
subplot(2,1,1);
grid;
title(sprintf('МетодРунге-Кутта 4гопорядка'));
ylabel('y(1)'); xlabel('t');
subplot(2,1,2);
plot(tout,yout(:,2));
grid;
ylabel('y(2)'); xlabel('t');
pause;
x0=x';
dx=[0.01;0.01];
[x,dx,m] = dmn('funf',x0,dx,Ed);
subplot(111);
title(sprintf(‘Уточнение решения системы’));
ylabel('x(m)'); xlabel('m');
pause;
plot(m,dx(:,1),m,dx(:,2));
ylabel('dx(m)'); xlabel('m');
pause;
out=[m,x,dx]
Данные функции являются программной реализацией методов Рунге-Кутта 1-го, 2-го и 4-го порядка. Здесь производится расчет приближенных значений при интегрировании системы с t = [0; 1]. Входные параметры функции – правые части системы, начальный и конечный моменты времени, начальное значение вектора Y, шаг и признак трассировки. Выходные параметры – вектор моментов времени tout, матрица yout={nx 2}, где n – число шагов метода( по строкам матрицы располагаются вектора Ym, m = 0,n), вектор х, содержащий значения, полученные на последнем шаге работы функции и предназначенный для того, чтобы затем можно было передать значения данного вектора в подпрограмму, реализующую дискретный метод Ньютона.