Minimizing a multivariable anonymous function that contains vectors using fminsearch
이전 댓글 표시
I am trying to minimize I0 and a in the function handle below. rBes and rCutFit are vectors with the same dimensions. The variables, wave, a, C, u, and r are constants that have already been defined in the script.
R2=@(I0,a) (rBes(u)-I0*((2*rCutFit((((2*pi)/wave)*a*sin(atan((u*C)/r))))/(((2*pi)/wave)*a*sin(atan((u*C)/r))))^.2)).^2; MIN=fminsearch(R2,[1,10^-6]);
I keep getting the error below everytime I run the code. Please let me know if you have any advice for fixing this.
"Not enough input arguments.
Error in @(I0,a)(rBes(u)-I0*((2*rCutFit((((2*pi)/wave)*a*sin(atan((u*C)/r))))/(((2*pi)/wave)*a*sin(atan((u*C)/r))))^.2)).^2
Error in fminsearch (line 189) fv(:,1) = funfcn(x,varargin{:});"
답변 (1개)
James Tursa
2017년 7월 22일
0 개 추천
Make R2 accept a vector input. E.g., use x as the argument and replace I0 with x(1) and a with x(2)
R2=@(x) (rBes(u)-x(1)*((2*rCutFit((((2*pi)/wave)*x(2)*sin(atan((u*C)/r))))/(((2*pi)/wave)*x(2)*sin(atan((u*C)/r))))^.2)).^2;
MIN=fminsearch(R2,[1,10^-6]);
댓글 수: 9
Walter Roberson
2017년 7월 22일
What is rCutFit ?
James Tursa
2017년 7월 22일
You didn't replace that 2nd "a" with x(2)
Also, the error you are getting typically indicates you are shadowing a function with a variable. E.g., maybe you have a variable named "sin" or "atan" or "rCutFit" or "rBes" in your workspace that is shadowing those functions.
Tana Si
2017년 7월 23일
Tana Si
2017년 7월 23일
Walter Roberson
2017년 7월 23일
rCutFit((((2*pi)/wave)*x(2)*sin(atan((u*C)/r))))
mean that you want to calculate (((2*pi)/wave)*x(2)*sin(atan((u*C)/r))) and use that as an index into rCurFit . That is going to fail except under unlikely circumstances that the computation produces a positive integer.
Did you need a multiplication between rCurFit and the following expression?
Tana Si
2017년 7월 23일
Tana Si
2017년 7월 23일
Walter Roberson
2017년 7월 23일
Arrays (and vectors) have particular sizes at any one time, and are indexed with () notation and what follows in the () must be a list of positive integers, possibly together with colons.
Functions also use () notation to invoke them, and can have non-integral arguments that are function parameters.
You cannot use non-integral values (other than colon) in the () after a vector name (except in intermediate calculations provided the overall result of the calculation is positive integer).
If you need to perform a calculation on a non-integral argument and get a vector or array output, then you should make rCutFit into a function that does the appropriate bessel calculation and removes whatever and reshapes as is suitable.
카테고리
도움말 센터 및 File Exchange에서 Programming에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
