%% 讀取年數據 function [XXnum,YYnum]=dataRead() [numXX,txtXX,rawXX]=xlsread('XXyear.xlsx'); [numYY,txtYY,rawYY]=xlsread('YYyear.xlsx'); [m,n]=size(numXX); XXnum=zeros(12,n); %12為2008到2020年的年數;n為年特征數 YYnum=zeros(12,1); XXnum(1:11,:)=numXX; YYnum=numYY; end %%拉格朗日插值補全法 function yy=lagrange(x1,y1,xx) %本程序為Lagrange1插值,其中x1,y1 %為插值節點和節點上的函數值,輸出為插值點xx的函數值, %xx可以是向量。 syms x n=length(x1); for i=1:n t=x1; t(i)=[]; L(i)=prod((x-t)./(x1(i)-t)); % L向量用來存放插值基函數(基函數逆序排在數組中) end u=sum(L*y1); p=simplify(u) % p是簡化后的Lagrange插值函數(字符串) yy=subs(p,x,xx); %p是以x為自變量的函數,並求xx處的函數值; yy=eval(yy); end %% 年數據補全(lagrange插值)【2008-2020】 function XX1_bu=yeardata_pro() %XX1為預處理后的特征年度數據 [XXnum,YYnum]=yeardataRead; %讀取數據; XX0=bunan(XXnum); %零值對缺省數值補全; XX1=XX0; %拉格朗日/均值對零值補全; [m,n]=size(XX1); for j=1:n %遍歷所有特征 feature=XX1(:,j); xnan_index=find(feature==0); %將feature中的nan位置存放在jnan_index中 inan=xnan_index; %某特征的nan的位置存放在inan中;(理解方便); ynan=YYnum(inan); %存放nan對應的函數值,也就是秦皇島煤炭價格 % feature(inan)=mean(xnotnan); %均值補全 for k=1:size(inan) inan1=inan(k); %nan對應的行位置 ynan1=YYnum(inan1); %nan對應的目標值(秦皇島煤炭價格) xnotnan4=XX1(inan1-6:inan1-1,j); ynotnan4=YYnum(inan1-6:inan1-1); x_bu=lagrange(ynotnan4,xnotnan4,ynan1); XX1(inan1,j)=x_bu; feature(inan)=x_bu; XX1(:,j)=feature; end XX1_bu=XX1; end %% 讀取全部特征數據 function [XXnum,YYnum]=alldataRead() %讀取全部數據(年數據插值處理后) [numXX,txtXX,rawXX]=xlsread('XX_pro.xlsx'); [numYY,txtYY,rawYY]=xlsread('YY.xlsx'); XXnum=numXX(3:147,:); YYnum=numYY end function [zzz]=bunan(zzz) %缺失值檢測並填充為0 [m,n]=size(zzz); %所有數據 count=0; % 統計空數值; for i=1:m for j=1:n count=count+isnan(zzz(i,j)); if isnan(zzz(i,j))==1 %if (isempty(zz2{i,j})==1|isnan(zz2{i,j}==1)) zzz(i,j)=0; end end end %%將年數據與月數據匯總 %% 全部特征數據補全(均值補全) function XX1=alldata_pro() %XX1為預處理后的特征年度數據 [XXnum,YYnum]=alldataRead; %讀取數據; XX0=bunan(XXnum); %零值對缺省數值補全; XX1=XX0; %拉格朗日/均值對零值補全; [m,n]=size(XX1); for j=1:n %遍歷所有特征 feature=XX1(:,j); countnan=0; xnan=[]; ynan=[]; xnotnan_index=find(feature);% x是原特征中不為0的值 xnotnan=feature(xnotnan_index); % ynotnan=YYnum(xnotnan_index); %存放正常x對應的函數值,也就是秦皇島煤炭價格 xnan_index=find(feature==0); %將feature中的nan位置存放在jnan_index中 inan=xnan_index; %某特征的nan的位置存放在inan中;(理解方便); countnan=size(xnan_index,1); %countnan 存放nan個數; ynan=YYnum(inan); %存放nan對應的函數值,也就是秦皇島煤炭價格 feature(inan)=mean(xnotnan); %均值補全 XX1(:,j)=feature; XX1_bu=XX1; end