簡體   English   中英

Matlab @fmincon 錯誤:“提供的目標函數必須返回一個標量值”

[英]Matlab @fmincon error: "Supplied objective function must return a scalar value"

編輯:為了幫助澄清我的問題,我希望適合以下數據:

在此處輸入圖片說明

我可以使用 cftool 函數進行擬合,但使用最小二乘法對我的二進制數據沒有意義。 只是為了說明...

在此處輸入圖片說明

所以,我的目標是使用 fmincon 函數擬合這些數據。

原帖:

我有來自運動控制實驗的數據,其中參與者在執行任務時被計時,並根據他們的表現給出分數(失敗或成功)。 正如您所料,我們假設參與者有更多時間來執行任務,因此他們犯的錯誤會更少。

我正在嘗試使用 fmincon 將函數擬合到此數據,但收到錯誤“使用 fmincon 時出錯(第 609 行)提供的目標函數必須返回一個標量值。” 我不明白 a) 這意味着什么,或者 b) 我如何解決它。

我在下面提供了一些示例數據和代碼。 非常感謝任何幫助。

%Example Data:

time = [12.16 11.81 12.32 11.87 12.37 12.51 12.63 12.09 11.25
7.73 8.18 9.49 10.29 8.88 9.46 10.12 9.76 9.99 10.08
7.48 7.88 7.81 6.7 7.68 8.05 8.23 7.84 8.52 7.7 
6.26 6.12 6.19 6.49 6.25 6.51 6 6.79 5.89 5.93 3.97 4.91 4.78 4.43
3.82 4.72 4.72 4.31 4.81 4.32 3.62 3.71 4.29 3.46 3.9 3.73 4.15
3.92 3.8 3.4 3.7 2.91 2.84 2.7 2.83 2.46 3.19 3.44 2.67 3.49 2.71
3.17 2.97 2.76 2.71 2.88 2.52 2.86 2.83 2.64 2.02 2.37 2.38
2.53 3.03 2.61 2.59 2.59 2.44 2.73 ]

error = [0  0   0   0   0   0   0   0   0   1   0   0   0   0   1   1   1   0   0   0   0   1   1   1   1   1   1   0   0   0   0   1   1   1   0   1   0   1   0   1   1   0   1   1   0   1   1   1   1   1   1   1   1   1   1   1   1   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1];

%Code:

% initial parameters - a corresponds to params(1), b corresponds to params(2)
a = 3.0;
b = -0.01;

LL = @(params) 1/1+params(1)*(log(time).^params(2));
LL([a b]); 
pOpt = fmincon(LL,[a b],[],[]); 

錯誤來自函數 LL,它返回的值的數量等於time的長度。

要正確使用fmincon ,您需要有一個只返回一個值的函數。

我相信邏輯回歸將非常適合您的數據和目的。 在這種情況下,為什么不簡單地使用 Matlab 的內置函數進行多項邏輯回歸?

B = mnrfit(time,error)

關於您的函數LL ,您確定您正確輸入了函數並且沒有缺少括號嗎?

LL = @(params) 1/(1+params(1)*(log(time).^params(2)));

沒有括號,你的函數相當於 1 + a*log(x)^b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM