필터 지우기
필터 지우기

fminsearch with part of input function

조회 수: 4 (최근 30일)
franco otaola
franco otaola 2020년 3월 31일
댓글: franco otaola 2020년 4월 1일
hello,
i have defined a function that is model, and want to use a fminsearch for a first value for the lsqnonlin,but i get all the time "Assignment has more non-singleton rhs dimensions than non-singleton subscripts" also in the error it says fv(:,1) = funfcn(x,varargin{:}); the model_error is the output to optimise
my code:
param0=[1, 50];
param0=fminsearch(@(param) Model(param,t,inlet_signal,outlet_signal),param0);
function [error_model,h]= dispmodel_2param(param,t,x,y)
theta = t/param(2);
h = (sqrt(param(1)./(4*pi*theta)).*exp(-param(1)./(theta*4).*(1-theta).^2));
h(1) = 0;
y=[y;y(end)*zeros((length(E_theta)+length(x)-1)-length(y),1)];
error_model= y-conv(h/param(2),x);
end

채택된 답변

Walter Roberson
Walter Roberson 2020년 4월 1일
No matter whether t, inlet_signal and outlet_signal are scalars or vectors, your line
y=[y;y(end)*zeros((length(E_theta)+length(x)-1)-length(y),1)];
is making y into a vector at that point. Then your error_model would be a vector because it involves y.
When you use fminsearch there is a single output for the function, and it must return a scalar.
The form you are using appears to have been designed for use with lsqnonlin, which expects the individual predictions to be returned rather than a sum-of-squares . lsqnonlin internally does the equivalent of sum( (fun(Param) - y).^2 ) but fminsearch does not.
  댓글 수: 5
Walter Roberson
Walter Roberson 2020년 4월 1일
No, not without using an extra function to capture the extra output and return it instead. It would have to be a true function, not an anonymous function, because of the way that MATLAB deals with additional outputs.
franco otaola
franco otaola 2020년 4월 1일
oh, okey, thanks!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

태그

제품


릴리스

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by