匿名用户
3级
2013-04-05 回答
调出实验中的矩阵A、B
1.作出A的行向量组:a1、a2、a3、a4、a5、a6;
2.作出B的列向量组:b1、b2、b3、b4、b5、b6;
3.由A的一、三、五行,二、三、四列交叉点上的元素作出子矩阵A3;
4.做一个10阶矩阵A4,其分块形式为A4 ;
5.由索引向量L产生取A的第2.、4、5行所成的子矩阵A5;
6.将A 对应的行向量组正交规范为正交向量组A6,并验证所得的结果;
7.求a1与a2的内积A7;
8.完成以下初等变换:将A 的一、四行互换,再将其第三列乘以,6再将其第一行的10倍加至第五行;
9.求B的列向量组的一个极大线性无关向量组A9,并将其余向量用极大线性无关向量组线性表示
给一个例子:
clc; clear all;
%% 矩阵预处理
A = randint(4, 5, [10 100]);
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矩阵: \n')
disp(A);
fprintf('基向量为: \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其中,ki为任意实数 \n');