查看: 324|回复: 8|关注: 0

[已解决] 矩阵变换

[复制链接]

新手

9 麦片

财富积分


050


2

主题

7

帖子

0

最佳答案
本帖最后由 小拉哩 于 2020-5-7 21:27 编辑

已知A矩阵,怎么用一个语句把它变换成E,F这种形式
p62.PNG
p61.PNG
回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

中级

681 麦片

财富积分


5001500


26

主题

362

帖子

78

最佳答案
  • 关注者: 11
发表于 2020-5-8 08:54:52 | 显示全部楼层
clear;
A=[1,2,3;4,5,6;7,8,9];
AE=A';% A矩阵的转置
AF=rot90(A,2)% A矩阵旋转180度
E=zeros(5);
F=E
for i=1:size(A,1)
    for j=1:size(A,2)
        E(2*i-1,2*j-1)=AE((j-1)*size(A,2)+i);
        F(2*i-1,2*j-1)=AF((j-1)*size(A,2)+i);
    end
end
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

中级

681 麦片

财富积分


5001500


26

主题

362

帖子

78

最佳答案
  • 关注者: 11
发表于 2020-5-8 09:09:52 | 显示全部楼层
重新改写了下,有两种方案,第二种方案是根据行列交换求得,代码如下,请参考。
clear;
A=[1,2,3;4,5,6;7,8,9];
AE=A';% A矩阵的转置
AF=rot90(A,2)% A矩阵旋转180度

%% 方案一
E=zeros(5);
F=E
for i=1:size(A,1)
    for j=1:size(A,2)
        E(2*i-1,2*j-1)=AE((j-1)*size(A,2)+i);
        F(2*i-1,2*j-1)=AF((j-1)*size(A,2)+i);
    end
end

%% 方案二
E1=zeros(5);
F1=E1;
E1(1:3,1:3)=AE;
F1(1:3,1:3)=AF;
% 行交换
E1([3,5,2,4],:)=E1([2,3,4,5],:);
F1([3,5,2,4],:)=F1([2,3,4,5],:);
%列交换
E1(:,[3,5,2,4])=E1(:,[2,3,4,5]);
F1(:,[3,5,2,4])=F1(:,[2,3,4,5]);

%验证
E-E1
F-F1
回复此楼 已获打赏: 0 积分

举报

新手

9 麦片

财富积分


050


2

主题

7

帖子

0

最佳答案
 楼主| 发表于 2020-5-8 09:43:37 | 显示全部楼层
15631202458 发表于 2020-5-8 08:54
clear;
A=[1,2,3;4,5,6;7,8,9];
AE=A';% A矩阵的转置

不能用循环写:'(这是让我很头疼的地方
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

中级

681 麦片

财富积分


5001500


26

主题

362

帖子

78

最佳答案
  • 关注者: 11
发表于 2020-5-8 09:45:19 | 显示全部楼层
小拉哩 发表于 2020-5-8 09:43
不能用循环写这是让我很头疼的地方

方案二,没有用循环啊,就是行交换列交换啊
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

中级

681 麦片

财富积分


5001500


26

主题

362

帖子

78

最佳答案
  • 关注者: 11
发表于 2020-5-8 09:55:32 | 显示全部楼层 |此回复为最佳答案
小拉哩 发表于 2020-5-8 09:43
不能用循环写这是让我很头疼的地方

我又做了个方案三,是用矩阵乘法算的,你可以看下,原理类似行列互换,就矩阵的行列交换原理
clear;
A=[1,2,3;4,5,6;7,8,9];
AE=A';% A矩阵的转置
AF=rot90(A,2)% A矩阵旋转180度

%% 方案一
E=zeros(5);
F=E
for i=1:size(A,1)
    for j=1:size(A,2)
        E(2*i-1,2*j-1)=AE((j-1)*size(A,2)+i);
        F(2*i-1,2*j-1)=AF((j-1)*size(A,2)+i);
    end
end

%% 方案二
E1=zeros(5);
F1=E1;
E1(1:3,1:3)=AE;
F1(1:3,1:3)=AF;
% 行交换
E1([3,5,2,4],:)=E1([2,3,4,5],:);
F1([3,5,2,4],:)=F1([2,3,4,5],:);
%列交换
E1(:,[3,5,2,4])=E1(:,[2,3,4,5]);
F1(:,[3,5,2,4])=F1(:,[2,3,4,5]);

%% 方案三 矩阵相乘 [5,3]*[3,3]*[3,5],其实原理就是行列互换
temp1=[1,0,0;
    0,0,0;
    0,1,0;
    0,0,0;
    0,0,1];
E2=temp1*AE*temp1';
F2=temp1*AF*temp1';


%验证
E-E1
F-F1
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

中级

681 麦片

财富积分


5001500


26

主题

362

帖子

78

最佳答案
  • 关注者: 11
发表于 2020-5-8 10:29:31 | 显示全部楼层
15631202458 发表于 2020-5-8 09:09
重新改写了下,有两种方案,第二种方案是根据行列交换求得,代码如下,请参考。
clear;
A=[1,2,3;4,5,6;7,8 ...

你可以研究下怎样生成temp1,我试了下eye(5,3)不是想要的结果,你看下怎么用表达式算出来,那么E,F就可以用一句话计算出来了。

A=[1,2,3;4,5,6;7,8,9];
temp1=[1,0,0;
    0,0,0;
    0,1,0;
    0,0,0;
    0,0,1];
E=temp1*A'*temp1';
F=temp1*rot90(A,2)*temp1';
回复此楼 已获打赏: 0 积分

举报

新手

9 麦片

财富积分


050


2

主题

7

帖子

0

最佳答案
 楼主| 发表于 2020-5-8 13:26:51 | 显示全部楼层
15631202458 发表于 2020-5-8 10:29
你可以研究下怎样生成temp1,我试了下eye(5,3)不是想要的结果,你看下怎么用表达式算出来,那么E,F就可 ...

A = [1,2,3;4,5,6;7,8,9];
E(1:2:5,1:2:5) = A';
F(1:2:5,1:2:5) = rot90(A,2);

找到办法了,直接这么写就行
回复此楼 已获打赏: 0 积分

举报

新手

9 麦片

财富积分


050


2

主题

7

帖子

0

最佳答案
 楼主| 发表于 2020-5-8 13:30:33 | 显示全部楼层
15631202458 发表于 2020-5-8 09:55
我又做了个方案三,是用矩阵乘法算的,你可以看下,原理类似行列互换,就矩阵的行列交换原理
clear;
A=[1 ...

感谢给出这么多可解决方案:handshake
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表