octopussheng 发表于 2008-9-26 11:02

帮忙看下这个矩阵应该如何写代码

遇到一个矩阵定义的问题:
矩阵S是m*(2n*m)维的,想用分块矩阵的方法定义,每块都是一个(1*2n)的向量,请问这种矩阵如何定义最合适呢?谢谢啦!

花如月 发表于 2008-9-26 14:39

m=3,n=5;
S=zores(m,2*m*n);
C=
k=1:m
S=(k,1+(k-1)2*n:k*2n)=C;
这样应该可以,我没matlab试。:loveliness:

[ 本帖最后由 花如月 于 2008-9-26 14:41 编辑 ]

octopussheng 发表于 2008-9-26 14:57

m=2;
n=4;
syms t
Cs=[];
Cs1=[];
Cs2=[];
for i=1:n
    Cs1=;
    Cs2=;
end
Cs=;

v_zero=zeros(1,2*n);

cc=2*n*m;

S=zeros(m,cc);
S=sym(S);
para=0;
for i=1:m
    for j=1:2*n
      S(i,j+para)=Cs(j);
    end
    para=para+2*n;
end
S

[ 本帖最后由 octopussheng 于 2008-9-26 14:58 编辑 ]

花如月 发表于 2008-9-27 10:24

回复 板凳 octopussheng 的帖子

今天试了下,其实没这么麻烦
m=3;n=5;
syms t S;
i=1:n;
C=
for k=1:m
    S(k,(1+(k-1)*2*n):(k*2*n))=C;
end
最后一个循环如果要去掉估计也可以,不过要费些功夫。如果想到再发

[ 本帖最后由 花如月 于 2008-9-27 10:25 编辑 ]

sogooda 发表于 2008-9-27 14:20

回复 地板 花如月 的帖子

最后的循环可以用kronecker积实现,改写之后的代码如下
m=3;n=5;
syms t S;
i=1:n;
C=;

S=kron(eye(m),C);


[ 本帖最后由 sogooda 于 2008-9-27 14:23 编辑 ]

octopussheng 发表于 2008-9-27 14:32

呵呵,看来好办法真是不少呀!呵呵,谢谢啦!又多学到一招!

花如月 发表于 2008-9-27 14:36

回复 5楼 sogooda 的帖子

学习了,那个什么基还是第一次听说:handshake

经过用用tic和toc命令的测试,执行时间还是用for循环略占优势

初步分析应该是因为循环次数不大,多了估计用kron优势就明显了

[ 本帖最后由 花如月 于 2008-9-27 14:38 编辑 ]

octopussheng 发表于 2008-9-27 14:53

呵呵,现在计算时间看来问题是不大的!sogooda给出的方法非常不错,再次赞一个!呵呵!

sogooda 发表于 2008-9-28 09:01

回复 7楼 花如月 的帖子

恩,貌似6.5之后,matlab的循环也没有以前那么低效率了,所以通常也不必特别在意了,更何况很多时候循环写出来的程序更容易读懂。

sogooda 发表于 2008-9-28 09:05

回复 8楼 octopussheng 的帖子

呵呵,其实也不用客气,碰巧以前看到过别人用,又翻了翻帮助就恰好解决了这个问题。
页: [1]
查看完整版本: 帮忙看下这个矩阵应该如何写代码