2013-06-02 36 views
0

我不確定爲什麼這段代碼無法運行。請幫助這個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; 

當我執行此功能如下,有一個錯誤

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

我猜你在命令行輸入了它,或者你試圖「運行」該功能。現在該開始閱讀手冊了。瞭解哪些功能以及如何定義它們。 – 2013-06-02 01:48:13

回答

0

與功能的問題是,你寫它假設x是一個單一的值,然後你已經通過它向量。你的代碼無法應對這一點。

如果您嘗試運行相同的值代碼,如:a=PdfMixUnfmBeta(15,0.4)你的函數應該運行。

讓我們看看什麼是真正你的代碼錯誤,當我試圖運行你的代碼,我得到了以下錯誤:

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

這表明其分配給y的線路從來沒有真正執行。這表示任何條件語句(x < 0x >= 0)都沒有評估爲真。 if語句需要一個標量邏輯值,但在您的示例中,它提供了一個邏輯向量。

所以,通過在包裝它的循環,比如解決這個問題,你要麼需要處理一次你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)); 

在上述方案中我使用邏輯索引和一些*的更改爲.*。您可能會發現它有用來查找差異*.*之間以及矢量化閱讀起來。

+0

酷我知道了。它現在有效 – user1925750