你的函数的问题是你假设它x
是一个单一的值,然后你给它传递了一个向量。您的代码无法解决这个问题。
如果您尝试使用单个值运行代码,例如:a=PdfMixUnfmBeta(15,0.4)
您的函数应该运行。
让我们看看您的代码实际上有什么问题,当我尝试运行您的代码时,我收到以下错误:
Output argument "y" (and maybe others) not assigned during call
这表明分配给的行y
从未实际执行。这表明条件语句 (x < 0
和x >= 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));
在上述解决方案中,我使用逻辑索引并将一些更改*
为.*
. 您可能会发现查找和之间的区别以及阅读矢量化很有*
用.*
。