如何编写包含数值积分的函数?

时间:2014-02-17 15:21:03

标签: matlab integration

我需要在很多方面计算积分。所以,

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点的积分。我怎样才能做到这一点? 问题是我无法使用indefinite @函数或matlabFunction()方法,因为似乎首先完成了集成,当Matlab检测到它没有定义所有参数时,它会带来一些错误。

1 个答案:

答案 0 :(得分:2)

这就是你要找的东西(我仍然不知道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,其中rtheta的值被捕获为参数,ktheta仍然是参数。这个概念在计算机科学中被称为closure

如果您希望将整个事物转换为rtheta的函数,并返回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)致电。当然,你也可以使用普通函数(通常更快,让其他人更容易理解你的代码)。