how to input a function as a parameter of a function

Hi there,
Here I have the following recursive code fMin1D to find the local minima of a user-defined function f=fun(x).
fun(x) is able to evaluate a sample array x =[x1 … xn] and return values f =[f1 … fn] .
function x0=fMin1D(x1,xN,N,eps,x0,fun)
% samples to be scanned
Neps=1+ceil((log(xN)-log(x1))/log(1+eps));
n=max(4,min(N,Neps));
x=x1*(xN/x1).ˆ([0:n-1]/(n-1)); f=feval(fun,x);
% minimum search via direct comparison
L=f(1:n-1)<=f(2:n); I=find(L(2:n-1) & ~L(1:n-2))+1;
% recursive search or update of already found solution x0
if n<Neps, for j=1:length(I),
x0=fMin1D(x(I(j)-1),x(I(j)+1),N,eps,x0,fun); end
else x0=[x0,x(I)]; end
Since fun is also a function, how can I input it into the brackets of fMin1D as a parameter needed by fMin1D?
Many thanks!
Cheers

 Réponse acceptée

Something like this:
%% Script to call 'fMin1D'
x0 = [1, 1];
[x, fval] = fMin1D(x0, @quadfcn)
Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
x = 1×2
0 0
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
fval = 0
%% Minimizer
function [x, fval] = fMin1D(x0, fun)
[x, fval] = fminunc(fun, x0);
end
%% Quadric surface
function y = quadfcn(x)
y = x(1).^2 + x(2).^2;
end

3 commentaires

Hi Sam,
I guess what u mean is, in the main .m file, when I call the fMin1D function, @ is added before the user-defined function fun. But in the file where the function fMin1D is defined, @ is not needed before fun.
Is my interpolation correct?
Cheers
Tony
Yes, @Tony Cheng, your understanding is correct.
Hi Sam, thx so much for your sincere help! I make it now!

Connectez-vous pour commenter.

Plus de réponses (1)

Use @fun as the parameter. For example
X0 = fMin1D(.5, 17, 32, 1e-10, 0.8, @fun)

1 commentaire

Hi Walter, pls see the attached screenshot:
there is a red waved line under the @ symbol...

Connectez-vous pour commenter.

Catégories

En savoir plus sur MATLAB dans Centre d'aide et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by