扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
用蒙特卡洛方法计算定积分
创新互联专注于企业营销型网站建设、网站重做改版、肇东网站定制设计、自适应品牌网站建设、H5建站、商城开发、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为肇东等各大城市提供网站开发制作服务。
计算定积分
利用蒙特卡洛计算方法,核心步骤是求取随机的 g(X1),………,g(Xn),n∈[a,b],由数学期望和大数定理可以近似计算定积分,公式为
原函数:
导函数:
计算导函数在[10,15]上的定积分;
Python
用蒙特卡洛方法计算的定积分:
直接用原函数计算的定积分:
偏差程度为:
需要加载一下math库,math.pi是π,r是球半径。
体积:
4/3 * math.pi * r**3
表面积:
4 * math.pi * r**2
1、print()函数:打印字符串;
2、raw_input()函数:从用户键盘捕获字符;
3、len()函数:计算字符长度;
4、format()函数:实现格式化输出;
5、type()函数:查询对象的类型;
6、int()函数、float()函数、str()函数等:类型的转化函数;
7、id()函数:获取对象的内存地址;
8、help()函数:Python的帮助函数;
9、s.islower()函数:判断字符小写;
10、s.sppace()函数:判断是否为空格;
11、str.replace()函数:替换字符;
12、import()函数:引进库;
13、math.sin()函数:sin()函数;
14、math.pow()函数:计算次方函数;
15、os.getcwd()函数:获取当前工作目录;
16、listdir()函数:显示当前目录下的文件;
17、time.sleep()函数:停止一段时间;
18、random.randint()函数:产生随机数;
19、range()函数:返回一个列表,打印从1到100;
20、file.read()函数:读取文件返回字符串;
21、file.readlines()函数:读取文件返回列表;
22、file.readline()函数:读取一行文件并返回字符串;
23、split()函数:用什么来间隔字符串;
24、isalnum()函数:判断是否为有效数字或字符;
25、isalpha()函数:判断是否全为字符;
26、isdigit()函数:判断是否全为数字;
27、 lower()函数:将数据改成小写;
28、upper()函数:将数据改成大写;
29、startswith(s)函数:判断字符串是否以s开始的;
30、endwith(s)函数:判断字符串是否以s结尾的;
31、file.write()函数:写入函数;
32、file.writeline()函数:写入文件;
33、abs()函数:得到某数的绝对值;
34、file.sort()函数:对书数据排序;
35、tuple()函数:创建一个元组;
36、find()函数:查找 返回的是索引;
37、dict()函数:创建字典;
38、clear()函数:清楚字典中的所有项;
39、copy()函数:复制一个字典,会修改所有的字典;
40、 get()函数:查询字典中的元素。
…………
对于气象绘图来讲,第一步是对数据的处理,通过各类公式,或者统计方法将原始数据处理为目标数据。
按照气象统计课程的内容,我给出了一些常用到的统计方法的对应函数:
在计算气候态,区域平均时均要使用到求均值函数,对应NCL中的dim_average函数,在python中通常使用np.mean()函数
numpy.mean(a, axis, dtype)
假设a为[time,lat,lon]的数据,那么
需要特别注意的是,气象数据中常有缺测,在NCL中,使用求均值函数会自动略过,而在python中,当任意一数与缺测(np.nan)计算的结果均为np.nan,比如求[1,2,3,4,np.nan]的平均值,结果为np.nan
因此,当数据存在缺测数据时,通常使用np.nanmean()函数,用法同上,此时[1,2,3,4,np.nan]的平均值为(1+2+3+4)/4 = 2.5
同样的,求某数组最大最小值时也有np.nanmax(), np.nanmin()函数来补充np.max(), np.min()的不足。
其他很多np的计算函数也可以通过在前边加‘nan’来使用。
另外,
也可以直接将a中缺失值全部填充为0。
np.std(a, axis, dtype)
用法同np.mean()
在NCL中有直接求数据标准化的函数dim_standardize()
其实也就是一行的事,根据需要指定维度即可。
皮尔逊相关系数:
相关可以说是气象科研中最常用的方法之一了,numpy函数中的np.corrcoef(x, y)就可以实现相关计算。但是在这里我推荐scipy.stats中的函数来计算相关系数:
这个函数缺点和有点都很明显,优点是可以直接返回相关系数R及其P值,这避免了我们进一步计算置信度。而缺点则是该函数只支持两个一维数组的计算,也就是说当我们需要计算一个场和一个序列的相关时,我们需要循环来实现。
其中a[time,lat,lon],b[time]
(NCL中为regcoef()函数)
同样推荐Scipy库中的stats.linregress(x,y)函数:
slop: 回归斜率
intercept:回归截距
r_value: 相关系数
p_value: P值
std_err: 估计标准误差
直接可以输出P值,同样省去了做置信度检验的过程,遗憾的是仍需同相关系数一样循环计算。
球谐函数在图形学光照计算等领域有着重要应用,因为目前在实际工作中接触较少,所以对其的理解仅仅停留在表面,本着越是基础的东西,其重要性越高的想法,特此开篇文章对其背后的数学理论进行拆解,拆解过程参考了大量其他同学的工作,相应链接在文末的参考文献中有列出,引用过程中如有表述不清晰的内容,可以通过原文辅助阅读。
调和函数指的是一种特殊的二阶连续可导函数(简称C2,在某个定义域存在二阶导数,且二阶导数连续),数学符号用 表达,其中 是 (表示n维实数域)的一个开子集(相当于一维数据空间中的开区间),其特殊在于需要满足拉普拉斯方程(下面有介绍),用(笛卡尔坐标系下)数学表达式来描述的话,就是对于任意 ,需要满足如下的二阶偏微分方程:
这里来回顾一下微分方程的相关知识,单个变量下,也就是一元变量情况下,函数与函数各阶导数组成的微分方程叫做常微分方程:
多元函数而言,函数以及函数对各个自变量的各阶偏导数组成的微分方程叫做偏微分方程:
这个公式也经常以如下的形式出现( 称为拉普拉斯算子, 称为向量微分算子,也就是nabla算子):
其中 叫做拉普拉斯算子,光看定义太抽象,我们来举个例子吧,下面两个函数都是二元的调和函数:
拉普拉斯方程也被称为调和方程、位势方程,这是一种偏微分方程,因为其可以用势函数的形式来描述电磁场、引力场、流场(统称为保守场或者有势场)的性质而被广泛应用。
笛卡尔坐标系下的表述形式前面已经写过了,下面给出球面坐标系下的拉普拉斯方程表述形式:
这个方程也常用如下的简化形式来代替:
或者
其中div指的是向量场(指的是空间中的每一点都有一个对应的带长度的向量)的散度(divergence),grad表示的是标量场的梯度(gradient)。
散度是向量分析中常用的向量算子,用于实现向量场到标量场的转换映射,也就是说,经过散度算子处理后,得到的是一个标量场(每一点有一个不带方向的数值)。以静电场为例,空间中的电场强度是一个向量场,电场线正出负归,在正电荷附近,对应的散度为正值,且电荷带电量越大,散度越大,负电荷附近则反之,其散度为负值,且电荷带电量越大,散度绝对值越大。更为通用的概括是,散度可以看成是向量场在某一点的通量密度,当散度大于0的时候,就表示该点有流量留出,此时这一点可以被称为源点,当散度小于0的时候,表示此点有流量流入,此时此点被称为汇点,散度为0,表示该点无流入也无流出,如果整个向量场的散度都是0,那么这个向量场可以称为无源场。
对于某个向量场 而言,其散度可以通过如下公式求得:
梯度是对多元函数的导数的一种描述,单元函数(只有一个自变量)的导数是标量值函数,而多元(多个自变量)函数的导数则是一个向量值函数,这里多元函数的导数,我们也称为多元函数的梯度,多元函数f在点P处的梯度指的是以f在P处的偏微分作为分量的向量,如一个三维空间函数 ,其梯度函数可以用如下的形式来表述:
单元函数的导数对应的是函数在某一点切线的斜率,对应到梯度上,如果多元函数在某点P的梯度不为0的话,那么计算出来的梯度方向指的是这个函数在P点处增长最快的方向(超平面的切线),而梯度的长度则是函数在此点处的增长率(超平面的斜率)。
举个例子,如果某个房间内的温度用一个函数来表示,那么这个函数在三维空间中的梯度就对应于房间中某点处温度上升最快的方向,而其长度则对应于温度增长率。
可以看到,一个多元函数的标量场,经过梯度转化后,得到的是一个向量场。
从调和函数的定义我们可以看到,所谓的调和函数,实际上就是拉普拉斯方程的解,而我们日常所说的球谐函数(Spherical Harmonics Function)实际上就是拉普拉斯方程在球坐标系空间下的解。
拉普拉斯方程是一个偏微分方程,而解偏微分方程常用的策略是分离变量法,即将偏微分方程分解成几个常微分方程进行求解,下面我们通过将半径跟角度进行分离来进行求解。
设 ,将之代入前面的拉普拉斯方程,可以得到:
上面公式乘上 之后可以得到:
对于上面公式中后面的等式,我们继续使用分离变量法,令(这里是假设Y具有可以分离的形式,当然这个假设不是必然成立的,只是为了简化计算而给出的,只有一些特殊的函数才具有这种假设的可分离的形式) ,代入前面公式可以得到:
简化后,令左右两边均等于 ,可以得到:
一个先验知识是m是一个复数常量(怎么得到的?),且由于 是一个周期函数,其周期可以整除 ,因此m就会是一个整数,而 则是复数指数 的线性组合,Y的常规解出现在极点,也就是 的时候,而在上面的第二个方程中求解 时的常规状态出现在Sturm-Liouville problem的边界点上,在这个边界点中会将 ,其中l是非负整数,且 ,此外,将上面公式中的 用t来替代,就能够得到勒让德公式(Legendre equation),而勒让德公式的解就是伴随勒让德多项式 的倍数。
对于满足前面假设的Y,对于给定的 ,我们总共有 个独立解,这些角度上的解可以表示为三角函数的乘积,这里可以用复数指数与伴随勒让德多项式来表示:
其中这个解需要满足:
上述公式中的 就被称为一个m阶(order)l度(degree)的球谐函数, 就是一个伴随勒让德多项式,N是一个归一化的常量, 则代表着球上的经纬度
所有的球谐函数组成了一组正交基,所谓的正交基指的是,两两基函数相乘的积分只有当两个基函数是同一个基函数的情况下结果为1,否则为0。
上图给出了不同的SH基函数的几何形状展示,这个图是通过以方向为自变量,到球心的距离作为因变量绘制的。
而其他函数都可以通过使用不同系数来对SH基函数进行线性组合来实现近似模拟,这个过程有点像是周期函数的傅里叶展开。
未完待续……
[1] Rendering-球谐光照推导及应用
[2] 调和函数
[3] 拉普拉斯方程
[4] 散度
[5] 梯度
[6] Spherical harmonics
[7]. Laplace's equation
向量球谐函数(Vector spherical harmonics)是应用于球坐标系的拉普拉斯方程式的向量解,是球谐函数的向量衍伸形式。在必须计算向量场的电动力学等领域中被广泛应用。
定义
在球坐标系下,拉普拉斯算符作用在一三维向量场上可以写为
利用分离变数法可以将此一方程式的解分解为一系列本征函数的线性组合
其中的径向解与标量球谐函数相同,而为一与角度相关的向量解,也就是向量球谐函数。
向量球谐函数依用途有很多定义方式。这边我们依照 Barrera 等人的定义,以对球谐函数Yℓm(θ, φ)为基础,将三个向量球谐函数表示为
这边是对应球座标 (r, θ, φ) 的向量,而则为其单位向量。
主要特性
依照上述 Barrera 的定义,向量球谐函数有以下特性:
对称性
与球谐函数相同,向量球谐函数有对称性
星号 * 代表共轭函数。
正交性
三种向量球谐函数彼此两两正交
另外同种类的球谐函数的内积为:
标量场的梯度
对一个标量场,若其多极展开可表示为:
则其梯度可以向量球谐函数表示为:
散度
三种向量球谐函数之散度分别为:
其中为球谐函数之径向分布,为球谐函数。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流