wangyuhui82 发表于 2008-10-9 10:34

如何循环赋值给可变符号?

matlab中,当数目比较大的时候,如何实现下面的赋值:
X1=1;
X2=2;
X3=3;
X4=4;
……
Xii=ii;
……

注意,此处要求不是
X(1)=1;
X(2)=2;
X(3)=3;
……
X(ii)=ii;
……
的形式

sogooda 发表于 2008-10-9 12:13

为啥不能用数组形式呢?数组的方式会有很多方便之处的。

不过,如果楼主一定要那种形式的话,可以参考下面的方式实现:
for ii=1:10
   estr=sprintf('X%d=%d',);
    eval(estr);
end


[ 本帖最后由 sogooda 于 2008-10-9 12:35 编辑 ]

wangyuhui82 发表于 2008-10-9 15:28

首先感谢sogooda的热心!
我还想再进一步问一下,实质上我原始的问题是这样的:
有一个元胞数组A={ ……},A里面的元素数目N很大,我想把A{1}(即矩阵)赋值给X1,A{2}(即矩阵)赋值给X2,A{3}赋值给X3,A{4}赋值给X4,……等等,之所以要这样做是因为我需要把元胞数组A的每一个元素(即A{1},A{2},A{3},A{4},……)单独保存为一个ASCII文件(即一共N个文件),由于导出文件命令save('X1.txt','X1','-ASCII')中需要一个变量名Xii而不能采用X(ii)的格式,所以需要上述赋值。
不知道这个赋值命令如何实现,如果用
for ii=1:10
   estr=sprintf('X%d=%d',ii,A{ii});
    eval(estr);
end
好像不行,eval这里 通不过
另外,不知道有没有其他方式来把这些元素保存为文件?

sogooda 发表于 2008-10-9 15:39

试试这个
for ii=1:10
   estr=sprintf('X%d=[%d %d]',);
    eval(estr);
end


[ 本帖最后由 sogooda 于 2008-10-9 15:41 编辑 ]

wangyuhui82 发表于 2008-10-9 15:54

好像如果A{ii}是只有一行的矩阵是可以的,但如果A{ii}=就不行了:
A={ };
for ii=1:4
    estr=sprintf('X%d=[%d %d]',);
    eval(estr);
end

运行结果是:

>> A={ };
for ii=1:4
    estr=sprintf('X%d=[%d %d]',);
    eval(estr);
end

X1 =

   1   1


X2 =

    12   1


X3 =

   1   3

??? Error using ==> horzcat
All matrices on a row in the bracketed expression must have the
same number of rows.

X4出不来

wangyuhui82 发表于 2008-10-9 16:05

补充一下,实际上A{ii}的格式一样:如
A={ };
如果格式不一样可能会很麻烦

运行如下:

A={ };
for ii=1:4
    estr=sprintf('X%d=[%d %d]',);
    eval(estr);
end
??? Error using ==> horzcat
All matrices on a row in the bracketed expression must have the
same number of rows.

>>

sogooda 发表于 2008-10-9 16:09

回复 6楼 wangyuhui82 的帖子

格式不一样也没你想的那么麻烦——不过,你有什么问题能不能一次说清楚?
A={ };
for ii=1:4
    estr=sprintf('X%d=A{%d}',);
    eval(estr);
end


[ 本帖最后由 sogooda 于 2008-10-9 16:17 编辑 ]

wangyuhui82 发表于 2008-10-9 16:11

这个可以了
A={ };
for ii=1:3
    estr=sprintf('X%d=[%d %d;%d %d]',ii,A{ii});
    eval(estr);
end

X1 =

   1   2
   1   3


X2 =

   3   5
   2   6


X3 =

   4    10
   5    10

但是有一个新的问题:那就是A{ii}中的矩阵也比较大,比如A{ii}都是100*2的矩阵,那estr=sprintf('X%d=[%d %d;%d %d]',ii,A{ii});中[%d %d;%d %d]要写成[%d %d;%d %d;%d %d;%d %d;%d %d;%d %d……]共一百行,不知道有没有其他办法?

sogooda 发表于 2008-10-9 16:14

回复 8楼 wangyuhui82 的帖子

看7楼

wangyuhui82 发表于 2008-10-9 16:23

这下可以了,谢谢sogooda
页: [1]
查看完整版本: 如何循环赋值给可变符号?