- •Содержание
- •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.5. Итерационные методы решения СЛАУ
К приближенным относятся методы, которые даже в предположении, что вычисления ведутся без округлений, позволяют получить решение системы лишь с заданной точностью. Это итерационные методы, т.е. методы последовательных приближений. К ним относятся методы простой итерации, Зейделя.
Напомним, что достоинством итерационных методов является их применимость к плохо обусловленным системам и системам высоких порядков, их «самоисправляемость» и простота реализации на ЭВМ. Итерационные методы для начала вычисления требуют задания какого-либо начального приближения к искомому решению.
Следует заметить, что условия и скорость сходимости итерационного процесса существенно зависят от свойств матрицы А системы и от выбора начальных приближений.
Для применения метода итераций исходную систему (13.1) или (13.2) необходимо привести к виду
x = G x + |
|
f |
|
|
(13.25) |
и затем итерационный процесс строится по рекуррентным формулам |
|||||
x(k+1) = G x(k ) + |
|
, k = 0, 1, 2, ... . |
(13.26) |
||
f |
|||||
Для сходимости (13.26) необходимо и достаточно, чтобы |
|λi(G)| < 1, где |
λi(G) − все собственные значения матрицы G.
Чаще всего останавливаются на проверке условий (|| ... || – норма матрицы):
|
n |
n |
|
||G|| < 1, |
||G|| = max ∑| gij |, или |
||G|| = max ∑| gij |, |
(13.27) |
|
1≤i≤n j=1 |
1≤ j≤n i=1 |
|
или, если исходная матрица А имеет диагональное представление, т.е.
|
|
n |
A ={aij }1n . |
|
|aii | > |
|
∑| aij |, |
(13.28) |
|
|
i, j=1;i≠ j |
|
|
|
Если (13.27) или (13.28) выполняются, метод итерации сходится при любом |
||||
начальном приближении x(0) . Чаще всего вектор x(0) |
берут или нулевым, или |
|||
единичным, или сам вектор |
f |
из (13.25). |
|
|
Имеется много подходов к преобразованию исходной системы (13.2) с матрицей А для обеспечения вида (13.25) или условий сходимости (13.27) и (13.28).
Например, (13.25) можно получить следующим образом.
Пусть |
А = В+С, |
det В ≠ 0; |
||||||||||||||||||||||||
тогда |
(B+С) x = |
|
|
|
|
B |
|
|
= −C |
|
+ |
|
B−1B |
|
= − B−1 C |
|
+ B−1 |
|
, |
|||||||
b |
x |
x |
b |
x |
x |
b |
||||||||||||||||||||
откуда |
|
|
= − B−1 C |
|
+ B−1 |
|
. |
|
|
|
|
|||||||||||||||
|
x |
x |
b |
|||||||||||||||||||||||
Положив −B−1 C = G, |
B−1 |
|
= |
|
и получим (13.25). |
|||||||||||||||||||||
b |
f |
Из условий сходимости (13.27) и (13.28) видно, что представление А = В+С не может быть произвольным.
188
Если матрица А удовлетворяет требованиям (13.28), то в качестве матрицы В можно выбрать нижнюю треугольную
B =
Или
a11 |
0 L 0 |
|
|
||||
|
a |
|
a |
|
L 0 |
|
, aii ≠ 0. |
|
|
21 |
|
22 |
|
|
|
|
|
|
L |
|
|
|
|
|
an1 |
|
|
|
|
|
|
|
an2 Lann |
|
A x = b ; A x − b = 0 ; x + (A x − b) = x ;
x = x +α(A x − b) = x +α A x −αb = ( E +α A) x −αb = G x + f .
Подбирая параметр α можно добиться, чтобы ||G|| = ||E + αA|| < 1.
Если имеет место преобладание (13.28), тогда преобразование к (13.25) можно осуществить просто, решая каждое i-ое уравнение системы (13.1) относительно xi по следующим рекуррентным формулам:
k |
1 |
|
|
n |
k−1 |
|
n |
k−1 |
|
|
|
xi = − |
|
|
|
∑aij x j |
|
= ∑gij x j |
+ fi |
; |
|||
aii |
|||||||||||
|
j=1; j≠i |
|
|
j=1 |
|
|
|
||||
gij = − aij / aii |
; |
|
gij = 0; |
|
fi = bj / aii ; |
(13.29) |
|||||
G ={g |
}n . |
|
|
|
|
|
|
|
|||
|
ij 1 |
|
|
|
|
|
|
|
|
Если же в матрице А нет диагонального преобладания, его нужно добиться посредством каких-либо ее линейных преобразований, не нарушающих их равносильности.
Для иллюстрации рассмотрим систему
2x |
−1,8 x |
2 |
+0,4x |
3 |
=1; |
(I ) |
|
|
1 |
|
|
|
|
||
3x1 |
+2x2 |
−1,1x3 = 0; |
(II ) |
||||
x |
−x |
2 |
+7,3x |
= 0; |
(III ) |
||
|
1 |
|
|
3 |
|
|
Как видно в уравнениях (I) и (II) нет диагонального преобладания, а в (III) есть, поэтому его оставляем неизменным.
Добьемся диагонального преобладания в уравнении (I). Умножим (I) на α, (II) на β, сложим оба уравнения и в полученном уравнении выберем α и β так, чтобы имело место диагональное преобладание:
(2α + 3β) х1 + (−1,8α + 2β) х2 +(0,4α − 1,1β)х3 = α .
Взяв α = β = 5, получим 25х1 + х2 − 3,5х3 = 5.
Для преобразования второго уравнения (II) с преобладанием, (I) умножим на γ, (II) умножим на δ, и из (II) вычтем (I). Получим
(3δ − 2γ) х1 + (2δ + 1,8γ) х2 +(−1,1δ − 0,4γ)х3 = −γ .
Положим δ = 2, γ = 3, получим 0х1 + 9,4х2 − 3,4х3 = −3.
189
В результате получим систему:
25x + x |
2 |
−3,5x |
|
= 5; |
|
|
|
|
|
|
|
|||
|
1 |
|
|
3 |
|
|
|
|
|
|
|
|
||
|
9,4x2 −3,4x3 =−3; |
|
|
|
|
|
|
|
||||||
x |
− |
x |
2 |
+7,3x |
3 |
= 0. |
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
||
В полученной системе разделим каждое уравнение на диагональный эле- |
||||||||||||||
мент: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x + 0,04x |
2 |
− 0,14x = |
0,2; |
|
x =−0,04x |
2 |
+ 0,14x |
3 |
+0,2; |
|||||
1 |
|
|
|
3 |
|
|
|
1 |
|
|
|
|||
|
x2 − 0,36x3 =− 0,32; |
или |
x2 = 0,36x3 − 0,32; |
|
|
|||||||||
|
|
|
|
|
+x3 = |
0. |
|
|
= −0,14x1 |
+0,14x2 . |
||||
0,14x1 −0,14x2 |
|
x3 |
||||||||||||
Взяв в качестве начального приближения, например, |
вектор |
x(0) = (0,2; |
||||||||||||
−0,32; 0)Т. Будем решать эту систему по технологии (13.26): |
|
|
|
|
||||||||||
|
|
|
|
|
x(k+1) |
= − 0,04x(k ) +0,14x(k ) +0,2; |
|
|
|
|
||||
|
|
|
|
|
1 |
|
|
2 |
3 |
|
|
|
|
|
|
|
|
|
|
x(k+1) |
= 0,36x |
(k ) −0,32; |
|
|
|
|
|
||
|
|
|
|
|
2 |
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
x(k+1) |
= − 0,14x(k ) +0,14x(k ) . |
|
|
|
|
||||
|
|
|
|
|
3 |
|
|
1 |
2 |
|
|
|
|
|
Процесс вычисления прекращается, когда два соседних приближения вектора решения совпадают по точности, т.е.
x (k+1) − x (k ) < ε.
13.6. Метод простой итерации
Технология решения системы вида (13.25) названа методом простой ите-
рации.
Оценка абсолютной погрешности для метода простой итерации
|
|
|
|
|
|
|
|
|
x* − x (k+1) |
|
≤ |
|
G |
|
|
|
k+1 |
|
|
|
x (0) |
|
|
|
+ |
|
G |
|
|
|
k+1 |
|
|
|
|
|
f |
|
|
|
. |
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1− |
|
|
|
G |
|
|
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
Пример. Для иллюстрации алгоритма рассмотрим решение системы (две |
||||||||||||||||||||||||||||||||||||||||||||||||||||
итерации): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4x |
− |
x |
2 |
− |
x |
3 |
|
= 2; |
|
4 −1 −1 |
|
|
|
|
|
|
|
|
r |
|
|
|
|
2 |
|
|||||||||||||||||||||||||||
|
|
1 |
|
|
|
|
|
|
|
|
|
|
A = 1 |
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
= 4 . |
|
||||||||||||||||||||
|
x1 +5x2 −2x3 |
|
= 4; |
|
|
5 − |
; |
|
|
|
|
|
b |
|
|
(13.30) |
||||||||||||||||||||||||||||||||||||
|
x |
+ |
x |
|
+ |
4x = 6; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
2 |
1 1 4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
||||||||||||||||||||||||||||||||||
|
|
1 |
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
Преобразуем систему к виду (13.25) согласно (13.29): |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||||||||||||||||
x |
|
=(2 |
+ x |
2 |
+ x |
3 |
) / 4; |
|
|
|
x1(k+1) = (2 + x2(k ) |
+ x3(k ) ) / 4; |
|
|||||||||||||||||||||||||||||||||||||||
1 |
|
|
|
|
|
|
|
|
|
|
|
|
x2(k+1) |
= (4−x1(k ) + 2x3(k ) ) / 5; |
|
|||||||||||||||||||||||||||||||||||||
x2 =(4−x1 +2x3 ) / 5; |
|
(13.31) |
||||||||||||||||||||||||||||||||||||||||||||||||||
x |
3 |
|
=(6 − x |
− x |
2 |
) / 4; |
|
|
|
x |
(k+1) |
= (6 − x |
(k ) |
−x |
(k ) |
) / 4. |
|
|
|
|
|
|||||||||||||||||||||||||||||||
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190