Численные методы. ПИ-31, 2010г. Утёмов В.В. Содержание 1 1.1 Введение Решение систем линейных алгебраических уравнений Точные методы решения систем линейных алгебраических уравнений 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 2 Метод Гаусса Связь метода Гаусса с разложением матрицы на множители. Теорема об LU разложении Метод Гаусса с выбором главного элемента Метод Холецкого (квадратных корней) Итерационные методы решения систем линейных алгебраических уравнений Метод Якоби (простых итераций) Метод Зейделя Матричная запись методов Якоби и Зейделя Метод Ричардсона Метод верхней релаксации (обобщенный метод Зейделя) Сходимость итерационных методов Плохо обусловленные системы линейных алгебраических уравнений 2.1 2.2 3 3.1 3.1.1 3.1.2 3.2 4 4.1 4.1.1 4.1.2 4.1.3 4.1.4 5 5.1 5.1.1 5.2 5.2.1 Метод регуляризации для решение плохо обусловленных систем Метод вращения (Гивенса) Решение нелинейных уравнений Метод простых итераций Условия сходимости метода Оценка погрешности Метод Ньютона Решение проблемы собственных значений Прямые методы Метод Леверрье Усовершенствованный метод Фадеева Метод Данилевского Метод итераций определения первого собственного числа матрицы Задача приближения функций Интерполяционный многочлен Лагранжа Оценка погрешности интерполяционного многочлена Интерполяционные полиномы Ньютона Интерполяционный многочлен Ньютона для равноотстоящих узлов 1.1.1 1.1.2 1.1.3 1.1.4 1.2 5.2.2 5.3 5.3.1 5.3.2 Вторая интерполяционная формула Ньютона Интерполирование сплайнами Построение кубического сплайна Сходимость процесса интерполирования кубическими сплайнами 5.4 6 Аппроксимация функций методом наименьших квадратов Численные методы решения задачи Коши для обыкновенных дифференциальных уравнений и систем дифференциальных уравнений Семейство одношаговых методов решения задачи Коши Метод Эйлера Методы Рунге-Кутта 6.1 6.1.1 6.1.2 7 12 12 12 15 17 18 19 19 20 21 22 23 23 25 26 28 31 33 34 34 35 38 40 40 41 41 43 46 48 49 51 51 53 54 55 56 57 61 62 62 63 6.2 6.2.1 6.2.2 6.2.3 6.3 6.3.1 6.3.2 6.3.2.1 6.3.2.2 6.4 6.5 6.6 6.6.1 6.6.2 7 Многошаговые разностные методы решения задачи Коши для обыкновенных дифференциальных уравнений Задача подбора числовых коэффициентов a k , bk Устойчивость и сходимость многошаговых разностных методов Примеры m-шаговых разностных методов Адамса Численное интегрирование жестких систем обыкновенных дифференциальных уравнений Понятие жесткой системы обыкновенных дифференциальных уравнений Некоторые сведения о других методахрешения жестких систем Методы Гира Метод Ракитского Решение линейной краевой задачи Решение двухточечной краевой задачи для линейного уравнения второго порядка Методы решения двухточечной краевой задачи для линейного уравнения второго порядка сведением к задаче Коши Метод конечных разностей Метод прогонки Решение дифференциального уравнения в частных производных 66 67 68 69 70 71 73 73 74 78 79 81 81 82 85 7.1 7.2 Метод сеток для решения смешанной задачи для уравнения параболического типа (уравнения теплопроводности) Решение задачи Дирихле для уравнения Лапласа методом сеток 86 88 7.3 Решение смешанной задачи для уравнения гиперболического типа методом сеток Лабораторная работа № 1. Решение систем линейных алгебраических уравнений. Точные методы 1.1 Метод Гаусса 1.2 Метод Холецкого Лабораторная работа № 2. Решение систем линейных алгебраических уравнений. Приближенные методы 2.1 Метод Якоби 2.2 Метод верхней релаксации 2.3 Метод Зейделя 90 93 101 Лабораторная работа № 3. Решение плохо обусловленных систем линейных алгебраических уравнений 3.1 Метод регуляризации 3.2 Метод вращения (Гивенса) 112 Лабораторная работа № 4. Решение нелинейных уравнений и систем нелинейных уравнений 4.1 Метод простых итераций 4.2 Метод Ньютона 117 Лабораторная работа № 5. Решение проблемы собственных значений и собственных векторов. Точные методы 5.1 Метод Леверрье 123 2 5.2 Метод Фадеева 5.3 Метод Крылова Лабораторная работа № 6. Решение проблемы собственных значений и собственных векторов. Итерационные методы 6.1 Метод QR-разложения 6.2 Метод обратных итераций 130 Лабораторная работа № 7. Приближение функций 7.1 Интерполяционный полином Лагранжа 7.2 Интерполирование функций с помощью кубического сплайна 7.3 Интерполяционные формулы Ньютона 7.4 Аппроксимация функций методом наименьших квадратов 137 Лабораторная работа №8. Решение задачи Коши. Одношаговые методы 8.1 Метод Эйлера 8.2 Метод прогноза и коррекции 8.3 Метод Рунге-Кутта 4-го порядка Лабораторная работа №9. Решение задачи Коши. Многошаговые методы 150 157 9.1 Метод Адамса (явный) Лабораторная работа №10. Численное интегрирование и дифференцирование 162 10.1 Формула Симпсона 10.2 Квадратурная формула Гаусса 10.3 Дифференцирование с помощью сплайнов Лабораторная работа №11. Жесткие задачи для систем ОДУ 11.1 Метод Гира 11.2 Метод Ракитского (матричной экспоненты) Список использованных источников 168 177 3 Введение Математическое моделирование и вычислительный эксперимент 1. Схема вычислительного эксперимента. Эффективное решение крупных естественнонаучных и народнохозяйственных задач сейчас невозможно без применения быстродействующих электронно-вычислительных машин (ЭВМ). В настоящее время выработалась технология исследования сложных проблем, основанная на построение и анализе с помощью ЭВМ математических моделей изучаемого объекта. Такой метод исследования называют вычислительным экспериментом. Пусть, например, требуется исследовать какой-то физический объект, явление, процесс. Тогда схема вычислительного эксперимента выглядит так, как показано на рисунке 1. Формулируются основные законы, управляющие данным объектом исследования (I) и строится соответствующая математическая модель (II), представляющая обычно запись этих законов в форме системы уравнений (алгебраических, дифференциальных, интегральных и т. д.). I Объект исследования Проведение вычислений и анализ результатов II Математическая модель V Численные III методы(дискретная модель вычислитьельного алгоритма) IV Программирование на ЭВМ Рисунок 1 - Этапы построения и анализа с помощью ЭВМ математической модели объекта При выборе физической и, следовательно, математической модели мы пренебрегаем факторами, не оказывающими существенного влияния на ход изучаемого процесса. Типичные математические модели, соответствующие физическим явлениям, формулируются в виде уравнений математической физики. Большинство реальных процессов описывается нелинейными уравнениями и лишь в первом приближении (при малых значениях параметров, малых отклонениях от равновесия и др.) эти уравнения можно заменить линейными. После того как задача сформулирована в математической форме, необходимо найти ее решение. Но что значит решить математическую задачу? Только в исключительных случаях удается найти решение в явном виде, например в виде ряда. Иногда утверждение «задача решена» означает, что доказано существование и единственность решения. Ясно, что этого недостаточно для практических приложений. Необходимо еще изучить качественное поведение решения и найти те или иные количественные характеристики. Именно на этом этапе требуется привлечение ЭВМ и, как следствие, развитие численных методов (см. III на рис. 1). Под численным методом здесь понимается такая интерпретация математической модели («дискретная модель»), которая доступна для реализации на ЭВМ. 4 Например, если математическая модель представляет собой дифференциальное уравнение, то численным методом может быть аппроксимирующее его разностное уравнение совместно с алгоритмом, позволяющим отыскать решение этого разностного уравнения. Результатом реализации численного метода на ЭВМ является число или таблица чисел. Отметим, что в настоящее время помимо собственно численных методов имеются также методы, которые позволяют проводить на ЭВМ аналитические выкладки. Однако аналитические методы для ЭВМ не получили пока достаточно широкого распространения. Чтобы реализовать численный метод, необходимо составить программу для ЭВМ (см. IV на рис. 1) или воспользоваться готовой программой. После отладки программы наступает этап проведения вычислений и анализа результатов (V). Полученные результаты изучаются с точки зрения их соответствия исследуемому явлению и, при необходимости, вносятся исправления в численный метод и уточняется математическая модель. Такова в общих чертах схема вычислительного эксперимента. Его основу составляет триада: модель — метод (алгоритм) — программа. Опыт решения крупных задач показывает, что метод математического моделирования и вычислительный эксперимент соединяют в себе преимущества традиционных теоретических и экспериментальных методов исследования. Можно указать такие крупные области применения вычислительного эксперимента, как энергетика, аэрокосмическая техника, обработка данных натурного эксперимента, совершенствование технологических процессов. 2. Вычислительный алгоритм. Предметом данной книги является изложение вопросов, отражающих этапы III, IV, V вычислительного эксперимента. Таким образом, здесь не обсуждаются исходные задачи и их математическая постановка. Необходимо подчеркнуть, что процесс исследования исходного объекта методом математического моделирования и вычислительного эксперимента неизбежно носит приближенный характер, потому что на каждом этапе вносятся те или иные погрешности. Так, построение математической модели связано с упрощением исходного явления, недостаточно точным заданием коэффициентов уравнения и других входных данных. По отношению к численному методу, реализующему данную математическую модель, указанные погрешности являются неустранимыми, поскольку они неизбежны в рамках данной модели. При переходе от математической модели к численному методу возникают погрешности, называемые погрешностями метода. Они связаны с тем, что всякий численный метод воспроизводит исходную математическую модель приближенно. Наиболее типичными погрешностями метода являются погрешность дискретизации и погрешность округления. Поясним причины возникновения таких погрешностей. Обычно построение численного метода для заданной математической модели разбивается на два этапа: а) формулирование дискретной задачи, б) разработка вычислительного алгоритма, позволяющего отыскать решение дискретной задачи. Например, если исходная математическая задача сформулирована в виде системы дифференциальных уравнений, то для численного решения необходимо заменить ее системой конечного, может быть, очень большого числа линейных или разностных алгебраических уравнений. В этом случае говорят, что проведена дискретизация исходной математической задачи. Простейшим примером дискретизации является построение разностной схемы, путем замены дифференциальных выражений конечно-разностными отношениями. В общем случае дискретную модель можно рассматривать как конечномерный аналог исходной математической задачи. Ясно, что решение дискретизированной задачи отличается от решения исходной задачи. Разность соответствующих решений и называется погрешностью дискретизации. Обычно дискретная модель зависит от некоторого параметра (или множества параметров) дискретизации, при стремлении которого к нулю должна стремиться к нулю и 5 погрешность дискретизации. При этом число алгебраических уравнений, составляющих дискретную модель, неограниченно возрастает. В случае разностных методов таким параметром является шаг сетки. Как уже отмечалось, дискретная модель представляет собой систему большого числа алгебраических уравнений. Невозможно найти решение такой системы точно и в явном виде. Поэтому приходится использовать тот или иной численный алгоритм решения системы алгебраических уравнений. Входные данные этой системы, а именно коэффициенты и правые части, задаются в ЭВМ не точно, а с округлением. В процессе работы алгоритма погрешности округления обычно накапливаются, и в результате решение, полученное на ЭВМ, будет отличаться от точного решения дискретизированной задачи. Результирующая погрешность называется погрешностью округления (иногда ее называют вычислительной погрешностью). Величина этой погрешности определяется двумя факторами: точностью представления вещественных чисел в ЭВМ и чувствительностью данного алгоритма к погрешностям округления. Алгоритм называется устойчивым, если в процессе его работы вычислительные погрешности возрастают незначительно, и неустойчивым — в противоположном случае. При использовании неустойчивых вычислительных алгоритмов накопление погрешностей округления приводит в процессе счета к переполнению арифметического устройства ЭВМ. Итак, следует различать погрешности модели, метода и вычислительную. Какая же из этих трех погрешностей является преобладающей? Ответ здесь неоднозначен. Видимо, типичной является ситуация, возникающая при решении задач математической физики, когда погрешность модели значительно превышает погрешность метода, а погрешностью округления в случае устойчивых алгоритмов можно пренебречь по сравнению с погрешностью метода. С другой стороны, при решении, например, систем обыкновенных дифференциальных уравнений возможно применение столь точных методов, что их погрешность будет сравнима с погрешностью округления. В общем случае нужно стремиться, чтобы все указанные погрешности имели один и тот же порядок. Например, нецелесообразно пользоваться разностными схемами, имеющими точность 10 2 6 , если коэффициенты исходных уравнений задаются с точностью 10 . 3. Требования к вычислительным методам. Одной и той же математической задаче можно поставить в соответствие множество различных дискретных моделей. Однако далеко не все из них пригодны для практической реализации. Вычислительные алгоритмы, предназначенные для быстродействующих ЭВМ, должны удовлетворять многообразным и зачастую противоречивым требованиям. Попытаемся здесь сформулировать основные из этих требований в общих чертах. Можно выделить две группы требований к численным методам. Первая группа связана с адекватностью дискретной модели исходной математической задаче, и вторая группа-с реализуемостью численного метода на ЭВМ. К первой группе относятся такие требования, как сходимость численного метода, выполнение дискретных аналогов законов сохранения, качественно правильное поведение решения дискретной задачи. Поясним эти требования. Предположим, что дискретная модель математической задачи представляет собой систему большого, но конечного числа алгебраических уравнений. Обычно, чем точнее мы хотим получить решение, тем больше уравнений приходится брать. Говорят, что численный метод сходится, если при неограниченном увеличении числа уравнений решение дискретной задачи стремится к решению исходной задачи. Поскольку реальная ЭВМ может оперировать лишь с конечным числом уравнений, на практике сходимость, как правило, не достигается. Поэтому важно уметь оценивать погрешность метода в зависимости от числа уравнений, составляющих дискретную модель. По этой же причине стараются строить дискретную модель таким образом, чтобы 6 она правильно отражала качественное поведение решения исходной задачи даже при сравнительно небольшом числе уравнений. Например, дискретной моделью задачи математической физики может быть разностная схема. Для ее построения область изменения независимых переменных заменяется дискретным множеством точек - сеткой, а входящие в исходное уравнение производные заменяются, на сетке, конечно-разностными отношениями. В результате получаем систему алгебраических уравнений относительно значений искомой функции в точках сетки. Число уравнений этой системы равно числу точек сетки. Известно, что дифференциальные уравнения математической физики являются следствиями интегральных законов сохранения. Поэтому естественно требовать, чтобы для разностной схемы выполнялись аналоги таких законов сохранения. Разностные схемы, удовлетворяющие этому требованию, называются консервативными. Оказалось, что при одном и том же числе точек сетки консервативные разностные схемы более правильно отражают поведение решения исходной задачи, чем неконсервативные схемы. Сходимость численного метода тесно связана с его корректностью. Предположим, что исходная математическая задача поставлена корректно, т.е. ее решение существует, единственно и непрерывно зависит от входных данных. Тогда дискретная модель этой задачи должна быть построена таким образом, чтобы свойство корректности сохранилось. Таким образом, в понятие корректности численного метода включаются свойства однозначной разрешимости соответствующей системы уравнений и ее устойчивости по входным данным. Под устойчивостью понимается непрерывная зависимость решения от входных данных, равномерная относительно числа уравнений, составляющих дискретную модель. Вторая группа требований, предъявляемых к численным методам, связана с возможностью реализации данной дискретной модели на данной ЭВМ, т. е. с возможностью получить на ЭВМ решение соответствующей системы алгебраических уравнений за приемлемое время. Основным препятствием для реализации корректно поставленного алгоритма является ограниченный объем оперативной памяти ЭВМ и ограниченные ресурсы времени счета. Реальные вычислительные алгоритмы должны учитывать эти обстоятельства, т. е. они должны быть экономичными как по числу арифметических действий, так и по требуемому объему памяти. 7 Численные методы алгебры и анализа 1 Решение систем линейных алгебраических уравнений Рассмотрим систему линейных алгебраических уравнений: а11х1 а12 х 2 ... а1m х m b1 а х а х ... а х b 22 2 2m m 2 21 1 . . . . . . . . . а m1 х1 а m 2 х 2 ... а m m х m bm (1.1) или в матричной форме: Aх=B, (1.2) где: A={aij} квадратная матрица размерности (mm,); х=(х1,….,хm)T; T – операция транспонирования; b=(b1,….,bm)T; detA0. Предположим, что определитель матрицы A не равен нулю. Тогда решение х существует и единственно. На практике встречаются системы, имеющие большой порядок. Методы решения системы (1.1) делятся на две группы: 1) прямые (точные методы); 2) итерационные методы (приближенные). 1.1 Точные методы В методах Гаусса решение х находится за конечное число действий, но из-за погрешности округления и их накопления прямые методы можно назвать точными, только отвлекаясь от погрешностей округления. 1.1.1 Метод Гаусса Прямой ход метода 1-й шаг. Предположим, что а110. Поделим первое уравнение на этот элемент: x1 c12 x2 ... c1m xm y1 . (1.3) Остальные уравнений системы (1.1) запишем в виде ai1 x1 ai 2 x2 ... aim xm bi , где i= 2, m . Уравнение (1.3) умножаем на ai1 и вычитаем из i-го уравнения системы (1.4). Получим систему вида: 8 (1.4) x1 c12 x2 ... c1m xm y1 (1) (1) a22 x2 ... a2m x1 b2(1) . . . . . . . . . . am(1)2 x2 ... am(1)m x1 bm(1) (1.5) aij( 1 ) aij c1 j ai1 bi( 1 ) bi y1ai1 . Система (1.5) имеет матрицу вида: 1 0 ... 0 x ... x x ... x . ... ... ... x ... x Работаем с укороченной системой, т.к. х1 входит только в 1-ое уравнение (1) (1) a22 x2 ... a2m xm b2(1) . . . . . . . . (1) (1) (1) am 2x2 ... am mxm bm (1) 2-й шаг. Если а22 0 , то из укороченной системы аналогично исключаем неизвестное x2 и получаем матрицу коэффициентов такого вида: 1 0 0 ... 0 x 1 0 0 x x x ... x ... ... ... ... x x x . ... x Аналогично повторяем указанные действия для неизвестных х3,х4,..., хm-1 и приходим к системе с матрицей вида: 9 x1 c12 x2 ... c1m xm y1 x2 ... c2 m xm y 2 . . . . . . . . xm1 cm1,m xm y m1 cm m xm y m (1.6) Эта матрица является верхней треугольной: 1 0 0 0 0 x 1 x ... x x 0 1 ... ... x . ... ... ... 0 0 ... 1 x 0 0 ... ... x x x ... x Обратный ход метода. Из последнего уравнения системы (1.6) находим хm, из предпоследнего хm-1, ..., из первого уравнения – х1. Общая формула: xm=ym/cmm, x y i i m c x , (i=m-1,…,1). ij j j i 1 Для реализации метода Гаусса требуется примерно (2/3)m3 арифметических операций, причем большинство из них приходится на прямой ход. Ограничение метода единственного деления заключается в том, что угловые элементы не равны нулю, т.е. а k 1 0 . kk к Ведущие элементы – а 1 – элементы на k-ом шаге исключения. Но если ведущий кк элемент близок к нулю, то в процессе вычисления может накапливаться погрешность. В этом случае на каждом шаге исключают не хk, a хj (при jk). Такой подход называется методом выбора главного элемента. Для этого выбирают неизвестные xj с наибольшим по абсолютной величине коэффициентом либо в строке, либо в столбце, либо во всей m(m 2 3m 1 ) матрице. Для его реализации требуется - арифметических действий. 3 1.1.2 Связь метода Гаусса с разложением матрицы на множители. Теорема об LU разложении. Пусть дана система Aх=B (1.1), которая при прямом ходе преобразуется в эквивалентную систему (1.6) и которую запишем в виде 10 Cх=y, (1.7) где С – верхняя треугольная матрица с единицами на главной диагонали. Как связаны в системе (1.1) элементы В и элементы y из (1.7)? Если внимательно посмотреть на прямой ход метода Гаусса, то можно увидеть, что b1 a11 y1 (1) b2 a21 y1 a22 y2 . Для произвольного j имеем b j d j1 y1 d j 2 y2 ... d jj yi , (1.7) где j= 1, m , dji – числовые коэффициенты: d jj a(jjj 1 ) . (1.8) Это можно записать в виде: В=Dy, где D-нижняя треугольная матрица с элементами a (jjj 1) на главной диагонали (j= 1, m , а11 а11 ). ( 0) В связи с тем, что в методе Гаусса угловые коэффициенты не равны нулю a ( j 1) jj 0, то на главной диагонали матрицы D стоят не нулевые элементы. Следовательно, эта матрица имеет обратную, тогда y=D-1В, Сx= D-1В. Тогда DCx=B. (1.9) В результате использования метода Гаусса, получили разложение матрицы А на произведение двух матриц A = DC, где D - нижняя треугольная матрица, у которой элементы на главной диагонали не равны нулю, а C - верхняя треугольная матрица с единичной диагональю. Таким образом, если задана матрица A и вектор B, то в методе Гаусса сначала производится разложение этой матрицы А на произведение D и C, а затем последовательно решаются две системы: Dy=B, Cx=y. (1.10) Из последней системы находят искомый вектор x. При этом разложение матрицы А на произведение СD – есть прямой ход метода Гаусса, а решение систем (1.10) обратный ход. Обозначим нижнюю треугольную матрицу через L, верхнюю треугольную матрицу U. 11 Теорема об LU разложении Введем обозначения: j - угловой минор порядка j матрицы А, т.е. 1 a11 , 2 det a11 a12 , a21 a22 . . . . . det( A ). m . Теорема. Пусть все угловые миноры матрицы А не равны нулю (Δj 0 для j= 1, m ). Тогда матрицу А можно представить единственным образом в виде произведения А=L*U. Идея доказательства. Рассмотрим матрицу А второго порядка и будем искать разложение этой матрицы в виде L и U. a l 0 1 u12 a * . A 11 12 11 a a l l 0 1 21 22 21 22 Сопоставляя эти два равенства, определяем элементы матриц L и U (перемножим и приравняем неизвестные). Система имеет единственное решение. Методом математической индукции сказанное можно обобщить для матрицы размерности mm. Следствие. Метод Гаусса (схема единственного деления) можно применять только в том случае, когда угловые миноры матрицы А не равны нулю. 1.1.3 Метод Гаусса с выбором главного элемента Может оказаться так, что система (1.1) имеет единственное решение, хотя какой либо из миноров матрицы А равен нулю. Заранее неизвестно, что все угловые миноры матрицы А не равны нулю. Избежать этого можно с выбором главного элемента. 1. Выбор главного элемента по строке, т.е. производится перенумерация неизвестных системы. ПРИМЕР. Пусть дана система второго порядка a11x1 a12 x2 b1 a21x1 a22 x2 b2 при а12> а11, тогда на первом шаге вместо неизвестного х1 исключают х2: 12 a12 x2 a11x1 b1 . a22 x2 a21x1 b2 К этой системе применяем первый шаг прямого хода метода Гаусса. 2. Выбор главного элемента по столбцу. Предположим, что а21> а11и переставим уравнения a21x1 a22 x2 b2 a11x1 a12 x2 b1 и применяем первый шаг прямого хода метода Гаусса. Здесь имеет место перенумерация строк. 3. Поиск главного элемента по всей матрице заключается в совместном применении методов 1 и 2. Всё это приводит к уменьшению вычислительной погрешности. 1.1.4 Метод Холецкого (метод квадратных корней) Пусть дана система Ах=В , (1.11) где матрица А - симметричная матрица. Тогда решение системы (1.11) проводится в два этапа: 1. Симметричная матрица А представляется как произведение двух матриц А = L * LТ. Рассмотрим метод квадратных корней на примере системы 4-го порядка: l11 0 0 0 l11 l21 l31 a11 ... a14 l21 l22 0 0 0 l22 l32 ... ... ... * 0 0 l l l l 0 31 32 33 33 a 41 ... a44 l 41 l42 l43 l44 0 0 0 l41 l42 l34 . l44 Перемножаем матрицы в левой части разложения и сравниваем с элементами в левой части: l11 a11 , l21 l32 a12 a11 , l 31 a13 a11 , l 41 a14 a11 , l 22 2 a22 l 21 , a32 l21 l31 2 2 2 2 2 , l 33 a33 l 31 l 32 , l 44 a44 l 41 l 42 l 43 l22 . 13 2. Решаем последовательно две системы Ly=B, LTx=у. Особенности. 1) Под квадратным корнем может получиться отрицательное число, следовательно в программе необходимо предусмотреть использование правил действия с комплексными числами. 2) Возможно переполнение - если угловые элементы близки к нулю. 1.2 Итерационные методы решений систем алгебраических уравнений Итерационные методы обычно применяются для решения систем большой размерности и они требуют приведения исходной системы к специальному виду. Суть итерационных методов заключается в том, что решение х системы (1.1) находится как предел последовательности lim x(n) . n Так как за конечное число итераций предел не может быть достигнут, то задаётся малое число - точность, и последовательные приближения вычисляют до тех пор, пока не будет выполнено неравенство x n x n1 , где n=n() – функция , х - норма вектора. Прямые методы рассчитаны для решения систем, если её порядок не больше 100, иначе используются итерационные методы. 1.2.1 Метод Якоби (простых итераций) Исходную систему Ах=В (1.11) преобразуем к виду: i 1 xi aij j 1 aii xj m aij j i 1 aii xj bi , aii (1.12) где i=1,2,...,m; aii0. Первая сумма равна нулю, если верхний предел суммирования меньше нижнего. Так (1.12) при i=1 имеет вид 14 m a1 j x1 j 2 a11 xj n 1 По методу Якоби (метод простых итераций) xi формуле xin 1 i 1 aij j 1 aii x nj m b1 . a11 (n+1 приближение хi) ищем по aij j i 1 aii x nj bi . aii (1.13) где n – номер итерации (0,1,…,); i= 1, m . Итерационный процесс (1.13) начинается с начальных значений xi0 , которые в общем случае задаются произвольно, но предпочтительнее, если за xi0 взять свободные члены исходной системы. Условие окончания счета: max x n 1 x n , i i i где i= 1, m . 1.2.2 Метод Зейделя Система (1.11) преобразуется к виду (1.12) и организуем итерационную процедуру, где неизвестные хi на n+1 шаге определяются по формулам xin 1 i 1 aij j 1 aii x nj 1 m aij a1 j x nj j i 1 aii x nj bi . aii (1.14) Например, xin 1 x2n 1 m m j 2 a11 a2 j j 3 a22 x nj b1 , a11 b2 a21 n 1 x1 , a22 a22 (1.15) (1.16) и так далее. Итерационные процессы (1.13) и (1.14) сходятся, если норма матрицы А (А - матрица коэффициентов при неизвестных в правой части систем (1.13) и (1.14)) удовлетворяет условию: А 1. 15 1.2.3 Матричная запись методов Якоби и Зейделя Исходную матрицу системы (1.11) представим в виде суммы трёх матриц A=A1+D+A2, где D - диагональная матрица; D =diаg[а11а22…аmm]; A1 - нижняя треугольная матрица; A2 - верхняя треугольная матрица. Пример: Дана матрица размерности (33): 0 0 а21 0 а 31 а32 0 0 а12 0 0 0 0 0 0 А1 а13 а11 0 а23 0 а22 0 0 0 А2 0 0 А. а33 D Тогда исходную систему (1.11) можно записать в виде x=-D-1A1 x – D-1A2 x+D-1 b. Тогда метод Якоби можно записать в виде: x n 1 D 1 A1x n D 1 A2 x n D 1B или Dх n 1 ( A1 A2 )x n b . (1.17) В матричной форме метод Зейделя будет выглядеть: x n 1 D 1 A1 x n 1 D 1 n 1 A2 x D b или ( D А1 )х n 1 А2 х n b . (1.18) Преобразуем формулы (1.17) и (1.18): D(х n 1 x n ) Ах n b , (D А1 )(х n 1 x n ) Ax n b . (1.19) (1.20) Из (1.19) и (1.20) видно, что если итерационный метод сходится, то он сходится к точному решению. Иногда при решении задач большой размерности, в итерационные методы вводятся числовые параметры, которые могут зависеть от номера итерации. 16 Пример для метода Якоби. х n 1 x n D Ax n B , tn 1 где t – числовой параметр. Возникают вопросы: 1) При каких значениях t сходимость будет наиболее быстрой? 2) При каких значениях t метод сходится? На примере двух методов просматривается вывод о том, что одни и те же методы можно записывать несколькими способами. Поэтому вводят каноническую (стандартную) форму записи: x n 1 x n Dn 1 Ax n B . t n 1 (1.21) Формула (1.21) получена путем объединения (1.19) и (1.20). Матрица Dn+1 здесь задает тот или иной метод. Если существует обратная матрица к этой матрице, то из последней системы мы можем найти все неизвестные. 1. Метод (1.21) – явный, если матрица Dn совпадает с единичной матрицей и неявный - в противном случае. 2. Метод (1.21) – стационарный, если матрица Dn+1 = D, и параметр t не зависит от номера итерации и нестационарный - в противном случае. 1.2.4 Метод Ричардсона Явный метод с переменным параметром t: x n1 x n Ax n B , t n1 (1.21а) называется методом Ричардсона. 1.2.5 Метод верхней релаксации (обобщённый метод Зейделя) x n 1 x n ( D wA1 ) Ax n B , w (1.21б) где - числовой параметр. Если матрица А - симметричная и положительно определена, то последний метод сходится при (0 < < 2). Последнюю формулу запишем в следующем виде: ( E wD 1 A1 )x n 1 (( 1 w )E wD 1 A2 )x n wD 1 B , (1.22) где Е - единичная матрица. 17 Тогда для вычисления неизвестных хi (i=1, m ) процедуру в виде: i 1 aij j 1 aii xin1 w можно записать итерационную m aij j i 1 aii x nj1 (1 w) xin w x nj w bi . aii (1.23) Например, для х1 это будет такое выражение: m x1n1 ( 1 w )x1n w a1 j j 2 a11 x nj w b1 . a11 1.2.6 Сходимость итерационных методов Рассмотрим систему Ax=B, где А - невырожденная действительная матрица. Для решения системы рассмотрим одношаговый стационарный метод x n 1 x n D Ax n B , t (1.24) при n=0,1,2…. Предположим, что задан начальный вектор решения. Тогда метод (1.24) сходится, если норма вектора x x n 0. n Теорема. Условие сходимости итерационного метода. Пусть А - симметричная положительно определенная матрица и выполнено условие D - 0.5tA > 0 (где t > 0). Тогда метод (1.24) сходится. Следствие 1. Пусть А - симметричная и положительно определенная матрица с диагональным преобладанием, то есть: m | a | | a | jj ij , i 1 i j при j=1,2,…,m. Тогда метод Якоби сходится. Следствие 2. Пусть А - симметричная и положительно определенная матрица с диагональным преобладанием, тогда метод верхней релаксации сходится при (0< <2). 18 Проверяется, при каком - метод достигает заданной точности быстрее. В частности, при =1 метод верхней релаксации превращается в метод Зейделя, следовательно, при =1 метод Зейделя сходится. Теорема. Итерационный метод (1.24) сходится при любом начальном векторе x0 тогда и только тогда, когда все собственные значения матрицы S E tD 1 A по модулю меньше единицы. 19 2 Плохо обусловленные системы линейных алгебраических уравнений Дана система линейных алгебраических уравнений Ах=В. (2.1) Если система плохо обусловлена, то это значит, что погрешности коэффициентов матрицы А и правых частей B или же погрешности их округления сильно искажают решение системы. В качестве примера рассмотрим систему 1.03x1 0.991x2 2.51 0.991x1 0.943x2 2.41. Решение этой системы x1 1.981 x2 0.4735. Оценим влияние погрешности правых частей на результат. Рассмотрим “возмущенную” систему с правой частью b* = (2.505 , 2.415) и решим эту систему: x1* 2.877 x2* -0.4629. Относительная погрешность правой части (в) = 0.005/2.51 0.28% привела к относительной погрешности решения (x*) =0.9364/1.981 47.3%. Погрешность возросла примерно в 237 раз. Число обусловленности системы (2.1) приблизительно равна 237. Подобные системы называются плохо обусловленными. х1 а) х1 б) х1 с) 1) 2) 3) х2 х2 х2 Рисунок 2 - а) система имеет единственное решение; б) система не имеет решения; с) система плохо обусловлена. В случае с) малейшее возмущение системы сильно меняет положение точки пересечения прямых. Встаёт задача – какими методами можно решать эти системы. Для оценки обусловленности системы вводят число обусловленности MА М А А1 А Чем больше MА, тем система хуже обусловлена. Свойства числа обусловленности: 1) МЕ =1; 2) MА 1; 20 . 3) MА max | / | min , где мах, min - соответственно максимальное и минимальное собственные числа матрицы А; 4) MАВ MА * MВ; 5) Число обусловленности матрицы А не меняется при умножении матрицы на произвольное число 0. Найдем выражение для полной оценки погрешности решения системы. Пусть в системе (2.1) возмущены коэффициенты матрицы А и правая часть В, т.е. ~ ~ x x. δ A A A, δB B B , δx ~ Теорема. Пусть матрица А имеет обратную матрицу, и выполняется условие A A1 1 ~ . Тогда матрица А A A имеет обратную и справедлива следующая оценка относительной погрешности: x x A B . A A B 1 M A A MA 2.1 Метод регуляризации для решения плохо обусловленных систем Рассмотрим систему Ах=В. (2.1) Для краткости перепишем эту систему в эквивалентный форме ( Ax B , Ax B ) 0 . (2.2) Для примера рассмотрим систему 2 x1 x1 1 . x1 2 x2 2 Тогда ее можно представить как (2х1-х2-1)2+(х1-2х2-2)2=0. (2.2*) Решение системы (2.2) совпадает с решением системы (2.2*). Если коэффициенты A или B известны неточно, то решение также является не точным, поэтому вместо равенства ( Ax B , Ax B ) 0 можем потребовать приближенного выполнения равенства ( Ax B , Ax B ) 0 и в этом виде задача становится не определенной и нужно добавить дополнительные условия. В качестве дополнительного условия вводят требование, чтобы решение как можно меньше отклонялось от заданного х0 т.е. (х-х0, х-х0) было минимальным. Следовательно, приходим к регуляризованной задаче вида (Ах-B, Ax-B)+(x-x0, x-x0)=min, (2.3) где >0. Используя свойства скалярного произведения, выражение (2.3) перепишем в виде 21 (x,ATAx)-2(x,ATB)+(B,B)+[(x,x)-2(x,x0)+(x0,x0)]=min. (2.4) Варьируя x в уравнении (2.4), получим уравнение вида (ATА+E)x=ATB+x0. (2.5) Система (2.5) – система линейных алгебраических уравнений, эквивалентная системе (2.1). Систему (2.5) решаем с помощью метода Гаусса или с помощью метода квадратных корней. Решая систему (2.5) найдем решение, которое зависит от числа . Выбор управляющего параметра . Если =0, то система (2.5) перейдет в плохо обусловленную систему (2.1). Если же –велико, то система (2.5) переходит в хорошо обусловленную систему и решение этой системы может сильно отличаться от решения системы (2.1). Оптимальное значение – это такое число, при котором система (2.5) удовлетворительно обусловлена. На практике пользуются невязкой вида r Ax B , и эту невязку сравнивают по норме с известной погрешностью правых частей B и с влиянием погрешности коэффициентов матрицы А . Если – слишком велико, то || r |||| B || или || А ||. Если – мало, то || r |||| B || или || А ||. Поэтому проводят серию расчетов, при различных и в качестве оптимального значения выбирают то значение , когда выполнено следующее условие r B A . Для выбора вектора х0 нужно знать приближенное решение или же, если приближенное решение трудно определить, то х0 =0. 2.2 Метод вращения (Гивенса) Метод Гивенса как и метод Гаусса состоит из прямого и обратного ходов. Прямой ход метода. Исключаем неизвестное х1 из всех уравнений, кроме первого. Для исключения х1 из 2-го уравнения вычисляют числа 12 a11 2 2 a11 a 21 , 12 a 21 2 2 a11 a 21 , где и такие, что 12 12 1 , 12 11 12 21 0 . Первое уравнение системы заменяем линейной комбинацией первого и второго уравнений с коэффициентами 12 и 12 ,а второе уравнение такой же комбинацией с 12 2 2 и - 12 . В результате получим систему 22 a ( 1 ) x a ( 1 ) x ... a ( 1 ) x b ( 1 ) 12 2 1m m 1 11 1 (1) (1) a 22 x 2 ... a 2 m x m b2( 1 ) a31 x1 a32 x 2 ... a3m x m bm . . . . . . . . . . a m1 x1 a m 2 x 2 ... a m m x m bm (2.6) Здесь a1( 1j ) 12 a1 j 12 a 2 j , a 2( 1j ) 12 a 2 j 12 a1 j , b1( 1 ) 12b1 12b2 , b2( 1 ) 12b2 12b1 , где j=1, m . Преобразование системы (2.1) к системе (2.6) эквивалентно умножению матрицы A и вектора B слева на матрицу С12 вида C12 12 12 ... 0 12 12 ... 0 0 ... 0 0 ... 0 . ... ... ... ... 0 1 Аналогично для исключения x1 из третьего уравнения вычисляем числа 13 такие, что 13 13 1, 2 2 a11(1) (a11(1) ) 2 (a31 ) 2 и 13 a31 (a11(1) ) 2 (a31 ) 2 , (1) 13a31 13a11 0. Затем первое уравнение системы (2.6) заменяем линейной комбинацией первого и третьего уравнений с коэффициентами 13 , 13 , а третье уравнение системы (2.6) тоже заменяем линейной комбинацией с умножению слева на матрицу 13 0 C13 13 ... 0 0 1 0 ... 0 13 ,– 13 . Это преобразование эквивалентно 13 0 13 ... ... 0 0 0 ... 0 ... ... ... ... ... 0 0 0 ... 1 . Исключая неизвестное х1 из всех последующих уравнений получим систему А(1) х=В, где матрица A(1)=C1m…C13C12A, , а вектор правых частей B ( 1 ) C1m ...C13C12 B . 23 Здесь и далее через Сkj обозначена матрица элементарного преобразования, отличающаяся от единичной матрицы Е только четырьмя элементами. Действие матрицы Сkj на вектор x эквивалентно повороту вектора x вокруг оси перпендикулярной плоскости OX k X i на угол kj такой, что ki cos ki , ki sin ki . Операцию умножения на матрицу Сkj называют плоским вращением или преобразованием Гивенса. Первый этап состоит из m-1 шагов, в результате чего получается система ( m 1 ) ( m 1 ) a11 x1 a12 x2 ... a1(mm1 ) x m b1( m1 ) (1) a 22 x2 ... a 2( 1m) x m b2( 1 ) . . . . . . . . . . . (1) a m( 12) x 2 ... a mm xm bm( 1 ) . (2.7) В матричной форме А(1) х=В(1). На втором этапе, состоящем из m-2 шагов, из уравнений системы (2.7) с номерами 3,4,…,m исключают неизвестное х2. B результате получим систему B( 2 ) a ( m1 ) x a ( m1 ) x a ( m1 ) x ... a ( m1 ) x b ( m1 ) 1 2 3 m 12 13 1m 1 11 ( m 1 ) ( m 1 ) a 22 x2 a 23 x3 ... a 2( mm1 ) xm b2( m1 ) (2) a33 x3 ... a3( m2 ) xm bm( 2 ) . . . . . . . . . . . . . . (2) a m( 23) x3 ... a mm xm bm( 2 ) . (2) (2) (2) (1) В матричной форме получаем A x B , где A C2 m ...C23 A , C2 m ...C23 B ( 1 ) . После завершения (m-1)-го шага придем к системе с верхней треугольной матрицей вида ( m1 ) где B Cm1,m B( m2 ) . A ( m 1 ) x B ( m 1 ) , Обратный ход метода вращения проводится точно также, как и для метода Гаусса. 24 3 Решение нелинейных уравнений Рассмотрим систему нелинейных уравнений с m неизвестными вида f1 ( x1 ,..., x m ) 0 f 2 ( x1 ,..., x m ) 0 . . . . . . f m ( x1 ,..., x m ) 0 (3.1) Задача решения такой системы является более сложной, чем нахождение корней одного нелинейного уравнения, и чем задача решения линейных алгебраических уравнений. В отличие от систем линейных уравнений здесь использование прямых методов исключено и решение находится с использованием итерационных методов, т.е. находится приближенное решение x* = (x1*, ... , xm*), удовлетворяющее при заданном > 0 условию х х . Задача (3.1) совсем может не иметь решения или же число решений может быть произвольным. Введем векторную запись решения задачи: x=(x1,…,xm)T, f=(f1,…,fm)T, f(x)=0. (3.2) Будем считать, что функции fi непрерывно дифференцируемы в некоторой окрестности точки х. Введем матрицу Якоби f1 x1 f 2 f ( x ) x1 . f m x 1 f1 x2 f 2 x2 . f m x2 f1 xm f 2 ... xm . . . f m ... xm ... Как и в случае решения одного уравнения начинаем с этапа локализации решения (отделения корней). Пример. Дана система 2-х уравнений с 2-мя неизвестными х 13 х 23 8х 1 х 2 . х 1 ln x 2 x 2 ln x 1 Найдем на плоскости место расположения решения. Строим графики уравнений этой системы: а) - график 1-го уравнения, б) – график 2-го уравнения, с) – совмещенные графики. 25 х2 4 а) х2 б) е 4 х1 х2 е х1 с) А В 4 С х1 4 Рисунок 3 – Графики уравнений системы Определяем границы координат пересечения графиков. Данная система имеет три решения. Координаты точек (B,C,A): B: x1=4, x2=4 C: 3.5 < x1 < 4; 1.5 < x2 < 2.5. Точки А и С симметричны относительно прямой х1 =х2. Координаты точки С определим приближенно: x1 3.8, x2 2. Обусловленность и корректность решения системы (3.1). Предположим что система (3.1) имеет решение х и в некоторой окрестности этого решения матрица Якоби не вырождена. Это означает, что в указанной окрестности нет других решений системы. В одномерном случае нахождение корня нелинейного уравнения приводит к определению интервала неопределенности (х*-, х*+). у х а в х х*-б х*+б Рисунок 4 – Графическое изображение интервала неопределенности 26 В этом случае мы не можем определить, какая же точка в интервале неопределённости является решением. Если случай многомерный, то получаем некоторую область неопределённости D, и можем получить оценку радиуса этой области: ( f ( x )) 1 ( f ) f x f ( r*) ( f ). Эта норма играет роль числа обусловленности. Чем оно больше, тем хуже эта система обусловлена. 3.1 Метод простых итераций Систему (3.1) преобразуем к следующему эквивалентному виду: x1 1( x1 ,..., xm ) x2 2 ( x1 ,..., xm ) . . . . . . . xm m ( x1 ,..., xm ) Или в векторной форме x ( x ). Пусть задано начальное приближение х (3.3) (3.4) (0) (0) (0) T (х ,...,х ) . Подставляем его 1 m в правую часть системы (3.4) и получаем x(1)=(x(0)), продолжая подстановку, находим х(2) и т.д. Получим последовательность точек приближается к исходному решению х. { х( 0 ) , х( 1 ) ,..., х( к 1 ) } , которая 3.1.1 Условия сходимости метода. Пусть '(x) - матрица Якоби (якобиан), соответствующая системе (3.4) и в некоторой -окрестности решения х функции выполнено неравенство вида: i ( х ) (i=1,2,…,m) дифференцируемы и ( х ) q , где (0 q < 1), q - постоянная. Тогда независимо от выбора х(0) из -окрестности корня итерационная последовательность {хk} не выходит за пределы данной окрестности, метод сходится со скоростью геометрической прогрессии и справедлива оценка погрешности 27 х (n) х qn x (0) x . 3.1.2 Оценка погрешности. В данной окрестности решения системы, производные функции i(x) (i=1,…,m) должны быть очень малы по абсолютной величине, т.е. сами функции должны быть почти постоянными. Тогда исходную систему (3.1) следует преобразовать к виду (3.3) с учетом условий сходимости. Пример. Рассмотрим предыдущий пример и приведем систему к удобному для итераций виду x1 3 8 x1 x2 x23 , x2 x2 x2 x 1 . ln x2 ln x1 Проверяем условие сходимости вблизи точки С. Вычислим матрицу Якоби 8x2 2 3( 8 x1 x 23 ) 3 ( x1 , x 2 ) 1 1 2 ln x ln x 1 1 2 3 3 3( 8 x1 x 2 x 2 ) 1 1 . 1 2 ln x 2 ln x 2 8 x1 3x 22 Так как x13.8, x22, то при этих значениях вычисляем норму матрицы ( x ) || ( x ) |||| ( 3.8,2 ) || 0.815. Запишем итерационную процедуру ( k 1) 3 ( k ) ( k ) (k ) 3 x 8x x (x ) , 1 1 2 2 (k ) (k ) x x ( k 1) (k ) x x 2 1 . 2 2 (k ) (k ) ln x ln x 2 1 Следовательно, метод простых итераций будет сходиться со скоростью геометрической прогрессии, знаменатель которой q0.815. Вычисления поместим в таблице 1. Таблица 1 Решение системы нелинейных уравнений К 0 1 … x1( k ) x 2( k ) 28 8 9 3.80000 3,75155 …. 3,77440 x1=3,77418 2.00000 2,03895 … 2,07732 x2=2,07712 При К=9 критерий окончания счета выполняется при =10-3 и можно положить x1 =3.774 0.001 x2 =2.077 0.001. 3.2 Метод Ньютона Суть метода состоит в том, что система нелинейных уравнений сводится к решению систем линейных алгебраических уравнений. Пусть дана система (3.1) и задано начальное приближение x(0), приближение к решению х строим в виде ( 0 ) (1 ) (n) ,х ,..., х последовательности х . В исходной системе (3.1) каждую функцию f i ( x1 , x2 ,..., xn ), где i= 1, m , раскладывают в ряд Тейлора в точке х(n) и заменяют линейной частью её разложения fi ( x ) fi ( x f i ( x ( n ) ) ) ( x j x (j n ) ) . x j j 1 m (n) Для каждого уравнения получаем f1 ( x ( n ) ) f1 ( x ) ( x j x (j n ) ) 0 x j j 1 . . . . . . . . . . . . m f ( x ( n ) ) (n) (n) m fm( x ) ( x j x j ) 0 x j j 1 (n) m (3.5) В матричной форме f ( x ( n ) ) f ( x ( n ) ) ( x x ( n ) ) 0 (3.6) где f ' - матрица Якоби. Предположим, что матрица не вырождена, то есть существует обратная матрица f ( x ) (n) 1 . Тогда система (3.6) имеет единственное решение, которое и принимается за очередное приближение x(n+1). Отсюда выражаем решение x(n+1) по итерационной формуле: x ( n1 ) x ( n ) f ' ( x ( n ) ) 1 f ( x( n ) ) . (3.7) Формула (3.7) и есть итерационная формула метода Ньютона для приближенного решения системы нелинейных уравнений. Замечание. В таком виде уравнение (3.7) используется редко в виду того, что на каждой итерации нужно находить обратную матрицу. Поэтому поступают следующим образом: вместо системы (3.6) решают систему линейных алгебраических уравнений вида 29 f(x(n))*x(n+1) =-f(x(n)). (3.8) Это система линейных алгебраических уравнений относительно поправки x(n+1)= - x(n). Затем полагают (n+1) x x(n+1) =x(n) +x(n+1). (3.9) 3.2.1 Сходимость метода Теорема. Пусть в некоторой окрестности решения х системы (3.1) функции fi (при i= 1, m ) дважды непрерывно дифференцируемы и матрица Якоби не вырождена. Тогда найдется такая малая окрестность вокруг решения х, что при выборе начального приближения x0 из этой окрестности итерационный метод (3.7) не выйдет за пределы этой окрестности решения и справедлива оценка вида x ( n1 ) x 1 2 x( n ) x , где n - номер итерации. Метод Ньютона сходится с квадратичной скоростью. На практике используется следующий критерий остановки: x ( n ) x ( n1 ) . 30 4 Решение проблемы собственных значений Пусть дана квадратная матрица A размерностью (m*m) и существует такое число , что выполняется равенство А x x, x 0 , тогда такое число называется собственным значением соответствующим ему собственным вектором. Перепишем это равенство в эквивалентной форме матрицы (A - E) * x = 0 . А, а x– (4.1) Система (4.1) - однородная система линейных алгебраических уравнений. Для существования нетривиального решения системы (4.1) должно выполняться условие det(A - E) = 0 . (4.2) Определитель в левой части уравнения является многочленом m-ой степени относительно , его называют - характеристическим определителем (характеристическим многочленом). Следовательно, уравнение (4.2) имеет m корней или m собственных значений. Среди них могут быть как действительные, так и комплексные корни. Задача вычисления собственных значений сводится к нахождению корней характеристического многочлена (4.2). Корни могут быть найдены одним из итерационных методов (в частности методом Ньютона). Если найдено некоторое собственное значение матрицы A, то подставив это число в систему (4.1) и решив эту систему однородных уравнений, находим собственный вектор х, соответствующий данному собственному значению. Собственные вектора будем при нахождении нормировать (вектор х умножаем на -1 ||х|| , и таким образом они будут иметь единичную длину), нахождение собственных значений матрицы A и соответствующих им собственных векторов и есть полное решение проблемы собственных значений. А нахождение отдельных собственных значений и соответствующих им векторов - называется решением частной проблемы собственных значений. Эта проблема имеет самостоятельное значение на практике. Например, в электрических и механических системах собственные значения отвечают собственным частотам колебаний, а собственные вектора характеризуют соответствующие формы колебаний. Эта задача легко решается для некоторых видов матриц - диагональных, треугольных и трехдиагональных матриц. К примеру определитель треугольной или диагональной матрицы равен произведению диагональных элементов, тогда и собственные числа равны диагональным элементам. Пример 1. Матрица А – диагональная а 0 0 А 0 а 0 . Тогда 0 0 а 31 det(А-Е)= ( а ) , а характеристическое уравнение ( а ) 0 трехкратный корень =а. Собственными векторами для матрицы А будут единичные векторы 3 3 имеет 1 0 0 e1 0 ,e 2 1 ,e3 0 . 0 0 1 Пример 2. Найдем собственные числа матрицы 9 5 2 А 1.2 5.3999 6 . 1 1 7.5 Составим характеристический многочлен 2 Р3 ( ) det( A E ) det 1.2 1 9 5.3999 1 6 7.5 5 3 10.8999 2 26.49945 21.002 . Используя метод Ньютона, определим один из корней уравнения Р 3()=0, а именно 1 -7.87279. Разделив многочлен P3 ( ) на (-1) получим многочлен второй степени: P2 ( ) =2 + 3.02711 + 2.66765. Решив квадратное уравнение, находим оставшиеся два корня:2,3 1.51356 0.613841 * i (комплексное сопряженные корни). Существуют прямые методы нахождения собственных значений и итерационные методы. Прямые методы неудобны для нахождения собственных значений для матриц высокого порядка. В таких случаях с учетом возможностей компьютера более удобны итерационные методы. 4.1 Прямые методы 4.1.1 Метод Леверрье Метод разделяется на две стадии: - раскрытие характеристического уравнения, - нахождение корней многочлена. Пусть det(A-E) характеристический многочлен матрицы А={aij} m m 1 pm , и 1,2,…,m - есть (i,j=1,2,…,m), т.е. det A E p1 полная совокупность корней этого многочлена (полный спектр собственных значений). - есть Рассмотрим суммы вида 32 S k 1k 2k km (k=1,2,…,m), т.е. S1 1 2 ... m S p A S 2 12 22 2m S p A2 . . . . . . . . (4.3) , . S m 1m m2 mm S p Am где SpA m aii - след матрицы. i 1 В этом случае при km справедливы формулы Ньютона для всех (1k m) S k p1S k 1 pk 1S 1 kpk , (4.4) Откуда получаем при k=1 р1 = -S1, при k=2 р2 = -1/2 * (S2 + р1*S1), . . . . . . . . . . . . . . при k=m рm = -1/n * (Sm + р1*Sm-1 + р2*Sm-2 + ... + рm-1*S1). (4.5) Следовательно, коэффициенты характеристического многочлена рi можно определить, если известны суммы S1,S2,...,Sm. Тогда схема алгоритма раскрытия характеристического определителя методом Леверрье будет следующей: 1) вычисляем степень матрицы: Ак=Ак-1*А для k=1,…,m; 2) определяют Sk - суммы элементов стоящих на главной диагонали матриц Ак; 3) по формулам (4.5) находят коэффициенты характеристического уравнения рi(i=1,2,…,m). 4.1.2 Усовершенствованный метод Фадеева Алгоритм метода: 1) вычисляют элементы матриц A1,A2,..,Am: A1 A; SpA1 q1 ; B1 A1 q1 E ; A2 A B1 ; SpA2 q 2 ; B2 A2 q 2 E ; 2 . . . . . Am A Bm1 ; . . . . . . . SpAm q m ; Bm Am q m * E , m (в конце подсчета Bm нулевая матрица для контроля); 2) определяют коэффициенты характеристического уравнения рi q1 = -р1, q2 = -р2,..., qm = -рm. 33 Существуют и другие методы раскрытия характеристического определителя: метод Крылова, Данилевского и др. 4.1.3 Метод Данилевского Две матрицы A и B называются подобными, если одна получается из другой путем преобразования с помощью некоторой не вырожденной матрицы S: B=S-1*AS, если это равенство справедливо, то матрицы A и B подобны, а само преобразование называется преобразованием подобия (переход к новому базису в пространстве m мерных векторов). Пусть y - результат применения матрицы A к вектору х y=A*х. Сделаем замену переменных: x=S*x' , y=S*y'. Тогда равенство y=A*х преобразуется к виду y'=S-1*A*S*x'. В этом случае матрица B и матрица A имеют одни и те же собственные числа. Это можно легко увидеть раскрыв определитель det( S 1 AS E ) det( S 1 ( A E ) S ) det( S 1 ) det( A E ) det( S ) det( A E ) . Следовательно, матрицы A и B - подобные, имеют одни и те же собственные значения. Но собственные векторы х и х’ – не совпадают, они связаны между собой простым соотношением х = S*х'. Такую матрицу A с помощью преобразования подобия или же последовательности таких преобразований можно привести к матрице Фробениуса вида: f11 1 F 0 0 f12 0 1 ... 0 f1m1 0 0 ... 1 f1m 0 0 . 0 Детерминант матрицы F det (F) можно разложить по элементам первой строки: det( F E ) ( 1 )m ( m p1m 1 pm ) . 34 Тогда коэффициенты характеристического многочлена матрицы А будут р1 = f11 , p2 = f12,…, pn = f1m. Второй случай. Матрицу А преобразованием подобия можно привести к матрице В верхнего треугольного вида b11 b12 b1m 0 b b 22 2m B . . . . . 0 0 bm m Тогда собственными числами будут диагональные элементы матрицы B: det( B E ) ( b11 )( b22 )( bmm ) . Третий случай. Матрицу A с помощью преобразования подобия можно привести к Жордановой форме S 1 AS 1 S1 0 2 ... 0 0 , 0 m 0 0 S2 0 ... 0 0 0 ... где i - собственные числа матрицы A; Si - константы (0 или 1); если Si=1, то i=i+1. К четвёртому случаю относятся матрицы, которые с помощью преобразования подобия можно привести к диагональному виду (матрица простой структуры): 1 0 0 2 S 1 AS D ... 0 0 0 0 ... , n у которой, как известно, собственными числами являются диагональные элементы. 4.1.4 Метод итераций определения первого собственного числа матрицы. Пусть дано характеристическое уравнение: det(A-*E) = 0, где 1, 2,..., n - собственные значения матрицы А. Предположим, что |1|>|2||3|…|m|, т.е. 1 – наибольшее по модулю собственное число. Тогда для нахождения приближенного значения λ1 используется следующая схема: 35 1) выбирают произвольно начальный вектор у(0); 2) строят последовательность итераций вида: y ( 1 ) Ay ( 0 ) , y ( 2 ) А Аy ( 0 ) A2 y ( 0 ) , . . . . . . . y ( m ) А Аm1 y Am y , y ( m1 ) A Am y Am1 y . (m) A m y и y ( m1 ) A m1 y , тогда 3) выбирают y 1 lim yi( m 1 ) yim n или 1 yi( m 1 ) yi( m ) , где yi – соответствующие координаты векторов y(m+1) и y(m). Возникает вопрос выбора начального вектора у(0). При неудачном выборе можем не получить значения нужного корня, или же предела может не существовать. Этот факт при вычислении можно заметить по прыгающим значениям этого отношения, следовательно, нужно изменить у(0). В качестве первого собственного вектора можно взять вектор у(n+1) и пронормировать его. Пример. Найти наибольшее по модулю собственное значение и соответствующий ему собственный вектор матрицы А 3 1 0 A 1 2 2 0 1 1 1) Выбираем начальный вектор y (0) 1 1 . 1 2) Вычисляем последовательно векторы y(1), y(2), …, y(10). Вычисления помещаем в таблицу 2. Таблица 2 – Вычисление векторов y(n+1) y(0) А*y(0) А2*y(0) А3*y(0) …….. 36 А9*y(0) А10* y(0) 1 4 17 69 243569 941370 1 5 18 67 210663 812585 1 2 7 25 73845 284508 ( 10 ) (9) и y 3) Вычисляем отношения координат векторов y i i y3( 10 ) y1( 10 ) y 2( 10 ) (1) (2) (3) 1 3.865; 1 3.857; 1 3.853. (9) (9) (9) y1 y2 y3 4) Вычисляем λ1 как среднее арифметическое 1( 1 ) , 1( 2 ) , 1( 3 ) 1 1(1) 1( 2) 1(3) 3 3,858 . 5) Определим соответствующий числу λ1 собственный вектор: y ( 10 ) A( 10 ) y ( 0 ) 941370 812585 . 284508 Нормируем y(10), разделив на длину вектора y ( 10 ) получим вектор x( 1 ) 3 941370 2 8125852 2845082 1.28* 106 0.74 0.64 . 0.22 Далее можем определить второе собственное число y i( n 1) 1 y i( n ) 2 ( n 1) yi 1 y i( n 1) , где i=1,2,…,n. При вычислении собственных чисел подобным образом, будет накапливается ошибка. Данная методика позволяет приближенно оценить собственные значения матрицы. 37 5 Задача приближения функции Постановка задачи. Пусть на отрезке [a,b] задана функция у= f(x) своими n+1 значениями y 0 f ( x 0 ),..., y n f ( x n ) , в точках x0 , x1 ..., xn . Допустим, что вид функции f(x) неизвестен. На практике часто встречается задача вычисления значений функции у= f(x) в точках х, отличных от x0 ,..., xn . Кроме того, в некоторых случаях, не смотря на то, что аналитическое выражение у=f(x) известно, оно может быть слишком громоздким и неудобным для математических преобразований (например, специальные функции). Кроме этого значения yi могут содержать ошибки эксперимента. Определение. Точки x0 ,..., xn называются узлами интерполяции. Требуется найти аналитическое выражение функции F(x), совпадающей в узлах интерполяции со значениями данной функции, т.е. F ( x0 ) y0 , F ( x1 ) y1 ,..., F ( xn ) y n . Определение. Процесс вычисления значений функции F(x) в точках отличных от узлов интерполирования называется интерполированием функции f(x). Если х х0 , xn , то задача вычисления приближенного значения функции в т. х называется интерполированием, иначе - экстраполированием. Геометрически задача интерполирования функции одной переменной означает построение кривой, проходящей через заданные точки ( x0 , y 0 ),( x1 , y1 ),...,( x n , y n ) (рисунок 5). То есть задача в такой постановке может иметь бесконечное число решений. у x0 x1 x2 x3 х Рисунок 5 - Геометрическая иллюстрация задачи интерполирования функции Задача становится однозначной, если в качестве F(x) выбрать многочлен степени не выше n, такой что: F n (x 0 )=y 0 , F n (x 1 )=y 1 ,..., F n (x n )=y n . Определение. Многочлен F n (x), отвечающий вышеназванным условиям, называется интерполяционным многочленом. Определение. Когда многочлен F(x) выбирается в классе степенных функций, то интерполяция называется параболической. Знание свойств функции f позволяет осознанно выбирать класс G аппроксимирующих функций. Широко используется класс функций вида 38 Фm ( x ) c0 0 ( x ) c11 ( x ) ... cm m ( x ), (5.1) являющихся линейными комбинациями некоторых базисных функций 0 (x),..., m(x). Будем искать приближающую функцию в виде многочлена степени m, с коэффициентами с 0 ,...,с m , которые находятся в зависимости от вида приближения. Функцию Фm(х) называют обобщенным многочленом по системе функций 0(х),1(х),…,m(х), а число m – его степенью. Назовем обобщенный многочлен Фm(х) интерполяционным, если он удовлетворяет условию Фm(хi)=yi, (i=0,1,…,n). Покажем, что условие (5.2) единственным образом позволяет найти (5.2) приближающую функцию c0 0 ( x0 ) c11 ( x0 ) ... cm m ( x0 ) y 0 c ( x ) c ( x ) ... c ( x ) y 1 1 1 m m 1 1 0 0 1 . . . . . . . . . . . c ( x ) c ( x ) ... c ( x ) y 1 1 n m m n n, 0 0 n (5.3) Система (5.3) есть система линейных алгебраических уравнений относительно коэффициентов с0,с1,…,сm. Эта система n линейных уравнений имеет единственное решение, если выполняется условие m=n и определитель квадратной матрицы Р det P 0 ( x0 ),1 ( x0 ),..., m ( x0 ) 0 ( x1 ),1 ( x1 ),..., m ( x1 ) 0. . . . . . . . . 0 ( xn ),1 ( xn ),..., m ( xn ) Определение. Система функций 0 (x),..., m(x), линейно независимая в точках х0,х1,…,хn, которые попарно различны и выписанный выше определитель не равен нулю, называется Чебышевской системой функций. Если мы имеем такую систему, то можно утверждать, что существует единственный для данной системы функций интерполяционный многочлен Фm(х), коэффициенты которого определяются единственным образом из системы (5.3). Пример. При mn система функций 1,х,х2,…,хm линейно независима в точках х0,х1,…,хn, если они попарно различны. 5.1 Интерполяционный многочлен Лагранжа 39 Рассмотрим случай, когда узлы интерполирования не равноотстоят друг от друга на отрезке [a,b]. Тогда шаг h = xi+1- x i const. Задача имеет единственное решение, если в качестве интерполирующей функции F(x) взять алгебраический многочлен Ln(x )=a0+a1 x+a2 x2+…+anxn, где а i неизвестные постоянные коэффициенты. Используя условие (5.2) можем записать L( x0 ) y 0 , L( x1 ) y1 ,..., L( x n ) y n . (5.4) Запишем это в виде: a 0 a 0 . a 0 a1 x0 a12 x22 ... a1n xnn y 0 a1 x0 a12 x22 ... a1n xnn y1 (5.5) . . . . . . . . . a1 x0 a12 x22 ... a1n xnn y n . Эта система однозначно разрешима, так как система функций 1,х,х2,…,хn линейно независима в точках х0,х1,…,хn. Однозначная разрешимость следует из того факта, что определитель этой системы (определитель Вандермонда) 1 x0 x 02 ... x 0n 1 x1 x12 ... x1n ... ... ... ... 1 x n2 xn ... ( xi 0 j ,i n x j ) 0. ... x nn Без вывода приведем одну из форм записи интерполяционного многочлена Лагранжа Ln ( x ) y 0 ( x x1 )...( x xn ) ( x x0 )( x x2 )...( x xn ) y1 ... ( x0 x1 )...( x0 xn ) ( x1 x0 )( x1 x2 )...( x1 xn ) ( x x0 )...( x xn1 ) ... y n . ( xn x0 )...( xn xn1 ) (5.6) Определение. Этот многочлен называется интерполяционным многочленом Лагранжа и сокращенно записывается в виде n L n (x) = 40 y io i ( x x0 )( x x1 )...( x xi 1 )( x xi 1 )...( x xn ) . ( xi x0 )( xi x1 )...( xi xi 1 )( xi xi 1 )...( xi xn ) (5.7) 5.1.1 Оценка погрешности интерполяционного многочлена Оценить погрешность интерполяционной формулы Лагранжа можно только тогда, когда известно аналитическое выражение интерполируемой функции, а точнее, если известно максимальное значение (n+1)-ой производной функции f(x) на отрезке [a,b]. Пусть |R n (x)| =| f(x) - L n (x)|, где R n (x) –погрешность; f(x)- точное значение функции в точке х; L n (x)- приближенное значение, полученное по полиному Лагранжа. Если обозначить через M n1 = max [ a ,b ] f ( n 1) ( x) , где x [a,b], причем х0=а, х n = b, то max Rn ( x ) [ a ,b ] Mn 1 ( x x0 )( x x1 )....( x xn ) (n 1)! . Рассмотрим теперь случай с равноотстоящими узлами. Тогда интерполяционная формула Лагранжа заметно упрощается. В этом случае шаг h=xi+1-xi=const. Введем в рассмотрение многочлен вида ( x x0 )( x x1 )...( x xi1 )...( x xn ) . Qi(x)= ( xi x0 )( xi x1 )...( xi xi1 )...( xi xn ) Введем обозначение q= x x0 , отсюда следует, что h x x0 = q h , x x1 = q h h h (q 1) , . . . . . . . . . . . x xi = q h i h h ( q i ), x xn = q h n h h ( q n ). Тогда многочлен Qi примет вид Qi(x)= q( q 1 ) [ q ( i 1 )] [ q ( i 1 )]...( q n ) h n yi . i h( i 1 ) h...h( h )...[ ( n i ) h ] Произведя простейшие преобразования, получим выражение вида: 41 i q ( q 1 )...( q n ) ( 1 ) n i q( q 1 )...( q n ) n i C n ( 1 ) Q i (q)= = , qi n! ( q i ) i!( n i )! n! . i! ( n i )! Тогда интерполяционный многочлен Лагранжа для равноотстоящих узлов имеет где C ni вид: L n i q( q 1 )...( q n ) n n i C n ( 1 ) yi . (x)= n! q i i 0 На практике часто пользуются линейной и квадратичной интерполяцией. В этом случае формула Лагранжа имеет вид L1(x)= y0 ( x x0 ) ( x x0 ) y1 ( x0 x1 ) ( x1 x0 ) L2(x)= y0 ( x x0 )( x x2 ) ( x x0 )( x x1 ) ( x x1 )( x x2 ) y1 y2 ( x0 x1 )( x0 x2 ) ( x1 x0 )( x1 x2 ) ( x2 x0 )( x2 x1 ) - при линейной интерполяции; при квадратичной интерполяции. 5.2 Интерполяционные полиномы Ньютона 5.2.1 Интерполяционный многочлен Ньютона для равноотстоящих узлов Вычисление значений функции для значений аргумента, лежащих в начале таблицы удобно проводить, пользуясь первой интерполяционной формулой Ньютона. Для этого введем понятие конечной разности. Определение. Конечной разностью перового порядка называется разность между значениями функции в соседних узлах интерполяции. Тогда конечные разности в точках х0,х1,…,хn-1 y 0 y1 y 0 f ( x1 ) f ( x0 ) f ( x0 ) , y1 y 2 y1 f ( x 2 ) f ( x1 ) f ( x1 ) , . . . . . . . y n 1 y n y n 1 f ( x n ) f ( x n 1 ) f ( x n 1 ) . Конечная разность второго 42 порядка имеет вид: 2 yi yi 1 yi , . . . . . . n yi ( n1 yi ). Рассмотрим некоторые свойства конечных разностей. Вторая конечная разность в точке хi 2 yi f ( xi1 x ) f ( xi x ) f ( xi1 ) f ( xi ) f ( xi2 ) 2 f ( xi1 ) f ( xi ) yi2 2 yi1 yi . Аналогично третья конечная разность 3 yi yi3 3 yi2 3 yi1 yi . Общее выражение для конечной разности n-го порядка имеет вид n yi yn i C1n yn i 1 Cn2 yn i 2 ... ( 1 )m Cnm yn i m ...( 1 )n yi , а вообще, конечная разность порядка m от конечной разности порядка n m (n y ) m n y . Конечные разности n-го порядка от многочлена степени n - есть величина постоянная, а конечные разности n+1-го порядка равны нулю. Для вычисления значений функции в начале таблицы требуется построить интерполяционный многочлен степени n такой, что выполнены условия интерполяции Pn ( x0 ) y0 ,..., Pn ( xn ) yn . В силу единственности многочлена степени n, построенного по n+1 значениям функции f(x) многочлен Pn ( x ) , в конечном счете, совпадает с многочленом Лагранжа. Найдем этот многочлен в виде: Pn ( x ) a0 a1 ( x x0 ) a2 ( x x0 )( x x1 ) ... an ( x x0 )...( x xn1 ) , где аi(i=0,1,…, n) – неизвестные коэффициенты. Для нахождения а0 положим x x0 . Тогда P ( x0 ) a0 , отсюда а0=у0. Для вычисления a1 рассмотрим первую конечную разность для многочлена Pn(x) в точке х. 43 Pn ( x ) Pn ( x h ) Pn ( x ) a0 a1 ( x x0 h ) ... an ( x x0 h ) ...( x xn1 h ) a0 a1 ( x x0 ) ... an ( x x0 )...( x xn1 ). В результате преобразований получим Pn ( x ) h a1 2ha2 ( x x0 ) ... n han ( x x0 )...( x xn1 ). Вычислим первую конечную разность многочлена Pn(x) в точке х0 y 0 . h Чтобы определить коэффициент а2, составим конечную разность второго порядка Pn ( x0 ) a1 h , но Pn ( x0 ) f ( x1 ) f ( x0 ) y1 y0 y0 , откуда a1 2 Pn ( x ) Pn ( x h ) Pn ( x ). a2 2 y0 2!h 2 Отсюда после преобразования получим . Вычисляя конечные разности более высоких порядков и полагая х=х 0, i y0 придем к общей формуле для определения коэффициентов: ai (i=0,1,2,…,n). i!h i Подставим значения a i в интерполяционную формулу Ньютона: многочлен, в результате получим первую y0 n y0 pn ( x ) y0 ( x x0 ) ... ( x x0 )...( x xn 1 ). n 1!h n!h Первую интерполяционную формулу можно записать в том виде, в котором ее удобнее использовать для интерполирования в начале таблицы. Для этого введем переменную q=(x-x0)/h, где h-шаг интерполирования, а q-число шагов. Тогда первая формула примет вид Pn ( x ) y 0 q y 0 q( q 1 ) 2 q( q 1 )...( q n 1 ) n y 0 ... y0 . 2! n! 5.2.2 Вторая интерполяционная формула Ньютона Эта формула используется для интерполирования в конце таблицы. Построим интерполяционный многочлен вида Pn ( x ) a0 a1 ( x xn ) a2 ( x xn )( x xn1 ) ... an ( x xn )...( x x1 ). Неизвестные коэффициенты а0,а1,…,аn подберем так, чтобы были выполнены равенства Pn ( x0 ) y0 , Pn ( x1 ) y1 ,..., Pn ( xn ) yn . достаточно, чтобы i Pn (xn i ) i yn i (i=0,1,…,n). В случае, если положить 44 Для этого необходимо и x xn , то сразу определяется коэффициент а0 Pn ( x ) yn a0 . Из выражения для первой конечной разности найдем a1 : Pn ( x ) 1 ha1 2 ha2 ( x xn1 ) ... n han ( x x n1 )( x xn2 )...( x x1 ). Отсюда, полагая х=хn-1 получим a1 разности найдем а2: a 2 ai i y ni i 2 y n2 2! h 2 y n1 . Из выражения для второй конечной h . Общая формула для коэффициента аi имеет вид . i! h Подставим эти коэффициенты в интерполяционную формулу Ньютона: формулу многочлена и получим вторую yn1 n y0 Pn ( x ) yn ( x xn ) ... ( x xn )...( x x1 ). h n! h n На практике используют формулу Ньютона в другом виде. Положим q=(x-xn)/h. Тогда Pn ( x ) y n qy n 1 q( q 1 ) 2 q( q 1 )...( q n 1 ) n y n 2 ... y0 . 2! n! 5.3 Интерполирование сплайнами Многочлен Лагранжа или Ньютона на всем отрезке a , b с использованием большого числа узлов интерполирования часто приводит к плохому приближению, что объясняется накоплением погрешностей в ходе вычислений. Кроме того, из-за расходимости процесса интерполирования увеличение числа узлов не обязано приводить к повышению точности вычислений. В силу вышесказанного на практике весь отрезок a ,b разбивается на частичные интервалы и на каждом из них приближающая функция f (x ) заменяется многочленом невысокой степени. Такая интерполяция называется кусочно-полиномиальной интерполяцией. Определение. Сплайн - функцией называют кусочно-полиномиальную функцию, определенную на отрезке a , b и имеющую на этом отрезке некоторое число непрерывных производных. Слово сплайн означает гибкую линейку, которую используют для проведения гладких кривых через определенное число точек на плоскости. Преимущество сплайнов сходимость и устойчивость процесса вычисления. Рассмотрим частный случай (часто используемый на практике), когда сплайн определяется многочленом третьей степени. 45 5.3.1 Построение кубического сплайна Пусть на отрезке a , b в узлах сетки заданы значения некоторой функции f ( x ) , т.е. a x0 x1 x2 ... xn b , yi f ( xi ) (i= 0,1,…, n). Сплайном, соответствующим этим узлам функции f ( x ) называется функция S(х), которая: 1) на каждом частичном отрезке является многочленом третьей степени; 2) функция S ( x ) и ее первые две производные S ( x ), S ( x ) непрерывны на a , b ; 3) S ( xi ) f ( xi ) . На каждом частичном отрезке x i 1 , xi будем искать сплайн S ( x ) Si ( x ) , где Si ( x ) многочлен третьей степени Si ( x) ai bi ( x xi ) То есть для x xi 1 , xi ci di ( x xi ) 2 ( x xi ) 3 . 2 6 нужно построить (5.8) такую функцию S i ( x ) , где подлежат определению. Для всего отрезка интерполирования a , b , таким образом, необходимо определить 4n неизвестных коэффициента. ai , bi , ci , di S ( x ) bi ci ( x xi ) S ( x ) ci d i ( x xi ), di ( x xi ) 2 , 2 S i ( x ) ai y i . Доопределим a0 f ( x0 ) y0 . Требование непрерывности функции S(x) приводит к условиям Si ( xi ) Si 1 ( xi ), (i=0, 1,…,n-1). Отсюда из (5.8) получаем следующие уравнения: ci 1 d ( xi xi 1 ) 2 i 1 ( xi xi 1 )3 (i= 1,2,…,n-1). 2 6 Введем шаг интерполирования hi xi xi 1 . Тогда последнее равенство можно ai ai 1 bi 1 ( xi xi 1 ) hi2 hi3 переписать в виде hi bi ci di fi fi 1 (i= 1,2,…,n). Из непрерывности 2 6 h2 первой производной следует hi ci i d i bi bi 1 (i= 2,3,…,n), а из непрерывности 2 второй производной h d c c i i i i 1 (i= 2,3,…,n). Объединив все три вида уравнений, получим систему из 3n-2 уравнений относительно 3n неизвестных bi , ci , di . Два недостающих уравнения получим, задав граничные условия для функции S(x). Для этого воспользуемся граничными условиями для сплайн-функции в виде S ( a ) S ( b ) 0 (концы гибкой линейки свободны). Тогда получим систему уравнений 46 hi d i ci ci 1 , c0 cn 0 ,( i 1,2 ,..., n ) hi2 h c d i bi bi 1 ,( i 2 ,3,..., n ) i i 2 hi2 hi3 ci d i f i f i 1 ,( i 1,2 ,..., n ). hi bi 2 6 (5.9) Решая систему методом подстановки (исключаем из (5.9) неизвестные bi,di), получим систему: yi 1 yi y i yi 1 h c 2 ( h h ) c h c 6 ( ) i i 1 i i 1 i i 1 i 1 hi 1 hi c c 0 n 0 (5.10) (i= 1,2,…,n-1). Система (5.10) имеет трехдиагональную матрицу. Эта система может быть решена методом прогонки или Гаусса. После ее решения коэффициенты сплайна определим через коэффициенты сi с помощью явных формул di di , bi ci ci 1 , hi hi hi2 y yi 1 bi ci di i (i= 1,2,…,n). 2 6 hi 5.3.2 Сходимость процесса интерполирования кубическими сплайнами Доказывается, что при неограниченном увеличении числа узлов на одном и том же S (x ) f (x ) . a ,b отрезке Оценка погрешности интерполяции R( x ) f ( x ) S ( x ) зависит от выбора сетки и степени гладкости функции f(x). При равномерной сетке xi a i h (i=0,1,…,n) M 4 h4 f ( x ) Sh ( x ) , 8 где M 4 max | f [ a ,b ] IV ( x ) |. Другие постановки задачи интерполирования функций. 1. Если функция периодическая, то используется тригонометрическая 47 интерполяция с периодом l, которая строится с помощью тригонометрического многочлена Tn ( x ) a0 n kx K 1 l ak cos bk sin kx l , коэффициенты которого находятся из системы Tn ( xi ) f ( xi ) (i= 1,2,…,2n+1). 2. Выделяют приближение функций рациональными, дробно – рациональными и другими функциями. В данной книге эти вопросы не рассматриваются. 5.4 Аппроксимация функций методом наименьших квадратов К такой задаче приходят при статистической обработке экспериментальных данных с помощью регрессионного анализа. Пусть в результате исследования некоторой величины x значениям x1 , x 2 , x3 ,...,x n поставлены в соответствие значения y1 , y 2 , y 3 ,..., y n некоторой величины у. Требуется подобрать вид аппроксимирующей зависимости y=f(x), связывающей переменные х и у. Здесь могут иметь место следующие случаи. Во-первых: значения функции f(x) могут быть заданы в достаточно большом количестве узлов; во-вторых: значения таблично заданной функции отягощены погрешностями. Тогда проводить приближения функции с помощью многочлена нецелесообразно, т.к. - это неудобно делать, поскольку число узлов велико и пришлось бы строить несколько интерполяционных многочленов; - построив интерполяционные многочлены, мы повторили бы те же самые ошибки, которые присущи таблице. Будем искать приближающую функцию из следующих соображений: 1) приближающая функция не проходит через узлы таблицы и не повторяет ошибки табличной функции; 2) чтобы сумма квадратов отклонений приближающей функции от таблично заданной была минимальной. у отклонения х0 х1 хn-1 хn х Рисунок 6 – Графическое изображение отклонений Рассмотрим линейную задачу наименьших квадратов. Пусть даны функции 0 ( x ),1 ( x ),..., m ( x ) , назовем их базисными функциями. Будем искать приближающую (аппроксимирующую) функцию в виде линейной комбинации y Фm ( x ) c0 0 ( x ) c11( x ) ... cm m ( x ) . 48 (5.11) Такая аппроксимация называется линейной, а Фm(х) – обобщенный многочлен. Согласно критерию метода наименьших квадратов вычислим сумму квадратов отклонений таблично заданной функции от искомого многочлена в узлах: n n m ( yi Фm ( xi )) ( yi c0 0 ( xi ) ... cm m ( xi )) 2 . 2 i 0 (5.12) i 0 Но нам неизвестна степень обобщенного многочлена. Подберем ее так, чтобы было наименьшим и: - аппроксимирующая кривая не проходила через узлы таблицы; - получить приближение с заданной степенью точности. Выражение m можно рассматривать как функцию от неизвестных c0 ,..., cm . m Нас интересует, при каких значениях c0 ,..., cm , значение m будет минимально. Для этого воспользуемся условием существования экстремума, а именно, найдем частные производные от Получим систему вида: m по всем переменным c0 ,..., cm и приравняем их к нулю. n m 2 ( yi c0 0 ( xi ) ... cm m ( xi )) 0 ( xi ) 0 c i 0 0 . . . . . . . . . . . . . . . . n m 2 ( yi c0 0 ( xi ) ... cm m ( xi )) m ( xi ) 0 c i 0 m .. (5.13) Система (5.13) - система линейных уравнений относительно c0 ,..., cm . Введем определение, чтобы лучше записать (5.13). Определение. Скалярным произведением функции f на g на множестве точек x0 ,..., xn называется выражение ( f , g ) n f ( xi ) g ( xi ) . i 0 Тогда систему (5.13) можно записать в виде: c0 ( 0 , 0 ) c1 ( 0 ,1 ) ... c m ( 0 , m ) ( 0 , y ) c ( , ) c ( , ) ... c ( , ) ( , y ) 1 1 1 m 1 m 1 0 1 0 . . . . . . . . . . . . . . . . c0 ( m , 0 ) c1 ( m ,1 ) ... c m ( m , m ) ( m , y ) (5.13а) Системы (5.13) и (5.13а) будем называть нормальными системами уравнений. 49 Решив эти системы, мы найдем коэффициенты c0 ,..., cm , и следовательно, найдем вид аппроксимирующего многочлена. Напомним, что это возможно, если узлы не равноотстоящие и базисные функции линейно не зависимы. Осталось определить m. Алгоритм выбора степени ‘’m’’. В случае, когда m=n мы получим интерполяционный многочлен, поэтому m<<n. Так же необходимо задать числа 1 и 2, учитывая следующее: 1) 1 >0 и 2>0 должны быть такими, чтобы m находилось между ними; 2) первоначально m выбирают произвольно, но учитывая условие, что m<<n; 3) выбрав m, строят системы (5.13) и (5.13a), решив которые находят c0 ,..., cm ; 4) используя найденные коэффициенты вычисляется m и проверяется, попала ли она в промежуток между 1 и 2. Если попала, то степень многочлена выбрана правильно, иначе m > 1, то степень необходимо уменьшить хотя бы на единицу; б) если m <2, то степень необходимо увеличить хотя бы на единицу. а) если 5) затем строить приближающую функцию. Очень часто для приближения по методу наименьших квадратов используются k алгебраические многочлены степени mn, т.е. k ( x ) x . Тогда нормальная система (5.13) принимает следующий вид: m n ( xi j 0 i o j k n )c j yi xik (k= 0,1,…,m). i 0 (5.14) Запишем систему (5.14) в развернутом виде в двух наиболее простых случаях m=1 и m=2. В случае многочлена первой степени P1(x)=c0+c1x, нормальная система имеет вид n n ( n 1 )c0 ( xi )c1 yi i 0 i 0 n n n 2 ( xi )c0 ( xi )c1 yi xi . i 0 i 0 i 0 (5.15) Для многочлена второй степени P2(x)=c0+c1x+c2x2, нормальная система имеет вид n n n 2 ( n 1 )c0 ( xi )c1 ( xi )c2 yi i 0 i 0 i 0 n n n n 2 3 ( xi )c0 ( xi )c1 ( xi )c2 yi xi . i 0 i 0 i 0 i 0 n n n n ( xi2 )c0 ( xi3 )c1 ( xi4 )c2 yi xi2 i 0 i 0 i 0 i 0 50 (5.16) 6 Численные методы решения задачи Коши для обыкновенных дифференциальных уравнений и систем дифференциальных уравнений Будем рассматривать задачу Коши для системы обыкновенных дифференциальных уравнений(ОДУ).Запишем систему в векторной форме du f (t , u) , dt (6.1) где: u -искомая вектор-функция; t-независимая переменная; u(t ) (u1 (t ),..., u m (t )) ; f (t ) ( f 1 ,..., f m) , m-порядок системы; u1 (t ),...,u m (t ) координаты; t0; u ( 0) u 0 . Запишем систему (6.1) в развернутом виде d ui f i (t , u1 ,..., u m) , dt (6.2) 0 где: i=1,...,m; u i (0) u i . В случае i=1 -это будет ОДУ 1-го порядка, а при i=2 - система из двух уравнений первого порядка. В случае i=1 решение задачи Коши предполагает нахождение интегральной кривой, проходящей через заданную точку и удовлетворяющую заданному начальному условию. Задача состоит в том, чтобы найти искомую вектор-функцию u, удовлетворяющую (6.1) и заданным начальным условиям. Известны условия, гарантирующие существование и единственность решения (6.1) или (6.2). f i ( i 1,..., m ) непрерывны по всем Предположим, что функции 0 аргументам в некоторой замкнутой области D={t a, u i u i b }, где a,b-известные константы. Из непрерывности функций следует их ограниченность, т.е. функции f i сверху ограничены некоторой константой М: | f i |<M (где М 0) всюду в области D и пусть в области D функции f i удовлетворяют условию Липшица по аргументам u1 ,..., u m . Это значит, что | f i (t, u 1 ,....,u m ) f i (t, u 1 ,...,u m )| L(|u 1 u 1| .... | u m u m |) для любых двух точек (t , u 1 ,...., u m) и существует единственное решение задачи (6.1) (t , u 1 ,..., u m) из области D. Тогда u1 u1 (t ),...., u m u m (t ) ,определенное при t T min a, b / M (6.3) и принимающее при t=0 заданное начальное значение. Существует два класса методов для решения задачи (6.1): 1) семейство одношаговых методов(Рунге-Кутта); 51 2) семейство многошаговых(m-шаговых) методов. Сначала рассмотрим одношаговые методы. Для простоты возьмем одно уравнение du f (t , u ) , dt (6.4) где: u (0) u 0 ; t>0. По оси t введем равномерную сетку с шагом , т.е. рассмотрим систему точек ωτ t n n t,n 0,1,2,...... Обозначим через u (t ) точное решение (6.4) , а через y n y( t n ) приближенные значения функций u в заданной системе точек. 6.1 Семейство одношаговых методов решения задачи Коши 6.1.1 Метод Эйлера (частный случай метода Рунге-Кутта) Уравнение (6.4) заменяется разностным уравнением y n 1 y n f (t n , y n ) , n=0,1,2,…, y 0 u 0 . В окончательной форме значения y n 1 можно определить по явной формуле yn1 yn τ f( t n , yn ). (6.5) Вследствие систематического накопления ошибок метод используется редко или используется только для оценки вида интегральной кривой. Определение 1. Метод сходится к точному решению в некоторой точке t , если y n u (t n ) 0, при , t n t . Метод сходится на интервале (0,t], если он сходится в любой точке этого интервала. Определение 2. Метод имеет р-й порядок точности, если существует такое число p р>0, для которого y n u (t n ) O( ), при , где: - шаг интегрирования; O-малая величина порядка . p Так как u n 1 u n u (t n) O( ) , то метод Эйлера имеет первый порядок точности. Порядок точности метода совпадает с порядком точности разностной аппроксимации исходного дифференциального уравнения. 6.1.2 Методы Рунге-Кутта Метод Рунге-Кутта второго порядка точности 52 Отличительная особенность методов Рунге-Кутта от метода (6.5) заключается в том, что значение правой части уравнения вычисляется не только в точках сетки, но и также в середине отрезков(промежуточных точках). Предположим, что приближенное значение y n решения задачи в точке t t n уже известно. Для нахождения y n 1 поступают так: 1) используют схему Эйлера в таком виде y n1 2 y n 0,5 f (t n , y n) (6.6) и отсюда вычисляют yn 1 2 ; 2) воспользуемся разностным уравнением вида y n 1 y n f (t n 0,5 , y n 1 2 ) , (6.7) откуда найдем значение y n 1 . Далее подставим значение y n 1 2 y n 0,5 в уравнение (6.7). Тогда y n 1 y n f(t n 0 ,5 τ,y n 0 ,5 τ f n ) , τ (6.8) где f n f (t n , y n ) . Можно показать, что метод (6.8) имеет второй порядок точности, т.е. yn u(t ) O( 2 ) . Метод (6.8) называется методом прогноза и коррекции в том смысле, что на первом этапе решение как бы предсказывается с точностью O(τ ) , а на втором этапе с точностью до O ( ) (второй порядок точности). 2 Будем рассматривать явные методы. Задаем числовые коэффициенты a i , bij , i=2,...,m; j=1,2,...,(m-1) и =1,2,...,m . Последовательно вычисляем функции k1 f(t n ,y n ) ; k 2 f(t n a 2 τ,y n b21 τ k1 ) ; k 3 f(t n a3 τ,y n b31 τ k1 b32 τ k 2 ) ; …………………………………………….. k n f(t n a n τ,y n bm1 τ k1 ... bmm1 τ k m1 ) . y n1 y n m i k i находим значения y n 1 . Здесь Затем из формулы i 1 a i , bij , i -числовые параметры, которые определяются или выбираются из соображений точности вычислений. При m=1 и =1 получается метод Эйлера, при m=2 получаем семейство методов 53 y n1 y n ( 1k1 2 k 2 ) , (6.9) где: k1 f (t n , y n ) ; k 2 f (t n a 2 , y n b21k1 ) ; y0=u0. Семейство определяет явные методы Рунге-Кутта. Подставив нужные 1 и 2, получаем окончательную формулу. Точность этих методов совпадает с точностью аппроксимирующего метода и равна O ( ) . Невязкой, или погрешностью аппроксимации метода (6.9) называется величина 2 u un n n1 1 f (t n , u n ) 2 f (t n a 2 , u n b21f (t n , u n )) , полученная заменой в (6.9) приближенного решения точным решением. При 1+2=1 получим первый порядок точности. Если же потребовать дополнительно 2 b21 2 a 2 0,5 , то получим методы второго порядка точности вида y n 1 y n (1 ) f (t n , y n ) f (t n a , y n af (t n , y n )) при a 0,5 . Приведем один из методов Рунге-Кутта третьего порядка точности yn 1 yn 1 (k1 4k 2 k3 ) , τ 6 где: k1 f (t n , y n ) ; τ k2 f(t n ,yn k1 ) ; k3 f (t n , yn k1 2k 2 ) . 2 2 Метод Рунге-Кутта 4-го порядка точности y n1 y n τ где: 1 ( k1 2 k 2 2 k 3 k 4 ) , 6 k 2 f( t n k1 f( t n , y n ); k 4 f( t n τ, yn τ k 3 ). τ τ , y n k1 ); 2 2 k 3 f( t n τ τ , y n k 2 ); 2 2 Методы Рунге-Кутта сходятся и порядок их точности совпадает с порядком аппроксимации разностным отношением. Теорема. Пусть правая часть уравнения (6.4) f (t , u ) удовлетворяет условию Липшица по аргументу u с константой L, и пусть n -невязка метода Рунге-Кутта. Тогда для погрешности метода при n T справедлива оценка 54 y n u(t n ) TeT max n , где: Lm (1 Lb ) m 1 ; max i ; b max bij . i, j i На практике обычно пользуются правилом Рунге. Для этого сначала проводят 2 вычисления с шагом , затем - 2 . Если y n - решение при шаге , а y 2 n - при шаге 2 , то справедлива оценка y 2n2 u (t n ) 16 2 y 2n y n . Тогда за оценку 15 погрешности при шаге 2 принимают величину max i y n y 2 n2 15 . 6.2 Многошаговые разностные методы решения задачи Коши для обыкновенных дифференциальных уравнений Рассмотрим задачу Коши для обыкновенного дифференциального уравнения du f (t , u ) , dt (6.10) где u (0) u 0 . Для решения задачи Коши для уравнения (1) при t>0 введем равномерную сетку с постоянным шагом ω τ t n n τ,n 0 ,1,.... Введем понятие линейного m шагового разностного метода для решения задачи (6.10). Линейным m-шаговым методом называется система разностных уравнений a 0 y n a1 y n 1 ... a m y n m b0 f n b1 f n 1 ... bm f n m , τ (6.11) где: n=m,m+1...; a k , bk -числовые коэффициенты не зависящие от n; k=0,1,…,m. Систему (6.11) будем рассматривать как рекуррентные соотношения, выражающие новое значения y n y (t n ) через ранее найденные значения y n 1 , y n 2 ,..., y n m , причем расчет начинают с индекса n=m, т.е. с уравнения a 0 y m a1 y m 1 ... a m y 0 b0 f m b1 f m 1 ... bm f 0 . τ Отсюда следует, что для начала расчета по формулам (6.11) надо знать m предыдущих значений функции y, причем y 0 =u 0 . Эти предыдущие m значений могут быть найдены одним из одношаговых методов Рунге-Кутта. 55 Отличие от одношаговых методов состоит в том, что по формулам (6.11) расчет ведется только в точках сетки. Определение. Метод (6.11) называется явным, если коэффициент b 0 =0. Тогда значение y n легко выражается через y n 1 , y n 2 ,..., y n m . В противном случае метод называется неявным, и для нахождения y придется решать нелинейное уравнение вида m a0 a y n b0 f(t n ,y n ) (bk t nk k y nk ) . τ τ k 1 (6.12) Обычно это уравнение решают методом Ньютона при начальном значении y n( 0) y n 1 . Коэффициенты уравнения (6.11) определены с точностью до множителя, m тогда, чтобы устранить этот произвол, вводят условие bk 1 , с тем условием, что k 0 правая часть (6.11) аппроксимирует правую часть уравнения (6.10). На практике используют частный случай методов (6.11), т.н. методы Адамса, т.е. когда производная u (t ) аппроксимируется разностным отношением, включающим две соседние точки t n и t n 1 . Тогда a 0 a1 1 ; ak =0, k=2,...,m и y n y n1 m bk f nk . (6.13) k 0 Это и есть методы Адамса. При b 0 =0 метод будет явным, в противном случае неявным. 6.2.1 Задача подбора числовых коэффициентов aк , bк Выясним, как влияют коэффициенты ak, bk на погрешность аппроксимации уравнения (6.11), на устойчивость и сходимость. Определение. Невязкой, или погрешностью аппроксимации методов (6.11) называется функция m rn ak k 0 un k m bk f (tn k , un k ) , (6.14) k 0 где u (t ) -точное решение дифференциального уравнения (6.10). Если разложить функции u n k u (t n , k ) в ряд Тейлора в точках t t n равномерной сетки, окончательно получим функцию m rn ( k 0 56 ak p m )U (t n ) ( (k ) l 1 (a k l 1 k 0 U (l ) (t n ) k bk )) O( p ) . l (l 1)! (6.15) Из вида функции rn следует, что порядок аппроксимации будет равен p, если выполнены условия m ak 0; k 0 m k l 1 (ka k k 0 m bk lbk ) 0; (6.16) 0, k 0 где l=1,...,p. Условия (6.16) представляют собой СЛАУ относительно неизвестных a 0 ,..., a m , b0 ,..., bm . Их количество равно 2(m+1). Решив систему (6.16), получаем неизвестные числовые коэффициенты. Для неявных методов наивысшим порядком аппроксимации p=2m, а для неявных – p=2m-1. Запишем систему (6.16) для методов Адамса m l k l 1bk 1; k 1 (6.17) m b0 1 b k , k 1 где l=2,...,p . Отсюда наивысший порядок аппроксимации для неявного метода p=m+1, для явного – p=m. 6.2.2 Устойчивость и сходимость многошаговых разностных методов Наряду с системами уравнений однородные разностные уравнения вида (6.11) будем a 0Vn a1Vn 1 ... a mVn m 0 , рассматривать т.н. (6.18) где n=m,m+1,... . Будем искать его решение в виде функции Vn q n , где q-число подлежащее определению. Подставив V n в (6.18) получаем уравнение для нахождения q a 0 q m a1 q m 1 ... a m1 q a m 0 . (6.19) Уравнение (6.19) принято называть характеристическим уравнением для разностных методов (6.11). Говорят, что разностный метод (6.11) удовлетворяет условию 57 корней, если все корни уравнения (6.19) q1 ,..., q m лежат внутри или на границе единичного круга комплексной плоскости, причем на границе нет кратных корней. Разностный метод (6.11), удовлетворяющий условию корней, называется устойчивым методом. Теорема. Пусть разностный метод (6.11) удовлетворяет условию корней и выполнено условие f (t , u ) L при 0 t T . Тогда при m tn n T , nm и достаточно малых будет выполнена оценка y n u (t n ) M ( max y j u (t j ) max rk ) , 0 j m 1 0 k n m (6.20) где: rk -погрешность аппроксимации; y j u (t j ) -погрешность в задании начальных условий; M=const. Методы Адамса удовлетворяют условию корней, т.к. a0=-a1=1, следовательно, q=q1=1. 6.2.3 Примеры m-шаговых разностных методов Адамса для различных m Явные методы. При m=1 порядок точности p=1. Тогда метод описывается формулой y n y n 1 f n 1 . В этом случае получаем метод Эйлера. При m=2 порядок точности p=2. Тогда метод описывается формулой y n y n 1 3 1 f n 1 f n 2 . 2 2 При m=3 порядок точности p=3. Тогда метод описывается формулой y n y n 1 1 (23 f n 1 16 f n 2 5 f n 3 . 12 При m=4 порядок точности p=4. Метод описывается формулой y n y n 1 1 (55 f n 1 59 f n 2 37 f n 3 9 f n 4 ) . 24 Неявные формулы Адамса. m=1, p=2, m=2, p=3, 58 y n y n 1 y n y n 1 1 ( f n f n 1 ) -метод трапеций; 2 1 (5 f n 8 f n 1 f n 2 ) ; 12 m=3, p=4, y n y n 1 1 (9 f n 19 f n 1 5 f n 2 f n 3 ) . 24 Неявные методы содержат искомое значение y n нелинейным образом, поэтому для его нахождения применяют итерационные методы решения нелинейных уравнений. 6.3 Численное интегрирование дифференциальных уравнений жестких систем обыкновенных Жесткие системы можно сравнить с плохо обусловленными системами алгебраических уравнений. Рассмотрим систему дифференциальных уравнений(ДУ) du f (t , u) , dt (6.21) где u (0) u 0 . Для решения (6.21) рассмотрим разностные методы вида m 1 m a k y nk bk f( t nk , y nk ) , τ k 0 k 0 (6.22) где n= m, m+1, m+2,…. Устойчивость и сходимость методов (6.22) определяется расположением корней характеристического уравнения, т.е. |q|1 - корни принадлежат единичной окружности. Среди методов (6.22) выделим те, которые позволяют получить асимптотически устойчивые решения. Пример. В качестве частного случая (6.21) рассмотрим уравнение вида du u , dt (6.23) t где: u (0) u0 ; <0; u (t ) u 0 e - решение ДУ. При <0 решение есть монотонно убывающая функция при t. Для этого решения можно записать при любом шаге >0 u (t ) u (t ) , (6.24) что означает устойчивость решения. Рассмотрим для задачи (6.23) метод Эйлера y n 1 y n yn , где: n=0, 1, 2, …, y n 1 q y n , q-промежуточный параметр, равный 1+. 59 Оценка (6.24) для метода Эйлера будет выполнена тогда и только тогда, когда |q|. Шаг лежит в интервале 0 < <. Метод Эйлера для задачи (6.23) устойчив при выполнении этого условия. Определение 1. Разностный метод (6.22) называется абсолютно устойчивым, если он устойчив при любом >0. Определение 2. Разностный метод называется условно-устойчивым, если он устойчив при некоторых ограничениях на . Например, метод Эйлера для (6.23) условно-устойчив, т.к. 0 < <. Примером абсолютно устойчивого метода является неявный метод Эйлера y n 1 y n y n 1 , q (1 ) 1 1 . Замечание. Условная устойчивость является недостатком явных методов в связи с тем, что приходится выбирать мелкий шаг интегрирования. Пример для задачи (6.23). Если =-200, тогда 0.01. Если мы рассмотрим интервал (0,1], то необходимо будет 100 шагов. Неявные методы со своей стороны приводят к решению на каждом шаге нелинейного уравнения, но это уже недостаток неявного метода. 6.3.1 Понятие жесткой системы ОДУ Замечание. Все вышерассмотренные методы легко реализуются на примере одного уравнения и легко переносятся на системы ДУ, но при решении систем возникают дополнительные трудности, связанные с разномасштабностью описанных процессов. Рассмотрим пример системы двух уравнений: d u1 dt a1 u1 0 , du 2 a2 u2 0 dt где: t >0; a1,a2>0. Это система однородных независимых ДУ a t u1(t) u1( 0 ) e 1 . a t 2 u 2(t) u 2( 0 ) e Решение монотонно убывает с ростом t. Пусть коэффициент а2 на порядок и выше больше а1, т.е. а2>>a1. Тогда компонента u2 затухает гораздо быстрее u1, начиная с некоторого момента времени t и тогда решение задачи u(t) полностью будет определяться поведением компоненты u1. Однако при численном решении данной задачи шаг интегрирования будет определяться компонентой u2, несущественной с точки зрения поведения решения системы. Рассмотрим метод Эйлера для решения данной системы 60 u1(n1 ) u1(n) a u1(n) 0 τ . (n1 ) (n) u u 2 2 a u 2(n) 0 τ Он будет устойчив, если на наложены ограничения τ a1 2 τ a2 2 . Учитывая, что a 2 >> a1 , получаем окончательное ограничение на 2 . a2 Такие трудности могут возникнуть при решении любых систем ОДУ. Рассмотрим в качестве примера систему du Au, dt (6.25) где А-квадратная матрица m*m. Если матрица А имеет большой разброс собственных чисел, то возникают проблемы с разномасштабностью описываемых системой процессов. Допустим, что матрица А постоянна (т.е. не зависит от t). Тогда система (6.21) будет называться жесткой, если: 1) вещественные части собственных чисел k 0 для всех k, где к=1,…,m; 2) число S max | Re k | велико (десятки и сотни), и число S называется min | Re k | числом жесткости системы. Если же матрица А зависит от t, то и собственные числа зависят от t и k зависят от t. Решение жесткой системы (6.25) содержит как быстроубывающие, так и медленно убывающие составляющие. 6.3.2 Некоторые сведения о других методах решения жестких систем Разностные методы (6.22) для решения жестких систем на практике используются в виде методов Гира (неявный разностный метод) и метода матричной экспоненты(метод Ракитского). 6.3.2.1 Методы Гира Это частный случай методов (6.22), когда коэффициент b0 1 , b1 ,...,bm 0 . Запишем числовые коэффициенты, которые определяются из условия p-го порядка точности аппроксимации системы разностными методами 61 m a0 a k ; k 1 m k ak 1 ; k 1 m k l ak 0, k 1 (6.26) где l=2,...,p. Решив систему линейных уравнений (6.26) с учетом предыдущих условий, получаем все нужные коэффициенты. Трехшаговый метод Гира (частный случай методов (6.22) с учетом условий (6.26)) имеет вид 11 3 1 y n 3 y n1 y n2 y n3 f ( t n , y n ) . 6 2 3 (6.27) При m=4, получаем четырехшаговый метод Гира 25 y n 48 y n 1 36 y n 2 16 y n 3 3 y n 4 f(t n ,y n ) . 12 τ (6.28) Запишем систему (6.26) в виде a1 2 a 2 .... m a m 1 a 2 a .... 2 a 0 m 1 2 2 m . .......... .......... .......... ........ a1 2m a 2 .... mm a m 0 (6.29) Решив (6.29) для каждого случая можем найти коэффициенты a k , к=1,2,…,т. 6.3.2.2 Метод Ракитского(матричной экспоненты) решения систем ОДУ du Au, dt (6.30) где: u (u1 ,...,u n ) ; u(0) u 0 ; А-матрица размерности n*n. Допустим, что матрица А - постоянная, т.е. ее элементы не зависят от времени. Система (6.30)–однородная, с постоянными коэффициентами. Запишем аналитическое решение (6.30) u e At u0 , где e 62 At -матричная экспонента и (6.31) e At ( A t)2 ( A t)n E At ... +…. 2! n! (6.32) Пусть необходимо (6.30) проинтегрировать при значениях t=, 2, 3,…. A Если точно знать матрицу e , то точное решение в указанных точках можно получить по формуле (6.31), т.е. решение можно записать u |t e A u0 ; u |t 2 e A u x ; ……………..… Таким образом, задача сводится к тому, чтобы достаточно точно знать матрицу A . На практике поступают следующим образом: при больших рядом Тейлора нельзя воспользоваться в связи с его бесконечностью, т.е. для удовлетворительной точности пришлось бы взять много членов ряда, что трудно. Поэтому поступают так: отрезок [0,] разбивают на к-частей, чтобы длина h=/к удовлетворяла условию ||A*h||<0.1. Тогда запишем по схеме Горнера e e A h E A h(E Каждый столбец матрицы e Ah A h Ah A h (E (E ))). 2 3 4 - w j вычисляют по формуле Ah k w j ( e ) w j0 , где w j 0 - вектор столбец, в i-ой строке которого 1, а в остальных - нули. Если эта матрица найдена, то решение находится по (6.31). Для исследования разностных методов при решении жестких систем рассматривают модельное уравнение du u, dt (6.33) где -произвольное комплексное число. Для того, чтобы уравнение (6.33) моделировало исходную систему (6.30) его нужно рассматривать при таких значениях , которые являются собственными числами матрицы А. Многошаговые разностные методы (6.31) имеют вид m (a k μ bk ) y n k , (6.34) k 0 где: n=m, m+1…; . Если решение уравнения (6.34) искать в виде y n q , то для нахождения числа q получим характеристическое уравнение вида n 63 m mk 0. (a k μ bk ) q k 0 Для устойчивости метода достаточно выполнения условия корней | qk | 1. В случае жестких систем используются более узкие определения устойчивости. Предварительные сведения. Областью устойчивости разностных методов называется множество всех точек комплексной плоскости *, для которых разностный метод применительно к уравнению (6.33) устойчив. Определение 1. Разностный метод называется А-устойчивым, если область его устойчивости содержит левую полуплоскость комплексной полуплоскости, т.е. Re<0. Замечание. Решение модельного уравнения (6.33) асимптотически устойчиво при значениях Re<0, поэтому сущность А-устойчивого метода заключается в том, что Аустойчивый разностный метод является абсолютно устойчивым, если устойчиво решение исходного дифференциального уравнения. Так как класс А-устойчивых методов узок, то пользуются А()-устойчивым методом. Определение 2. Разностный метод (6.31) называется А()-устойчивым, если область его устойчивости содержит угол меньший , т.е. |arg(-)|<, где .Исходя из этого определяется, что при А() устойчивость совпадает с определением Аустойчивого метода. 6.4 Краевые задачи для обыкновенных дифференциальных уравнений Постановка краевой задачи. Рассматриваем дифференциальное уравнение порядка n(n2) y ( n) f ( x, y, y ,..., y ( n1) ) , (6.35) где: y k ( x 0 ) y 0 ; к=0,1,…,(n-1). Если сделаем замену переменных вида (k ) y y1 ; y1 y 2 ; ................................ y f ( x, y ,..., y ); 1 n 1 n 1 (k ) y k ( x0 ) y 0 , (6.36) то задача (6.35) сводится к задаче Коши для нормальной системы ОДУ порядка n. Типовые примеры краевых задач. Рассмотрим теперь дифференциальное уравнение F ( x, y, y ,..., y ( n ) ) 0 . (6.37) Для уравнения (6.37) краевая задача формулируется следующим образом: найти решение y=y(x), удовлетворяющее уравнению (6.37), для которой значения ее 64 производных в заданной системе точек x x i удовлетворяют n независимым краевым условиям, в общем виде нелинейным. Эти краевые условия связывают значения искомой функции y и ее производных до (n-1) порядка на границах заданного отрезка. 1. Рассмотрим уравнение второго порядка y f ( x, y, y ) . Необходимо найти решение уравнения, удовлетворяющее заданным краевым условиям: y(a)=A, y(b)=B, т.е. необходимо найти интегральную кривую, проходящую через две заданные точки (рисунок 7). Рисунок 7 – Краевые условия для случая 1 2. Рассмотрим уравнение y f ( x, y, y ) с краевыми условиями y (a ) A1 , y (b) B1 . Из графика на рисунке 8 видно, что tg()=A1 , tg()=B1. Здесь интегральная кривая пересекает прямые x=a и x=b под заданными углами и соответственно. 3. Смешанная краевая задача. Рассмотрим то же самое y f ( x, y, y ) с уравнение краевыми условими y(a)=A1 y’(b)=B1 . Геометрическую иллюстрацию этих краевых условий легко представить, используя рисунки 7 и 8. Рисунок 8 – Краевые условия для случая 2 Замечание. Краевая задача для уравнения (6.37) в общем случае может не иметь решений, иметь единственное решение, иметь несколько решений или бесконечное множество решений. 4. Поражение заданной цели баллистическим снарядом. Дифференциальные уравнения движения снаряда с учетом сопротивления воздуха имеют вид x E cos , y E sin g 65 где: x - вторая производная по времени; E=E(y,v) -известная функция высоты и скорости; v x 2 y 2 ; g=g(y)- ускорение силы тяжести; угол наклона к горизонту касательной к траектории движения снаряда; arctg Рисунок 9 – Траектория снаряда y . x Предполагая, что при t=t0 снаряд выпущен из точки, совпадающей с началом координат с начальной скоростью v0 под углом 0 , а в момент t=t1 поразит неподвижную мишень в точке M ( x1 , y1 ) получаем краевые условия x 0, y 0, x v 0 cos , y v 0 sin ,приt t 0 , x x1 , y y1 , приt t1 . Здесь неизвестны 0 и t1. Решив данную краевую задачу, можем найти начальный угол 0 arctg y 0 , где: x 0 x (t 0 ); y 0 y (t 0 ) ; 0 -угол, при котором поражается x 0 цель в точке M. 6.5 Решение линейной краевой задачи Рассмотрим важный частный случай решения краевой задачи, когда дифференциальное уравнение и краевые условия линейны. Для этого рассмотрим уравнение (n) (n1 ) P 0 (x) y (x) P1 (x) y (x) ... P n (x) y(x) f(x) , (6.38) где: Pi (x ) и f(x) известные непрерывные функции на отрезке [a, b]. Предположим, что в краевые условия входят две абсциссы x=a, x=b. Это двухточечные краевые задачи. Краевые условия называются линейными , если они имеют вид n 1 (k) (ν ) (k ) ) Rν (y) ( α(ν k y (a) β k y (b)) =, k 0 где: -заданные константы. Причем они одновременно не равны нулю, т.е. n 1 ( ) [| (k ) | | k |] 0 , при v=1,2,…,n. k 0 66 (6.39) Например, краевые условия во всех трех рассмотренных ранее задачах линейны, т.к. их можно записать в виде 0 y (a ) 1 y (a ) 1 0 y (b) 1 y (b) 2 причем 0 1,1 0, 1 A, 0 1, 1 0, 2 B , - для первой задачи. 6.6 Решение двухточечной краевой задачи второго порядка сведением к задаче Коши для линейного уравнения Запишем линейное уравнение второго порядка в виде y p( x) y q( x) y f ( x) , (6.40) где: p, q, f-известные непрерывные функции на некотором отрезке [a,b]. Требуется найти решение уравнения (6.40), удовлетворяющее заданным краевым условиям 0 y(a) 1 y (a) A, 0 y(b) 1 y (b) B. (6.41) Причем константы и одновременно не равны нулю 0 1 0, 0 1 0. Решение задачи (6.40), (6.41) будем искать в виде линейной комбинации y=Cu+V, где С - константа, u-общее решение соответствующего однородного уравнения u p( x) u q( x) u 0 , (6.42) а V-некоторое частное решение неоднородного уравнения V p( x) V q( x) V f ( x) . (6.43) Потребуем ,чтобы первое краевое условие было выполнено при любом C, C ( 0 u (a) 1 u (a)) ( 0 V (a) 1 V (a)) A , откуда следует, что 0 u (a) 1 u (a) 0 , 0 V (a) 1 V (a) A . 67 Тогда u (a) 1 k , u (a) 1 k (6.44) где k- некоторая константа, не равная нулю. Значение функции V и ее производная в точке а если коэффициент 0 V (a) A 0 , V (a) 0 (6.45) V (a) 0 , V (a) A 1 (6.46) и если коэффициент . 1 Из этих рассуждений следует, что функция u - есть решение задачи Коши для однородного уравнения (6.42) с начальными условиями (6.44), а функция V - есть решение задачи Коши для неоднородного уравнения (6.43) с начальными условиями (6.45) или (6.46) в зависимости от условий. Константу C надо подобрать так, чтобы выполнялись условия (6.41) (вторая строчка) в точке x=b C( 0 u(b) 1 u (b)) 0 V (b) 1 V (b) B . Отсюда следует, что C B ( 0 V (b) 1 V (b) , 0 u (b) 1 u (b) где знаменатель не должен быть равен нулю, т. е. 0 u(b) 1 u (b) 0 . (6.47) Если условие (6.47) выполнено, то краевая задача (6.35), (6.36) имеет единственное решение. Если же (6.47) не выполняется, то краевая задача (6.35), (6.36) либо не имеет решения, либо имеет бесконечное множество решений. 6.7 Методы численного решения двухточечной краевой задачи для линейного уравнения второго порядка 6.7.1 Метод конечных разностей Рассмотрим линейное дифференциальное уравнение 68 y p( x) y q( x) y f ( x) (6.48) с двухточечными краевыми условиями 0 y (a ) 1 y (a) A ; 0 y (b) 1 y (b) B ( 0 1 0, 0 1 0) , (6.49) где: p, q, f-известные непрерывные функции на некотором отрезке [a,b]. Одним из наиболее простых методов решения этой краевой задачи является сведение ее к системе конечно-разностных уравнений. Основной отрезок [a,b] делим на n - равных частей с шагом h=(b-a)/n, то есть рассматриваем равномерную сетку x i x 0 i h , i=0,1,…,n. Производные в исходном уравнении (6.48) заменяем конечно-разностными отношениями. Для внутренних точек y i 1 y i 1 y i y i ; 2h y i 2 2 y i y i 1 h2 (6.50) , где i=1,...,n-1. Для граничных точек x 0 a и x n b , чтобы не выходить за границы отрезка, производные заменяем отношениями y 0 y1 y 0 h , yn y n1 y n . h (6.51 ) Используя отношения (6.50), (6.51) исходное дифференциальное уравнение (6.48) аппроксимируем конечно-разностными уравнениями yi 1 2 yi yi 1 h 2 pi yi 1 yi 1 2h qi yi f i , (6.52 ) где i=1,...,n-1. Учитывая краевые условия, получим еще два уравнения y 2 4 y1 3 y 0 A y 0 1 0 2h . 3 y n 4 y n 1 y n 2 y B 1 0 n 2h (6.53 ) Таким образом получена линейная система n+1 уравнений с n+1 неизвестными y 0 , y1 ,..., y n , представляющими собой значения искомой функции y y(x) в точках x 0 , x1 ,..., x n . Решив эту систему, получим таблицу значений искомой функции y. 69 6.7.2 Метод прогонки (одна из модификаций метода Гаусса) При применении метода конечных разностей к краевым задачам для дифференциальных уравнений второго порядка получается система линейных алгебраических уравнений с трехдиагональной матрицей, т.е. каждое уравнение системы содержит три соседних неизвестных. Для решения таких систем разработан специальный метод – «метод прогонки». Для этого систему (6.52) перепишем в виде ~ yi 1 mi yi ni yi 1 f i h2 для внутренних точек (i=1,…,n-1), где: mi 1 2 qi h ; ni pi h 1 1 2 2 pi h 2 ; ~ fi pi h (6.54 ) fi . pi h 1 2 2 На концах отрезка x0=a и x n=b производные заменяем разностными отношениями y 0 y1 y 0 h и y n y n1 y n . h Учитывая эту замену получим еще два уравнения 0 y 0 1 0 yn 1 y1 y 0 h A; y n 1 y n h B. (6.55 ) Обратим внимание на внешний вид записи системы (6.54), (6.55). В каждом уравнении системы присутствует три ненулевых элемента. В первом и последнем - по два ненулевых коэффициента. Разрешая уравнение (6.54) относительно y i , получим ~ f n 1 yi i h 2 y i 1 i y i 1 . mi mi mi (6.56 ) Предположим, что с помощью полной системы (6.54), (6.55) из уравнения (6.56) исключена неизвестная y i 1 . Тогда это уравнение примет вид y i c i (d i y i 1 ) , где: c i , d i - некоторые коэффициенты; i=1,2,…,n-1. Отсюда 70 (6.57 ) y i 1 c i 1 (d i 1 y i ) . Подставляя это выражение в уравнение (6.54), получим ~ y i 1 mi y i ni ci 1 (d i 1 y i ) f i h 2 , а отсюда ~ ( f i h 2 ni c i 1 d i 1 ) y i 1 yi . mi ni ci 1 (6.58 ) Сравнивая (6.57) и (6.58), получим для определения с i и d i рекуррентные формулы ci 1 ~ ; d i f i h 2 ni ci 1 d i 1 ; i=1,…,n-1. mi ni ci 1 (6.59 ) Из первого краевого условия (6.55) и из формулы (6.57) при i=0 находим c0 1 0 h 1 ; d0 Ah 1 . (6.60 ) На основании формул (6.59), (6.60) последовательно определяются коэффициенты с i , d i (i=1,…,n-1) до с n 1 и d n 1 включительно (прямой ход). Обратный ход начинается с определения y n . Для этого из второго краевого условия (6.55) и из формулы (6.51) при i=n-1 найдем yn 0 h 1c n 1 d n 1 . 0 h 1 (c n 1 1) (6.61 ) Далее по формуле (6.57) последовательно находим y n1 , y n2 ,..., y0 . Заметим, что метод прогонки обладает устойчивым вычислительным алгоритмом. 71 7 Приближенное решение дифференциальных уравнений в частных производных В реальных физических процессах искомая функция зависит от нескольких переменных, а это приводит к уравнениям в частных производных от искомой функции. Как и в случае обыкновенных дифференциальных уравнений(ОДУ), в этом случае для выбора одного конкретного решения, удовлетворяющего уравнению в частных производных, необходимо задавать дополнительные условия (т.е. краевые условия ). Чаще всего такие задачи на практике не имеют аналитического решения и приходится использовать численные методы их решения, в том числе метод сеток, метод конечных разностей и так далее. Мы будем рассматривать класс линейных уравнений в частных производных. В общем виде эти уравнения записываются в виде 2u 2u 2u u A(x,y) 2 B(x,y) C(x,y) 2 a(x,y) xy x x y u b(x,y) c(x,y)u F(x,y) , y (7.1) где: A, B, C, a, b, c-заданные непрерывные функции двух переменных, имеющие непрерывные частные производные, u-искомая функция. Для сокращения записи введем обозначения u xx 2 u u 2u u u ; ; ; ux ; u yy xy 2 2 x xy y x uy u . y Будем рассматривать упрощенную форму записи (7.1) вида A( x, y )u xx B( x, y )u xy C ( x, y )u yy a( x, y )u x b( x, y )u y c( x, y )u F ( x, y ) (7.2) и рассмотрим частный случай (7.2), когда a=b=c=F0, т.е. A( x, y)u xx B( x, y)u xy C ( x, y)u yy 0 . (7.3) Путем преобразований уравнение (7.3) может быть приведено к каноническому виду (к одному из трех стандартных канонических форм) эллиптическому типу, гиперболическому типу, параболическому типу. Причем тип уравнения будет определяться коэффициентами А, В, С, а именно – знаком дискриминанта D=B2-4AC. Если D <0, то имеем уравнение эллиптического типа в точке с координатами x, y; если D=0, то (7.3)-параболического типа; если D>0, то (7.3)-гиперболического типа; если D не сохраняет постоянного знака, то (7.3)-смешанного типа. Замечание. Если А, В, С - константы, тогда каноническое уравнение (7.3) называется полностью эллиптического, параболического, гиперболического типа. 72 Введем понятие оператора Лапласа уравнений вида для сокращенной записи канонических 2u u u . x2 y2 Используя это определение, запишем сокращенные канонические уравнения всех трех типов 1. u=0. Это уравнение эллиптического типа, так называемое уравнение Лапласа. В механике это уравнение описывает стационарные тепловые поля, установившееся течение жидкости и т.д. 2.u=-f , где f-заданная непрерывная функция. Это уравнение Пуассона имеет эллиптический тип и описывает процесс теплопередачи с внутренним источником тепла. 3. a u u t , где a-константа. Не во всех уравнениях в качестве переменных будут выступать стандартные переменные x, y. Может быть также переменная времени. Это уравнение диффузии описывает процесс теплопроводности и является уравнением параболического типа. 2 2u a 2 u , а-константа. Это уравнение гиперболического типа - так 4. 2 t называемое волновое уравнение и оно описывает процесс распространения волн. 7.1 Метод сеток для решения смешанной параболического типа (уравнения теплопроводности) задачи для уравнения Смешанная задача означает, что следует найти искомую функцию, удовлетворяющую заданному уравнению в частных производных, краевым, а так же начальным условиям. Рассмотрим смешанную задачу для однородного уравнения теплопроводности u 2u k 2 , k=const>0. t x (7.4) Задано начальное условие u( x,0) f ( x) (7.5) u (0, t ) 1 ( x); u (a, t ) 2 ( x). (7.6) и заданы краевые условия первого рода Требуется найти функцию u(x,t), удовлетворяющую в области D(0<x a, 0<t T) условиям (7.5) и (7.6). Физически это можно представить как стержень, на концах которого поддерживается требуемый температурный режим, заданный условиями (7.6). 73 При проведении t t k получим замены u 2 u , т.е. k=1. t x 2 Задача решается методом сеток: строим в области D равномерную сетку с шагом h по оси x и шагом по t (см. рисунок 10). Приближенное значение искомой функции в точке ( xi , yi ) - u ( xi , yi ) обозначим через u ij . Тогда xi i h ; h a h ; i=0,1,...,n; t j j ; Рисунок 10 – Неявная схема j=0,1,...,m; T m . Заменим производные разностными отношениями u ui, j ui, j 1 O( ) ; t 2u ui 1, j 2ui , j ui 1, j O( ) . x 2 h2 В результате получим неявную двухслойную схему с погрешностью O(+h2) ui , j ui , j 1 Используя подстановку ui 1, j 2ui , j ui 1, j h2 . h 2 , выразим из этой схемы ui,j-1 ui , j 1 (2 1)ui, j ui 1, j ui 1, j , (7.7) где: u0,j=1(tj); un,j=2(tj). Получаем разностную схему, которой аппроксимируем уравнение (7.4). Эта схема (7.7) неявная, и выглядит так, как показано на рисунке 10. При построении схемы (7.7) получается система линейных уравнений с трехдиагональной матрицой. Решив ее любым способом (в частности, методом прогонки), получаем значения функции на определенных временных слоях. Так, на нулевом временном слое используем начальное условие Ui,0=f(xi), т.к. j=0. Эта неявная схема более устойчива для любых значений параметра >0. Есть и явная схема (рисунок 11), но она устойчива только при 1 2 , т.е. при h2 2 . 74 Рисунок 11 - Явная схема 7.2 Решение задачи Дирихле для уравнения Лапласа методом сеток Рассмотрим уравнение Лапласа 2 2 u u 0 . x2 y2 (7.8) Уравнение (7.8) описывает распространение электромагнитных волн(полей). Будем рассматривать уравнение Лапласа в прямоугольной области ( x, y ),0 x a,0 y b с краевыми условиями u (0, y ) f 1 ( y ) ; u (a, y ) f 2 ( y ) ; u ( x,0) f 3 ( x) ; u ( x, b) f 4 ( x) , где f1 , f 2 , f 3 , f 4 -заданные функции. Заметим, что чаще всего область бывает не прямоугольной. Введем обозначения uij=u(xi,yj). Накладываем на прямоугольную область сетку xi h i ; i=0,1,…,n; y j 1 j ; j=0,1,…,m. Тогда xn h n , y m l m . Частные производные аппроксимируем по формулам 2u u i 1 2 u i , j u i 1, j O(h 2); 2 2 x h 2u u i , j 1 2 u i , j u i , j 1 y 2 2 l O(l 2), и заменим уравнение Лапласа конечноразностным уравнением 75 Рисунок 12 – Схема “крест” u i 1, j 2 u i , j u i 1, j h 2 u i , j 1 2 u i , j u i , j 1 l 2 0, (7.9) где: i=1,…,n-1, j=1,...,m-1 (т.е. для внутренних узлов). Погрешность замены дифференциального уравнения разностным составляет величину О( h l ). Выразим ui,j при h=l, и заменим систему 2 2 u ij (u i 1, j u i 1, j u i , j 1 u i , j 1) / 4; u i 0 f 3 ( xi ); u im f 4 ( xi ); u 0 j f 1 ( y j ); (7.10) u nj f 2 ( y j ). Получаем систему (7.10) линейных алгебраических уравнений, которые можно решить любым итерационным методом (Зейделя, простых итераций и т.д.). При этом построении системы использовалась схема типа “крест”(рисунок 12). Строим последовательность итераций по методу Гаусса-Зейделя 1 ) 1 1 ) (s) (s) (s1 ) ( u(s u(s i,j i 1,j ui 1,j ui,j 1 ui,j 1 ) , 4 где s-текущая итерация. Условие окончания итерационного процесса max u ij( S 1) u ij( S ) . i, j (7.11) Условие (7.11) ненадежно и на практике используют другой критерий max u ij( S 1) u ij( S ) (1 v), i,j где v max u ij( S 1) u ij( S ) max u ij( S ) u ij( S 1) . Схема “крест “- явная устойчивая схема ( малое изменение входных данных ведет к малому изменению выходных данных). 76 7.3 Решение смешанной задачи для уравнения гиперболического методом сеток типа Рассмотрим уравнение колебания однородной и ограниченной струны. Задача состоит в отыскании функции u(x,t) при t>0, удовлетворяющей уравнению гиперболического типа 2 u 2 u C , t2 x2 (7.12) где: 0<x< a; 0<t<T, начальным условиям u(x,0 ) f(x); u (x,0 ) g(x); t (7.13) 0xa и краевым условиям u 0 ,t) μ1 (t); u(a,t) μ 2 (t); 0 t T. (7.14) Заменим С на сt и получим уравнение 2u t 2 2u x 2 и в дальнейшем будем считать С=1. Для построения разностной схемы решение задачи (7.12)-(7.14) построим в области D ( x, t ),0 x a,0 t T сетку x i ih ; i=0,1,…,n; a h n ; t j j ; j=0,1,…,m; m=T. Аппроксимируем (7.12) разностными производными второго порядка точности относительно шага u i,j 1 2 u i,j u i,j 1 τ 2 u i 1,j 2 u i,j u i 1,j h 2 . (7.15 ) Полагая =/h перепишем (7.15), выразив Ui,j+1. Таким образом получим трехслойную разностную схему ui,j 1 λ2 ( ui 1,j ui 1,j ) 2 ( 1 λ2 ) ui,j ui,j 1 , (7.16 ) 77 где: i=1,…,n; j=1,…,m. Задаем нулевые граничные условия 1(t)=0, (7.16) uoj 0 , u nj 0 для всех j. 2(t)=0. Тогда в Схема (7.16) называется трехслойной, т.к. она связывает значения искомой функции на трех временных слоях j-1, j, j+1. Численное решение задачи состоит в вычислении приближенных значений u ij решения u(x,t) в узлах ( xi , t j ) при i=1,…,n; j=1,…,m. Алгоритм решения основан на том, что решение на каждом следующем слое (j=2,3,..,n) можно получить пересчетом решений с двух предыдущих слоев (j=0,1,..,n-1) по формуле (7.16). При j=0 решение известно из начального условия u i 0 f ( x i ) . Для вычисления решения на первом слое (j=1) положим u u ( x, ) u ( x,0) (x,0 ) , t τ (7.17 ) тогда u i1 u i 0 g ( x i ) , i=1,2,…,n. Теперь для вычисления решений на следующих слоях можно использовать формулу (7.16). Описанная схема аппроксимирует задачу (7.12)-(7.14) с точностью O(+h). Невысокий порядок аппроксимации по объясняется грубостью аппроксимации по формуле (7.17). Схема будет устойчивой, если выполнено условие h . 78 Лабораторная работа № 1 Решение систем линейных алгебраических уравнений Точные методы Метод Гаусса Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий матрицу коэффициентов системы (а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а(n х n) = аnn); b — массив из n действительных чисел, содержащий столбец свободных членов системы (b(1) = b1, b(2)=b2,…b(n)=bn). Выходные параметры: b—массив из n действительных чисел (он же входной); при выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; error— признак правильности решения (код ошибки): если ks = 0, то в массиве b содержится решение системы, если error= 1, исходная система не имеет единственного решения (определитель системы равен нулю). Перед обращением к подпрограмме SIMQ необходимо: 1) описать массивы а и b. Если система содержит n уравнений, то массив а должен содержать n2 элементов, а массив b – n элементов; 2) присвоить значение параметру n, который равен числу уравнений системы; 3) присвоить элементам массивов а и b значения коэффициентов системы следующим образом: a(l) = a11, а(2) = а21, а(3) = а31,…а(n) = аn1 а(n+1) = а12, а(n+2) = а22… а(n x n) = аnn. b(1) = b1, b(2)=b2,…b(n)=bn 4) проверить соответствие фактических параметров по типу и порядку следования формальным параметрам подпрограммы SIMQ. Параметры а и b - величины вещественного типа, n и error - целого типа. Задание. Используя программу SIMQ, решить заданную систему трех линейных уравнений. Схема алгоритма приведена на рисунке 13. Порядок выполнения лабораторной работы: 1. Составить головную программу, содержащую обращение к SIMQ и печать результатов; 2. Произвести вычисления на ЭВМ. Пример. Решить систему уравнений x 1 x 2 x3 6 x1 x3 2 x 2 x x 8 2 3 1 79 Procedure SIMQ(Nn:integer; var Aa:Tmatr:var Bb:TVector;var Ks:integer); A I I>Nn J I>Nn+1 Aa[i,Nn+1]=Bb[i] Aa[i,j]=Aa[i,j] /V I=I+1 I J=J+1 J I I>Nn L J>Nn max=abs(aa[i,i]) V=Aa[i,i] k1=I J I>Nn+1 L J>Nn Aa[l,j]=Aa[l,j]-Aa[i,j]*V abs(aa[l,i])>max + J=I+1 J max=abs(aa[l,i]) K1=L L=L+1 L L=L+1 L I=I+1 I Max<eps Bb[nn]=Aa[Nn,Nn+1] + - I I<Nn-1 KS=0 KS=1 Bb[i]=Aa[i,Nn+1] K1<>I + J I>Nn+1 U=Aa[i,j] Aa[i,j]=Aa[k1,j] Aa[k1,j]=U J I>Nn+1 Bb[i]=Bb[i]-Aa[i,j]*Bb[j] J=I+1 J J=J+1 J I=Nn-1 I V=Aa[i,i] M1 Возв рат A Рисунок 13 – Схема алгоритма метода Гаусса 80 Текст программы: PROCEDURE SIMQ(Nn:Integer;Var Aa:TMatr;Var Bb:TVector;Var Ks:Integer); Label M1; Const Eps=1e-21; Var Max,U,V : Real; I,J,K1,L : Integer; Begin For I:=1 To Nn Do Aa[i,Nn+1]:=Bb[i]; For I:=1 To Nn Do Begin Max:=Abs(Aa[i,i]); K1:=I; {запоминает номер строки с максимальным элементом} For L:=I+1 To Nn Do If (Abs(Aa[l,i])>Max) Then Begin Max:=Abs(Aa[l,i]); K1:=L; End; I f(Max<Eps) Then Begin Ks:=1; Goto M1; End Else Ks:=0; If K1<>I Then For J:=I To Nn+1 Do {обмен местами элементов строк с максимальным элементом} Begin U:=Aa[i,j]; Aa[i,j]:=Aa[k1,j]; Aa[k1,j]:=U; End; V:=Aa[i,i]; {элемент на главной диагонали, являющийся максимальным } For J:=I To Nn+1 Do Aa[i,j]:=Aa[i,j]/V; For L:=i+1 To Nn Do {все последующие строки после строки с максимальным элементом}{при I=1: L=2 (2,2),(2,3)..(2,Nn+1) L=3 (3,2),(3,3),..(3,Nn+1) L=Nn (Nn,2), (Nn,3),.. (Nn,Nn+1)} Begin V:=Aa[l,i]; For J:=I+1 To Nn+1 Do Aa[l,j]:=Aa[l,j]-Aa[i,j]*V; End; End; Bb[nn]:=Aa[Nn,Nn+1]; {находим n-ый элемент решения} For I:=Nn-1 Downto 1 Do {находим в обратном порядке все элементы решения} Begin Bb[i]:=Aa[i,nn+1]; For J:=I+1 To Nn Do Bb[i]:=Bb[i]-Aa[i,j]*Bb[j]; End; M1:End; Вычисления по программе привели к следующим результатам: X(1)= .100000E+01 Х(2)= .200000Е+01 Х(3)= .З00000Е + 01 признак выхода 0 Варианты заданий для решения систем линейных алгебраических уравнений методом Гаусса приведены в таблице 1. Метод квадратных корней Холецкого Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий матрицу коэффициентов системы (а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а(n х n) = аnn); b — массив из n 81 действительных чисел, содержащий столбец свободных членов системы (b(1) = b1, b(2)=b2,…b(n)=bn). Выходные параметры: b—массив из n действительных чисел (он же входной); при выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p— количество операций. Схема алгоритма приведена на рисунке 14. Пример. Решить систему уравнений x 1 x 2 x3 6 x1 x3 2 x 2 x x 8 2 3 1 Текст программы: Procedure Holets(n:integer;a:TMatr;b:TVector;var x:TVector;var p:integer); Var i,j,k:integer; a11:real; Begin Out_Slau_T(n,a,b); For i:=1 To n Do Begin If i<>1 Then Begin If a[i,i]=0 Then Begin p:=0; error:=2; MessageDlg('!!!!',mtError,[mbOk],0); Exit; End; a[1,i]:=a[1,i]/a[1,1]; End; For j:=1 To i Do Begin For k:=1 To j-1 Do Begin a[i,j]:=a[i,j]-a[i,k]*a[k,j]; End; For i:=1 To n Do Begin For j:=1 To i-1 Do b[i]:=b[i]-a[i,j]*b[j]; If a[i,i]=0 Then Begin p:=0; error:=2; MessageDlg('!!!!',mtError,[mbOk],0); Exit; End; b[i]:=b[i]/a[i,i]; End; For i:=n DownTo 1 Do Begin For j:=n DownTo i+1 Do b[i]:=b[i]-a[i,j]*b[j]; End; x:=b; p:=2*n*n; End; Вычисления по программе привели к следующим результатам: X(1)= .100000E+01 Х(2)= .200000Е+01 Х(3)= .З00000Е + 01 82 procedure Xolets(n:integer;a:tmatr;b:t Vector;;var x:tvector;var p:integer) A J J>I-1 Out_Slau_T(n,a,b) b[i]=b[i]-a[i,j]*b[j] I I>N i<>1 J=J+1 J + a[i,i]=0 + a[1,i]=a[1,i] / a[1,1] p=0 I=I+1 I Возв рат b[i]=b[i]/ a[i,i] p=0 I=I+1 I Возв рат J J<I+1 K K>J-1 b[i]=b[i]-a[i,j]*b[j] a[i,j]=a[i,j]-a[i,k]*a[k,i] J=J-1 J + a[,j,i]=a[j,i]-a[j,k]*a[k,i] K=K+1 K j>1and j<i + I I<1 J J>I j<>i a[i,i]=0 J=J-1 I x=b + p=2*n*n a[i,i]=0 a[j,i]=a[j,i] / a[j,j] p=0 J=J+1 J Возв рат Возв рат I I>N A Рисунок 14 - Схема алгоритма метода Холецкого Тема лабораторной работы №1 для контроля знаний проиллюстрирована контрольно – обучающей программой. 83 Варианты заданий. Решить систему линейных уравнений вида Ах=b Таблица 1 Матрица А коэффициентов системы Номер варианта 1 2 1 2 3 4 5 6 7 8 9 10 11 12 1,84 2,32 1,83 2,58 1,32 2,09 2,18 2,17 3,15 1,54 3,69 2,45 1,53 2,35 3,83 2,36 2,51 2,59 3,43 4,17 4,30 3,88 3,00 2,67 3,40 2,64 4,64 2,53 3,95 2,78 2,16 3,55 4,85 2,69 2,73 Продолжение таблицы 1 84 2,25 2,60 2,06 2,93 1,55 2,25 2,44 2,31 3,22 1,70 3,73 2,43 1,61 2,31 3,73 2,37 2,40 2,41 3,38 4,00 4,10 3,78 2,79 '2,37 3,26 2,39 4,32 2,36 4,11 2,43 1,96 3,23 4,47 2,47 2,39 2,53 2,82 2,24 3,13 1,58 2,34 2,49 2,49 3,17 1,62 3,59 2,25 1,43 2,07 3,45 2,13 2,10 2,06 3,09 3,65 3,67 3,45 2,39 1,96 2,90 1,96 3,85 1,93 3,66 1,94 1,56 2,78 3,97 2,07 1,92 Столбец свободных членов b 3 -6,09 .-6,98 -5,52 -6,66 -3,58 -5,01 -4,34 -3,91 -5,27 -1,97 -3,74 -2,26 -5,13 -3,69 -5,98 1,48 1,92 2,16 5,52 6,93 7,29 10,41 8,36 7,62 13,05 10,30 17,89 12,66 21,97 13,93 13,16 21,73 29,75 19,37 19,43 2 1 13 14 15 16 17 18 19 20 21 22 23 24 25 2.93 3,72 4,47 4,96 4,35 4,04 3,14 4,07 2,84 4,99 3,19 4,43 3,40 2,57 4,47 4,89 2,83 3,00 3,72 3,78 4,33 4,76 4,59 4,83 4,06 4,56 3,21 4,58 3,75 4,18 4,43 2,95 5,11 4,38 2,93 3,47 4,78 3,74 4,02 4,18 2,52 3,47 4,10 4,53 4,39 3,65 2,69 3,79 2,44 4,50 2,89 4,02 2,92 2,26 4,03 4,40 2,50 2,55 3,21 3,44 3,88 4,24 4,24 4,36 3,53 4,20 2,73 4,04 3,39 3,70 3,88 2,58 4,62 3,82 2,55 2,98 4,22 3,36 3,51 3,61 3 2,02 3,06 3,63 4,01 3,67 3,17 2,17 3,37 1,95 3,97 2,47 3,53 2,40 1,84 3,57 3,87 2,08 2,07 2,68 3,02 3,39 3,71 3,82 3,88 3,01 3,78 2,25 3,52 2,97 3,22 3,36 2,16 4,14 3,30 2,14 2,50 3,70 2,94 3,04 3,09 20,80 30,74 36,80 40,79 40,15 36,82 28,10 40,77 27,68 49,37 33,91 47,21 32,92 28,66 50,27 55,03 33,28 33,59 43,43 46,81 53,43 58,73 59,54 62,33 52,11 61,86 42,98 61,67 53,38 59,28 62,62 44,16 46,68 65,34 46,41 54,78 75,81 63,26 67,51 70,03 Продолжение таблицы 1 85 1 26 27 28 29 30 86 2 4,07 5,30 5,11 4,90 3,79 4,01 4,25 3,86 5,40 3,35 5,41 3,88 3,05 4,14 5,63 4,28 4,79 4,54 4,50 3,27 3,43 3,84 3,34 4,82 2,94 4,88 3,30 2,64 3,61 5,03 3 3,87 4,32 4,03 4,09 2,81 2,91 3,43 2,87 4,30 2,53 4,41 2,78 2,23 3,14 4,52 84,43 95,45 91,69 94,18 71,57 75,45 86,07 77,12 108,97 70,69 115,38 81,07 67,17 91,43 125,40 Лабораторная работа №2 Решение систем линейных алгебраических уравнений Приближенные методы Метод Якоби Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий матрицу коэффициентов системы (а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а (nn) = аnn); b — массив из n действительных чисел, содержащий столбец свободных членов системы (b(1) = b1, b(2)=b2,…b(n)=bn), eps – малое число для условия окончания итерационного процесса. Выходные параметры: b—массив из n действительных чисел (он же входной); при выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p— количество итераций. Схема алгоритма приведена на рисунке 15. Пример. Решить систему уравнений с погрешностью ε=0,01 100 x1 6 x2 2 x3 200 6 x1 200 x2 10 x3 600 x 2 x 100 x 500. 2 3 1 Текст программы: Procedure Jackoby(n:integer;a:tmatr;b:tvector;Eps:real;var x:tvector;var p:integer); Var i,j:integer; x0:tvector; e,d,d1,d2,s:real; procedure Vector; {рассчитывает очередное приближение x0 через предыдущее х}] var i,j:integer; begin for i:=1 to n do begin x0[i]:=b[i]; for j:=1 to n do if j<>i then x0[i]:=x0[i]+a[i,j]*x[j]; end; end; function Normlm(x:Tvector):real; {рассчет нормы вектора как максимального по модулю элемента вектора} var y:real; i,j:integer; begin y:=abs(x[1]); for i:=1 to n do if abs(x[i])>y then y:=abs(x[i]); normlm:=y; end; procedure OutVec; var i:integer; begin for i:=1 to n do writeln(x0[i]); end; { Jackoby} 87 Begin error:=0; Out_Slau_T(n,a,b); for i:=1 to n do if a[i,i]=0 then begin MessageDlg('!!!!',mtError,[mbOk],0); error:=1; exit; end; d2:=0; for i:=1 to n do {рассчет норм d и d2} begin s:=a[i,i]; a[i,i]:=0;x0[i]:=0;b[i]:=b[i]/s; x[i]:=b[i]; for j:=1 to n do if j<>i then begin a[i,j]:=-a[i,j]/s; x0[i]:=x0[i]+abs(a[i,j]); d2:=d2+abs(a[i,j])*abs(a[i,j]); end; end; d2:=sqrt(d2); Out_Slau_T(n,a,b); d:=Normlm(x0); for i:=1 to n do{рассчет нормы d1} begin x0[i]:=0; for j:=1 to n do if j<>i then x0[i]:=x0[i]+abs(a[j,i]); end; d1:=normlm(x0); if d1<d then d:=d1; {поиск наименьшей нормы} if d2<d then d:=d2; if d>=1 then {проверка достаточного условия} begin writeln(‘достаточное условие не выполнено’); readln; exit; end; s:=d/(1-d); p:=0; {подсчет итераций} repeat p:=p+1; vector; { x0=b+Ax} for i:=1 to n do x[i]:=x0[i]-x[i]; d:=normlm(x); outvec;{вывод вектора x0} for i:=1 to n do x[i]:=x0[i]; until d*s<eps; End; Вычисления по программе привели к следующим результатам: X1=1,907 X2=3,1884 X3=4,917 Количество итераций:2 88 procedure Jakoby(n:integer;a:tmatr;b :tVector;eps;real;var x:tvector;var p:integer) A B x0[i]=0 I=I+1 I J J>N d=Normlm(x) Out_Slau_T(n,a,b) I I>N a[i,i]=0 + j<>i + Outvec x0[i]=x0[i]+abs(a[i,j]) Возв рат I I>N J=J+1 J x[i]=x0[i] I=I+1 I I=I+1 I d1=Normlm(x0) D*S<eps P I=I+1 I d2=0 I I>N d1<d + s=a[i,i] a[i,i]=0 b[i]=b[i]/ s x[i]=b[i] d=d1 J J>N j<>i Возв рат d2<d + d=d2 + a[i,j]=-a[i,j]/ s x0[i]=x0[i]+abs(a[i,j]) d2=d2+abs(a[i,j]* abs(a[i,j])) d>=1 + Возв рат J=J+1 J s=d/ (1-d) I=I+1 I p=o d2=sqrt(d2) P P=P+1 Out_Slau_T(n,a,b) Vector d=Normlm(x0) I I>N I I>N x[i]=x0[i]-x[i] A B Рисунок 15 - Схема алгоритма метода Якоби 89 Варианты заданий для решения систем линейных алгебраических уравнений методом Якоби приведены в таблице 2. Метод верхней релаксации Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий матрицу коэффициентов системы (а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а(n х n) = аnn); b — массив из n действительных чисел, содержащий столбец свободных членов системы (b(1) = b1, b(2)=b2,…b(n)=bn); eps – малое число для условия окончания итерационного процесса. Выходные параметры: b—массив из n действительных чисел (он же входной); при выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p— количество итераций. Схема алгоритма приведена на рисунке 16. Пример. Решить систему уравнений методом релаксации с погрешностью ε=0,01 и параметром релаксации w=1,8 100 x1 6 x2 2 x3 200 6 x1 200 x2 10 x3 600 x 2 x 100 x 500. 2 3 1 Текст программы: Procedure Relax(n:integer;a:tmatr;b:tvector;Eps,w:real;var x:tvector;var p:integer); Var i,j:integer; x0:tvector; e:real; Begin Out_Slau_T(n,a,b);For i:=1 To n Do x0[i]:=x[i];p:=0; Repeat For i:=1 To n Do Begin If a[i,i]=0 Then Begin p:=0; MessageDlg('!!!!',mtError,[mbOk],0); error:=2; Exit; End; x[i]:=w*b[i]/a[i,i]; For j:=1 To i-1 Do x[i]:=(1-w)*x[i]-w*a[i,j]*x[j]/a[i,i]; For j:=i+1 To n Do x[i]:=(1-w)*x[i]-w*a[i,j]*x0[j]/a[i,i]; End;e:=0; For i:=1 To n Do Begin If e<Abs(x[i]-x0[i]) Then e:=Abs(x[i]-x0[i]); x0[i]:=x[i];End;p:=p+1; Until e<=Eps;End; Вычисления по программе привели к следующим результатам: X1=2,860 X2=4,088 X3=5,654 Количество итераций:3 90 procedure relax(n:integer;a:tmatr;b:t Vector;eps,w :real;var x:tvector;var p:integer) A I I>N Out_Slau_T(n,a,b) I I>N e<abs(x[i]-x0[i]) X[0]=X[i] x0[i]=x[i] + e=abs(x[i]-x0[i]) I=I+1 I I=I+1 I p=0 p=p+1 P P=P+1 E<=EPS P I I=I+1 Возв рат a[i,i]=0 + p=0 x[i]=w *b[i] / a[i] Возв рат J J>I-1 X[i]=(1-w )*X[i]-w *a[i,j]*x[j] / a[i,i] J=J+1 J J J>N X[i]=(1-w )*X[i]-w *a[i,j]* x0[j] / a[i,i] J=J+1 J I=I+1 I e=0 A Рисунок 16 - Схема алгоритма метода релаксации Варианты заданий для решения систем линейных алгебраических уравнений методом верхней релаксации приведены в таблице 2. Метод Зейделя 91 Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий матрицу коэффициентов системы (а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а(n х n) = аnn); b — массив из n действительных чисел, содержащий столбец свободных членов системы (b(1) = b1, b(2)=b2,…b(n)=bn); eps – малое число для условия окончания итерационного процесса. Выходные параметры: b—массив из n действительных чисел (он же входной); при выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p— количество итераций. Схема алгоритма приведена на рисунке 17. Пример. Решить систему уравнений с погрешностью ε=0,01 100 x1 6 x 2 2 x3 200 6 x1 200 x 2 10 x3 600 x 2 x 100 x 500. 2 3 1 Текст программы: Procedure Zeidel(n:integer;a:tmatr;b:tvector;Eps:real;var x:tvector;var p:integer); Var i,j:integer; x0:tvector; e:real; Begin Out_Slau_T(n,a,b); For i:=1 To n Do x0[i]:=x[i]; p:=0; Repeat For i:=1 To n Do Begin If a[i,i]=0 Then Begin p:=0; MessageDlg('!!!!',mtError,[mbOk],0); error:=2; Exit; End; x[i]:=b[i]/a[i,i]; For j:=1 To i-1 Do x[i]:=x[i]-a[i,j]*x[j]/a[i,i]; For j:=i+1 To n Do x[i]:=x[i]-a[i,j]*x0[j]/a[i,i]; End;e:=0; For i:=1 To n Do Begin If e<Abs(x[i]-x0[i]) Then e:=Abs(x[i]-x0[i]); x0[i]:=x[i]; End; p:=p+1;Until e<=Eps;End; 92 procedure Zeidel(n:integer;a:tmatr;b:t Vector;eps:real;var x:tvector;var p:integer) A Out_Slau_T(n,a,b) I I>N I I>N e<abs(x[i]-x0[i]) e=abs(x[i]-x0[i]) X[0]=X[i] x0[i]=x[i] I=I+1 I p=0 I=I+1 I P e<=eps p=p+1 I I>N P Возв рат a[i,i]=0 p=0 x[i]=w *b[i] / a[i,i] Возв рат J J>I-1 X[i]=X[i]-a[i,j]*x[j] / a[i,i] J=J+1 J J J>N X[i]=X[i]-a[i,j]* x0[j] / a[i,i] J=J+1 J I=I+1 I e=0 A Рисунок 17- Схема алгоритма метода Зейделя Вычисления по программе привели к следующим результатам: 93 X1=1,907 X2=3,188 X3=4,917 Количество итераций:3 Тема лабораторной работы №2 для контроля знаний проиллюстрирована контрольно – обучающей программой. Варианты заданий Таблица 2 Номер варианта 1 1 Матрица системы .4000 -.0029 -.0055 -.0082 .0003 -.5000 -.0050 -.0076 2 .0008 -.0018 -1.4000 -.0070 2 1.7000 .0000 -.0003 -.0005 .0003 .8000 - .0002 -.0004 .0004 .0001 -.1000 -.0003 .0005 .0002 .0000 -1.0000 .6810 .4803 -.0802 -1.0007 3 3.0000 .0011 -.0005 -.0022 .0038 2.1000 .0005 -.0011 .0049 .0032 1.200C -.0001 .0059 .0043 .0026 .3000 1.5136 1.4782 1.0830 .3280 4 4.3000 .0100 .0037 - .0027 .0217 3.4000 .0090 .0027 .0270 .0207 2.5000 .0080 .0324 .0260 .0197 1.6000 2.6632 2.7779 2.5330 1.9285 5 5.6000 .0147 .0087 .0028 .0268 4.7000 .0150 .0090 .0331 .0271 3.8000 .0153 .0393 .0334 .0274 2.9000 4.0316 4.3135 4.2353 3.7969 6 6.9000 .0191 .0134 .0077 .0319 6.0000 .0205 .0149 .0390 .0333 5.1000 .0220 .0461 .0405 .0348 4.2000 5.6632 6.1119 6.2000 5.9275 7 8.2000 .0234 .0179 .0124 .0370 7.3000 .0260 .0205 .0451 .0396 6.4000 .0286 .0532 .0477 .0422 5.5000 7.5591 8.1741 8.4281 8.3210 Продолжение таблицы 2 1 94 Правая часть 2 3 .0014 -.0012 - .0039 -2.3000 .1220 -.2532 - .9876 -2.0812 3 8 9.5000 .0278 .0224 .0170 .0422 8.6000 .0315 .0261 .0513 .0459 7.7000 .0351 .0604 .0550 .0496 6.8000 9.7191 10.5000 10.9195 10.9775 9 10.8000 .0321 .0268 .0215 .0475 9.9000 .0369 .0316 .0576 .0523 9.0000 .0416 .0676 .0623 .0570 8.1000 12.1430 13.0897 13.6744 13.8972 10 12.1000 .0365 .0312 .0260 .0528 11.2000 .0423 .0370 .0639 .0586 10.3000 .0481 .0749 .0697 .0644 9.4000 14.8310 15.9430 16.6926 17.0800 11 13.4000 .0408 .0356 .0304 .0581 12.5000 .0477 .0425 .0702 .0650 11.6000 .0546 .0822 .0770 .0718 10.7000 17.7828 19.0599 19.9744 20.5261 12 14.7000 .0452 .0400 .0349 .0635 13.8000 .0531 .0479 .0765 .0714 12.9000 .0610 .0896 .0844 .0793 12.0000 20.9985 22.4406 23.5195 24.2353 13 16.0000 .0496 .0444 .0393 .0688 15.1000 .0585 .0534 .0829 .0777 14.2000 .0674 .0970 .0918 .0867 13.3000 24.4781 26.0849 27.3281 28.2078 14 17.3000 .0539 .0488 .0437 .0741 16.4000 .0639 .0588 .0892 .0841 15.5000 .0739 .1043 .0992 .0941 14.6000 28.2215 29.9928 31.4001 32.4435 15 23.8000 .0757 .0707 .0656 .1010 22.9000 .0909 .0858 .1212 .1161 22.0000 .1060 .1414 .1363 .1313 1.1000 50.8968 53.4873 55.7118 57.5703 16 19.9000 .0626 .0576 .0525 .0849 19.0000 .0747 .0696 .1020 .0969 18.1000 .0867 .1191 .1140 .1090 17.200 36.5001 38.5997 40.3345 41.7045 17 21.2000 .0670 .0619 .0569 .0902 20.3000 .0801 .0750 .1084 .1033 19.4000 .0932 .1265 .1215 .1164 18.5000 41.0351 41.2986 45.1968 46.7299 .0956 21.6000 .0855 .0804 2 .1148 .1097 20.7000 .0996 .1339 .1289 .1238 19.8000 3 45.8340 48.2611 50.3226 52.0184 Продолжение таблицы 2 1 18 22.5000 .0714 .0663 .0612 95 19 23.8000 .0757 .0707 .0656 .1010 22.9000 .0909 .0858 .1212 .1161 22.0000 .1060 .1414 .1363 .1313 21.1000 50.8968 53.4873 55.7118 57.5703 20 25.1000 .0801 .0750 .0700 .1063 24.2000 .0963 .0912 .1276 .1225 23.3000 .1124 .1488 .1437 .1387 22.4000 56.2234 58.9772 61.3645 63.3853 21 26.4000 .0844 .0794 .0744 .1117 25.5000 .1017 .0966 .1339 .1289 24.6000 .1189 .1562 .1512 .1461 23.7000 61.8139 64.7307 67.2806 69.4636 22 27.7000 .0888 .0838 .0788 .1171 26.8000 .1070 .1020 .1403 .1353 25.9000 .1253 .1636 .1586 .1536 25.0000 67.6682 70.7478 73.4601 75.8051 23 29.0000 .0932 .0882 .0831 .1225 28.1000 .1124 .1074 .1467 .1417 27.2000 .1317 .1710 .1660 .1610 26.3000 73.7864 77.0286 79.9030 82.4098 24 30.3000 .0975 .0925 .0875 .1278 29.4000 .1178 .1128 .1531 .1481 28.5000 .1381 .1784 .1734 .1684 27.6000 80.1684 83.5730 86.6095 89.2778 25 31.6000 .1019 .0969 .0919 .1332 30.7000 .1232 .1182 .1595 .1545 29.8000 .1445 .1859 .1809 .1759 28.9000 86.8143 90.3811 93.5793 96.4090 26 32.9000 .1062 .1013 .0963 .1386 32.0000 .1286 ..1236 .1659 .1610 31.1000 .1510 .1933 .1883 .1833 30.2000 93.7240 97.4528 100.8126 103.8034 27 34.2000 .1106 .1056 .1006 .1400 33.3000 .1340 .1290 .1724 .1674 32.4000 .1574 .2007 .1957 .1907 31.5000 100.8.976 104.7881 108.3093 111.4610 .1494 34.6000 .1394 .1344 2 .1788 .1738 33.7000 .1638 .2082 .2032 .1982 32.8000 3 108.3351 112.3871 116.0694 119.3819 .1547 35.9000 .1448 .1398 .1852 .1802 35.0000 .1702 .2156 .2106 .2056 31.1000 116.0363 120.2497 124.0930 127.5660 Продолжение таблицы 2 1 28 35.5000 .1150 .1100 .1050 29 96 36.8000 .1193 .1143 .1094 30 38.1000 .1237 .1187 .1137 .1601 37.2000 .1502 .1452 .1916 .1866 36.3000 .1766 .2230 .2180 .2131 35.4000 124.0015 128.3760 132.3800 136.0134 97 Лабораторная работа № 3 Решение плохо обусловленных систем линейных алгебраических уравнений Метод регуляризации Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий матрицу коэффициентов системы; b — массив из n действительных чисел, содержащий столбец свободных членов системы (b(1) = b1, b(2)=b2,…b(n)=bn). Выходные параметры: х – решение системы ; p—количество итераций. Схема алгоритма приведена на рисунке 18. Пример. Решить систему уравнений 1.03x 1 0.991x 2 2.51 0.991x 1 0.943x 2 2.41 Текст программы: procedure regul(N:Integer;a:Tmatr;b:Tvector;var X:Tvector; var p:integer); var a1,a2:tmatr; b1,b2,x0:tvector; alfa,s1,s:real; max,eps:real; i,j,k,l:integer; begin eps:=0.01; Out_Slau_T(n,a,b); For I:=1 To n Do {получение АТА} Begin For K:=1 To N Do Begin S:=0.0; For J:=1 To N Do S:=S+A[j,i]*A[j,k]; A1[i,k]:=S; End; End; For I:=1 To N Do {получение АТВ} Begin S:=0.0; For J:=1 To N Do Begin S:=S+A[j,i]*B[j]; End; b1[i]:=S; End; alfa:=0; {нач-ое знач-е альфа} k:=0; {кол-во итераций} repeat alfa:=alfa+0.01; inc(k); a2:=a1; for i:=1 to N do a2[i,i]:=a1[i,i]+alfa; {получение АТА+alfa} for i:=1 to N do b2[i]:=b1[i]+alfa*x0[i]; {получение АТВ+alfa} a1:=a2; b1:=b2; SIMQ(n,a2,b2,l); a2:=a1; X:=b2; x0:=X; b2:=b1; vozm(N,eps,a2,b2); simq(n,a2,b2,l); max:=abs(b2[1]-X[1]); for i:=2 to n do if abs(b2[i]-X[i])>max then max:=abs(b2[i]-X[i]); 98 until max<eps; p:=k; end; Вычисления по программе привели к следующим результатам: X1 = 1.981 X2 = 0.4735 99 procedure regul(N:integer;a:Tmatr:b: Tvector:var X:tvector:var p:integer); eps=0.01 Out_Slau_T(n,a,b) I I>N K K>N S=0.0 J J>N A B K K=K+1 I I>N alf a=alf a+0.01: inc(k); a2=a1' abs(b2[i]-x[i])>max + max=abs(b2[i]-x[i]) I I>N a2[i,i]=a1[i,i]+alf a I=I+1 I I=I+1 I MAX<EPS K I I>N p=k b2[i]=b1[i]+alf a*x0[i] Возв рат S=S+A[i,j]*A[j,k] J=J+1 J A1[i,k]=S K=K+1 K I=I+1 I I I>N I=I+1 I a1=a2; b1=b2 SIMQ(n,a2,b2,1) a=a1; X=b2; x0=X; b2=b1; VOZM(N,eps,a2,b2) S=0.0 J J>N SIMQ(n,a2,b2,1) max=abs(b2[1]-x[1]) S=S+A[j,i]*B[j] J=J+1 J B B1[i]=S I=I+1 I alf a=0; k=0; A Рисунок 18 - Схема алгоритма метода регуляризации 100 Варианты заданий для решения регуляризации приведены в таблице 3. плохо обусловленных систем методом Метод вращения (Гивенса) Схема алгоритма приведена на рисунке 19. Пример. Решить систему уравнений 1.03x 1 0.991x 2 2.51 0.991x 1 0.943x 2 2.41 Текст программы: PROCEDURE Vrash; Var I,J,K: Integer; M,L,R : Real; F1:TEXT; Label M1,M2; Begin Out_Slau_T(nn,aa,b); for i:=1 to Nn do aa[i,0]:=b[i]; M:=0.0; For I:=1 To Nn-1 Do Begin For K:=I+1 To Nn Do Begin If (Aa[i,i]<>0.0) Then Goto M1;If (Aa[k,i]<>0.0) Then Goto M1; M:=1.0;L:=0.0; Goto M2; 1:M:=Sqrt(Aa[i,i]*Aa[i,i]+Aa[k,i]*Aa[k,i]); L:=-1.0*Aa[k,i]/M; M:=Aa[i,i]/M; M2:For J:=1 To Nn Do Begin R:=M*Aa[i,j]-L*Aa[k,j]; Aa[k,j]:=L*Aa[i,j]+M*Aa[k,j]; Aa[i,j]:=R; End; R:=M*Aa[i,0]-L*Aa[k,0]; Aa[k,0]:=L*Aa[i,0]+M*Aa[k,0]; Aa[i,0]:=R; End; End; For I:=Nn Downto 1 Do Begin M:=0.0; For K:=0 To Nn-I-1 Do Begin M:=M+Aa[0,nn-k]*Aa[i,nn-k]; End; Aa[0,i]:=(Aa[i,0]-M)/Aa[i,i]; End; for i:=1 to Nn do x[i]:=Aa[0,i];End; Вычисления по программе привели к следующим результатам: X1 = 1.981 X2 = 0.4735 101 procedure Vrash; A Out_Slau_T(nn,aa,b) R=M*Aa[i,0]-L*Aa[k,0]; Aa[k,0]=L*Aa[i,0]+ M*Aa[k,0]; Aa[i,0]=R; I I>Nn K=K+1 K aa[i,0]=b[i] I=I+1 I I=I+1 I I I>Nn M=0.0 M=0.0 I I>Nn-1 K K>Nn-1 K K>Nn Aa[i,i]<>0.0 + M=M+Aa[0,nn-k]* Aa[i,nn-k] AA[k,i]<>0.0 + K=K+1 K M=1.0; L=0.0 Aa[0,i]=(Aa[i,0]-M) / Aa[i,i] I=I+1 I M1 M=Sqrt(Aa[i,i]*Aa[i,i]+ Aa[k,i]*Aa[k,i); L= - 1.0*Aa[k,i] / M; M=Aa[i,i] / M M2 I I>Nn x[i]=Aa[0,i] I=I+1 I J J>Nn Возв рат R=M*Aa[i,j]-L*Aa[k,j]; Aa[k,j]=L*Aa[i,j]+M*Aa[k,j]; Aa[i,j]=R; J=J+1 J A Рисунок 19 - Схема алгоритма метода Гивенса (вращения) 102 Варианты заданий Таблица 3 № 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Матрица A 1,03 0,991 1,04 0,991 1,05 0,991 1,06 0,991 1,07 0,991 1,08 0,991 1,09 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 0,991 0,940 0,992 0,941 0,992 0,942 0,994 0,943 0,995 0,944 0,996 0,944 0,997 0,945 0,998 0,946 0,999 0,947 0,996 0,948 0,995 0,949 0,994 0,951 0,993 0,953 0,992 0,952 0,991 0,940 Вектор B 2,51 2,41 2,52 2,42 2,53 2,43 2,54 2,44 2,55 2,45 0,502 0,482 0,502 0,482 0,502 0,482 0,502 0,482 0,502 0,482 2,51 2,45 2,52 2,44 2,53 2,43 2,54 2,42 2,55 2,41 № 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Матрица A 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 1,03 0,991 0,991 0,943 0,991 0,943 0,991 0,943 0,991 0,943 0,991 0,943 0,991 0,943 0,991 0,943 0,991 0,943 0,991 0,943 0,2973 0,2829 0,2973 0,2829 0,2973 0,2829 0,2973 0,2829 0,2973 0,2829 0,2973 0,2829 Вектор B 2,51 2,40 2,62 2,41 2,73 2,42 2,84 2,43 2,95 2,41 2,56 2,41 2,57 2,49 2,58 2,48 2,59 2,47 2,50 2,46 2,51 2,45 2,51 2,44 2,51 2,43 2,51 2,42 2,51 2,41 Тема лабораторной работы №3 для контроля знаний проиллюстрирована контрольно – обучающей программой. 103 Лабораторная работа № 4 Решение нелинейных уравнений и систем нелинейных уравнений Метод простых итераций Порядок выполнения лабораторной работы: 1. Найти нулевое приближение решения; 2. Преобразовать систему f(x) = 0 к виду х = Ф(х); 3. Проверить условие сходимости метода. Схема алгоритма приведена на рисунке 20. Пример. Решить методом простых итераций систему ln( y / z ) 1 x 0 2 2 10 z 10 y 20 x 4 0 xy 20 z 40 0 В качестве нулевого приближения выберем точку х=1, у = 2.2, z = 2. Преобразуем систему к виду x ln( y / z ) 1 2 2 y 0,4 z 2 x z 2 0,05 xy Текст программы: PROCEDURE Iteraz; Var I,J,K,J1 : Integer; S,U,U1 : Real; X2,X3,Eps : Real; R : tvector; Begin Eps:=0.01; X2:=0.0; K:=1; Repeat For J:=1 To Nn Do Begin S:=0.0; For I:=1 To Nn Do Begin S:=S+Aa[i,j]*Xx[i]; End; R[j]:=S; End; For J1:=1 To Nn Do Begin Xx[j1]:=R[j1]; End; X3:=Xx[1]; For I:=1 To Nn Do Begin If (Xx[i]>=X3) Then X3:=Xx[i]; Еnd; For I:=1 To Nn Do Begin Xx[i]:=Xx[i]/X3; End; X1:=X3; U:=Abs(X2-X1); U1:=U/Abs(X1); If (U1>=Eps) Then X2:=X1; K:=K+1; Until ((K>=50)or(U1<=1e-4)) End; Вычисления по программе привели к следующим результатам: X(1)= 1.1132 Х(2)= 2.3718 Х(3)= 2.1365 Количество итераций:5 104 procedure Iteraz A eps=0.01 x2=0.0 k=1 I I>Nn Xx[i]=XX[i]/3 K I=I+1 I J I>Nn S=0.0 I I>Nn X1=X3 U=Abs(x2-X1) U1=U/abs(X1) U1>=eps X2=X1 S=S+aa[i,j]*Xx[i] I=I+1 I K=K+1 R[j]=s K>=50 orU1<=1e-4 K J=J+1 J Возв рат J1 I>Nn Xx[j1]=R[j1] J1=J1+1 J1 x3=Xx[1] I I>Nn Xx[i]>x3 X3=Xx[i] I=I+1 I A Рисунок 20 - Схема алгоритма метода простых итераций 105 Метод Ньютона Программу можно использовать для решения систем не выше десятого порядка. Входные параметры: n — число уравнений системы (совпадает с числом неизвестных), n10; х—массив из n действительных чисел, содержащий начальное приближение решения; f— имя внешней процедуры f(n, х, у), вычисляющей по заданным значениям х, расположенным в элементах массива х, текущие значения функции f и размещающей их в элементах массива у; g — имя внешней процедуры g(n, x, d), f вычисляющей по заданным значениям х из массива х элементы матрицы ,которая x размещается в массиве d размерности n x n; eps — значение условия окончания итерационного процесса. Выходные параметры: х — массив из n действительных чисел (он же входной) содержит при выходе из подпрограммы приближенное значение решения; k—количество итераций. Порядок выполнения лабораторной работы: 1. Определить из геометрических соображений начальное приближение решения. f 2. Составить подпрограммы f и g для вычисления значений f и . x 3. Составить головную программу, содержащую описание массива х, имен f и g, присвоение фактических значений параметрам n, х, eps, обращение к ТNUTON и печать результатов. 4. Провести вычисления на ЭВМ. Схема алгоритма приведена на рисунке 21. Пример. Решить систему уравнений ln( y / z ) 1 x 0 2 2 10 z 10 y 20 x 4 0 xy 20 z 40 0 Текст программы: procedure TNuton; var a: T2DArray; i, j: byte; finish: boolean; begin IterCount:= 0; SetLength(a, UrCount); for i:= 0 to High(a) do SetLength(a[i], UrCount + 1); repeat { Заполнение матрицы частных производных } for i:= 0 to High(a) do begin for j:= 0 to High(a[i])-1 do a[i, j]:= DerivativeFn(i, j, Results); a[i, High(a[i])]:= -Poliz.ExternFn(i, Results); end; { Решение полученной СЛАУ методом Гаусса } SetLength(Gauss.Base, Length(a)); for i:= 0 to High(a) do begin SetLength(Gauss.Base[i], Length(a[i])); for j:= 0 to High(a[i]) do Gauss.Base[i, j]:= a[i, j]; end; try Gauss.Solve; 106 except raise Exception.Create('Данную систему этим методом решить невозможно!'); end; { Получение очередного приближения решения СНАУ } finish:= false; for i:= 0 to High(Results) do begin Results[i]:= Results[i] + Gauss.Results[i]; if not finish then finish:= (Abs(Gauss.Results[i]/Results[i]) > Eps); end; inc(IterCount); until not finish; end; В результате вычисления по программе получены следующие результаты: X(1)= 1.1132 Х(2)= 2.3718 Количество итераций:4 Х(3)= 2.1365 107 TNuton.Solve try gauss.Solve Itercount=0 finish=false SetLength(a,Urcou nt) I I>high(a) I I>high(Results) Results[i]=results[i]+ga uss.Results[i] SetLength(a,Urcou nt+1) not finish I=I+1 I Z I I>high(a) J I>high(a[i])-1 a[i,j]=derivativeFn(i,jres ults) finish=(Abs(Gauss.resul ts[i]/results[i])>Extract I=I+1 I inc(itercount) not finish Z Возв рат J=J+1 J a[i,high(a[i])]=-poliz.exte rnfn(i,results) I=I+1 I SetLength(Gausse .Base[i],Length (a[i])) I I>high(a) h=h/k SetLength(Gausse .Base[i],Length (a[i])) J I>high(a[i]) Gauss.Base[i,j]=a[i,j] J=J+1 J I=I+1 I Рисунок 21 - Схема алгоритма метода Ньютона 108 Варианты заданий Таблица 4 sin(x l) - y 1,2 1 2x cosy 2. 16 sin x 2y 2 cos(y - l) x 0,7 17 2 cos(x 0,5) - y 2 3 Sin y2x 1 sin у+2х=2 4 cos(x-1)+y = 0,7 18 sin(x 0,5) - y l cos(y - 2) x 0 sin x (x1) 1,3 - y x sin y sin(y+l)-x=l,2 2y+cos x = 2. 19 sin(y+0,5)-x=l cos(x-2)+y =0 5 sin(y-l)+x=l,3 y-sin(x+l)=0,8 20 cos(y+0,5)-x = 2 sin x —2y= 1 6 sin(x+l)-y=l 2x+cos y = 2 21 Sin x+2y= 1,6 cos(y-1)+x=l 7 sin(x+0,5)-y=1,2 cos(y-2)+x = 0 22 Cos(x-l)+y = 0,5 x –cos y = 3 8 cos x+y= 1,5 2x-sin(y-0,5)=l 23 Cos (x+0,5)+у = 0,8 sin y — 2x=l,6 9 2y-cos(x+l)=0 x+sin y= -0,4 24 cos(y-l)+x=0,5 10 y-cos x = 3 26 2x-cos(y+l) = 0 y+sin x= -0,4 27 cos(x-l)+y=0,8 x—cos y=2 28 cos(x+0,5)+y=l siny—2x=2 Sin(x-1)+y= 1,5 14 х - sin(y+ 1)= 1 29 sin(у+1)-х=1 2y+cos x = 2 Cos(y-l)+x=0,8 15 y-cos x=2. 30 cos(x-l)+y=l sin y+2x= 1,6 11 cos(y+0,5) + x=0,8 sin x-2y=l,6 25 Sin(x 2) - y l,5 x cos(y - 2) 0,5 cos y+x=l,5 2y-sin(x-0,5)=l sin(y + 2)-x=l,5 12 y+cos(x-2)=0,5. 13 Cos x+y= 1,2 2x-sin(y-0,5) = 2. Тема лабораторной работы №4 для контроля знаний проиллюстрирована контрольно – обучающей программой. 109 Лабораторная работа № 5 Решение проблемы собственных значений и собственных векторов Точные методы Метод Леверрье Входные параметры: n—целое положительное число, равное порядку n системы; Выходные параметры: b—массив из n действительных чисел, при выходе из программы содержит решение системы. Пример. Вычислить собственные значения и собственные вектора матрицы |2 2 |2 5 |-2 –4 –2| –4| 5| Текст программы: PROCEDURE Liver (Var VeS:Tvector;Nn:Integer);; Label 35,270,220,100,80,190,500,250,350,120,10; Var I,J,K,T:Integer; Y,Yy:tvector; {A,Aa:Mas;} S,C,Q,P,H,D,U,M,V,F,W,Yyy,Z,L,R,X,Aaa,B:Real; Sq,Sq1: Real; F1: TEXT; Begin Assign(F1,'last.out'); Rewrite(F1); For I:=Nn Downto 1 Do Y[i+1]:=VeS[i]; Y[1]:=1; K:=1; 35: T:=1; C:=Y[2]/Y[1]; If (Nn=1) Then Begin P:=-C; Q:=0; Goto 270; End; If (Nn=2) Then Begin H:=C*C/4-Y[3]/Y[1]; Goto 220; End; M:=10;C:=4;D:=8;U:=4; V:=8;F:=1;W:=2;T:=0; 80: If(M<>10) Then Goto 100; P:=C;M:=0;Q:=D;C:=U;D:=V; U:=P;V:=Q;Yyy:=C;Z:=D;F:=-F; 100:M:=M+1;H:=0;Q:=Y[1];P:=Y[2]-C*Q;L:=Q; 120:For J:=3 To Nn Do Begin R:=P;P:=Y[j]-C*R-D*Q;Q:=R; R:=L;L:=Q-C*R-H*D;H:=R; End; Q:=Y[Nn+1]-D*Q; S:=L+C*R; If (T=0) Then Begin X:=D*R;H:=R*X+S*L; 110 If H=0 Then Goto 80; End; C:=C+(P*S-Q*R)/H; D:=D+(P*X+Q*L)/H; If ((C-Yyy+D-Z)<>0) Then Goto 190; If (F=-W) Then Begin writeln('Љ®аҐм Ґ ©¤Ґ'); Goto 500; End; W:=-F; 190:H:=C*C/4-D; Sq:=Sqrt((Q-P*C/2)*(Q-P*C/2)+P*P*Abs(H)); If (Sq>0.0000001) Then Goto 80; T:=0; Y[2]:=Y[2]-C*Y[1]; For J:=3 To Nn-1 Do Begin Y[j]:=Y[j]-C*Y[j-1]-D*Y[j-2];End; 220:P:=-C/2; Q:=Sqrt(Abs(H)); If(h>=0) Then Begin M:=P+Q;P:=P-Q;Q:=0; Goto 250; End; M:=P; 250:write(F1,'p',k,'=',m:9:4,' + i',q:7:4);K:=K+1;{Ves[k-1]:=M;}WriteLn(F1,''); 270:write(F1,'p',k,'=',p:9:4,' + i',-q:7:4);K:=K+1;{Ves[k-1]:=P;}WriteLn(F1,''); If(t<>0) Then Goto 350; Nn:=Nn-2; Aaa:=0; Sq1:=Sqrt((S-R*C/2)*(S-R*C/2)+R*R*Abs(H)); If (Sq1<=0.0000001) Then Aaa:=1; B:=0; If (Nn>=2) Then B:=1; If((Aaa+B)=2) Then Begin T:=1; Goto 120; End; Goto 35;350:500: Close(F1); End; Вычисления по программе привели к следующим результатам: Собственные числа Собственные вектора .10000Е+01 -.94281Е+00 .23570Е+00 -.23570Е+00 .10000Е+02 -.33333Е+00 -.66667Е+00 .66667Е+00 .10000Е+01 .00000Е+00 -.70711Е+00 -.70711Е+00 Варианты заданий для нахождения собственных значений и собственных векторов матрицы приведены в таблице 5. Метод Фадеева Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий входную матрицу. Выходные параметры: q—массив из n действительных чисел при выходе из программы содержит решение системы. 111 Схема алгоритма приведена на рисунке 23. Пример. Вычислить собственные значения и собственные вектора матрицы |2 2 |2 5 |-2 –4 –2| –4| 5| Текст программы: procedure Fadeev(n:integer;a:tmatr;var q:tvector); var Aa,E,B:tmatr; i,j:integer; begin for i:=1 to n do for j:=1 to n do if i<>j then e[i,j]:=0 else e[i,j]:=1; Aa:=a; q[1]:=spA(n,Aa); MulChislo(n,q[1],e,b); MatrVich(n,Aa,b,b); for i:=2 to n do begin MulMatr(n,a,b,Aa); q[i]:=-spA(n,Aa)/i; MulChislo(n,q[i],e,b); MatrVich(n,Aa,b,b); end; end; Вычисления по программе привели к следующим результатам: Собственные числа Собственные вектора .10000Е+01 -.94281Е+00 .23570Е+00 -.23570Е+00 .10000Е+02 -.33333Е+00 -.66667Е+00 .66667Е+00 .10000Е+01 .00000Е+00 -.70711Е+00 -.70711Е+00 112 Procedure Fadeev(n:integer;a:tmatr; var q:tvector); I I>N J J>N + I<>J - e[i,j]=0 e[i,j]=1 J=J+1 J I=I+1 I Aa=a; q[1]=spa(n,Aa) Mulchislo(n,q[1],e,b) Matrvich(n,aa,b,b) I I>N MulMatr(n,a,b,Aa) q[i]= - spa(n,Aa) / i Mulchislo(n,q[i],e,b) Matrvich(n,Aa,b,b) I=I+1 I Возв рат Рисунок 23 - Схема алгоритма метода Фадеева Варианты заданий для нахождения собственных значений и собственных векторов матрицы приведены в таблице 5. 113 Метод Крылова Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий входную матрицу. Выходные параметры: q—массив из n действительных чисел при выходе из программы содержит решение системы. Схема алгоритма приведена на рисунке 24. Пример. Вычислить собственные значения и собственные вектора матрицы |2 2 |2 5 |-2 –4 –2| –4| 5| Текст программы: PROCEDURE Krylov(Nn:integer; A: TMatr;Var Y:TVector); Label 2; Var I,J,K,T,Nn1 :Integer; yy :TVector ; aa :TMatr ; s,c,q,p,h,d,u, m,v,f,w,yyy,z, l,r,x,aaa,b : Real ; Begin form3.Caption:='Крылов'; Nn1:=Nn; For I:=1 To Nn Do Yy[i]:=I*Trunc(10*ranDom); 2:For I:=Nn Downto 1 Do Begin Y:=Yy; For J:=1 To Nn Do Aa[j,i]:=Yy[j]; For J:=1 To Nn Do Begin S:=0; For K:=1 To Nn Do S:=S+A[j,k]*Y[k]; Yy[j]:=S; End; End; For I:=1 To Nn Do Y[i]:=-Yy[i]; Simq(Nn1,Aa,Y,K); If(K=1) Then Begin For I:=1 To Nn Do Yy[i]:=I*I*trunc(7*ranDom); Goto 2; End; End; 114 Procedure Krilov(Nn:integer; a:Tmatr:var y:TVect); Nn1=Nn I I>Nn Yy[i]=I*Trunc(10* random) I=I+1 I I I<1 A I I>Nn Y[i]= -Yy[i] I=I+1 I Simq(Nn1,aa,y,K) K=1 + I I>Nn Y=Yy Yy[i]=I*I*trunc(7* random) J J>Nn I=I+1 I Aa[i,j]=Yy[i] J=J+1 J Возврат J J>Nn s=0; K K>Nn S=S+A[j,k]*Y[k] K=K+1 K Yy[j]=S J=J+1 J I=I+1 I A Рисунок 24 - Схема алгоритма метода Крылова Вычисления по программе привели к следующим результатам: Собственные числа Собственные вектора .10000Е+01 -.94281Е+00 .23570Е+00 -.23570Е+00 115 .10000Е+02 .10000Е+01 -.33333Е+00 -.66667Е+00 .00000Е+00 -.70711Е+00 .66667Е+00 -.70711Е+00 Варианты заданий для нахождения собственных значений и собственных векторов матрицы приведены в таблице 5. Тема лабораторной работы №5 для контроля знаний проиллюстрирована контрольно – обучающей программой. 116 Лабораторная работа № 6 Решение проблемы собственных значений и собственных векторов Итерационные методы Метод QR-разложения Входные параметры: nn—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий входную матрицу. Выходные параметры: R_1, R_2—массив из n действительных чисел при выходе из программы содержит решение системы. Пример. Вычислить собственные значения и собственные вектора матрицы |2 2 |2 5 |-2 –4 –2| –4| 5| Текст программы: PROCEDURE Qr (Var Nn:Integer;Var A:Tmatr;Var R_1:Tvector;Var R_2:Tvector);; Var I,J,K,L,M,Na,Its : Integer; I1,M1,N1,L1,N : Integer; M3,U1,U11,U2 : Real; Q,P,R,S,T,U,X,Y,Z,W : Real; Aa: tMatr; r1,r2:tvector; Label NexTw,NexTit,Cont_1,Cont_2,Cont_3; Label Onew,TwOw,Fin; Begin Aa:=A; N:=Nn; for i:=0 to Nn do begin r1[i]:=0; r2[i]:=0; end; T:=0.0; NexTw: If (N=0) Then Goto Fin; Its:=0; Na:=N-1; M3:=1.0e-11; NexTit: For L:=N DownTo 2 Do Begin U:=Abs(Aa[l,l-1]); U1:=M3*(Abs(Aa[l-1,l-1])+Abs(Aa[l,l])); If (U<=U1) Then Goto Cont_1; End; L:=1; Cont_1: X:=Aa[n,n]; If(L=N) Then Goto Onew; Y:=Aa[na,na]; W:=Aa[n,na]*Aa[na,n]; If(L=Na) Then Goto Twow; If(Its=30) Then Goto Fin; If((Its=10)And(Its=20)) Then Begin T:=T+X; For I:=1 To N Do Begin Aa[i,i]:=Aa[i,i]-X; End;{} S:=Abs(Aa[n,na])+Abs(Aa[na,n-2]); X:=0.75*S; Y:=0.75*S; W:=-0.4375*S*S; 117 End; Its:=Its+1; For M:=N-2 Downto L Do Begin Z:=Aa[m,m]; R:=X-Z; S:=Y-Z; P:=(R*S-W)/Aa[m+1,m]+Aa[m,m+1]; Q:=Aa[m+1,m+1]-Z-R-S; R:=Aa[m+2,m+1]; S:=Abs(P)+Abs(Q)+Abs(R); P:=P/S; Q:=Q/S; R:=R/S; If(M=L) Then Goto Cont_2; U11:=Abs(Aa[m,m-1])*(Abs(Q)+Abs(R)); U2:=M3*Abs(P)*(Abs(Aa[m-1,m-1])+Abs(Z)+Abs(Aa[m+1,m+1])); If(U11<=U2) Then Goto Cont_2; End; Cont_2: For I:=M+2 To N Do Begin Aa[i,i-2]:=0.0; End; For I:=M+3 To N Do Begin Aa[i,i-3]:=0.0; End; For K:=M To Na Do Begin If (K<>M) Then Begin; P:=Aa[k,k-1]; Q:=Aa[k+1,k-1]; If(K<>Na) Then R:=Aa[k+2,k-1] Else R:=0.0; X:=Abs(P)+Abs(Q)+Abs(R); If(X=0.0) Then Goto Cont_3; P:=P/X; Q:=Q/X; R:=R/X; End; S:=Sqrt(P*P+Q*Q+R*R); If(P<0.0) Then S:=-S; If(K<>M) Then Aa[k,k-1]:=-S*X Else If(L<>M) Then Aa[k,k-1]:=-Aa[k,k-1]; P:=P+S; X:=P/S; Y:=Q/S; Z:=R/S;Q:=Q/P; R:=R/P; For J:=K To N Do Begin P:=Aa[k,j]+Q*Aa[k+1,j]; If (K<>Na) Then Begin P:=P+R*Aa[k+2,j]; Aa[k+2,j]:=Aa[k+2,j]-P*Z; End; Aa[k+1,j]:=Aa[k+1,j]-P*Y; Aa[k,j]:=Aa[k,j]-P*X; End; If((K+3)<N) Then J:=K+3 Else J:=N; For I:=L To J Do Begin P:=X*Aa[i,k]+Y*Aa[i,k+1]; If(K<>Na) Then Begin; P:=P+Z*Aa[i,k+2]; Aa[i,k+2]:=Aa[i,k+2]-P*R; End; Aa[i,k+1]:=Aa[i,k+1]-P*Q; Aa[i,k]:=Aa[i,k]-P; End; Cont_3:End; Goto NexTit; Onew: R1[n]:=X+T; {R1-ўҐй} R2[n]:=0.0; {Cnt[n]:=its;} N:=Na; Goto Nextw; Twow: P:=(Y-X)/2.0; Q:=P*P+W; Y:=Sqrt(Abs(Q)); {Cnt[n]:=-its; Cnt[na]:=its;} X:=X+T; If(Q>0.0) Then Begin If(P<0.0) Then Y:=-1.0*Y; Y:=P+Y; R1[na]:=X+Y; R1[n]:=X-W/Y; R2[na]:=0.0; R2[n]:=0.0; End Else Begin R1[na]:=X+P; R1[n]:=X+P; R2[na]:=Y; R2[n]:=-1.0*Y;End; N:=N-2; Goto Nextw; Fin: r_1:=r1; r_2:=r2; End; 118 Вычисления по программе привели к следующим результатам: Собственные числа Собственные вектора .10000Е+01 -.94281Е+00 .23570Е+00 -.23570Е+00 .10000Е+02 -.33333Е+00 -.66667Е+00 .66667Е+00 .10000Е+01 .00000Е+00 -.70711Е+00 -.70711Е+00 Варианты заданий для нахождения собственных значений и собственных векторов матрицы приведены в таблице 5. Метод обратных итераций Входные параметры: nn—целое положительное число, равное порядку n системы; Aа — массив из n х n действительных чисел, содержащий входную матрицу, eps – малое число для условия окончания итерационного процесса. Выходные параметры: V0,V1—массив из n действительных чисел при выходе из программы содержит решение системы, it – количество итераций. Пример. Вычислить собственные значения и собственные вектора матрицы |2 2 |2 5 |-2 –4 –2| –4| 5| Текст программы: PROCEDURE IObrIter(Nn:integer;Aa:tmatr;lam,lam1,eps:real;var V0,V1:tvector;var it:byte); var x,x1:tvector; c,c1:extended; nev:real; i,j,k,p:integer; i1:byte; aa1:tmatr; rv,rv1:tvector; begin it:=1; for i:=1 to 2*nn do for j:=1 to 2*nn do begin if (i<=Nn)and(j<=Nn)then if i=j then aa1[i,i]:=aa[i,i]-lam else aa1[i,j]:=aa[i,j]; if (i<=Nn)and(j>Nn) then if j=Nn+i then aa1[i,j]:=-lam1 else aa1[i,j]:=0; if (i>Nn)and(j<=Nn)then if i=j+Nn then aa1[i,j]:=-lam1 else aa1[i,j]:=0; if (i>Nn)and(j>Nn)then if i=j then aa1[i,j]:=aa[i-nn,j-nn]-lam else aa1[i,j]:=aa[i-nn,j-nn]; end; for i:=1 to Nn do rv1[i]:=1; for i:=Nn+1 to 2*nn do rv1[i]:=0; repeat rv:=rv1; rv1:=rv; simq(2*Nn,AA1,rv1,p);{ c:=rv1[1]; c1:=rv1[nn+1]; for i1:=1 to Nn do begin if rv1[i1]<c then c:=rv1[i1]; if rv1[i1+nn]<c1 then c1:=rv1[i1+nn]; end;} for i1:=1 to Nn do begin rv1[i1,1]:=rv1[i1,1]/c; rv1[i1,2]:=rv1[i1,2]/c1; end ;} c:=0; c1:=0; 119 for i:=1 to Nn do begin c:=c+sqr(rv1[i]); c1:=c1+sqr(rv1[i+nn]); end; c:=sqrt(c); c1:=sqrt(c1); nev:=0; for i:=1 to Nn do begin rv1[i]:=rv1[i]/c; rv1[i+nn]:=rv1[i+nn]/c1; nev:=nev+(sqr(rv[i])+sqr(rv[i+nn])-sqr(rv1[i])-sqr(rv1[i+nn])); end; nev:=sqrt(nev); inc(it); until (nev<eps)or (it>15); for i:=1 to Nn do begin v0[i]:=rv1[i]; v1[i]:=rv1[i+nn]; end; end; Вычисления по программе привели к следующим результатам: Собственные числа Собственные вектора .10000Е+01 -.94281Е+00 .23570Е+00 -.23570Е+00 .10000Е+02 -.33333Е+00 -.66667Е+00 .66667Е+00 .10000Е+01 .00000Е+00 -.70711Е+00 -.70711Е+00 Варианты заданий Таблица 5 Вариан т Матрица A 1 .15446E + 00 .33012E + 00 1 –.54037E + 00 .58495Е + 00 .10194E + 01 2 .13770E+00 Продолжение таблицы 5 1 .14613E+00 –.12171E-01 .37712E + 01 -.43613E + 01 3 .52997E+01 .40591E+01 .41585H + 00 .13936E + 01 4 -.87625E + 00 -.48377E + 01 .11107E + 01 5 .33082E+00 120 -.43024E + 00 -.94878E+00 .15346E + 01 -.16812Е + 01 .13661E+01 .19687Е+00 2 .55900E-01 .12327E + 00 .19939E+00 -.21843Е + 00 .51685E + 01 .74484E + 00 .24055E + 00 .51413E + 00 –.84158E+00 .91101Е + 00 -.22275E + 01 -.30089E+00 .19598Е+00 -.17401E-01 .48587E + 00 -.59594E+00 .69610E+00 .55464E + 00 -.35891E+00 .12212E + 01 -.73761E+00 -.42394E + 01 .10590E+02 .30755E+01 2 .74144E+00 .65832E-01 19836E + 00 243 З0Е + 00 28419E+00 22644E+00 63151E + 00 21488E + 01 12978E + 01 74592E + 01 79845E + 01 23188E + 01 -.31930E+00 .26593E-01 -.53757E + 00 .62168E + 00 -.75546E+00 -. 57861 E+ 00 .48148E + 00 .16136E+01 -.10145E + 01 -.56012E + 01 -.37547E + 01 -.11183Е + 01 -.17127E+00 .29074E+00 .94217E + 01 -.82311E + 01 6 .10527E + 02 .28367E+01 .22224Е+00 .17226Е + 01 7 .10474Е + 02 .54542Е + 01 .42016Е + 00 .19439Е + 00 8 - 61729Е+ 01 -.20038Е+00 15788Е + 02 -10221Е + 02 9 .46778Е + 01 -11261Е + 02 .41750Е-01 .93292Е-01 10 -19135Е+02 .89416Е + 01 .70954Е-03 -.99360Е-04 11 .37446Е-03 -.35194Е-04 .21121Е+02 -.97494Е + 01 12 .54455Е+01 .92933Е + 01 Продолжение таблицы 5 1 .58993Е+00 -.43515Е + 01 13 .67688Е + 01 -.31085Е + 02 .46329Е + 00 .37616Е + 00 14 -.42388Е + 00 .28498Е + 00 .23797Е + 02 -.72308Е + 01 15 -.74144Е + 01 -.96619Е + 00 .33057Е + 01 16 -11653Е + 02 .27268Е + 02 .32367Е + 02 .16823Е + 01 17 19161Е + 01 .7З100Е - 01 –.17300E + 01 .27030E+01 -.20262E+01 .171414 + 01 .22359E + 01 -.59074E+00 .20919Е + 00 .12234Е + 01 .74958Е + 01 .38736Е + 01 -16937Е + 02 -.76571Е + 01 .28952Е +01 .78932Е + 01 -.31013Е + 01 .20256Е + 01 -.88782Е + 00 .22317Е + 01 .72743Е-01 -.69765Е-01 14194Е + 02 -.66866Е + 01 -.35012Е + 01 .22264Е + 01 .25177Е+01 -.78859Е + 00 15882Е+02 -.74096Е + 01 .39960Е+01 .70629Е+01 13043E+01 20379E+01 20679E + 01 17494E + 01 22819E + 01 60288 E + 00 .26602Е + 00 .15558Е + 01 .95322Е + 01 .49260Е + 01 .10087Е + 02 .45605Е + 01 -.17253Е+ 01 -.47011Е+01 -.71755Е+01 .46865Е + 01 -.20541Е + 01 .51635E-01 -.20820Е-01 19967Е-01 .40626Е+01 1 9138Е + 01 .23236Е+02 14775Е + 02 16709Е + 02 -.52335Е + 01 -.32325Е + 00 15081Е + 00 -.81334Е-01 -14376Е + 00 .57899E + 00 -.98286E + 00 -.27418E+01 .23953E + 01 .30634E + 01 -.82550E + 00 19367Е+00 .15012Е + 01 .91273Е+01 .47530Е + 01 -.28570Е + 01 -13218Е+01 .41974Е + 00 13625Е + 01 -.71410Е+01 .46230Е + 01 -.21158Е+01 .50935Е + 01 .27069Е-01 .60487Е-01 -12406Е+02 .57974Е + 01 -16032Е + 00 .22450Е-01 -.84609Е-01 .79521Е-02 -13430Е+02 .61993Е + 01 -.34626Е+01 -.59092Е+01 .36004Е-01 -.24076Е+00 .39005Е + 00 -.17198Е+01 .23325Е + 02 .19986Е + 02 -.21495Е + 02 .15141Е + 02 -.96479Е + 01 .28581Е + 01 .30008Е + 01 .38190Е + 00 10035Е + 01 -.31905Е + 01 .76123Е + 01 .88617Е + 01 -.12521Е + 02 -14239Е + 02 -.90481Е + 00 2 -.32946Е + 00 .22030Е + 01 -.35692Е + 01 .15737Е + 02 .56599Е + 01 .48497Е + 01 -.52159Е + 01 .36742Е + 01 .25078Е+02 -.74291Е + 01 -.78002Е + 01 -.99269Е + 00 .54364Е + 00 -17284Е + 01 .41118Е + 01 .48006Е + 01 .17330Е + 02 19707Е + 02 12523Е + 01 .27315Е + 00 -.20148Е + 01 .31341Е + 01 -.14393Е+02 .33563Е + 01 .27251Е+01 -.30708Е + 01 .20646Е + 01 -.20370Е + 02 .61895Е + 01 .63466Е + 01 .82706Е + 00 .99381Е + 00 -.35034Е + 01 .81975Е + 01 .97306Е + 01 .58778Е +01 .66946Е + 01 .25541Е + 00 121 -.28993Е+01 .23026Е+02 -.34268Е + 01 18 .25324Е + 01 -.24584Е + 01 .93047Е + 01 -.20747Е + 02 19 -.50813Е + 02 .23840Е + 01 .29497Е+01 20 .63919Е+01 .53881Е + 01 .18899Е + 02 -15438Е + 00 21 11694Е + 00 15299Е + 00 18736Е+02 -.29757Е + 02 22 .31857Е + 02 -.45869Е + 02 .36164Е + 01 23 .74821Е + 01 -17309Е + 02 Продолжение таблицы 5 1 .38860Е + 01 24 25 26 27 28 29 122 .12738Е +02 16202Е + 01 15111Е + 01 .81142Е + 00 .30846Е + 02 -.36344Е + 02 17157Е + 02 .53507Е + 02 .27346Е + 01 .91361Е + 01 .12961Е + 02 -.28402Е + 02 .63868Е + 01 .18697Е + 01 -.17156Е + 01 .75164Е + 00 .43510Е + 02 -.38692Е + 02 -.48615Е+02 -.17455Е + 02 10921Е + 01 .74301Е + 01 .26781Е+01 .42614Е+02 .21545Е + 02 -.29821Е + 02 -10130Е + 02 -.28865Е + 02 .44373Е + 01 -.30771Е + 01 .31833Е + 01 -.96771Е + 00 .25205Е + 01 .60245Е4-01 -.28963Е + 00 -.87224Е + 01 -18646Е + 02 -15501Е+02 .47944Е + 02 -.43842Е + 00 -.45833Е-01 .43447Е + 00 -.80167Е-01 .57914Е-01 -12683Е + 00 .89269Е-01 10248Е + 02 .22156Е + 02 -.50828Е + 02 -.27154Е + 02 .41743Е + 01 -.28947Е + 01 .29947Е + 01 .79337Е + 00 -.20664Е + 01 -.49391Е + 01 .23745Е + 00 -13989Е+02 -.29905Е + 02 -. 24861 Е + 02 -.21890Е + 02 .20017Е + 00 .20926Е-01 -19837Е + 00 -.25998Е+00 18781Е + 00 -.41130Е + 00 .28950Е + 00 -17581Е + 01 -.38041Е + 01 .87201Е+01 -.26187Е + 02 .38973Е + 01 -.28802Е + 01 .27959Е + 01 14105Е + 01 -.31451Е + 01 -.77027Е + 01 .36139Е + 00 .65990Е + 01 14300Е+02 12054Е + 02 -.28868Е + 02 .23582Е + 00 -17863Е+00 -.23370Е + 00 16584Е + 00 -.26340Е + 00 .28199Е + 00 -. 40601 Е + 00 .57433Е + 01 11883Е + 02 -.27490Е + 02 .11507Е + 02 2 -.19742Е + 01 .61716Е +01 26061Е+ 01 .35161Е + 00 .30380Е + 00 -17609Е + 00 -.40806Е + 01 .49263Е + 01 -.20743Е + 01 -.72527Е + 01 -.11110Е + 01 -.35849Е + 01 -.51725Е + 01 .11145Е+02 -.67524Е+02 -.18932Е + 02 .18209Е+02 -.76109Е+01 .59136Е+01 -.50907Е + 01 -.65295Е + 01 -.22966Е + 01 -.12118Е + 01 -.72230Е + 01 -.07865Е + 01 -.41427Е+02 .63995Е + 02 .86341Е+01 .74599Е+01 .43244 + 01 -.36208Е + 00 .43712Е + 00 -18406Е + 00 -.64354Е + 00 .50222Е + 01 .16206Е + 02 .23383Е + 02 -.50380Е + 02 -.24412Е+02 -.68445Е+01 .65832Е + 01 -.27516Е + 01 -.11467Е + 02 .98719Е4-01 .12662Е + 02 .44536Е + 01 -.83855Е+00 -.49981Е+01 -.49087Е+02 -.28666Е+02 .-27195Е +02 -.34589Е+01 -.32261Е + 01 -17323Е + 01 -.41187Е + 01 .48529Е + 01 -.22910Е + 01 -.71445Е + 01 .32234Е + 01 .10769Е + 02 .15278Е + 02 -.33479Е + 02 -.20908Е+02 -.61208Е + 01 .56162Е+01 -.24606Е+01 -.12245Е+02 .10889Е + 02 .13682Е+02 .49125Е+01 .96881Е+00 .65916Е + 01 .76564Е + 01 .37805Е +02 30 .17965Е+01 .78083Е + 00 .26239Е + 00 -.82565Е + 00 .49866Е + 02 .22034Е+02 .60831Е + 01 -.23299Е + 02 -.55218Е+02 -.24399Е + 02 -.67359Е + 01 .25799Е + 02 -.11507Е + 02 -.50015Е + 01 -16807Е + 01 .52886Е + 01 Тема лабораторной работы №6 для контроля знаний проиллюстрирована контрольно – обучающей программой. 123 Лабораторная работа № 7 Приближение функций Интерполяционный полином Лагранжа Входные параметры: N - число узлов интерполяции; y - массив размерности n, содержащий значения функции в узлах интерполяции; x-массив размерности n, содержащий значения узлов интерполяции; q-точка в которой вычисляем значения функции интерполяции. Выходные параметры: приближенное значение функции в точке q; графическая интерпретация результата. Схема алгоритма приведена на рисунке 25. Задание. Аппроксимировать табличную функцию с помощью интерполяционного полинома Лагранжа. xi 1 2 3 4 5 yi 2,05 1,94 1,92 1,87 1,77 xi 6 7 8 9 10 yi 1,88 1,71 1,60 1,56 1,40 Текст программы: function Lagran(n:integer;x,y:TVector;q:real):real; var i,j:integer; l,s:real; begin L:=0; for i:=1 to n do begin s:=1; for j:=1 to N do if j<>i then s:=s*(q-x[j])/(x[i]-x[j]); L:=L+y[i]*s; end; Lagran:=l end Вычисления по программе привели к следующим результатам: X=1 X=1,5 X=2 X=2,5 X=3 X=3,5 X=4 X=4,5 X=5 X=5,5 X=6 X=6,5 124 Y=2,05 Y=2,38 Y=1,94 Y=1,83 Y=1,92 Y=1,94 Y=1,87 Y=1,78 Y=1,77 Y=1,83 Y=1,88 Y=1,83 X=7 X=7,5 X=8 X=8,5 X=9 X=9,5 X=10 Y=1,71 Y=1,59 Y=1,6 Y=1,67 Y=1,56 Y=1,09 Y=1,4 Function Lagran(n:integer;x,y,TV ector;r,q:real) L=0 I I>n s=1 J J>n + I<>J s=s*(q-x[j]) / (x[i]-x[j]) J=J+1 J L=L+y[i]*s I=I+1 I Lagran=1 Возв рат Рисунок 25 - Схема алгоритма приближения функций формулой Лагранжа Варианты заданий для решения задачи приближения функций приведены в таблице 6. Аппроксимация функций с помощью кубического сплайна Входные параметры: N - число узлов интерполяции; y - массив размерности n, содержащий значения функции в узлах интерполяции; x-массив размерности n, содержащий значения узлов интерполяции; q-точка в которой вычисляем значения функции интерполяции. 125 Выходные параметры: приближенное значение функции в точке q; графическая интерпретация результата. Схема алгоритма приведена на рисунке 26. Задание. Аппроксимировать табличную функцию с помощью кубического сплайна. xi 1 2 3 4 5 yi 2,05 1,94 1,92 1,87 1,77 xi 6 7 8 9 10 yi 1,88 1,71 1,60 1,56 1,40 Текст программы: Procedure Spline3(N:integer;X,Y:mas;S0,SN:real;Var A,B,C,D:mas); Var F : Mas; H2,H3,p : real; i,j : integer; Begin H2:=X[2]-X[1]; H3:=X[3]-X[2]; A[1]:=(2*(H2+H3))/H3; f[1]:=(6/h3)*(((y[3]-y[2])/h3)-((y[2]-y[1])/h2))-(h2*s0)/h3; For i:=4 to n-1 do begin h2:=x[i-1]-x[i-2]; h3:=x[i]-x[i-1]; a[i-2]:=(2/h3)*(h2+h3); b[i-2]:=h2/h3; f[i-2]:=(6/h3)*(((y[i]-y[i-1])/h3-((y[i-1]-y[i-2])/h2))); end; h2:=x[n-1]-x[n-2]; h3:=x[n]-x[n-1]; p:=2*(h2+h3); b[1]:=h2/p; f[n-2]:=(6/p)*(((y[n]-y[n-1])/h3)-((y[n-1]-y[n-2])/h2))-(h3*sn)/p; d[1]:=1/a[1]; c[1]:=f[1]; For i:=2 to n-3 do begin d[i]:=1/(a[i]-b[i]*d[i-1]); c[i]:=f[i]-b[i]*d[i-1]*c[i-1]; end; d[n-2]:=(f[n-2]-b[1]*d[n-3]*c[n-3])/(1-b[1]*d[n-3]); For i:=n-3 downto 1 do d[i]:=d[i]*(c[i]-d[i+1]); c[1]:=s0; c[n]:=sn; For i:=2 to n-1 do c[i]:=d[i-1]; For i:=1 to n do begin a[i]:=0; b[i]:=0; d[i]:=0; end; For i:=2 to n do begin h2:=x[i]-x[i-1]; d[i]:=(c[i]-c[i-1])/h2; b[i]:=h2*c[i]/2-(Sqr(h2))*d[i]/6+(y[i]-y[i-1])/h2; a[i]:=y[i]; end; end; Вычисления по программе привели к следующим результатам: X=1 126 Y=2,21 X=1,5 X=2 X=2,5 X=3 X=3,5 X=4 X=4,5 X=5 X=5,5 X=6 X=6,5 X=7 X=7,5 X=8 X=8,5 X=9 X=9,5 X=10 Y=2,06 Y=1,94 Y=2,00 Y=1,92 Y=1,99 Y=1,87 Y=1,88 Y=1,77 Y=1,91 Y=1,88 Y=1,90 Y=1,71 Y=1,71 Y=1,6 Y=1,66 Y=1,56 Y=1,57 Y=1,4 127 Procedure Spline3(N:integer;X,Y:mas ;S0,SN:real;Var A,B,C,D:mas) H2=x[2]-x[1] h3=h[3]-h[2] a[1]=(2*(h2+h3))/h3 f [1]=(6/h3)*(((y[3]-y[2]/h3)((y[2]-y[1])/h2))-(h2*s0) / h3) A c[1]=s0 c[n]=sn I I>n-1 c[i]=d[i-1] I I>n-1 I=I+1 I H2=x[i-1]-x[i-2] h3=h[i]-h[i-1] a[i-2]=(2/h3)*(h2+h3) b[i-2]=h2/h3 f [i-2]=(6/h3)*(((y[i]-y[i-1]/h3 )-((y[i-1]-y[i-2])/h2))) I I>n a[i]=0 b[i]=0 d[i]=0 I=I+1 I I=I+1 I H2=x[n-1]-x[n-2] h3=h[n]-h[n-1] p=2*(h2+h3) b[i]=h2/p I I>n H2=x[i]-x[i-1] d[i]=(c[i]-c[i-1])/h2 f [n-2]=(6/p)*(((y[n]-y[n-1]/h 3)-((y[n-1]-y[n-2])/h2))-(h3* sn)/p) d[1]=1/a[1 c[1]]=f [1] I I>n-3 b[i]=h2*c[i]/2-(sqr(h2))*d[i]/ 6+(y[i]-y[i-1])/h2 a[i]=y[i] I=I+1 I Возв рат d[i]=1/(a[i]-b[i]*d[i-1]) c[i]]=f [i]-b[i]*d[i-1]*c[i-1] I=I+1 I d[n-2]=(f [n-2]-b[1]*d[n-3]*c [n-3])/(1-b[1]*d[n-3]) I I<1 d[i]=d[i]*(c[i]-d[i+1]) I=I-1 I A Рисунок 26 - Схема алгоритма приближения функций с помощью сплайнов 128 Варианты заданий для решения задачи приближения функций приведены в таблице 6. Приближение формулами Ньютона Входные параметры: N - число узлов интерполяции; y - массив размерности n, содержащий значения функции в узлах интерполяции; x-массив размерности n, содержащий значения узлов интерполяции; q-точка в которой вычисляем значения функции интерполяции. Выходные параметры: приближенное значение функции в точке q; графическая интерпретация результата. Схема алгоритма приведена на рисунке 27. Задание. Аппроксимировать табличную функцию с помощью формул Ньютона. xi 1 2 3 4 5 yi 2,05 1,94 1,92 1,87 1,77 xi 6 7 8 9 10 yi 1,88 1,71 1,60 1,56 1,40 Текст программы: function PribNew(n:integer;a,b:TVector;x:Real):real; function GetRazdRazn(k,l:integer;m:TMatr):real; begin GetRazdRazn:=m[k,l-k+1]; end; var i,j:integer; s,p:real; M:tmatr; begin TabRazdRazn(n,a,b,M); S:=b[1]; for i:=1 to N-1 do begin P:=1; for j:=1 to i do P:=P*(x-a[j]); s:=s+P*GetRazdRazn(1,i+1,m); end; PribNew:=s; end; Вычисления по программе привели к следующим результатам: X=1 Y=2,05 X=1,5 Y=2,38 X=2 Y=1,94 X=2,5 Y=1,83 X=3 Y=1,92 X=3,5 Y=1,94 X=4 Y=1,87 X=4,5 Y=1,78 129 X=5 Y=1,77 X=5,5 Y=1,83 X=6 Y=1,88 X=6,5 Y=1,83 X=7 Y=1,71 X=7,5 Y=1,59 X=8 Y=1,6 X=8,5 Y=1,67 X=9 Y=1,56 X=9,5 Y=1,09 X=10 Y=1,4 PribNew (n:integer:a, b:TVector:x:real) GetRazdRazn (k,l,t) TabtRazdRazn (k,l,t) S=b[1] I I>N-1 P=1 J J>I P=P*(x-a[j]) J=J+1 J s=s+P* GETRazdRazn (1,i+1,m) I=I+1 I PribNew =s Возв рат Рисунок 27 - Схема алгоритма приближения функций формулами Ньютона Варианты заданий для решения задачи приближения функций приведены в таблице 6. Аппроксимация функций методом наименьших квадратов. Входные параметры: N - число узлов интерполяции; y - массив размерности n, содержащий значения функции в узлах интерполяции; x-массив размерности n, содержащий значения узлов интерполяции; q-точка в которой вычисляем значения функции интерполяции. 130 Выходные параметры: приближенное значение функции в точке q; графическая интерпретация результата. Схема алгоритма приведена на рисунке 28. Задание. Аппроксимировать табличную функцию многочленом второй степени методом наименьших квадратов. xi 1 2 3 4 5 yi 2,05 1,94 1,92 1,87 1,77 xi 6 7 8 9 10 yi 1,88 1,71 1,60 1,56 1,40 Текст программы: function Apr_Kv(n:integer;x,y:TVector;q:real):real; var i,j:integer; a:TMatr; b,c:TVector; s:real; begin a[1,1]:=N; s:=0; for i:=1 to N do s:=s+x[i]; a[1,2]:=s; a[2,1]:=s; s:=0; for i:=1 to N do s:=s+x[i]*x[i]; a[1,3]:=s; a[2,2]:=s; a[3,1]:=s; s:=0; for i:=1 to N do s:=s+x[i]*x[i]*x[i]; a[2,3]:=s; a[3,2]:=s; s:=0; for i:=1 to N do s:=s+x[i]*x[i]*x[i]*X[i]; a[3,3]:=s; s:=0; for i:=1to N do s:=s+y[i]; b[1]:=s; s:=0; for i:=1 to N do s:=s+y[i]*x[i]; b[2]:=s; s:=0; for i:=1 to N do s:=s+y[i]*x[i]*x[i]; b[3]:=s; 131 j:=N; N:=3; LinSys(n,a,b,c); Apr_kv:=c[1]+c[2]*q+c[3]*q*q; N:=j; for i:=0 to N-1 do begin a:=apr_kv(x,y,i/10); end; Вычисления по программе привели к следующим результатам: A=-0,004 B=-0,0132 X=1 Y=2,00 X=1,5 Y=1,99 X=2 Y=1,97 X=2,5 Y=1,95 X=3 Y=1,93 X=3,5 Y=1,91 X=4 Y=1,89 X=4,5 Y=1,86 X=5 Y=1,83 X=5,5 Y=1,80 X=6 Y=1,77 X=6,5 Y=1,73 X=7 Y=1,70 X=7,5 Y=1,66 X=8 Y=1,62 X=8,5 Y=1,57 X=9 Y=1,53 X=9,5 Y=1,48 X=10 Y=1,43 132 C=2,0147 Function Apr_kv(n:integer;x,y:: TVector;q:real):real А a[1,1]=N; s=0 I I>N I I>N s=s+y[i] s=s+x[i] I=I+1 I I=I+1 I a[1,2]=s; a[2,1]=s; S=0 I I>N s=s+x[i]*x[i] I=I+1 I b[1]=s; S=0 I I>N s=s+y[i]*y[i] I=I+1 I b[2]=s; S=0 a[1,3]=s; a[2,2]=s; a[3,1]=s; S=0 I I>N I I>N s=s+y[i]*y[i]*y[i] s=s+x[i]*x[i]*x[i] I=I+1 I I=I+1 I b[3]=s; J=n; n=3; a[2,3]=s; a[3,2]=s; S=0 LinSys(n,a,b,c) I I>N Возв рат s=s+x[i]*x[i]*x[i]*x[i] I=I+1 I a[3,3]=s; S=0 А Рисунок 28 - Схема алгоритма аппроксимации функций методом наименьших квадратов Варианты заданий. Значения xi=i0,1; i=1,2…20 одинаковые для всех вариантов 133 Таблица 6 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Вариант 1 2 2,05 1,94 1,92 1,87 1,77 1,88 1,71 1,60 1,56 1,40 1,50 1,26 0,99 0,97 0,91 0,71 0,43 0,54 0,19 0,01 Вариант 2 3 2,09 2,05 2,19 2,18 2,17 2,27 2,58 2,73 2,82 3,04 3,03 3,45 3,62 3,85 4,19 4,45 4,89 5,06 5,63 5,91 Вариант 7 Вариант 8 1 2,18 -0,10 2 2,43 -0,21 3 2,40 0,01 4 2,43 0,05 5 2,65 -0,13 6 2,75 -0,23 7 2,67 -0,21 8 2,66 -0,43 9 2,63 -0,57 10 2,75 -0,44 11 2,41 -0,44 12 2,24 -0,83 13 2,12 -0,78 14 1,74 -0,81 Продолжение таблицы 6 1 2 3 15 1,57 -1,06 16 1,17 -1,41 17 0,96 -1,40 18 0,63 -1,70 19 0,25 -1,96 20 -0,01 -1,91 Вариант 13 134 Значения Вариант 3 4 2,02 1,98 1,67 1,65 1,57 1,42 1,37 1,07 0,85 0,48 0,35 -0,30 -0,61 -1,20 -1,39 -1,76 -2,28 -2,81 -3,57 -4,06 Значения Вариант 9 -0,16 0,01 0,10 0,16 0,05 0,35 0,19 0,50 0,74 1,03 1,06 1,49 1,79 2,03 Yi=y(Xi) Вариант 4 5 1,99 2,03 2,20 2,39 2,19 2,61 2,35 2,60 2,55 2,49 2,50 2,52 2,44 2,35 2,26 2,19 2,24 2,34 1,96 2,19 Yi=y(Xi) Вариант 10 2,09 2,31 2,72 2,77 2,78 2,97 3,00 3,51 3,43 3,58 3,58 3,54 3,82 3,90 Вариант 5 6 2,23 2,29 2,27 2,62 2,72 2,82 3,13 3,49 3,82 3,95 4,22 4,48 5,06 5,50 5,68 6,19 6,42 7,04 7,57 8,10 Вариант 11 2,15 2,41 2,58 2,84 3,28 3,46 4,02 4,11 4,61 5,03 5,34 5,86 6,33 6,81 Вариант 6 7 2,07 2,17 2,21 2,31 2,10 2,09 2,12 1,63 1,78 1,52 1,16 1,07 0,85 0,56 0,10 -0,25 -0,65 -1,06 -1,66 -2,01 Вариант12 0,10 -0,01 -0,19 -0,11 -0,31 -0,78 -0,64 -0,85 -1,18 -1,39 -1,79 -2,02 -2,48 -2,93 4 5 6 7 2,22 3,77 7,21 -3,26 2,50 3,81 7,67 -3,91 2,88 4,00 8,23 -4,41 3,21 3,97 8,68 -4,91 3,63 4,08 9,35 -5,30 3,90 4,08 9,93 -6,00 Значения Yi=y(Xi) Вариант 14 Вариант 15 Вариант 16 Вариант 17 Вариант 18 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 0,17 0,07 0,17 0,05 0,12 0,00 0,01 -0,05 -0,21 -0,50 -0,50 -0,86 -1,24 -1,47 -1,79 -2,25 -2,55 -3,18 -3,60 -3,93 0,80 0,29 0,52 0,77 0,93 1,20 1,20 1,35 1,39 1,48 1,52 1,71 1,72 1,87 1,86 1,89 2,04 1,73 2,04 2,03 Вариант 19 Вариант 20 1 -1,86 - 1,65 2 -1,95 - 2,00 3 -2,12 - 1,87 4 -2,06 - 1,89 5 -2,15 - 1,75 6 -2,00 - 1,59 7 -2,12 -1,44 8 -2,31 -1 ,61 9 -2,29 - 1,00 10 -2,57 - 1,17 11 -2,56 -0,87 12 -2,86 -0,47 Продолжение таблицы 6 1 2 3 13 -2,85 -0,33 14 -3,03 -0,00 15 -3,25 0,34 16 -3,08 0,49 17 -3,29 0,81 18 -3,67 1,37 19 -3,70 1,72 20 -3,85 2,03 1 2 3 4 5 6 Вариант 25 -1,80 -1,66 -1,36 -1,41 -1,13 -0,82 Вариант26 -1,65 -1,64 -1,41 -0,91 -0,63 -0,34 0,04 0,47 0,78 1,01 1,19 1,60 1,93 2,22 2,50 3,01 3,22 3,71 4,23 4,78 5,27 5,75 6,16 6,76 7,30 8,00 Значения Вариант 21 -1,89 -2,07 -2,30 -2,26 -2,34 -2,66 -2,88 -2,85 -3,16 -3,49 -3,88 -4,22 4 -4,45 -4,99 -5,36 -5,71 -6,51 -6,76 -7,35 -8,02 Значения Вариант27 -1,88 -1,69 -1,52 -1,55 -1,16 -1,27 0,08 0,14 0,37 0,36 0,44 0,48 0,27 0,39 0,50 0,48 0,69 0,50 0,31 0,37 0,43 0,33 0,31 0,09 0,08 0,03 Yi=y(Xi) Вариант 22 -1,84 -1,98 -1,72 - 1,58 - 1,69 - 1,59 -1,58 -1,64 - 1,55 - 1,35 - 1,33 - 1,47 -0,02 0,44 0,51 0,67 0,69 1,04 1,1 1,3 1,7 2,0 2,1 2,4 2,90 3,50 3,99 4,06 4,54 4,99 5,36 5,99 0,14 0,23 0,44 0,54 0,72 3,76 0,37 0,64 357 3,44 3,41 0,30 -0,0 -0,03 -0,47 -0,68 -0,93 -1,28 -1,53 -1,93 Вариант 23 -1,92 -1,60 -1,57 -1,41 -1,36 -0,97 -0,59 -0,71 -0,15 0,01 0,22 0,63 Вариант 24 -1,90 -1,80 -1,82 -1,86 -1,83 -2,00 -2,01 -2,05 -2,46 -2,68 -2,85 -2,98 5 - 1,50 - 2,65 - 1,65 - 1,87 - 1,61 - 1,86 - 1,84 - 1,91 Yi=y(Xi) Вариант 28 - ,01 - ,06 - ,88 -3,98 -4,36 -4,18 6 7 1,07 1,42 1,68 2,49 2,57 3,09 3,40 4,00 3,30 -3,40 -3,90 -4,37 -4,65 -5,00 -5,42 -6,13 Вариант 29 -4,13 -4,11 -3,87 -3,74 -3,85 -3,71 Вариант 30 -3,97 -4,07 -4,04 -4,30 -4,27 -4,54 135 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -0,74 -076 -0,64 -0,46 -0,30 -0,27 -0,22 -0,11 -0,02 0,11 0,11 -0,02 0,03 0,01 -0,12 0,25 0,64 0,96 1,50 1,77 2,24 2,93 3,17 3,77 4,42 4,79 5,50 6,01 -1,23 -1,36 -1,26 -1,47 -1,72 -1,76 -2,00 -2,03 -2,35 -2,46 -2,88 -3,27 -3,68 -3,98 -4,16 -4,51 -4,53 -4,38 -4,76 -4,66 -4,82 -4,77 -5,12 -5,23 -5,40 -5,84 -5,86 -6,01 -3,53 -3,56 -3,19 -3.04 -2,83 -2,54 -2,41 -1,97 -1,78 -1,53 -1,04 -0,86 -0,48 0,09 -4,79 -5,07 -5,30 -5,51 -5,83 -6,06 -6,40 -6,83 -7,54 -7,68 -8,36 -8,91 -9,39 -9,98 Тема лабораторной работы №7 для контроля знаний проиллюстрирована контрольно – обучающей программой. 136 Лабораторная работа №8 Решение задачи Коши Одношаговые методы Метод Эйлера Входные параметры: a,b – интервал приближения; n – количество точек приближения; Kolfun – порядок системы; x – начальное значение x 0 ; y_1 – массив из kolfun чисел, содержащий начальное значение y. Выходные параметры: y_1 – массив из kolfun чисел, содержащий приближенное решение системы. Схема алгоритма показана на рисунке 29. Пример. Решить на отрезке [0,3] с шагом 0,1 задачу Коши y1 x y2 y1 (0) 0 xy1 y (0) 0 y x е 2 2 Текст программы: procedure eiler (a,b:real;n,kolfun:integer;x:real;var y_1:TFunZnach);; var t:real; begin t:=(b-a)/n; for i:=1 to n do begin for k:=1 to kolfun do y_1[k]:=y_1[k]+t*f(x,y_1[k]);{F(y1,y2,x)} x:=x+t; end; end; Вычисления по программе привели к следующим результатам: x=0 x=0,1 x=0,2 x=0,3 x=0,4 x=0,5 x=0,6 x=0,7 x=0,8 x=0,9 x=1 x=1,1 x=1,2 x=1,3 x=1,4 x=1,5 x=1,6 x=1,7 x=1,8 x=1,9 x=2 y1=0 y1=0 y1=0,01 y1=0,02 y1=0,05 y1=0,09 y1=0,14 y1=0,20 y1=0,26 y1=0,33 y1=0,40 y1=0,48 y1=0,56 y1=0,65 y1=0,74 y1=0,84 y1=0,94 y1=1,04 y1=1,14 y1=1,24 y1=1,35 y2=0 y2=0,1 y2=0,19 y2=0,29 y2=0,38 y2=0,47 y2=0,55 y2=0,62 y2=0,68 y2=0,74 y2=0,79 y2=0,84 y2=0,88 y2=0,91 y2=0,94 y2=0,97 y2=0,99 y2=1,01 y2=1,03 y2=1,04 y2=1,06 137 x=2,1 x=2,2 x=2,3 x=2,4 x=2,5 x=2,6 x=2,7 x=2,8 x=2,9 y1=1,45 y1=1,56 y1=1,67 y1=1,78 y1=1,89 y1=2,00 y1=2,11 y1=2,22 y1=2,34 y2=1,07 y2=1,08 y2=1,09 y2=1,10 y2=1,11 y2=1,11 y2=1,12 y2=1,12 y2=1,13 procedure eiler(a,b:real;n,kolfun:integ er;x:real;var y_1:TFunZnach); t=(b-a) / n I I>N K K>kolfun y_1[k]=y_1[k]+t*f(x,y_1[k]) x=x+t K=K+1 K I=I+1 I Возв рат Рисунок 29 - Схема алгоритма метода Эйлера Варианты заданий для решения задачи Коши методом Эйлера приведены в таблице 7. Метод прогноза и коррекции Входные параметры: a,b – интервал приближения; n – количество точек приближения; Kolfun – порядок системы; x – начальное значение x 0 ; y_1 – массив из kolfun чисел, содержащий начальное значение y. Выходные параметры: y_1 – массив из kolfun чисел, содержащий приближенное решение системы. Схема алгоритма показана на рисунке 30. 138 Пример. Решить задачу Коши на отрезке [0,3] с шагом 0,1 y1 x y2 y1 (0) 0 xy1 y (0) 0 2 y2 x е Текст программы: procedure prognoz(a,b:real;n,kolfun:integer;x:real;y_0:TFunZnach;var y_1:TFunZnach); var h:real; begin h:=(b-a)/n; for i:=1 to n do begin for k:=1 to kolfun do y_0[k]:=y_0[k]+h*f(x+0.5*h,y_0[k]+0.5*h*f(y_0[k],x)); x:=x+h; end; y_1:=y_0; end; Вычисления по программе привели к следующим результатам: x=0 x=0,1 x=0,2 x=0,3 x=0,4 x=0,5 x=0,6 x=0,7 x=0,8 x=0,9 x=1 x=1,1 x=1,2 x=1,3 x=1,4 x=1,5 x=1,6 x=1,7 x=1,8 x=1,9 x=2 x=2,1 x=2,2 x=2,3 x=2,4 x=2,5 x=2,6 x=2,7 x=2,8 x=2,9 y1=0 y1=0,01 y1=0,02 y1=0,05 y1=0,09 y1=0,14 y1=0,20 y1=0,26 y1=0,33 y1=0,40 y1=0,48 y1=0,57 y1=0,66 y1=0,75 y1=0,84 y1=0,94 y1=1,04 y1=1,14 y1=1,25 y1=1,35 y1=1,46 y1=1,57 y1=1,68 y1=1,79 y1=1,90 y1=2,01 y1=2,13 y1=2,24 y1=2,35 y1=2,47 y2=0 y2=0,1 y2=0,19 y2=0,29 y2=0,38 y2=0,46 y2=0,53 y2=0,60 y2=0,67 y2=0,72 y2=0,77 y2=0,81 y2=0,85 y2=0,88 y2=0,91 y2=0,94 y2=0,96 y2=0,98 y2=1,00 y2=1,01 y2=1,02 y2=1,03 y2=1,04 y2=1,05 y2=1,06 y2=1,07 y2=1,07 y2=1,08 y2=1,08 y2=1,09 139 procedure prognoz(a,b:real;n,kolfun:i nteger;x:real;y_0:TFunZna ch;var y_1:TFunZnach); h=(b-a) / n I I>N K K>kolfun y_0[k]=y_0[k]+h*f(x+0,5*h, y_0[k]+0,5*h*f(y_0[k],x)) K=K+1 K x=x+h I=I+1 I y_1=y_0 Возв рат Рисунок 30 - Схема алгоритма метода прогноза и коррекции Варианты заданий для решения задачи Коши методом прогноза и коррекции приведены в таблице 7. Метод Рунге-Кутта 4-го порядка Входные параметры: a,b – интервал приближения; n – количество точек приближения; Kolfun – порядок системы; x – начальное значение x 0 ; y_1 – массив из kolfun чисел, содержащий начальное значение y. Выходные параметры: y_1 – массив из kolfun чисел, содержащий приближенное решение системы. Схема алгоритма показана на рисунке 31. Пример. Решить задачу Коши на отрезке [0,3] с шагом 0,1 y1 x y2 y1 (0) 0 xy1 y (0) 0 2 y2 x е Текст программы: procedure runge_ku (a,b:real;n,kolfun:integer;x:real;var y_1:TFunZnach); 140 var Kf:array[1..NumFun,1..4] of real; h:real; begin h:=(b-a)/n; for i:=1 to n do begin for k:=1 to kolfun do begin Kf[k,1]:=h*f(x,y_1[k]);{f(t,y1,y2,x);} kf[k,2]:=h*f(x+0.5*h,y_1[k]+0.5*kf[k,1]);{f(met,y1+0.5*t*k1[1],y2+0.5*t*k1[1],x+0.5*t);} kf[k,3]:=h*f(x+0.5*h,y_1[k]+0.5*kf[k,2]);{f_1(met,y1+0.5*t*k1[2],y2+0.5*t*k1[2],x+0.5*t);} kf[k,4]:=h*f(x+h,y_1[k]+kf[k,3]);{f_1(met,y1+t*k1[2],y2+t*k1[2],x+t);} end; x:=x+h; for k:=1 to kolfun do y_1[k]:=y_1[k]+h/6*(kf[k,1]+2*kf[k,2]+2*kf[k,3]+kf[k,4]); еnd; end; procedure runge_ku(a,b:real;n,kolfun :integer;x:real;var y_1:TFunZnach;) h=(b-a)/n I I>N K K>kolfun kf[k,1]=h*f(x,y_1[k]) kf[k,2]=h*f(x+0,5*h,y_1[k]+ 0,5*kf[k,1]) kf[k,3]=h*f(x+0,5*h,y_1[k]+ 0,5*kf[k,2]) kf[k,4]=h*f(x+h,y_1[k]+ kf[k,3]) K=K+1 K x=x+h K K>kolfun y_1[k]=y_1[k]+h/6*(kf[k,1] +2*kf[k,2]+2*kf[k,3]+ kf[k,4]) K=K+1 K I=I+1 I Возв рат Рисунок 31 - Схема алгоритма метода Рунге-Кутта Вычисления по программе привели к следующим результатам: 141 x=0 y1=0 y2=0 x=0,1 y1=0 y2=0,09 x=0,2 y1=0,01 y2=0,19 x=0,3 y1=0,03 y2=0,29 x=0,4 y1=0,06 y2=0,38 x=0,5 y1=0,10 y2=0,46 x=0,6 y1=0,15 y2=0,53 x=0,7 y1=0,20 y2=0,60 x=0,8 y1=0,27 y2=0,66 x=0,9 y1=0,34 y2=0,72 x=1 y1=0,41 y2=0,77 x=1,1 y1=0,49 y2=0,81 x=1,2 y1=0,58 y2=0,85 x=1,3 y1=0,67 y2=0,88 x=1,4 y1=0,76 y2=0,91 x=1,5 y1=0,86 y2=0,94 x=1,6 y1=0,96 y2=0,96 x=1,7 y1=1,06 y2=0,98 x=1,8 y1=1,17 y2=1,00 x=1,9 y1=1,27 y2=1,02 x=2 y1=1,38 y2=1,03 x=2,1 y1=1,49 y2=1,04 x=2,2 y1=1,60 y2=1,05 x=2,3 y1=1,71 y2=1,06 x=2,4 y1=1,82 y2=1,07 x=2,5 y1=1,93 y2=1,08 x=2,6 y1=2,05 y2=1,08 x=2,7 y1=2,16 y2=1,09 x=2,8 y1=2,28 y2=1,09 x=2,9 y1=2,39 y2=1,10 Варианты заданий для решения задачи Коши методом Эйлера приведены в таблице 7. 142 Лабораторная работа №9 Решение задачи Коши Многошаговые методы Метод Адамса (явный) Входные параметры: a,b – интервал приближения; n – количество точек приближения; Kolfun – порядок системы; x – начальное значение x 0 ; y_1 – массив из kolfun чисел, содержащий начальное значение y. Выходные параметры: y_1 – массив из kolfun чисел, содержащий приближенное решение системы. Схема алгоритма показана на рисунке 32. Пример. Решить задачу Коши на отрезке [0,3] с шагом 0,1 y1 x y2 y1 (0) 0 xy1 y (0) 0 y x е 2 2 Текст программы: procedure adams (a,b:real;n,kolfun:integer;x:real;var y_1:TFunZnach); var Fun:array[1..NumFun,1..4] of real; h:real; begin h:=(b-a)/n; for i:=1 to 4 do begin for k:=1 to kolfun do fun[k,i]:=f(y_1[k],x); runge_ku(a,b,1,1,x,y_1); x:=x+h; end; for i:=5 to n do begin for k:=1 to kolfun do begin y_1[k]:=y_1[k]+h/24*(55*fun[k,4]-59*fun[k,3]+37*fun[k,2]-9*fun[k,1]); fun[k,1]:=fun[k,2]; fun[k,2]:=fun[k,3]; fun[k,3]:=fun[k,4]; fun[k,4]:=f(y_1[k],x); end; x:=x+h; end;{ y_1:=y_0;} end Вычисления по программе привели к следующим результатам: x=0 y1=0 y2=0 x=0,1 y1=0 y2=0,09 x=0,2 y1=0,01 y2=0,19 x=0,3 y1=0,03 y2=0,29 x=0,4 y1=0,06 y2=0,38 x=0,5 y1=0,10 y2=0,46 x=0,6 y1=0,15 y2=0,53 x=0,7 y1=0,20 y2=0,60 x=0,8 y1=0,27 y2=0,66 143 x=0,9 y1=0,34 y2=0,72 x=1 y1=0,41 y2=0,77 x=1,1 y1=0,49 y2=0,81 x=1,2 y1=0,58 y2=0,85 x=1,3 y1=0,67 y2=0,88 x=1,4 y1=0,76 y2=0,91 x=1,5 y1=0,86 y2=0,94 x=1,6 y1=0,96 y2=0,96 x=1,7 y1=1,06 y2=0,98 x=1,8 y1=1,17 y2=1,00 x=1,9 y1=1,27 y2=1,02 x=2 y1=1,38 y2=1,03 x=2,1 y1=1,49 y2=1,04 x=2,2 y1=1,60 y2=1,05 x=2,3 y1=1,71 y2=1,06 x=2,4 y1=1,82 y2=1,07 x=2,5 y1=1,93 y2=1,08 x=2,6 y1=2,05 y2=1,08 x=2,7 y1=2,16 y2=1,09 x=2,8 y1=2,28 y2=1,09 x=2,9 y1=2,39 y2=1,10 144 procedure adams(a,b:real;n,kolfun:int eger;x:real;var y_1:TFunZnach) h=(b-a) / n I I>4 K K>kolfun fun[k,i]=f(y_1[k],x) K=K+1 K runge_ku(a,b,1,1,x,y_1) x=x+h I=I+1 I I I>5 K K>kolfun y_1[k]=y_1[k]+h/24*(55*fu n[k,4]-59*fun[k,3]+37*fun[ k,2]-9*fun[k,1]) fun[k,1]=fun(k,2) fun[k,2]=fun(k,3) fun[k,3]=fun(k,4) fun[k,4]=f(y_1[k],x) K=K+1 K x=x+h I=I+1 I Возв рат Рисунок 32 - Схема алгоритма явного метода Адамса Варианты заданий 145 Таблица 7 № варианта 1 1 2 3 F1(x,y1,y2) F2(x,y1,y2) y1(a) y2(a) a b 2 1 arctg( ) 1 y12 y 22 3 4 5 6 7 sin( y1 y2 ) 1 0 -1 1 arctg( x 2 y 22 ) sin( x y1 ) 0,5 1,5 0 2 cos( y1 xy2 ) -1 1 0 4 xy1y2 1 0 0 5 0,2 0 -1 1 0 0 0 4 0,5 -0,6 -0,5 2 1 2 3 5 0 0,5 0 1,2 -1 0 3 2 sin(y1y2) 1 1 1 4 y2 cos x sin 2 x 0,8 3,5 2 3 cos( y1 xy2 ) 1 -1 2 4 cos( xy1 y2 ) sin( y1 y2 ) sin( x y2 ) 0 0 -2 -3 0 -1 2 0 1 5 2 4 0 1 -1 1 y1 x e y1 y2 4 5 y12 y 22 x 1 x 2 y 22 7 8 sin( x 2 y 22 ) sin y 2 x cos( y1 y2 ) 9 10 sin y1 cos 3 y 2 sin(y1y2) 11 2 arctg( 1 2 y2 ) 1 y1 6 12 13 y2 1 x 2 y12 y1 x y12 y 22 1 x 2 y12 cos( xy1 ) cos y1 sin( y1 y2 ) cos y1 cos y2 ) cos(xy1y2) 14 15 16 sin( xy2 ) cos( y1 y2 ) y2ln x 17 cos y1 cos y2 ) 18 arctg( 1 ) 1 y12 y 22 sin y1 0 0 -2 1 y1+y2 x cos( y1 y2 ) cos( y1 y2 ) y2 1 x 2 y12 cos( xy1 ) Y1y2 y2 cos x sin 2 x 0 -1 -1 0 1 5 0 0 2 4 4 4 sin( y1 y2 ) 1 1 0 3 23 cos( x y2 ) sin( x y2 ) 0,7 -0,5 0 4 24 x cos( y1 y2 ) y2 1 x 2 y12 0 0 0 2 x y2 1 x 2 y12 0,2 0 0 3 4 5 6 7 19 20 21 22 25 1 x y Продолжение таблицы 7 1 2 146 y2 2 2 2 y2 1 x 2 y12 3 sin y 2 26 27 28 29 30 y2 1 x 2 y12 sin( xy2 ) y2ln x sin( y1 y2 ) cos( y1 y2 ) 1 -1 0 1 sin( y1 y2 ) -2 3 -1 1 x cos( xy1 ) y1y2 cos( xy1 y2 ) 0 0 -1 0 0 2 0 -5 0 2 0 2 147 Лабораторная работа №10 Численное интегрирование и дифференцирование Метод Симпсона Входные параметры: a,b – интервал интегрирования; h – шаг интегрирования; fun – вид функции. Выходные параметры: d – погрешность интегрирования; res – значение интеграла функции. Схема алгоритма показана на рисунке 33. Пример. Вычислить приближенное значение определенного интеграла с точностью 0,01 1 0 cos x 1 x2 dx Текст программы: procedure Simpson(fun:string;a,b,h:real;var res,d:real); var f0,f1,s,s1,s2,h,x1,x2:real; n:integer; begin form3.Memo1.Lines.Add(''); f0:=Execute(fun,a); f1:=Execute(fun,b); s:=f0-f1; s1:=(b-a)*(f0+f1+4*Execute(fun,(a+b)/2))/6; n:=2; repeat h:=(b-a)/n; x1:=a+h/2; x2:=a+h; s2:=s; for i:=1 to n do begin s2:=s2+4*Execute(fun,x1)+2*Execute(fun,x2); x1:=x1+h; x2:=x2+h; end; s2:=s2*h/6; d:=abs(s1-s2)/15; s1:=s2; n:=n*2; until d<h; res:=s1; end; Вычисления по программе привели к следующим результатам: Результат: - 0.4864297 Погрешность вычисления:0,005 148 procedure simpson(fun:string;a,b,eps :real;var s,d::real;) f0=execute(fun,a) f1=execute(fun,b) s=f0-f1 s1=(b-a)*(f0+f1+4*execute (fun,(a+b)/2))/6 n=2 N N=N*2 h=(b-a)/ n x1=a+h/2 x2=a+h s2=s I I>N s2=s2+4*execute(fun,x1)+ 2*execute(fun,x2) x1=x1+h x2=x2+h I=I+1 I s2=s2*h/ 6 d=abs(s1-s2)/ 15 s1=s2 n=n*2 d<eps N res=s1 Возв рат Рисунок 33 - Схема алгоритма метода Симпсона Варианты заданий для решения дифференцирования приведены в таблице 7. задач численного интегрирования и Квадратурная формула Гаусса Входные параметры: a,b – интервал интегрирования; fun – вид функции. Выходные параметры: d – погрешность интегрирования; res – значение интеграла функции. Схема алгоритма показана на рисунке 34. 149 Пример. точностью 0,01 1 0 cos x 1 x2 Вычислить приближенное значение определенного интеграла с dx Текст программы: Procedure Kvadratur(fun:string;a,b:real;var res,d:real); var c,h,h1,c1,x1,x2,x3,f1,f3,s1,s2:real; n:integer; begin c:=sqrt(3/5); h1:=(b-a)/2; c1:=c*h1; x2:=(b+a)/2; f1:=Execute(fun,x2-c1); f3:=Execute(fun,x2+c1); s1:=h1*(5*f1+8*Execute(fun,x2)+5*f3)/9; n:=2; repeat h:=(b-a)/n; h1:=h/2; c1:=c*h1; x2:=a+h1; x1:=x2-c1; x3:=x2+c1; s2:=0; for i:=1 to n do begin s2:=s2+5*Execute(fun,x1)+8*Execute(fun,x2)+5*Execute(fun,x3); x1:=x1+h; x2:=x2+h; x3:=x3+h; end; s2:=s2*h1/9; d:=abs(s1-s2)/63; s1:=s2; n:=2*n; until d<h; res:=s2; end; Вычисления по программе привели к следующим результатам: Результат: - 0.4863854 Погрешность вычисления:0,007 150 procedure kvadratur(fun:string;a,b,ep s:real;var res,d::real;) c=sqrt(3 / 5) h1=(b-a) / 2 c1=c*h1 x2=(b+a) / 2 f1=execute(fun,x2-c1) f3=execute(fun,x2+c1) s1=h1*(5*f1+8*execute(fu n,x2)+5*f3) / 9 n=2 N N=N*2 h=(b-a)/ n h1=a/2 c1=c*h1 x2=a+h1 x1=x2- c1 x3=x2+c1 s2=0 I I>N s2=s2+5*execute(fun,x1)+ 8*execute(fun,x2)+5*exec ute(fun,x3) x1=x1+h x2=x2+h x3=x3+h I=I+1 I s2=s2*h1/ 9 d=abs(s1-s2)/ 63 s1=s2 n=n*2 d<eps N res=s2 Возв рат Рисунок 34 - Схема алгоритма квадратурной формулы Гаусса Варианты заданий для решения дифференцирования приведены в таблице 7. задач численного интегрирования и 151 Дифференцирование с помощью сплайнов Входные параметры: a,b – интервал дифференцирования; x – точка дифференцирования; n – число точек дифференцирования; fun – вид функции. Выходные параметры: y_1,y_2 – значения первой и второй производной в точке x соответственно. Схема алгоритма показана на рисунке 35. Пример. Продифференцировать функцию e значение точки х=1. x2 , количество точек разбиения 5, Текст программы: procedure Spl_Integr(fun:string;a,b,x:real;n:integer;var y_1,y_2:real); var h,h1,h2,aa:real; y:array of real; begin h:=(b-a)/n; SetLength(y,n-1); aa:=a; for i:=0 to length(y)-1 do begin y[i]:=execute(fun,aa); form3.Memo1.Lines.Add(floattostr(y[i])); aa:=aa+h; end; i:=trunc((x-a)/h+h/2); h1:=2*h; h2:=h*h; if i=0 then begin y_1:=(-3*y[0]+4*y[1]-y[2])/h1; y_2:=(2*y[0]-5*y[1]+4*y[2]-y[3])/h2; end; if (i>0)and(i<n) then begin y_1:=(-y[i-1]+y[i+1])/h1; y_2:=(y[i-1]-2*y[i]+y[i+1])/h2; end; if i=n then begin y_1:=(y[n-2]-4*y[n-1]+3*y[n])/h1; y_2:=(-y[n-3]+4*y[n-2]-5*y[n-1]+2*y[n])/h2; end; end; Вычисления по программе привели к следующим результатам: Первая производная:3,808 Вторая производная:10,00 152 procedure spl_integr(fun:string;a,b,x: real;n:integer;var y_1,y_2::real;) h=(b-a)/ n Setlength(y,n-1) aa=a I I>length(y)-1 y[i]=execute(fun,aa) aa=aa+h I=I+1 I i=trunc((x-a) / h+h/ 2) h1=2*h h2=h*h + i=0 y_1=(- 3*y[0]+4*y[1]y[2])/ h1 y_2=(2*y[0]-5*y[1]+4*y[2]y[3])/ h2 + i>0 andi<n y_1=(- y[i-1]+y[i+1])/ h1 y_2=(y[i-1]-2*y[i]+y[i+1])/ h2 i=n + y_1=(y[n-2]-4*y[n-1]+ 3y[n])/ h1 y_2=(-y[n-3]+4*y[n-2]5*y[n-1]+2*y[n])/ h2 Y_1 Y_2 Возв рат Рисунок 35 - Схема алгоритма дифференцирования с помощью сплайнов Варианты заданий приведены в таблице 7. 153 Лабораторная работа №11 Жесткие задачи для систем ОДУ Метод Гира Входные параметры: n – порядок системы; y0 – массив из n чисел, содержащий решение в начальной точке; eps – интегрирования; masq – массив размерности nn, содержащий матрицу системы. Выходные параметры: res – массив из n чисел, содержащий решение системы. Схема алгоритма показана на рисунке 36. Пример. Решить задачу Коши для системы y1 11 y1 9 y 2 y 2 9 y1 11 y 2 при начальных условиях у1(0)=1, у2(0)=0. Текст программы: procedure gira(a,b:real;n,kolfun:integer;x:real;var y_1:TFunZnach); var fun:array[1..NumFun,1..4] of real; h:real; begin h:=(b-a)/n; for i:=1 to 4 do begin runge_ku(a,b,1,1,x,y_1); x:=x+h; for k:=1 to kolfun do fun[k,i]:=y_1[k]; end; for i:=5 to n do begin for k:=1 to kolfun do begin y_1[k]:=fun[k,4]; runge_ku(a,b,1,1,x,y_1); y_1[k]:=1/25*(48*fun[k,4]-36*fun[k,3]+16*fun[k,2]-3*fun[k,1]+12*h*f(y_1[k],x)); fun[k,1]:=fun[k,2]; fun[k,2]:=fun[k,3]; fun[k,3]:=fun[k,4]; fun[k,4]:=y_1[k]; end; x:=x+h; end; end; Вычисления по программе привели к следующим результатам: 154 Х .10000Е +00 .20000Е +00 .30000Е +00 .40000Е +00 .50000Е +00 .60000Е +00 .70000Е +00 .80000Е +00 .90000Е +00 .10000Е +01 .11000Е +01 .12000Е +01 .13000Е +01 .14000Е +01 .15000Е +01 .16000Е +01 .17000Е +01 .18000Е +01 .19000Е +01 .20000Е +01 У(1) .48703Е +00 .35432Е +00 .28565Е +00 .23483Е +00 .19396Е +00 .16060Е +00 .13330Е +00 .11095Е +00 .83650Е -01 .68668Е -01 .56402Е -01 .46359Е -01 .38137Е -01 .31405Е -01 .25894Е -01 .21381Е -01 .17687Е -01 .14662Е -01 .12185Е -01 .92579Е -02 у(2) .34270Е +00 .32700Е +00 .27417Е +00 .22550Е +00 .18492Е +00 .15159Е +00 .12430Е +00 .10195Е +00 .82750Е -01 .67768Е -01 .55502Е -01 .45459Е -01 .37237Е -01 .30505Е -01 .24994Е -01 .20481Е -01 .16787Е -01 .13762Е -01 .11285Е -01 .91678Е -02 155 procedure gira(a,b:real;n,kolfun:integ er;x:real;var y_1:TFunZnach) h=(b-a)/ n I I>4 runge_ku(a,b,1,1,x, y_1) x=x+h K K>kolfun fun[k,i]=y_1[k] K=K+1 K I=I+1 I I I>5 K K>kolfun y_1[k]=fun[k,4] runge_ku(a,b,1,1,x, y_1) y_1[k]=1/25*(48*fun[k,4]-3 6*fun[k,3]+16*fun[k,2]-3*fu n[k,1]+12*h*f(y_1[k],x)) fun[k,1]=fun[k,2] fun[k,2]=fun[k,3] fun[k,3]=fun[k,4] fun[k,4]=y_1[k] K=K+1 K x=x+h I=I+1 I Возв рат . Рисунок 36 - Схема алгоритма метода Гира 156 Варианты заданий для решения Жестких задач для систем ОДУ приведены в таблице 8. Метод Ракитского (матричной экспоненты). Входные параметры: n – порядок системы; x – начальное значение x; h – шаг интегрирования h; Q – массив из n чисел, содержащий решение в начальной точке; F – массив размерности nn, содержащий матрицу системы. Выходные параметры: X – массив из n чисел, содержащий решение системы. Схема алгоритма показана на рисунке 37. Пример. Решить задачу Коши для системы y1 11 y1 9 y 2 y 2 9 y1 11 y 2 при начальных условиях у1(0)=1, у2(0)=0. Текст программы: Procedure MetRak(N:Word;Var H:Real;A:MasReal;Var F,Q:MasReal;Nts,Ind:Integer); Var RabMas1: MasReal; RabMas2: MasReal; S,Fak : Real; i,j,k : Byte; BEGIN IF Ind=0 Then Begin S:=0; For i := 1 To N Do For j := 1 To N Do S:=S+A[i,j]*A[i,j]; S:=Sqrt(S); H:=0.1/S; Nts := 0; RabMas1 := A; For I := 1 To N Do Begin For J := 1 To N Do Begin Q[i][j] := A[i][j]*H/2; F[i][j] := A[i][j]*H End; Q[i][i] := Q[i][i] + 1; F[i][i] := F[i][i] + 1 End; Fak := 1; For K := 2 To 4 Do Begin Fak := Fak*k; MulMat(N, RabMas1, A, RabMas2); For I := 1 To N Do For J := 1 To N Do Begin F[i][j] := F[i][j] + RabMas2[i][j]*Step(H, k)/Fak; IF k < 4 Then Q[i][j] := Q[i][j] + RabMas2[i][j]*Step(H, k)/(Fak*(k+1)); End; RabMas1 := RabMas2 End; MulConst(N, h, Q) 157 End; IF Nts > 0 Then Begin H := H*Step(2,Nts); MulMat(N, F, F, RabMas1); RabMas2 := F; F := RabMas1; For I := 1 To N Do RabMas2[i][i] := RabMas2[i][i] + 1; MulMat(N, Q, RabMas2, RabMas1); Q := RabMas1 End; End; Вычисления по программе привели к следующим результатам: 158 х .10000Е +00 .20000Е +00 .30000Е +00 .40000Е +00 .50000Е +00 .60000Е +00 .70000Е +00 .80000Е +00 .90000Е +00 .10000Е +01 .11000Е +01 .12000Е +01 .13000Е +01 .14000Е +01 .15000Е +01 .16000Е +01 .17000Е +01 .18000Е +01 .19000Е +01 .20000Е +01 у(1) .47703Е +00 .34432Е +00 .27565Е +00 .22483Е +00 .18396Е +00 .15060Е +00 .12330Е +00 .10095Е +00 .82650Е -01 .67668Е -01 .55402Е -01 .45359Е -01 .37137Е -01 .30405Е -01 .24894Е -01 .20381Е -01 .16687Е -01 .13662Е -01 .11185Е -01 .91579Е -02 у(2) .34170Е +00 .32600Е +00 .27317Е +00 .22450Е +00 .18392Е +00 .15059Е +00 .12330Е +00 .10095Е +00 .82650Е -01 .67668Е -01 .55402Е -01 .45359Е -01 .37137Е -01 .30405Е -01 .24894Е -01 .20381Е -01 .16687Е -01 .13662Е -01 .11185Е -01 .91578Е -02 159 procedure met_rak(n:w ord;;var h:real;a:masreal;var f,q:masreal;nts,ind:integer B A + I I>N ind=0 s=0 J J>N I I>N F[i][j]=F[i][j]+rabmas2[i][j] *step(h,k) / fak J J>N K<4 Q[i][j]=q[i][j]+rabmas2[i][j]* step(h,k) / (Fak*(K+1)) s=s+a[i,j]*a[i,j] J=J+1 J J=J+1 J I=I+1 I rabmas1=rabmas2 s=sqrt(s) h=0,1/ s Nts=0 rabmas1=a I=I+1 I I I>N J J>N multconst(N,H,Q) + NTS>0 Q[i][j]=a[i][j]*h / 2 F[i][j]=a[i][j]*h h=h*step(2,nts) J=J+1 J multmat(n,F,F,rabma s1) Q[i][j]=Q[i][j]+1 F[i][j]=F[i][j]+1 rabmas2=F I=I+1 I I I>N Fak=1 rabmas2[i][i]=rabmas2[i][i] +1 K K>4 I=I+1 I Fak=Fak*K mulmat(N,Q,rabmas 2,rabmas1) multmat(n,rabmas1,a ,rabmas2) Q=rabmas1 A B Возв рат Рисунок 37 - Схема алгоритма метода Ракитского Варианты заданий 160 + Таблица 8 № варианта 1 1 -.18000Е + 01 -.51350Е + 02 .12175Е + 02 .51650Е + 02 2 .22600Е + 02 -.26800Е + 02 -.46000Е + 01 .22000Е + 01 3 .37000Е + 02 -.18917Е + 02 -.13042E + 02 -.20583Е + 02 4 .48900Е + 02 -.15200Е + 02 -.19400Е + 02 -.36700Е + 02 5 .59800Е + 02 .13150Е + 02 -.24925Е + 02 -.50150Е + 02 6 .70200Е + 02 -.11933Е + 02 -.30033Е + 02 -.62267Е + 02 7 .80314Е + 02 .11193Е + 02 -.34904Е + 02 -.73621Е + 02 8 .90250Е + 02 .10750Е + 02 -.39625Е + 02 -.84500Е + 02 9 .10007Е + 03 -.10506Е + 02 -.44247Е + 02 -.95061Е + 02 .23200Е+02 -.41500Е+02 -.25000Е+00 .16800Е+02 .47600Е+02 -.22000Е+02 -.17000Е+02 -.27600Е+02 .65333Е+02 -.15833Е+02 -.27083E+02 -.52000Е+02 .81400Е+02 -.13000Е+02 -.35500Е+02 -.71400Е+02 .96800Е+02 -.11500Е+02 -.43250Е+02 -.88800Е+02 .11187Е+03 -.10667Е+02 -.50667Е+02 -.10520Е+03 .12674Е+02 -.10214Е+02 -.57893Е+02 -.12103Е+03 .14150Е+03 -.1000Е+02 -.65000Е+02 -.13650Е+03 .15618Е+03 -.99444Е+01 -.72028Е+02 -.15173Е+03 2 .97000Е + 01 -.40000Е + 02 .50000Е + 01 .30300Е + 02 .29600Е + 02 -.20000Е + 02 -.10000Е + 02 -.96000Е + 01 .42833Е + 02 -.1ЗЗЗЗЕ + 02 -.18333E + 02 -.29500Е + 02 .54400Е + 02 -.10000Е + 02 -.25000Е + 02 -.44400Е + 02 .65300Е + 02 -.80000Е + 01 -.З1000Е + 02 -.57300Е + 02 .75867Е + 02 -.66667Е + 01 -.36667Е + 02 -.69200Е + 02 .86243Е + 02 -.57143Е + 01 .42143Е + 02 -.80529Е + 02 .96500Е + 02 -.50000Е + 01 -.47500Е + 02 -.91500Е + 02 .10668Е + 03 -.44444Е + 01 -.52778Е+02 -.10223Е + 03 .83500Е + 01 -.31350Е + 02 .21750Е + 01 .21500Е + 02 .27800Е + 02 -.16800Е + 02 -.96000Е + 01 -.1ЗОООЕ+02 .40583Е + 02 -.12250Е + 02 -.16375E + 02 -.30833Е + 02 .51700Е + 02 -.10200Е + 02 -.21900Е + 02 -.44500Е + 02 .62150Е + 02 -.91500Е + 01 -.26925Е + 02 -.56500Е + 02 .72267Е + 02 -.86000Е + 01 -.31700Е + 02 -.67667Е + 02 .82193Е + 02 -.83357Е + 01 -.36332Е + 02 -.78357Е + 02 .92000Е + 02 -.82500Е + 01 -.40875Е + 02 -.88750Е + 02 .10173Е + 03 -.82833Е + 01 -.45358Е + 02 -.98944Е + 02 Вектор начальных условий 3 .8415Е+00 .5403Е+00 -.4161Е+00 .9093Е+00 .9093Е+00 -.4161Е+00 -.6536Е+00 -.7568Е+00 .1411Е+00 -.9900Е+00 .9602E+00 -.2794Е+00 -.7568Е+00 -.6536Е+00 -.1455Е+00 .9894Е+00 -.9589Е+00 .2837Е+00 -.8391Е+00 -.5440Е+00 .9602Е+00 .9602Е+00 .8439Е+00 -.5366Е+00 .6570Е+00 .7539Е+00 .1367Е+00 .9906Е+00 .9894Е+00 -.1455Е+00 -.9577Е+00 -.2879Е+00 .4121Е+00 -.9111Е+00 .6603Е+00 -.7510Е+00 3 .17080Е+03 -.1000Е+02 -.79000Е+02 -.16680Е+03 .18538Е+03 -.10136Е+02 4 .11680Е + 03 -.40000Е + 01 -.58000Е + 02 -.11280Е + 03 .12688Е + 03 -.36364Е + 01 5 .11140Е + 03 -.84000Е + 01 -.49800Е + 02 -.10900Е + 03 .12103Е + 03 -.85773Е + 01 6 -.5440Е+00 -.8391Е+00 .4081Е+00 .9129Е+00 -.1000Е+01 .4426Е-02 Матрица системы Продолжение таблицы 8 1 10 11 2 .10980Е + 03 -.10400Е + 02 -.48800Е + 02 -.10540Е + 03 .11947Е + 03 -.10395Е + 02 161 -.53302Е + 02 -.11558Е + 03 12 .12910Е + 03 -.10467Е + 02 -.57767Е + 02 -.12563Е + 03 13 .13869Е + 03 -.10596Е + 02 -.62202Е + 02 -.13560Е + 03 14 .14826Е + 03 .10983Е + 02 -.66614Е + 02 -.14549Е + 03 15 .15780Е + 03 -.10983Е + 02 -.71008Е + 02 -.15532Е + 03 16 .16732Е + 03 -.11225Е + 02 -.75387Е + 02 -.16510Е + 03 17 .17684Е + 03 -.11491Е + 02 -.79754Е + 02 -.17484Е + 03 18 .18633Е + 03 -.11778Е + 02 -.84111Е + 02 -.18456Е + 03 19 .19582Е + 03 -.12082Е + 02 -.88459Е + 02 .19424Е + 03 20 .20530Е + 03 -.12400Е + 02 Продолжение таблицы 8 1 21 22 23 162 2 -.92800Е + 02 -.20390Е + 03 .21477Е + 03 -.12731Е + 02 -.97135Е + 02 -.21354Е + 03 .22424Е + 03 -.13073Е + 02 -.10146Е + 03 -.22316Е + 03 .23370Е + 03 -.13424Е + 02 -.10579Е + 03 -.85932Е+02 -.18175Е+03 .19993Е+03 -.10333Е+02 -.92833Е+02 -.19660Е+03 .21446Е+03 -.10577Е+02 -.99712Е+02 -.21138Е+03 .22897Е+03 -.10857Е+02 -.10657Е+03 -.22611Е+03 .24347Е+03 -.11167Е+02 -.11342Е+03 -.24080Е+03 .25795Е+03 -.11500Е+02 -.12025Е+03 -.25545Е+03 .27242Е+03 -.11853Е+02 -.12707Е+03 -.27007Е+03 .28689Е+03 -.12222Е+02 -.13389Е+03 -.28467Е+03 .30135Е+03 -.12605Е+02 -.14070Е+03 -.29924Е+03 .31580Е+03 -.13000Е+02 -.63182Е + 02 -.12325Е + 03 .13693Е + 03 -.33333Е + 01 -.68333Е + 02 -.13360Е + 03 .14696Е + 03 -.30769Е + 01 -.73462Е + 02 -.14388Е + 03 .15697Е + 03 -.28571Е + 01 -.78571Е + 02 .15411Е + 03 .16697Е + 03 -.26667Е + 01 -.83667Е + 02 -.16430Е + 03 .17695Е + 03 -.25000Е + 01 -.8875Е + 02 -.17445Е + 03 .18692Е + 03 -.23529Е + 01 -.93824Е + 02 -.18457Е + 03 .19689Е + 03 -.22222Е + 01 -.98889Е + 02 -.19467Е + 03 .20685Е + 03 -.21053Е + 02 -.10395Е + 03 -.20474Е + 03 .21680Е + 03 -.20000Е + 01 -.54211Е + 02 -.11895Е + 03 .13063Е + 03 -.88000Е + 01 -.58600Е + 02 -.12883Е + 03 .14021Е + 03 -.90577Е + 01 -.62971 Е + 02 -.13865Е + 03 .14977Е+03 -.93429Е + 01 -.67329Е + 02 -.14843Е + 03 .15932Е + 03 -.96500Е + 01 -.71675Е + 02 -.15817Е + 03 .16885Е + 03 -.99750Е + 01 -.76013Е + 02 -.16788Е + 03 .17837Е + 03 -.10315Е + 02 -.80343Е + 02 -.17756Е + 03 .18789Е + 03 -.10667Е + 02 - 84667Е + 02 -.18722Е + 03 .19740Е + 03 -.11029Е + 02 -.88986Е + 02 -.19687Е + 03 .20690E + 03 -.11400Е + 02 -.1000Е+01 -.8851Е-02 -.5366Е+00 .8439Е+00 .4242Е+00 -.9056Е+00 .4202Е+00 .9074Е+00 .6469Е+00 .7626Е+00 .9906Е+00 .1367Е+00 -.9626Е+00 .2709E+00 .6503Е+00 -.7597Е+00 .1543Е+00 -.9880Е+00 -.2879Е+00 -.9577Е+00 .8342Е+00 .5514Е+00 -.9614Е+00 -.2752Е+00 -.8486Е+00 .5291Е+00 -.7510Е+00 .6603Е+00 -.1280Е+00 -.9918Е+00 .1499Е+00 .9887Е+00 .9551Е+00 .2964Е+00 .9129Е+00 .4081Е+00 3 -.14750Е+03 -.31380Е+03 .33025Е+03 -.13405Е+02 -.15430Е+03 -.32834Е+03 .34469Е+03 -.13818Е+02 -.16109Е+03 -.34287Е+03 .35913Е+03 -.14239Е+02 -.16788Е+03 4 -.10900Е + 03 -.21480Е + 03 .22675Е + 03 -.19048Е + 01 -.11405Е + 03 -.22484Е + 03 .23669Е + 03 -.18182Е + 01 -.11909Е + 03 -.23487Е + 03 .24663Е+03 -.17391Е + 01 -.12413Е + 03 5 -.93300Е + 02 -.20650Е + 03 .21640Е + 03 -.11779Е + 02 -.97611Е + 02 -.21612Е + 03 .22589Е + 03 -.12164Е + 02 -.10192Е + 03 -.22573Е + 03 .23538Е+03 -.12554Е + 02 -.10622Е + 03 6 -.6669Е+00 .7451Е+00 .8367Е+00 -.5477Е+00 -.4000Е+00 -.9165Е+00 -.8851Е-02 -.1000Е+01 .9998Е+00 .1770Е-01 -.8462Е+00 -.5328Е+00 -.4322Е+00 24 25 26 27 28 29 30 -.23277Е + 03 .24315Е + 03 -.13783Е + 02 -.11011Е + 03 -.24237Е + 03 .25260Е + 03 -.14150Е + 02 -.11443Е + 03 -.25195Е + 03 .26205Е + 03 -.14523Е + 02 -.11874Е + 03 -.26152Е + 03 .27149Е + 03 -.14523Е + 02 -.12305Е + 03 -.27109Е + 03 .28093Е + 03 -.15286Е + 02 -.12736Е + 03 -.28064Е + 03 .29037Е + 03 -.15674Е + 02 -13166Е + 03 -.29019Е + 03 .29980Е + 03 -.16067Е + 02 -.13597Е + 03 -.29973Е + 03 -.35739Е+03 .37357Е+03 -.14667Е+02 -.17467Е+03 -.37190Е+03 .38800Е+03 -.15100Е+02 -.18145Е+03 -.38640Е+03 .40243Е-03 -.15538Е+02 -.18823Е+03 -.40089Е+03 .41686Е+03 -.15981Е+02 -.19501Е+03 -.41538Е+03 .43129Е+03 -.16429Е+02 -.20179Е+03 -.42986Е+03 .44571Е+03 -.16879Е+02 -.20856Е+03 -.44433Е+03 .46013Е+03 -.17333Е+02 -.21533Е+03 -.45880Е+03 -.24489Е + 03 .25657Е + 03 -.16667Е + 01 -.12917Е + 03 -.25490Е + 03 .26650Е + 03 -.16000Е + 01 -.13420Е + 03 -.26490Е + 03 .27643Е + 03 -.15385Е + 01 -.13923Е + 03 -.27489Е + 03 .28636Е + 03 -.14815Е + 01 -.14426Е + 03 -.28488Е + 03 .29629Е + 03 -.14286Е + 01 -.14929Е + 03 -.29486Е + 03 .30621Е + 03 -.13793Е + 01 -.15431Е + 03 -.30483Е + 03 .31613Е + 03 -.13333Е - 0l -.15933Е + 03 -.31480Е + 03 -.23533Е + 03 .24487Е + 03 -.12950Е + 02 -.11053Е + 03 -.24492Е + 03 .25435Е + 03 -.13350Е + 02 -.11482Е + 03 -.25450Е + 03 .26383Е + 03 -.13754Е + 02 -.11912Е + 03 -.26408Е + 03 .27331Е + 03 -.14161Е + 02 -Л2342Е+03 .27365Е+03 .28279Е + 03 -.14571Е + 02 -.12771Е + 03 -.28321Е + 03 .29226Е + 03 -.14984Е + 02 -.13201Е + 03 -.29278Е + 03 .30173Е + 03 -.15400Е + 02 -.13630Е + 03 -.30233Е + 03 .9018Е+00 -.9056Е+00 .4242Е+00 -.6401Е+00 -.7683Е+00 -.1324Е+00 .9912Е+00 .9650Е+00 -.2624Е+00 .7626Е+00 .6469Е+00 -.1630Е+00 .9866Е+00 .9564Е+00 -.2921Е+00 -.8293Е+00 -.5588Е+00 .2709Е+00 -.9626Е+00 .8532Е+00 -.5216Е+00 -.6636Е+00 -.7481Е+00 .1192Е+00.992 9Е+00 -.9880Е+00 .1543Е+00 -.9524Е+00 -.3048Е+00 163