0

这是一个例子:

for b = 1:numcarlo;
eval(sprintf('pspsdist%d = psdistmat(b,:);', b))
eval(sprintf('cell%d = cell(1, iterestemp%d);', b))
end;

第 1 行有效,它告诉我们在 for 循环中执行多少次。第 2 行有效,它生成 pspsdist 的 numcarlo 数字,数字作为后缀(pspsdist1 等)。只要 iterestemp 最后有一个 %d ,第3 行就不起作用。它提供以下错误:

??? Error: Expression or statement is incorrect--possibly unbalanced (, {, or [.

但它是平衡的!当我摆脱那个 %d 时,它可以工作,但我需要有 iterestemp%d,因为有多个带有后缀的 iterestemp(如在 pspsdist 中,它们在末尾编号,我指的是特定的)。

为什么 matlab 会这样做,有什么办法可以解决这个问题吗?

4

2 回答 2

2

您已经说过您对学习如何编写更好的代码不感兴趣,但这是 Stack Overflow,这里的问题也应该可以帮助其他读者。所以对于其他感兴趣的人:使用元胞数组而不是动态命名的变量,整个问题就消失了。另外 MATLAB 可以优化您的代码,从现在起 3 个月后您将能够阅读它。

for b = 1:numcarlo;
    pspsdist{b} = psdistmat(b,:);
    mycell{b}= cell(1, iterestemp{b});
end
于 2013-09-16T21:25:17.017 回答
1

每个人都%d需要自己的论据。尝试这个:

eval(sprintf('cell%d = cell(1, iterestemp%d);', b, b))

(但实际上你应该使用某种数组。我想提供更具体的建议,但我并不真正了解 Matlab。)

于 2013-09-16T18:45:24.893 回答