Вычисление собственных значений и собственных векторов. Решение типовых задач линейной алгебры



Мы поможем в написании ваших работ!


Мы поможем в написании ваших работ!



Мы поможем в написании ваших работ!


ЗНАЕТЕ ЛИ ВЫ?

Вычисление собственных значений и собственных векторов. Решение типовых задач линейной алгебры



 

Важной задачей линейной алгебры является задача на собственные значения.

Собственные числа (значения) λi и собственные векторы (ui ≠ 0) квадратной матрицы А удовлетворяют равенствам

Aui = λiui.

Собственные значения λ квадратной матрицы А являются корнями ее характеристического уравнения│A - λE= 0, где E – единичная матрица того же порядка n, что и А. Многочлен │A - λE│называется характеристическим полиномом матрицы А. В общем случае имеется n различных комплексных или вещественных корней характеристического уравнения. Их количество будет меньше в случае кратных корней.

Пример:

Дана квадратная матрица второго порядка

 

A =

 

Решить задачу на собственные значения вручную и средствами MATLAB.

Решение:

Находим характеристический полином матрицы A.

 

E = , │A - λE│ = = (3 - λ)(2 - λ) - 20 = λ2 - 5λ - 14.

 

В MATLAB массив коэффициентов характеристического полинома матрицы А возвращает команда poly:

>> poly(A)

ans =

1 -5 -14

Характеристическим уравненим является квадратное уравнение

λ2 - 5λ - 14 = 0.

Вычисляем корни этого уравнения.

 

λ1,2 = = = = = .

 

Корни уравнения λ1 = -2 и λ2 = 7 являются собственными значениями матрицы А.

Найдем теперь собственные векторы, соответствующие этим собственным значениям. Собственный вектор

U = ,

 

соответствующий собственному значению λ1 = -2, определяется уравнениями

 

 

т. е. 5u1 + 4u2 = 0. Из этого равенства следует, что собственный вектор U определяется с точностью до числового множителя, поэтому одну из координат собственного вектора можно зафиксировать. Полагая u1 = -4, найдем u2 = 5 и получим

 

U = .

 

Аналогично, собственный вектор

 

V = ,

 

соответствующий собственному значению λ2 = 7, определяется уравнениями

 

 

т. е. v1 – v2 = 0. Полагая v1 = 1, найдем v2 = 1 и получим

 

V = .

 

Следовательно, собственным значениям λ1 = -2 и λ2 = 7 соответствуют собственные векторы

 

U = и V = .

 

На рассмотренном примере мы убедились, что задача на собственные значения оказалась достаточно сложной и трудоемкой даже для матрицы минимального (второго) порядка.

В MATLAB собственные значения матрицы A вычисляет команда eig(A):

>> A=[3 4;5 2];

>> Lambda=eig(A)

Lambda =

-2

Команда [R,Lam]=eig(A) вычисляет как собственные значения, так и собственные векторы:

>> [R,Lam]=eig(A)

R =

0.7071 -0.6247

0.7071 0.7809

Lam =

7 0

0 -2

Собственные значения являются диагональными элементами диагональной матрицы Lam, а столбцы матрицы R являются собственными векторами. Итак, собственным значениям λ1 = -2 и λ2 = 7 соответствуют собственные векторы

 

R1 = и R2 = .

 

Как указывалось выше, собственные векторы определяются с точностью до числового множителя. Команда eig вычисляет единичные или нормированными по евклидовой норме собственные векторы.

Существуют различные типы векторных норм. Норма ||R||p вектора R длины n определяется следующим образом:

||R||p = (p = 1, 2, …).

 

Если p=2 – норма называется евклидовой.

В MATLAB норму ||R||p вектора R вычисляет команда norm(R,p). Команда norm(R) вычисляет евклидову норму вектора R по умолчанию. Если norm(R) = 1, вектор R называется единичным или нормированным.

Вектор R нормируется следующим образом:

 

Rnorm = .

 

Пронормируем найденные вручную собственные векторы

 

U = и V = :

 

>> U=[-4;5];V=[1;1];

>> disp(U/norm(U))

-0.6247

0.7809

>> disp(V/norm(V))

0.7071

0.7071

Результы совпали с собственными векторами R1 и R2, вычисленными командой eig.

Для получения вычисленных в символьной форме пар собственных значений и собственных векторов, введем следующую команду:

>> [R,Lam]=eig(sym(A))

R =

[ 1, 1]

[ 1, -5/4]

Lam =

[ 7, 0]

[ 0, -2]

Некоторые команды линейной алгебры MATLAB мы рассматривали ранее. К ним относятся, в частности, команды вычисления определителя и обратной матрицы det и inv.(см. разд. 1.10).

