最小覆盖模型matlab_数学规划模型的matlab求解 非线性最小二乘lsqnonlin
數(shù)學(xué)規(guī)劃模型是優(yōu)化模型的一種,包括線性規(guī)劃模型(目標(biāo)函數(shù)和約束條件都是線性函數(shù)的優(yōu)化問(wèn)題);
非線性規(guī)劃模型(目標(biāo)函數(shù)或者約束條件是非線性的函數(shù)); 整數(shù)規(guī)劃(決策變量是整數(shù)值得規(guī)劃問(wèn)題);
多目標(biāo)規(guī)劃(具有多個(gè)目標(biāo)函數(shù)的規(guī)劃問(wèn)題) ;目標(biāo)規(guī)劃(具有不同優(yōu)先級(jí)的目標(biāo)和偏差的規(guī)劃問(wèn)題)
動(dòng)態(tài)規(guī)劃(求解多階段決策問(wèn)題的最優(yōu)化方法) 。數(shù)學(xué)規(guī)劃模型相對(duì)比較好理解,關(guān)鍵是要能熟練地求出模型的解。
以下是解線性規(guī)劃模型的方法:
1.線性規(guī)劃問(wèn)題
線性規(guī)劃問(wèn)題的標(biāo)準(zhǔn)形式為:
min f ' *x?sub.to:A*x
其中f、x、b、beq、lb、ub為向量,A、Aeq為矩陣。
MATLAB中,線性規(guī)劃問(wèn)題(Linear Programming)的求解使用的是函數(shù)linprog。
函數(shù) linprog
格式 x = linprog(f,A,b) %求min f ' *x sub.to A*x<=b
線性規(guī)劃的最優(yōu)解。
x = linprog(f,A,b,Aeq,beq) %等式約束 ,若沒(méi)有不等式約束 ,則A=[ ],b=[ ]。
x = linprog(f,A,b,Aeq,beq,lb,ub) %指定x的范圍 ,若沒(méi)有等式約束 ,則Aeq=[ ],beq=[
]
x = linprog(f,A,b,Aeq,beq,lb,ub,x0) %設(shè)置初值x0
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
%
options為指定的優(yōu)化參數(shù)
[x,fval] = linprog(…) % 返回目標(biāo)函數(shù)最優(yōu)值,即fval= f ' *x。
[x,lambda,exitflag] = linprog(…) % lambda為解x的Lagrange乘子。
[x, lambda,fval,exitflag] = linprog(…) % exitflag為終止迭代的錯(cuò)誤條件。
[x,fval, lambda,exitflag,output] = linprog(…) %
output為關(guān)于優(yōu)化的一些信息
說(shuō)明
若exitflag>0表示函數(shù)收斂于解x,exitflag=0表示超過(guò)函數(shù)估值或迭代的最大數(shù)字,exitflag<0表示函數(shù)不收斂于解x;若lambda=lower
表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式約束,lambda=eqlin表示等式約束,lambda中的非0元素表示對(duì)應(yīng)的約束是有效約束;output=iterations表示迭代次數(shù),output=algorithm表示使用的運(yùn)算規(guī)則,output=cgiterations表示PCG迭代次數(shù)。
2.非線性規(guī)劃問(wèn)題
利用函數(shù)fminbnd求有約束的一元函數(shù)的最小值
格式 x = fminbnd(fun,x1,x2)?x = fminbnd(fun,x1,x2,options) % options為指定優(yōu)化參數(shù)選項(xiàng)
[x,fval] = fminbnd(…) % fval為目標(biāo)函數(shù)的最小值
[x,fval,exitflag] = fminbnd(…) %xitflag為終止迭代的條件
[x,fval,exitflag,output] = fminbnd(…) % output為優(yōu)化信息
命令 利用函數(shù)fminsearch求無(wú)約束多元函數(shù)最小值
函數(shù) fminsearch
格式 x = fminsearch(fun,x0)
%x0為初始點(diǎn),fun為目標(biāo)函數(shù)的表達(dá)式字符串或MATLAB自定義函數(shù)的函數(shù)柄。
x = fminsearch(fun,x0,options) % options查optimset
[x,fval] = fminsearch(…) %最優(yōu)點(diǎn)的函數(shù)值
[x,fval,exitflag] = fminsearch(…) % exitflag與單變量情形一致
[x,fval,exitflag,output] = fminsearch(…) %output與單變量情形一致
注意:fminsearch采用了Nelder-Mead型簡(jiǎn)單搜尋法。
命令 利用函數(shù)fminunc求多變量無(wú)約束函數(shù)最小值
函數(shù) fminunc
格式 x = fminunc(fun,x0) %返回給定初始點(diǎn)x0的最小函數(shù)值點(diǎn)
x = fminunc(fun,x0,options) % options為指定優(yōu)化參數(shù)
[x,fval] = fminunc(…) %fval最優(yōu)點(diǎn)x處的函數(shù)值
[x,fval,exitflag] = fminunc(…) % exitflag為終止迭代的條件,與上同。
[x,fval,exitflag,output] = fminunc(…) %output為輸出優(yōu)化信息
[x,fval,exitflag,output,grad] = fminunc(…) % grad為函數(shù)在解x處的梯度值
[x,fval,exitflag,output,grad,hessian] = fminunc(…)
%目標(biāo)函數(shù)在解x處的海賽(Hessian)值
注意:當(dāng)函數(shù)的階數(shù)大于2時(shí),使用fminunc比f(wàn)minsearch更有效,但當(dāng)所選函數(shù)高度不連續(xù)時(shí),使用fminsearch效果較好。
利用fmincon求線性有約束的多元函數(shù)的最小值
函數(shù) fmincon
格式 x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval] = fmincon(…)
[x,fval,exitflag] = fmincon(…)
[x,fval,exitflag,output] = fmincon(…)
[x,fval,exitflag,output,lambda] = fmincon(…)
[x,fval,exitflag,output,lambda,grad] = fmincon(…)
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(…)
函數(shù) fminbnd
格式 x = fminbnd(fun,x1,x2) %返回自變量x在區(qū)間
上函數(shù)fun取最小值時(shí)x值,fun為目標(biāo)函數(shù)的表達(dá)式字符串或MATLAB自定義函數(shù)的函數(shù)柄。
x = fminbnd(fun,x1,x2,options) % options為指定優(yōu)化參數(shù)選項(xiàng)
[x,fval] = fminbnd(…) % fval為目標(biāo)函數(shù)的最小值
[x,fval,exitflag] = fminbnd(…) %xitflag為終止迭代的條件
[x,fval,exitflag,output] = fminbnd(…) % output為優(yōu)化信息
說(shuō)明
若參數(shù)exitflag>0,表示函數(shù)收斂于x,若exitflag=0,表示超過(guò)函數(shù)估計(jì)值或迭代的最大數(shù)字,exitflag<0表示函數(shù)不收斂于x;若參數(shù)output=iterations表示迭代次數(shù),output=funccount表示函數(shù)賦值次數(shù),output=algorithm表示所使用的算法。
3.二次規(guī)劃問(wèn)題
函數(shù) quadprog
格式 x = quadprog(H,f,A,b) %其中H,f,A,b為標(biāo)準(zhǔn)形中的參數(shù),x為目標(biāo)函數(shù)的最小值。
x = quadprog(H,f,A,b,Aeq,beq) �q,beq滿足等約束條件 。
x = quadprog(H,f,A,b,Aeq,beq,lb,ub) % lb,ub分別為解x的下界與上界。
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) %x0為設(shè)置的初值
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) %
options為指定的優(yōu)化參數(shù)
[x,fval] = quadprog(…) %fval為目標(biāo)函數(shù)最優(yōu)值
[x,fval,exitflag] = quadprog(…) % exitflag與線性規(guī)劃中參數(shù)意義相同
[x,fval,exitflag,output] = quadprog(…) % output與線性規(guī)劃中參數(shù)意義相同
[x,fval,exitflag,output,lambda] = quadprog(…) %
lambda與線性規(guī)劃中參數(shù)意義相同
4. ?極小化極大(Minmax)問(wèn)題
函數(shù) fminimax
格式 x = fminimax(fun,x0)
x = fminimax(fun,x0,A,b)
x = fminimax(fun,x0,A,b,Aeq,beq)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval,maxfval] = fminimax(…)
[x,fval,maxfval,exitflag] = fminimax(…)
[x,fval,maxfval,exitflag,output] = fminimax(…)
[x,fval,maxfval,exitflag,output,lambda] = fminimax(…)
5.多目標(biāo)規(guī)劃問(wèn)題
函數(shù) fgoalattain
格式 x = fgoalattain(fun,x0,goal,weight)
x = fgoalattain(fun,x0,goal,weight,A,b)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x =
fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval] = fgoalattain(…)
[x,fval,attainfactor] = fgoalattain(…)
[x,fval,attainfactor,exitflag] = fgoalattain(…)
[x,fval,attainfactor,exitflag,output] = fgoalattain(…)
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(…)
6.最小二乘最優(yōu)問(wèn)題
有約束線性最小二乘
函數(shù) lsqlin
格式 x = lsqlin(C,d,A,b) %求在約束條件 下,方程Cx = d的最小二乘解x。
x = lsqlin(C,d,A,b,Aeq,beq) �q、beq滿足等式約束 ,若沒(méi)有不等式約束,則設(shè)A=[ ],b=[
]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub) %lb、ub滿足 ,若沒(méi)有等式約束,則Aeq=[ ],beq=[
]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0) % x0為初始解向量,若x沒(méi)有界,則lb=[ ],ub=[
]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options) % options為指定優(yōu)化參數(shù)
[x,resnorm] = lsqlin(…) % resnorm=norm(C*x-d)^2,即2-范數(shù)。
[x,resnorm,residual] = lsqlin(…) %residual=C*x-d,即殘差。
[x,resnorm,residual,exitflag] = lsqlin(…) %exitflag為終止迭代的條件
[x,resnorm,residual,exitflag,output] = lsqlin(…) %
output表示輸出優(yōu)化信息
[x,resnorm,residual,exitflag,output,lambda] = lsqlin(…) %
lambda為解x的Lagrange乘子
非線性數(shù)據(jù)(曲線)擬合
函數(shù) lsqcurvefit
格式 x = lsqcurvefit(fun,x0,xdata,ydata)
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
[x,resnorm] = lsqcurvefit(…)
[x,resnorm,residual] = lsqcurvefit(…)
[x,resnorm,residual,exitflag] = lsqcurvefit(…)
[x,resnorm,residual,exitflag,output] = lsqcurvefit(…)
[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(…)
非線性最小二乘格式 x = lsqnonlin(fun,x0) %x0為初始解向量;fun為
,i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隱含在算法中,fun的定義與前面相同。
x = lsqnonlin(fun,x0,lb,ub)
%lb、ub定義x的下界和上界: 。
x = lsqnonlin(fun,x0,lb,ub,options) %options為指定優(yōu)化參數(shù),若x沒(méi)有界,則lb=[
],ub=[ ]。
[x,resnorm] = lsqnonlin(…)
%
resnorm=sum(fun(x).^2),即解x處目標(biāo)函數(shù)值。
[x,resnorm,residual] = lsqnonlin(…) %
residual=fun(x),即解x處fun的值。
[x,resnorm,residual,exitflag] = lsqnonlin(…)
%exitflag為終止迭代條件。
[x,resnorm,residual,exitflag,output] = lsqnonlin(…)
%output輸出優(yōu)化信息。
[x,resnorm,residual,exitflag,output,lambda] = lsqnonlin(…)
%lambda為L(zhǎng)agrage乘子。
[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(…)
%fun在解x處的Jacobian矩。
非負(fù)線性最小二乘
函數(shù) lsqnonneg
格式 x = lsqnonneg(C,d) %C為實(shí)矩陣,d為實(shí)向量
x = lsqnonneg(C,d,x0) % x0為初始值且大于0
x = lsqnonneg(C,d,x0,options) % options為指定優(yōu)化參數(shù)
[x,resnorm] = lsqnonneg(…) % resnorm=norm (C*x-d)^2
[x,resnorm,residual] = lsqnonneg(…) %residual=C*x-d
[x,resnorm,residual,exitflag] = lsqnonneg(…)
[x,resnorm,residual,exitflag,output] = lsqnonneg(…)
[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(…)
6.非線性方程(組)求解
非線性方程的解
函數(shù) fzero
格式 x = fzero (fun,x0) %用fun定義表達(dá)式f(x),x0為初始解。
x = fzero (fun,x0,options)
[x,fval] = fzero(…) ?%fval=f(x)
[x,fval,exitflag] = fzero(…)
[x,fval,exitflag,output] = fzero(…)
非線性方程組的解
函數(shù) fsolve
格式 x = fsolve(fun,x0) %用fun定義向量函數(shù),其定義方式為:先定義方程函數(shù)function F = myfun
(x)。
F =[表達(dá)式1;表達(dá)式2;…表達(dá)式m] %保存為myfun.m,并用下面方式調(diào)用:x =
fsolve(@myfun,x0),x0為初始估計(jì)值。
x = fsolve(fun,x0,options)
[x,fval] = fsolve(…) ?%fval=F(x),即函數(shù)值向量
[x,fval,exitflag] = fsolve(…)
[x,fval,exitflag,output] = fsolve(…)
[x,fval,exitflag,output,jacobian] = fsolve(…) %
jacobian為解x處的Jacobian陣。
其余參數(shù)與前面參數(shù)相似。
轉(zhuǎn)自 程序人生
非線性最小二乘法-非線性最小二乘法
非線性最小二乘法-正文
y=f(x,θ)
式中y是系統(tǒng)的輸出,x是輸入,θ是參數(shù)(它們可以是向量)。這里的非線性是指對(duì)參數(shù)θ的非線性模型,不包括輸入輸出變量隨時(shí)間的變化關(guān)系。在估計(jì)參數(shù)時(shí)模型的形式f是已知的,經(jīng)過(guò)N次實(shí)驗(yàn)取得數(shù)據(jù)(x1,y1),
(x2,y1),…,(xn,yn)。估計(jì)參數(shù)的準(zhǔn)則(或稱目標(biāo)函數(shù))選為模型的誤差平方和
非線性最小二乘法就是求使Q達(dá)到極小的參數(shù)估計(jì)值孌。
由于
f的非線性,所以不能象線性最小二乘法那樣用求多元函數(shù)極值的辦法來(lái)得到參數(shù)估計(jì)值,而需要采用復(fù)雜的優(yōu)化算法來(lái)求解。常用的算法有兩類,一類是搜索算法,另一類是迭代算法。
搜索算法的思路是:按一定的規(guī)則選擇若干組參數(shù)值,分別計(jì)算它們的目標(biāo)函數(shù)值并比較大小;選出使目標(biāo)函數(shù)值最小的參數(shù)值,同時(shí)舍棄其他的參數(shù)值;然后按規(guī)則補(bǔ)充新的參數(shù)值,再與原來(lái)留下的參數(shù)值進(jìn)行比較,選出使目標(biāo)函數(shù)達(dá)到最小的參數(shù)值。如此繼續(xù)進(jìn)行,直到選不出更好的參數(shù)值為止。以不同的規(guī)則選擇參數(shù)值,即可構(gòu)成不同的搜索算法。常用的方法有單純形搜索法、復(fù)合形搜索法、隨機(jī)搜索法等。
迭代算法是從參數(shù)的某一初始猜測(cè)值θ(0)出發(fā),然后產(chǎn)生一系列的參數(shù)點(diǎn)θ(1)、θ(2)…,如果這個(gè)參數(shù)序列收斂到使目標(biāo)函數(shù)極小的參數(shù)點(diǎn)孌,那么對(duì)充分大的N就可用θ(N)
作為孌。迭代算法的一般步驟是:
① 給出初始猜測(cè)值θ(0),并置迭代步數(shù)i=1。
② 確定一個(gè)向量v(i)作為第i步的迭代方向。
③ 用尋優(yōu)的方法決定一個(gè)標(biāo)量步長(zhǎng)ρ(i),使得
Q(θ(i))<Q(θ(i)),其中θ(i)=θi-1+ρ(i)v(i)。
④ 檢查停機(jī)規(guī)則是否滿足,如果不滿足,則將i加1再?gòu)蘑陂_始重復(fù);如果滿足,則取θ(i)為孌。
典型的迭代算法有牛頓-拉夫森法、高斯迭代算法、麥夸特算法、變尺度法等。
非線性最小二乘法除可直接用于估計(jì)靜態(tài)非線性模型的參數(shù)外,在時(shí)間序列建模、連續(xù)動(dòng)態(tài)模型的參數(shù)估計(jì)中,也往往遇到求解非線性最小二乘問(wèn)題。
總結(jié)
以上是生活随笔為你收集整理的最小覆盖模型matlab_数学规划模型的matlab求解 非线性最小二乘lsqnonlin的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 中国最值钱的湖泊,价值12万亿,部队全天
- 下一篇: 中国打越南用了多少天?