我需要计算很多点的积分。所以,
f = f(r,theta,k,phi);
q =integral2(f,0,1,0,2*pi,'AbsTol',0,'RelTol',1e-10); % integration should be by k and phi
我希望 q 是 r 和 theta 的函数,我可以随时调用它来计算给定 r 和 theta 点的积分。我怎样才能做到这一点? 问题是我无法使用不定@函数或matlabFunction()方法,因为似乎积分是先完成的,当Matlab检测到它没有定义所有参数时,它会带来一些错误。
这就是您要找的吗(我仍然不知道
f
返回什么)?:
r = ... % Define
theta = ... % Define
g = @(k,phi)f(r,theta,k,phi); % g is now a function of k and phi
q = integral2(g,0,1,0,2*pi,'AbsTol',0,'RelTol',1e-10);
这将创建一个匿名函数
g
,其中 r
和 theta
的值被捕获为参数,并且 k
和 theta
仍然是参数。这个概念在计算机科学中被称为“闭包”。
如果你想将整个事情变成一个由 r
和
theta
组成的函数并返回 q
,你可以创建以下匿名函数:q = @(r,theta)integral2(@(k,phi)f(r,theta,k,phi),0,1,0,2*pi,'AbsTol',0,'RelTol',1e-10);
您可以使用
q(r,theta)
拨打电话。当然,您同样可以只使用普通函数(通常更快,并且使您的代码更容易被其他人理解)。