欢迎光临散文网 会员登陆 & 注册

Python气象数据处理中的数值微分和积分法——其二

2023-05-09 22:36 作者:Unlim-Succession  | 我要投稿

1.3 一般情况下的微分

对于一般情况下的微分计算,Numpy和Metpy模块等都提供了函数,这里我们以水平散度为例,差分形式的表达式为

div%3D%5Cfrac%7B%5CDelta%20u%7D%7B%5CDelta%20x%7D%20%2B%5Cfrac%7B%5CDelta%20v%7D%7B%5CDelta%20y%7D

1.3.1 Numpy(推荐)

Numpy模块提供了计算差分的函数numpy.gradient(f, axis, …),主要参数为

f:一个N维数组;

axis:f沿着axis的方向做差分。

返回f的差分,大小与f相同。


主要编程思路如下(三维数据):


1.3.2 Metpy

Metpy模块也提供了类似的函数metpy.calc.gradient(f, …),主要参数为

f:一个N维的数组,格式为dataarray时可以不填其他参数。

函数会识别f的坐标,返回其梯度,大小与f相同。

 

主要编程思路如下(三维数据):


综上,Metpy在差分时可能会自动对坐标进行变化,比如将经纬度变换为长度、将时间单位转为秒等;而Numpy仅做数值计算,需要自行变换坐标。Metpy虽然代码简单,但容易出错,更推荐使用Numpy计算差分。


2 数值积分法

Numpy、Xarray模块等提供了计算数值积分的函数,这里推荐Xarray的(简便且不易出错),以整层散度为例,表达式为

div%5C_int%3D%5Cint_%7Bps%7D%5E%7Bpt%7D%20%5C%20div%5C%20dp

Xarray自带的积分函数是基于梯形法则,如果积分轴上坐标密度较高,结果与样条法等应该差别不大。主要编程思路如下:

使用这个函数需要提前截取积分范围内的数据,因为函数不能选定积分范围;另外,如果对于空白的值(如地形以下的部分)需要设置为0,如果设置为nan,则积分结果也为nan(与NCL不同)。


That's all.

Python气象数据处理中的数值微分和积分法——其二的评论 (共 条)

分享到微博请遵守国家法律