How to use fminsearch for a function converted from symbolic expression
    3 ビュー (過去 30 日間)
  
       古いコメントを表示
    
Hello,
I am trying to fit a plane to a set of data. I'd like to write my own function with fminsearch function. 
I created the objective function using symbolic, and then I convert the symbolic expression to a function handle using "matlabFunction". Finally, I pass the function handle to the fminsearch function. However, Matlab reports "Not enough input arguments" How do I fix this? 
My code is as the following
% I have 36 3D points. I'd like to use a plane to fit them
% Pcr_th is a 36-3 matrix that contains the point coordinates, the columns represent X, Y and Z coordinates
syms A B C D
sum_sqd = 0;
for i = 1:36
    d =  ( A*Pcr_th(i,1) + B*Pcr_th(i,2) +C*Pcr_th(i,3) + D) / (sqrt(A*A+B*B+C*C));
    sqd = d*d;
    sum_sqd = sum_sqd + sqd;
end
% find the centroid
ctroid_x = sum(Pcr_th(i,1))/36;
ctroid_y = sum(Pcr_th(i,2))/36;
ctroid_z = sum(Pcr_th(i,3))/36;
% initial guess for D
Dint = -(ctroid_x+ ctroid_y + ctroid_z);
% Create the objective function
fun = matlabFunction(sum_sqd,'vars',[A,B,C,D]);
intg = [1, 1, 1, Dint];  % this is the initial guess.
a = fminsearch (fun, intg)  % This reports Not enough input arguments. And error in fun=matlabFunction...
0 件のコメント
採用された回答
  Walter Roberson
      
      
 2020 年 6 月 8 日
        fun = matlabFunction(sum_sqd, 'vars', {[A,B,C,D]});
When you pass in a vector of variables for the 'vars' option, then matlabFunction uses one input parameter for each variable.
When you pass in a cell array for the 'vars' option, then matlabFunction uses one input parameter for each element of the cell array, packing all of the variables present in that one entry into a single parameter. 
0 件のコメント
その他の回答 (0 件)
参考
カテゴリ
				Help Center および File Exchange で Symbolic Math Toolbox についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

