爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6035|回复: 8

[经验总结] 非均匀格点差分公式

[复制链接]

新浪微博达人勋

发表于 2022-6-30 14:14:49 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 灰色节能君 于 2022-6-30 14:19 编辑

昨天在用 metpy 对垂直方向进行差分计算时发现计算出来的结果与自己编写的函数计算出的结果有一些差距,尤其是在边界上相差了20-30%。查看文档后发现,metpy 对非均匀格点差分方案与均匀格点差分有一些不同。


例如,我的想法是如果计算 偏u/偏p , 垂直方向有气压层1000,950,850,700,500。在边界上 1000hPa,使用前差则为 (u[1000] - u[950]) / (1000 - 950)
在内部 950hPa 上用中央差为 (u[1000] - u[850]) / (1000 - 850)


通常在各网站获取的数据,它们在xy方向是等格距的,而垂直方向上格距并不相同(50,100,150,200)


因此,在垂直方向上基于泰勒展开的三点中央差方案并不严格。


metpy 采用了以下论文给出的非均匀格点差分公式。即使是在边界上也使用的是如下图所示的三点差分,而不是通常用的两点前差和后差。
Bowen, M. K. and R. Smith, 2005: Derivative formulae and errors for non-uniformly spaced points. Proc. R. Soc. A, 461, 1975-1997,
doi:10.1098/rspa.2004.1430.

QQ截图20220630133049(1).png
QQ截图20220630133049.png


xi 是格点坐标,相对于1000,950,850,700,500。如果要计算1000hPa处差分,则 χ=1000。Bowen2005对每个格点根据格距赋予权重,并在每个格点进行泰勒展开。对于三点一阶差分,公式与三点中央差一样是二阶精度。而由于 metpy 在边界也采用的是三点格式而不是两点差分,所以造成了自己编写的函数结果与 metpy 结果在边界上有不小差距。

我不知道科研上究竟应该如何选择,垂直方向当做均匀格点进行两点前后差和三点中央差是不是能满足科研上对结果精度的需要?请大神指教!

其实以上公式并不复杂且非常严谨,如果传统差分方法能够满足需要,这篇帖子权当提醒大家 metpy 计算方法有所不同。











密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-6-30 22:15:03 | 显示全部楼层
棒,学习了
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-7-6 22:19:26 | 显示全部楼层
我感觉如果只是做诊断分析的话,两点的前后差应该精度就足够了吧
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-7-24 07:32:56 | 显示全部楼层
名字真难取 发表于 2022-7-6 22:19
我感觉如果只是做诊断分析的话,两点的前后差应该精度就足够了吧

              
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-7-24 10:21:42 | 显示全部楼层
是不是这类差分格式在边界上都有比较大的误差,以前没注意过这种问题
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-7-24 11:05:36 | 显示全部楼层
一夜荒原 发表于 2022-7-24 10:21
是不是这类差分格式在边界上都有比较大的误差,以前没注意过这种问题

边界常用的两点前差是一阶精度的,相比内部的中央差误差是大一些。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-10-29 10:12:55 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-10-29 14:21:45 | 显示全部楼层
内马尔 发表于 2022-10-29 10:12
http://bbs.06climate.com/forum.php?mod=viewthread&tid=104354

同学,你文档里写的这个公式计算方法与metpy所用的Bowen2005的公式还是不太一样的。即使在边界上例如1000hPa, 也是可以直接套用以上Bowen2005公式的。而你文档中是基于xi这个点做差分的,如果对xi-1这个边界点做差分,恐怕权重公式是另外一种形式。 你的文档中推导的一阶差分的权重公式分母应该是错了,至少wi-1 = -(xi) / (xi-1* (xi-1 + xi))。因为假设当xi-1 = xi 时,权重公式应该退化为等格距权重公式 wi-1 =  -1 / (2 * △x)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-10-29 15:10:22 | 显示全部楼层
灰色节能君 发表于 2022-10-29 14:21
同学,你文档里写的这个公式计算方法与metpy所用的Bowen2005的公式还是不太一样的。即使在边界上例如1000 ...

我那确实算错了刚才也在想两个距离相等的时候分母为啥是0了,现在改过来了。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表