В MATLAB cуществует и другие команды решения типовых задач линейной алгебры.

Так, команда norm вычисляет различные виды норм векторов и матриц. Справку по этой команде можно получить, набрав в командной строке doc norm.

Команда rank(B) возвращает ранг прямоугольной матрицы B.

Ранг матрицы B есть такое число r = rB, что по крайней мере один из определителей r - го порядка, получаемый из этой матрицы при удалении строк и/или столбцов, отличен от нуля, а все определители (r+1) - го порядка равны нулю. Ранг матрицы равен наибольшему числу линейно независимых строк (или столбцов). Квадратная матрица B порядка n является невырожденной в том и только в тот случае, когда ее ранг rB = n, т. е. det(B) ≠ 0.

Найдем ранг рассмотренной выше матрицы

 

A = :

 

>> disp(rank(A))

Поскольку ранг и порядок квадратной матрицы А совпадают, ее определитель должен быть ненулевым. Проверка:

>> det(A)

ans =

-14

Перечислим некоторые из команд линейной алгебры:

cond – число обусловленности матрицы;

lu – разложение на треугольные матрицы;

svd – сингулярное разложение матрицы и т. д.

Справочная информация по командам линейной алгебры находится в разделе matfun справочной системы MATLAB.

Вопросы для самопроверки

1. Как в MATLAB создать вектор с помощью операции сцепления строк, индексацией с помощью вектора, индексацией с помощью двоеточия?

2. Какие команды выдают размер и размерность массива?

3. Что называется порядком квадратной матрицы?

4. Какая команда выдает длину вектора?

5. С помощью какой команды можно упорядочить вектор по убыванию?

6. Как найти сумму всех элементов матрицы?

7. Какие команды создают массивы специального вида?

8. Какая команда осуществляет разворот матрицы на 90o против часовой стрелки?

9. Какая команда выделяет главную диагональ матрицы?

10. Как «растянуть» матрицу в вектор с помощью оператора двоеточия?

11. Как создаются новые матрицы на основе существующих с помощью операций горизонтального и вертикального сцепления?

12. Как построить таблицу значений функции?

13. Какие команды вычисляют собственные значения и собственные векторы квадратной матрицы?

ГЛАВА 3 М-ФАЙЛЫ

M-файлы – это обыкновенные текстовые файлы (с расширением .m), содержащие команды системы MATLAB. Подготовленный и записанный на жесткий диск компьютера M-файл становится частью системы и его можно вызывать как из командной строки, так и из другого M-файла. Большая часть обширного набора готовых средств системы MATLAB – это внешние расширения в виде M-файлов. Благодаря текстовому формату M-файлов пользователь может ввести в систему любую новую команду, оператор или функцию и легко приспособить ее к решению нужных классов задач.

Различают два типа M-файлов: файл-программы (Script M-Files) и файл-функции (Function M-Files). Мы продемонстрируем использование обоих типов M-файлов ниже.

Для создания и редактирования M-файлов предназначен встроенный модуль Editor (Редактор), который можно запустить командой edit (для редактирования нового файла). Для запуска модуля Editor (Редактор) можно также использовать меню File (Файл) или два крайних слева значка на панели инструментов, как для создания нового файла, так и для открытия уже существующего.

Файл-программы

 

Файл-программы (их также называют сценариями или скриптами) являются простейшим типом M-файлов. Они содержат последовательность команд без входных и выходных параметров.

В качестве примера составим файл-программу нахождения длины d = радиус - вектора точки (x;y;z) трехмерного пространства с двумя фиксированными координатами y = 3, z = 4. В главном меню MATLAB выберем команду File => New => M-file (Файл=>Новый=>M-файл), в результате чего раскроется окно редактора M-файлов (рис. 3.1).

 

 

Рис.3.1

В этом окне введем следующие строки:

y=3;z=4;

d=sqrt(x^2+y^2+z^2)

Обратим внимание, что строка, задающая d, не завершена точкой с запятой, поэтому результат работы этой строки будет отображаться в командном окне.

Сохраним введенный файл-сценарий в текущем каталоге под именем, например, myprog.m. Для этого в окне редактора M-файлов выберем команду File => Save As(Файл=>Сохранить как). В появившемся диалоговом окне Save file as(Сохранить файл как) раскроется подкаталог work основного каталога MATLAB, который по умолчанию определен в качестве текущего рабочего каталога Current Directory. В поле File name(Имя файла) введем имя myprog вместо отобразившегося по умолчанию имени Untitled.m и щелкнем на кнопке Save (Сохранить). Расширение .m вводить не следует, система MATLAB добавит его автоматически.

