Matlab 向量元素乘积之和
我有一个向量,比如Y2。我想找到一些订单的乘积之和,比如说10。下面是一个天真的方法。在matlab中有没有一种很好的方法可以做到这一点Matlab 向量元素乘积之和,matlab,vector,sum,product,Matlab,Vector,Sum,Product,我有一个向量,比如Y2。我想找到一些订单的乘积之和,比如说10。下面是一个天真的方法。在matlab中有没有一种很好的方法可以做到这一点 for tt=1:length(Y2)-10 LHS(tt) = Y2(tt) + Y2(tt)*Y2(tt+1) + Y2(tt)*Y2(tt+1)*Y2(tt+2) + Y2(tt)*Y2(tt+1)*Y2(tt+2)*Y2(tt+3) ... + Y2(tt)*Y2(tt+1)*Y2(tt+2)*Y2(tt+3)*Y2(t
for tt=1:length(Y2)-10
LHS(tt) = Y2(tt) + Y2(tt)*Y2(tt+1) + Y2(tt)*Y2(tt+1)*Y2(tt+2) + Y2(tt)*Y2(tt+1)*Y2(tt+2)*Y2(tt+3) ...
+ Y2(tt)*Y2(tt+1)*Y2(tt+2)*Y2(tt+3)*Y2(tt+4) + Y2(tt)*Y2(tt+1)*Y2(tt+2)*Y2(tt+3)*Y2(tt+4)*Y2(tt+5) ...
+ Y2(tt)*Y2(tt+1)*Y2(tt+2)*Y2(tt+3)*Y2(tt+4)*Y2(tt+5)*Y2(tt+6) ...
+ Y2(tt)*Y2(tt+1)*Y2(tt+2)*Y2(tt+3)*Y2(tt+4)*Y2(tt+5)*Y2(tt+6)*Y2(tt+7) ...
+ Y2(tt)*Y2(tt+1)*Y2(tt+2)*Y2(tt+3)*Y2(tt+4)*Y2(tt+5)*Y2(tt+6)*Y2(tt+7)*Y2(tt+8) ...
+ Y2(tt)*Y2(tt+1)*Y2(tt+2)*Y2(tt+3)*Y2(tt+4)*Y2(tt+5)*Y2(tt+6)*Y2(tt+7)*Y2(tt+8)*Y2(tt+9);
end
这将完成以下工作:
k=10;
LHS = zeros(T-k-1,1);
for tt=1:length(Y2)-k
for j=0:k-1
for i=0:j
YY = prod(Y2(tt:tt+i));
end
LHS(tt) = LHS(tt)+ YY;
end
end
这里有一个解决方案是
O(n)
:
订单生产总额.m
function [ result ] = order_prod_sum( v, k )
result = zeros(length(v)-k,1);
last = 1;
for i = 1:k
last = last * v(i);
result = result + last;
end
n = length(v) - k;
for i = 2:n
cur_sum = result(i-1)/v(i-1) -1;
last = v(i+k-1) * last / v(i-1);
result(i) = last + cur_sum;
end
end
比较
三个循环.m(您的解决方案)
输出
Elapsed time is 4.739388 seconds.
Elapsed time is 0.005321 seconds.
k=10;
Num = 100000;
v = randi(10,1,Num);
tic;
result1 = three_loops(v, k);
toc;
tic
result2 = order_prod_sum(v, k);
toc;
assert(sum(result1-result2) == 0)
Elapsed time is 4.739388 seconds.
Elapsed time is 0.005321 seconds.