selfadapt.m
来自「该代码主要是实现自适应功能」· M 代码 · 共 86 行
M
86 行
function Temp_adapt=selfadapt(Temp_act,Temp_cal,thick_class)
% 一次指数平滑法
% Temp_adapt value after selfadapts
% Temp_act value by measurement
% Temp_cal value calculated by model
[row col]=size(Temp_act);
n=row;
alpha=0.35;
% 3-sigma外的异常点不参与自适应
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
k_real=Temp_act./Temp_cal;
index=judge3sigma(Temp_cal);
k_real(index)=1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 一次指数平滑法,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
k=1;
Temp_adapt(1,1)=Temp_cal(1,1);
for i=2:n
k=(1-alpha)*k+alpha*k_real(i-1,1); %指数平滑
Temp_adapt(i,1)=Temp_cal(i,1)*k;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function index=judge3sigma(value)
% Eliminate the data out of range: abs(cal-mean(act))>3*std
% value data to be judged
% index return data index out of 3-sigma
value_std=std(value);
value_mean=mean(value);
index=find(abs(value-value_mean)>2*value_std);
function dataprocess
% 按厚度等级1~20,将数据分割
[data varname]=xlsread('.\data\2050\THICK_CLASS\THICK.xls');
for ii=1:20
eval(['data_thickcls',num2str(ii),'=data(find(data(:,64)==',num2str(ii),'),:);'])
fn=['.\data\2050\THICK_CLASS\data_thickcls',num2str(ii)];
dn=['data_thickcls',num2str(ii)];
xlswrite(fn,varname,'sheet1','A1')
eval(['xlswrite(fn,',dn,',',strcat(['''','sheet1','''',',','''','A2','''']),')']);
end
function alpha=optm(Temp_act,Temp_cal)
[row col]=size(Temp_act);
n=row;
% 剔除3-sigma外的异常点,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
k_real=Temp_act./Temp_cal;
% index=judge3sigma(Temp_cal);
% k_real(index)=1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 寻优,找出 alpha 的最优点,用粒子群。
%%%%%%%%%%%%%%%%%%%%%%%%%%%
iflag=0;
for alpha=0.01:0.01:1
iflag=iflag+1;
% 指数平滑法,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
k=1;
Temp_adapt(1,1)=Temp_cal(1,1);
for i=2:n
k=(1-alpha)*k+alpha*k_real(i-1,1); %指数平滑
Temp_adapt(i,1)=Temp_cal(i,1)*k;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
value_mse(iflag)=sqrt(mse(Temp_act(:,1)-Temp_adapt(:,1)));
end
[C,I] = min(value_mse);
alpha=0.01+(I-1)*0.01;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
assignin('base','value_mse',value_mse)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?