Matlab处理气象数据(十四)分段的逐点变化的DTR

18 篇文章 70 订阅
% 两套数据逐点DTR,2000年前后对比
% 导入Tmax1,72*128*396
% 导入Tmax2,72*128*396
% 导入Tmin1,72*128*396
% 导入Tmin2,72*128*396
 
Ymax1=reshape(Tmax1,[72,128,12,33]);
Ymax1=nanmean(Ymax1,3);
Ymax1=squeeze(Ymax1); %<72x128x33 double>
 
Ymax2=reshape(Tmax2,[72,128,12,33]);
Ymax2=nanmean(Ymax2,3);
Ymax2=squeeze(Ymax2); 
 
Ymin1=reshape(Tmin1,[72,128,12,33]);
Ymin1=nanmean(Ymin1,3);
Ymin1=squeeze(Ymin1); 
 
Ymin2=reshape(Tmin2,[72,128,12,33]);
Ymin2=nanmean(Ymin2,3);
Ymin2=squeeze(Ymin2); 
 
DTR1=Ymax1-Ymin1;
DTR2=Ymax2-Ymin2;
 
DTR1=DTR1(:,:,3:33);
DTR1a=DTR1(:,:,1:19);
DTR1b=DTR1(:,:,20:31);
 
DTR2=DTR2(:,:,3:33);
DTR2a=DTR2(:,:,1:19);
DTR2b=DTR2(:,:,20:31);
%画NCEP数据2000年前的
for j=1:128
	for i=1:72
		y=DTR1a(i,j,:);
		n = 19;
		dt=1;
		% 计算统计量
		s = 0;
		for p = 1:n-1
		    for q = p+1:n
		        s = s + sign( y(q) - y(p) );
		    end
		end
		% 方差( assuming no tied groups )
		v = ( n * ( n - 1 ) * ( 2 * n + 5 ) ) / 18;
		% 检验统计量
		if s == 0
			z = 0;
			elseif s > 0,
			z = ( s - 1 ) / sqrt( v );
		else
			z = ( s + 1 ) / sqrt( v );
		end
		% should calculate Normal value here
		nor = 1.64;
		if abs( z ) < nor,
			sya(i,j) = 0;
		else
			% 计算斜率
			ndash = n * ( n - 1 ) / 2;
			s = zeros( ndash,1 );
			s=nan;
			r = 1;
			for p = 1:n-1
				for q = p+1:n
					s(r) = ( y(q) - y(p) ) / ( q - p ) / dt;
					r = r + 1;
				end
			end
			sDTR1a(i,j) = median( s );
		end
	end
end 
[x y]=meshgrid(72:0.5:135.5,18:0.5:53.5);
pcolor(x,y,sDTR1a);
shading flat;
load mycolor;
colormap(mycolor);
hold on
map=shaperead('E:\数据\边界\china_map1\maps\bou2_4l.shp');%加载省界带南海的边界线
bou2_4lx=[map(:).X];%提取经度
bou2_4ly=[map(:).Y];%提取纬度
provence=[bou2_4lx',bou2_4ly']; 
plot(bou2_4lx,bou2_4ly,'-k','LineWidth',1.2);%绘国界
axis([72 136 18 54]);%设置显示的经纬度范围
hold off
%最后调整区间为-0.2~0.2
%画NCEP数据2000年后的
for j=1:128
	for i=1:72
		y=DTR1b(i,j,:);
		n = 12;
		dt=1;
		% 计算统计量
		s = 0;
		for p = 1:n-1
		    for q = p+1:n
		        s = s + sign( y(q) - y(p) );
		    end
		end
		% 方差( assuming no tied groups )
		v = ( n * ( n - 1 ) * ( 2 * n + 5 ) ) / 18;
		% 检验统计量
		if s == 0
			z = 0;
			elseif s > 0,
			z = ( s - 1 ) / sqrt( v );
		else
			z = ( s + 1 ) / sqrt( v );
		end
		% should calculate Normal value here
		nor = 1.64;
		 
		if abs( z ) < nor,
			sya(i,j) = 0;
		else
			% 计算斜率
			ndash = n * ( n - 1 ) / 2;
			s = zeros( ndash,1 );
			s=nan;
			r = 1;
			for p = 1:n-1
				for q = p+1:n
					s(r) = ( y(q) - y(p) ) / ( q - p ) / dt;
					r = r + 1;
				end
			end
			sDTR1b(i,j) = median( s );
		end
	end
end 
[x y]=meshgrid(72:0.5:135.5,18:0.5:53.5);
pcolor(x,y,sDTR1b);
shading flat;
load mycolor;
colormap(mycolor);
hold on
map=shaperead('E:\数据\边界\china_map1\maps\bou2_4l.shp');%加载省界带南海的边界线
bou2_4lx=[map(:).X];%提取经度
bou2_4ly=[map(:).Y];%提取纬度
provence=[bou2_4lx',bou2_4ly']; 
plot(bou2_4lx,bou2_4ly,'-k','LineWidth',1.2);%绘国界
axis([72 136 18 54]);%设置显示的经纬度范围
hold off
%最后调整区间为-0.2~0.2
%画观测数据2000年前的
for j=1:128
	for i=1:72
		y=DTR2a(i,j,:);
		n = 19;
		dt=1;
		% 计算统计量
		s = 0;
		for p = 1:n-1
		    for q = p+1:n
		        s = s + sign( y(q) - y(p) );
		    end
		end
		% 方差( assuming no tied groups )
		v = ( n * ( n - 1 ) * ( 2 * n + 5 ) ) / 18;
		% 检验统计量
		if s == 0
			z = 0;
			elseif s > 0,
			z = ( s - 1 ) / sqrt( v );
		else
			z = ( s + 1 ) / sqrt( v );
		end
		% should calculate Normal value here
		nor = 1.64;
		if abs( z ) < nor,
			sya(i,j) = 0;
		else
			% 计算斜率
			ndash = n * ( n - 1 ) / 2;
			s = zeros( ndash,1 );
			s=nan;
			r = 1;
			for p = 1:n-1
				for q = p+1:n
					s(r) = ( y(q) - y(p) ) / ( q - p ) / dt;
					r = r + 1;
				end
			end
			sDTR2a(i,j) = median( s );
		end
	end
