【问题标题】:Naming veriable according to The index of The loop根据循环的索引命名veriable
【发布时间】:2016-01-17 13:30:25
【问题描述】:
for i=1:1:4 
    T=[(cos(x(i)))^2 (sin(x(i)))^2 2*(cos(x(i)))*(sin(x(i)));(sin(x(i)))^2 (cos(x(i)))^2 -2*(cos(x(i)))*(sin(x(i))) ;-(cos(x(i)))*(sin(x(i))) (cos(x(i)))*(sin(x(i))) (cos(x(i)))^2-(sin(x(i)))^2 ;];
    XXXXX=inv(T)*Qq*R*T*inv(R);
end

我想根据i命名XXXXX;我的意思是当i=1 运行时,XXXXX 将是变量Q1,而i=2 将是Q2,等等。

【问题讨论】:

  • 我认为你必须使用 eval() 来完成类似的事情。
  • 您是否有特定的理由这样做而不是将其放入数组Q{i}
  • 你不想要这些名字。这称为使用“动态变量命名”并被视为very bad practise。有关原因的更多信息,请参阅链接的帖子,并查看 Daniel 的答案以了解存储变量的正确方法。
  • @AnonSubmitter85 虽然您实际上可以这样做来执行确切要求的操作,但至少出于两个原因给出这样的答案是一个非常糟糕的主意:首先,原始海报的想法可能是不是最好的,我们必须解释正确的方法;其次,因为使用 eval() 不是一个好主意(除非我们完全知道为什么要使用它,而这里可能不是这种情况)。

标签: matlab variable-names


【解决方案1】:

使用变量名Q1 Q2 Q3是possible but not recommended。该链接都解释了为什么不推荐它以及如何实现它。

改为使用cell array 来存储您的结果:

n=4; % or probably better n=numel(x)
Q=cell(n,1);
for i=1:1:4; 
    T=[(cos(x(i)))^2 (sin(x(i)))^2 2*(cos(x(i)))*(sin(x(i)));(sin(x(i)))^2 (cos(x(i)))^2 -2*(cos(x(i)))*(sin(x(i))) ;-(cos(x(i)))*(sin(x(i))) (cos(x(i)))*(sin(x(i))) (cos(x(i)))^2-(sin(x(i)))^2 ;];
    Q{i}=inv(T)*Qq*R*T*inv(R);
end

【讨论】:

  • 我打算这样做,但它给了我一个错误,即 Vector 不能是 Matrix 3X3。而不是我创建了一个 3d 矩阵
  • 如果 3d 矩阵是可能的,那就更好了,因为选择更快。我不确定每次迭代的结果是否是相同大小的矩阵,因此提出了一个更通用的解决方案,适用于任何情况。
猜你喜欢
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2021-11-25
  • 2019-10-14
  • 1970-01-01
  • 2015-02-03
相关资源
最近更新 更多