Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1 семестр / Модуль 4(НАДО СДАТЬ)

.docx
Скачиваний:
49
Добавлен:
05.06.2015
Размер:
31.15 Кб
Скачать

Из файла Labmatrix.

Задание:

1)Проверить на примерах 10 свойств операций над матрицами

1) Сложение и вычитание допускается только для матриц одинакового размера.

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

>> B=[1 2 3;4 5 6;7 8 9];

>> C=A+B

??? Error using ==> plus

Matrix dimensions must agree.

>> C=A-B

??? Error using ==> minus

Matrix dimensions must agree.

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

>> B=[7 8 9;10 11 12];

>> C=A-B

C =

-6 -6 -6

-6 -6 -6

>> C=A+B

C =

8 10 12

14 16 18

2) Существует нулевая матрица 0 такая, что её прибавление к другой матрице A не изменяет , то есть A + 0 =A

Все элементы нулевой матрицы равны нулю.

>> O=[0 0 0;0 0 0]

O =

0 0 0

0 0 0

0 0 0

>> A+O

ans =

1 2 3

4 5 6

3) Возводить в степень можно только квадратные матрицы.

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

>> C=A^2

C =

30 36 42

66 81 96

102 126 150

>> d=[3 2 1;6 5 4];

>> d^2

??? Error using ==> mpower

Inputs must be a scalar and a square matrix.

To compute elementwise POWER, use POWER (.^) instead.

4) Ассоциативность сложения: A+(B+C)= (A+B)+C.

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

>>B=[7 8 9;10 11 12];

>> C=[13 14 15;16 17 18];

>> (A+B)+C

ans =

21 24 27

30 33 36

>> A+(B+C)

ans =

21 24 27

30 33 36

5) Коммутативность сложения: A+B=B+A.

>> A+B

ans =

8 10 12

14 16 18

>> B+A

ans =

8 10 12

14 16 18

6) Ассоциативность умножения: A*(B*C)=(A*B)*C .

>> A=[1 2 3;1 2 3;1 2 3];

>> B=[4 5 6;4 5 6;4 5 6];

>> C=[7 8 9;7 8 9;7 8 9];

>> A*(B*C)

ans =

630 720 810

630 720 810

630 720 810

>> (A*B)*C

ans =

630 720 810

630 720 810

630 720 810

7) Умножение матриц некоммутативно: A*BB*A.

>> A*B

ans =

24 30 36

24 30 36

24 30 36

>> B*A

ans =

15 30 45

15 30 45

15 30 45

8) Дистрибутивность умножения относительно сложения:

A*(B+C)=A*B+A*C;

(B+C)*A=B*A+C*A;

>> A*(B+C)

ans =

66 78 90

66 78 90

66 78 90

>> A*B+A*C

ans =

66 78 90

66 78 90

66 78 90

>> (B+C)*A

ans =

39 78 117

39 78 117

39 78 117

>> B*A+C*A

ans =

39 78 117

39 78 117

39 78 117

9) Свойства операции транспонирования матриц:

1.(A)=A;

>> transpose(A)

ans =

1 1 1

2 2 2

3 3 3

>> transpose(ans)

ans =

1 2 3

1 2 3

1 2 3

2.(AB)=BA;

>> transpose(A*B)

ans =

24 24 24

30 30 30

36 36 36

>> transpose(B)*transpose(A)

ans =

24 24 24

30 30 30

36 36 36

3.(A-1)=(A)-1 , если обратная матрица A-1 существует;

>> format rational

>> A=[4 2;1 2];

>> inv(a)

ans =

1/3 -1/3

-1/6 2/3

>> transpose(ans)

ans =

1/3 -1/6

-1/3 2/3

>> A=[4 2;1 2];

>> inv(transpose(A))

ans =

1/3 -1/6

-1/3 2/3

4.(A+B)=A+B;

>> A=[4 2;1 2];

>>B=[3 1;4 2] ;

>> transpose(A+B)

ans =

7 5

3 4

>> transpose(A)+transpose(B)

ans =

7 5

3 4

5.detA = detA.

>> det(A)

ans = 6

>> transpose(A)

ans =

4 1

2 2

>> det(ans)

ans =6

10) Для квадратных матриц существует единичная матрица (аналог единицы для операции умножения чисел) такая, что умножение любой матрицы на неё не влияет на результат, а именно:

A*E=E*A =A.

>> A

a =

4 2

1 2

>> E=eye(2)

E =

1 0

0 1

>> A*E

ans =

4 2

1 2

>> E*A

ans =

4 2

1 2

2.Написать функцию для вычисления определителя матрицы до 3-го порядка через подстановки.

Скрипт.

{function f=fun(a,n)

k=0;b=0;

for i = 1:1:n-1

for j = 1:1:n-1

if a(i,j)>a(i,j+1)

t=a(i,j);

a(i,j)=a(i,j-1);

a(i,j-1)=t;

k=k+1;

end

if i==j

b=b+a(i,j);

end

end

end

d=(-1)^k*b}

function d=fun(a)

n= size(a);

if n==1

d=a(1,1);

elseif n==2

d=a(1,1)*a(2,2)-a(2,1)*a(1,2);

