matlab 求矩阵秩,用MATLAB编程求矩阵的秩

for i=n:-1:1

我明白了,就是极大无关组,我的这个程序把所有的基都写出来了,你只要选一个就可以,还对两种矩形的矩阵(例如2×3,3×2都测试了);如果谁会优化这个程序的会更好!

代码如下:ji.m

% A=[17 24 1 8 15

% 23 5 7 14 16

% 4 6 13 20 22

% 8 12 26 40 44]

A=[1, 0, 1, 2; 2, 0, 2, 4; 1, -1, 1, 1];

% A=[2 4 6 8;3 6 9 12]

%

A=[1 2 1;

% 0 0 -1;

% 1 2 1;

% 2 4 1];% A的三组测试数据

r=rank(A);

s1=size(A);

c=1:min(size(A));

combos=combntns(c,r);

s2=size(combos);

if s1(1)<=s1(2)

for

i=1:s2(1)

B(:,:,i)=A(combos(i,1:r),1:s1(2));

if rank(B(:,:,i))==r

C=B(:,:,i)

end

end

else

for

i=1:s2(1)

B(:,:,i)=A(1:s1(1),combos(i,1:r));

if rank(B(:,:,i))==r

C=B(:,:,i)

end

end

end

复制内容到剪贴板代码:

clc; clear all;

%% 矩阵预处理

A=[1, 0, 1, 2; 2, 0, 2, 4; 1, -1, 1, 1];

r = rank(A);

s1 = size(A);

c = 1 : min(size(A));

combos = combntns(c,r);

s2 = size(combos);

%% 求出极大线性无关组

if s1(1) <= s1(2)

for i = 1

: s2(1)

B(:, :, i) = A(combos(i, 1:r), 1:s1(2));

if rank(B(:, :, i)) == r

C = B(:, :, i);

end

end

else

for i = 1

: s2(1)

B(:, :, i) = A(1 : s1(1), combos(i, 1:r));

if rank(B(:, :, i)) == r

C = B(:, :, i);

end

end

end

%% 正规化

for i = 1 : size(C, 1)

a1 =

max(C(i, :));

for j = 1

: size(C, 2)

a1 = gcd(a1, C(i, j));

end

C(i, :) =

C(i, :) / a1;

end

%% 打印

fprintf('\n The Basis Vector of Martix : \n')

disp(A);

fprintf(' is : \n\n');

for i = 1 : size(C, 1)

if i

> 1 & i <= size(C,

1)

fprintf(' + \n');

end

str =

sprintf('k%d*[', i);

fprintf(str);

for j = 1

: size(C, 2)-1

fprintf('%.3f, ', C(i, j));

end

fprintf('%.3f ]', C(i, j+1));

end

fprintf('\n\n ki belong to R \n');

你可能感兴趣的:(matlab,求矩阵秩)