11/28/2006

11.13.3 非線性迴歸nlinfit

進行非線性迴歸時可使用nlinfit指令,其語法如下:


beta = nlinfit(X,y,fun,beta0)
[beta,r,J] = nlinfit(X,y,fun,beta0)
[...] = nlinfit(X, y, fun, beta0, options)

非線性迴歸法係利用最小平方法求得非線性函數之係數。其中y為回應向量,X為設計矩陣,配合所需之獨立變數,其值為一列對應一個Y元素。實際上X可為任意陣列,只要fun這個函數接受。這個fun函數具有下列之型式:

yhat=myfun(beta, X)

其中,beta為係數向量,而X為設計矩陣。fun回應一個適配y值之向量yhat。在原來之指令中,beta0則為係數之初值。其正確之係數值beta則出現在等號之左方,其殘值為r,及Jacobian矩陣J。這些輸出參數都可以作為nlpredci函數指令之輸入,以估計預測值及係數值之相關誤差。
參數中,options則提供輸入的控制參數,以正確執行nlinfit之功能。此options亦可利用statset函數產生。options的欄位包括:

1. MaxIter:最高容許迴圈次數,預設值為100。
2. TolFun:殘餘平方運算終止容許值,預設值為1e-8。
3. TolX:計算beta係數之終止容許值,預設值為1e-8。
4. Display:運算期間之輸出-'off'(預設值)或 'iter'或 'final'

例:在工具箱中,有reaction.mat之資料,這是有關化學反應所到之觀察值,其中牽涉到三種化學反應:氫、n-戊烷、同位戊烷等。其中之函數hougen已經存在,是使用Hougen-Watson模式建立之反應動能量,其回應值為預設之反應速率。首先,下載資料:

load reaction
betafit = nlinfit(reactants,rate,@hougen,beta)
betafit =
1.2526
0.062776
0.040048
0.11242
 1.1914

其中之hougen.m可以type hougen,得其內容如下:

function yhat = hougen(beta,x)
%HOUGEN Hougen-Watson model for reaction kinetics.
% YHAT = HOUGEN(BETA,X) gives the predicted values of the
% reaction rate, YHAT, as a function of the vector of
% parameters, BETA, and the matrix of data, X.
% BETA must have 5 elements and X must have three
% columns.
%
% The model form is:
% y = (b1*x2 - x3/b5)./(1+b2*x1+b3*x2+b4*x3)
%
% Reference:
% [1] Bates, Douglas, and Watts, Donald, "Nonlinear
% Regression Analysis and Its Applications", Wiley
% 1988 p. 271-272.


% Copyright 1993-2004 The MathWorks, Inc.
% $Revision: 2.7.2.1 $ $Date: 2004/01/24 09:34:06 $
% B.A. Jones 1-06-95.

b1 = beta(1);
b2 = beta(2);
b3 = beta(3);
b4 = beta(4);
b5 = beta(5);

x1 = x(:,1);
x2 = x(:,2);
x3 = x(:,3);


yhat = (b1*x2 - x3/b5)./(1+b2*x1+b3*x2+b4*x3);



另有一個nlintool指令函數則可利用圖形介面執行如下,讀者可試在指令窗下打入執行之。