乘子法
拉格朗日乘子法原理

拉格朗日乘子法原理拉格朗日乘子法是一种在约束条件下求极值的方法,它被广泛应用于数学、物理学和工程学等领域。
这种方法的核心思想是将原问题转化为一个无约束条件的极值问题,通过引入拉格朗日乘子来实现。
本文将介绍拉格朗日乘子法的原理及其应用。
首先,我们来看一下拉格朗日乘子法的基本原理。
对于一个有约束条件的极值问题,我们可以将其表达为如下形式:求f(x)在g(x)=0的条件下的极值。
其中,f(x)是我们要求极值的目标函数,g(x)是约束条件。
为了求解这个问题,我们引入拉格朗日函数L(x,λ),它的定义如下:L(x,λ) = f(x) + λg(x)。
其中,λ是拉格朗日乘子。
接下来,我们将原问题转化为一个无约束条件的极值问题,即求解如下的极值问题:求L(x,λ)的极值。
通过对L(x,λ)分别对x和λ求偏导数,并令其等于0,我们可以得到一组关于x和λ的方程,通过求解这组方程,我们就可以得到原问题的极值点。
拉格朗日乘子法的原理非常简单,但是它在实际问题中的应用却非常广泛。
比如在经济学中,拉格朗日乘子法可以用来求解效用最大化或者生产最大化的问题;在物理学中,它可以用来求解约束条件下的能量最小化问题;在工程学中,它可以用来求解优化设计问题等等。
除了上述的基本原理和应用之外,拉格朗日乘子法还有一些扩展和变种,比如广义拉格朗日乘子法、KKT条件等。
这些扩展和变种在实际问题中也有着重要的应用,它们可以帮助我们更好地理解和解决复杂的约束优化问题。
总之,拉格朗日乘子法是一种非常重要的数学工具,它在约束优化问题中有着广泛的应用。
通过引入拉格朗日乘子,我们可以将原问题转化为一个无约束条件的极值问题,从而更容易地求解出问题的极值点。
希望本文对拉格朗日乘子法的原理有所帮助,也希望读者在实际问题中能够灵活运用这种方法,解决各种复杂的约束优化问题。
罚函数之乘子法

