ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 20.09.2025
Просмотров: 1188
Скачиваний: 0
СОДЕРЖАНИЕ
Л.В. Маркова, е.А. Корчевская,
Глава 1 Элементы теории погрешностей п 1.1 Источники погрешностей
П 1.2 Вычисление абсолютной и относительной погрешностей
П 1.4 Вычисление погрешностей арифметических операций
П 1.5 Оценка погрешности по способу границ
Глава 2 объектно-ориентированный подход к программированию методов линейной алгебры
П 2.1 Создание матричной иерархии классов
П 2.2 Создание иерархии классов вычислительных методов алгебры
Глава 3 решение систем линейных алгебраических уравнений
П 3.1 Метод Гаусса решения систем линейных алгебраических уравнений
П 3.2 Метод Гаусса с выбором главного элемента для решения систем линейных алгебраических уравнений
П 3.3 Решение системы линейных алгебраических уравнений методом Жордана-Гаусса
П 3.4 Метод квадратного корня для решения систем линейных алгебраических уравнений
П 3.5 Вычисления определителя и нахождения обратной матрицы
П 3.6 Решение системы линейных алгебраических уравнений методом прогонки
П 3.7 Метод простых итераций решения систем линейных алгебраических уравнений
П 3.8 Метод Зейделя решения систем линейных алгебраических уравнений
П 3.9 Итерационные методы вариационного типа решения систем линейных алгебраических уравнений
Глава 4 вычисление собственных значений и собственных векторов матриц
П 4.1 Метод Данилевского для нахождения собственных значений и собственных векторов
П 4.3 qr-алгоритм для нахождения собственных значений матрицы
П 4.4 Метод Якоби для нахождения собственных значений и собственных векторов
П р и л о ж е н и я Приложение 1 Основные сведения о матрицах
}
}
/* Получение значения элемента */
double Vector :: getElement(int i){
return this->elements[i];
}
/* Установка значения элемента */
void Vector :: setElement(int i, double element){
this->elements[i] = element;
}
/* Получение количества строк */
int Vector :: getRowCount(){
return 1;
}
/* Получение количества столбцов */
int Vector :: getColCount(){
return this->size;
}
Пример 3. Реализовать метод для сложения двух квадратных матриц двумя способами: с помощью функции и перегруженного оператора.
Реализация метода на языке программирования С++ может иметь следующий вид:
/* Функция*/
SquareMatrix SquareMatrix :: addition(SquareMatrix A, SquareMatrix B){
int n = this->size;
/*Объявление результирующей матрицы*/
double **C = new double*[n];
for (int i=0; i < n; i++){
C[i] = new double[n]; }
/* Вычисление суммы матриц*/
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
C[i][j] = A.elements[i][j] + B.elements[i][j];
} }
/* Создание матрицы */
return SquareMatrix(n, C);
}
/* Перегруженный оператор сложения */
SquareMatrix SquareMatrix :: operator +(SquareMatrix B){
int n = this->size;
/* Объявление результирующей матрицы*/
double **C = new double*[n];
for (int i=0; i < n; i++){
C[i] = new double[n];
}
/* Вычисление суммы матриц*/
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
C[i][j]=this->elements[i][j] + B.elements[i][j];
}
}
/* Создание матрицы */
return SquareMatrix(n, C);
}
Лабораторная работа № 2
Цель: изучить иерархию классов. Реализовать иерархию классов для работы с матрицами.
Задание
Реализуйте иерархию матричных классов, приведенную на рис. 1.
Реализуйте конструкторы, функции, методы, необходимые для работы с матрицами.
Для класса «Vector» реализуйте методы сложения, вычитания векторов, скалярного произведения, умножения вектора на число, нахождения длины вектора.
Для класса «SquareMatrix» реализуйте методы: сложение матриц, вычитание матриц, перемножение двух квадратных матриц, перемножение матрицы на вектор, умножение матрицы на число, транспонирования матрицы. Для реализации данных методов можно использовать перегруженные операторы. Реализовать методы для нахождения первой и второй нормы матрицы.
В классе «AugmentMatrix» предусмотрите методы формирования расширенной матрицы: из квадратной матрицы и вектора, из двух квадратных матриц. Реализуйте метод умножения расширенной матрицы на квадратную матрицу.
Ввод матриц организовать двумя способами: с клавиатуры и из файла. Реализовать метод для файлового ввода симметричной матрицы, а именно только ее верхней треугольной части.
Предусмотреть два режима вывода матриц: на экран и в файл.
Продумать и реализовать методы работы с матрицами классов «DiagonalMatrix», «ThreeDiagonalMatrix» и «EMatrix». С целью экономии памяти данные классы хранят только значения ненулевых коэффициентов.
Доступ к элементам осуществить при помощи «геттеров» и «сеттеров».
П 2.2 Создание иерархии классов вычислительных методов алгебры
Рассмотрим иерархию классов вычислительных методов алгебры следующего вида:
VMA
FactorizationAlgorithms
LU_decomposition
LDU_decomposition
STS_decomposition
SDS_decomposition
QR_decomposition
Eigenvalues
DirectMethodsE
danilevskyMethod
IterationMethodsE
PartialProblem
iterationMethod
CompleteProblem
jacobiMethod
qrMethod
SLAU
• DirectMethods
DirectMethodsFactorization
gaussMethod
gaussChooseElement
gaussJordanMethod
squareMethod
DirectMethodsNF
sweepMethod
• IterationMethods
simpleIterationMethod
zeidelMethod
methodSkorSpusk
Рис. 2. Объектная классификация методов линейной алгебры.
Вершиной иерархии является базовый класс «VMA».
Класс «FactorizationAlgorithms» содержит методы факторизации.
Класс «Eigenvalues» предназначен для реализации численных методов нахождения собственных значений и собственных векторов матриц. Методы этого класса подразделяются на прямые – «DirectMethodsE» и итерационные – «IterationMethodsE». Класс «IterationMethodsE» разбивается на два производных класса: итерационные методы, применяемые к решению частичной проблемы нахождения собственных значений, им соответствует класс «PartialProblem» и итерационные методы, применяемые к решению полной проблемы нахождения собственных значений – «CompleteProblem».
В классе «SLAU» описаны методы для решения систем линейных алгебраических уравнений. Данные методы подразделяются на прямые и итерационные. В связи с этим выделены классы для реализации прямых методов решения СЛАУ «DirectMethods» и итерационных «IterationMethods». Класс «DirectMethods» разбивается на два производных класса: прямые методы, использующие факторизацию, им соответствует класс «DirectMethodsFactorization» и прямые методы, не использующие факторизацию, – «DirectMethodsNF».
Среди алгоритмов факторизации выделены пять методов: LU, LDU, STS, STDS и QR-разложение.
LU-разложение
– это представление квадратной матрицы
А
в виде произведения нижней треугольной
матрицы L
на верхнюю треугольную матрицу U,
т.е.
.
Данное разложение возможно в случае,
когда все угловые миноры матрицыА
отличны от нуля, и является единственным,
если заранее оговорены элементы главной
диагонали треугольных матриц [19].
Пусть L – нижняя треугольная матрица с единичной диагональю, а U – верхняя треугольная матрица с ненулевыми диагональными элементами.Значения элементов матрицы L и U находятся по рекуррентным соотношениям:
,
, (1)
![]()
LU-разложение, полученное по формулам (1), применяется для построения LDU-разложения.
Пример 1.
Для заданной матрицы
получить
LU-разложение.
Решение:
Воспользуемся рекуррентными формулами (1)
При к=1: 
При к=2: 
![]()
При к=3: ![]()
В результате получены две треугольные матрицы:
,
.
LDU-разложение – это представление квадратной матрицы А в виде произведения LDU, где L – нижняя треугольная матрица с единичной диагональю, D – диагональная матрица, а U – верхняя треугольная матрица с единичной диагональю.
,
,
.
Элементы
рассчитываются
по формулам (1).
Пример 2.
Дана матрица
.
Получить ее
LDU-разложение.
Решение:
В предыдущем примере получены матрицы L и U вида:
,
.
Матрица L не изменяется. Матрицу D выделим из матрицы U.
Получаем решение:
,
,
.
STDS-разложение – это представление симметрической матрицы А в виде произведения матриц ST, D и S, где S – верхняя треугольная матрица, ST – транспонированная к ней матрица (нижняя треугольная), D – диагональная матрица с элементами, равными +1 или –1.
,
.
Значения коэффициентов данных матриц находятся по формулам [19]
(2)
STS-разложение – это представление симметрической положительно определенной матрицы А в виде произведения матриц ST и S, где S – верхняя треугольная матрица, ST – транспонированная к ней матрица (нижняя треугольная).
Для положительной
определенности матрицы достаточно
выполнения требования положительности
диагональных элементов и их диагонального
преобладания, т.е.
,
![]()
,
.
Значения коэффициентов матрицы S находятся по формулам [19].
(3)
Пример 3.
Дана
матрица
.
Получить ее STS-разложение.
Решение:
Матрица А является симметрической и положительно определенной. Воспользуемся формулами (2), получаем:
Таким
образом, получили матрицу
.
QR-разложение – это представление квадратной матрицы А в виде произведения ортогональной матрицы Q на верхнюю треугольную матрицу R.
QR-разложение может быть получено различными методами. Рассмотрим построение QR-разложения с помощью преобразования Хаусхолдера, которое позволяет обратить в нуль группу поддиагональных элементов столбца матрицы.
Преобразование Хаусхолдера осуществляется с использованием матрицы Хаусхолдера (матрица отражения), имеющей следующий вид [20]:
,
(4)
где w – произвольный ненулевой вектор-столбец, E – единичная матрица.
Любая матрица такого вида является симметрической и ортогональной.
Рассмотрим подробнее
реализацию данного преобразования.
Положим
и построим преобразование Хаусхолдера
,
переводящее матрицу
в матрицу
с нулевыми элементами
первого столбца под главной диагональю