这个matlab函数代码有什么问题?

这个matlab函数代码有什么问题?,matlab,Matlab,我不知道为什么这个代码不能运行。请帮忙 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; 函数y=pdfmixunmbeta(x,alpha) 如果x=0 y=(1-alpha)。*1/2+alpha.*6*x*(1-x); 结束; 当我按如下方式执行此函数时,出现

我不知道为什么这个代码不能运行。请帮忙

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;
函数y=pdfmixunmbeta(x,alpha)
如果x<0
y=(1-α)。*1/2;
elseif x>=0
y=(1-alpha)。*1/2+alpha.*6*x*(1-x);
结束;
当我按如下方式执行此函数时,出现了一个错误

EDU>> x=-1:0.01:1;
EDU>> a=PdfMixUnfmBeta(x,0.4)
Error in PdfMixUnfmBeta (line 2)
if x < 0 
EDU>>x=-1:0.01:1;
EDU>>a=pdfmixunmbeta(x,0.4)
PDFMIXUNMBETA中的错误(第2行)
如果x<0

函数的问题是,您编写函数时假设
x
是一个值,然后向它传递了一个向量。您的代码无法处理此问题

如果您尝试使用单个值运行代码,例如:
a=pdfmixunmbeta(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)); 
y=0(1,长度(x));
%如果x小于0,则使用此公式
y(x<0)=(1-α)。*(1/2);
%如果x大于等于0,则改用此公式。
y(x>=0)=(1-alpha.*(1/2)+(alpha.*6.*x.*1-x));

在上面的解决方案中,我使用逻辑索引,并将一些
*
更改为
*
。您可能会发现查找
*
*
之间的差异以及了解矢量化非常有用。

我猜您是在命令行中输入的,或者您尝试“运行”该函数。是时候开始阅读手册了。了解什么是函数以及如何定义它们。