0

我不确定为什么这段代码不会运行。请帮忙

function y = PdfMixUnfmBeta(x,alpha)
    if x < 0 
y = (1-alpha).*1/2;
    elseif x >= 0 
y = (1-alpha).*1/2 + alpha.*6*x*(1-x);
end;

当我如下执行此函数时,出现错误

EDU>> x=-1:0.01:1;
EDU>> a=PdfMixUnfmBeta(x,0.4)
Error in PdfMixUnfmBeta (line 2)
if x < 0 
4

1 回答 1

0

你的函数的问题是你假设它x是一个单一的值,然后你给它传递了一个向量。您的代码无法解决这个问题。

如果您尝试使用单个值运行代码,例如:a=PdfMixUnfmBeta(15,0.4)您的函数应该运行。

让我们看看您的代码实际上有什么问题,当我尝试运行您的代码时,我收到以下错误:

Output argument "y" (and maybe others) not assigned during call

这表明分配给的行y从未实际执行。这表明条件语句 (x < 0x >= 0) 都不会评估为真。这些if语句需要一个标量逻辑值,但在您的示例中,它提供了一个逻辑向量。

因此,要解决此问题,您需要x一次处理一个值,方法是将其包装在 for 循环中,例如:

function y = PdfMixUnfmBeta(x_vec, alpha)
  for x = x_vec
    %do your function here
  end
end

或者,您可以对代码进行矢量化,这是迄今为止最好的解决方案:

y = zeros(1,length(x));
% where x is < 0 use this formula
y(x < 0) = (1-alpha) .*(1/2); 
% where x is >= 0 use this formula instead.
y(x >= 0) = (1-alpha) .* (1/2) + (alpha .* 6 .* x .* (1-x)); 

在上述解决方案中,我使用逻辑索引并将一些更改*.*. 您可能会发现查找和之间的区别以及阅读矢量化很有*.*

于 2013-06-02T01:48:50.130 回答