如何在Matlab中计算两个同心圆与曲线y=x²的围合区域面积
Matlab求解两同心圆与抛物线围合区域面积实现方案
边界与交点前置计算
已知几何元素:
- 内圆:圆心在原点,半径5,方程为
x² + y² = 25 - 外圆:圆心在原点,半径10,方程为
x² + y² = 100 - 曲线:开口向上的抛物线
y = x²
三者围合的常规有效区域为同时满足环形约束 25 ≤ x²+y² ≤ 100 且位于抛物线上方(y ≥ x²)的区域,区域关于y轴对称,可先计算x≥0的半区面积再乘以2得到总面积。
先求解交点坐标:
- 抛物线与内圆交点:将
y=x²代入内圆方程得y² + y - 25 = 0,取正根y=(√101 -1)/2 ≈ 4.525,对应正x坐标x1=√y≈2.127 - 抛物线与外圆交点:将
y=x²代入外圆方程得y² + y - 100 = 0,取正根y=(√401 -1)/2 ≈ 9.512,对应正x坐标x2=√y≈3.084
Matlab实现代码
提供两种实现方式,按需选择即可:
方式1:符号积分(可输出解析表达式)
syms x y % 交点正x坐标 x1 = sqrt((sqrt(101)-1)/2); x2 = sqrt((sqrt(401)-1)/2); % 分两段计算x正半轴面积 % 第一段x∈[0, x1]:y下界为内圆上沿,上界为外圆上沿 area_half1 = int(int(1, y, sqrt(25-x^2), sqrt(100-x^2)), x, 0, x1); % 第二段x∈[x1, x2]:y下界为抛物线,上界为外圆上沿 area_half2 = int(int(1, y, x^2, sqrt(100-x^2)), x, x1, x2); % 对称加倍得到总面积 total_area = 2 * (area_half1 + area_half2); % 输出6位有效数字的数值结果 disp(['围合区域面积:', char(vpa(total_area, 6))])
方式2:数值积分(计算速度更快)
% 交点正x坐标 x1 = sqrt((sqrt(101)-1)/2); x2 = sqrt((sqrt(401)-1)/2); % 定义两段被积函数(上下边界的差值) f1 = @(x) sqrt(100 - x.^2) - sqrt(25 - x.^2); f2 = @(x) sqrt(100 - x.^2) - x.^2; % 数值积分计算半区面积 area_half1 = integral(f1, 0, x1); area_half2 = integral(f2, x1, x2); % 对称加倍得到总面积 total_area = 2 * (area_half1 + area_half2); disp(['围合区域面积:', num2str(total_area, 6)])
结果说明
运行代码可得到目标区域面积约为95.27,若需要计算环形中位于抛物线下方的围合区域,直接用环形总面积75π ≈ 235.62减去上述结果即可。
内容的提问来源于stack exchange,提问作者matlabbeginner
相关产品推荐
相关产品推荐

