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

我有一个向量,比如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(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.