matlab如何从一个矩阵中找到可逆的分块矩阵

已知一个20X16的常数矩阵,利用matlab如何从中找到一个可逆的16x16矩阵?... 已知一个20X16的常数矩阵,利用matlab如何从中找到一个可逆的16x16矩阵? 展开
 我来答
dukinkin
2013-12-16 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:936万
展开全部
%假设你原有的矩阵是存在变量 in 中

a=nchoosek(1:20,16);%产生20各种取16个的组合,会有4845种,返回一个4845x16的矩阵
num=size(a,1);%num=4845
choose=true(num,1);
for ii=1:num
temp=in(a(ii,:),:);%取第ii行的组合,形成temp方阵
d=det(temp);%计算行列式
if d==0 %如果计入计算截断误差,可以用条件abs(d)<eps判断
choose(ii)=false; %标记行列式为0的组合
end
end
chooseout=a(choose,:);%chooseout是nx16的矩阵,n为符合条件的矩阵个数
%可用out=in(chooseout(n,:),:),获得第n个符合条件的矩阵
追问
大神啊,谢谢了
eflen
2013-12-16 · TA获得超过560个赞
知道小有建树答主
回答量:340
采纳率:100%
帮助的人:340万
展开全部
设m为20X16的矩阵。若存在mp1*m=E,则mp1必为16x20的矩阵。若存在m*mp2=E,则mp2必为16x20的矩阵。其中E为单位阵。

matlab实现如下:
a=magic(5);
a(:,4:5)=[]%删除最后2列得到5x3的矩阵
ap=pinv(b)%得到一个3x5的逆矩阵
ap*a%使得ap*a=E

b=magic(5);
b(4:5,:)=[]%删除最后2行得到3x5的矩阵
bpt=pinv(b');
bp=bpt' %得到一个5x3的逆矩阵
b*bp %使得b*bp=E

或者补全矩阵为方阵,补全的向量需要与构成矩阵的向量线性无关
a=magic(5);
a(:,4:5)=[]%删除最后2列得到5x3的矩阵
as=[ a [0 0 0 1 0]' [0 0 0 0 1]'];%补全为方阵
asp=inv(as);%得到一个5x5的逆矩阵
asp*a%使得asp*a的结果为上面为3x3单位阵,下面为2x3零矩阵的5x3矩阵
追问
这个你可能没看懂我的意思。。。
已知一个20x16的矩阵,从它的20行中找16行,列不改变,得到16X16的方阵,只要它可逆就行,关键问题是我随便找了几次,得到的矩阵都不可逆。。
顺便说一句它的9行与15行全为0,所以选择的时候这两行不被考虑,因此是在18行中找16行。。
追答
你可以看看这个矩阵的秩,要是秩小于16,怎么找也不可能找到。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
注水学术小卡拉米
2013-12-16 · 专注学术20年的小卡拉米
注水学术小卡拉米
采纳数:45 获赞数:137

向TA提问 私信TA
展开全部
一步步计算16*16行列式的值就好了,如果符合可逆,就输出啊
追问
从20X16的矩阵中找到的16x16矩阵,总共有4000多个,这个一个一个算吗?可以编程算吗? 另外我的20X16矩阵中有两行全为0,也就是从剩下18行选16个,这个也有150多个。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式