我想在不使用for循环的情况下在MATLAB中创建以下向量。我正在寻找一种简单而优雅的解决方案,而不需要各种if语句。
[x,y, (x+y)+x, ((x+y)+x)+y, (((x+y)+x)+y)+x]
答案 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