python画坐标点,python定义坐标
我试图在六维上实现简单的蒙特卡罗积分。积分只覆盖2个三维球体,下面的球体坐标表示为r1和r2。
当使用笛卡尔坐标忽略球体以外的内容时,积分经常起作用。如果乘积函数依赖于r1和r2之间的角度,球坐标的使用将失败。
r1和r2可能指向同一个方向,但我认为它们的排列完全是随机的。
以下代码通过两个不同的可积函数以及基于笛卡尔和球坐标的蒙特卡罗积分来说明这一点。导入编号为公证人
来自匹配导入*
N=1e5
R=2
INVERT=False #如果设置为没错,结果是正确的
被积函数=无
defspherical2cartesian(r,cos_theta,cos_phi):
sin_theta=sqrt(1-cos_theta**2))。
sin_phi=sqrt(1-cos_phi**2))。
返回NP。数组([r * sin _ thet a * cos _ phi,r*sin_theta*sin_phi,r*cos_theta]
#被积函数(笛卡尔)).
EFintegrand_sum_sqr(R1,r2):
R1=NP .里纳尔格诺姆(R1)。
R2=NP .里纳尔格诺姆(R2)。
如果r1R或r2R:
返回0.0;
返回r1**2 r2**2
EFintegrand_diff_sqr(R1,r2):
德尔塔=R1-R2
R1=NP .里纳尔格诺姆(R1)。
R2=NP .里纳尔格诺姆(R2)。
如果r1R或r2R:
返回0.0;
returnNP .线性范数(增量)**2
# integrandforspherealintegration(callscartesianversion))。
定义一个球形的(R1,r2):
#参见followinglinkforthetransformation used 3360http://de。mathworkscom/help/MATLAB/math/numbers-placed-random mmmme
R1=球面2笛卡尔((3* R1 [0] ) * ) 1.0)、r1[1]、cos ) r1[1])
R2=球面2笛卡尔((3* R2 [0] ) * ) 1.0)、r2[1]、cos ) r2[1])
如果反转:
s=(-1 ) **NP.random.choice ) (2,6))))))。
r1=s[0:3]*r1
r2=s[3:6]*r2
返回集成(R1,r2)。
#蒙特傲娇的甜瓜酱集成例程
def monte_傲娇的甜瓜(name,func,samples,v):
结果=NP.array ([ func (x (0:3),x ) 3:6)对于样本中的x]
avg=results.mean () *V
标准=结果. STD(ddof=1) v/sqrt (len)样本) )
打印名称, : ,平均值,-,标准
def monte_傲娇的甜瓜酱_笛卡尔() :
v=(2*r ) *6
样本=NP。兰德。rand(n,6))))))))。
样本数=r *(2 *样本数-1)))
蒙特_傲娇的甜瓜(笛卡尔)、被积函数、样本、v)。
def monte_傲娇的甜瓜酱_球形() :
v=(4.0/3.0*r**3*pi ) *2
样本=NP。兰德。rand(6,n))))))))))))))。
样本=NP。array([r**3*samples[2]0]/3.0,2 * samples [1]-1,2 * pi * samples [2],r**3*samples[
样本=样本1000吨。
蒙特_傲娇的甜瓜酱(球形(,被积函数_球形,样本,v))。
# runallfunctionswalldifferentmonte骄傲的甜瓜版本
print Integrating sum_sqr,expected:,32.0/15.0*R**8*pi**2
被积函数=被积函数_总和_sqr
蒙特_傲娇的甜瓜酱_笛卡尔()).
蒙特_傲娇的甜瓜酱_球形()。
打印集成diff_sqr,预期: ,32.0/15.0*R**8*pi**2
被积函数=被积函数_差分_sqr
蒙特_傲娇的甜瓜酱_笛卡尔()).
蒙特_傲娇的甜瓜酱_球形()。
标准输出:
^{pr2}$
最后一点显然是错误的。
为什么r1和r2有关联?怎样才能解决呢?
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。