调用具有多变量函数的函数

时间:2015-07-27 08:35:35

标签: matlab function

我有以下函数,它使用Newton-Raphson找到函数的零:

function [ x,i ] = nr_function( x0,f,fp )

N   = 15;
eps = 1e-5;

x=x0;
for i=0:N
    if( abs(f(x))<eps )
        return;
    end

    x=x-f(x)/fp(x);
end

我可以这样调用函数:

f = @(x) x.^3-1
fp = @(x) 3*x.^2
nr_function(3, f,fp)

然而,假设我改为定义我的函数,即取2个变量:

f = @(x, q) q*x.^3-1
fp = @(x, q) q*3*x.^2

那么我怎样才能用f和fp调用nr_function?我试过了nr_function(3, f,fp),但这不起作用

1 个答案:

答案 0 :(得分:2)

如果在致电q时定义了nr_function,则可以在通话中使用匿名功能。执行此操作时,您传递的参数是 new 函数句柄,其中包含变量x和常量q

f  = @(x, q) q*x.^3-1
fp = @(x, q) q*3*x.^2

q = 1;

nr_function(3, @(x)f(x,q), @(x)fp(x,q))

注意:您无需在匿名函数中使用变量x。唯一重要的是最终只有一个参数。所以我们可以使用例如y作为中间变量,如下所示:

nr_function(3, @(y)f(y,q), @(y)fp(y,q))

如果我们将它扩展为多行,它将如下所示:

f  = @(x, q) q*x.^3-1
fp = @(x, q) q*3*x.^2

q = 1;

f2  = @(y) f(y,q)
fp2 = @(y) fp(y,q)

nr_function(3, f2, fp2)