2016-01-31 64 views
1

我正在使用Matlab 2015a。如何在Matlab中正確地使用參數進行參數優化?

這裏是我要優化功能:

function result = fig_of_merit(x, a, b, c, d) 
    result = 1; 
end 

這是我要如何優化功能:

x1 = [10*10^-6, 120]; 
x2 = [300*10^-6, 175]; 
fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),x1,x2); 

我不斷收到以下錯誤:

Error using * Inner matrix dimensions must agree.

Error in fminbnd (line 291)

x = xf + si * max(abs(d), tol1);

Error in test (line 5)

fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),x1,x2);

我的代碼有什麼問題?我做了同樣的優化沒有界限使用功能和一切都很好。

它是與我所用的匿名函數 - 當我減少了矢量x1和x2到標量,它的工作:

fminbnd(@(x) fig_of_merit(x, 1, 2, 3, 4),-4, 5); 

它不能使我滿意,因爲我想優化2參數一次。

+0

你也很難優化常數函數:)無論如何,這個問題可能是由'結果=一(尺寸(X))來解決;',我我不確定。 –

+0

然後我得到以下錯誤:*用戶提供的目標函數必須返回一個標量值。*。 – user2738748

+2

對'fminbnd'的幫助說:「FUN接受標量輸入X並返回在X處評估的標量函數值F.」所以看起來像'fminbnd'不允許像其他優化功能一樣優化多個參數。 – drhagen

回答

1

fminbnd函數僅適用於標量參數。它不能一次優化兩個參數。然而,fmincon功能可以做到這一點:

x1 = [10*10^-6, 120]; 
x2 = [300*10^-6, 175]; 
fmincon(@(x) fig_of_merit(x, 1, 2, 3, 4),ones(size(x1)),[],[],[],[],x1,x2); 
相關問題