在for循环中对eval语句中的元素求和

时间:2015-10-29 21:40:06

标签: matlab for-loop eval

我编写了一个在MATLAB中运行的完整代码,但输出的结果略有不正确。我需要得到以下内容:

utotal

,其中

utotal = S1plot + S2plot + ... 

直到数字等于(N / 2)+ 1,其中N是偶数。如果N = 10,那么数字将为6。

然后我需要在脚本中评估utotal。我怎样才能做到这一点?

这是我到目前为止所做的:

N = 10;
for alpha = 1:(N/2+1)
    eval(['utotal = sum(S' num2str(alpha) 'plot);'])
end

但它不起作用,因为它评估以下内容:

utotal = sum(S1plot);
utotal = sum(S2plot);
utotal = sum(S3plot);
utotal = sum(S4plot);
utotal = sum(S5plot);
utotal = sum(S6plot);

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

这是您现在可以使用的解决方法。请注意,这是非常糟糕的编码习惯,您现在遇到的困难只是您不应该这样做的原因之一。

%// Generate random data
S1plot = randi(100,51,5);
S2plot = randi(100,51,5);
S3plot = randi(100,51,5);
S4plot = randi(100,51,5);
S5plot = randi(100,51,5);
S6plot = randi(100,51,5);
N = 10;

%// Put individual matrices into 3D matrix S
%// To access matrix Snplot, use S(:,:,n)
%// This is the format these variables should have been in in the first place
for alpha = 1:(N/2+1)
    eval(['S(:,:,' num2str(alpha) ') = (S' num2str(alpha) 'plot);'])
end

%// Now sum along the third dimension
utotal = sum(S,3);

答案 1 :(得分:1)

  

请参阅@beaker的评论。该解决方案不符合OP的要求。

我没有对此进行过测试,但它应该有效。

N=10;
for alpha = 1:(N/2+1)
    allSum = [allSum 'sum(S' num2str(alpha) 'plot)+'];
end

allSum(end)=';';
eval(['utotal = ' allSum]);

答案 2 :(得分:0)

N = 10;
Result =0;
for alpha = 1:(N/2+1)
   Result = Result + num2str(alpha)
end
eval(['utotal = sum(S' Result 'plot);'])