在Matlab中传递函数句柄的默认参数

时间:2015-10-09 22:41:49

标签: matlab

说我有以下功能

function y = f(x,a)
    if nargin < 2
        a = 2;
    end
    y = x.^2 - a;
end

我有另一个通过牛顿方法找到根的函数。说这是我调用方法的方式:

newton(@f,@df,x0)

如果我使用提供的参数运行newton函数,那么它只会运行默认值a = 2.

我想知道是否有可能在通过函数句柄发送函数时为函数指定默认参数。比如这样

newton(@f(a),@df,x0)

1 个答案:

答案 0 :(得分:3)

如果您的意思是and another,那么它需要一个单变量函数。您仍然可以使用双变量函数f,但必须要棘手:您需要定义一个新的匿名函数,并使用变量a作为参数:

a = 3; %or any other specific value, have to be set before calling newton
newton(@(x) f(x,a),@df,x0)

如果您发现更透明,您也可以在单独的步骤中执行此操作:

f_uni = @(x) f(x,a); %defines f_uni(x), "a" is a parameter to it
newton(f_uni,@df,x0);

请注意,在这种情况下,f_uni已经是一个功能句柄,因此您不必(并且不得)在其前面添加@