【气候模式降尺度】分位数增量映射(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

相关文章

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到