2014-09-19 53 views
0

定義累積正態分佈我在MATLAB如何使用符號數學

x=sym('x',[1 2]); 
DV=x(1)*ED+x(2); 
sv=x(1)*DV; 
DD=DV./sv; 
p=normcdf(-DD); 

其中DV和ED均爲13242 X 1矢量下面的代碼。 DD一切都沒問題。當我定義數p作爲上述,我得到這樣的信息:使用symfun

錯誤> validateArgNames(線205)

第二輸入必須是唯一的符號變量的標量或矢量。

當我定義p=1./(1+exp(-DD))所有都沒關係。所以normcdf有問題。

有什麼想法?

問候

回答

0

normcdf與統計工具箱中的大多數功能一樣不支持符號輸入。該文檔沒有說清楚這一點,我同意這個錯誤信息是無用的(你可能會建議他們在統計工具箱中增加對符號數學的支持)contact MathWorks and file a service request about this

normcdf函數沒有什麼不可思議的功能。您可以使用代替p = normcdf(-DD)。這也會更快。在您的命令中鍵入edit normcdf以查看該函數的代碼。有很多錯誤檢查和特定於浮點的情況,這就是符號輸入引起函數錯誤的原因。

另一種選擇是使用來自within Matlab的MuPAD的stats::normalCDF(該功能可能僅在最新版本中受支持)。例如:

x = sym('x',[1 2]); 
ED = ones(1,3); 
DV = x(1)*ED+x(2); 
sv = x(1)*DV; 
DD = DV./sv; 
DDstr = char(-DD); 
p = evalin(symengine, ['f:=stats::normalCDF(0,1):map(' DDstr(9:end-2) ',x->f(x))']) 

其中f限定procedure實現符號正常CDF均值爲0,方差爲1。MuPAD的map功能還用於向量化這一點。總而言之,這個選項可能沒有必要。

0

normcdf

x MATLAB的幫助可以是一個向量,矩陣或多維數組。

即,它不能是一個符號變量。

嘗試

syms y; 
p=normcdf(y) 

不工作。由於DD是一個符號變量,因此不起作用。爲什麼你會想要一個有幾千個符號值的矢量呢?運行x的特定非符號值的腳本不會更高效嗎?

+0

嗨sanchises謝謝你的迴應。那麼,實際上變量p將被輸入到目標函數F中,然後優化F w.r.t x。但既然我不能定義p,F也不會。 – 2014-09-19 12:05:51

+0

我會看看有更聰明的方法來獲得你想要的東西。優化13k符號函數對我來說似乎並不有效......嘗試找到x和F之間的關係;通常,近似(線性化)可以令人驚訝地很好。 – Sanchises 2014-09-19 12:51:52

+0

沒有任何關於「x可以是矢量,矩陣或多維數組」的短語,排除了可以是標量,矢量,矩陣或多維數組本身的符號變量。 – horchler 2014-09-19 14:22:16

0

我弄清楚如何去做。我不必使用normcdf命令,而必須按照原樣定義累積密度函數的公式,其中X = -DD