Выполнить сохраненный файл-сценарий можно одним из следующих способов:

в редакторе M-файлов выбрать команду Debug => Run (Отладка=>Запуск);

набрать в командной строке имя M-файла (без расширения) и нажать клавишу <Enter>, т. е. выполнить сценарий как команду MATLAB.

Выполним сценарий вторым способом:

>> x=2;

>> myprog

d =

5.3852

Ответом является длина 5,3852 радиус - вектора точки (2;3;4).

При работе с редактором M-файлов имеется возможность запуска только части команд, из которых состоит M-файл. Для этого надо выделить команды при помощи мыши и нажать клавишу <F9>. Выделенные команды выполняются последовательно, точно так же, как если бы они были набраны в командной строке. Очевидно, что работать в M-файле удобнее, чем в командной строке, поскольку можно сохранить программу, можно редактировать ее, используя обычные приемы редактирования, общие для Windows - приложений, в том числе с помощью мыши и клавиш <↑> и <↓>.

Если вы захотите изменить созданный M-файл (например, зафиксировать координаты y = 4, z = 5), внесите соответствующие изменения в текст программы

y=4;z=5;

d=sqrt(x^2+y^2+z^2)

сохраните эти изменения и вновь запустите файл-сценарий:

>> x=2;

>> myprog

d =

6.7082

Теперь сценарий myprog.m вычислил длину 6,7082 радиус - вектора точки (2;4;5).

Сценарийmyprog.m обрабатывает как свои собственные переменные y, z, так и переменную x, определенную до вызова сценария в командном окне системы MATLAB и хранящуюся в ее рабочем пространстве. Это возможно потому, что переменные, определяемые в сценариях, и переменные, определяемые в командном окне, составляют единое рабочее пространство системы MATLAB. В свою очередь, все переменные, созданные во время работы сценария, остаются в рабочем пространстве MATLAB и после окончания его выполнения, т. е. являются глобальными. Можно убедится в этом, выполнив команду who:

>> who

Your variables are:

d x y z

Справочную информацию по M-программам можно получить, введя команду doc script.

Файл-функции

 

Подобно файл-сценарию, файл-функция представляет собой файл с простым текстом, который может находится в вашем текущем либо в любом другом каталоге. Файл-функции отличаются от сценариев тем, что позволяют задавать входные параметры, когда вы их запускаете из командной строки MATLAB или из другого M-файла.

Ниже представлен M-файл-функция с именем rad.m, созданный для нахождения длины d = радиус - вектора точки (x;y;z) трехмерного пространства:

function d=rad(x,y,z)

%Вычисление длины d=sqrt(x^2+y^2+z^2) радиус-вектора точки (x;y;z)

d=sqrt(x^2+y^2+z^2);

Структура M-файлов-функций следующая.

Первая строка в M-файле-функции называется строкой определения функции и начинается со слова function. В окне редактора M-файлов это зарезервированное слово выделяется синим цветом. Первая строка M-файла задает имя функции, а также количество аргументов (или параметров) ввода и вывода. В этом примере функция называется rad. Имя файла (за исключением расширения .m) и имя функции должны совпадать. Когда вы создаете этот новый M-файл-функцию в безымянном окне редактора и выбираете команду Save (Сохранить), модуль Editor (Редактор) сам присваивает файлу имя rad.m. Функция в нашем примере имеет для ввода три элемента, которые внутри M-файла обозначены как x, y, z. В качестве результата возращаетсяодин элемент – значение d, появляющееся в конце выполнения функции.

За строкой определения функции может следовать несколько строк - комментариев, начинающихся со знака процента %. Эти строки называются текстом справки об используемой функции и отображаются при вводе команды help. В M-файле rad.m присутствует только одна строка текста справки; она отображается при введении команды help rad.

Остальные строки содержат выражения системы MATLAB, которые производят вычисление значений функции. Строки комментариев (строки, начинающиеся со знака процента %) могут быть в любой области M-файла. Они не являются исполняемыми инструкциями. Цель их размещения в тексте программы – пояснить смысл той или иной части программного кода. Все выражения в M-файле-функции, которые обычно производят вывод результатов, должны оканчиваться точкой с запятой с целью пресечения вывода результатов промежуточных вычислений.

Покажем, как используется файл-функция rad.m для вычисления длины радиус - вектора точки (2;3;4):

>> rad(2,3,4)

ans =

5.3852

