如何在scilab中循环创建变量Ai,其中i = 1..10

时间:2015-09-09 14:18:18

标签: loops scilab

我正在使用scilab。基本上我想和这个人一样Create 'n' matrices in a loop 或者这个人http://www.mit.edu/~pwb/cssm/matlab-faq_4.html#evalcell

答案不是scilab,我无法管理它在scilab中做同样的事情。有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

如果我的意图正确,您希望使用动态变量名称(=变量名称不是硬编码,而是在执行期间生成)。这是对的吗?

正如其他人已经在链接的帖子中指出的那样(以及许多其他地方,例如here),一般情况下不建议这样做。如果您的变量具有相同的大小和类型,例如,使用矢量或矩阵(2D或3D)会更好。如果

A1=[1,2];
A2=[3,4];

更好的方式:

A(1,1:2)=[1,2];
A(2,1:2)=[3,4];

通过这种方式,您可以将变量存储在一个更有效的矩阵形式中,它可以更快地执行(循环很慢!),并且通常作为独立变量更灵活(您可以定义它们的某个子集,并执行矩阵运算等。 )

但是,如果您真的想这样做,请使用execstr

clear;  //clear all variables
for i=1:10
  execstr("A"+string(i)+"=[]");   //initialize Ai as empty matrix
  execstr("B"+string(i)+"=0");    //initialize Bi as 0
  execstr("C"+string(i)+"=zeros(2,3)");   //initialize Ci as 2*3 zero matrix
  execstr("D"+string(i)+"=1:i");   //initialize Di as different length vectors
end
disp(A1,"A1");
disp(B2,"B2");
disp(C3,"C3");
disp(D1,"D1");
disp(D5,"D5");

如果变量名仅在显示结果时很重要,则可以使索引显示为变量名的一部分,例如:

E=0.1:2:8.1;      //vector with 4 elements
disp(E,"E");
for j=1:4
  mprintf("\nE%i = %.1f",j,E(j));  //appears as 4 different variables on the screen

end