将函数作为参数传递给MATLAB函数

时间:2012-10-05 06:05:13

标签: function matlab

  

可能重复:
  Passing a function as argument to another function

下面是二分法的简单代码。我想知道如何能够传入我选择的任何函数作为参数而不是硬编码函数。

% This is an implementation of the bisection method
% for a solution to f(x) = 0 over an interval [a,b] where f(a) and f(b)
% Input: endpoints (a,b),Tolerance(TOL), Max # of iterations (No).
% Output: Value p or error message.

function bjsect(a,b,TOL,No)
% Step 0
if f(a)*f(b)>0
    disp('Function fails condition of f(a),f(b) w/opposite sign'\n);
    return
end
% Step 1
i = 1;
FA = f(a);
% Step 2
while i <= No
    % Step 3
    p = a +(b - a)/2;
    FP = f(p);
    % Step 4
    if FP == 0 || (b - a)/2 < TOL
        disp(p); 
    return
    end
    % Step 5
    i = i + 1;
    % Step 6
    if FA*FP > 0
        a = p;
    else
        b = p;
    end
    % Step 7
   if i > No
       disp('Method failed after No iterations\n');
       return 
   end
end
end

% Hard coded test function
function y = f(x)
y = x - 2*sin(x);
end

我知道这是一个重要的概念,所以非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用anonymous functions。在您的示例中,您将使用以下内容在bjsect之外定义匿名函数:

MyAnonFunc = @(x) (x - 2 * sin(x));

您现在可以将MyAnonFunc作为参数传递给bjsect。它具有函数句柄的对象类型,可以使用isa进行验证。在bjsect内,只需使用MyAnonFunc,就好像它是一个函数,即:MyAnonFunc(SomeInputValue)

注意,您当然可以将您在匿名函数中编写的任何函数包装起来,即:

MyAnonFunc2 = @(x) (SomeOtherCustomFunction(x, OtherInputArgs));

完全有效。

编辑:哎呀,刚才意识到这几乎肯定是另一个问题的重复 - 感谢H. Muster,我会举报它。