Ответ 5,3852 будет возвращен и сохранен под именем ans независимо от того, заданы или нет x, y, z и d в вашей рабочей области. Переменные, которые используются в файл-функции, такие как x, y, z и d в файле rad.m, являются локальными переменными. Запуск M-файла-функции не задает эти переменные в рабочей области и не изменяет их параметры, если переменные с такими же именами в рабочей области были заданы ранее. Система MATLAB не запоминает значения этих переменных после того, как M-файл-функция будет выполнен, а область оперативной памяти, в которой они хранились, освобождается. Убедимся в этом, выполнив команду who:

>> who

Your variables are:

ans

M-файлы-функции могут иметь множество аргументов ввода и вывода. Ниже представлен пример файла с именем rad2.m с тремя входными и двумя выходными параметрами, вычисляющего длину d и квадрат длины d2 радиус - вектора точки трехмерного пространства (x; y; z):

function [d,d2]=rad2(x,y,z)

d2=x^2+y^2+z^2;

d=sqrt(d2);

Если вы введете rad2(2,3,4), то только первый аргумент вывода будет возвращен и сохранен под именем ans:

>> rad2(2,3,4)

ans =

5.3852

Чтобы увидеть оба результата вывода, надо присвоить эти результаты переменным, заключенным квадратные скобки:

>> [d,d2]=rad2(2,3,4)

d =

5.3852

d2 =

Введя d=rad2(2,3,4), вы можете присвоить первый аргумент вывода переменной d:

>> d=rad2(2,3,4)

d =

5.3852

При вводе d2=rad2(2,3,4) нельзя получить второй аргумент вывода, т. к. переменной d2 будет также присвоен первый результат:

>> d2=rad2(2,3,4)

d2 =

5.3852

Передача информации из командного окна MATLAB в файл-функцию осуществляется с помощью параметров функции. Другой механизм передачи информации – глобальные переменные. Файл-функция может и не иметь входных или выходных параметров, заголовки таких файл-функций приведены ниже:

function noout(a,b), function [v,u]=noin, function noarg().

Для того чтобы рабочая область MATLAB и файл-функция могли совместно использовать некоторую переменную с заданным именем, ее всюду нужно объявить как глобальную с помощью команды global.

Приведем пример файл-функции rad3 без входных параметров:

function [d,d2]=rad3

global x y z

d2=x^2+y^2+z^2;

d=sqrt(d2);

Вызов ее осуществляется следующим образом:

>> global x y z

>> x=2;y=3;z=4;

>> [m,n]=rad3

m =

5.3852

n =

Параметрами файл-функций могут быть не только числа или скалярные переменные, но и массивы требуемых размеров. Поэтому желательно создавать векторизованные версии М-файлов вместо операторов <^>, <*>, </> следует применять операторы <.^>, <.*>, <./>. Векторизация осуществляется командой vectorize (см. разд. 1.7).

Созданный M-файл можно сохранить не только в текущем, но и в любом другом каталоге. В этом случае перед запуском M-файла на выполнение нужно установить пути поиска, ведущие к нему. По умолчанию текущим является подкаталог work основного каталога MATLAB. Для того, чтобы увидеть его содержимое, в главном меню MATLAB выберите команду View => Current Directory (Вид=>Текущий каталог). В результате раскроется окно, в котором отобразится список файлов и вложенных папок активного в данный момент каталога.

Чтобы изменить текущий каталог, введите путь к новому каталогу в поле Current Directory либо выберите его в раскрывающемся списке этого поля. Или же щелкните на кнопке справа от от поля Current Directory, и отыщите нужную папку в раскрывшемся диалоговом окне Обзор папок.

Справочную информация по M-функциям можно получить, введя команду doc function.

 

Вопросы для самопроверки

1. Как вызвать редактор M-файлов?

2. Что такое сценарий?

3. Что такое файл-функция?

4. Какова структура M-файла, содержащего файл-функцию?

5. Какую роль играют строки комментариев, располагаемые сразу за заголовком файл-функции?

6. Как осуществляется передача информации из командного окна MATLAB в файл-функцию?

7. Что такое локальные, глобальные переменные?

8. Как получить справку по M-файлам?

 

ГЛАВА 4 ПРОГРАММИРОВАНИЕ

Для освоения методов программирования в MATLAB не нужно обладать какими-то специальными знаниями. Встроенный язык программирования MATLAB (М-язык) достаточно прост, он содержит необходимый минимум конструкций. Все команды, операторы и функции, с которыми вы уже ознакомились ранее при работе в «режиме калькулятора», являются типичными инструментами М-языка. Примерами программ в системе MATLAB служат M-файлы.

К основному набору конструкций М-языка относятся также операторы отношения, логические операторы, операторы ветвления и цикла, рассматриваемые в этой главе.



Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.236.222.124 (0.033 с.)