我如何评估圆的交点体积和直线上方的面积。我也想申请。 - Python
How can I evaluate the intersection's volume of a circle and the area above a line. I also would like to apply it. - Python
这是在使用 Python。
我尝试post一张图片,但是失败了...所以可能很难理解。
圆内(圆心为(0, 0),半径为1)与直线(y = x)上方的交点称为黄色部分。
我想用随机数计算黄色部分的面积,没有for语句或while语句,但我不知道该怎么做。
另外,我也把它应用到3-D.That是,椭圆里面的一部分(2x^2+3y^2+z^2-4=0)和上面的一部分的交集平面(x+y+2z-1=0)。但这是一个额外的问题。如果我能在二维中做到这一点就很容易了。
我想计算我实验中的一些体积。我已经尝试了我的一些代码,但它们不起作用。
如果您能回答我的问题,我将不胜感激。
我码了什么↓
import numpy as np
size = 10000
if y - x > 0:
x = np.random.uniform(-1, 1, size)
y = np.random.uniform(-1, 1, size)
area = x**2 + y**2
print(len(area[area < 1])/size)
黄色部分的面积应该是这段代码所期望的。
好吧,要在没有 for 语句或 while 语句的情况下执行此操作意味着您必须使用 NumPy 向量功能。这是代码,它在单位圆内均匀采样,计算 y=x
行上方的点数并打印区域。
import numpy as np
N=100000 # number of trials
# sampling uniformly in the circle
angle = 2.0 * np.pi * np.random.random(N)
radius = np.sqrt(np.random.random(N))
x = radius * np.cos(angle)
y = radius * np.sin(angle)
t = np.where(y > x)[0]
print(np.pi * len(t)/float(N))
它打印出 1.5705135834560735
,大约是 π/2。
你在错误的地方设置了 y-x > 0 条件。
import numpy as np
size = 10000
# Generate random x and y in the square ((-1, -1) (1, 1))
x = np.random.uniform(-1, 1, size)
y = np.random.uniform(-1, 1, size)
area = x*x + y*y
# Move the y-x conditional into the boolean array.
print(len(area[np.logical_and(area < 1, (y-x)>0)])/size)
# The logical and of the points inside the circle and those where y>x.
0.3963
这为您提供了要计算的区域中点的比例。
正方形的面积 = 4。
圆和gt中的比例 y-x= 0 .3963
4*.3963 = 1.5852 足够接近预期的 pi/2。
一个想法是识别每个集合中的点。 np.where 对此有帮助:
size=10000
x,y = 2*np.random.rand(2,size)-1 # random points in a square
circle= np.where( x*x+y*y<=1)
xc,yc=x[circle],y[circle] # points in circle
half_circle = np.where(yc<xc)
xh,yh= xc[half_circle],yc[half_circle] # points in half circle
from pylab import scatter
scatter(x,y,c='red')
scatter(xc,yc,c='blue')
scatter(xh,yh,c='yellow',s=1)
print(len(xh)/size)
#0.39441
这是在使用 Python。
我尝试post一张图片,但是失败了...所以可能很难理解。
圆内(圆心为(0, 0),半径为1)与直线(y = x)上方的交点称为黄色部分。
我想用随机数计算黄色部分的面积,没有for语句或while语句,但我不知道该怎么做。
另外,我也把它应用到3-D.That是,椭圆里面的一部分(2x^2+3y^2+z^2-4=0)和上面的一部分的交集平面(x+y+2z-1=0)。但这是一个额外的问题。如果我能在二维中做到这一点就很容易了。
我想计算我实验中的一些体积。我已经尝试了我的一些代码,但它们不起作用。 如果您能回答我的问题,我将不胜感激。
我码了什么↓
import numpy as np
size = 10000
if y - x > 0:
x = np.random.uniform(-1, 1, size)
y = np.random.uniform(-1, 1, size)
area = x**2 + y**2
print(len(area[area < 1])/size)
黄色部分的面积应该是这段代码所期望的。
好吧,要在没有 for 语句或 while 语句的情况下执行此操作意味着您必须使用 NumPy 向量功能。这是代码,它在单位圆内均匀采样,计算 y=x
行上方的点数并打印区域。
import numpy as np
N=100000 # number of trials
# sampling uniformly in the circle
angle = 2.0 * np.pi * np.random.random(N)
radius = np.sqrt(np.random.random(N))
x = radius * np.cos(angle)
y = radius * np.sin(angle)
t = np.where(y > x)[0]
print(np.pi * len(t)/float(N))
它打印出 1.5705135834560735
,大约是 π/2。
你在错误的地方设置了 y-x > 0 条件。
import numpy as np
size = 10000
# Generate random x and y in the square ((-1, -1) (1, 1))
x = np.random.uniform(-1, 1, size)
y = np.random.uniform(-1, 1, size)
area = x*x + y*y
# Move the y-x conditional into the boolean array.
print(len(area[np.logical_and(area < 1, (y-x)>0)])/size)
# The logical and of the points inside the circle and those where y>x.
0.3963
这为您提供了要计算的区域中点的比例。
正方形的面积 = 4。
圆和gt中的比例 y-x= 0 .3963
4*.3963 = 1.5852 足够接近预期的 pi/2。
一个想法是识别每个集合中的点。 np.where 对此有帮助:
size=10000
x,y = 2*np.random.rand(2,size)-1 # random points in a square
circle= np.where( x*x+y*y<=1)
xc,yc=x[circle],y[circle] # points in circle
half_circle = np.where(yc<xc)
xh,yh= xc[half_circle],yc[half_circle] # points in half circle
from pylab import scatter
scatter(x,y,c='red')
scatter(xc,yc,c='blue')
scatter(xh,yh,c='yellow',s=1)
print(len(xh)/size)
#0.39441