Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Собственные значения и собственные вектора.



Скаляр Û и вектор v называются собственным значением и собственным вектором матрицы A, если выполняется соотношение: Av= Û v. Пусть L – диагональная матрица, у которой на диагонали стоят собственные значения матрицы A, а V – матрица, столбцами которой являются собственные вектора матрицы A. Тогда справедливо соотношение:

AV = VL. Если V несингулярная матрица, то матрицу A можно представить в виде разложения: A = VLV-1. Возьмем матрицу A из предыдущего примера:

 

A =

0 -6 -1

6 2 -16

-5 20 -10

Тогда функция eig(A) возвращает вектор собственных значений матрицы A:

 

lambda = eig(A)

lambda =

-3.0710

-2.4645 +17.6008i

-2.4645 -17.6008i

 

Так как действительная часть собственных значений является отрицательной, то eÛ t стремится к нулю с ростом t. Ненулевая мнимая часть двух собственных значений,, является осциллирующей, sin(è t ), компонентой решения дифференциального уравнения.

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

 

[V, D] = eig(A)

V =

-0.8326 0.2003 - 0.1394i 0.2003 + 0.1394i

-0.3553 -0.2110 - 0.6447i -0.2110 + 0.6447i

-0.4248 -0.6930 -0.6930

D =

-3.0710 0 0

0 -2.4645 +17.6008i 0

I

 

Собственные векторы хранятся в столбцах матрицы V, а собственные значения – в диагональных элементах матрицы D. Собственные векторы масштабированы так, чтобы евклидова норма каждого вектора равнялась единице.

 

Нормальная форма Жордана.

Жорданова нормальная форма возникла из попыток получить с помощью преобразования подобия диагональную матрицу. В жордановой нормальной форме собственные значения располагаются на диагонали, но некоторые наддиагональные элементы равны единице, а не нулю. Функция jordan строит нормальную жорданову форму и имеет два формата:

 

· J=jordan(A) возвращает жорданову нормальную форму J;

· [V, J] = jordan(A) вычисляет как жорданову форму J, так и матрицу трансформации V, столбцами которой являются обобщенные собственные векторы. Более точно, V\A*V=J.

Рассмотрим пример:

 

A = [12, 32, 66, 116; -25, -76, -164, -294;...

21, 66, 143, 256; -6, -19, -41, -73]

A =

12 32 66 116

-25 -76 -164 -294

21 66 143 256

-6 -19 -41 -73

[V, J] = jordan(A)

V =

4 -2 4 3

-6 8 -11 -8

4 -7 10 7

-1 2 -3 -2

J =

1 1 0 0

0 1 0 0

0 0 2 1

0 0 0 2

Очевидно, что матрица A имеет собственные значения 1 и 2, каждое из которых имеет кратность два. Матрица имеет только два собственных вектора: V(:, 1) и V(:, 3), которые удовлетворяют соотношениям:

 

A*V(:, 1) = 1*V(:, 1)

A*V(:, 3) = 2*V(:, 3)

Два других столбца матрицы V являются обобщенными собственными векторами, удовлетворяющими соотношениям:

 

A*V(:, 2) = 1*V(:, 2) + V(:, 1)

A*V(:, 4) = 2*V(:, 4) + V(:, 3)

Или в математической нотации:

 

( A-Û 2I)v4=v3

( A-Û 1I)v2=v1

 

Разложение Шура.

С помощью функции schur можно представить матрицу A в виде произведения: A=USU’, где U – унитарная матрица, а S – матрица Шура. Действительная форма Шура имеет действительные собственные значения на диагонали, а комплексные собственные значения представлены 2x2 блоками, занимающими нижнюю поддиагональ. Для матрицы A из предыдущего примера имеем:

 

[U, S] = schur(A)

U =

0.4815 -0.8033 -0.3476 0.0440

-0.7223 -0.1404 -0.6539 0.1759

0.4815 0.5421 -0.5300 0.4398

-0.1204 -0.2028 0.4131 0.8796

S =

1.0000 -2.2351 -33.6613 470.5067

