在MATLAB中没有for循环的交替求和

时间:2017-05-19 11:06:17

标签: matlab math

我想在不使用for循环的情况下在MATLAB中创建以下向量。我正在寻找一种简单而优雅的解决方案,而不需要各种if语句。

[x,y, (x+y)+x, ((x+y)+x)+y, (((x+y)+x)+y)+x]

3 个答案:

答案 0 :(得分:1)

你可以使用矢量乘法:

% x, y values
x = 3;
y = 1;
% number of repetitions
n = 2;
% generate times vector for x
timesx = repmat(1:n,[2 1]);
timesx = [timesx(:);n+1];
timesx(2) = 0;
% generate times vector for y
timesy = repmat(1:n,[2 1]);
timesy = [0;timesy(:)];
% sum
s = x*timesx + y*timesy;

你得到:

s = 
    [3     1     7     8    11]

答案 1 :(得分:0)

在MATLAB> 2015a

x=3;
y=1;
N=7;

rept=repelem(1:N,2);
res=[x,y,x*rept(3:3+N-3)+y*rept(2:2+N-3)]

可能有一种方法可以在repelem行中添加res,但我没有MATLAB 2015a或更大版本,我无法进一步测试。

答案 2 :(得分:0)

MATLAB中的Codegolfing? 39个字符(由Luis Mendo提供,引入t):

x=3;y=1;n=7;
t=(1:n)/2;f=ceil(t)*x+floor(t)*y;f(2)=y