惩罚函数的乘子法
罚函数罚与乘子法(1)2

罚函数法罚函数法是能够处理一般的约束优化问题:min ()()0,1,2,()0,1,2,,i if x h x i kg x j m ⎧⎪==⎨⎪≥=⎩ 的一类方法。
其基本思想是将约束优化问题卑微无约束问题来求解。
罚函数是由目标函数和约束函数的某种组合得到的函数,对于等式约束的优化问题min ()()0,1,2,i f x h x i k⎧⎨==⎩ ,可以定义如下的罚函数: 21()()()ki i F x f x c h x ==+∑将约束优化问题转化为无约束优化问题;对于不等式约束的优化问题min ()()0,1,2,,i f x g x j m⎧⎨≥=⎩ 可以定义如下的罚函数:11()()()mj j F x f x C g x ==+∑对于同时存在等式约束和不等式约束的优化问题,可以去上面两个罚函数的组合。
当然罚函数还有其他的取法,但是构造罚函数的思想都是一样的,即使得在可行点罚函数等于原来的目标函数值,在不可行点罚函数等于一个很大的数。
外点罚函数法 1.算法原理外点罚函数法是通过一系列罚因子{}i c ,求罚函数的极小值来逼近原约束问题的最有点。
之所以称为外点罚函数法,是因为它是从可行域外部向约束边界逐步靠拢的。
2,。
算法步骤用外点罚函数法求解线性约束问题min ()f x Ax b ⎧⎨=⎩的算法过程如下:1,给定初始点(0)x ,罚参数列{}i c 及精度0ε>,置1k =; 2,构造罚函数2()()F x f x c Ax b =+-;3,用某种无约束非线性规划,以(1)k x -为初始点求解min ()F x ;4,设最优解为()k x ,若()k x 满足某种终止条件,则停止迭代输出()k x ,否则令1k k =+,转2;罚参数列{}i c 的选法:通常先选定一个初始常数1c 和一个比例系数2ρ≥,则其余的可表示为11i i c c ρ-=。
终止条件可采用()S x ε≤,其中2()S x c Ax b =-。
第二节 罚函数法

β ∈ (0,1) ,允许误差 ε > 0 ,置 k = 1 ;
k −1 x 为初点,求解无约束优化问题 Step2: 以
min G ( x, r ) = f ( x) + rB( x) s.t. x ∈ int S
设其极小点为 x ;
G ( x, r ) = f ( x) − r ∑ ln g i ( x)
m
-----对数障碍函数
由 G( x, r ) 的定义, r 取值越小,问题
min G ( x, r ) = f ( x) + rB( x) s.t. x ∈ int S
的最优解越接近约束优化问题的最优解。 2. 内点罚函数法的计算步骤
k min H ( x) x Step4: 以 为初始点求解无约束问题 x∈Sk k +1 的最优解
x k +1 ,其中
H k +1 ( x) = −∑ gi ( x) + rk +1 ∑ gi ( x)
i∈I k i∈J k
, Sk = {x | gi ( x) > 0, i ∈ J k }
令 rk + 2 = βrk +1 , k = k + 1, 返回 Step2. 注:该算法中,对于 k = 0,1,2,L ,有 I k +1 ⊂ I k , J k +1 ⊃ J k ,且 最后某个 I k = ∅ 。 三. 广义乘子法 1. 对于等式约束优化问题
φ ( x, y , ω , σ ) = f ( x ) − ∑ ω j ( g j ( x ) − y j ) +
2 j =1 l
罚函数法与乘子法

2. 图形解释
设 u = f (x), x∈R1 约束范围为S。改造u为
f (x), x S u*= 加大, x S
使 u*的无约束极小点成为u 的约束极小点,如图所示。
2 算法 4.2.1 已知约束问题,取控制误差 >0 和罚因子的放大系数
c 1(可取 104,c 10)。
Step 1 给定初始点 x0 (可以不是可行点)和初始罚 因子1(可取1 1)。令k 1。
Step 2 以 xk1为初始求无约束问题:
min P(x, k ) f (x) k P(x)
得最优解 xk x(rk )。
Step 3 若rk B(xk ) , 则 xk 为不等式约束问题的
近似最优解,停止。否则,令rk1 crk , k k 1转 Step 2.
例 4.2.4 用内点法求解
min
f
( x1 ,
x2 )
1 3 (x1
1)3
x2
s.t. 1 x1 0
x2 0
x1(
)
x2 (
)
4 2 1
2,
在例 4.2.2 中,
x1
(
)
1
>-1,
x( )都是从可行域外部趋向于最优解 x *的。因此称
为外罚函数,而称这种解法为外罚函数法。
例 用外点法求
min
f
(x)
1 3
( x1
1)
3
x2
,
s.t.
1 x1 0,
x2 0.
乘子法

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 =。
罚函数之乘子法