0.0000 1.0000 -5.9193 118.5827

0 0 2.0000 -16.7473

0 0 0 2.0000

Сингулярное разложение.

Скаляр â и векторы u, v называются сингулярным значением и сингулярными векторами прямоугольной матрицы A, если выполняются соотношения:

 

Av = â u и A’u = â v.

 

Эти соотношения можно переписать в виде:

 

AV = UÌ и A’U = VÌ,

 

Где Ì – диагональная матрица, элементами которой являются сингулярные значения â, U и V – ортогональные матрицы, столбцы которых образуют соответствующие сингулярные векторы u и v. В силу ортогональности матриц U и V справедливо разложение:

 

A = UÌ V’

 

Сингулярное разложение проводится с помощью функции svd. Рассмотрим пример:

 

A =[9 4; 6 8; 2 7]

A =

9 4

6 8

2 7

[U, S, V] = svd(A)

U =

-0.6105 0.7174 0.3355

-0.6646 -0.2336 -0.7098

-0.4308 -0.6563 0.6194

S =

14.9359 0

0 5.1883

0 0

V =

-0.6925 0.7214

-0.7214 -0.6925

Численное интегрирование.

Численное интегрирование заключается в приближенном вычислении определенного интеграла с помощью одной из квадратурных формул. Рассмотрим применение функции quad, которая выполняет интегрирование по методу низкого порядка, используя рекурсивное правило Симпсона.

Найдем значение определенного интеграла для функции f(x)=x3 на отрезке [0, 1]:

 

quad('x.^3', 0, 1, 1.e-8)

ans =

0.2500

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

Для вычисления двойного интеграла можно использовать функцию dblquad:

 

q = dblquad(fun, xmin, xmax, ymin, ymax, tol)

 

здесь fun – подынтегральная функция, tol – относительная погрешность, а остальные параметры задают пределы интегрирования.

Пример:

 

Q = dblquad(inline('y*sin(x)+x*cos(y)'), pi, 2*pi, 0, pi)

Q =

-9.8696

Представление полиномов в среде MATLAB.

В системе MATLAB полином представляется с помощью вектора-строки, содержащего упорядоченные по убыванию коэффициенты полинома. Например, чтобы представить многочлен p(x)=x3-2x-5, следует создать вектор:

 

p = [1 0 -2 -5];

 

Умножение и деление многочленов.

Для реализации умножения и деления многочленов следует использовать функции conv и deconv. Рассмотрим многочлены a(s)=s2+2s+3 и b(s)=4s2+5s+6. Вычислим их произведение:

 

a = [1 2 3]; b = [4 5 6];

c = conv(a, b)

c =

4 13 28 27 18

 

Разделим многочлен c на a:

 

[q, r] = deconv(c, a)

q =

4 5 6

r =

0 0 0 0 0

 

Вектор r представляет собой остаток.

 

Вычисление производной от многочлена.

Для определения производной от многочлена используется функция polyder. Вычислим производную от многочлена p:

 

p = [1 0 -2 -5];

q = polyder(p)

q =

3 0 -2

Функция polyder позволяет находить производную от произведения двух многочленов и от их частного. Для примера, построим два многочлена a и b.

 

a = [1 3 5]; b = [2 4 6];

 

Вычислим производную от произведения a*b, используя вызов функции с одним выходным параметром:

 

c = polyder(a, b)

c =

8 30 56 38

Для вычисления производной от частного a/b, следует использовать вызов функции с двумя выходными параметрами:

 

[q, d] = polyder(a, b)

q =

-2 -8 -2

d =

4 16 40 48 36

где q/d является результатом операции.

 

Вычисление значения многочлена.

Для вычисления значения многочлена следует использовать функцию polyvalm:

 

p = [1 0 -2 -5];

polyval(p, 5)

ans =

 

Функция polyvalm позволяет также вычислять матричный многочлен. Вычислим значение многочлена p(X)=X3-2X-5I от квадратной матрицы X :

 

X = [2 4 5; -1 0 3; 7 1 5];

