- •Введение
- •Командное окно
- •Редактирование командной строки.
- •Длинные командные строки.
- •Вывод на печать командного окна.
- •Запуск внешних программ.
- •!Notepad
- •Команда format.
- •Выражения
- •Переменные.
- •Inf бесконечность
- •Операторы.
- •Функции.
- •Текстовые комментарии и символьные константы.
- •Операции с рабочей областью
- •Операции с файлами
- •Дневник командного окна
- •Операции с векторами и матрицами
- •Оператор «двоеточие».
- •Векторные индексы.
- •Удаление строк и столбцов.
- •Объединение матриц.
- •Транспонирование матриц.
- •Создание матриц с заданными свойствами.
- •Создание вектора равноотстоящих точек.
- •Создание вектора равноотстоящих точек в логарифмическом масштабе.
- •Разреженные матрицы.
- •Графика
- •Команда plot.
- •Графические объекты.
- •Окна изображений.
- •Добавление кривых на существующий график.
- •Управление осями.
- •Разбиение графического окна.
- •Подписи к осям и заголовки.
- •Графики в полярной системе координат.
- •Контурные графики и графики полей градиентов.
- •Создание массивов данных для трехмерной графики.
- •Построение графиков трехмерных поверхностей.
- •Программирование в системе matlab.
- •Основные типы данных.
- •Арифметические операторы и массивы.
- •Операторы отношения.
- •Логические операторы и функции.
- •Приоритет выполнения операторов.
- •Структура файлов сценариев.
- •Структура m-файлов функций.
- •Использование подфункций.
- •Операторная функция.
- •Передача данных через глобальные переменные.
- •Параметры функционального типа.
- •Функции с переменным числом аргументов.
- •Управление потоками.
- •If expression1
- •Диалоговый ввод.
- •Численные методы и обработка данных
- •Решение систем линейных алгебраических уравнений.
- •Решение систем линейных уравнений итерационными методами.
- •Обратная матрица и определитель.
- •Факторизация Холецкого.
- •Lu факторизация.
- •Qr факторизация.
- •Матричная экспонента.
- •Собственные значения и собственные вектора.
- •Нормальная форма Жордана.
- •Разложение Шура.
- •Сингулярное разложение.
- •Численное интегрирование.
- •Представление полиномов в среде matlab.
- •Умножение и деление многочленов.
- •Вычисление производной от многочлена.
- •Решение систем нелинейных уравнений.
- •Преобразование Фурье.
- •Xlabel('time (seconds)')
- •Решение обыкновенных дифференциальных уравнений.
- •Численное решение дифференциальных уравнений в частных производных.
- •Литература
Решение систем линейных уравнений итерационными методами.
Помимо прямых методов решения систем линейных алгебраических уравнений MATLAB обладает мощными современными итерационными методами решения больших систем уравнений. К итерационным методам относятся те, решение которых получается в ходе ряда шагов – итераций, постепенно ведущих к получению результата с заданной погрешностью.
В качестве примера рассмотрим двунаправленный метод сопряженных градиентов, который реализуется с помощью функции bigcg.
Построим матрицу системы с три диагональной структурой и размером 10x10:
n = 10;
on = ones(n, 1);
A = spdiags([-2*on 4*on -on],-1:1, n, n);
В качестве элементов вектора правой части возьмем сумму элементов матрицы A в соответствующих строках:
b = sum(A, 2);
Для решения системы Ax=b применим один из одиннадцати существующих форматов вызова функции bigcg:
x = bicg(A, b);
bicg converged at iteration 10 to a solution with relative residual 8.6e-014
В результате система выдает сообщение о сходимости итерационного процесса и приводит относительную погрешность.
Обратная матрица и определитель.
Определитель квадратной матрицы находится с помощью функции det:
det(A)
ans =
1
Обратная матрица находится с помощью функции inv:
inv(A)
ans =
3 -3 1
-3 5 -2
1 -2 1
Факторизация Холецкого.
Если матрица системы является симметричной (или эрмитовой) и положительно определенной, то ее можно представить в виде произведения двух треугольных матриц: A=R’R, где R – верхняя треугольная матрица, R’ – транспонированная. Факторизация Холецкого выполняется с помощью функции chol:
R = chol(A)
R =
1 1 1
0 1 2
0 0 1
Легко проверить, что произведение R’R дает исходную матрицу Паскаля. Факторизация Холецкого приводит систему Ax=u к виду R’Rx=u. Поскольку оператор ‘\’ распознает системы с треугольными матрицами, приведенную систему можно решить очень быстро:
x = R\(R'\u)
x =
10
-12
5
Lu факторизация.
LU факторизация, или гауссово исключение, выражает любую квадратную матрицу A как произведение перестановки нижней треугольной матрицы L и верхней треугольной матрицы U, где матрица L имеет единичную главную диагональ. Перестановки важны как с теоретической, так и с практической точки зрения. Так, матрицу невозможно представить в виде произведения двух треугольных матриц без перестановки двух строк. С другой стороны, хотя матрицу можно представить в виде произведения двух треугольных матриц, при малом значении элементы матриц-сомножителей будут очень большими, что приведет к большой численной погрешности. Для выполнения разложения служит функция lu:
[L, U] = lu(X) возвращает верхнюю треугольную матрицу U и нижнюю треугольную матрицу L (точнее, произведение нижней треугольной матрицы и матрицы перестановок), так что X = L*U;
[L, U, P] = lu(X) возвращает верхнюю треугольную матрицу U, нижнюю треугольную матрицу L и матрицу перестановок P, так что L*U = P*X;
B=lu(X) возвращает матрицу B такую что, B(i, j) = U(i, j) для всех индексов ji и B(i, j) = L(i, j) для всех индексов j<i. Поскольку диагональные элементы матрицы L равны единице, их можно не хранить.
Рассмотрим факторизацию магической матрицы B:
[L U] = lu(B)
L =
1.0000 0 0
0.3750 0.5441 1.0000
0.5000 1.0000 0
U =
8.0000 1.0000 6.0000
0 8.5000 -1.0000
0 0 5.2941
Отметим, что строки матрицы L переставлены местами. Легко проверить, что B = L*U.
LU факторизация матрицы B позволяет очень быстро решить систему Bx=u:
x = U\(L\u)
x =
0.5528
0.2611
-0.2806
Получим представление матрицы перестановок P:
[L, U, P] = lu(B)
L =
1.0000 0 0
0.5000 1.0000 0
0.3750 0.5441 1.0000
U =
8.0000 1.0000 6.0000
0 8.5000 -1.0000
0 0 5.2941
P =
1 0 0
0 0 1
0 1 0
Строки матрицы L стоят на своих местах. Легко проверить, что L*U = P*B. Определитель и обратную матрицу из LU разложения можно найти по формулам:
det(B) = det(L)*det(U) и inv(B) = inv(U)*inv(L).