曲线拟合算法之 MATLAB 实现 function retstr = FitDrawpic(ModelNo,NetPara,SeqData,TargetData,DataDir) NNTWARN OFF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %ModelNo='1'; %DataDir='.'; %表示当前目录 %NetPara(1)=11; %NetPara(2)=3; %NetPara(3)=50; %NetPara(4)=1900; %NetPara(5)=2020; %NetPara(6)=70; %NetPara(7)=350; %NetPara(8)=2010; %SeqData = [1900.000000000000000 1910.000000000000000 1920.000000000000000 1930.000000000000000 1940.000000000000000 1950.000000000000000 1960.000000000000000 1970.000000000000000 1980.000000000000000 1990.000000000000000 2000.000000000000000 ]; %TargetData =[ 75.99500000 91.97200000 105.71100000 123.20300000 131.66900000 150.69700000 179.32300000 203.21200000 226.50500000 249.63300000 281.42200000 ]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %保留原目录 olddir=pwd; %进入数据所在目录 cd(DataDir); InputDim=NetPara(1); %样本组数 FitFact=NetPara(2); %拟合阶数 DataNum=NetPara(3); %拟合数据点数 MinSeqValue=NetPara(4); %外推最小值 MaxSeqValue=NetPara(5); %外推最大值 MinValue=NetPara(6); %输出最小值 MaxValue=NetPara(7); %输出最大值 FitPoint=NetPara(8); %预测点 x = SeqData; y = TargetData; newx= linspace(MinSeqValue,MaxSeqValue,DataNum); %读取拟合曲线系数 fcoef=fopen(sprintf('coef%s%s',ModelNo,'.dat'),'r'); [coef,count]=fscanf(fcoef,'%f',[1,inf]); fclose(fcoef); z=polyval(coef,newx)'; pz=polyval(coef,FitPoint); hold on axis([MinSeqValue,MaxSeqValue,MinValue,MaxValue]); plot(newx,z,x,y,'o'); plot(FitPoint,pz,'ks'); text(FitPoint,pz+15,num2str(pz)); hold off title(['曲线拟合示意图, 阶数=',int2str(FitFact)]) xlabel('序列值'), ylabel('输出值'), grid cd(olddir); retstr=pz; ====================================================== function retstr = FitForecast(ModelNo,InputData,DataDir) NNTWARN OFF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %ModelNo='1'; %DataDir='.'; %表示当前目录 %InputData=2010; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %保留原目录 olddir...