При реализации многих задач, связанных с матричной алгеброй, полезными могут оказаться функции для оценок основных характеристик:
det(A)– определитель квадратной матрицы;
rank(A)– ранг матрицы;
trace(A)– след матрицы (сумма элементов главной диагонали);
Пример:
» A=[1 2 3; 5 4 3; 3 4 3]
A = 1 2 3
5 4 3
3 4 3
» det(A)
ans =12
» rank(A)
ans = 3
» trace(A)
ans = 8
Выше среди операций системы мы уже упоминали операцию транспонированияматрицы :
» A=[ 1 2 3 ; 23 11 0]
A =
1 2 3
23 11 0
» B=A’
B = 1 23
2 11
3 0
и возведения в степень (матричного умножения на себя или инверсии):
» A=[1 2 3; 5 4 3; 3 4 3]
A =
1 2 3
5 4 3
3 4 3
» D=A^(-1)
D =
-0.0000 0.5000 -0.5000
-0.5000 -0.5000 1.0000
0.6667 0.1667 -0.5000
» A^0
ans =
1 0 0
0 1 0
0 0 1
При решении многих задач (например, при оценке сходимости методов) используется понятие нормывектора (матрицы). В рассматриваемой системе для поиска нормы предлагается функции norm(A)и norm(A, k).
Если А – вектор, то норма определяется (по умолчанию k=2)
,
При k=inf и k=-inf соответственно и ;
» v=[3 4 -10]
v = 3 4 -10
» norm(v)
ans = 11.1803
» norm(v,2)
ans = 11.1803
» norm(v,inf)
ans = 10
» norm(v,-inf)
ans = 3
» norm(v,1)
ans = 17
» norm(v,-1)
ans = 1.4634
» norm(v,3)
ans = 10.2946
» norm(v,’fro’)
ans = 11.1803
Если А – матрица, то норма определяется только для k=1, 2, inf и fro (по умолчанию k=2):
, при k=1;
, при k=2 – максимальное из сингулярных чисел матрицы (значений квадратных корней из собственных чисел матрицы А′А);
, при k=inf ;
, при k='fro'.
Пример:
A = 1 2 3
5 4 3
3 4 3
» norm(A,1)
ans =10
» norm(A)
ans =9.6871
» norm(A, inf)
ans =12
» norm(A, ’fro’)
ans =9.8995
Для задачи решения системы линейных алгебраических уравнений, одной из популярнейших в вычислительной математике, предусмотрены даже “элементарные” операции. Так для решения системы A×X=B (A–матрица коэффициентов размерности m×n, B - матрица правых частей размерности n×k, Х – матрица из k векторов-столбцов решений) можно использовать команду обратного деления - \.
Например, для решения системы
x1+2 x2+3 x3 = 3 (или 3)
5 x1+4 x2+3 x3 = 9 (или 9)
3 x1+4 x2+3 x3 = 6 (или 7)
задаем (построчно) матрицу коэффициентов и векторов правой части
» A=[1 2 3; 5 4 3; 3 4 3]
A = 1 2 3
5 4 3
3 4 3
» B=[3 3; 9 9; 6 7]
B = 3 3
9 9
6 7
и выполнить
» X=A\B
X =1.5000 1.0000
0.0000 1.0000
0.5000 0
При решении системы XA=B можно воспользоваться операцией обычного деления. Так решение той же системы
»X=B’/A’
X = 1.5000 -0.0000 0.5000
1.0000 1.0000 0
(обратите внимание на строчное представление решений).
Под кажущейся простотой решения скрывается достаточно серьезный анализ структуры матрицы и использование лучшего по точности и быстродействию алгоритма (метод Гаусса, разложение Холецкого и др.)
Для прямоугольной матрицы А (m≠n) решение строится по минимуму квадрата ошибки (используется QR-разложение на основе преобразований Хаусхолдера) и не сопровождается сообщениями о множественности решений или переопределенности системы.
Примеры:
одно уравнение с 3 неизвестными :
» a=[1 2 3];
» b=6;
» x=a\b
x = 0
три уравнения с 2 неизвестными:
» c=[1 2; 3 7; 2 5];
» d=[3; 10 ; 9];
» x=c\d
x = -5.00000000000002
3.66666666666667
Естественно, что квадратная матрица коэффициентов должна быть невырожденной (определитель отличен от нуля) и в противном случае выдается сообщение Matrix is singular to working precision и элементы решения принимают значения inf (не определено).
Особого упоминания заслуживает обращение (инверсия) матрицы, для которого предусмотрена операция возведения в степень –1 и функция inv(A):
A=[1 2 3; 5 4 3; 3 4 3]
A =
1 2 3
5 4 3
3 4 3
» C=inv(A)
C =
-0.0000 0.5000 -0.5000
-0.5000 -0.5000 1.0000
0.6667 0.1667 -0.5000
» D=A^(-1)
D =
-0.0000 0.5000 -0.5000
-0.5000 -0.5000 1.0000
0.6667 0.1667 -0.5000
Напомним, что обращение матрицы может оказаться полезным при решении системы AX=B в виде :
» B=[3 3; 9 9; 6 7]
B = 3 3
9 9
6 7
» X=inv(A)*B
X = 1.5000 1.0000
0 1.0000
0.5000 0.0000
Двухмерная графика
Для построения графика в линейном масштабе используются
plot (y)- построение графика одномерного массива в зависимости от номера элемента (для двумерного массива строятся графики для столбцов);
plot (x,y) -построение графика функции y=y(x) ; при двумерном х строятся графики х=х(у); если оба массива двумерные, строятся зависимости для соответствующих столбцов;
plot (x,y, LineSpec)– заданием строки LineSpec (до 3 символов) определяет стиль линий , форму маркера точек и цвет линий и маркера:
По умолчанию выбирается непрерывная линия с точечным маркером и чередованием цветов с желтого по синий.
plot (x1,y1, LineSpec1, x1,y1, LineSpec2,...)– строит на одном графике несколько линий (диапазон по аргументу - объединение х1 и х2;
plot (...,’PropertyName’, PropertyValue,...)–задает значения свойств графического объекта Line (толщину линий LineWidth, размер маркера MarcerSize, цвет маркера MarcerFaceColor и др.).
» y=besselj(0,x); % функция J0(x)
» x1=0:0.4:8;
» y1=besselj(1,x1); % функция J1(x)
» plot(x, y, '-sk', x1, y1,'-pk','LineWidth',1 ) % рис. 2.1
fplot( <имя функции>, limits)строит график функции (функций) в интервале limits=[xmin, xmax]. В качестве имени функции может использоваться М-файл или строка типа ‘sin(x)’, ‘[sin(x) cos(x) ]’, ‘[sin(x), myfun1(x), myfun2(x)]’. Можно установить размеры графика по оси значений функции limits=[xmin,xmax ymin ymax].
fplot( <имя функции>,limits, eps)строит график c относительной погрешностью ерs (по умолчанию 0.002) и максимальное число шагов (1/eps)+1. Эту конструкцию можно дополнить четвертым параметром n(n+1 – минимальное число точек) и параметром LineSpec:
ezplot('f(x)')строит график f(x), заданной символьным выражением (например, ezplot('x^2-2*x+1') ), на интервале [-2π 2π] с выводом выражения в качестве заголовка графика.
ezplot('f(x)', limits)и ezplot('f(x)', limits, fig)строят график f(x) на указанном интервале и в заданном окне.
Рис. 2.1. Рис. 2.2.
График в полярных координатахопределяется функциями
polar(f,r)и polar(f,r, LineSpec),
где f– массив значений угла и r– соответствующие значения радиуса: , .
» f=0:0.01:2*pi;
» r=sin(2.*f).*cos(2.*f);
» hp=polar(f,r), hold on
» set(hp,'LineWidth',4) % рис.2.3
»f=0:0.01:12*pi;
» r=exp(-0.1*f);
» hp=polar(f,r), hold on
» set(hp,'LineWidth', 2) % рис.2.4
Рис. 2.3.
Рис. 2.4.
График в логарифмическом масштабезадается функцией loglogc тем же набором параметров, что и plot, с той лишь разницей, что проводится масштабирование десятичным логарифмированием по обеим координатам.
График в полулогарифмическом масштабезадается функциями semilogxи semilogyc тем же набором параметров, что и plot(проводится масштабирование логарифмированием по одной из координат).
График с двумя осями ординат(одна отображается слева, другая справа) реализуется функцией plotyy(x1,y1,x2,y2)и той же функцией с добавлением параметров масштабирования ‘f1’ или ‘f1’,’f2’, в роли которых могут выступать plot, semilogx, semilogx, loglog:
В трехмерной графике выполняются представления функции z=z(x,y), отличающиеся способом соединения точек: линия, сечения, сетчатая или сплошная поверхность.
plot3(x,y,z)в тех же вариациях, что и plot, предполагает задание одномерных и двумерных массивов (строятся точки с координатами x(i,:),y(i,:),z(i,:) для каждого столбца и соединяются прямыми линиями. Если используется [x,y]=meshgrid(...), то строятся сечения.
mesh(x,y,z,c), mesh(z,c), mesh(z)определяют задание сетчатой поверхности (массив сопределяет цвета узлов поверхности; если x,yне указаны, то x=1:n, y=1:m, где [m,n]=size(z).
» [x,y]=meshgrid(-8:0.5:8);
» t=sqrt(x.^2+y.^2)+0.001;
» z=sin(t)./t;
» mesh(x,y,z) %Рис.2.8
Аналогичная функция meshсв дополнение к поверхности строит проекции линий уровня, а meshzделает срез поверхности до нулевого уровня (своеобразный пьедестал).
Рис. 2.8.
Рис. 2.9. meshc(x,y,z) Рис. 2.10. meshz(x,y,z)
surf(x,y,z,c), surf(z,c), surf(z)определяют задание сплошной поверхности, отличаясь от mesh системой окраски; аналогичная функция surfс(...)задает проекции линий уровня. Реализация трехмерной графики может сопровождаться множеством вспомогательных команд, например:
hidden on/offвключает или выключает режим удаления невидимых линий (по умолчанию on);
shading faceted/ flat/ interpустанавливает затенение поверхностей (по умолчанию faceted дает равномерную окраску ячеек с черными гранями, flat – цветами узлов сетки, interp – интерполяцией цветов.