我需要在很多方面计算积分。所以,
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检测到它没有定义所有参数时,它会带来一些错误。
答案 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
,其中r
和theta
的值被捕获为参数,k
和theta
仍然是参数。这个概念在计算机科学中被称为closure。
如果您希望将整个事物转换为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)
致电。当然,你也可以使用普通函数(通常更快,让其他人更容易理解你的代码)。