how to input a function as a parameter of a function

조회 수: 6 (최근 30일)
Tony Cheng
Tony Cheng 2025년 2월 12일
댓글: Tony Cheng 2025년 2월 13일
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

채택된 답변

Sam Chak
Sam Chak 2025년 2월 12일
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
Sam Chak
Sam Chak 2025년 2월 12일
Yes, @Tony Cheng, your understanding is correct.
Tony Cheng
Tony Cheng 2025년 2월 13일
Hi Sam, thx so much for your sincere help! I make it now!

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

추가 답변 (1개)

Walter Roberson
Walter Roberson 2025년 2월 12일
Use @fun as the parameter. For example
X0 = fMin1D(.5, 17, 32, 1e-10, 0.8, @fun)
  댓글 수: 1
Tony Cheng
Tony Cheng 2025년 2월 12일
Hi Walter, pls see the attached screenshot:
there is a red waved line under the @ symbol...

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

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by