罚函数之乘⼦法外罚函数主要⽤于对于等式约束问题的求解,内点法主要是对于不等式问题的求解,⼀般问题中包含等式约束以及不等式约束,故需要使⽤乘⼦法解决问题。
1、乘⼦法概述(1)等式约束乘⼦法描述:min f(x)s.t. g i(x) =0⼴义乘⼦法是拉格朗⽇乘⼦法与罚函数法的结合,构造增⼴函数:φ (x,λ,σ)=f(x)+λT g(x)+1/2σg T(x)g(x)在罚函数的基础上增加了乘⼦项,⾸先在σ⾜够⼤的基础上,获得ϕ的极⼩值,然后在调整λ获得原问题的最优解。
(2)包含等式约束以及不等式约束问题描述:min f(x)s.t. h i(x) =0,i=1,...,lg i(x)≥0,i=1,...m其基本思想是:先引进辅助变量把不等式约束化为等式约束,然后利⽤最优性条件消去辅助变量,主要是通过构造增⼴拉格朗⽇函数,进⾏外迭代与内迭代综合,带⼊乘⼦迭代公式,进⽽得出得出,故针对上述⼀般问题构造拉格朗⽇函数为:4、其代码实现为function [x,mu,lambda,output]=multphr(fun,hf,gf,dfun,dhf,dgf,x0)%功能:⽤乘⼦法解⼀般约束问题:min f(x),s.t. h(x)=0.g(x)>=0%输⼊:x0是初始点,fun,dfun分别是⽬标函数及其梯度;%hf,dhf分别是等式约束(向量)函数及其jacobi矩阵的转置;%gf,dgf分别是不等式约束(向量)函数及其jacobi矩阵的转置;%输出:x是近似最优点,mu,lambda分别是相应于等式约束和不等式% 等式约束的乘⼦向量;output是结构变量,输出近似极⼩值f,迭代次数,内迭代次数等%%%%%%c初始化相关参数%%%%%%%%%%%maxk=500; %最⼤迭代次数sigma=2.0; %罚因⼦eta=2.0; theta=0.8; %PHR算法中的实参数k=0; ink=0; %k,ink分别是外迭代和内迭代次数epsilon=1e-5;%终⽌误差值x=x0;he=feval(hf,x);gi=feval(gf,x);%he=feval(hf,x)=hf(x)n=length(x);l=length(he);m=length(gi);%选取乘⼦向量的初始值mu=0.1*ones(1,1);lambda=0.1*ones(m,1);%ones为⽣成m*n的全1矩阵btak=10; btaold=10; %⽤来检验终⽌条件的两个值while (btak>epsilon & k<maxk)%%%%%%c先求解⽆约束问题%%%%%%%%%%%%调⽤BFGS算法程序求解⽆约束⼦问题[x,v,ik]=bfgs('mpsi','dmpsi',x0,fun,hf,gf,dfun,dhf,dgf,mu,lambda,sigma);%%其中x为最优点,val为最优值,ik为迭代次数 ink=ink+ik;he=feval(hf,x);gi=feval(gf,x);%%%%%%%%%%计算btak%%%%%%%%%%%btak=0.0;for(i=1:l),btak=btak+he(i)^2; endfor(i=1:m)temp=min(gi(i),lambda(i)/sigma);btak=btak+temp^2;endbtak=sqrt(btak);if btak>epsilon%%%%%%%%%%%更新罚参数%%%%%%%%%%%if(k>=2 & btak>theta*btaold)sigma=eta*sigma;end%%%%%%%%%%%更新乘⼦向量%%%%%%%%%%%%for(i=1:l),mu(i)=mu(i)-sigma*he(i);endfor(i=1:m)%lambda(i)=max(0.0,lambda(i)-sigma*gi(i));lambda(i)=max(0.0,lambda(i)-gi(i));endend%%%%%%%%%%%迭代%%%%%%%%%%%%k=k+1;btaold=btak;x0=x;endf=feval(fun,x);output.fval=f;output.iter=k;output.inner_iter=ink;output.bta=btak;BFGS算法部分:function [x,val,k]=bfgs(fun,gfun,x0,varargin)%功能:⽤BFGS算法求解⽆约束问题:minf(x)%输⼊:x0是初始点,fun,gfun分别是⽬标函数及其梯度%varargin是输⼊的可变参数变量,简单调⽤bfgs时可以忽略,其他程序调⽤则尤为重要%输出:x为最优点,val为最优值,k时迭代次数maxk=500;%给出最⼤迭代次数rho=0.55;sigma=0.4;epsilon=1e-5;k=0;n=length(x0);Bk=eye(n);%Bk=feval('Hess',x0)while(k<maxk)gk=feval(gfun,x0,varargin{:});%计算梯度if(norm(gk)<epsilon),break;end%检验终⽌准则dk=-Bk\gk;%解⽅程组,计算搜索⽅向m=0;mk=0;while(m<20)%搜索求步长newf=feval(fun,x0+rho^m*dk,varargin{:});oldf=feval(fun,x0,varargin{:});if(newf<oldf+sigma*rho^m*gk'*dk)mk=m;break;endm=m+1;end%bfgs校正x=x0+rho^mk*dk;sk=x-x0;yk=feval(gfun,x,varargin{:})-gk;if(yk'*sk>0)Bk=Bk-(Bk*sk*sk'*Bk)/(sk'*Bk*sk)+(yk*yk')/(yk'*sk);endk=k+1;x0=x;endval=feval(fun,x0,varargin{:});主函数部分为:%⽬标函数⽂件function f=f1(x)f=(x(1)-2.0)^2+(x(2)-1.0)^2;%等式约束条件function he=h1(x)he=x(1)-2.0*x(2)+1.0;%不等式约束条件function gi=g1(x)gi=-0.25*x(1)^2-x(2)^2+1;%⽬标函数的梯度⽂件function g=df1(x)g=[2.0*(x(1)-2.0),2.0*(x(2)-1.0)]';%等式函数的Jacobi(转置)矩阵⽂件function dhe=dh1(x)dhe=[1.0,-2.0]';%不等式约束函数的Jacobi矩阵(转置矩阵)function dgi=dg1(x)dgi=[-0.5*x(1),-2.0*x(2)]';命令⾏指令为:x0=[3,3]'[x,mu,lambda,output]=multphr('f1','h1','g1','df1','dh1','dg1',x0)输出结果如下:。
拉格朗日乘子法 与拉格朗日方程

