- •Основы работы в matlab. Векторы и матрицы.
- •Введение
- •Среда matlab
- •1.1. Основный окна Matlab и выполнение элементарных вычислений
- •1.2. Редактирование и отладка м-файлов
- •Переменные в matlab
- •3. Массивы в matlab
- •4. Задачи линейной алгебры (векторы и матрицы)
- •1. Функции операций над векторами:
- •Решение некоторых задач линейной алгебры
- •4. Решение некоторых задач алгебры матриц
- •5. Решение систем линейных уравнений
- •6. Собственные значения и собственные векторы
- •7. Норма и число обусловленности матрицы
- •8. Задания для самостоятельного решения
1. Функции операций над векторами:
■ Функция length (V) - определяет длину вектора V;
Листинг 17.
>> V=[-l 0 3-2 1 -1 1];%Вектор-строка
>> length(V)%Длина вектора
ans =
7
>> W=[0,3,1,1,2];%Вектор-столбец
>> length(W)%Длина вектора
ans =
5
■ prod (V) - вычисляет произведение элементов вектора V;
Листинг 18.
>> V=[l,2,3];
>> prod(V)%Произведение элементов вектора
ans =
6
■ cumprod (V) формирует вектор того же типа и размера, что и V, каждый элемент которого рассчитывается по формулам: v1, v1 * v2, v1* v2* v3,… v1* v2* v3*…* vn- то есть i-ый элемент вектора V умножается на произведение всех предыдущих элементов;
Листинг 19.
>> V=[l,2,3];
>> cumprod(V)
ans =
1 2 6
■ sum(V) – вычисляет сумму элементов вектора V;
Листинг 20.
>> V=[-l 0 3-2 1 -1 1];
>> sum(V) %Сумма элементов вектора
ans =
1
■ cumsum(V) - формирует вектор кумулятивной суммы, это вектор того же типа и размера, что и V, каждый элемент которого рассчитывается следующим образом: - то есть к i-му элементу вектора V прибавляется сумма всех предыдущих элементов;
Листинг 21.
>> V=[-l 0 3 -2 1 -1 1];
>> cumsum(V)
ans =
-1 -1 2 0 1 0 1
■ diff (V)- формирует вектор, размер которого на единицу меньше чем у вектора V, а каждый элемент представляет собой разность между двумя соседними элементами массива V, то есть: .
Листинг 22.
>>V=[-l 0 3 -2 1 -1 1];
>>diff(V)
ans =
3 -5 3 -2 2
■ min (V) - находит минимальный элемент вектора V, вызов в формате [k,n]=min(V) дает возможность определить минимальный элемент k и его номер n в массиве V;
■ max (V) - находит максимальный элемент массива V или при [k, n]= max (V) определяет максимум и его номер;
Листинг 23.
>> V=[-1 0 3 -2 1 -1 1];
>> min(V)%Минимальный элемент
ans =
-2
>> max(V)%Максимальный элемент
ans =
3
>> [k,n]=min(V) %Минимальный элемент и его номер
k =
-2
n =
4
>> [k,n]=max(V) % Максимальный элемент и его номер
k =
3
n =
3
■ mean(V) - определяет среднее арифметическое массива V;
Листинг 24.
>> V[-1 0 3 -2 1 -11];
>> mean(V)%Среднее значение массива V
ans *
0.1429
>>sum(V)/length(V)%To же что, и mean(V)
ans =
0.1429
■ dot(v1,v2)- вычисляет скалярное произведение векторов vl и v2 (функция sum (vl.*v2} выдаст тот же результат);
Листинг 25.
>>vl=[1.2,-0.3;-1.1];
>>v2=[-0.9;2.1;0.5];
>>dot(vl,v2)%Скалярное произведение
ans=
1
>> sum(v1.*v2) %Скалярное произведение
ans=
-1
■ cross (vl,v2) - определяет векторное произведение векторов vl и v2;
Листинг 26.
>> vl=[1.2;0.3;-l.l];
>> v2=[-0.9;2.1;0.5];
>> cross(vl,v2) %Векторное произведение
ans =
2.4600
0.3900
2.7900
■ sort (V) - выполняет упорядочивание массива V;
Листинг 27.
>> V=[-l 0 3 -2 1 -1 1];
>> sort(V)%Сортировка по возрастанию
ans =
-2 -1 -1 0 1 13
>> -sort(-V) %Сортировка по убыванию
ans =
1 1 0 -1 -1 -2
Функции определения матриц и операций над ними:
■ eye (n[,m]) - возвращает единичную матрицу соответствующей размерности;
Листинг 28.
>>еуе(З)%квадратная единичная матрица
ans =
1 0 0
0 0 1
» eye(3,2)%прямоугольная единичная матрица
ans =
1 0
0 1
О 0
>> eye(3,4,5)%многомерная единичная матрица в MATLAB не определена,
>> %выдается сообщение об ошибке
??? Error using ==> eye
Third input must foe a valid numeric class name.
■ оnеs (n [, m, р,...])- формирует матрицу, состоящую из единиц;
Листинг 29
>> оnеs(2)%квадратная матрица
аns =
1 1
1 1
>> оnes(3,1)%матрица-столбец
аns =
1
1
1
>> оnеs(1,4)%матрица-строка
ans =
1 1 1 1
>> оnеs(2,3)%прямоугольная матрица
аns =
111
111
>> А=оnеs(3,2,3)%многомерный массив
А(:,:,1) =
1 1
1 1
1 1
А(:,:,2) =
1 1
1 1
1 1
А{:,:,3) =
1 1
1 1
1 1
■ zеrоs(n [, m, р, ...])- возвращает нулевую матрицу соответствующей размерности;
Листинг 30
>>zеrоs (3)%квадратная нулевая матрица
аns =
0 0 0
0 0 0
0 0 0
>>zеrоs (1,5)%матрица-строка
аns =
0 0 0 0 0
>> Z=zеrоs(3,4,2)%многомерный массив
Z(:,:,1) =
0 0 0 0
0 0 0 0
0 0 0 0
Z(:,:,2) =
0 0 0 0
0 0 0 0
0 0 0 0
■ diag (V [, к] ) - возвращает квадратную матрицу с элементами V на главной или к-й диагонали; функция diag (А [, к] ), где А - ранее определенная матрица, в качестве результата выдаст вектор-столбец, содержащий элементы главной или к-ой диагонали матрицы А;
Листинг 31
>> V=[1,2,3]
V =
1 2 3
>> diag(V)%Диагональная матрица, V на главной диагонали
ans =
1 0 0
0 2 0
0 0 3
>> diag(V,0)%Дает тот же результат, что и diag(V)
ans =
1 0 0
0 2 0
0 0 3
>> diag(V,1)%Диагональная матрица, V на первой диагонали (выше
главной)
ans=
0 1 0 0
0 0 2 0
0 0 0 3
0 0 0 0
>> diag(V,-l) %Диагональная матрица, V на первой'диагонали (ниже главной)
ans =
0 0 0 0
1 0 0 0
0 2 0 0
О 0 3 0
>> А=[-1 2 0;2 1 -1;2 1 3]
А =
-1 2 0
2 1 -1
2 1 3
>> diag(A)% Вектор элементов матрицы А, расположенных на главной диагонали
ans=
-1
1
3
■ rand ([n, m, р, ...])- возвращает матрицу с элементами, распределенными по равномерному закону, rand без аргументов возвращает одно он чайное число;
Листинг 32
>>rand(3)%Квадратная матрица случайных чисел
ans =
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
>> rand(3,2)%Прямоугольная матрица случайных чисел
ans =
0.4447 0.9218
0.6154 0.7382
0.7919 0.1763
>> R=rаnd(2,2,2)%Многомерный массив случайных чисел
R(:,:,1) =
0.9355 0.4103
0.9169 0.8936
R(:,:,2} =
0.0579 0.8132
0.3529 0.0099
>> rand %0дно случайное число
ans =
0.4057
>> rand %При каждом последующем вызове случайное число меняется ans =
0.1389
■ randn( [n, m, p...]) - возвращает матрицу, элементы которой распределены по нормальному закону, rand без аргументов возвращает одно случайное число;
Листинг 33.
>> randn{3)%Квадратная матрица случайных чисел
ans =
-0.4326 0.2877 1.1892
-1.6656 -1.1465 -0.0376
0.1253 1.1909 0.3273
>> randn(3,1)%Матрица-столбец случайных чисел
ans =
0.1746
-0.1867
0.7258
>> randn %Случайное число
ans =
-0.5883
■ linspace(a, b [, n] ) - возвращает массив из 100 или из n точек, равномерно распределенных между значениями а и b;
Листинг 34.
>>linspace(l,10,10)
ans =
1 2 3 4 5 6 7 8 9 10
>> linspace(l,10,20)
ans =
Columns 1 through 10
1.0000 1.4737 1.9474 2.4211 2.8947 3.3684 3.8421 4.3158 4.7895 5.2632
Columns 11 through 20
5.7368 6.2105 6.6842 7.1579 7.6316 8.1053 8.5789 9.0526 9.5263 10.0000
■ logspace{a, b [, n] ) - формирует массив из 50 или из n точек, равномерно распределенных в логарифмическом масштабе между значениями 10а и 10b; функция linspace (a, pi) дает равномерное распределение 50 точек в интервале от 10а до pi;
Листинг 35.
>> logspace(l,2,10)
ans =
10.00 12.9155 16.6810 21.5443 27.8256 35.9381 46.4159 59.9484 77.4264 100.00
>> logspace(l,pi)
ans =
Columns 1 through 10
10.0000 9.7665 9.5384 9.3157 9.0981 8.8856 8.6781 8.4755 8.2776 8.0843
Columns 11 through 20
7.8955 7.7111 7.5310 7.3551 7.1834 7.0156 6.8518 6.6918 6.5355 6.3829
Columns 21 through 30
6.2338 6.0883 5.9461 5.8072 5.6716 5.5392 5.4098 5.2835 5.1601 5.0396
Columns 31 through 40
4.9219 4.8070 4.6947 4.5851 4.4780 4.3734 4.2713 4.1715 4.0741 3.9791
Columns 41 through 50
3.8861 3.7953 3.7067 3.6201 3.5356 3.4530 3.3724 3.2936 3.2167 3.14151
■ repmat (A, n [, m] ) - формирует матрицу, состоящую из n на n или из n на m копий матрицы А; если А - скаляр, то формируется матрица, элементы которой равны значению А;
Листинг 36.
>>А=1 2;3 4]
А =
1 2
3 4
>> repmat (А,2)%Матрица из 4-х копий матрицы А
ans =
1 2 1 2
3 4 3 4
1 2 1-2
3 4 3 4
>> repmat(A,2,1)%Матрица из 2-х копий матрицы А
ans =
1 2
3 4
1 2
3 4
>> repmat(А,1,1)%Матрица из 1-й копии матрицы А
>> %Команда repmat (А,1) даст аналогичный результат
ans =
1 2
3 4
>> С=5
С =
5
>> repmat(С,3)%Матрица из 9-и копий матрицы С, причем С - скаляр ans =
5 5 5
5 5 5
5 5 5
>> B=repmat(С,[2,1,2])%Многомерный массив
В(:,:,1) =
5
5
В(:,:,2) =
5
5
■ reschape(A, m, n) - возвращает матрицу размерностью m*n, сформированную из А путем последовательной выборки по столбцам; если А не имеет m на n элементов, то выдается сообщение об ошибке;
Листинг 37.
>> A=[1 3 5;2 4 6; 7 8 9;5 2 1]
А = %Матрица А размерностью 4x3=12
1 3 5
2 4 6
7 8 9
5 2 1
>> reshape(A,3,2) %Попытка создать из матрицы А матрицу размерностью 3x2=6
%дает сообщение об ошибке
??? Error using -=> reshape
То RESHAPE the number of elements must not change.
%Примеры формирования различных матриц из матрицы А
>>reshape(A,3,4) %13x4=12
ans =
1 5 8 6
2 3 2 9
7 4 5 1
>> reshape(A,2,6)%2х6=12
ans =
1 7 3 8 5 9
2 5 4 2 6 1
>>reshape{A, l,12)%lxl2=12
ans =
1 2 7 5 3 4 8 2 5 6 9 1
>> reshape(A,6,2)%6x2=12
ans =
1 8
2 2
7 5
5 6
3 9
4 1
>> B=reshape(A,3,2,2) %3x2x2=12
B(:,:,l) =
1 5
2 3
7 4
B(:,:,2) =
8 6
2 9
5 1
■ cat(n, А, В, [С,...]) - объединяет матрицы А и В или все входящая матрицы А,В,С,...;
Листинг 38.
>> А=[1 2;3 4];
>> В=[5 6;7 8];
>> cat(2,А,В)%0бъединение матриц
ans =
1 2 5 6
3 4 7 8
>> [А,В] %Объединение матриц аналогично cat{2,A,B)
ans =
1 2 5 6
3 4 7 8
>> cat(l,A,B) %Объединение матриц
ans =
1 2
3 4
5 6
7 8
>> [А;В] %Объединение матриц, аналогично cat(l,A,B)
ans =
1 2
3 4
5 6
7 8
■ rot90(A [, к]) - осуществляет поворот матрицы А на 90° или величие 90-к, где к - целое число;
Листинг 39.
>> А=[1 2 3;4 5 6]
А =
1 2 3
4 5 6
>> В=rоt90(А)%Матрица В получена в результате поворота А на 90 градусов
B=
3 6
2 5
1 4
>> C=rot90(B)%Матрица С получена в результате поворота В на 90 градусов
С =
6 5 4
3 2 1
>> D=rot90(A,2) %Матрица В получена в результате поворота А на 180 градусов
D =
6 5 4
3 2 1
■ tril (А [, к]) - формирует из матрицы А нижнюю треугольную матрицу, начиная с главной или с к-й диагонали;
Листинг 40.
>> А=[1 2 3;4 5 6;7 8 9]
А =
1 2 3
4 5 6
7 8 9
>>tril(А)%Нижняя треугольная матрица,начиная с главной диагонали
ans =
1 0 0
4 5 0
7 8 9
>> tril(A,0)%To же, что и tril{A)
ans =
1 0 0
4 5 0
7 8 9
>> tril(А,1)%Нижняя треугольная матрица, » %начиная с первой диагонали (выше главной)
ans =
1 2 0
4 5 6
7 8 9
>> tril(A,-2) %Нижняя треугольная матрица, » %начиная со второй диагонали (ниже главной)
ans =
0 0 0
0 0 0
7 0 0
■triu (А [, к])- формирует из матрицы А верхнюю треугольную матрицу, начиная с главной или к-й диагонали;
Листинг 41.
>> А=[1 2 3;4 5 6;7 8 9];
>>triu(A)%Bepхняя треугольная матрица
ans =
1 2 3
0 5 6
0 0 9
>> triu(A,2) %Верхняя треугольная матрица,
>> %начиная со второй диагонали (выше главной)
ans =
0 0 3
0 0 0
0 0 0
>> triu(A,-l) )%Верхняя треугольная матрица,
>> %начиная с первой диагонали (ниже главной)
ans =
1 2 3
4 5 6
0 8 9
■ size(A) -определяет число строк и столбцов матрицы А, результатом е работы является вектор [n; m];
Листинг 42.
>> А=[2 4;1 3;7 9;5 8];
» size(A)%Paзмерность матрицы А
ans =
4 2
>> V=[2 4 6 8 1 3 5 7];
>> size(V)%Размерность вектора-строки V
ans =
1 8
>> size(V)%Размерность вектора-столбца V
ans =
8 1
>> zeros(size(A))%Формирование нулевой матрицы такого же размера, как и А
ans =
0 0
0 0
0 0
0 0
>> ones(size(V)) %Формирование единичного вектора такого же размера-как и V
ans =
11111111
■ prod (А [,к]) - формирует вектор-строку или вектор-столбец, в зависимости от значения к, каждый элемент которой является произведением элементов соответствующего столбца или строки матрицы А; если значение параметра к в конструкции отсутствует, то по умолчанию вычисляются произведения столбцов матрицы; понятно, что результатом работы функции prod (prod (A) ) будет произведение всех элементов матрицы;
Листинг 43.
>> A=[l 3;2 4];
>> prod (А) %Произведения столбцов матрицы
ans =
3 8
>> prod(A,1) %Произведения столбцов матрицы
ans =
3 8
>> prod(A,2) %Произведения строк матрицы
>> prod(prod(A)) %Произведения всех элементов матрицы
ans =
24
■ cumprod(A) -отличается от функции cumprod(V) тем, что операции, описанные для нее, применяются либо к строкам, либо ко столбцам матрицы А, в зависимости от значения параметра к; по умолчанию накапливание произведения выполняется по столбцам матрицы А;
Листинг 44.
>> А=[1 2 0 -1;-2 1 -1 3;2 0 1 1];
>> cuntprod(A,l)
ans =
1 2 0 -1
-2 2 0 -3
-4 0 0 -3
>> cumprod(A,2)
ans =
1 2 0 0
-2 -2 2 6
2 0 0 0
■ sum (A [, k]) - формирует вектор-строку или вектор-столбец (в зависимости от значения к), каждый элемент которой является суммой элементов соответствующего столбца или строки матрицы А; если значение параметра к в конструкции отсутствует, то по умолчанию вычисляются суммы столбцов матрицы; произведение всех элементов матрицы вычисляется при помощи функции sum (sum (A) );
Листинг 45.
>> А=[1 2 3;1 2 3]
А =
12 3
12 3
>> sum(A,l) %Сумма элементов матрицы по столбцам
ans =
2 4 6
>> sum(A,2) %Сумма элементов матрицы по строкам
ans =
6
6
>> sum(sum(A)) %Сумма всех элементов матрицы
ans =
12
■ cumsum(A, [k]) -отличается от функции cumsum (V) тем, что операции, описанные для нее, применяются либо к строкам, либо ко столбцам матрицы А, в зависимости от значения параметра к; по умолчанию результатом работы функции является матрица кумулятивных сумм столбцов матрицы А;
■ diff (А) -из матрицы А размерностью n*m формирует матрицу размер n-1*m, элементы которой представляют собой разность между элементами соседних строк А;
Листинг 46.
>>А=[1 2 0 -1;-2 1 -1 3;2 0 1 1];
>>diff(A)
ans =
-3 -1 -1 4
4 -1 2 -2
■ min(A) - формирует вектор-строку, каждый элемент которой является наименьшим в соответствующем столбце матрицы А, определить положение этих элементов в матрице можно, если вызвать функцию в формате [n, m] =min (А), где n - вектор минимальных элементов столбцов матрицы A, am- вектор номеров строк матрицы А, в которых находятся эти элементы; конструкция min(min(A)) позволит отыскать минимум среди всех элементов матрицы (листинг 47); вызов функции в виде min(A, [] , к) или [n, m]=min(A, [] , к) позволит направлять поиск, в частности отыскать минимальные элементы и их положение в строках матрицы А (листинг 48); и, наконец, функция min (А, В) сформирует матрицу (листинг 6. 49) из строк min (А) и min (В);
Листинг 47.
>> А=[1 2 0 -1; -2 1 -1 3;2 0 1 1]
А =
1 2 0 -1
-2 1 -1 3
2 0 1 1
>> min(А)%Минимальные элементы » %в столбцах матрицы А
ans =
-2 0 -1 -1
>> [n,m]=min(A)
n = %Минимумы в столбцах
-2 0 -1 -1
m = %номера их строк
2 3 2 1
>> min(min(А))%Наименьший элемент матрицы А
ans =
-2
Листинг 48.
>> min(A,[],1)%То же что и min(A), то есть формирует вектор-строку,
>> %каждый элемент которой равен минимальному в соответствующем >> %столбце матрицы А
ans =
-2 0 -1 -1
>> min(A,[],2)%Формирует вектор-столбец, каждый элемент которого,
>> %равен минимальному в соответствующей строке матрицы А
ans =
-1
-2
0
>> [n,m]-min(A,[],2)
n=%Минимумы по строкам
-1
-2
0
>> %и их положение в матрице, то есть номера столбцов,
>> %в которых они находятся
m =
4
1
2
>> min(A')%Дает те же значения, что и min(А,[],2),
>> %только в виде вектора-строки
ans =
-1 -2 0
Листинг 49.
>> А=[1 2;3 4];
>> В=[0 3;7 1];
>> min(A,B)
ans =
>> %Первая строка результирующей матрицы
>> %равна минимумам столбцов матрицы А, а вторая - матрицы В
0 2
3 1
■ max (А) - формирует вектор-строку, каждый элемент которой является наибольшим в соответствующем столбце матрицы А; действие функций [n, m]= max (A), max (max (A)), max (A, [], k),[n, m] = max(A, [], k), max (A, В) понятно из примеров листинга 50;
Листинг 50.
>> А=[1 2 0 -1;-2 1 -1 3;2 0 1 1];
>>mах(А)%Наибольшие элементы столбцов матрицы А
ans =
2 1 3
>> [n,m]=max(A) %n - максимумы по столбцам, m - их номера в строках
n =
2 2 1 3
m =
3 1 3 2
>> max(max(А))%Наибольший элемент матрицы А
ans =3
>> max(А,[],2) %Наибольшие элементы строк матрицы А
ans =
2
3
2
>>max(A')%To же что и mах(А,[],2), но в результате вектор-строка ans =
2 3 2
>> А=[1 2;3 4];
>> В=[0 3;7 1];
>> mах(А,В)
>>%Первая строка результирующей матрицы
>>%равна максимумам столбцов матрицы А, а вторая - матрицы В
ans =
1 3
7 4
■ mean (A, [k]) - формирует вектор-строку или вектор-столбец, в зависимости от значения к, каждый элемент которого является средним значением элементов соответствующего столбца или строки матрицы А, если значение параметра к в конструкции отсутствует, то по умолчанию вычисляются средние значения столбцов матрицы; среднее значение всех элементов матрицы вычисляет функция mean (mean (А) );
Листинг 51.
>> А=[1 2 0 -1;-2 1 -1 3;2 0 1 1];
>> mean(А)%Средние значения по столбцам
ans =
0.3333 1.0000 0 1.0000
>> mean{А,2]%Средние значения по строкам
ans =
0.5000
0.2500
1.0000
>> mean(mean(A))%Среднее всех элементов матрицы
ans =
0.5833
■ sort (A) - выдает матрицу того же размера, что и А, каждый столбец ц торой упорядочен по возрастанию;
Листинг 52.
>> А=[1 2 0 -1;-2 1 -1 3;2 0 1 1] ;
>> sort(А)%Матрица, каждый столбец которой упорядочен по возрастанию
ans =
-2 0 -1 -1
1 1 0 1
2 2 1 3
>> sort(А'}%Матрица, каждый столбец которой представляет собой » %упорядоченную по возрастанию строку исходной матрицы А ans =
-1 -2 0
0 -1 1
1 1 1.
2 3 2
>> -sort(-A) %Матрица, каждый столбец которой упорядочен по убыванию
ans =
2 2 1 3
1 1 0 1
-2 0 -1 -1
>> -sort(-A') %матрица, каждый столбец которой представляет собой
>> %упорядоченную по убыванию строку исходной матрицы А
ans =
2 3 2
1 1 1
0 -1 1
-1 -2 0
■ sqrtm(A)- относится к так называемым матричным функциям и возвращает матрицу X, для которой Х*Х=А;
Листинг 53.
>> А=[1 0 -3;0 1 2;-2 0 -1]
А =
1 0 -3
0 1 2
2 0 -1
>> X=sqrtm(A)
1.5302 -0.0000 -1.4186
-0.3535 1.0000 0.9457
0.9457 -0.0000 0.5845
>> Х*Х %Проверка Х*Х-А
ans =
1.0000 -0.0000 -3.0000
-0.0000 1.0000 2.0000
2.0000 -0.0000 -1.0000
>> C=sqrt(А}%Извлечение квадратного корня из каждого элемента матрицы А
С =
1.0000 0 0 + 1.732i
0 1.0000 1.4142
1.4142 0 0 + l.OOOOi
>> С*С
ans =
1.0000 + 2.4495i 0 -1.7321 + 1.73211
2.0000 1.0000 1.4142 + 1.41421
1.4142 + 1.41421 0 -1.0000 + 2.4495i
■ expm(A) и logm(А)-взаимообратные матричные функции, первая вычисляет матричную экспоненту еА, а вторая выполняет логарифмирование по основанию е;
Листинг 54.
>> A=[1 0 0;-1 2 0;2 1 -1];
А =
1 0 0
-1 2 0
2 1 -1
>> В=ехрm(А)
В =
2.7183 0 0
-4.6708 7.3891 0
1.1852 2.3404 0.3679
>> logm(B)
ans =
1.0000 0.0000 -0.0000
-1.0000 2.0000 -0.0000
2.0000 1.0000 -1.0000
Функции, реализующие численные алгоритмы решения задач линейной алгебры:
det (А) - вычисляет определитель квадратной матрицы А;
Листинг 55.
>> А=[3 2;4 3];
>> det(А)%Определитель матрицы
ans =
1
■ trace (A)- вычисляет след матрицы А, то есть сумму элементов главной диагонали;
Листинг 56.
>> А=[1 2 3;4 -2 1;7 0 -1]
А =
1 2 3
4 -2 1
7 0 -1
>> trace(A}%След матрицы А
ans =
-2
>> sum(diag(A))%Сумма элементов главной диагонали, то же что и trace(A)
ans =
-2
>> sum(diag(A,-1)} %Сумма элементов первой диагонали (ниже главной)
ans =
4
>> sum(diag(A,2)) %Сумма элементов второй диагонали (выше главной)
ans =
3
>> trace(rot90{A)) %Сумма элементов побочной диагонали,
>> %получена как след матрицы А, развернутой на 90 градусов
ans =
8
■ norm(A [, р]) - возвращает различные виды норм матрицы А в зависимости от р; если аргумент р=1, 2, inf, fro не задан, то вычисляется вторая норма матрицы А;
Листинг 57.
>> А=[-1 2 0 ;2 1 -1 ;2 1 3];
>> norm (А,1)
ans =%Первая норма матрицы А
5
>> norm(A,2)%Вторая норма матрицы А
ans =
3.8042
» norm(A)%To же, что и norm(A,2)
ans =
>> norm{A,inf)%Бесконечная норма матрицы А
ans =
6
>> norm(A,'fro')%Евклидова норма матрицы А
ans =
5
■ cond(A[,p]) - возвращает число обусловленности матрицы А, основанное на норме р;
Листинг 58.
>> А=[5 7 6 5; 7 10 8 7;6 8 10 9;5 7 9 10];
>> cond(A)%Число обусловленности матрицы
ans =
2.9841е+003
>> cond(A,2)%Число обусловленности для второй нормы, аналогично cond(M)
ans =
2.9841е+003
■ rcond(A) - вычисляет величину, обратную значению числа обусловленности матрицы А относительно первой нормы; если полученная величина близка к единице, то матрица хорошо обусловлена, если к приближается к нулю, то обусловлена плохо;
Листинг 59.
А=[5 7 6 5; 7 10 8 7;6 8 10 9;5 7 9 10];
>> rcond(A)
ans =
2.2282е-004
■ inv(A) - возвращает матрицу, обратную А;
Листинг 60.
>>А=[2 1 -5 1;1 -3 0 -6;0 2 -1 2;1 4 -7 6];
>> Р=inv(А}%Матрица, обратная А
Р =
1.3333 -0.6667 0.3333 -1.0000
-0.0741 0.2593 1.1481 -0.1111
0.3704 -0.2963 0.2593 -0.4444
0.2593 -0.4074 -0.5185 -0.1111
>> А*Р %Проверка А*Р-Е
ans =
1.0000 -0.0000 -0.0000 0.0000
0 1.0000 0.0000 0.0000
0.0000 -0.0000 1.0000 -0.0000
0.0000 -0.0000 -0.0000 1.0000
■ eig (A) - возвращает вектор собственных значений матрицы А; вызов функции в формате [М, D] = eig (А) даст матрицу М, столбцы которой – собственные векторы матрицы А, и диагональную матрицу D, содержащую собственные значения матрицы А; функция eig (А, В), где А и В - квадратные матрицы, выдает вектор обобщенных собственных значений;
Листинг 61.
>> А=[3 -2;-4 1]
>> eig(A)%Собственные значения матрицы А
ans =
5
-1
>> [M,D]=eig(A)
М = %Первый столбец - собственный вектор для 5,
второй - для -1
0.7071 0.4472
-0.7071 0.8944
D = %Собственные значения матрицы А
5 0
0 -1
>> %Проверка A*M=M*D
>> M*D
ans =
3.5355 -0.4472
-3.5355 -0.8944
>> А*М
ans =
3.5355 -0.4472
-3.5355 -0.8944
■ poly (A) - возвращает вектор-строку коэффициентов характеристического полинома матрицы А;
Листинг 62.
>> А=[3 -2;-4 1];
>> poly(А)
ans =
1 -4 -5
■ linsolve(A, b) - возвращает решение системы линейных уравнений А* х= b, вызов в формате linsolve(A, b, options) позволяет задать метод решения уравнения; если задать функцию в виде [х, r]=linsolve(A,b) , то она вернет х - решение системы и r - ранг матрицы А;
Листинг 63.
>> A=[1 2 3; -2 -4 -6]
A=
2 3
-2 -4 -6
>> b=[5;6]
b=
5
6
>>x=linsolve(A,b)%Решение системы Ах=b
>>%Предупреждение: ранг меньше размерности!
Warning: Rank deficient, rank = 1, tol = 4.4686e-015.
X=
0
0
-0.4667
>> A*x %Найденное решение не верно, т.к. Ах не равно b
ans=
-1.4000
2.8000
>> [x,r]=linsolve(A,b)
X= %Решение системы
0
0
-0.4667
r=%Ранг матрицы A
1
>>%
>> А=[2 -1 1,-3 2 -5;1 3 -21;
>> Ь=[0;1;4];
>> x=linsolve(A,b)%Решение линейной системы
х =
0.4643
1.6786
0.7500
>> А*х %Решение верно
ans =
0.0000
1.0000
4.0000
■ rref (А) - осуществляет приведение матрицы А к треугольной форме, используя метод исключения Гаусса;
Листинг 64.
>> A=[3 -2 1 5;6 -4 2 7;9 -6 3 12]
А=
3 -2 1 5
6 -4 2 7
9 -6 3 12
>> rref(A)
ans =
1.0000 -0.6667 0.3333 0
0 0 0 1.0000
0 0 0 0
■ chol (A) - возвращает разложение по Холецкому для положительно определенной симметрической матрицы А;
Листинг 65.
>> А=[10 1 1;2 10 1;2 2 10];
>> chol(А)%Разложение по Холецкому
ans -
3.1623 0.3162 0.3162
0 3.1464 0.2860
0 0 3.1334
>> А-[1 2;1 1];%Матрица не симметрическая
>> chol(A)
??? Error using --> chol Matrix must be positive definite.
>>%Матрица содержит отрицательные элементы
>> Z=[3,1,-1,2;г-5,1,3,-4;;2,0,1,-1;1,-5, 3,-3];
>> chol(Z)
??? Error using ==> chol
Matrix must be positive definite.
■ lu(А) – выполняет LU-разложение, функция [L, U, P] =lu(A) возвращает три матрицы: L - нижняя треугольная, U - верхняя треугольная и Р - матрица перестановок, причем P*A=L*U; функции lu (А) без параметров возвращает одну матрицу, которая, в свою очередь, является комбинацией матриц L и U;
Листинг 66.
>> А= [З -2 1; 5 6 -4; 2 7 9];
>> [L U, P]=lu(A)
>> %Нижняя треугольная матрица
L =
1.0000 0 0
0.6000 1.0000 0
0.4000 -0.8214 1.0000
>> %Верхняя треугольная матрица
U =
5.0000 6.0000 -4.0000
0 -5.6000 3.4000
0 0 13.3929
>> %Матрица перестановок
Р =
1 0
0 0 0 0 1
>> %Проверка: L*U-P*A
>> L*U ans -
5.0000 6.0000 -4.0000
3.0000 -2.0000 1.0000
2.0000 7.0000 9.0000
>> Р*А
ans =
5 6 -4
3 -2 1
2 7 9
>> %Комбинация из матриц L и U
>> lu(A)
ans =
5.0000 6.0000 -4.0000
0.6000 -5.6000 3.4000
0.4000 -0.8214 13.3929
>> %Выделение матрицы L
>> triu(lu(A))
ans =
5.0000 б.0000 -4.0000
0 -5.6000 3.4000
0 0 13.3929
» %Формирование матрицы U
>> U=tril(lu(A),-l)+eye(3)
U =
1.0000 0 0
0.6000 1.0000 0
0.4000 -0.8214 1.0000
■ qr (А)-выполняет QR-разложение, команда [Q, R, P]=qr(A) возвращает три матрицы: ортогональную Q, верхнюю треугольную R и матрицу перестановок Р, причем A*P=Q*R;
Листинг 67
>> А=[3 -2 1;5 6 -4; 2 7 9];
>> [Q, R,P]=qr(A)
Q =
-0.1010 0.2745 -0.9563
0.4041 -0.8670 -0.2915
-0.9091 -0.4158 -0.0233
R =
-9.8995 -3.7376 -0.1010
0 -8.6620 -4.3434
0 0 -4.3732
Р =
0 0 1
0 1 0
1 0 0
>> A*P-Q*R
ans =
1.0е-014 *
0.0999 0.2220 0.0888
-0.0444 -0.0888 -0.1776
0 0 -0.0444
■ svd (А) - возвращает вектор сингулярных чисел матрицы, при использовании в формате [U, S, V] = svd(A) выполняет сингулярное разложение матрицы А; выдает три матрицы: U - сформирована из ортонормирован-ных собственных векторов, отвечающих наибольшим собственным значениям матрицы А * АT, V - состоит из ортонормированных собственных векторов матрицы А * АT, S - диагональная матрица из сингулярных чисел (неотрицательных значений квадратных корней из собственных значений матрицы А * АT), матрицы удовлетворяют условию A= U* S*VT.
Листинг 68.
>> А=[3 -2 1;5 6 -4; 2 7 9];
>> svd(А)
ans =
11.7553
8.5347
3.7377
>> U,S,V]=svd(A)
U =
0.0058 0.0207 0.9998
0.2529 -0.9673 0.0186
0.9675 0.2527 -0.0108
S =
11.7553 0 0
0 8.5347 0
0 0 3.7377
V =
0.2736 -0.5002 0.8215
0.7042 -0.4776 -0.5253
0.6551 0.7223 0.2215
Описанные здесь векторные и матричные функции MATLAB дозволяют решать широкий круг задач линейной алгебры.