大家好,又见面了,我是你们的朋友全栈君。
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’);
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/139149.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...