Y = polyvalm(p, X)

Y =

377 179 439

111 81 136

490 253 639

 

Нахождение корней многочлена.

Корни многочлена можно найти с помощью функции roots:

 

r = roots(p)

r =

2.0946

-1.0473 + 1.1359i

-1.0473 - 1.1359i

Здесь p – вектор из предыдущего примера, r – вектор, компонентами которого являются корни многочлена.

 

Построение многочлена по его корням.

Функция poly возвращает коэффициенты многочлена, если корни его известны:

p2 = poly(r)

 

p2 =

1.0000 0 -2.0000 -5.0000

Построение характеристического многочлена.

Если в качестве аргумента использовать матрицу, то функция poly возвращает коэффициенты характеристического многочлена:

 

A=[1 2 3; 4 5 6; 7 8 0]

A=

1 2 3

4 5 6

7 8 0

p = poly(A)

p =

1.0 -6.0000 -72.0000 -27.0000

Минимизация функций.

Для нахождения минимума функции одной переменной на заданном интервале следует использовать функцию fminbnd. Найдем на интервале [0.2, 1] минимум функции

 

 

f = inline('1./((x-0.3).^2 + 0.01) + 1./((x-0.9).^2 + 0.04)-6');

x = fminbnd(f, 0.2, 1)

 

x =

0.6370

fplot(f, [0.2 1]); grid on;

 

 

Функция fplot используется для вывода графика операторной функции f на заданном интервале [0.2, 1].

Для минимизации функций нескольких переменных можно использовать функцию fminsearch. Поиск минимума основан на симплекс-методе Нелдера – Мида, который сводится к построению симплекса в n-мерном пространстве, заданного n+1 вершиной. В двумерном пространстве симплекс является треугольником, а в трехмерном – пирамидой. На каждом итерационном шаге значение функции в новой точке (приближенном решении) сравнивается со значениями функции в вершинах симплекса. В результате новая точка заменяет ближайшую вершину симплекса. Итерации повторяются до тех пор, пока размеры симплекса не станут меньше заданной погрешности метода.

В качестве примера рассмотрим поиск минимума тестовой функции Розенброка:

 

 

Минимальное значение этой функции равно нулю и достигается в точке [1, 1].

 

f = inline('100*(x(2)-x(1)^2)^2+(1-x(1))^2; ');

[x, fval] = fminsearch(f, [-1.2, 1])

x =

1.0000 1.0000

fval =

E-010

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

 

x=-2:.25: 2; y=-1:.25: 3;

[xx, yy]=meshgrid(x, y);

zz=100*(yy-xx.^2).^2+(1-xx).^2;

mesh(x, y, zz, 'FaceColor', 'non', 'EdgeColor', 'k');

axis off; view(13, 32);

hold on;

plot3(-1. 9, 2, 267. 62, 'ko', 'MarkerSize', 15,

'LineWidth', 2, 'EraseMode', 'none');

text(-1.9, 2.2, 267.62, ' Begin', 'Color', [0 0 0], 'EraseMode', 'none');

plot3(1, 1, 0, 'ko', 'MarkerSize', 15, 'LineWidth', 2, 'EraseMode', 'none');

text(0.8, 1.4, 0, ' End', 'Color', [0 0 0], 'EraseMode', 'none');

x=[-1.9 2]; % Начальное приближение

f='[100*(x(2)-x(1)^2)^2+(1-x(1))^2; minfn(x)]';

[x, fval, exitflag, output] = fminsearch(f, x);

function out=minfn(currPos)

x1=currPos(1); y1=currPos(2);

z1=100*(y1-x1.^2).^2+(1-x1).^2;

plot3(x1, y1, z1, 'r.', 'EraseMode', 'none', 'MarkerSize', 25);

out = [];

 

 

Метки Begin и End обозначают начальное и конечное приближение. Функции fminbnd и fminsearch входят в состав пакета Optimization Toolbox, который служит для решения оптимизационных задач и систем нелинейных уравнений.

 

 


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 420; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.076 с.)
Главная | Случайная страница | Обратная связь