拉格朗日乘子法与拉格朗日方程拉格朗日乘子法与拉格朗日方程是应用数学中的两个重要概念,它们在优化问题和动力学中扮演着重要角色。
在本文中,我将深入探讨这两个概念的内涵和应用,帮助你更好地理解它们的意义和作用。
1. 拉格朗日乘子法的基本原理拉格朗日乘子法是一种数学工具,用于求解有等式约束的极值问题。
举例来说,当我们需要求一个函数在一些限制条件下的最大值或最小值时,拉格朗日乘子法可以帮助我们有效地解决这一问题。
具体来说,对于一个约束优化问题:\[ \max_{x} f(x) \]\[ s.t. g(x) = c \]其中,f(x)是我们需要优化的目标函数,g(x) = c表示约束条件。
使用拉格朗日乘子法,我们可以构建拉格朗日函数:\[ L(x, \lambda) = f(x) + \lambda(g(x) - c) \]其中,\(\lambda\)就是所谓的拉格朗日乘子。
通过对拉格朗日函数求偏导数,并令偏导数等于零,我们可以得到关于x和\(\lambda\)的方程,进而求解出最优解。
2. 拉格朗日方程的应用拉格朗日方程是描述一个动力学系统的经典物理学方程。
它可以从作用量原理出发推导得到,是描述系统运动方程的一种极其优美的形式。
具体而言,对于一个由广义坐标q和广义速度\(\dot{q}\)描述的动力学系统,它的拉格朗日函数可以表示为:\[ L(q, \dot{q}, t) = T - V \]其中,T代表系统的动能,V代表系统的势能。
根据欧拉-拉格朗日方程,我们可以得到系统的运动方程:\[ \frac{d}{dt}\left(\frac{\partial L}{\partial \dot{q}}\right) -\frac{\partial L}{\partial q} = 0 \]3. 个人观点和理解拉格朗日乘子法和拉格朗日方程都是非常有用的数学工具,它们在实际问题中的应用非常广泛。
在工程优化、经济学建模、物理学等领域,这两个工具都扮演着重要的角色。
不等式约束拉格朗日乘子法

不等式约束拉格朗日乘子法摘要:一、拉格朗日乘子法简介1.拉格朗日乘子法的定义2.拉格朗日乘子法的基本思想二、不等式约束问题与拉格朗日乘子法1.不等式约束问题的定义2.拉格朗日乘子法解决不等式约束问题的基本步骤三、拉格朗日乘子法的性质与特点1.拉格朗日乘子法的优点2.拉格朗日乘子法的缺点四、应用案例1.应用背景2.应用过程3.应用结果正文:一、拉格朗日乘子法简介拉格朗日乘子法是一种求解条件最优化问题的方法,由法国数学家拉格朗日于18 世纪提出。
该方法的基本思想是在原目标函数的基础上,引入一组拉格朗日乘子,构成一个新的函数,通过求解新函数的最小值,得到原问题的最优解。
拉格朗日乘子法适用于一类具有约束条件的优化问题,即需要在满足一定约束条件下,使目标函数达到最小值或最大值。
这类问题在实际生活中非常常见,如在经济学、工程设计、物理等领域都有广泛应用。
二、不等式约束问题与拉格朗日乘子法不等式约束问题是一类具有广泛应用的优化问题,其一般形式可以表示为:在满足一定约束条件g(x)≤0 的情况下,寻找使目标函数f(x) 最小化的x 值。
拉格朗日乘子法解决不等式约束问题的基本步骤如下:1.构建拉格朗日函数:在原目标函数的基础上,引入一组拉格朗日乘子λ,构成一个新的函数L(x,λ),其中x 为决策变量,λ为拉格朗日乘子。
2.求解拉格朗日函数的极小值:求解拉格朗日函数L(x,λ) 关于x 和λ的偏导数,并令其为0,得到一组方程组。
通过求解这组方程组,可以得到拉格朗日函数的极小值点。
3.判断极小值点是否为原问题的最优解:将求得的极小值点代入原目标函数和约束条件,判断是否满足约束条件。
如果满足,则该点为原问题的最优解;否则,继续调整拉格朗日乘子λ,重复上述过程,直到找到满足约束条件的最优解。
三、拉格朗日乘子法的性质与特点拉格朗日乘子法具有以下性质和特点:1.优点:拉格朗日乘子法能够处理一类具有广泛应用的不等式约束问题,通过引入拉格朗日乘子,将原问题转化为求解一个新函数的极小值问题,从而得到原问题的最优解。
拉格朗日乘子法:约束优化的工具

