我有以下函数,它使用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)
,但这不起作用
答案 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)