matlab2013中如何求解被积函数为分段函数的二重积分?

∫0 10∫0 20 f(x,y,1)*f(x,y,2)*f(x,y,....10) dxdy,(0,10),(0,20)分别为积分上下限。
被积函数为的i从1到10 f(x,y,i)的求积,
且function a=f(x,y,i)
if(sqrt(x^2+y^2)*i<=2) a=1;
if(sqrt(x^2+y^2)*i>2) a=0;
本人是新手,请高手指点迷津,非常着急,万分感激!

参考代码:

function zd1766370457469573620
dblquad(@f10,0,10,0,20)

function b=f10(x,y)
b = 1;
for i=1:10
    b = b .* f(x,y,i);
end

function a=f(x,y,i)
a = sqrt(x.^2+y.^2)*i <= 2;

求得结果:

ans =
    0.0314

追问

谢谢您的回答,
要是:
if(sqrt(x^2+y^2)*i2) a=0;

修改为:
if(sqrt(x^2+y^2)*i2) a=20;
您这样的解法就不适用的!还有别的解法吗?

追答

像这种二值的函数都是可以的,例如,对你举的例子,可以改成:

a = 20 - 10*(sqrt(x.^2+y.^2)*i <= 2);

当然,这种做法对于多值的情况就不太适用了,那种情况下可以用判断语句处理,或者类似下面这样:

a = (x+y)*0 + 20;
a(sqrt(x.^2+y.^2)*i <= 2) = 10;

应该指出的是,这个例子的函数值太大(超过10^10),用默认的设置计算会导致迭代超过10000次,导致大量的警告信息。可通过设置较大的误差限来避免:

dblquad(@f10,0,10,0,20,1e5,@quadl)

求得结果大约为

ans =
   2.0293e+15

温馨提示:答案为网友推荐,仅供参考