end
[x y]=meshgrid(72:0.5:135.5,18:0.5:53.5);
pcolor(x,y,sDTR2a);
shading flat;
load mycolor;
colormap(mycolor);
hold on
map=shaperead('E:\数据\边界\china_map1\maps\bou2_4l.shp');%加载省界带南海的边界线
bou2_4lx=[map(:).X];%提取经度
bou2_4ly=[map(:).Y];%提取纬度
provence=[bou2_4lx',bou2_4ly']; 
plot(bou2_4lx,bou2_4ly,'-k','LineWidth',1.2);%绘国界
axis([72 136 18 54]);%设置显示的经纬度范围
hold off
%最后调整区间为-0.2~0.2
%画观测数据2000年后的
for j=1:128
	for i=1:72
		y=DTR2b(i,j,:);
		n = 12;
		dt=1;
		% 计算统计量
		s = 0;
		for p = 1:n-1
		    for q = p+1:n
		        s = s + sign( y(q) - y(p) );
		    end
		end
		% 方差( assuming no tied groups )
		v = ( n * ( n - 1 ) * ( 2 * n + 5 ) ) / 18;
		% 检验统计量
		if s == 0
			z = 0;
			elseif s > 0,
			z = ( s - 1 ) / sqrt( v );
		else
			z = ( s + 1 ) / sqrt( v );
		end
		% should calculate Normal value here
		nor = 1.64;
		if abs( z ) < nor,
			sya(i,j) = 0;
		else
			% 计算斜率
			ndash = n * ( n - 1 ) / 2;
			s = zeros( ndash,1 );
			s=nan;
			r = 1;
			for p = 1:n-1
				for q = p+1:n
					s(r) = ( y(q) - y(p) ) / ( q - p ) / dt;
					r = r + 1;
				end
			end
			sDTR2b(i,j) = median( s );
		end
	end
end
[x y]=meshgrid(72:0.5:135.5,18:0.5:53.5);
pcolor(x,y,sDTR2b);
shading flat;
load mycolor;
colormap(mycolor);
hold on
map=shaperead('E:\数据\边界\china_map1\maps\bou2_4l.shp');%加载省界带南海的边界线
bou2_4lx=[map(:).X];%提取经度
bou2_4ly=[map(:).Y];%提取纬度
provence=[bou2_4lx',bou2_4ly']; 
plot(bou2_4lx,bou2_4ly,'-k','LineWidth',1.2);%绘国界
axis([72 136 18 54]);%设置显示的经纬度范围
hold off
%最后调整区间为-0.2~0.2

得到如下结果:

在这里插入图片描述

NCEP数据1981-1999年(左)和2000-2011年(右)的DTR逐点趋势分析

在这里插入图片描述

观测数据1981-1999年(左)和2000-2011年(右)的DTR逐点趋势分析

相关链接:
Matlab处理气象数据——目录

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MK检验程序出错有请大侠-MK.m % Time Series Trend Detection Tests % %     [ z, sl, lcl, ucl ] = trend % % where   z   = Mann-Kendall Statistic %         sl  = Sen's Slope Estimate %         lcl = Lower Confidence Limit of sl %         ucl = Upper Confidence Limit of sl %         y   = Time Series of Data %         dt  = Time Interval of Data % % Bob Newell, February 1996 % %-------------------------------------------------- % load unnamed1.mat; y=unnamed1; function [ z, sl, lcl, ucl ] = trendMK % n = length; %-------------------------------------------------- % Mann-Kendall Test for N > 40 % disp; if n < 41,   disp; end; % calculate statistic s = 0; for k = 1:n-1,   for j = k 1:n,     s = s sign - y );   end; end; % variance v = * ) / 18; % test statistic if s == 0,   z = 0; elseif s > 0,   z = / sqrt; else   z = / sqrt; end;             % should calculate Normal value here nor = 1.96; % results disp ] ); disp ) ] ); disp ] ); if abs < nor,   disp;   z = 0; elseif z > 0,   disp; else   disp; end; %---------------------------------------------------- %             disp; % calculate slopes ndash = n * / 2; s = zeros; i = 1; for k = 1:n-1,   for j = k 1:n,     s = - y ) / / dt; i = i 1;   end; end; % the estimate sl = median; disp ] ); % variance v = * ) / 18; m1 = fix ) / 2 ); m2 = fix ) / 2 ); s = sort; lcl = s; ucl = s; disp( [ '     Lower Confidence Limit = ' ...                              num2str ] ); disp( [ '     Upper Confidence Limit = ' ...                            num2str ] ); %---------------------------------------------------- % the end

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值