Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 семестр / Линейная Алгебра / 23_Кучеренко_модуль 4.docx
Скачиваний:
33
Добавлен:
05.06.2015
Размер:
140.16 Кб
Скачать

Задание 4.

------------------------Рекурсивное вычисление факториала--------------------

function [y]=fact(n)

if n==0

y=1;

else if n>=1

k=n*fact(n-1);

y=k;

end

-------------------------------------------------------------------------------------------------------------

Проверка:

>> y=fact(0)

y =

1

>> y=fact(1)

y =

1

>> y=fact(2)

y =

2

>> y=fact(3)

y =

6

>> y=fact(4)

y =

24

>> y=fact(12)

y =

479001600

>> v=factorial(12)

v =

479001600

>> isequal(v,y)

ans =

1

Задание 5.

function [y]=determinant(A,x)

r=size(A);

p=r(1);

u=r(2);

if (p==1 && u==1)

m=A;

else if p==u

m=0;

for k=1:1:u

m=m+((A(x,k))*((-1)^(x+k))*determinant(minorr(A,x,k),x));

end

else

disp 'Определитель можно посчитаь только для квадратных матриц'

end

y=m;

end

function [M]=minorr(A,x,k)

A(x,:)=[];

A(:,k)=[];

M=A;

end

LabSystem

Задание 1

function C = matrix_multiply(A,B)

s1= size(A);

s2= size(B);

if s1(2)==s2(1)

for k=1:1:s2(2)

for i=1:1:s1(1)

s=0;

for j=1:1:s1(2)

s=s+A(i,j)*B(j,k);

end;

C(i,k)=s;

end;

end;

else disp 'Матрицы не подходящие';

end

Пример:

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

B=[5 2;3 1;9 9];

matrix_multiply(A,B)

ans =

98 76

68 53

156 104

38 31

Задание 2

function X = CramersMethod(A,B)

s=size(A);

if s(1)==s(2)

d=det(A);

if d~=0

for k=1:1:s(2)

C=A;

C(:,k)=B(:);

dx(k)=det(C);

end

X=dx./d;

else disp 'Нет решений';

end

else disp 'Матрица не квадратная';

end

Пример:

>> A=[1 5 3;8 3 -1;5 0 1];

>> B=[7 14 15];

>> CramersMethod(A,B)

ans =

2.4206 -0.8224 2.8972

Задание 3

function X = GaussMethod(A,B)

s=size(A);

if s(1)==s(2)

C(:,:)=A(:,:);

C(:,s(2)+1)=B(:);

if rank(A)<=rank(C)

for g=1:1:s(2)-1

for k=g+1:1:s(1)

C(k,:)= C(k,:)+ C(g,:)*(-C(k,g)/C(g,g));

end;

end;

for g=s(1):-1:1

S=0;

for k=g+1:1:s(2)

S=S+C(g,k)*X(k);

end;

X(g)=(C(g,s(2)+1)-S)/C(g,g);

end;

else disp 'Система несовместна';

end;

else disp 'Матрица должна быть квадратной';

end;

Пример с той же системой из задания 2.

A=[1 1 -2;2 3 -7;5 2 1]; %Номер 2.192 из учебника Ефимова

B=[6 16 16];

GaussMethod(A,B)

ans =

3 1 -1

Задание 4

function X = GaussInverse(A)

s=size(A);

for i=1:1:s(1)

D(i)=0;

end;

for k=1:1:s(1)

B=D;

B(k)=1;

E = GaussMethod(A,B);

X(:,k)=E(:);

end;

end

Пример :

A=[1 1 -2;2 3 -7;5 2 1];

A^-1%Считаем сначала средствами Матлаба

ans =

8.5000 -2.5000 -0.5000

-18.5000 5.5000 1.5000

-5.5000 1.5000 0.5000

GaussInverse (A) %Через М-файл

ans =

8.5000 -2.5000 -0.5000

-18.5000 5.5000 1.5000

-5.5000 1.5000 0.5000