【气候模式降尺度】分位数增量映射(QDM)原理及MATLAB代码实现

2024-02-26 11:40

本文主要是介绍【气候模式降尺度】分位数增量映射(QDM)原理及MATLAB代码实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分位数增量映射(quantile delta mapping, QDM)

  • 1 QDM偏差订正原理
  • 2 MATLAB实现代码
  • 3 案例
  • 参考

气候模式的模拟结果与观测数据往往存在着一定的系统偏差,若将气候模式结果直接应用于作物模型或者水文模型中,其偏差会对模拟产生很大的影响,因此需要对气候模拟结果进行误差订正。
常用的误差订正方法是分位数映射方法(QuantileMapping, QM)。在建模时段内,计算观测的累计概率分布函数(Cumulative Distribution Function,CDF),并通过构建的传递函数(Transfer Function, TF)使模式数据的CDF 与观测尽量接近。
虽然QM 方法能够有效地减少模式的偏差,不仅对平均值、年际变化还对极端事件的偏差情况有所改善,但QM 可能会人为地改变气候变化信号,如改变模式预估的未来气候趋势。
目前有越来越多的研究去开发保留趋势的误差订正方法,如delta 分位数映射方法(Quantile Delta Mapping, QDM)。本博客主要介绍delta 分位数映射方法(QDM)。

1 QDM偏差订正原理

论文-J2016-Bias Correction of GCM Precipitation by Quantile Mapping How Well Do Methods preserve changes in quantiles and extreme

分位数映射(Quantile mapping, QM)偏差订正法对历史时期模式与观测降水的分布函数建立关系,并假定此关系同样适用于未来时期,忽略了模式模拟降水的未来趋势特征。
而去趋势分位数映射法(DQM)仅考虑了模式模拟降水均值的相对变化。分位数增量映射(Quantile delta mapping, QDM)法可以弥补传统分位数函数偏差订正方法的不足,其主要思想是:
(1)计算某一时间段内模式与观测降水的分布函数,建立两者之间的转换函数,并将其用来修正未来时期模式与观测的系统偏差;
(2)保留所有历史与未来时期模式模拟降水分位数的相对变化。

QDM修正法具体如下:
在这里插入图片描述

2 MATLAB实现代码

主函数代码:

clear; 
clc;
%% 导入数据
file_dir = pwd;
load([pwd, '\data.mat']);%% QDM
hist_bool = (obs_cal.dates(:, 2) == 2 & obs_cal.dates(:, 3) == 29);
proj_bool = (obs_val.dates(:, 2) == 2 & obs_val.dates(:, 3) == 29);
obs_cal.dates(hist_bool, :) = [];
obs_cal.pre(hist_bool) = [];
obs_cal.tmax(hist_bool) = [];
obs_cal.tmin(hist_bool) = [];ncep_cal.dates(hist_bool, :) = [];
ncep_cal.pre(hist_bool) = [];
ncep_cal.tmax(hist_bool) = [];
ncep_cal.tmin(hist_bool) = [];ncep_val.dates(proj_bool, :) = [];
ncep_val.pre(proj_bool) = [];
ncep_val.tmax(proj_bool) = [];
ncep_val.tmin(proj_bool) = [];
[cor_ref, cor_fut] = M2R_QDM(obs_cal, ncep_cal, ncep_val);

调用函数1:M2R_QDM函数

function [X_ref,X_fut] = M2R_QDM(obs,ref,fut,single_output,dates_output)
%DBC Summary of this function goes here
%   Detailed explanation goes here
if nargin<3error('MATLAB:minrhs','Not enough input arguments.');
elseif nargin==3single_output=false<

这篇关于【气候模式降尺度】分位数增量映射(QDM)原理及MATLAB代码实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/748759

相关文章

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter