- •Введение
- •Командное окно
- •Редактирование командной строки.
- •Длинные командные строки.
- •Вывод на печать командного окна.
- •Запуск внешних программ.
- •!Notepad
- •Команда format.
- •Выражения
- •Переменные.
- •Inf бесконечность
- •Операторы.
- •Функции.
- •Текстовые комментарии и символьные константы.
- •Операции с рабочей областью
- •Операции с файлами
- •Дневник командного окна
- •Операции с векторами и матрицами
- •Оператор «двоеточие».
- •Векторные индексы.
- •Удаление строк и столбцов.
- •Объединение матриц.
- •Транспонирование матриц.
- •Создание матриц с заданными свойствами.
- •Создание вектора равноотстоящих точек.
- •Создание вектора равноотстоящих точек в логарифмическом масштабе.
- •Разреженные матрицы.
- •Графика
- •Команда plot.
- •Графические объекты.
- •Окна изображений.
- •Добавление кривых на существующий график.
- •Управление осями.
- •Разбиение графического окна.
- •Подписи к осям и заголовки.
- •Графики в полярной системе координат.
- •Контурные графики и графики полей градиентов.
- •Создание массивов данных для трехмерной графики.
- •Построение графиков трехмерных поверхностей.
- •Программирование в системе matlab.
- •Основные типы данных.
- •Арифметические операторы и массивы.
- •Операторы отношения.
- •Логические операторы и функции.
- •Приоритет выполнения операторов.
- •Структура файлов сценариев.
- •Структура m-файлов функций.
- •Использование подфункций.
- •Операторная функция.
- •Передача данных через глобальные переменные.
- •Параметры функционального типа.
- •Функции с переменным числом аргументов.
- •Управление потоками.
- •If expression1
- •Диалоговый ввод.
- •Численные методы и обработка данных
- •Решение систем линейных алгебраических уравнений.
- •Решение систем линейных уравнений итерационными методами.
- •Обратная матрица и определитель.
- •Факторизация Холецкого.
- •Lu факторизация.
- •Qr факторизация.
- •Матричная экспонента.
- •Собственные значения и собственные вектора.
- •Нормальная форма Жордана.
- •Разложение Шура.
- •Сингулярное разложение.
- •Численное интегрирование.
- •Представление полиномов в среде matlab.
- •Умножение и деление многочленов.
- •Вычисление производной от многочлена.
- •Решение систем нелинейных уравнений.
- •Преобразование Фурье.
- •Xlabel('time (seconds)')
- •Решение обыкновенных дифференциальных уравнений.
- •Численное решение дифференциальных уравнений в частных производных.
- •Литература
Диалоговый ввод.
Диалоговый ввод можно организовать с помощью команды input, имеющей формат:
user_entry = input('prompt', 's')
При выполнении этой команды на экран выводится запрос prompt в виде строки, затем происходит остановка работы и ожидание ввода с клавиатуры. Необязательный параметр s указывает, что введенный текст является строкой, а не числом. Примеры:
i = input('Введите значение. i=');
i = input('Do you want more? Y/N [Y]: ', 's');
Пауза.
Для организации паузы в ходе выполнения программы служит команда pause. Выполнение программы будет продолжаться после нажатия любой клавиши. Для организации паузы в n секунд, следует использовать команду pause(n).
Численные методы и обработка данных
Система MATLAB имеет функции, предназначенные для реализации алгоритмов типовых численных методов решения прикладных задач и обработки данных.
Решение систем линейных алгебраических уравнений.
Система линейных уравнений обычно решается с помощью операторов правого ‘/’ и левого ‘\’ деления:
выражение X=B/A дает решение ряда систем линейных уравнений AX=B, где A – матрица размером mxn и B – матрица размером nxk;
выражение X=B\A дает решение ряда систем линейных уравнений XA=B, где A – матрица размером mxn и B – матрица размером nxk;
В дальнейших примерах будем использовать две матрицы A и B размером 3x3:
матрицу Паскаля –
A = pascal(3)
A =
1 1 1
1 2 3
1 3 6
и магическую матрицу –
B = magic(3)
B =
8 1 6
3 5 7
4 9 2
а также два вектора: вектор-столбец u = [3; 1; 4] и вектор-строку v = [2 0 -1].
Обычно система уравнений имеет квадратную матрицу A и единственный вектор-столбец правой части b. Вектор решения x = A\b имеет тот же размер, что и вектор b. Например,
x = A\u
x =
10
-12
5
Проверка подтверждает, что произведение A*x равняется вектору u.
Если матрицы A и B являются квадратными и имеют одинаковый размер, то решение является квадратной матрицей такого же размера:
X = A\B
X =
19 -3 -1
-17 4 13
6 0 -6
В рассмотренных примерах найденное решение совпадает с точным, поскольку определитель матрицы A равен единице, а ее элементы являются целыми числами.
Квадратная матрица A называется сингулярной, если ее столбцы являются линейно зависимыми. Решение системы уравнений с сингулярной матрицей либо не существует, либо является неединственным. Попытка решить систему с сингулярной матрицей приведет к сообщению об ошибке. Если же матрица системы близка к сингулярной, то MATLAB сгенерирует соответствующее предупреждение.
Переопределенные системы уравнений часто возникают в задачах приближения табличной функции, значения которой получены в ходе физических или численных экспериментов. Рассмотрим пример. Пусть значения функции y известны в моменты времени t и задаются таблицей:
y |
0.82 |
0.72 |
0.63 |
0.6 |
0.55 |
0.5 |
t |
0.0 |
0.3 |
0.8 |
1.1 |
1.6 |
2.3 |
Эти данные можно ввести с помощью операторов:
t = [0 .3 .8 1.1 1.6 2.3]'; y = [.82 .72 .63 .60 .55 .50]';
Будем искать приближение табличной функции в виде . Из этой формулы следует, что вектор y разыскивается в виде линейной комбинации вектора с единичными компонентами и вектора с компонентами exp(-t). Неизвестные коэффициенты и находятся по методу наименьших квадратов на основе минимизации второй нормы векторов невязок. Построим матрицу системы и найдем вектор решения:
E = [ones(size(t)) exp(-t)]
E =
1.0000 1.0000
1.0000 0.7408
1.0000 0.4493
1.0000 0.3329
1.0000 0.2019
1.0000 0.1003
c = E\y
c =
0.4760
0.3413
Таким образом, аппроксимирующая функция имеет вид: .
Нарисуем график аппроксимирующей кривой вместе с исходными табличными данными:
T = (0:0.1:2.5)';
Y = [ones(size(T)) exp(-T)]*c;
plot(T, Y, '-', t, y, 'o')
Из рисунка видно, что табличные данные, представленные на графике кружками, достаточно хорошо аппроксимируются кривой.
Рассмотрим решение системы с недоопределенной матрицей. Решение такой системы не бывает единственным. MATLAB находит частное решение, которое имеет m ненулевых компонент (m – ранг матрицы), но и оно не является единственным. Частное решение определяется с помощью алгоритма QR факторизации с выбором ведущего элемента по столбцу. Рассмотрим пример:
R = fix(10*rand(2,4))
R =
6 8 7 3
3 5 4 1
b = fix(10*rand(2,1))
b =
1
2
Линейная система Rx = b состоит из двух уравнений относительно четырех неизвестных. Решение такой системы удобно выводить на экран в рациональном формате:
format rat
p = R\b
p =
0
5/7
0
-11/7
Для того чтобы найти общее решение переопределенной системы, надо к частному решению добавить фундаментальную систему решений. Фундаментальная система решений находится с помощью оператора null:
Z = null(R, 'r')
Z =
-1/2 -7/6
-1/2 1/2
1 0
0 1
Необязательный параметр ‘r’ отвечает за рациональное представление базисных векторов. Общее решение исходной системы можно представить в следующем виде: x = p + Z*q, где q – произвольный вектор.