我不确定为什么这段代码不会运行。请帮助
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
答案 0 :(得分:0)
你的函数的问题在于你假设x
是单个值,然后你已经传递了一个向量。你的代码无法解决这个问题。
如果您尝试使用单个值运行代码,例如:a=PdfMixUnfmBeta(15,0.4)
您的函数应该运行。
让我们看看你的代码究竟出了什么问题,当我尝试运行你的代码时,我遇到了以下错误:
Output argument "y" (and maybe others) not assigned during call
这表示分配给y
的行从未实际执行过。这表明条件语句(x < 0
和x >= 0
)都没有评估为真。 if
语句需要一个标量逻辑值,但在您的示例中,它提供了一个逻辑向量。
因此,为了解决这个问题,你需要通过将它包装在for循环中来一次处理一个x
值,例如:
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));
在上面的解决方案中,我使用逻辑索引并将部分*
更改为.*
。您可能会发现查找*
和.*
之间的差异并阅读矢量化非常有用。