how to input a function as a parameter of a function
    6 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Tony Cheng
 am 12 Feb. 2025
  
    
    
    
    
    Kommentiert: Tony Cheng
 am 13 Feb. 2025
            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
0 Kommentare
Akzeptierte Antwort
  Sam Chak
      
      
 am 12 Feb. 2025
        Hi @Tony Cheng
Something like this:
%% Script to call 'fMin1D'
x0  = [1, 1];
[x, fval] = fMin1D(x0, @quadfcn)
%% 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 Kommentare
Weitere Antworten (1)
  Walter Roberson
      
      
 am 12 Feb. 2025
        Use @fun as the parameter. For example
X0 = fMin1D(.5, 17, 32, 1e-10, 0.8, @fun)
Siehe auch
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



