【问题标题】:Code for iterative function [closed]迭代函数的代码[关闭]
【发布时间】:2017-07-08 05:33:01
【问题描述】:

我想为以下等式编写 Matlab 代码:

z(k)=lamda*x(k)+(1-lamda)*z(k-1)

lamda 可以是任何值。 x 是一个 1000x22 矩阵。 Z(0)=0.

谁能帮帮我?

【问题讨论】:

  • 您的代码不起作用的最重要原因是您没有指定停止条件。请参阅副本了解如何做到这一点。
  • “过于广泛”的近距离投票是不合理的。这可能是一个低质量的问题。但如果再具体一点,就可以清楚地回答了。

标签: matlab loops for-loop vectorization


【解决方案1】:

你可以像这样使用iteration function.same

function z = itrationFunctio(k,x,lambda)
if(k == 0)
    z = 0;
else
    z = lambda*x+(1-lambda)*itrationFunctio((k-1),x,lambda);
end

在您的代码中只需调用itrationFunctio(k,x,lambda)

【讨论】:

    【解决方案2】:

    该矢量化解决方案对您有用吗?

    % parameters
    x = rand(10,1);
    lambda = 2;
    
    % init z, normalize with (1-lambda)
    z(2:numel(x)) = lambda/(1-lambda)*x(2:end);
    
    % cumsum, denormalize with (1-lambda)
    z = cumsum(z)*(1-lambda)
    

    但是我不明白为什么您的 x 是矩阵而不是向量。 z 应该是什么,k 在什么维度上起作用?因此,如果x表示您要并行计算的几个向量,那可能会起作用:

    % parameters
    x = rand(1000,22);
    lambda = 2;
    
    % init z, normalize with (1-lambda)
    z(2:size(x,1),:) = lambda/(1-lambda)*x(2:end,:);
    
    % cumsum, denormalize with (1-lambda)
    z = cumsum(z,1)*(1-lambda)
    

    【讨论】:

      猜你喜欢
      • 2017-03-07
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2020-10-30
      • 2014-01-28
      • 2013-03-03
      • 1970-01-01
      • 2021-07-07
      相关资源
      最近更新 更多