1、出錯的直接原因是myfun1裏面的表達式有誤,應改為
y=(1-(1-x(:,1)).^beta(1)).^beta(2).*(1-(1-x(:,1)).^beta(3)).^beta(4);即原來的乘號改為點乘。
2、建議改用lsqcurvefit進行最小二乘擬合,即把
beta=nlinfit(x,y,@myfun1,[0.5?0.5?0.5?0.5])改為
beta=lsqcurvefit(@myfun1,[0.5?0.5?0.5?0.5],x,y)我註意跟蹤了擬合的過程,nlinfit在開始的時候是正常的,擬合結果逐漸接近原始數據,但不知道什麽原因,到已經可以接受的結果時,忽然數據偏離很大,導致計算結果中出現Inf,因而算法失敗。
lsqcurvefit是優化工具箱提供的函數,而nlinfit是統計工具箱的函數,二者采用的算法應該存在差異,但限於時間精力,更深入的分析沒有進行,總之實測lsqcurvefit可以很好的實現擬合。