拉格朗日乘子法是一种用于解决约束优化问题的工具。
它被广泛应用于数学、经济学、物理学等领域,能够有效地求解约束条件下的极值问题。
本文将介绍拉格朗日乘子法的基本原理和应用,并举例说明其在实际问题中的运用。
拉格朗日乘子法是由法国数学家拉格朗日于18世纪提出的。
它基于拉格朗日乘子的概念,通过引入一个辅助变量,将约束条件融入到目标函数中,从而将原有的约束优化问题转化为不带约束的问题。
具体来说,我们假设有一个优化问题,需要在一组约束条件下求解目标函数的最大或最小值。
利用拉格朗日乘子法,我们可以构建一个拉格朗日函数,其中包含目标函数、约束条件和拉格朗日乘子。
然后,通过对拉格朗日函数求偏导数,并令其等于零,就可以得到一组方程,从而找到最优解。
为了更好地理解拉格朗日乘子法的原理,我们来看一个简单的例子。
假设一个矩形的面积为固定值S,我们需要求解满足这个约束条件下,矩形的周长最小值。
我们可以将矩形的长设为x,宽设为y,那么我们的目标函数可以表示为P = 2x + 2y,约束条件可以表示为S = xy。
根据拉格朗日乘子法,我们可以构建拉格朗日函数L = 2x + 2y - λ(xy - S),其中λ是拉格朗日乘子。
然后,我们对L分别对x、y和λ求偏导数,并令其等于零,得到以下方程组:1.∂L/∂x = 2 - λy = 02.∂L/∂y = 2 - λx = 03.∂L/∂λ = xy - S = 0通过求解这个方程组,我们可以得到最优解的x和y的值。
从而我们可以求得矩形的最小周长。
这个示例说明了拉格朗日乘子法的基本原理和应用。
实际上,拉格朗日乘子法不仅可以用于求解最小值问题,也可以用于求解最大值问题。
它的应用非常广泛,例如在经济学中,我们常常需要求解一个有约束条件的最优化问题,例如消费者最大化效用的问题。
通过引入拉格朗日乘子,我们可以将约束条件融入到目标函数中,从而求解最优解。
在物理学中,拉格朗日乘子法也被应用于求解约束体系的Lagrange方程,用于描述多体系统的运动。
第三章 (3) 乘子法

外点罚函数法
l
min F (x, k ) f (x) k
h
2 j
(
x)
j 1
若x* 是等式约束优化问题的局部最优解,则 h(x*) 0, j 1,..,l
l
xF ( x*, k ) f ( x*) 2 k hj ( x*)hj ( x*) f (x*)
x1
x2
2
c 2
x1
x2
22
下面用解析法求无约束优化的驻点,令:
x1
2 x1
vk
c x1
x2
2
0
x2
2 x2
vk
c x1
x2
2
0
得:
x1
x2
2c vk 2c 2
,
xk
2c vk 2c 2
, 2c vk 2c 2
一
乘 子二 法
三
Hestenes法 Powell法
Rockafellar法
一、Hestenes法
考虑等式约束问题
min f x xRn
s.t. hi x 0,i E 1, ,l.
Hestenes乘子法
(x,v)
f (x)
l
vjhj (x)
Rockafellar乘子法
Rockafellar在1973年将乘子法推广到不等式约束优化问 题,其思想是引入松弛变量,将不等式约束转化为等式 约束。
min f x xRn
gi x zi2 0,i I 1, ,l.
拉格朗日乘子法详细讲解

