2ВВЕДЕНИЕ В экономике очень часто используется модель, называемая "черный ящик", то есть система у которой известны входы и выходы, а то, что происходит внутри - неизвестно. Законы по которым происходят изменения выходных сигналов в зависимости от входных могут быть различными, в том числе это могут быть и дифференциальные законы. Тогда встает проблема решения систем дифференциальных уравнений, которые в зависимости от своей структуры могут быть решены различными методами. Точное решение получить очень часто не удается, поэтому мы рассмотрим численные методы решения таких систем. Далее мы представим две группы методов: явные и неявные. Для решения систем ОДУ неявными методами придется решать системы нелинейных уравнений, поэтому придется ввести в рассмотрение группу методов решения систем нелинейных уравнений, которые в свою очередь будут представлены двумя методами. Далее следуют теоретические аспекты описанных методов, а затем будут представлены описания программ. Сами программы, а также их графики приведены в приложении. Также стоит отметить, что в принципе все численные методы так или иначе сводятся к матричной алгебре, а в экономических задачах очень часто матрицы имеют слабую заполненность и большие размеры и поэтому неэффективно работать с полными матрицами. Одна из технологий, позволяющая разрешить данную проблему - технология разреженных матриц. В связи с этим, мы рассмотрим данную технологию и операции умножения и транспонирования над такими матрицами. Таким образом мы рассмотрим весь спектр лабораторных работ. Описания всех программ приводятся после теоретической части. Все тексты программ и распечатки графиков приведены в приложении. 2ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 1. ОПИСАНИЕ МЕТОДОВ ИНТЕГРИРОВАНИЯ СИСТЕМ ОДУ И ИХ ХАРАКТЕРИСТИК ЯВНЫЙ МЕТОД ЭЙЛЕРА И ЕГО ХАРАКТЕРИСТИКИ Алгоритм этого метода определяется формулой: x 5m+1 0 = x 5m 0 + h 4m 0*F(x 5m 0, t 4m 0) 4, 0 которая получается путём аппроксимации ряда Тейлора до членов первого порядка производной x'(t 4m 0),т.к. порядок точности равен 1 (s=1). Для аналитического исследования свойств метода Эйлера линеаризуется исходная система ОДУ x' = F(x, t) в точке (x 5m 0,t 4m 0): x' = A*x, (2) где матрица А зависит от точки линеаризации (x 5m 0,t 4m 0). Входной сигнал при линеаризации является неизвестной функцией времени и при фиксированном t 4m 0 на шаге h 4m 0 может считаться константой. Ввиду того ,что для линейной системы свойство устойчивости зависит лишь от А, то входной сигнал в системе (2) не показан. Элементы матрицы А меняются с изменением точки линеаризации,т.е. с изменением m. Характеристики метода: 1. _Численная устойчивость .. Приведя матрицу А к диагональной форме : А = Р* 7l 0*Р 5-1 0 и перейдя к новым переменным y = P 5-1 0*x , система (2) примет вид : y' = 7l 0*y (3) Тогда метод Эйлера для уравнения (3) будет иметь вид : y 5m+1 0 = y 5m 0 + h* 7l 0 * y 5m 0, (4) где величина h* 7l 0 изменяется от шага к шагу. В этом случае характеристическое уравнение для дискретной системы (4) будет иметь вид : (1) 1 + h* 7l 0 - r = 0. А корень характеристического уравнения равен: r = 1+ h* 7l 0, где 7l 0 = 7 a 0 _+ . 7 b 0 . _Случай 1 .. Исходная система (3) является асимптотически устойчивой , т.е. нулевое состояние равновесия системы асимптотически устойчиво и 7 a 0 < 0. Областью абсолютной устойчивости метода интегрирования системы (4) будет круг радиусом , равным 1 , и с центром в точке (0, -1). Таким образом , шаг h должен на каждом интервале интегрирования подбираться таким образом, чтобы при этом не покидать область А . Но в таком случае должно выполняться требование : h < 2* 7t 0, (5) где 7t 0=1/ 72a2 0 - постоянная времени системы (3) . Она определяет скорость затухания переходных процессов в ней. А время переходного процесса T 4пп 0 = 3* 7t 0 , где 7t 0 = 72a2 5-1 0. Если иметь ввиду, что система (3) n-го порядка, то T 4пп 0 > 3* 7t 4max 0, где 7t 4max 0 = 72a 4min 72 5-1 7 0; 7a 4min 0= min 7a 4i 0 . Из всех 7a 4i 0 (i=[1;n]) выбирается максимальное значение : max 72a 4i 72 0= 7a 4max 0 и тогда можно вычислить : 7t 4min 0= 1/ 7a 4max 0, а шаг должен выбираться следующим образом : h < 2/ 7a 4max 0 или h < 2* 7t 4min 0. _Случай 2 .. Нулевое состояние равновесия системы (2) неустойчиво, т.е. 7a 0 > 0 . Т.е. система тоже неустойчива , т.е. 72 0r 72 0>1. Поэтому областью относительной устойчивости явного метода Эйлера является вся правая полуплоскость . Выполняется требование : 72 0 1+h* 7l 0 72 0< 7 2 0e 5hl 7 2 0 (6) 2. _Точность метода .. Так как формула интегрирования (1) аппроксимирует ряд Тейлора для функции x(t 4m 0+1) до линейного по h члена включительно. Существует такое значение t в интервале [t 4m 0 , t 4m+1 0], при котором Е 4i 5am 0 =1/2! * h 4m 52 0*x 4i 0''(t), где i=[1;n]. 3. _Выбор шага интегрирования .. Должны соблюдаться условия абсолютной (5) или относительной (6) устойчивости в зависимости от характера интегрируемой системы. Для уравнения первого порядка шаг должен быть : h < 2* 7t 0 . Для уравнений n-ого порядка : h 4i 0 <= 2* 7t 4i 0. А окончательно шаг выбирают по условиям устойчивости : h < 2* 7t 4min 0 , 7t 4min 0 = min 7t 4i Вначале задаётся допустимая ошибка аппроксимации , а в процессе интегрирования шаг подбирается следующим образом : 1) по формуле (1) определяется очередное значение x 5m+1 0; 2) определяется dx 4i 5m 0 = x 4i 5m+1 0 - x 4i 5m 0 ; 3) условие соблюдения точности имеет вид : h 4i 5m 0 <= E 4i 5aдоп 7/ 0[ 72 0f 4i 0(x 5m 0,t 4m 0) 72 0 + E 4i 5aдоп 7/ 0h 4max 0] (7) 4) окончательно на m-м интервале времени выбирается в виде: h 4m 0 = min h 4i 5m 0. ЯВНЫЕ МЕТОДЫ РУНГЕ-КУТТА Метод Эйлера является методом Рунге-Кутта 1-го порядка . Методы Рунге-Кутта 2-го и 4-го порядка являются одношаговыми , согласуются с рядом Тейлора до порядка точности s , который равен порядку метода . Эти методы не требуют вычисления производных функций , а только самой функции в нескольких точках на шаге h 4m 0. Алгоритм метода Рунге-Кутта 2-го порядка состоит в следующем : x 5m+1 0 = x 5m 0 + h 4m 0/2 (k 41 0+k 42 0), где k 41 0=f(x 5m 0,t 4m 0) ; k 42 0=f(x 5m 0+h 4m 0*k 41 0,t 4m 0+h 4m 0). Ошибка аппроксимации Е 5a 0 = k*h 4m 53 0 . Алгоритм метода Рунге-Кутта 4-го порядка x 5m+1 0=x 5m 0+h 4m 0/6(k 41 0+2k 42 0+2k 43 0+k 44 0), где k 41 0=f(x 5m 0,t 4m 0); k 42 0=f(x 5m 0+h 4m 0/2*k 41 0,t 4m 0+h 4m 0/2); k 43 0=f(x 5m 0+h 4m 0/2*k 42 0,t 4m 0+h 4m 0/2); k 44 0=f(x 5m 0+h 4m 0*k 43 0,t 4m 0+h 4m 0). Ошибка аппроксимации Е 5a 0 = k*h 4m 55 0. НЕЯВНЫЙ МЕТОД ЭЙЛЕРА И ЕГО ХАРАКТЕРИСТИКИ Неявный метод Эйлера используется для интегрирования " жестких " систем. "Жесткие" системы это такие системы, в которых 7 0 ( 7l 4max 0) и ( 7l 4min 0) сильно отключаются друг от друга , то в решениях системы x' = A*x (1) будут присутствовать экспоненты, сильно отличаются друг от друга по скорости затухания . Шаг интегрирования для таких систем должен выбираться по условиям устойчивости из неравенства h <= 2* 7t 4min , 0 (2) где 7t 0=1/ 72a2 0 - постоянная времени системы y' = 7l 0*y . Она определяет скорость затухания переходных процессов в ней . Неравенство (2) должно выполняться на всем участке решения , что соответственно требует значительных затрат машинного времени. Алгоритм этого метода определяется формулой: x 5m+1 0 = x 5m 0 + h 4m 0*F(x 5m+1 0, t 4m+1 0) 4 Если h 4m 0 мал, то x 5m 0 и х 5m+1 0 близки друг к другу. В качестве начального приближения берется точка x 5m 0 , а следовательно , между x 5m 0 и x 5m+1 0 будет существовать итерационный процесс. Для аналитического исследования свойств метода Эйлера линеаризуется исходная система ОДУ x' = F(x, t) в точке (x 5m 0,t 4m 0): x' = A*x, где матрица А зависит от точки линеаризации (x 5m 0,t 4m 0). Входной сигнал при линеаризации является неизвестной функцией времени и при фиксированном t 4m 0 на шаге h 4m 0 может считаться константой. Ввиду того ,что для линейной системы свойство устойчивости зависит лишь от А, то входной сигнал в системе (1) не показан. Элементы матрицы А меняются с изменением точки линеаризации,т.е. с изменением m. Характеристики метода: 1. _Численная устойчивость .. Приведя матрицу А к диагональной форме : А = Р* 7l 0*Р 5-1 0 и перейдя к новым переменным y = P 5-1 0*x , система (3) примет вид : y' = 7l 0*y (4) Тогда метод Эйлера для уравнения (4) будет иметь вид : y 5m+1 0 = y 5m 0 + h* 7l 0 * y 5m+1 0, (5) где величина h* 7l 0 изменяется от шага к шагу. В этом случае характеристическое уравнение для дискретной системы (5) будет иметь вид : 1 - h* 7l 0*r - 1 = 0. А корень характеристического уравнения равен: r = 1/(1-h* 7l 0) , где 7l 0 = 7 a 0 _+ . 7 b 0 . _Случай 1 .. Исходная система (4) является асимптотически устойчивой , т.е. нулевое состояние равновесия системы асимптотически устойчиво и 7 a 0 < 0. Областью абсолютной устойчивости метода интегрирования системы (5) будет вся левая полуплоскость. Таким образом , шаг h должен на 0(3) каждом интервале интегрирования подбираться таким образом, чтобы при этом не покидать эту область. Но в таком случае должно выполняться требование : h < 2* 7t 0, (6) где 7t 0=1/ 72a2 0 - постоянная времени системы (4) . Она определяет скорость затухания переходных процессов в ней. А время переходного процесса T 4пп 0 = 3* 7t 0 , где 7t 0 = 72a2 5-1 0. Если иметь ввиду, что система (4) n-го порядка, то T 4пп 0 > 3* 7t 4max 0, где 7t 4max 0 = 72a 4min 72 5-1 7 0; 7a 4min 0= min 7a 4i 0 . Из всех 7a 4i 0 (i=[1;n]) выбирается максимальное значение : max 72a 4i 72 0= 7a 4max 0 и тогда можно вычислить : 7t 4min 0= 1/ 7a 4max 0, а шаг должен выбираться следующим образом : h < 2/ 7a 4max 0 или h < 2* 7t 4min 0. _Случай 2 .. Нулевое состояние равновесия системы (4) неустойчиво, т.е. 7a 0 > 0 . Т.е. система тоже неустойчива , т.е. 72 0r 72 0>1, а следовательно : 72 0 1/(1-h* 7l 0) 72 0 > 1. С учетом ограничения на скорость изменения приближенного решения относительно точного : 72 0 1/(1-h* 7l 0) 72 0 > 7 2 0e 5hl 7 2 0. (7) Из этого соотношения следует , что при 72 0h* 7l2 0 -> 1 левая часть стремится к бесконечности . Это означает , что в правой полуплоскости есть некоторый круг радиусом , равным 1 , и с центром в точке (0, 1), где неравенство (7) не выполняется. 2. _Точность метода .. Ошибка аппроксимации по величине равна ошибке аппроксимации явного метода Эйлера , но она противоположна по знаку : Е 4i 5am 0 =-1/2! * h 4m 52 0*x 4i 0''(t), где t 4m 0 <= t <= t 4m+1 0, i=[1;n]. 3. _Выбор шага интегрирования .. Должны соблюдаться условия абсолютной (6) или относительной (7) устойчивости в зависимости от характера интегрируемой системы. Для уравнения первого порядка шаг должен быть : h < 2* 7t 0 . Для уравнений n-ого порядка : h 4i 0 <= 2* 7t 4i 0. Однако область абсолютной устойчивости - вся левая полуплоскость . Поэтому шаг с этой точки зрения может быть любым. Условия относительной устойчивости жестче, так как есть область , где они могут быть нарушены. Эти условия будут выполняться , если в процессе решения задачи контролировать ошибку аппроксимации , а шаг корректировать . Таким образом, шаг можно выбирать из условий точности, при этом условия устойчивости будут соблюдены автоматически. Сначала задается допустимая погрешность аппроксимации : E 4i 5aдоп 0 <= 0,001 72 0x 4i 72 4max 0, где i=[1;n]. Шаг выбирается в процессе интегрирования следующим образом: 1. Решая систему (3) относительно x 5m+1 0 с шагом h 4m 0, получаем очередную точку решения системы x = F(x,t) ; 2. Оцениваем величину ошибки аппроксимации по формуле: Е 4i 5am 0 = 72 0h 4m 7/ 0(h 4m 0+h 4m-1 0)*[(x 4i 5m+1 0 - x 4i 5m 0) - h 4m 7/ 0h 4m-1 0*(x 4i 5m 0 -x 4i 5m-1 0)] 72 3. Действительное значение аппроксимации сравнивается с допустимым. Если Е 4i 5am 0 < E 4i 5aдоп 0, то выполняется следующий пункт, в противном случае шаг уменьшается в два раза , и вычисления повторяются с п.1. 4. Рассчитываем следующий шаг: h 4i 5m+1 0 = SQR(E 4i 5aдоп 7/2 0Е 4i 5am 72 0) * h 4m 0. 5. Шаг выбирается одинаковым для всех элементов вектора X : h 4m+1 0 = min h 4i 5m+1 0. 6. Вычисляется новый момент времени и алгоритм повторяется . НЕЯВНЫЕ МЕТОДЫ РУНГЕ-КУТТА Метод Эйлера является методом Рунге-Кутта 1-го порядка . Методы Рунге-Кутта 2-го и 4-го порядка являются одношаговыми , согласуются с рядом Тейлора до порядка точности s , который равен порядку метода . Эти методы не требуют вычисления производных функций , а только самой функции в нескольких точках на шаге h 4m 0. Алгоритм метода Рунге-Кутта 2-го порядка состоит в следующем: где x 5m+1 0 = x 5m 0 + h 4m 0/2 (k 41 5m+1 0+k 42 5m+1 0), k 41 5m+1 0=f(x 5m+1 0,t 4m+1 0); k 42 5m+1 0=f(x 5m+1 0-h 4m 0*k 41 5m+1 0,t 4m+1 0). Ошибка аппроксимации Е 4m 5a 0 = k*h 4m 53 0 . Алгоритм метода Рунге-Кутта 4-го порядка x 5m+1 0 = x 5m 0 + h 4m 0/6 (k 41 5m+1 0+2k 42 5m+1 0+2k 43 5m+1 0+k 44 5m+1 0), k 41 0=f(x 5m+1 0,t 4m+1 0); k 42 0=f(x 5m+1 0-h 4m 0/2*k 41 5m+1 0,t 4m+1 0-h 4m 0/2); k 43 0=f(x 5m+1 0-h 4m 0/2*k 42 5m+1 0,t 4m+1 0-h 4m 0/2); k 44 0=f(x 5m+1 0-h 4m 0*k 43 5m+1 0,t 4m 0). Ошибка аппроксимации Е 5a 0 = k*h 4m 55 0. где 2. МЕТОДЫ РЕШЕНИЯ НЕЛИНЕЙНЫХ САУ МЕТОД НЬЮТОНА Итерационная формула метода Ньютона имеет вид X 5m+1 0=X 5m 0- 5 0J 5-1 0* 5 0(X 5m 0) 5 0* 5 0F(X 5m 0), где J(X)=F 4x 5| 0/ 4x=xm Характеристики метода: 1. Сходимость. Покажем, что в точке P(G 4x 5| 0(X 5* 0))=0 Здесь G(x)=X - J 5-1 0(x) * F(x) - изображение итерационного процесса. Условие сходимости метода: P(G 4x 5| 0(X)) < 1 должно выполняться для всех значений X 5m 0. Это условие осуществляется при достаточно жестких требованиях к F(x): функция должна быть непрерывна и дифференцируема по X, а также выпукла или вогнута вблизи X 5* 0. При этом выполняется лишь условие локальной сходимости. Причем можно показать, что чем ближе к X 5* 0, тем быстрее сходится метод. 2. Выбор начального приближения X 50 0 - выбирается достаточно близко к точному решению. Как именно близко - зависит от скорости изменения функции F(x) вблизи X 5* 0: чем выше скорость, тем меньше область, где соблюдается условие сходимости и следовательно необходимо ближе выбирать X 50 0 к X 5* 0. 3. Скорость сходимости определяется соотношением ¦E 5m+1 0¦ = C 4m 0 * ¦E 5m 0¦ 51+p 0, 0 < P < 1. При X -> X 5* 0 величина P -> 1. Это значит, что вблизи точного решения скорость сходимости близка к квадратичной. Известно, что метода Ньютона сходится на 6-7 итерации. 4. Критерий окончания итераций - здесь могут использоваться критерии точности, то есть максимальная из норм изменений X и F(x). ДИСКРЕТНЫЙ МЕТОД НЬЮТОНА Трудность использования метода Ньютона состоит в 1. Необходимости вычисления на каждом этапе J=F 4x 5| 0. Возможно несколько путей решения: - аналитический способ. Наиболее эффективен, однако точные формулы могут быть слишком большими, а также функции могут быть заданы таблично. - конечно-разностная аппроксимация: dF 4i 0 F 4i 0(x 41 0,...,x 4j 0+dx 4j 0,...,x 4n 0) - F 4i 0(x 41 0,...,x 4j 0-dx 4j 0,...x 4n 0) --- = -------------------------------------------------dX 4j 0 2*dX 4j В этом случае мы имеем уже дискретный метод Ньютона, который уже не обладает квадратичной сходимостью. Скорость сходимости можно увеличить, уменьшая dX 4j 0 по мере приближения к X 5* 0. 2. Вычисление матрицы J 5-1 0 на каждом шаге требует значительных вычислительных затрат, поэтому часто решают такую систему: dX 5 0= 5 0J 5-1 0(X 5m 0) 5 0* 5 0F(X 5m 0) или умножая правую и левую часть на J, получим: J(X 5m 0) 5 0* 5 0dX 5m 0= 5 0F(X 5m 0) На каждом M-ом шаге матрицы J и F известны. Необходимо найти dX 5m 0, как решение вышеприведенной системы линейных АУ, тогда X 5m+1 0=X 5m 0+dX 5m Основной недостаток метода Ньютона - его локальная сходимость, поэтому рассмотрим еще один метод. МЕТОД ПРОДОЛЖЕНИЯ РЕШЕНИЯ ПО ПАРАМЕТРУ Пусть t - параметр, меняющийся от 0 до 1. Введем в рассмотрение некоторую систему H(X,t)=0, такую, что: 1. при t=0 система имеет решение X 50 2. при t=1 система имеет решение X 5* 3. вектор-функция H(X,t) непрерывна по t. Вектор функция может быть выбрана несколькими способами, например H(X,t) = F(X) + (t-1) или H(X,t) = t * F(X) Нетрудно проверить, что для этих вектор-функций выполняются условия 1-3. Идея метода состоит в следующем: Полагаем t 41 0= 7D 0t и решаем систему H(X,t 41 0)=0 при выбранном X 50 0. Получаем вектор X 5t1 0. Далее берем его в качестве начального приближения и решаем при новом t 42 0=t 41 0+ 7D 0t систему H(X,t 42 0)=0, получаем X 5t2 0 и так далее до тех пор, пока не будет достигнута заданная точность. 3. ТЕХНОЛОГИЯ РАЗРЕЖЕННЫХ МАТРИЦ ОСНОВНЫЕ ИДЕИ МЕТОДА. Основные требования к этим методам можно свести в 3 утверждения: 1. Хранить в памяти только ненулевые элементы. 2. В процессе решения принимать меры, уменьшающие возможность появления новых ненулевых элементов. 3. Вычисления производить только с ненулевыми элементами. Разреженный строчный формат Это одна из широко используемых схем для хранения разреженных матриц, которая предъявляет минимальные требования к памяти и очень удобна для выполнения основных операций с матрицами. Значения ненулевых элементов и соответствующие столбцовые индексы хранятся по строкам в двух массивах: NA и JA. Для разметки строк в этих массивах используется массив указателей IA, отмечающих позиции массивов AN и JA, с которых начинается описание очередной строки. Последняя цифра в массиве IA содержит указатель первой свободной позиции в JA и AN. Рассмотрим конкретный пример, который будет также и далее применятся для демонстрации других операций и который был использован в качестве контрольного примера для программы, выполняющей основные операции с разреженными матрицами. ¬ ¦30050¦ Позиция: 1 2 3 4 5 6 7 8 9 10 ¦04001¦ IA: 1 3 5 7 9 11 A=¦00820¦ JA: 1 4 2 5 3 4 1 4 2 5 ¦50060¦ AN: 3 5 4 1 8 2 5 6 7 9 ¦07009¦ L Данный способ представления называется полным (так как представлена вся матрица А) и упорядоченным (так как элементы каждой строки хранятся в соответствии с возрастанием столбцовых индексов). Обозначается RR(c)O - Row-wise representation Complete and Ordered (англ.). Массивы IA и JA представляют портрет матрицы А. Если в алгоритме разграничены этапы символической и численной обработки, то массивы IA и JA заполняются на первом этапе, а массив AN - на втором. Транспонирование разреженной матрицы Пусть IA, JA, AN - некоторое представление разреженной матрицы. Нужно получить IAT, JAT, ANT - разреженное представление транспонированной матрицы. Алгоритм рассмотрим на нашем примере: IA = 1 3 5 7 9 11 JA = 1 4 2 5 3 4 1 4 2 5 AN = 3 5 4 1 8 2 5 6 7 9 Символический этап. 1. Заводим 5 целых списков по числу столбцов матрицы А. пронумеруем их от 1 до 6. 2. Обходим 1 строку и заносим 1 в те списки, номера которых указаны в JA: 1: 1 2: 3: 4: 1 5: 3. Обходим вторую строку, вставляя аналогичным образом 2: 1: 1 2: 2 3: 4: 1 5: 2 В итоге получим: 1: 1 4 2: 2 5 3: 3 4: 1 3 4 5: 2 5 Массив ANT можно получить, вставляя численное значение каждого ННЭ, хранимое в AN, в вещественный список сразу после того, как соответствующее целое внесено в целый список. В итоге получим: IAT = 1 3 5 6 9 11 JAT = 1 4 2 5 3 1 3 4 2 5 ANT = 3 5 4 7 8 5 2 6 1 9 Произведение разреженной матрицы и заполненного вектора-столбца Алгоритм рассмотрим на нашем конкретном примере: IAT = 1 3 5 7 9 11 JAT = 1 4 2 5 3 1 3 4 2 5 ANT = 3 5 4 7 8 5 2 6 1 9 B = ( -5 4 7 2 6 ) Обработка 1 строки: Просматриваем массив IA и обнаруживаем, что первая строка матрицы А соответствует первому и второму элементу массива JA: JA(1)=3, JA(2)=4, то есть ННЭ являются a 411 0 и a 414 0. Просматриваем массив AN и устанавливаем, что a 411 0=3 и a 414 0=5. Обращаемся к вектору B, выбирая из него соответственно b 41 0=-5 и b 44 0=2. Вычисляем C 41 0= 3 * (-5) + 5 * 2 = -5. Абсолютно аналогично, вычисляя остальные строки, получим: C = (-5 58 56 1 58). Произведение двух разреженных матриц Рассмотрим метод на конкретном примере. Предположим, что нам необходимо перемножить две матрицы: IA = 1 3 5 7 9 11 JA = 1 4 2 5 3 4 1 4 2 5 AN = 3 5 4 1 8 2 5 6 7 9 IAT = 1 3 5 7 9 11 JAT = 1 4 2 5 3 1 3 4 2 5 ANT = 3 5 4 7 8 5 2 6 1 9 Суть метода состоит в том, что используя метод переменного переключателя и расширенный вещественный накопитель, изменяется порядок накопления сумм для формирования элементов матрицы С. Мы будем формировать элементы C 4ij 0 не сразу, а постепенно накапливая, обращаясь только к строкам матрицы B. Символический этап. Определяем мерность IX = 5 IX = 0 0 0 0 0 1-я строка матрицы JAT: 1 4 JA(1) = 1 4 JC(1) = 1 4 IX = 1 0 0 1 0 JA(4) = 1 4 IX(1) = 1 ? Да. JC(1) - без изменений IX(4) = 1 ? Да. JC(1) - без изменений 2-я строка матрицы JAT: 2 5 JA(2) = 2 5 JC(2) = 2 5 IX = 1 2 0 1 2 JA(5) = 2 5 -> JC(2) - без изменений .... 4-я строка матрицы JAT: 1 3 4 JA(1) = 1 4 JC(4) = 1 4 IX = 4 2 2 4 2 JA(3) = 3 4 IX(3) = 4 ? Нет. JC(4) = 1 4 3 IX(4) = 4 ? Да. JC(4) - без изменений .... в итоге получим: IC = 1 3 5 7 10 12 JC = 1 4 2 5 3 4 1 4 3 2 5 Численный этап. X=00000 1-я строка: JC(1) = 1 4 AN(1) = 3 5, AA = 3 ANT(1) = 3 5 AA * ANT = 9 15 X = 9 0 0 15 0 AA = 5 ANT(1) = 3 5 AA * ANT = 15 25 X = 24 0 0 40 0 CN(1) = 24 40 .... Аналогично проделывая действия над другими строками получим: IC: 1 3 5 7 10 12 JC: 1 4 2 5 3 4 1 4 3 2 5 CN: 24 40 20 35 80 0 55 22 66 16 144 Все вышеприведенные операции были получены на компьютере и результаты совпали для нашего контрольного примера. Описание программы на языке 2 C 0, занимающейся этими операциями не приводится, так как данная программа нами не разрабатывалась, однако в приложении присутствует распечатка этой программы. 2ПРАКТИЧЕСКАЯ ЧАСТЬ. ОПИСАНИЯ ПРОГРАММ. 1. ЯВНЫЕ МЕТОДЫ. Данная группа представлена 3 программами, реализующими методы Эйлера,Рунге-Кутта 2-го и 4-го порядков. В данной группе все программы индентичны, поэтому далее следует описание программы, реализующем метод Эйлера, с указанием различий для методов Рунге-Кутта 2-го и 4-го порядков. 1EILER.M Головной модуль. Входные и выходные данные: отсутствуют. Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or higher Пояснения к тексту модуля: Стандартный головной модуль. Происходит очистка экрана, задание начальных значений по времени и по Y. Затем происходит вызов подпрограммы EIL.M (RG2.M или RG4.M для методов Рунге-Кутта 2 и 4 порядков) а после получения результатов строятся графики. 1EIL.M Вычислительный модуль. Входные данные: FunFcn - имя подпрограммы, написанной пользователем, которая возвращает левые части уравнения для определенного момента времени. T0, Tfinal - начальные и конечные моменты времени. Y0 - начальные значения. Выходные данные: Tout - столбец времени Yout - столбцы решений по каждой координате Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or higher Пояснения к тексту модуля: Данный модуль и реализует собственно метод Эйлера (Рунге-Кутта 2 или 4-го порядков). В начале происходит инициализация внутренних пере- менных, а также вычисление максимального шага, который затем используется для определения точности. Далее следует цикл While...End внутри которого и выполняются все необходимые действия: по формуле (для каждого метода своя!) вычисляется значение Y на каждом шаге (при необходимости вызывается подфункция FunFcn) а также формируются выходные значения Tout и Yout. Далее метод сам корректирует свой шаг, по формуле описанной выше (в теоретическом разделе). Этот цикл выполняется до тех пор, пока значение Tfinal не будет достигнуто. Все выходные значения формируются внутри данного цикла и поэтому никаких дополнительных действий не требуется. В связи с этим с окончанием цикла заканчивается и подпрограмма EIL.M. Методы Рунге-Кутта реализованы аналогично, с учетом отличий в формулах вычислений (более сложные по сравнению с методом Эйлера). 2. НЕЯВНЫЕ МЕТОДЫ. Представлены группой из двух похожих между собой программ, реализующих соответственно неявные методы Эйлера и Рунге-Кутта 2 порядка. Также как и в вышеприведенном случае, будет описан метод Эйлера, а отличия метода Рунге-Кутта будут отмечены в скобках. 1NME.M Головной модуль. Входные и выходные данные отсутствуют. Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or higher Пояснения к тексту модуля: Выполняет стандартные действия: очистка экрана, инициализация и ввод начальных значений, вызов подпрограмм обработки и вычислений, а также построение графиков. 1NMEF.M, NRG2.M Вычислительные модули. Входные данные: T0, Tfinal - начальные и конечные моменты времени X0 - вектор-столбец начальных значений. H - начальный шаг A - матрица, на диагонали которой стоят собственные числа линеаризованной системы ОДУ. Выходные данные: T - столбец времени X - столбец решений 7D 0X - столбец ошибки Пояснения к тексту модуля: Стандартные действия: инициализация начальных значений , цикл While T < Tfinal, вычисление по формулам, вывод промежуточных результатов, формирование выходных значений массивов. 3. МЕТОДЫ РЕШЕНИЯ НЕЛИНЕЙНЫХ САУ Представлены группой из 4-х методов: метод последовательных приближений, метод Ньютона, метод Ньютона дискретный, метод продолжения решения по параметру. Метод последовательных приближений. 1MMPP.M Головной модуль. Входные и выходные данные отсутствуют. Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or higher Пояснения к тексту модуля: Очистка экрана, инициализация начальных значений, вызов вычислительного модуля MPP.M, вывод результатов в виде графиков. 1MPP.M Вычислительный модуль. Входные данные: X0 - начальное приближение в виде вектора-строки Fun1 - функция, возвращающая вычисленные левые части Fun2 - функция, возвращающая матрицу Якоби в определенной точке. E - допустимая ошибка. Выходные данные: Mout - номера итераций Xout - приближения на каждой итерации DXout - ошибка на каждой итерации Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or higher Пояснения к тексту модуля: Аналогичен вышеприведенным вычислительным модулям - инициализация начальных значений, вычисления по формулам, вывод промежуточных результатов, формирование выходных значений. По мере необходимости вызывает подпрограммы Fun1 и Fun2. Методы Ньютона и Ньютона дискретный 1MNEWT.M Головной модуль. Входные и выходные данные отсутствуют. Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or higher Пояснения к тексту модуля: Стандартный головной модуль - выполняет действия, аналогичные предыдущим головным модулям. Вызывает из себя NEWT.M и NEWTD.M - модули реализующие методы Ньютона и Ньютона дискретный, а также строит их графики на одной координатной сетке. 1NEWT.M, NEWTD.M Вычислительные модули. Входные данные: X0 - начальное приближение в виде вектора-строки Fun1 - функция, возвращающая левые части Fun2 - функция, вычисляющая матрицу Якоби (только для метода Ньютона!) E - допустимая ошибка Выходные данные: Mout - номера итераций Xout - приближения на каждой итерации DXout - ошибка на каждой итерации Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or higher Пояснения к тексту модулей: Стандартные вычислительные модули, производящие соответствующие им действия. Отличие их в том, что в первом случае для вычисления матрицы Якоби вызывается подпрограмма, а во втором случае матрица Якоби вычисляется внутри модуля. Метод продолжения решения по параметру 1MMPRPP.M Головной модуль. Входные и выходные данные отсутствуют. Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or higher Пояснения к тексту модуля: Стандартный головной модуль со всеми вытекающими отсюда последствиями. 1MPRPP.M Вычислительный модуль. Входные данные: Fun1 - имя подпрограммы, вычисляющей правые части Fun2 - имя подпрограммы, вычисляющем матрицу Якоби X0 - начальное приближение dT - начальный шаг Edop - допустимая ошибка Trace - вывод на экран Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or higher Пояснения к тексту модуля: Стандартный вычислительный модуль - инициализация, вычисление, вывод, формирование результата. Стоит отметить, что поскольку метод имеет глобальную сходимость, то объем вычислений тут значительный, а это значит, что при выполнении вычислений требуется значительное количество свободной оперативной памяти. 2ВЫВОДЫ При выполнении данных лабораторных работ были изучены основные численные методы для решения ОДУ, САУ, а также технология разреженных матриц. Заодно были получены основные навыки в программировании математической системы PC MathLab. Каждый из представленных методов по своему хорош и применяется для систем определенного вида. 2Теоретическая часть. В данной расчетно-графической работе (далее РГР) требуется составить программу для решения системы нелинейных уравнений методом последовательной итерации обратной матрицы Якоби. Суть метода в следующем: Пусть требуется решить систему нелинейных алгебраических или трансцендентных уравнений: F 41 0(X 41 0,X 42 0,...,X 4n 0)=0; i=1,2,...,n, с начальным приближением к решению: X 50 0=(x 41 50 0,x 42 50 0,...x 4n 50 0). Вычислительная схема реализованного метода состоит в следующем: В начале итерационного процесса матрица H полагается равной единичной: H 50 0=E. Затем для k=0,1,... 1. Вычисляется P 5k 0= 5 0- 5 0H 5k 0* 5 0F(X 5k 0); 2. Находятся X 5k+1 0= 5 0X 5k 0+ 5 0t 5k 0*P 5k 0. Первоначально t 5k 0=1. Затем путем последовательного деления t 5k 0 на 2 находим такое t 5k 0, чтобы выполнялось неравенство: ¦ F(X 5k+1 0) ¦ < ¦ F(X 5k 0) ¦ Итерационный процесс заканчивается при выполнении условия: ¦ F(X 5k+1 0) ¦ < E, где E - заданная точность. 3. Определяется Y 5k 0= F(X 5k+1 0) - F(X 5k 0) 4. Находится новое приближение матрицы: H 5k+1 0= 5 0H 5k 0- 5 0(H 5k 0*Y 5k 0- 5 0P 5k 0*t 5k 0) 5 0* 5 0(P 5k 0) 5T 0* 5 0(H 5k 0) 5T 0/ 5 0((P 5k 0) 5T 0* 5 0H 5k 0*Y 5k 0) и снова повторяется вычислительный процесс с пункта 1. 2Порядок работы с программой Данная РГР представлена в виде 3 исполняемых модулей: 1OBRJ.M, OBRF.M и FUN1.M. 0 Решением поставленной задачи занимается модуль 1 OBRF.M 0, а два остальных являются вспомогательными: 1OBRJ.M - 0 головной модуль, в котором вводятся входные данные и выводятся результаты вычислений, а 1 FUN1.M - 0 модуль, который пишет сам пользователь и который возвращает вычисленные левые части для требуемого уравнения. В головной программе задаются начальные приближения, в -3виде вектора X0 а также запрашивается допустимая ошибка. Затем вызывается модуль 1 OBRJ.M, 0 который и реализует решение данной системы уравнений методом последовательной итерации обратной матрицы Якоби. Внутри себя данный модуль по мере необходимости вызывает функцию 1 FUN1.M 0, которую пишет сам пользователь. 2Описание работы программ В связи с тем, что данная РГР состоит из 3 частей, то опишем их по одиночке (распечатки данных модулей приведены в приложении): 1. 1 OBRJ.M Головной модуль Входные данные: отсутствуют. Выходные данные: отсутствуют. Язык реализации: PC MathLab. Операционная система: MS-DOS 3.30 or Higher. Пояснения к тексту модуля: "Стандартный" головной модуль. В данном модуле задаются начальные значения в виде вектора, например: X 40 0=[0.4 0.9] Также в данном модуле запрашивается допустимая ошибка, очищается экран, а также производятся другие подготовительные действия. Затем происходит вызов модуля 1 OBRF.M 0 с полученными входными данными. Формат вызова данного модуля описан далее (в описании самого модуля). После вычислений в головную программу возвращаются результаты вычислений на основе которых строятся графики а также выводятся оценки по затратам машинного времени и быстродействия. 2. 1 OBRF.M Вычислительный модуль Входные данные: FunFcn - имя функции, написанной пользователем, которая вычисляет левые части для требуемой системы в определенной точке. X0 - вектор-строка, определяющий начальные значения (начальное приближение). E - допустимая ошибка. Выходные данные: Tout - Столбец итераций ("Время") Xout - Столбцы значений вычисленных на каждом этапе для каждой итерации DXout - Столбцы погрешностей по каждой компоненте, вычисленные на определенном этапе Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or Higher Пояснения к тексту модуля: Данный "вычислительный" модуль реализует метод последова- -5тельной итерации обратной матрицы Якоби. Общая структура вызова данного модуля: [T 4out 0,X 4out 0,DX 4out 0]=OBRF(FunFcn,X 40 0,E); Значения каждого из параметров были описаны выше. На начальном этапе в данном модуле инициализируются внутренние переменные (например, задается единичная матрица H, в соответствии с размерностью X0), формируются (на основе начальных значений) первичные элементы матриц Tout,Xout,DXout. Затем данная функция, как и многие другие в численных методах, имеет вид: While ОШИБКА > ДОПУСТИМОЙ ОШИБКИ Оператор1 Оператор2 ......... ......... ОператорN End Внутри данного цикла происходят вычисления внутренней переменной P 5k 0 на каждом шаге K и, вычисляется начальное приближение X 5k+1 0. Первоначально t=1 (Не номер итерации, а внутренний параметр!). Затем, в очередном цикле While...End в случае, если ¦F(X 5k+1 0)¦ < ¦F(X 5k 0)¦ t=t/2 и снова вычисляется X 5k+1 0. Когда очередное X 5k+1 0 найдено, вычисляется Y 5k 0, а затем и новое приближение матрицы H. Итерационный процесс заканчивается, если ¦F(X 5k+1 0)¦ < E. Если данное условие не выполняется - итерационный процесс продолжается заново. Формирование выходных значений-матриц происходит внутри данного цикла и поэтому никаких дополнительных действий не требуется, то есть с окончанием данного цикла заканчивается и сама функция. 3. 1 FUN1.M Модуль, вычисляющий левые части Входные данные: X - вектор-строка, задающий точки для вычислений по каждой компоненте. Выходные данные: FF - вектор-строка, возвращающий значения каждой компоненты в определенной точке Язык реализации: PC MathLab Операционная система: MS-DOS 3.30 or Higher Пояснения к тексту модуля: В принципе, текст данного модуля не требует пояснений. В нем пользователь реализует систему уравнений, которая подлежит решению. То есть на входные значения X данная функция возвращает левые части по каждому уравнению. Единственное требование к данному модулю - соблюдение формата, то есть входные и выходные данные должны быть представлены в виде вектор-строк. 2Сравнительный анализ и 2оценка быстродействия. -7Сравнительный анализ показал, что данный метод обладает неплохой сходимостью, так как попробованный метод простой итерации с параметром вообще отказался сходиться для данной системы. Однако хорошо подходит для сравнения дискретный метод Ньютона, так как данные методы практически одинаковы что по точности что по затратам. 1. Метод последовательной итерации обратной матрицы Якоби Число операций: порядка 682 Быстродействие: порядка 0.11 секунды 2. Метод Ньютона дискретный Число операций: порядка 990 Быстродействие: порядка 0.22 секунды Как видно из вышеприведенных данных, эти два метода очень близки между собой, но метод Ньютона дискретный более сложен в реализации, однако обладает лучшей сходимостью, например при начальных значениях X 50 0=[2.0 2.0]; метод последовательной итерации обратной матрицы Якоби уже не справляется, в то время как дискретный метод Ньютона продолжает неплохо работать. Однако метод Ньютона требует больших затрат машинного времени и поэтому при выборе метода необходимо исходить их конкретных условий задачи и если известно довольно точное приближение и требуется быстрота вычислений, то к таким условиям отлично подходит разработанный метод последовательной итерации обратной матрицы Якоби. 2Выводы В данной РГР был разработан и реализован метод последовательной итерации обратной матрицы Якоби, предназначенный для решения системы нелинейных уравнений. Программа, реализованная на языке PC MathLab хотя и не является оптимальной, однако выполняет поставленную задачу и решает системы уравнений. Реализованный метод не отличается повышенной сходимостью и требует довольно точного начального приближения, однако довольно быстро сходится к точному решению, то есть его можно порекомендовать для вычисления непростых систем нелинейных уравнений при наличии довольно точного начального приближения и наличия временных ограничений. 2Список литературы 1. О.М.Сарычева. "Численные методы в экономике. Конспект лекций", Новосибирский государственный технический университет, Новосибирск 1995г. 2. Д.Мак-Кракен, У.Дорн. "Численные методы и программирование на Фортране", Издательство "Мир", М. 1977г. 3. Н.С.Бахвалов. "Численные методы", Издательство "Наука", М. 1975г.