o****r 发帖数: 57 | 1 如图, 两个圆,半径都为L,两个圆心相距r. 已知r
问两个圆重合部位的面积。
试图用积分进行计算,积分区定位以一个圆心为中心的圆弧。
Matlab指令:
function y=area(l,L,r)
if l>=(L-r)
y=2*acos((l.^2+r.^2-L^2)/(2*l.*r))*l;
else
y=2*pi*l;
end
******************************************
L=10;
r=6;
quad(@area,0,L,[],[],L,r);%wrong result
235.2635
quad(@area,0,L-r,[],[],L,r)+quad(@area,L-r,L,[],[],L,r);%correct answer
195.9851
我想知道,为何必须分段积分才能得到正确的答案? function area应该如何定义才能
不用分段积分也能得到正确答案??
谢谢!!
补充说明:正确答案可以用简单的几何原理“直接扇形面积减三角形面积,再乘2”得出, 不一定要用这个积分方法。但我是在搞某个课题时候需要用 | o****r 发帖数: 57 | 2 "为什么搞这么复杂? 直接扇形面积减三角形面积,再乘2 不就行了么"
呵呵,谢谢你的回答。
正确答案的确能通过“直接扇形面积减三角形面积,再乘2 ”得到。 其实我也是用这个
方法得出正确答案,然后再来看我的积分是否有问题的。
但我是在搞某个课题时候需要用这个积分方法,需要分析每个微分区内部的一些事件概率,然后算出在整个扇形内发生这些事件的平均概率,并不是为了单纯求这个扇形的面积。为了判断我这种积分方法是否正确,所以我先尝试用这种积分方法计算扇形面积。结果发现必须分段积分才能得到正确的结果。想知道是否不用分段积分而得到正确结果。 | p******h 发帖数: 1783 | 3 把函数里面的if给去掉,换成逻辑判断
function y=area(l,L,r)
y=2*acos((l.^2+r.^2-L.^2)./(2*l.*r)).*l .*(l>=(L-r)) + 2*pi*l .*(l<(L-r));
end
不过算出来的结果有一项较小的虚数项,再在function里面取实数
就行了
【在 o****r 的大作中提到】 : 如图, 两个圆,半径都为L,两个圆心相距r. 已知r: 问两个圆重合部位的面积。 : 试图用积分进行计算,积分区定位以一个圆心为中心的圆弧。 : Matlab指令: : function y=area(l,L,r) : if l>=(L-r) : y=2*acos((l.^2+r.^2-L^2)/(2*l.*r))*l; : else : y=2*pi*l; : end
| o****r 发帖数: 57 | |
|