拉格朗日乘子法详细讲解嘿,朋友们!今天咱来唠唠拉格朗日乘子法。
这玩意儿啊,就像是一把神奇的钥匙,能帮咱解开好多难题呢!咱就打个比方吧,你想找一条路,能让你以最快的速度从 A 点到 B 点,但是路上有各种各样的限制和条件,就好像有好多篱笆挡着你。
这时候拉格朗日乘子法就出马啦!它能帮你找到那条最合适的路,既能满足那些限制条件,又能让你达到目的。
你说神奇不神奇?它就像是一个超级聪明的导航,能在复杂的情况中给你指出最正确的方向。
想象一下,你在一个迷宫里,到处都是死胡同和弯弯绕绕,你正发愁怎么出去呢。
这拉格朗日乘子法啊,就像是突然出现的一束光,照亮了你前行的路,让你一下子就找到出口啦!那它具体是怎么工作的呢?简单来说,就是通过引入一些新的变量,把那些限制条件和我们要优化的目标结合起来。
然后呢,就像解方程一样,一点点地算出那个最优解。
这可不容易啊!就好像你要解开一个超级复杂的谜题,得动动脑筋,好好琢磨琢磨。
但一旦你掌握了它,哇塞,那可真是威力无穷啊!比如说在工程领域,要设计一个最合理的结构,让它既坚固又轻便。
拉格朗日乘子法就能派上大用场啦,帮工程师们找到那个最佳的设计方案。
在经济学里呢,也能用来优化资源配置,让资源得到最合理的利用。
这可关系到咱的钱袋子啊,是不是很重要?在数学领域,那就更不用说啦,那是解决各种优化问题的得力助手呢!哎呀,这拉格朗日乘子法可真是个宝啊!它能让我们在复杂的世界里找到最优的解决方案,就像给我们配备了一双慧眼,能看清那些隐藏的路。
所以啊,朋友们,一定要好好了解了解拉格朗日乘子法。
别小看它哦,说不定哪天它就能帮你解决一个大难题呢!它真的是数学世界里的一颗璀璨明珠,等着我们去发掘它的光芒呢!。
拉格朗日乘子法符号

