Программа для решения системы нелинейных уравнений методом последовательной итерации обратной матрицы Якоби

Теоретическая часть.

В данной расчетно-графической работе (далее РГР) требуется составить программу для решения системы нелинейных уравнений методом последовательной итерации обратной матрицы Якоби.

Суть метода в следующем:

Пусть требуется решить систему нелинейных алгебраических или трансцендентных уравнений:

F1(X1,X2,…, Xn)=0; i=1,2,…, n,

с начальным приближением к решению:

X0=(x10,x20,…xn0).

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

В начале итерационного процесса матрица H полагается равной единичной:

H0=E.

Затем для k=0,1,…

1. Вычисляется

Pk = - Hk * F (Xk);

2. Находятся

Xk+1 = Xk + tk*Pk.

Первоначально tk=1. Затем путем последовательного деления tk на 2 находим такое tk, чтобы выполнялось неравенство:

¦ F (Xk+1) ¦ < ¦ F (Xk) ¦

Итерационный процесс заканчивается при выполнении условия:

¦ F (Xk+1) ¦ < E,

где E — заданная точность.

3. Определяется

Yk= F (Xk+1) — F (Xk)

4. Находится новое приближение матрицы:

Hk+1 = Hk — (Hk*Yk — Pk*tk) * (Pk)T * (Hk)T / ((Pk)T * Hk*Yk)

и снова повторяется вычислительный процесс с пункта 1.

Порядок работы с программой

Данная РГР представлена в виде 3 исполняемых модулей:

OBRJ.M, OBRF. M и FUN1.M. Решением поставленной задачи занимается модуль OBRF. M, а два остальных являются вспомогательными:

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

В головной программе задаются начальные приближения, в виде вектора X0 а также запрашивается допустимая ошибка. Затем вызывается модуль OBRJ. M, который и реализует решение данной системы уравнений методом последовательной итерации обратной матрицы Якоби. Внутри себя данный модуль по мере необходимости вызывает функцию FUN1. M, которую пишет сам пользователь.

Описание работы программ

В связи с тем, что данная РГР состоит из 3 частей, то опишем их по одиночке (распечатки данных модулей приведены в приложении):

1. OBRJ. M

Головной модуль

Входные данные: отсутствуют.

Выходные данные: отсутствуют.

Язык реализации: PC MathLab.

Операционная система: MS-DOS 3.30 or Higher.

Пояснения к тексту модуля:

«Стандартный» головной модуль. В данном модуле задаются начальные значения в виде вектора, например:

X0=[0.4 0.9]

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

Затем происходит вызов модуля OBRF. M с полученными входными данными. Формат вызова данного модуля описан далее (в описании самого модуля).

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

2. OBRF. M

Вычислительный модуль

Входные данные:

FunFcn — имя функции, написанной пользователем, которая вычисляет левые части для требуемой системы в определенной точке.

X0 — вектор-строка, определяющий начальные значения (начальное приближение).

E — допустимая ошибка.

Выходные данные:

Tout — Столбец итераций («Время»)

Xout — Столбцы значений вычисленных на каждом этапе для каждой итерации

DXout — Столбцы погрешностей по каждой компоненте, вычисленные на определенном этапе

Язык реализации: PC MathLab

Операционная система: MS-DOS 3.30 or Higher

Пояснения к тексту модуля:

Данный «вычислительный» модуль реализует метод последовательной итерации обратной матрицы Якоби. Общая структура вызова данного модуля:

[Tout, Xout, DXout]=OBRF (FunFcn, X0, E);

Значения каждого из параметров были описаны выше.

На начальном этапе в данном модуле инициализируются внутренние переменные (например, задается единичная матрица H, в соответствии с размерностью X0), формируются (на основе начальных значений) первичные элементы матриц Tout, Xout, DXout.

Затем данная функция, как и многие другие в численных методах, имеет вид:

While ОШИБКА > ДОПУСТИМОЙ ОШИБКИ

Оператор1

Оператор2

ОператорN

End

Внутри данного цикла происходят вычисления внутренней переменной Pk на каждом шаге K и, вычисляется начальное приближение Xk+1. Первоначально t=1 (Не номер итерации, а внутренний параметр!). Затем, в очередном цикле While… End в случае, если ¦F (Xk+1)¦ < ¦F (Xk)¦ t=t/2 и снова вычисляется Xk+1. Когда очередное Xk+1 найдено, вычисляется Yk, а затем и новое приближение матрицы H. Итерационный процесс заканчивается, если ¦F (Xk+1)¦ < E. Если данное условие не выполняется — итерационный процесс продолжается заново.