elseif n==3

d=a(1,1)*a(2,2)*a(3,3)+a(1,2)*a(2,3)*a(3,1)+...

a(2,1)*a(1,3)*a(3,2)-a(1,3)*a(2,2)*a(3,1)-...

a(1,1)*a(2,3)*a(3,2)-a(2,1)*a(1,2)*a(3,3);

else

disp('Введите матрицу размерности не меньше 3')

end

3. Проверить на примерах 9 свойств определителя.

Свойства определителя

1) При добавлении к любой строке (столбцу) линейной комбинации других строк

(столбцов) определитель не изменится.

2) Если две строки (столбца) матрицы совпадают, то её определитель равен нулю.

a=[1,1,1;1,1,1;2,3,2]

a =

1 1 1

1 1 1

2 3 2

>> det(a)

ans =

0

3) Если две (или несколько) строки (столбца) матрицы линейно зависимы, то её

определитель равен нулю.

4) Если переставить две строки (столбца) матрицы, то её определитель умножается на

(-1).

>> a=[1,1,1;2,3,2;1,2,3]

a =

1 1 1

2 3 2

1 2 3

>> det(a)

ans =

2

>> a=[1,1,1;1,2,3;2,3,2]

a =

1 1 1

1 2 3

2 3 2

>> det(a)

ans =

-2

5) Общий множитель элементов какого-либо ряда определителя можно вынести за

знак определителя.

>> a=[2 4 6;4 6 8;6 8 6]

a =

2 4 6

4 6 8

6 8 6

>> isequal(2*det([1,4,6;2,6,8;3,8,6]),det(a))

ans =

1

6) Если хотя бы одна строка (столбец) матрицы нулевая, то определитель равен нулю.

>> a=[0,0,0;1,1,1;2,2,2]

a =

0 0 0

1 1 1

2 2 2

>> det(a)

ans =

0

7) Сумма произведений всех элементов любой строки на их алгебраические дополнения

равна определителю.

8) Сумма произведений всех элементов любого ряда на алгебраические дополнения

соответствующих элементов параллельного ряда равна нулю.

9) Определитель произведения квадратных матриц одинакового порядка равен

произведению их определителей

4. Реализовать рекурсивное вычисление факториала.

function n=fact(k)

if k==0

n=1;

else

n=k*fact(k-1);

end

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

function f=opr(A)

n=length(A);

if n==2

f=A(1,1)*A(2,2)-A(1,2)*A(2,1);

else

for j=1:1:n

if j==1

f=A(1,j)*opr(A(j+1:n,j+1:n));

elseif j==n

f=A(1,j)*opr(A(j-1:n,j-1:n));

else

f=A(1,j)*opr([A(j+1:n,j+1:n);A(j-1:n,j-1:n)]);

end

end

end

Из файла Labsystems.

Задание:

1) Написать функцию реализующую умножение двух матриц по определению

Заголовок функции такого вида:

function C = matrix_multiply(A,B)

function C=matrix_multiply(A,B)

n=size(A);

C=zeros(size(A));

for i= 1:1:n

for j=1:1:n

C(i,j)=A(i,j)*B(i,j);

end

end

2) Написать функцию реализующую метод Крамера для системы произвольной размерности

Заголовок функции такого вида:

function X = CramersMethod(A,B)

function X=CramersMethod(A,B)

n=size(A);

dx=zeros(size(A));

X=zeros(size(B));

d=det(A);

for j = 1:1:n

for i=1:1:n

if j==1

c=[B A(:,j+1)];

elseif j~=1

c=[A(:,1) B];

end

dx(j)=det(c);

end

X(j)=X(j)+dx(j)/d;

end

3) Написать функцию реализующую метод Гаусса для системы произвольной размерности

Заголовок функции такого вида:

function X = GaussMethod(A,B)

function x=Gauss(A,B)

n = size(A);

C = [A(:,1:n(1,2)) B(:,1)];

m = size(C);

for j = 1:n(1,2)-1

for k = j+1:n(1,1)

C(k,:) = C(k,:)-C(j,:).*C(k,j)./C(j,j);

end;

end;

for t = m(1,2)-1:-1:2

for l = t-1:-1:1

C(l,:) = C(l,:)-C(t,:).*C(l,t)./C(t,t);

end;

end;

for i = 1:n(1,1)

k = 0;

for j = 1:m(1,2)-1

k = k+1;

end;

if k == m(1,2) && C(i,j+1)~=0

disp('Решений нет');

end;

k=0;

for j = 1:m(1,2)

if C(i,j) == 0

k = k+1;

end;

if k == m(1,2)

disp('Бесконечно много решений');

end;

end;

end;

for i = 1:n(1,1)

for j = i:i

x(j) = (C(i,m(1,2)))/C(i,j);

end;

end;

end

4) Написать функцию реализующую вычисление обратной матрицы, используя уже написанную

функцию из пункта 3)

Заголовок функции такого вида:

function X = GaussInverse(A,B)

function C=GaussInverse(A,B)

n=size(A,2);

d=Gauss(A,B);

d=transpose(d);

C=zeros(size(A));

for i= 1:n

C(i,:)=A(i,:)*d(i,1);

end