MATLAB代做|MATLAB专业代做|GMDH算法仿真代做

发布时间:2019/8/16 浏览数:9312
clear
X=xlsread('Xdata.xls');
Y=xlsread('Ydata.xls');
Xsize=size(X);
X=[X,ones(Xsize(1),1)];
Xsize=size(X);
%************************************************************
%***********自己可以在此处调整chcecknum参数值**********
%************************************************************
checknum=1;
%************************************************************
Xsize=size(X);
if checknum+1>Xsize(1) 
disp([blanks(10),'注意:请输入正确的学习样本数,它最多比样本总数目少一个']),return;
end
Xorig=X(1:checknum,:);
Xcheck=X(checknum+1:end,:);
Yorig=Y(1:checknum);
Ycheck=Y(checknum+1:end);
cmbarrayselt(1,100)=struct('ynear',[],'yerror',[],'ycoef',[]);
for i=1:100 cmbarrayselt(i).yerror=9e+99;
end
cmbarrytemp(1,1)=struct('ynear',[],'yerror',[],'ycoef',[]);
cmbarray1(1,100)=struct('ynear',[],'yerror',[],'ycoef',[]);
cmbarray2(1,100)=struct('ynear',[],'yerror',[],'ycoef',[]);
%varnum变量的数日
varnum=Xsize(2);
%
%conicoef每次预留的白变量数日,最少定为变量数日个,最多不超过100个,这里是自动找出6到100之间的总体最优
%************************************************************
%***********白己可以在此处调整contcoef参数值
%************************************************************
for contcoef=varnum:100
%************************************************************
for i=1:varnum cmbarray2(i).ycoef=zeros(varnum,1);
end
XX=eye(varnum);
for i=1:varnum cmbarray1(i).ynear=Xorig(:,i);cmbarray1(i).ycoef=XX(:,i);
end
for i=1:contcoef cmbarray1(i).yerror=9e+99;
cmbarray2(i).yerror=9e+99;
end
%
%停止标志simblestop
simblestop=1;
while simblestop>0
%
%
for i=1:varnum-1
%
for j=i:varnum-1
%求拟合多项式系数
if i==j
cmbcoefdbl=regress(Yorig,[ones(checknum,1),cmbarray1(i).ynear],0.05);
cmbarraytemp.ycoef=cmbcoefdbl(1)*cmbarray1(varnum).ycoef+cmbcoefdbl(2)*cmbarray1(i).ycoef;
else
cmbcoefdbl=regress(Yorig,[ones(checknum,1),cmbarray1(i).ynear,cmbarray1(j).ynear],0.05);
cmbarraytemp.ycoef=cmbcoefdbl(1)*cmbarray1(varnum).ycoef+cmbcoefdbl(2)*cmbarray1(i).ycoef+cmbcoefdbl(3)*cmbarray1(j).ycoef;
end
%计算新的变量和误差
cmbarraytemp.ynear=Xcheck*(cmbarraytemp.ycoef);
cmbarraytemp.yerror=mean(abs(Ycheck-cmbarraytemp.ynear)./Ycheck);
positerr=max([cmbarray2.yerror]);
cmbarraytemp.ynear=Xorig*(cmbarraytemp.ycoef);
if cmbarraytemp.yerror<positerr
posit=(find([cmbarray2.yerror]==positerr));
cmbarray2(posit(1)).ynear=cmbarraytemp.ynear;
cmbarray2(posit(1)).yerror=cmbarraytemp.yerror;
cmbarray2(posit(1)).ycoef=cmbarraytemp.ycoef;
      end
  end
