Порядок расположения директорий на путях доступа важен именно потому, что могут быть несколько файлов, имеющих одинаковое имя. Когда MATLAB ищет такую функцию, он вы-бирает только первую функцию, встретившуюся на путях доступа; остальные функции (фай-лы) оказываются в тени и не могут быть выполнены. Для того чтобы узнать какая функция выполняется, т.е. местоположение данной функции в файловой структуре, можно использо-вать команду whichFileName, где FileName - имя выбранной функции.
Просмотр и изменение путей доступа. Для просмотра и изменения путей доступа системы MATLABпредусмотрено диалоговое окно Set Path, а также ряд эквивалентных команд (фу-нкций), которые можно выполнить из командной строки. Для открытия указанного окна ну-жно выбрать опцию SetPathиз меню File рабочего стола, или ввести команду pathtool из командной строки MATLAB -а. Откроется следующее диалоговое окно
При нажатии на эти кнопки происходят изменения
в путях доступа текущего сеанса, но эти пути доступа
не сохраняются автоматически дл будущих сеансов
Кнопки для изменения
путей доступа Директории текущих путей доступа системы MATLAB
Нажатие кнопки приводит к сохранению изменений для будущих сеансов работы
Рис. 5. Диалоговой окно Set Path для модификации путей доступа
На рис. 5 имеем следующие кнопки:
Add Folder… - Добавить директорию (папку).
AddwithSubfolders… - Добавить директорию с поддиректориями.
Move to Top - Перенести директорию в начало пути.
Move Up - Перенести директорию на один шаг вверх.
Remove - Удалить директорию.
Move Down - Перенести директорию на один шаг вниз.
Move to Bottom - Перенести директорию в конец пути.
Default - Восстановить исходные пути доступа (по умолчанию).
Назначение данных кнопок ясно из их названий.
Операции с файлами
При операциях над файлами система MATLAB использует текущую директорию в качестве отправной точки. Любой файл, который вы хотите исполнить, должен находиться или в теку-щей директории (каталоге) или на пути доступа системы MATLAB. Аналогично, если вы хотите открыть какой-либо файл, начальной точкой диалогового окна Оpen всегда является текущая директория.
Поле текущей директории. Быстрый путь просмотра или изменения текущей директории состоит в использовании поля Current Directory (Текущая Директория) в инструментальной панели рабочего стола
Для изменения текущей директории из этого поля, нужно выполнить одно из следующих действий:
*Впечатать в данное поле путь к новой текущей директории.
*Щелкнуть на правой кнопке со стрелкой, что откроет список ранее использованных рабо-чих директорий, и выбрать из них желаемую.
*Щелкнуть на кнопку (...) (см. рис. 2) для выбора новой директории.
Окно Просмотра Текущего Каталога (Current Directory Browser) . Для поиска, просмот-ра, открывания и ввода изменений в директориях системы MATLAB можно воспользоваться Окном Просмотра Текущего Каталога (ОПТК). Все основные функции данного окна можно также выполнить задавая соответствующие команды из командной строки системы MATLAB. Если ОПТК не присутствует в рабочем столе MATLAB-а, то его можно открыть выбором опции Current Directory в меню View, или же введя команду filebrowser из коман-дного окна (Command Window). При этом появится следующее окно
Данное поле позволяет произвести быстрый
просмотр и изменение директорий
Щелкнув по кнопке «бинокль» можно исследовать содержимое
любого М-файла (операция поиска по заданным символам)
Рис. 6. Окно просмотра текущего каталога
Двойной щелчок по любому выделенному файлу откроет его содержание в соответствующем окне Редактора/Отладчика. В нижней части ОПТК (см. рис. 6) показана часть справки (help) для выделенного файла.
Изменение текущей директории и просмотр ее содержания в ОПТК. Для изменения теку-щей директории из ОПТК можно воспользоваться полем Current Directory этого окна, со-вершенно аналогично тому, как это было описано выше.
Эквивалентные функции ! Команда dir выводит в командное окно все содержимое теку-щей директории или любой другой директории, заданной как аргумент функции dir. Кома-нда what действует аналогично, но выводит только те файлы, которые относятся к системе MATLAB. Команда which FileName, где FileName - имя файла, выводит путь доступа к данному файлу.
ОПТК позволяет также произвести любые добавление директорий к путям доступа системы MATLAB, а также создавать, копировать, переименовывать директории и т.д. (см. Руковод-ство Пользователя).
Поиск и замена содержимого файлов. Из ОПТК можно осуществить поиск любой заданной строки символов в содержании файла. Если же файл открыт в окне Редактора/Отладчика, то можно также и заменить заданную строку на другую.
Поиск заданной строки в пределах файла (файлов). Для поиска заданной строки следует:
1. Щелкнуть по кнопке инструментальной панели ОПТК (рис. 6). Появится следующее диалоговое окно «Найти и Заменить» (Find & Replace):
2. Для нахождения всех случаев наличия требуемой строки в файлах следует:
- Впечатать строкув поле Find what.
- Выбрать директорию поиска в поле Look in, или просто непосредственно напечатать имя директории в данном поле.
- Ограничить поиск выбором опций Match case (Учитывать регистр) иWhole word (Слово целиком).
- Выбрать опцию Subdirectories (Поддиректории), если вы хотите также просматривать и файлы в поддиректориях.
3. Щелкнуть по кнопке Find.
Результат поиска при этом будет отображен в нижней части далогового окна Find & Replace как это показано на следующем рисунке. Этот результат включает название файла, номер со- ответствующей строки и содержимое данной строки.
Двойной щелчок по файлу приведет к
его открытию
Кнопка закрытия окна
Результаты предыдущих операций поиска результатов поиска
доступны через эти ярлыки
4. Для открытия любого из М-файлов в списке результатов поиска нужно выполнить одно из нижеприведенных действий:
- Дважды щелкнуть по файлу.
- Выделить файл и нажать клавишу Enter.
- Щелкнуть правой кнопкой по файлу и выбрать опцию Open из контекстного меню.
Соответсвующий файл будет открыт в Редакторе/Отладчике, причем он будет «прокручен» до той строки, которая содержит результат поиска.
5. Если вы до того проводили другой поиск (поиски), то все результаты предыдущих поисков будут доступны через «ярлыки» внизу текущего списка результатов поиска (см. рис.).
Замена заданной строки в пределах файла. После поиска заданной строки в пределах фай-ла, вы можете автоматически заменить эту строку на любую другую. Для этого надо:
1. Открыть М-файл вокне Редактора/Отладчика системы MATLAB Editor. При этом нужно убедиться, что данный файл является текущим в окне Редактора/Отладчика.
2. Выбрать в полеLook in в диалоговом окне Find & Replace имя того файла, в котором вы хотите заменить строку. Кнопка Replace (Заменить) при этом активизируется.
3. Впечатать в поле Replace with текст, на который вы хотите заменить выбранную строку.
4. Щелкнуть Replace для замены строки символов в выбранной строке файла, или же щелк- нуть по кнопке Replace All, если вы хотите заменить все найденные совпадения в текущем файле.
Текст будет заменен.
5. Длясохранения изменений нужно выбрать опцию Save из меню File в окне Редактора/ От-ладчика.
Дуальность (двойственность) команд и функций
Команды системы MATLAB это выражения вида load или help. Многие команды допускают модификацию за счет определения операндов, например:
load August17.dat
help magic
type rank.
Альтернативный способ ввода подобных операндов в команды состоит в представлении их в виде символьных строк как аргументы функций.
load('August17.dat')
help('magic')
type('rank')
В этом состоит дуальность команд/функций системы MATLAB. Любая команда в форме
command argument
может также быть записана в функциональной форме
command('argument')
Преимущество функциональной формы записи проявляется когда символьный аргумент формируется машиной программно, из ряда разных кусков. Например, следующий пример загружает в рабочее пространство переменные из 31-го МАТ-файла под названиями August1.dat, August2.dat, и т.д.
for d = 1:31
s = ['August' int2str(d) '.dat']
load(s)
end
Здесь использована функция int2str, которая преобразует целые числа в строку символов, что помогает сконструировать название файла, а также используются квадратные скобки для объединение трех символьных переменных в одно.
Действия над матрицами в системе MATLAB
Матрица является двумерным массивом действительных или комплексных чисел. Линейная алгебра и теория матриц определяют множество операций над матрицами, которые непо-средственно поддерживаются (т.е. выполняются как стандартные операции) в MATLAB-е. В частности, сюда входят все элементарные действия над матрицами, решение систем линей-ных уравнений, нахождение собственных значений и векторов, а также сингулярных чисел и т.д. Ниже кратко рассмотрены действия над матрицами в системе MATLAB.
Формирование матриц в системе MATLAB
В дальнейшем для удобства будем считать термины матрица и массив эквивалентными. Бо-лее точно, матрица есть двумерный прямоугольный массив из действительных или комплек-сных чисел, который характеризует некоторое линейное преобразование. В MATLAB-е име-ется множество встроенных функций, которые формируют (генерируют) различные типы ма-триц. Воспользуемся двумя из них для формирования пары матриц размера 3-by-3, которые будут использоваться в дальнейшем в качестве примеров. Первый пример представляет симметричную матрицу Паскаля. Если ввести команду
A = pascal (3)
то система ответит
A =
1 1 1
1 2 3
1 3 6
Второй пример представляет несимметричную матрицу, известную под названием «волшеб-ный квадрат» (magic square):
B = magic(3)
B =
8 1 6
3 5 7
4 9 2
Еще один пример использования стандартной матрицы представляет собой прямоугольную 3х2 матрицу случайных целых чисел:
C = fix(10*rand(3,2))
C =
9 4
2 8
6 7.
Здесь функция rand(3,2) генерирует 3х2 матрицу равномерно распределенных случайных чисел в диапазоне от 0 до 1, а функция fix осуществляет округление путем отбрасывания дробной части.
Вектор-столбец есть матрица размера mх1 matrix, вектор-строка - матрица размера 1х n , а скаляр есть матрица размера 1х1. Объединение отдельных чисел в массивы осуществляется при помощи квадратных скобок, причем отдельные строки разделяются точкой с запятой, а переменные в каждой строке - запятой или пробелом (число пробелов может быть любым). Выражения
u = [3; 1; 4]
v = [2 0 -1]
s = 7
дают вектор-столбец u , вектор-строку v и скаляр s (эти векторы также будут использоваться в дальнейшем при решении примеров):
u =
3
1
4
v =
2 0 -1
s =
7
Сложение и вычитание матриц
Сложение и вычитание матриц определяется как и для массивов, то есть поэлементно. Эти операции требуют чтобы обе матрицы имели одинаковую размерность, или одна из них была скаляром (в последнем случае MATLAB прибавляет (или вычитывает) данный скаляр из всех элементов матрицы). Если размерности матриц не совпадают, в командное окно выдается со-общение об ошибке (красным цветом)
Error using ==> +
Matrix dimensions must agree.
Векторное произведение и транспонирование матриц
Вектор-строка и вектор-столбец могут быть перемножены в любом порядке (оператор умно-жения * расположен на верхнем регистре клавиши с цифрой 8). Результатом будет или ска-ляр (внутреннее произведение) или матрица (внешнее произведение). Для приведенных выше векторов v и u имеем :
x = v*u
x =
2
X = u*v
X =
6 0 -3
2 0 -1
8 0 -4
Для действительных матриц, операция транспонирования меняет взаимное местоположение элементов aij aji, симметричных относительно главной диагонали. Для обозначения транс-понирования MATLAB использует одиночную кавычку (апостроф) (`). Для нашей симметри-чной матрицы Паскаля A' = A. Однако матрица В не является симметричной и поэтому:
X = B'
X =
8 3 4
1 5 9
6 7 2
Транспонирование превращает вектор-строку в вектор-столбец и наоборот. Если x иy оба яв-ляются действительными векторами, то произведение x*y не определено, но оба произве-дения x'*y и y'*x дают один и тот же скаляр. Это соотношение используется так часто, что имеет три различных имени: скалярное произведение, внутреннее произведение и точечное произведение.
Для комплексного вектора или матрицы,z, величина z' обозначет комплексно-сопряженное транспонирование. В MATLAB-е предусмотрены также поэлементные операции над элеме-нтами массивов. Признаком поэлементных операций служит точка после обозначения пере-менной. Так, транспонирование элементов матрицы z как массива чисел обозначается z.', по аналогии с другими операциями на массивами чисел. Например, если
z = [1+2i 3+4i]
то
z' =
1-2i
3-4i
тогда как z.' есть
z.' =
1+2i
3+4i
Для комплексных векторов, два скалярных произведения x'*y иy'*x комплексно сопряжены, а скалярное произведение x'*x комплексного вектора с самим собой есть действительное число.
Произведение матриц
Для произведения двух совместимых А и В матриц в MATLAB-е достаточно записать в ко-мандной строке С = А*В . MATLAB самостоятельно проверит совместимость размерностей матриц и выдаст результат. Если матрицы несовместимы, выдается сообщение об ошибке:
Errorusing ==> *
Innermatrixdimensionsmustagree.
Индексирование (Subscripts)
Для краткого рассмотрения некоторых основных понятий, связанных с индексированием дву-мерных массивов (матриц), введем «волшебную» матрицу 4-го порядка:
F = magic(4)
F =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Элемент в i-ой строке и j-ом столбце матрицы F обозначается через F (i,j). Например, F(4,2) есть число в четвертой строке и втором столбце. Для нашего волшебного квадрата, F(4,2) есть 14. Таким образом, можно вычислить сумму элементов четвертого столбца матрицы F, напечатав
F (1,4) + F (2,4) + F (3,4) + F (4,4)
Это дает ответ
ans =
34
но, как мы увидим в дальнейшем, не является самым элегантным способом суммирования элементов одного столбца.
Имеется также возможность обращения к элементам матрицы при помощи одного индекса, F(k). Это обычный способ обращения к элементам векторов (строк или столбцов). Но в MATLAB-е такой способ индексирования можно применить и к двумерным (в общем случае - многомерным) матрицам, так как система MATLAB хранит все многомерные массивы чи-сел в виде одного длинного вектора-столбца, сформированного из столбцов исходной матри-цы. Так, для нашего волшебного квадрата, F (8) есть другой способ обращения к начени 14 хранящемуся в F (4,2).
Если вы попытаетесь использовать элемент, находящийся вне размеров матрицы, это приве-дет к сообщению об ошибке
t = F (4,5)
Index exceeds matrix dimensions
(Индекс превышает размерность матрицы)
С другой стороны, если вы попытаетесь запомнить какое-либо число вне размеров матрицы, размер будет соответствующим образом увеличен увеличен, чтобы принять новое значение.
X = A;
X(4,5) = 17
X =
16 3 2 13 0
5 0 11 8 0
9 6 7 12 0
4 15 14 1 17
Двоеточие (Colon)
Двоеточие, : , является одним из наиболее важных операторов MATLAB-а. Оно встречается в нескольких разных формах. Выражение 1:10 есть вектор-строка, содержащий целвые числа от 1 до 10:
1 2 3 4 5 6 7 8 9 10
Чтобы получить неединичное приращение, нужно задать приращение. Например,
100 : -7 : 50
есть
100 93 86 79 72 65 58 51
а
0 : pi/4 : pi
есть
0 0.7854 1.5708 2.3562 3.1416
Индексы, содержащие двоеточия, допускают обращение к частям матриц. Так, выражение
F(1:k, j)
дает первые k элементов j-го столбца матрицы F. То есть,
sum(F (1:4, 4))
вычисляет, как и в примере выше, сумму элементов 4-го столбца. Но есть еще лучший путь. Двоеточие само по себе означает обращение ко всем элементам строки или столбца матрицы, а зарезервированное слово end есть обращение к последним строке или столбцу матрицы (в случае векторов-строк или столбцов слово end есть обращение к последнему элементу векто-ра). Значит,
sum(F (:, end))
вычисляет сумму элементов последнего столбца матрицы F . Ответ: ans = 34. Почему маги-ческая сумма для волшебного квадрата 4 х 4 равна 34 ? Дело в том, что если целые числа от 1 до 16 (число элементов матрицы размера 4 х 4) упорядочены в четыре группы с равными сум-мами элементов, эта сумма должна быть равна
sum(1:16)/4
что, конечно, дает ans = 34.
Единичная матрица, нулевая матрицы и матрица из единиц.
Двумерные массивы случайных чисел
Единичная матрица, то есть матрица имеющая единицы на главной диагонали и нулевые ос-тальные элементы, в MATLAB-е обозначается eye, причем eye(n) есть единичная квадратная матрица размера nxn, eye(m,n) - прямоугольная единичная матрица размера mxn, а eye(size(A)) есть единичная матрица, имеющая размерность матрицы A. Например,
I = eye(3)
I =
1 0 0
0 1 0
0 0 1
I = eye(3,5)
I =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
I = eye(4,2)
I =
1 0
0 1
0 0
0 0
Нулевая матрица, то есть матрица состоящая из нулей (массив нулей), в MATLAB-е обоз-начается zeros, причем zeros (n) есть нулевая квадратная матрица размера nxn, zeros (m,n) - прямоугольная нулевая матрица размера mxn, а zeros (size(A)) есть нулевая матрица имею-щая размерность матрицы A.
Z = zeros(2,4)
Z =
0 0 0 0
0 0 0 0
Наконец, матрица состоящая из единиц (массив единиц), в MATLAB-е обозначается ones, причем ones (n) есть квадратный массив единиц размера nxn, ones (m,n) - прямоугольный массив единиц размера mxn, а ones (size(A)) есть массив единиц, имеющий размерность матрицы A.
S = 5*ones(3, 3)
S =
5 5 5
5 5 5
5 5 5
Аналогично, функция rand дает возможность сформировать соответствующие массивы слу-чайных чисел в диапазоне от 0 до 1, распределенных по равномерному закону, а функция randn - по нормальному закону.
N = fix(10*rand(1,10))
N =
4 9 4 4 8 52 6 8 0
R = randn(4,4)
R =
1.0668 0.2944 -0.6918 -1.4410
0.0593 -1.3362 0.8580 0.5711
-0.0956 0.7143 1.2540 -0.3999
-0.8323 1.6236 -1.5937 0.6900
Решение систем линейных уравнений
Одной из важнейших задач в технических приложениях и расчетах является задача решения систем линейных уравнений. В матричных обозначениях, данная задача может быть сформу-лирована следующим образом. При заданных двух матрицах Aand B, существует ли такая единственная матрица X, что AX = B или XA = B?
Для наглядности рассмотрим одномерный пример. Имеет ли уравнение
7x = 21
единственное решение? Ответ, разумеется, да. Это уравнение имеет единственное решение x = 3. Решение может быть легко получено обычным делением.
x = 21/7 = 3
Решение при этом обычно не состоит в определении обратной величины от числа 7 (т.е. ве-личины 7-1 = 0.142857…), и последующим умножением числа 7-1 на число 21. Это было бы более трудоемко и, если число 7-1 представлено конечным числом цифр (разрядов), менее точно. Аналогичные рассуждения применимы и к системам линейных алгебраических уравнений с более чем одной неизвестной; MATLAB решает такие уравнения без вычисле-ния обратной матрицы. Хотя это и не является стандартным математическим обозначением, система MATLAB использует терминологию, связанную с обычным делением в одномерном случае, для описания общего случая решения совместной системы нескольких линейных уравнений. Два символа деления / (косая черта (по английски - slash)) и \ (обратная косая че-рта (backslash)) используются в двух случаях, когда неизвестная матрица появляется слева или справа от матрицы коэффициентов:
X = A\B обозначает решение матричного уравнения AX = B
X = B/A обозначает решение матричного уравнения XA = B.
Вы можете представлять себе это как процесс «деления» обеих частей уравнения AX = Bили XA = Bна A. Матрица коэффициентов A всегда находится в «знаменателе».Условие сов-местимости размерностей для X = A\B требует чтобы две матрицыA и B имели одинаковое число строк. РешениеX тогда имеет такое же число столбцов как и B, а число ее строк будет равно числу столбцов A. Для X = B/A, строки и столбцы меняются ролями. На практике, ли-нейные уравнения в виде AX = B встречаются более часто, чем в виде XA = B. Следователь-но, обратная наклонная черта \ используется более часто, чем прямая / . Поэтому, в остав-шейся части данного раздела мы ограничимся рассмотрением оператора \ ; соответствующие свойства оператора / можно вывести из тождества
(B/A)' = (A'\B')
В общем случае не требуется, чтобы матрица коэффициентов A была бы квадратной. Если A имеет размер mхn, то возможны три случая:
1. m = n Квадратная система. Ищется точное решение.
2. m > n Переопределенная система. Ищется решение методом наименьших квадратов.
3. m < n Недоопределенная система. Находится базовое решение с самым большим
числом m ненулевых компонент.
Оператор \ использует различные алгоритмы для решения систем линейных уравнений с раз-ными типами матриц коэффициентов. Различные случаи, которые диагностируются автома-тически по типу матрицы коэффициентов, включают:
* Перестановки треугольных матриц
* Симметричные, положительно определенные матрицы
* Квадратные невырожденные матрицы
*Прямоугольные, переопределенные системы
* Прямоугольные, недоопределенные системы
Квадратные системы
Наиболее часто встречающейся ситуацией является квадратная матрица коэффициентовA и одномерный вектор-столбец b справа, т.е. Ax = b. Решение x = A\bимеет при этом тот же ра-змер, что и вектор b. Например,
x = A\u
x =
10
-12
5
где матрица А есть приведенная выше матрица Паскаля. Легко удостовериться, чтоA*x в точности равно вектору u (численные значения этого вектора даны выше).
ЕслиA иB являются квадратными и имеют одинаковый размер, то X = A\B имеет тот же ра-змер, например
X = A\B
X =
19 -3 -1
-17 4 13
6 0 -6
Легко убедиться, что A*X в точности равно B.
Оба этих примера имеют точное решение в виде целых чисел. Это связано с тем, что в каче-стве матрицы коэффициентов была выбрана матрица Паскаля pascal(3), чей детерминант равен единице. Далее будут рассмотрены примеры влияния ошибок округления, возникаю-щих в более реальных системах.
Квадратная матрица A является сингулярной, если ее столбцы не являются линейно незави-симыми. Если A- сингулярна, то решение AX = B или не существует, или не является един-ственным. Оператор \ , A\B, выдает предупреждающее сообщение, если матрица A близка к сингулярной и сообщение об ошибке, если определено равенство нулю детерминанта матри-цы А.
Переопределенные системы
Переопределенные системы совместных линейных уравнений часто встречаются в задачах аппроксимации экспериментальных данных при помощи различных эмпирических кривых. Рассмотрим следующий гипотетический пример. Величина yизмеряется при различных зна-чениях времени t, что дает следующие результаты
t y
0.0 0.82
0.3 0.72
0.8 0.63
1.1 0.60
1.6 0.55
2.3 0.50
Эти данные могут быть введены в MATLAB при помощи выражений:
t = [0 .3 .8 1.1 1.6 2.3]';
y = [0.82 0.72 0.63 0.60 0.55 0.50]';
Данные могут быть аппроксимированы при помощи убывающей экспоненциальной функ-ции.
y(t) = c1 + c2 e-t
Это уравнение показывает, что вектор y может быть представлен в виде линейной комбина-ции двух векторов, один из которых является постоянным вектором, содержащим все едини-цы, а второй вектор имеет компоненты e-t. Неизвестные коэффициенты c1 и c2 могут быть найдены подгонкой кривых по методу наименьших квадратов,которая основана на миними-зации суммы квадратов отклонений экспериментальных данных от модели. Мы имеем шесть уравнений с двумя неизвестными, представленными 6х2 матрицей
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
Иными словами, подгонка методом наименьших квадратов дает
y(t) = 0.476 + 0.3413 e-t
Следующие выражения оценивают модель при равномерно распределенных моментах време-ни (с шагом 0.1), а затем строят график вместе с результатами экспериментальных данных.
T = (0 : 0.1 : 2.5)';
Y = [ones(size(T)) exp(-T)]*c;
plot(T, Y, '-', t, y, 'o')
Можно видеть, что значения E*c не совсем точно совпадают со значениями эксперименталь-ных данных y, но эти отклонения могут быть сравнимы с ошибками измерений.
Прямоугольная матрица A называется матрицей неполного ранга, если ее столбцы линейно-независимы. Если матрица Aимеет неполный ранг, то решение AX = Bне является единст-венным. Оператор \ при этом выдает предупреждающее сообщение и определяет основное решение, которое дает минимально возможное число ненулевых решений.
Недоопределенные системы
Недоопределенные системы линейных уравнений содержат больше неизвестных чем урав-нений. Когда они сопровождаются дополнительными ограничениями, то становятся сферой изучения линейного программирования. Сам по себе, оператор \ работает только с системой без ограничений. При этом решение никогда не бывает единственным. MATLAB находит ос-новное решение, которое содержит по меньшей мере m ненулевых компонент (где m - число уравнений), но даже это решение может быть не единственным. Ниже приводится пример, где исходные данные генерируются случайным образом.
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содержит два уравнения с четырьмя неизвестными. Поскольку матрица коэффициентов R содержит небольшие по величине целые числа, целесообразно представить решение в формате rational (в виде отношения двух целых чисел). Частное ре-шение представленное в указанном формате есть:
p = R\b
p =
0
5/7
0
-11/7
Одно из ненулевых решений есть p(2), потому что второй столбец матрицы R имеет наи-большую норму. Вторая ненулевая компонента естьp(4) поскольку четвертый столбец матрицы R становится доминирующим после исключение второго столбца (решение нахо-дится методом QR-факторизации с выбором опорного столбца).
Обратные матрицы и детерминанты
Если матрица А является квадратной и невырожденной, уравнения AX = I и XA = Iимеют одинаковое решение X. Это решение называется матрицей обратной к A, обозначается через A-1 и вычисляется при помощи функции inv. Понятие детерминанта (определителя) матрицы полезно при теоретических выкладках и некоторых типах символьных вычислений, но его масштабирование и неизбежные ошибки округления делают его не столь привлекательным при числовых вычислениях. Тем не менее, если это требуется, функция det вычисляет определитель квадратной матрицы. Например,
A = pascal(3)
A =
1 1 1
1 2 3
1 3 6
d = det (A)
X = inv (A)
d =
1
X =
3 -3 1
-3 5 -2
1 -2 1
Опять таки, поскольку A является симметричной матрицей целых чисел и имеет единичный определитель, то же самое справедливо и для обратной матрицы. С другой стороны, для
B = magic(3)
B =
8 1 6
3 5 7
4 9 2
d = det(B)
X = inv(B)
d =
-360
X =
0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028
Внимательное изучение элементов матрицы X, или использование формата rational , показы-вает, что они являются целыми числами, разделенными на 360.
Если матрица A является квадратной и несингулярной, то, пренебрегая ошибками округле-ния, выражение X = inv(A)*B теоретически означает то же, что и X = A\B , аY = B*inv(A) теоретически есть то же, что и Y = B/A. Однако вычисления включающие операторы \ и / более предпочтительны, поскольку требуют меньше рабочего времени, меньшей памяти и имеют лучшие свойства с точки зрения определения ошибок.
Псевдообратные матрицы
Прямоугольные матрицы не имеют детерминантов и обратных матриц. Для таких матриц по крайней мере одно из уравнений AX = Iили XA = Iне имеет решения. Частично данный про-бел восполняетсятак называемой псевдообратной матрицей Мура-Пенроуза, или просто псевдообратной матрицей, которая вычисляется при помощи функции pinv. На практике необходимость в этой операции встречается довольно редко. Желающие могут всегда обра-титься к соответствующим справочным пособиям.
Степени матриц и матричные экспоненты
Положительные целые степени
Если А есть некоторая квадратная матрица, а р - положительное целое число, тоA^p эквива-лентно умножению A на себя р раз.
X = A^2
X =
3 6 10
6 14 25
10 25 46
Отрицательные и дробные степени
Если А является квадратной и невырожденной, то A^(-p) эквивалентно умножению inv(A) на себя p раз.
Y = B^(-3)
Y =
0.0053 -0.0068 0.0018
-0.0034 0.0001 0.0036
-0.0016 0.0070 -0.0051
Дробные степени, например A^(2/3), также допускаются; результаты при этом зависят от ра-спределения собственных значений матрицы А.
Поэлементное возведение в степень
Оператор .^ (с точкой !) осуществляет поэлементное возведение в степень. Например,
X = A.^2
A =
1 1 1
1 4 9
1 9 36
Вычисление корня квадратного из матрицы и матричной экспоненты
Для невырожденных квадратных матриц А функция sqrtm вычисляет главное значение квад-ратного корня , т.е. если X = sqrtm(A) , то X*X = A . Буква m в sqrtm означает, что выпол-няется матричная операция. Это отличает данную функцию от sqrt(A), которая, подобно A.^(1/2) (обратите внимание на точку !), выполняет операцию извленчения корня поэлемен-тно.
Система обыкновенных линейных дифференциальных уравнений первого порядка может быть записана в виде
dx/dt = Ax
где x = x(t) есть векторная функция от t, а A есть постоянная матрица не зависящая от t.
Решение данной системы может быть выражено в виде матричной экспоненты.
x(t) = ?Atx(0)
Функция expm(A) вычисляет матричную экспоненту. Рассмотрим пример системы диффере-нциальных уравнений со следующей 3х3 матрицей коэффициентов
A =
0 -6 -1
6 2 -16
-5 20 -10
и начальными условиями x(0)
x0 = [ 1 1 1]'.
Использование матричной экспоненты для вычисления решения дифференциального уравне-ния в 101 точке с шагом 0.01 на интервале 0 ? t ? 1 записывается в виде
X = [ ];
fort = 0 : 0.01 : 1
X = [Xexpm(t*A)*x0];
end
Трехмерный график решения в фазовом пространстве может быть получен при помощи спе-циальной функции