忽略负值matlab积分

时间:2013-09-14 21:53:36

标签: matlab integral

基本上我想做的是

fun=@(x,y) x.*y
integral2(fun,-5,5,-5,5)

但是,我想忽略我的积分范围中x * y为负的部分。基本上,调整我的积分边界,使得x * y保证在整个范围内大于零。对于我给出的x * y示例,它很容易解决适当的边界,但我实际上正在处理一个更复杂的函数,它不是那么明显。

我的实际代码如下。我想在集成上选择边界,使“de”始终为正。有任何想法吗?谢谢!

tau=@(r) (tauMax+ r.*(tauMin-tauMax)/(radius));
d= @(r) (height^2+r.^2).^(.5);
cosTheta= @(r) height./ d(r);
cosXi= @(r,psi) -r.*cos(psi)*2^.5/2+height*2^.5/2;

de= @(r,psi) (Esun*tau(r)/pi).*cosTheta(r).*cosXi(r,psi)./(d(r)).^2;
integral2(de,0,275,0,360) 

1 个答案:

答案 0 :(得分:1)

当原始函数为负数时,更容易定义一个返回零的辅助函数,而不是更改域:

fun2=@(x,y) max(0,fun(x,y));
integral2(fun2,-5,5,-5,5);

在这种情况下,我们有

>> integral2(fun,-5,5,-5,5)
ans=
  -4.2633e-14
>> integral2(fun2,-5,5,-5,5)
ans=
  312.5000