end
%重新设置停止标志
simblestop=min([cmbarray1.yerror])-min([cmbarray2.yerror]);
cmbarrayl=cmbarray2;
end
%在本次预留变量的数目下,最佳的拟合
positerr=min([cmbarray2.yerror]);
posit=(find([cmbarray2.yerror]==positerr));
cmbarrayselt(contcoef).ynear=cmbarray2(posit(1)).ynear;
cmbarrayselt(contcoef).yerror=cmbarray2(posit(1)).yerror;
cmbarrayselt(contcoef).ycoef=cmbarray2(posit(1)).yeoef;
%找出误差最小:局部最小误差errorlocal;全局最小误差errorwhole
positerr=min([cmbarrayselt.yerror]);
posit=(find([cmbarrayselt.yerror]==positerr));
cmbarraytemp=cmbarrayselt(posit(1));
errrorlocal=cmbarraytemp.yeorrr;
errorwhole=mean(abs(Y-X*cmbarraytemp.ycoef)./Y);
%输出最优拟合结果结果
disp(''),dip(''),disp(''),disP('')
disp('***********************************************************************')
disp('*****************************?执行的结果********************************'),disp(''),disp('')
disp('可取得最优拟合时的总体误差:')
disp([blnaks(15),'The global error:',num2str(errorwhole)])
disp('取得最优拟合时的当时误差:')
disp([blanks(15),'The local error:',num2str(errorlocal)]),disp('')
disp('取得最优拟合时的最佳拟合表达式:')
coefoutval=cmbanaytemp.ycoef;
for i=1:varnum 
    coefoutstr{i}=num2str(coefoutval(i));
end
disp([blanks(10),'Y=','(',coefoutstr{i},')*Xl']),
for i=2:varnum-1
disp([blanks(15),'+(',coefoutstr{i},')*X',int2str(i)])
end
disp([blanks(15),'+(',coefoutstr{i+1}])
disp(''),disp('')
%将最后的Y值存入Y数组中,以便进行比较
Y(:,2)=X(:,1:varnum-l)*coefoutval(1:varnum-l,l)+coefoutval(varnum);
Xcopy=X;
Y(:,3)=Y(:,1)-sum(Y(:,l))/Xsize(l);
X(Xsize(1)+1,:)=sum(X)./Xsize(1);
for i=l:Xsize(1)
X(i,:)=X(i,:)-X(Xsize(l)+1,:);
end
%%%计算绝对误差%%%
disp([blanks(15),'']),The_global_error=sum((Y(:,l)-Y(:,2)).^2)
disp(''),The_model_error=sum((Y(1:checknum,1)-Y(1:checknum,2)).^2)
%%%
%计算F和R2检验
TSS=sum(Y(:,3).^2);
ESS=coefoutval(1:varnum-1,1)'*(Y(:,3)'*X(1:end-1,1:varnum-1))';
Rsqr=ESS/TSS;
Xcopyl=Xcopy;
Y(l:checknum,4)=Y(1:checknum,1)-sum(Y(l:checknum,l))/checknum;
Xcopy(Xsize(1)+2,:)=sum(Xcopy(1:checknum,:))./cheeknum;
for i=1:checknum
Xcopy(i,:)=Xcopy(i,:)-Xcopy(Xsize(1)+2,:);
end
TSS1=sum(Y(1:checknum,4).^2);
ESS1=coefoutval(l:varnum-1,1)'*(Y(l:checknum,4)'*Xcopy(1:checknum,1:varnum-l))';
Rsqrmodel=ESS1/TSS1;
%%%%%%%计算有效的变量
%fit少um二sum((abs(coeofutval(1:end一1))>le一50));
%F=(Rsq/rfit_num)/((l一Rsqr)/(Xsize(l)一fi--ntum一1)):
%%%%%%%
F=(Rsqrmodel/(varnum-1))/((l-Rsqrmodel)/(checknum-varnum));
%
delta=F(Y(l:checknum,l)'*Y(1:checknum,1)-coefoutval(l:varnum,1)'*Xcopyl(l:checknum,l:varnum)'*Y(l:checknum,1))/(checknum-varnum);
varCov=deltaF*inv(Xcopyl(l:checknum,1:varnum)'*Xcopyl(l:checknum,1:varnum));
arrayT=coefoutval(1:varnum,1)./sqrt(abs(diag(varCov)));
disp('<<<<<<<<<<<<<<<<<<<<R方检验>>>>>>>>>>>>>>>>>>>>>>'),Rsqr
disp(''),Rsqrmodel
disp('<<<<<<<<<<<<<<<<<<<<<F检验>>>>>>>>>>>>>>>>>>>>>>'),F
disp('<<<<<<<<<<<<<<<<<<<<<t检验>>>>>>>>>>>>>>>>>>>>>>'),arryaT'
disp(''),disp(''),
disP('*****************************执行的结果********************************')
disP('************************************************************************')
disP(''),disp('')

end


联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:

Copyright 2017-2024 © 嘉兴麦特莱博软件开发工作室
  • 网站备案号:浙ICP备18008591号-1