滑动平均:
降水量
比如 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965
选取k=5
则序列一是求 1951 1952 1953 1954 1955的平均降水量,平均降水量对应着第三个年份,即1953年。
同理 1952 1953 1954 1955 1956的平均降水量对应着第三个年份,即1954年
下面是滑动平均(moving smooth)函数
%% moving smooth
function [ytime,yrain]=smooth_yi(time,rain,k)
% rain denotes precipation
% time denotes year
% k is step
for i=1:length(time)-(k-1)
a=rain(i:i+k-1);
yrain(i)=mean(a);
end
m=floor(k/2);
ytime=time(m+1:length(time)-m);
%ytime=time(3:13)
%time数组中第三个数到第13个数
end
for example
k=5时,m=2
第一个序列 1951 1952 1953 1954 1955
ytime此时取1953
第二个序列1952 1953 1954 1955 1956
ytime此时取1954
第三个序列1953 1954 1955 1956 1957
ytime此时取1955
下面的序列依次为1956、1957…1963
对应着ytime数组中1953、1954、1955…1963
降水量的滑动平均
clear all;close all;clc
A=load('文件路径/rain.mat');
rain=A.pp;
year=1951:1993;
time = datenum(year,7,1);
%% 9年的滑动平均
k=9;
[ytime,yrain]=smooth_yi(time,rain,k);
%% 11年的滑动平均
k=11;
[ytime2,yrain2]=smooth_yi(time,rain,k);
%%
figure
set(gcf,'color','w')
plot(time,rain,'k-')
hold on
plot(ytime,yrain,'r-')
plot(ytime2,yrain2,'b-')
datetick('x','yyyy')
xlabel('year')
ylabel('降水量')
title('北京1951-1993年7月份降水量')
legend('降水量','9年滑动平均','11年滑动平均')
海表温度的滑动平均
clear all;close all;clc
%% 读取nc文件
lon = ncread('HadISST_sst.nc','longitude');
lan = ncread('HadISST_sst.nc','latitude');
sst = ncread('HadISST_sst.nc','sst');
time = ncread('HadISST_sst.nc','time');
sst(sst == -1000) = NaN;sst(sst < -1e30)=NaN;
%%
time=time+datenum(1870,1,1);
time = double(time);
tstr=datestr(time,30);
msst=zeros(1800,1);
%求全球平均海表温度
for i=1:1800
sst1 = sst(:,:,i);
msst(i,1) = nanmean(nanmean(sst1,1),2);
end
%求全球平均海表温度的年平均温度
mmsst=[];
time1=[];
for j=1:12:length(time)-11
a=nanmean(msst(j:j+11));
mmsst=cat(1,mmsst,a);
b=time(j);
time1=cat(1,time1,b);
end
tstr1=datestr(time1,30);
%%
k=7;
[ytime,ymmsst]=smooth_yi(time1,mmsst,k);
%%
figure
set(gcf,'color','w')
plot(time1,mmsst,'k-')
hold on
plot(ytime,ymmsst,'r-')
datetick('x','yyyy')
xlabel('year')
ylabel('sst(\circC)')
title('1870-2019年全球海表平均温度')
legend('sst','7年滑动平均')