如何循环赋值给可变符号?
matlab中,当数目比较大的时候,如何实现下面的赋值:X1=1;
X2=2;
X3=3;
X4=4;
……
Xii=ii;
……
注意,此处要求不是
X(1)=1;
X(2)=2;
X(3)=3;
……
X(ii)=ii;
……
的形式 为啥不能用数组形式呢?数组的方式会有很多方便之处的。
不过,如果楼主一定要那种形式的话,可以参考下面的方式实现:
for ii=1:10
estr=sprintf('X%d=%d',);
eval(estr);
end
[ 本帖最后由 sogooda 于 2008-10-9 12:35 编辑 ] 首先感谢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这里 通不过
另外,不知道有没有其他方式来把这些元素保存为文件? 试试这个
for ii=1:10
estr=sprintf('X%d=[%d %d]',);
eval(estr);
end
[ 本帖最后由 sogooda 于 2008-10-9 15:41 编辑 ] 好像如果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出不来 补充一下,实际上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.
>>
回复 6楼 wangyuhui82 的帖子
格式不一样也没你想的那么麻烦——不过,你有什么问题能不能一次说清楚?A={ };
for ii=1:4
estr=sprintf('X%d=A{%d}',);
eval(estr);
end
[ 本帖最后由 sogooda 于 2008-10-9 16:17 编辑 ] 这个可以了
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……]共一百行,不知道有没有其他办法?
回复 8楼 wangyuhui82 的帖子
看7楼 这下可以了,谢谢sogooda
页:
[1]