拉格朗日乘子法符号一、拉格朗日乘子法的概念与起源拉格朗日乘子法(Lagrange Multipliers)是一种数学优化方法,起源于19世纪法国数学家拉格朗日(Joseph-Louis Lagrange)的研究。
该方法主要用于解决带约束条件的优化问题,广泛应用于工程、经济学、计算机科学等领域。
二、拉格朗日乘子法在优化问题中的应用拉格朗日乘子法的基本思路是:对于一个带约束条件的优化问题,通过引入拉格朗日乘子,将原问题转化为无约束条件的优化问题,进而求解原问题。
设目标函数f(x),约束条件g(x)满足,求解问题:minimize f(x)subject to g(x)引入拉格朗日乘子λ,构造拉格朗日函数L(x, λ):L(x, λ) = f(x) + λg(x)求解拉格朗日函数的极小值,即可得到原问题的解。
三、拉格朗日乘子法的符号表示1.目标函数:f(x)2.约束函数:g(x)3.拉格朗日乘子:λ4.拉格朗日函数:L(x, λ)5.优化变量:x四、拉格朗日乘子法的优势与局限优势:1.可以处理带约束条件的优化问题;2.适用于多种领域的优化问题;3.求解过程较为简单。
局限:1.对约束条件有一定的要求,不适用于所有约束类型;2.当约束条件较多时,计算复杂度较高。
五、实际问题中的应用案例1.工程领域:在结构优化、电路设计等方面,通过拉格朗日乘子法求解带约束条件的优化问题;2.经济学领域:在微观经济学中,利用拉格朗日乘子法求解企业或个人的最优决策;3.计算机科学领域:在机器学习和数据挖掘中,利用拉格朗日乘子法解决特征选择和权重调整问题。
综上,拉格朗日乘子法作为一种数学优化方法,具有广泛的应用价值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012-2013(1)专业课程实践论文乘子法葛禹泽,0818180109,R数学08-1班李元东,0818180107,R数学08-1班王岳,0818180108,R数学08-1班一、算法理论乘子法是Powell 和Hestenes 于1969年针对等式约束优化问题同时独立提出的一种优化算法,后于1973年经Rockfellar 推广到求解不等式约束优化问题。
其基本思想是从原问题的拉格朗日函数出发,再加上适当的罚函数,从而将原问题转化为求解一系列的无约束优化子问题。
由于外罚函数法中的罚参数+∞→k σ ,因此增广目标函数变得“越来越病态”。
增广目标函数的这种病态性质是外罚函数法的主要缺点, 而这种缺陷在乘子法中由于引入拉格朗日函数及加上适当的罚函数而得以有效的克服。
我们考虑同时带有等式和不等式约束的优化问题的乘子法:()()(),,,1,0,,,1,0..,min m i x g l i x h t s x f i i =≥==其基本思想是把解等式约束优化问题的乘子法推广到不等式约束优化问题,即先引进辅助变量把不等式约束化为等式约束,然后再利用最优性条件消去辅助变量。
为叙述的方便计,我们先考虑如下只带有不等式约束的最优化问题()(),,,1,0..,min m i x g t s x f i =≥引进辅助变量(),,,1m i y i =,可以将上面的优化问题化为等价的等式约束优化问题:()(),,,1,0..,min 2m i y x g t s x f i i ==-利用外发函数法求解,此时增广拉格朗日函数为()()()[]()[]212212,,,~∑∑==-+--=mi iiiimi i y x g y x g x f y x σλσλψ 为了消去辅助变量y ,可考虑ψ~关于变量y 的极小化,由一阶必要条件,令()0,,,~=∇σλψy x y 可得()[],,,1,0222m i y x g y y i i i i i ==--σλ即()()[],,,1,02m i x g y y i i i i ==--λσσ故当()0>-i i x g λσ时,有()[]()i i i i i x g x g y λσλσσ112-=-=否则,由()[]02≥-+x g y i i i σλσ可推得0y i =。
综合起来。
,有()[]()()m i x g x g x g y i i i i i i i ,,1,0,0,12 =⎪⎩⎪⎨⎧->--=λσλσλσσ既有()()()()m i x g x g x g y x g i i i i i ii i ,,1,0,,0,2=⎪⎩⎪⎨⎧≤->-=-λσλσσλ (1)因此,当()0≤-i i x g λσ时,我们有()[]()[]()()[]()()[]2222222122i i i i i i iii i i x g x g x g y x g y x g λλσσσλσλ--=+-=-+--而当()0>-i i x g λσ时,有()[]()[]22222212112ii i iii i i y x g y x g λσλσλσσλ-=+-=-+--综合上述两种情形,将结果代回到()σλψ,,,~y x 中去得()()(){}[]()∑=--+==mi iiiyx g x f y x x 122)(,0min 21,,,~min ,,~λλσσσλψσλφ于是,将式(1)带入乘子迭代公式()()()()[]21i k k i i k i k y x g --=+σλλ得()()()⎩⎨⎧≤-->-=+,0)()(,,0)()(,01i k k i k i ik i k k i ik x g x g x g λσλλσλ 即(){}.,,1,0)()(,0max 1m i x g k i i k i k =≥-=+λλ回到一般约束优化问题,此时,增广拉格朗日函数为()∑∑∑===-++-=mi iili i li i i x g x h x h f x 1121]))(,0([min{21)(2)()x (,,,λσσσμσλμψ乘子迭代的公式为(){}.,,1,)()(,0max ,,,1),()()(11m i x g l i x h k i i k ik k i i k i k =-==-=++λλσμμ令12112)})(),(min{)((∑∑==⎥⎦⎤⎢⎣⎡+=mi i k k i li k i k x g x h σλβ则终止准则为εβ≤kimport java.awt.*;import java.awt.event.*;import javax.swing.*;import java.text.NumberFormat;public class Shu extends Frame implements ActionListener{Labellabelx12,labelx1,labelx22,labelx2,labelx1x2,labela,labelb,labelc,la bel11,label12,labelnum,labelnumber;TextFieldtextx12,textx1,textx22,textx2,textc1,textx1x2,texta,textb,textc,tex tnum,textnumber;Button button;TextArea textarea; //10double x1,x12,x22,x2,x1x2,c1,a,b,c,num,number;double a1x1,a1x2,a1c,a2x1,a2x2,a2c;int n=1;double ans[],answ[];public Shu(){ans=new double[20];answ=new double[20];labelx12=new Label("x1^2+");labelx1=new Label("x1+");labelx22=new Label("x2^2+"); //20labelx2=new Label("x2+");labelx1x2=new Label("x1*x2+");labela=new Label("x1+");labelb=new Label("x2+");labelc=new Label("=0");label11=new Label("min ");label12=new Label("s.t.");textx12=new TextField(3);textx1=new TextField(3);textx22=new TextField(3); //30textx2=new TextField(3);textx1x2=new TextField(3);textc1=new TextField(3);texta=new TextField(3);textb=new TextField(3);textc=new TextField(3);labelnumber=new Label("δ:");labelnum=new Label("μ:");textnum=new TextField(3);textnumber=new TextField(3);button=new Button("enter");button.addActionListener(this);textarea=new TextArea(10,10);Box box1=Box.createHorizontalBox(); //44 box1.add(label11);box1.add(textx12);box1.add(labelx12);box1.add(textx1);box1.add(labelx1);box1.add(textx22);box1.add(labelx22);box1.add(textx2);box1.add(labelx2);box1.add(textx1x2); //54 box1.add(labelx1x2);box1.add(textc1);Box box2=Box.createHorizontalBox();box2.add(label12);box2.add(texta);box2.add(labela);box2.add(textb);box2.add(labelb);box2.add(textc);box2.add(labelc); //64 Box box3=Box.createHorizontalBox();box3.add(labelnum);box3.add(textnum);box3.add(labelnumber);box3.add(textnumber);box3.add(button);Box boxh=Box.createVerticalBox();boxh.add(box1);boxh.add(box2);boxh.add(box3);boxh.add(Box.createVerticalGlue());setLayout(new BorderLayout());add(boxh,BorderLayout.NORTH);add(textarea,BorderLayout.SOUTH); //78addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) {System.exit(0);}});setVisible(true);setBounds(100,100,600,600);validate();} //88public void actionPerformed(ActionEvent e){if(e.getSource()==button){x12=Double.parseDouble(textx12.getText());x1=Double.parseDouble(textx1.getText());x22=Double.parseDouble(textx22.getText());x2=Double.parseDouble(textx2.getText());x1x2=Double.parseDouble(textx1x2.getText());c1=Double.parseDouble(textc1.getText()); //98a=Double.parseDouble(texta.getText());b=Double.parseDouble(textb.getText());c=Double.parseDouble(textc.getText());num=Double.parseDouble(textnum.getText());number=Double.parseDouble(textnumber.getText());f(x12,x1,x22,x2,x1x2,c1,a,b,c);}}void f(double x12,double x1,double x22,double x2,double x1x2,double c1,double a,double b,double c){a1x1=2*x12+number*a*a;a1x2=x1x2+number*a*b; //110a1c=x1-num*a+number*a*c;a2x1=x1x2+number*a*b;a2x2=2*x22+number*b*b;a2c=x2-num*b+number*c*b;ans[n]=(a2c*a1x2-a1c*a2x2)/(a1x1*a2x2-a2x1*a1x2);answ[n]=(a1c*a2x1-a2c*a1x1)/(a2x2*a1x1-a1x2*a2x1); NumberFormat f1=NumberFormat.getInstance();f1.setMaximumFractionDigits(4);String s1=f1.format(ans[n]);ans[n]=Double.parseDouble(s1); //120 NumberFormat f2=NumberFormat.getInstance();f2.setMaximumFractionDigits(4);String s2=f2.format(answ[n]);answ[n]=Double.parseDouble(s2);num=num-number*(a*ans[n]+b*answ[n]+c);if(n>=10){textarea.setText("x1="+ans[n]+" x2="+answ[n]+" "+n); }else{if(n>2){if((ans[n]==ans[n-1])&&(answ[n]==answ[n-1])){ textarea.setText("x1="+ans[n]+" x2="+answ[n]+" "+n); }else //130 {n+=1;f(x12,x1,x22,x2,x1x2,c1,a,b,c);}}else{n+=1;f(x12,x1,x22,x2,x1x2,c1,a,b,c);}}}public static void main(String args[]){new Shu(); }}四、算法实现例1. 用乘子法求解问题01..22min 21212221=-+-+x x t s x x x x解:运行程序(1)显示出对话框。