data = Block[{a1, a2, a3, arng, r1, r2, r3, rrng},
arng = {0, 2 \}; rrng = {0, 1};
Table[
NExpectation[
sTriangle[{a1, a2, a3}, {Sqrt, Sqrt, Sqrt}],
{a1 \ UniformDistribution,
a2 \ UniformDistribution,
a3 \ UniformDistribution,
r1 \ UniformDistribution,
r2 \ UniformDistribution,
r3 \ UniformDistribution},
Method -> "MonteCarlo"],
1000](*运算 1000 次仿真*)
];
结果为:\(\mu=0.232106\) 、\(\sigma=0.000198953\) 。
单位圆内任意三角形面积的期望值估计为 0.232106。 https://math.stackexchange.com/questions/1243160/expected-area-of-triangle-formed-by-three-random-points-inside-unit-circle
从单位面积的正m边形内部独立、随机地选出三个点,则三点形成的三角形的面积的期望有以下公式 majer 发表于 2026-5-4 16:05
从单位面积的正m边形内部独立、随机地选出三个点,则三点形成的三角形的面积的期望有以下公式
\(\lim_{m \to \infty} \frac{9\cos^2\omega+52\cos\omega+44}{36m^2\sin^2\omega}=\frac{35}{48\pi^2}\)
乘上单位圆面积 \(\pi\) 得 \(\frac{35}{48\pi}\) 快一些的蒙特卡洛方法:
n=10^7;
0.5 Abs[(#1-#3)(#4-#6)-(#2-#4)(#3-#5)]&@@Transpose,{n,3}],{n,6}]]//Mean//AbsoluteTiming
0.23215
耗时1秒左右 majer 发表于 2026-5-4 16:05
从单位面积的正m边形内部独立、随机地选出三个点,则三点形成的三角形的面积的期望有以下公式
学习学习!!!
\(\D\lim_{m\to\infty}\frac{9\cos^2(2\pi/m)+52\cos(2\pi/m)+44}{36m^2\sin^2(2\pi/m)}=\lim_{m\to\infty}\frac{9*1^2+52*1+44}{36m^2(2\pi/m)^2}=\frac{9+52+44}{36(2\pi)^2}=\frac{105}{144\pi^2}=\frac{35}{48\pi^2}\) 我们有
单位圆内任取3个点构成三角形面积=0.232
可以往前走吗???
单位圆内任取4个点构成凸包的面积=0.296
单位圆内任取5个点构成凸包的面积=0.338——???
单位圆内任取6个点构成凸包的面积=0.369——???
单位圆内任取7个点构成凸包的面积=0.393——???
单位圆内任取8个点构成凸包的面积=0.413——???
单位圆内任取9个点构成凸包的面积= ?? ——???
单位圆内任取无限多个点构成凸包面积=1.0——??? 各位!这代码错在那里??谢谢各位!!!
{{3, 0.225045}, {4, 0.462183}, {5, 0.66083}, {6, 0.826997}, {7, 0.97415}, {8, 1.09881}, {9, 1.22222}, {10, 1.3246}, {11, 1.3999}, {12, 1.49023}, {13, 1.54949}, {14, 1.61062}, {15, 1.65932},
{16, 1.71313}, {17, 1.76778}, {18, 1.80131}, {19, 1.83594}, {20, 1.87825}, {21, 1.92483}, {22, 1.94676}, {23, 1.97752}, {24, 2.00061}, {25, 2.03386}, {26, 2.05089}, {27, 2.08}, {28, 2.10234}}
generatePoint := RandomPoint, n]; hullPolygon := MeshPrimitives, 2][]; hullArea := Area];
expectedArea := Mean], {samples}]]; Table[{n, expectedArea}, {n, 3, 28}]
提速一下。——代码没变。
generatePoint := RandomPoint, n]; hullPolygon := MeshPrimitives, 2][]; hullArea := Area];
expectedArea := Mean], {samples}]]; Table[{3^n, expectedArea}, {n, 12}]
{{3, 0.220445}, {9, 1.22915}, {27, 2.07739}, {81, 2.60394}, {243, 2.87862}, {729, 3.0119}, {2187, 3.07887}, {6561, 3.11126}, {19683, 3.12706}, {59049, 3.13456}, {177147, 3.13821}, {531441, 3.13997}}
特别地,n=1000000。——代码没变。
generatePoint := RandomPoint, n]; hullPolygon := MeshPrimitives, 2][]; hullArea := Area];
expectedArea := Mean], {samples}]]; Table[{n, expectedArea}, {n, 1000000, 1000000}]
{{1000000, 3.14052}}
(*1. 生成圆内均匀随机点*)generatePoint := RandomPoint, n];
(*2. 获取凸包多边形*)hullPolygon := MeshPrimitives, 2][];
(*3. 计算凸包面积*)hullArea := Area];
(*4. 蒙特卡洛期望*)expectedArea := Mean], {samples}]];
(*5. 计算 n=3 到 28,全部模拟*)Table[{n, expectedArea}, {n, 3, 28}]
DeepSeek——说上面的代码是错的。下面的代码才是正确的——会出来正确数据。——我这个Mathematica12.1不能用。——我就想看看这些数据!谢谢各位!!谢谢!!!
python
import numpy as np
from scipy.spatial import ConvexHull
def expected_area(n, samples=200000):
total = 0.0
for _ in range(samples):
# 单位圆内均匀取点
theta = np.random.uniform(0, 2*np.pi, n)
r = np.sqrt(np.random.uniform(0, 1, n))
pts = np.column_stack()
if n == 3:
area = 0.5 * abs(np.cross(pts-pts, pts-pts))
else:
hull = ConvexHull(pts)
area = hull.volume# 在2D中volume指面积
total += area
return total / samples
for n in range(3, 11):
print(f"n={n}: {expected_area(n):.4f}") 单位圆内任取4个点构成的面积=0.296——来点资料——我的搜索功能不行——谢谢各位!!!!
页:
1
[2]