找到向量x的所有条目的乘积

时间:2014-04-13 21:35:18

标签: matlab

以下是我要做的事情:

x成为具有n个条目x1,x2,...xn的向量。编写一个mat-lab程序,用

定义的条目计算向量p
pk = X1*X2....Xk-1*Xk+1...Xn. 
for each k =1,2,...n.

pk是除x之外xk的所有条目的乘积。 (使用prod命令计算所有条目的乘积,然后除以xk)。如果x的其中一个条目为零,则采取适当的特殊操作。全程使用矢量而不是“#”;环。

我花了太多时间来弄清楚这个问题。我仍然无法得到它。请帮忙!

1 个答案:

答案 0 :(得分:1)

  1. 蛮力:

    n = numel(x);
    X = repmat(x(:),1,n); %// put vector in column form and repeat
    X(1:n+1:end) = 1; %// make diagonal 1
    result = prod(X); %// product of each column
    
  2. 保存计算:

    ind = find(x==0);
    if numel(ind)>1 %// result is all zeros
        result = zeros(size(x));
    elseif numel(ind)==1 %// result is all zeros except at one entry
        result = zeros(size(x));
        result(ind) = prod(nonzeros(x));
    else %// compute product of all elements and divide by each element
        result = prod(x)./x;
    end