罚函数之乘⼦法外罚函数主要⽤于对于等式约束问题的求解,内点法主要是对于不等式问题的求解,⼀般问题中包含等式约束以及不等式约束,故需要使⽤乘⼦法解决问题。
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)输出结果如下:。
乘子法

min T ( x , M k0 ) n
xE
的最优解x k0 x ( M k ) R, 那么x ( M k0 )是问题 min f ( x ) (V) gi ( x ) 0, i 1, 2, , m 的最优解。并且对于任意的M >M k0 , 无约束问题 min T ( x, M ) n
收敛定理
定理3:设(1) f ( x ), gi ( x )连续; (2) M k 严格递增,且趋于无穷大; (3)M k 0, min T ( x, M k )有最优解
xEn
x k , 且有界; min f ( x ) (4)问题 有最优解xmin , gi ( x ) 0 则
f ( x( M )) M min 0, gi ( x (M )) T x( M ), M ,
收敛定理
另一方面,x ( M )是 min T ( x, M )的最优解, n
xE
所以 T x ( M ), M T x k0 , M =f x k0 . 矛盾。 所以,x ( M ) R成立。
收敛定理
(1) a). k0 , 使得x k0 R,那么x k0 是原问题的最优解;
b).
(2)
(3)
x 无穷,任意极限点是原问题的最优解。
k
k k k
f ( x )递增,且 lim f ( x T ( x , M )严格递增且
k k k
) f min;
lim T ( x k , M k ) f min ;
min 0,g ( x )
i 1 i
m
2
lim min 0 , g ( x ) i ki
最优化方法 第三章(罚函数法)

这种惩罚策略,对于在无约束的求解过程中企图违反约
束的迭代点给予很大的目标函数值,迫使无约束问题的 极小点或者无限地向可行域D靠近,或者一直保持在可 行域D内移动,直到收敛到原来约束最优化问题的极小 点。
不改变可行域局部极小值,可以将 约束域之外的局部极小值变大。
p ( x) 0, x D p ( x) 0, x D
k k
k 1
k 1
xk 1是F x, M k 1 的最优解.
k 1 k k 1 k 0 M k 1 M k p ( x ) p ( x ) p ( x ) p ( x )
M k 1 M k
(3) f ( x k 1 ) M k p( x k 1 ) F ( x k 1 , M k ) F ( x k , M k ) f ( x k ) M k p( x k )
gi ( x) gi ( x) max gi ( x), 0 = 罚函数p(x)的构造 2 m l p( x) (max gi ( x), 0) 2 h 2 j ( x)
i 1 j 1
(1) p(x)连续 (2) p( x) 0, x D (3) p( x) 0, x D
二、外点法 外点罚函数法算法步骤 1:给定初始点 x 0 ,初始罚因子M1 0 (可取M1 1 ), 精度 0, k : 1. 2:以 x k 1初始点,求解无约束优化问题
min F ( x, M k ) f ( x) M k p( x)
得到极小点 x* ( M k ),记为 x k , 其中
p( x) (max gi ( x), 0) h 2 j ( x)
2 i 1 j 1 m l
罚函数法

No γk+1 = β γk
闸函数法: (续)
求初始内点: 1 x (1) , k 1, 转2 ; 2 令I k {i | g i ( x ( k ) ) 0}
(k ) 若 I , 则 x 为初始内点。 k 转 3 ; (k ) (k ) 否则,取j使g j ( x ) max{ g i ( x ) | i I k }
2 x
0
0
g ( x , ) 2 最优值(原问题)
3.闸函数法: (续)
定义 ( ) inf{ f ( x) B( x) | x S 0 } 有类似于罚函数法的理论结果: 定理: ( fg ), f , g连续,S 0 Φ , 最优解x S 0 则 1 min{ f ( x) | x S} inf{ ( ) | 0} lim ( )
(t ), (t )的典型取法: (t ) [max {0, t}] p (t ) | t | p
p为正整数。
当p 2时,称2次罚函数.(常用:因2次是最低次的光滑函数)
1.罚函数概念 (续)
Ex. min x s.t. x 2 0
2
( x 2) 2 , x 2 二次罚函数 : ( x) [max{ 0, x 2}] 0, x 2 如图 当 时, min 解析解 : 辅助函数 x ( x 2) 2 x 2 (4 1) x 4 , g ( x, ) f ( x) ( x) x ,x 2 4 1 当x 2时, g ( x, )的驻点x 2 2 故x 2 opt. 当x 2时, g ( x, )的最小值点~ x 2 x2 f ( x) ( x) f ( x ) x 2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013-2014(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 iiii mi 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 iiii 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 i k 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 ili 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 =-==-=++λλσμμ令212112)})(),(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. 用乘子法求解问题2221)1()2(min -+-x xts .0521=++x x解:运行程序(1)显示出对话框。