Задание 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