- •Содержание
- •1. Основные понятия и определения
- •1.1. Структура персональной ЭВМ
- •1.2. Размещение данных и программ в памяти ПЭВМ
- •1.3. Программные модули
- •1.4. Ошибки
- •1.5. Функциональная и модульная декомпозиции
- •1.6. Файловая система хранения информации
- •1.7. Операционная система
- •2. Понятие алгоритмов и способы их описания
- •2.1. Свойства алгоритмов
- •2.2. Способы описания алгоритмов
- •3. Базовые элементы языка Cи
- •3.1. Алфавит языка
- •3.2. Лексемы
- •3.3. Идентификаторы и ключевые слова
- •3.4. Знаки операций
- •3.5. Литералы (константы)
- •3.6. Комментарии
- •4. Базовые типы объектов
- •4.1. Простейшая программа
- •4.2. Основные типы данных
- •4.3. Декларация объектов
- •4.4. Данные целого типа (int)
- •4.5. Данные символьного типа (char)
- •4.6. Данные вещественного типа (float, double)
- •5. Константы в программах
- •5.1. Целочисленные константы
- •5.2. Константы вещественного типа
- •5.3. Символьные константы
- •5.4. Строковые константы
- •6. Обзор операций
- •6.1. Операции, выражения
- •6.2. Арифметические операции
- •6.3. Операции присваивания
- •6.4. Сокращенная запись операции присваивания
- •6.5. Преобразование типов операндов арифметических операций
- •6.6. Операция приведения типа
- •6.7. Операции сравнения
- •6.8. Логические операции
- •6.9. Побитовые логические операции, операции над битами
- •6.10. Операция «,» (запятая)
- •7. Обзор базовых инструкций языка Си
- •7.1. Стандартная библиотека языка Си
- •7.2. Стандартные математические функции
- •7.3. Функции вывода данных
- •7.4. Функции ввода информации
- •7.5. Ввод - вывод потоками
- •8. Синтаксис операторов языка Cи
- •8.1. Условные операторы
- •8.2. Условная операция «? :»
- •8.3. Оператор выбора альтернатив (переключатель)
- •9. Составление циклических алгоритмов
- •9.1. Понятие цикла
- •9.2. Оператор с предусловием while
- •9.3. Оператор цикла с постусловием do – while
- •9.4. Оператор цикла с предусловием и коррекцией for
- •10. Операторы передачи управления
- •10.1. Оператор безусловного перехода goto
- •10.2. Оператор continue
- •10.3. Оператор break
- •10.4. Оператор return
- •11.1. Операции над указателями (косвенная адресация)
- •11.2. Ссылка
- •12. Массивы
- •12.1. Одномерные массивы
- •12.2. Многомерные массивы
- •12.3. Операция sizeof
- •12.4. Применение указателей
- •12.5. Указатели на указатели
- •13. Работа с динамической памятью
- •13.1. Пример создания одномерного динамического массива
- •13.2. Пример создания двухмерного динамического массива
- •14. Строки в языке Си
- •14.1. Русификация под Visual
- •15. Функции пользователя
- •15.1. Декларация функции
- •15.2. Вызов функции
- •15.3. Операция typedef
- •15.4. Указатели на функции
- •16. Классы памяти и области действия объектов
- •16.1. Автоматические переменные
- •16.2. Внешние переменные
- •16.3. Область действия переменных
- •17. Структуры, объединения, перечисления
- •17.1. Структуры
- •17.2. Декларация структурного типа данных
- •17.3. Создание структурных переменных
- •17.4. Вложенные структуры
- •17.5. Массивы структур
- •17.6. Размещение структурных переменных в памяти
- •17.7. Объединения
- •17.8. Перечисления
- •18. Файлы в языке Си
- •18.1. Открытие файла
- •18.2. Закрытие файла
- •18.3. Запись – чтение информации
- •18.4. Текстовые файлы
- •18.5. Бинарные файлы
- •Литература
- •Приложение 1. Таблицы символов ASCII
- •Приложение 2. Операции языка Си
- •Приложение 3. Возможности препроцессора
- •1. Вид рабочего стола консольного приложения Visual C++
- •2. Создание нового проекта
- •3. Добавление к проекту файлов с исходным кодом
- •4. Компиляция, компоновка и выполнение проекта
- •5. Конфигурация проекта
- •6. Открытие существующего проекта
- •Приложение 5. Некоторые возможности отладчика Visual C++
- •1. Установка точки прерывания
- •2. Пошаговое выполнение программы
- •3. Проверка значений переменных во время выполнения программы
- •4. Окна Auto и Watch 1
- •5. Программные средства отладки
- •ЧАСТЬ 2
- •1. Системы счисления
- •1.1. Общие определения
- •1.2. Алгоритмы перевода из одной системы счисления в другую
- •2. Организация памяти и структуры данных
- •3. Линейные списки и рекурсия
- •4. Динамическая структура данных – СТЕК
- •5. Динамическая структура данных – ОЧЕРЕДЬ
- •6. Двунаправленный линейный список
- •7. Построение обратной польской записи
- •8. Нелинейные структуры данных
- •Пояснение к программе
- •9. Понятие хеширования
- •9.1. Хеш-функция и хеш-таблица
- •9.2. Схемы хеширования
- •10. Элементы теории погрешностей
- •10.1. Методы реализации математических моделей
- •10.2. Источники погрешностей
- •10.3. Приближенные числа и оценка их погрешностей
- •10.4. Прямая задача теории погрешностей
- •10.5. Обратная задача теории погрешностей
- •10.6. Понятия устойчивости, корректности и сходимости
- •11. Вычисление интегралов
- •11.1. Формулы численного интегрирования
- •11.2. Формула средних
- •11.3. Формула трапеций
- •11.4. Формула Симпсона
- •11.5. Схема с автоматическим выбором шага по заданной точности
- •12. Методы решения нелинейных уравнений
- •12.1. Итерационные методы уточнения корней
- •12.2. Метод Ньютона
- •12.3. Метод секущих
- •12.4. Метод Вегстейна
- •12.5. Метод парабол
- •12.6. Метод деления отрезка пополам
- •13. Решение систем линейных алгебраических уравнений
- •13.1. Прямые методы решения СЛАУ
- •13.2. Метод Гаусса
- •13.3. Метод прогонки
- •13.4. Метод квадратного корня
- •13.5. Итерационные методы решения СЛАУ
- •13.6. Метод простой итерации
- •14. Поиск и сортировка
- •14.1. Последовательный поиск в массиве
- •14.2. Барьерный последовательный поиск
- •14.3. Сортировка вставками (включениями)
- •14.4. Двоичный поиск
- •14.5. Сортировка выбором
- •14.6. Алгоритмы сортировки выбором
- •14.7. Сортировка обменом
- •14.8. Быстрая сортировка
- •15. Обработка статистических данных
13. Решение систем линейных алгебраических уравнений
Система линейных алгебраических уравнений (СЛАУ) является одной из математических моделей линейной алгебры. На ее базе ставятся такие важные практические математические задачи, как:
−непосредственное решение линейных систем;
−вычисление определителей матриц;
−вычисление элементов обратных матриц;
−определение собственных значений и собственных векторов матриц. Решение линейных систем является одной из самых распространенных и
важных задач вычислительной математики. К их решению сводятся многочисленные практические задачи нелинейного характера, решения дифференциальных уравнений и др.
Вторая и третья задачи являются также и компонентами технологии решения самих линейных систем.
Обычно СЛАУ n-го порядка записывается в виде
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
∑aij x j = bi ; i = |
1,n |
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
j=1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
или в развернутой форме |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
a |
|
x |
|
+a |
|
x |
2 |
+...+a |
|
|
x |
n |
=b |
|
|
|||||||||
|
|
|
11 |
1 |
12 |
|
|
|
|
1n |
|
|
1 |
|
|
|
|||||||||||
|
|
|
a |
|
x |
+a |
|
|
x |
|
|
+...+a |
2n |
x |
n |
=b |
|
(13.1) |
|||||||||
|
|
|
|
21 1 |
|
22 |
|
|
2 |
L |
|
|
2 |
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
+an2 x2 |
|
+...+ann xn |
=bn |
|
|
|||||||||||||||
|
|
|
an1x1 |
|
|
|
|||||||||||||||||||||
или в векторной форме |
|
|
|
|
A x = |
|
|
, |
|
|
|
|
|
|
|
|
|
|
(13.2) |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
b |
|
|
|
|
|
|
|
|
|
|
|||||||||
где |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a11 a12 La1n |
|
|
|
|
|
|
|
x1 |
|
|
|
|
|
|
b1 |
|
|||||||||||
a |
|
a |
|
La |
|
|
|
|
|
|
|
|
x |
|
|
|
|
|
|
|
|
b |
|
||||
A = |
21 |
|
22 |
|
|
|
2n ; |
|
|
|
|
|
|
x = |
2 |
|
; |
|
b = |
2 |
. |
||||||
|
|
L |
|
|
|
|
|
|
|
|
|
|
M |
|
|
|
|
|
|
|
|
M |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
an1 |
an2 Lann |
|
|
|
|
|
|
xn |
|
|
|
|
|
|
bn |
|
|||||||||||
В приведенных формах А называется основной матрицей системы с n2 элементами;
x = (x1, x2, ... , xn)Т − вектор-столбец неизвестных;
b = (b1, b2, ... , bn)Т − вектор-столбец свободных членов.
Определителем (детерминантом − det) матрицы А n-го порядка называется число D (det A), равное
177
|
a11 a12 La1n |
|
| A | = D = det A = |
a21 a22 La2n = ∑(−1)k a1α a2β L anω . |
(13.3) |
|
L |
|
an1 an2 Lann
Здесь индексы α, β, ..., ω пробегают все возможные n! перестановок номеров 1, 2, ..., n; k − число инверсий в данной перестановке.
Первоначальным при решении СЛАУ (13.1) является анализ вида исходной матрицы А и вектора-столбца свободных членов b в (13.2).
Если все свободные члены равны нулю, т.е. b = 0, то система A x = 0 назы-
вается однородной. Если же b ≠ 0, или хотя бы одно bi ≠ 0 (i =1,n ), то система
(13.2) называется неоднородной.
Квадратная матрица А называется невырожденной, или неособенной, если ее определитель |A| ≠ 0. При этом система (13.1) имеет единственное решение.
При |A| = 0 матрица А называется вырожденной, или особенной, а система (13.1) не имеет решения, либо имеет бесконечное множество решений.
Если |A| ≈ 0 система (13.1) называется плохо обусловленной, т.е. решение очень чувствительно к изменению коэффициентов системы.
В ряде случаев получаются системы уравнений с матрицами специальных видов: диагональные, трехдиагональные (частный случай ленточных), симметричные (аij = aji), единичные (частный случай диагональной), треугольные и др.
Решение системы (13.2) заключается в отыскании вектора-столбца x = (x1,
x2, ... , xn)Т, который обращает каждое уравнение системы в тождество. Существуют две величины, характеризующие степень отклонения получен-
ного решения от точного, обусловленные округлением и ограниченностью разрядной сетки ЭВМ − погрешность ε и «невязка» r:
ε=x −x *
(13.4)
r =B −A x *
где x * − вектор решения.
Доказано, что если ε ≈ 0, то и r = 0. Обратное утверждение не всегда верно. Однако если система не плохо обусловлена, для оценки точности решения используют невязку r.
Методы решения СЛАУ делятся на две группы:
−прямые (точные);
−итерационные (приближенные).
13.1. Прямые методы решения СЛАУ
К прямым относятся такие методы, которые, в предположении, что вычисления ведутся без округлений, позволяют получить точные значения неизвестных. Они просты, универсальны и используются для широкого класса систем. Однако они не применимы к системам больших порядков (n<200) и к плохо обусловленным системам из-за возникновения больших погрешностей. К ним можно отне-
178
сти: правило Крамера, методы обратных матриц, Гаусса, прогонки, квадратного корня и др.
13.2. Метод Гаусса
Этот метод является наиболее распространенным методом решения СЛАУ. В его основе лежит идея последовательного исключения неизвестных. (В основном, приводящее исходную систему к треугольному виду, в котором все коэффициенты ниже главной диагонали равны нулю). Существуют различные вычислительные схемы, реализующие этот метод. Наибольшее распространение имеют схемы с выбором главного элемента либо по строке, либо по столбцу, либо по всей матрице. С точки зрения простоты реализации, хотя и с потерей точности, перед этими схемами целесообразней применять так называемую схему единственного деления. Рассмотрим ее суть.
Используя диагональный коэффициент первого уравнения исключается х1 из последующих уравнений. Далее посредством второго уравнения исключается х2 из последующих уравнений и т.д. Этот процесс называется прямым ходом Гаусса. Исключение неизвестных повторяется до тех пор, пока в левой части последнего n-го уравнения не останется одно неизвестное хn
a′nnxn = b′, |
(13.6) |
где a′nn и b′ − коэффициенты, полученные в результате линейных (эквивалентных) преобразований.
Прямой ход реализуется по формулам
а*mi = ami − aki |
amk |
, k = |
|
|
|
|
|
|
|
|||
1,n −1; i =k,n ; |
|
|||||||||||
|
|
|||||||||||
|
akk |
amk |
|
|
|
|
|
|
|
|
||
b*m = bm |
− b |
, m= |
|
|
(13.7) |
|||||||
k +1,n |
||||||||||||
|
||||||||||||
|
k |
akk |
|
|||||||||
где m − номер уравнения, из которого исключается xk;
k − номер неизвестного, которое исключается из оставшихся (n−k) уравнений, а также обозначает номер уравнения, с помощью которого исключается xk;
i − номер столбца исходной матрицы;
akk − главный (ведущий) элемент матрицы.
Во время счета необходимо следить, чтобы akk ≠ 0. В противном случае прибегают к перестановке строк матрицы.
Обратный ход метода Гаусса состоит в последовательном вычислении xn, xn−1, ..., x1, начиная с (6) по алгоритму
|
|
1 |
|
|
n |
|
|
|
|
|
xn = b′ / a′nn ; |
xk = |
bk′ |
− |
∑a′ki xi , k = |
|
|
(13.8) |
|||
n −1,1. |
||||||||||
akk′ |
||||||||||
|
|
|
|
i=k+1 |
|
|
||||
Точность полученного решения оценивается посредством «невязки» (13.4). В векторе невязки (r1, r2, ... , rn)Т отыскивается максимальный элемент и сравнива-
179
ется с заданной точностью ε. Приемлемое решение будет, если rmax < ε. В противном случае следует применить схему уточнения решения.
Уточнение корней
Полученные методом Гаусса приближенные значения корней можно уточ-
нить.
Пусть для системы A x = b найдено приближенное решение х0. Положим x = x0 +δ . Для получения поправки δ = (δ1, δ2, ..., δn)Т корня x0 следует рассмот-
реть новую систему |
|
A ( x0 +δ) = b |
или Aδ = ε , |
где ε=b −A x0 − невязка для исходной системы.
Таким образом, решая линейную систему с прежней матрицей А и новым свободным членом ε = (ε1, ε2, ..., εn)Т, получим поправки (δ1, δ2, ..., δn).
Модифицированный метод Гаусса
В данном случае помимо соблюдения требования akk ≠ 0 при реализации формул (13.7) накладываются дополнительные требования, чтобы ведущий (главный) элемент в текущем столбце в процессе преобразований исходной матрицы имел максимальное по модулю значение. Это также достигается перестановкой строк матрицы.
Блок-схема модифицированного метода Гаусса, представленна на рис. 8.
180
