2013-04-22 104 views
0

我想解決以下matlab問題。我有一個由5個參數和4個作爲數據輸入的變量定義的函數。我把它定義爲這樣的:通過函數句柄

g = @(b)((b(4)*(b(2)*x(:,1) + b(3)*x(:,2) + 1)) + b(5)*x(:,3)*x(:,4).^b(1));

然後我想找到的參數在此功能最小化誤差值,這是我定義爲這樣:

sum_res = @(b)(y-g)'*(y-g); [beta_opt,fval] = fminsearch(sum_res,[1,1]);

我得到以下錯誤消息:

Undefined function 'minus' for input arguments of type 'function_handle'. 

Error in @(b)(y-g)'*(y-g) 


Error in fminsearch (line 191) 
fv(:,1) = funfcn(x,varargin{:}); 

回答

1

錯誤消息是現貨; g是一個函數句柄,不是值類型。所以當你在你的sum_res函數中執行減法y-g時,將不會有減法運算符接受函數句柄作爲操作數(你將如何減去函數句柄?)

看起來你簡直忘了通過您的參數b到您sum_res函數內的g功能句柄(假設b爲確實是您的期望參數)

sum_res = @(b)(y-g(b))'*(y-g(b)); 
+0

完美地工作:'X = randn(100,4); y = randn(100,1); (3)* x(:,2)+ 1))+ b(5) 。* X(:,3)* X(:,4)。^ b(1)); (b)(y-g(b))'*(y-g(b)); [beta_opt,fval] = fminsearch(sum_res,[1,1,1,1,1]);' – user2209979 2013-04-22 04:10:33