本人是matlab的菜鸟啊,问大神们一个问题啊,做非线性拟合时选取的初值不同,系数拟合的结果往往也不同,到底什么样的结果才是最好的呢?本人想在真实值附近找一个区间,通过一个较小的步长来穷举,最后选残差最小的那组系数。。。无奈程序老是报错,求大神们看看啊!!!
主程序:
A=[33.35 1854 34.78 1857 36.22 1948 37.66 201739.09 209240.53 2197 41.76 2608 42.81 2937 43.9 311944.94 3654];process=A(:,1); %自变量price=A(:,2); %因变量aa=0.0001:0.0001:0.5; %穷举第一个系数bb=0.001:0.001:0.5; %穷举第二个系数cc=1701:1900; %穷举第三个系数rr=[]; %设定一个三维空矩阵放残差low=[1e-008,1e-008,1500]; %系数beta的下线up=[2,2,2500]; %系数beta的上限for i=1:5000; for m=1:500; for k=1:200;beta0=[aa(1,i),bb(1,m),cc(1,k)]'; %初值[beta,r]=nlinfit(process,price,@myfun,beta0); %调用myfun函数if beta<low | beta>up; %系数返回值不符合要求的话,残差就定义为0 flag=0;else flag=r'*r; %计算残差end;rr(i,m,k)=flag; %得出三维残差阵 end; end;end;rmin=nanmin(nanmin(nanmin(rr))) %找出最小的残差[ii,mm,kk]=find(rr==rmin) %找出最小残差的位置
函数:function yy=myfun(beta,x)a=beta(1);b=beta(2);c=beta(3);yy=a*exp(b*x)+c;
此程序一直报错:??? Error using ==> nlinfit>checkFunVals at 356MODELFUN has returned Inf or NaN values.
Error in ==> nlinfit>LMfit at 303 if funValCheck && ~isfinite(sse), checkFunVals(r); end
Error in ==> nlinfit at 166 [beta,J,lsiter,cause] = LMfit(X,y, model,beta,options,verbose,maxiter);
Error in ==> fangjia at 24[beta,r]=nlinfit(process,price,@myfun,beta0);
我看不懂啊,怎样才能在函数不收敛的时候跳过去接着计算下一个啊,大神们快帮我看看!!!