【數(shù)學建模算法】(28)插值和擬合:最小二乘優(yōu)化

在無約束最優(yōu)化問題中,有些重要的特殊情形,比如目標函數(shù)由若干個函數(shù)的平方和構(gòu)成。這類函數(shù)一般可以寫成:
F(x)=\sum_{i=1}^{m} f_{i}^{2}(x), x \in R^{n}
其中x=\left(x_{1}, \cdots, x_{n}\right)^{T},一般假設m \geq n。我們把極小化這類函數(shù)的問題:
\min F(x)=\sum_{i=1}^{m} f_{i}^{2}(x)
稱為最小二乘優(yōu)化問題。

最小二乘優(yōu)化是一類比較特殊的優(yōu)化問題,在處理這類問題時,Matlab也提供了一些強大的函數(shù)。在 Matlab 優(yōu)化工具箱中,用于求解最小二乘優(yōu)化問題的函數(shù)有:lsqlin、lsqcurvefit、lsqnonlin、lsqnonneg,用法介紹如下。

1.lsqlin函數(shù)

求解\min _{x} \frac{1}{2}\|C x-d\|_{2}^{2}
s.t. \left\{\begin{array}{l}{A^{*} x \leq b} \\ {\text {Aeq}^{*} x=b e q} \\ {l b \leq x \leq u b}\end{array}\right.
其中C, A, A e q為矩陣,d, b, b e q, l b, u b, x為向量。
Matlab函數(shù)為:
x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)

例1 用Isqlin函數(shù)求一個形如y=a+b x^{2}的經(jīng)驗公式,使它與下表所示的數(shù)據(jù)擬合。

x 19 25 31 38 44
y 19.0 32.3 49.0 73.3 97.8

解:程序如下:

x=[19 25 31 38 44]';
y=[19.0 32.3 49.0 73.3 97.8]';
r=[ones(5,1),x.^2];
ab=lsqlin(r,y)
x0=19:0.1:44;
y0=ab(1)+ab(2)*x0.^2;
plot(x,y,'o',x0,y0,'r')

2.lsqcurvefit函數(shù)

給定輸入輸出數(shù)列xdata,ydata,求參量x使得
\min _{x} \frac{1}{2} \| F(x, x{ data })-y d a t a \|_{2}^{2}=\frac{1}{2} \sum_{i}\left(F\left(x, x{ dat } a_{i}\right)-y d a t a_{i}\right)^{2}

Matlab中的函數(shù)為:
X=lsqcurvefit(FUN,X0,XDATA,YDATA,LB,UB,OPTIONS)
其中FUN是定義函數(shù)F(x, x d a t a)的N文件。

例2 用下面表中的數(shù)據(jù)擬合函數(shù)c(t)=a+b e^{-0.02 k t}中的參數(shù)a, b, k。

t_{j} 100 200 300 400 500 600 700 800 900 1000
c_{j} 4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59

解:這個問題即解最優(yōu)化問題:
\min F(a, b, k)=\sum_{i=1}^{10}\left(a+b e^{-0.02 k t_{j}}-c_{j}\right)^{2}

解這個問題要分兩步:
首先編寫待求函數(shù):

function f=fun1(x,tdata);
f=x(1)+x(2)*exp(-0.02*x(3)*tdata); %其中 x(1)=a,x(2)=b,x(3)=k

其中參數(shù)x是原函數(shù)的待求參數(shù)列表,xdata是函數(shù)自變量。
之后在主函數(shù)中調(diào)用lsqcurvefit,編寫程序:

td=100:100:1000;
cd=[4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59];
x0=[0.2 0.05 0.05];
x=lsqcurvefit(@fun1,x0,td,cd)

3.lsqnonlin函數(shù)

已知函數(shù)向量F(x)=\left[f_{1}(x), \cdots, f_{k}(x)\right]^{T},求x使得:
\min _{x} \frac{1}{2}\|F(x)\|_{2}^{2}
Matlab中的函數(shù)為:

X=lsqnonlin(FUN,X0,LB,UB,OPTIONS)

用該函數(shù)求解例2:
首先編寫含有待求參數(shù)的函數(shù):

function f=fun2(x);
td=100:100:1000;
cd=[4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59];
f=x(1)+x(2)*exp(-0.02*x(3)*td)-cd;

之后調(diào)用函數(shù)lsqnonlin,編寫如下程序:

x0=[0.2 0.05 0.05]; %初始值是任意取的
x=lsqnonlin(@fun2,x0)

4.lsqnonneg函數(shù)

求解非負x,使得滿足\min _{x} \frac{1}{2}\|C x-d\|_{2}^{2}
Matlab中的函數(shù)為:

X =lsqnonneg(C,d,X0,OPTIONS)

例3 已知C=\left[\begin{array}{ll}{0.0372} & {0.2869} \\ {0.6861} & {0.7071} \\ {0.6233} & {0.6245} \\ {0.6344} & {0.6170}\end{array}\right],d=\left[\begin{array}{l}{0.8587} \\ {0.1781} \\ {0.0747} \\ {0.8405}\end{array}\right],求x(x \geq 0)滿足\min _{x} \frac{1}{2}\|C x-d\|_{2}^{2}最小。

編寫程序如下:

c=[0.0372 0.2869;0.6861 0.7071;0.6233 0.6245;0.6344 0.6170];
d=[0.8587;0.1781;0.0747;0.8405];
x=lsqnonneg(c,d)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容