上一小節所描述的方法是一個一般性的方法,因為它把對所有參數都是一視同仁,全部視為非線性參數。但是我們還可以進一步改良,也就是將線性與非線性參數分開,各用不同的方法來處理。以上例而言,數學模型為
$$
y= a_1 e^{\lambda_1 x} + a_2 e^{\lambda_2 x}
$$
其中 $a_1$ 及 $a_2$ 為線性參數,$\lambda_2$ 及 $\lambda_2$ 為非線性參數,因此我們可以對它們分開處理,如下:
- 線性參數($a_1$ 及 $a_2$):可使用最小平方法,即「左除」或「\」。
- 非線性參數($\lambda_2$ 及 $\lambda_2$):可使用 Simplex 下坡式搜尋法(即 fminsearch)。
此方法的好處是:最小平方法能夠在非線性參數($\lambda_2$ 及 $\lambda_2$)固定的情況下,一次找到最好的線性參數($a_1$ 及 $a_2$)的值,因為搜尋空間的維度由 4($a_1$、$a_2$、$\lambda_1$、$\lambda_2$),降為 2($\lambda_1$、$\lambda_2$),最佳化會更有效率。
如果要使用上述混成(Hybrid)的方法,函式 errorMeasure1 須改寫成 errorMeasure2,如下:
其中 lambda 是非線性參數向量,只包含 $\lambda_2$ 及 $\lambda_2$,data 仍是觀察到的資料點,a 則是利用最小平方法算出的最佳線性參數向量(即 $a_1$ 及 $a_2$ 隨傳入的 $\lambda_2$ 及 $\lambda_2$ 而變),而傳回的 squareError 仍是總平方誤差。此函數和 errorMeasure1 的最大不同在於我們只須傳入線性參數($\lambda_2$ 及 $\lambda_2$),最佳線性參數($a_1$ 及 $a_2$)的值則在函式中由最小平方法決定。
欲用此混成法求出誤差平方和的最小值,可輸入如下:
此種混成法可以產生較低的誤差平方和,同時所需的計算時間也比較短。
MATLAB程式設計:進階篇