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 中查找有关 Mathematics 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
