matlab求多元函數(shù)極限(matlab多元約束函數(shù)優(yōu)化)
fseminf是一個非線性規(guī)劃求解器,可最小化由以下指定的問題:(帶有附加參數(shù)約束):
1.fseminf函數(shù)
x=fseminf(fun,x0,ntheta,seminfcon)x=fseminf(fun,x0,ntheta,seminfcon,A,b)x=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq)x=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub)x=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,選項)x=fseminf(problem)[x,fval]=fseminf(___)[x,fval,exitflag,output]=fseminf(___)[x,fval,exitflag,output,lambda]=fseminf(___)b和beq是向量。A和Aeq是矩陣。c(x)、ceq(x)和Ki(x,wi)是返回向量的函數(shù)。f(x)是返回標(biāo)量的函數(shù)。f(x)、c(x)和ceq(x)可以是非線性函數(shù)。向量(或矩陣)Ki(x,wi)0是x和一組附加變量w1,w2,wn的連續(xù)函數(shù)。變量w1,w2,wn是最大長度為2的向量。x、lb和ub可以作為向量或矩陣傳遞;請參閱矩陣參數(shù)。x=fseminf(fun,x0,ntheta,seminfcon)從x0開始,找到滿足seminfcon中定義的ntheta半無限約束的函數(shù)fun的最小值。x=fseminf(fun,x0,ntheta,seminfcon,A,b)還嘗試滿足線性不等式A*xb。x=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq)也會最小化,從而滿足線性方程Aeq*x=beq。如果不存在不等式,則設(shè)A=[]且b=[]。x=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub)定義x中設(shè)計變量的一組下限和上限,使得解始終在lbx范圍內(nèi)ub。[x,fval,exitflag,output]=fseminf(___)還返回描述退出條件的值exitflag以及提供有關(guān)優(yōu)化過程的信息的結(jié)構(gòu)輸出。[x,fval,exitflag,output,lambda]=fseminf(___)返回一個結(jié)構(gòu)體lambda,其字段包含解x處的拉格朗日乘子。x=fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options)使用options指定的優(yōu)化選項執(zhí)行最小化。使用optimoptions來設(shè)置這些選項。x=fseminf(problem)求problem的最小值,也就是problem中描述的結(jié)構(gòu)。[x,fval]=fseminf(___),對于上述任何輸入語法,返回解x處目標(biāo)函數(shù)fun的值。2.實例1
程序
clc;全部清除;objfun=@(x)(x-1)^2;%匿名函數(shù)x0=0.2;%設(shè)置初始點x0=0.2。ntheta=1;%指定半無限約束。A=[];b=[];Aeq=[];貝q=[];磅=0;ub=2;選項=optimoptions(fseminf,PlotFcn,optimplotfval,顯示,iter,MaxIterations,1000);[x,fval,exitflag,output,lambda]=fseminf(objfun,x0,ntheta,@seminfcon,A,b,Aeq,beq,lb,ub,options)%解決問題并通過調(diào)用fseminf查看結(jié)果。x1=fseminf(objfun,x0,ntheta,@seminfcon)seminfcon.m函數(shù)
function[c,ceq,K1,s]=seminfcon(x,s)c=[];%非線性不等式約束ceq=[];%非線性等式約束%t初始采樣間隔(步長為0.01,采樣間隔為0到1)如果isnan(s)s=[0.010];結(jié)束時間=0:s(1):1;%和半無限約束函數(shù)g(x,t)K1=(x-0.5)-(t-0.5).^2;最終運(yùn)行結(jié)果
最大線性搜索定向一階迭代F計數(shù)f(x)約束步長導(dǎo)數(shù)最優(yōu)性過程020.64-0.2140.254.684e-121-1.60.3發(fā)現(xiàn)滿足約束的局部最小值。優(yōu)化完成,因為目標(biāo)函數(shù)在可行方向上不遞減,在最優(yōu)容差值內(nèi),并且在約束容差值內(nèi)滿足約束。停止標(biāo)準(zhǔn)詳細(xì)信息x=0.5000fval=0.2500exitflag=1輸出=struct:iterations:包含以下字段2funcCount:4lssteplength:1stepsize:4.6841e-12Algorithm:活動集firstorderopt:9.3682e-12constrviolation.6841e-12message:局部最小值發(fā)現(xiàn)滿足約束條件。優(yōu)化已完成,因為目標(biāo)函數(shù)在可行方向上不遞減,在最優(yōu)容差值內(nèi),并且滿足約束條件,在約束容差值內(nèi)。停止條件詳細(xì)信息優(yōu)化已完成:一階最優(yōu)性度量9.e-12小于options.OptimalityTolerance=1.e-06,最大約束違規(guī)4.e-12小于options.ConstraintTolerance=1.e-06.lambda=struct:包含以下字段lower:0upper:0eqlin:[01double]eqnonlin:[01double]ineqlin:[01double]ineqnonlin:[10double]發(fā)現(xiàn)滿足約束的局部最小值。優(yōu)化完成,因為目標(biāo)函數(shù)在可行方向上不遞減,在最優(yōu)容差值內(nèi),并且在約束容差值內(nèi)滿足約束。停止標(biāo)準(zhǔn)詳細(xì)信息x1=0.50003.實例2
方式一目標(biāo)函數(shù)以匿名函數(shù)形式計算
程序
clc;全部清除;objfun=@(x)-0.225*(x(1))-0.225*(x(2))-0.1*(x(3));x0=[0.50.51];恩西塔=1;A=[1,21;3,40;5,60];b=[10;20;30];Aeq=[1,2,3;2,4,1];beq=[10;20];磅=[00-inf];ub=[];選項=optimoptions(fseminf,PlotFcn,optimplotfval,顯示,iter,MaxIterations,1000);x=fseminf(objfun,x0,ntheta,@seminfcon1,A,b,Aeq,beq,lb,ub,options)seminfcon1.m函數(shù)
function[c,ceq,K1,s]=seminfcon1(x,s)c=[];%非線性不等式約束ceq=[];%非線性等式約束%t初始采樣間隔(步長為0.01,采樣間隔為0到1)如果isnan(s)s=[0.010];結(jié)束t(1,)=0:s(1):1;t(2,)=1-t(1);num=長度(t(1,));t(3,)=linspace(-5,5,num);t(4,)=linspace(-5,5,num);t(5,)=linspace(-5,5,num);保存t%和半無限約束函數(shù)g(x,t)K1=(0.48-0.225).*(t(1,)-x(1))+(0.51-0.225).*(t(2,)-x(2))-0.1*(t(3,)-x(3))-t(4,)-t(5,)*0.5;最終運(yùn)行結(jié)果
最大線性搜索定向一階迭代F計數(shù)f(x)約束步長導(dǎo)數(shù)最優(yōu)性過程04-0.不可行起始點18-4..981-0.1355.89不可行收斂到不可行點。fseminf停止,因為當(dāng)前搜索方向的大小小于步長容差值的兩倍,但約束條件未滿足在約束容差值內(nèi)。停止標(biāo)準(zhǔn)詳細(xì)信息x=28.4915-9..0000方式二目標(biāo)函數(shù)以函數(shù)句柄計算
程序
clc;全部清除;x0=[0.50.51];恩西塔=1;A=[1,21;3,40;5,60];b=[10;20;30];2,3;2,4,1];貝q=[10;20];磅=[00-inf];ub=[];選項=optimoptions(fseminf,PlotFcn,optimplotfval,顯示,iter,MaxIterations,1000);x=fseminf(@myfun,x0,ntheta,@seminfcon1,A,b,Aeq,beq,lb,ub,options)seminfcon1.m函數(shù)
function[c,ceq,K1,s]=seminfcon1(x,s)c=[];%非線性不等式約束ceq=[];%非線性等式約束%t初始采樣間隔(步長為0.01,采樣間隔為0到1)如果isnan(s)s=[0.010];結(jié)束t(1,)=0:s(1):1;t(2,)=1-t(1);num=長度(t(1,));t(3,)=linspace(-5,5,num);t(4,)=linspace(-5,5,num);t(5,)=linspace(-5,5,num);保存t%和半無限約束函數(shù)g(x,t)K1=(0.48-0.225).*(t(1,)-x(1))+(0.51-0.225).*(t(2,)-x(2))-0.1*(t(3,)-x(3))-t(4,)-t(5,)*0.5;endmyfun.m
函數(shù)y=myfun(x)y=-0.225*(x(1))-0.225*(x(2))-0.1*(x(3));最終運(yùn)行結(jié)果
最大線性搜索定向一階迭代F計數(shù)f(x)約束步長導(dǎo)數(shù)最優(yōu)性過程04-0.不可行起始點18-4..981-0.1355.89不可行收斂到不可行點。fseminf停止,因為當(dāng)前搜索方向的大小小于步長容差值的兩倍,但約束條件未滿足在約束容差值內(nèi)。停止條件詳細(xì)信息x=28.4915-9..0000fseminf停止原因,以整數(shù)形式返回。
標(biāo)識
闡明
1
該函數(shù)收斂到解x。
4
搜索方向的模數(shù)小于指定的容差,并且約束違規(guī)小于options.ConstraintTolerance。
5
方向?qū)?shù)的大小小于指定的容差,并且約束違規(guī)小于options.ConstraintTolerance。
0
迭代次數(shù)超過options.MaxIterations或函數(shù)計算次數(shù)超過options.MaxFunctionevaluations。
-1
由輸出函數(shù)或繪圖函數(shù)停止。
-2
找不到可行點。
4.參考內(nèi)容
[1
作者|郭志龍
編輯|郭志龍
校對|郭志龍