1 семестр_1 / ЛА / Модуль 4 / МП-12_Николаев_Олег_lab1_m4
.docxОтчет к упражнению 1
Проверить на примерах 10 свойств операций над матрицами
1) Сложение и вычитание допускается только для матриц одинакового размера.
A=[1 2 3;4 5 6;3 7 8];
B=[8 5 3;4 7 9;9 3 1];
C=A+B
C =
9 7 6
8 12 15
12 10 9
C=A-B
C =
-7 -3 0
0 -2 -3
-6 4 7
B=[8 5 3;4 7 9];
C=A+B
??? Error using ==> plus
Matrix dimensions must agree.
Error in ==> Untitled at 7
C=A+B
2) Существует нулевая матрица
A=[1 2 3;4 5 6;3 7 8];
O=zeros(size(A));
A+O
ans =
1 2 3
4 5 6
3 7 8
3) Возводить в степень можно только квадратные матрицы.
A=[1 2 3;4 5 6;3 7 8];
B=A^3
B =
267 474 564
612 1089 1296
788 1400 1667
4) Ассоциативность сложения:
A=[1 2 3;4 5 6;3 7 8];
B=[8 5 3;4 7 9;9 3 1];
C=[3 4 5;2 9 8;1 3 5];
A+(B+C)
ans =
12 11 11
10 21 23
13 13 14
(A+B)+C
ans =
12 11 11
10 21 23
13 13 14
5) Коммутативность сложения:
A=[1 2 3;4 5 6;3 7 8];
B=[8 5 3;4 7 9;9 3 1];
A+B
ans =
9 7 6
8 12 15
12 10 9
B+A
ans =
9 7 6
8 12 15
12 10 9
6) Ассоциативность умножения:
A=[1 2 3;4 5 6;3 7 8];
B=[8 5 3;4 7 9;9 3 1];
C=[3 4 5;2 9 8;1 3 5];
(A*B)*C
ans =
209 496 559
527 1270 1429
628 1528 1724
A*(B*C)
ans =
209 496 559
527 1270 1429
628 1528 1724
7) Вообще говоря, умножение матриц некоммутативно:
A=[1 2 3;4 5 6;3 7 8];
B=[8 5 3;4 7 9;9 3 1];
A*B
ans =
43 28 24
106 73 63
124 88 80
B*A
ans =
37 62 78
59 106 126
24 40 53
8) Дистрибутивность умножения относительно сложения:
A=[1 2 3;4 5 6;3 7 8];
B=[8 5 3;4 7 9;9 3 1];
C=[3 4 5;2 9 8;1 3 5];
A*(B+C)
ans =
53 59 60
134 152 153
155 187 191
A*B+A*C
ans =
53 59 60
134 152 153
155 187 191
(B+C)*A
ans =
71 123 151
121 211 250
52 92 114
B*A+C*A
ans =
71 123 151
121 211 250
52 92 114
9) Свойства операции транспонирования матриц:
A=[1 2 3;4 5 6;3 7 8];
B=[8 5 3;4 7 9;9 3 1];
(A')'
ans =
1 2 3
4 5 6
3 7 8
(A*B).'
ans =
43 106 124
28 73 88
24 63 80
B.'*A.'
ans =
43 106 124
28 73 88
24 63 80
(inv(A))'
ans =
-0.2222 -1.5556 1.4444
0.5556 -0.1111 -0.1111
-0.3333 0.6667 -0.3333
inv(A')
ans =
-0.2222 -1.5556 1.4444
0.5556 -0.1111 -0.1111
-0.3333 0.6667 -0.3333
(A+B)'
ans =
9 8 12
7 12 10
6 15 9
A'+B'
ans =
9 8 12
7 12 10
6 15 9
det(A)
ans =
9
det(A')
ans =
9
10) Для квадратных матриц существует единичная матрица
E=eye(size(A));
A*E
ans =
1 2 3
4 5 6
3 7 8
E*A
ans =
1 2 3
4 5 6
3 7 8
Отчет к упражнению 2
Написать функцию для вычисления определителя матрицы до 3-го порядка через подстановки
Напишем вспомогательные функции:
%функция находит все подстановки - перестановки чисел от 1 до N
function v=comb(k,n,m)
global v;
if(k==n)
v=[v;m];
else
for i=k+1:1:n
c=m(k+1);m(k+1)=m(i);m(i)=c;
comb(k+1,n,m);
end
end
end
%функция находит модуль подстановки
function s=absn(m,n)
s=0;
for i=2:1:n
for j=1:1:i-1
if(m(i)<m(j))
s=s+1;
end
end
end
if(mod(s,2)==0)
s=1;
else
s=-1;
end
Сама функция, рассчитывающая определитель матрицы:
%функция находит определитель матрицы при помощи подстановок
function s=det1(a)
if(max(size(a))~=min(size(a)))
s='Matrix must be square';
return
end
n=length(a);
for i=1:1:n
m(i)=i;
end
v=comb(0,n,m);
l=length(v);
s=sym('0');
for i=1:1:l
p=1;
for j=1:1:n
p=p*a(v(i,j),j);
end
s=s+absn(v(i,:),n)*p;
end
end
Проверим функцию:
syms a11 a12 a13 a21 a22 a23 a31 a32 a33;
a=[a11 a12 a13;a21 a22 a23;a31 a32 a33];
det1(a)
ans =
a11*a22*a33-a11*a32*a23-a21*a12*a33+a21*a32*a13+a31*a12*a23-a31*a22*a13
a=[a11 a12;a21 a22];
det1(a)
ans =
a11*a22-a21*a12
a=[a11];
det1(a)
ans =
a11
Отчет к упражнению 3
Проверить на примерах 9 свойств определителя
1) При добавлении к любой строке (столбцу) линейной комбинации других строк (столбцов) определитель не изменится.
a=[1 2 3;2 8 4;3 5 9];
det(a)
ans =
-2
a(1,:)=a(1,:)+a(3,:)
a =
4 7 12
2 8 4
3 5 9
det(a)
ans =
-2
2) Если две строки (столбца) матрицы совпадают, то её определитель равен нулю.
a=[1 2 3;2 8 4;3 5 9];
a(1,:)=a(3,:)
a =
3 5 9
2 8 4
3 5 9
det(a)
ans =
0
3) Если две (или несколько) строки (столбца) матрицы линейно зависимы, то её определитель равен нулю.
a=[1 2 3;2 8 4;3 5 9];
a(1,:)=-4*a(3,:)
a =
-12 -20 -36
2 8 4
3 5 9
det(a)
ans =
0
4) Если переставить две строки (столбца) матрицы, то её определитель умножается на (-1).
a=[1 2 3;2 8 4;3 5 9];
det(a)
ans =
-2
a=[3 5 9;2 8 4;1 2 3];
det(a)
ans =
2
5) Общий множитель элементов какого-либо ряда определителя можно вынести за знак определителя.
a=[1 2 3;2 8 4;3 5 9];
det(a)
ans =
-2
a=[1 2 3;1 4 2;3 5 9];
2*det(a)
ans =
-2
6) Если хотя бы одна строка (столбец) матрицы нулевая, то определитель равен нулю.
a=[1 2 3;0 0 0;3 5 9];
det(a)
ans =
0
7) Сумма произведений всех элементов любой строки на их алгебраические дополнения равна определителю.
function d=dop(i,j,a)
b=a;
b(i,:)=[];b(:,j)=[];
d=(-1)^(i+j)*det(b);
end
a=[1 2 3;2 8 4;3 5 9];
a(3,1)*dop(3,1,a)+a(3,2)*dop(3,2,a)+a(3,3)*dop(3,3,a)
ans =
-2
det(a)
ans =
-2
8) Сумма произведений всех элементов любого ряда на алгебраические дополнения соответствующих элементов параллельного ряда равна нулю.
a=[1 2 3;2 8 4;3 5 9];
a(1,1)*dop(3,1,a)+a(1,2)*dop(3,2,a)+a(1,3)*dop(3,3,a)
ans =
0
9) Определитель произведения квадратных матриц одинакового порядка равен произведению их определителей
a=[1 2 3;2 8 4;3 5 9];
b=[3 7 6;8 3 9;1 3 1];
det(a*b)
ans =
-122
det(a)*det(b)
ans =
-122
Отчет к упражнению 4
Реализовать рекурсивное вычисление факториала
function n=fact(k)
if k==0
n=1;
else
n=k*fact(k-1);
end
Отчет к упражнению 5
Реализовать рекурсивное вычисление определителя матрицы произвольного порядка через разложение по строке (столбцу)
function d=det2(a,i)
if(max(size(a))~=min(size(a)))
d='Matrix must be square';
return
end
n=length(a);
if(n==1)
d=a(1);
return
else
d=0;
for j=1:1:n
b=a;
b(i,:)=[];b(:,j)=[];
m=det2(b,1);
d=d+(-1)^(i+j)*a(i,j)*m;
end
return
end
end
a=[1 2 3;2 8 4;3 5 9];
det2(a,2)
ans =
-2