当前位置:
文档之家› 最优化建模方法及matlab实现
最优化建模方法及matlab实现
功能:与fsolve()中的参数控制形式类似。
2013-7-11
13
已知二元函数 z f ( x, y ) ( x 2 x )e 例:
2
x 2 y 2 xy
, 试求其最小值.
>>f=inline('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2))','x');
例:求解 min
2 x1 x2 4 x3 3x4 x5
2 x2 x3 4 x4 2 x5 54 s.t. 3x1 4 x2 5 x3 x4 x5 62 x , x 0, x 3.32, x 0.678, x 2.57 3 4 5 1 2
初值得出其最小值.
>>f=inline('exp(-2*t)*cos(10*t)+exp(-3*(t+2))*sin(2*t)','t'); t0=1;[t1,f1]=fminsearch(f,t0) t1=0.92275390625000,f1=-0.15473299821860 >>t0=0.1;[t2,f2]=fminsearch(f,t0) t2=0.29445312500000,f2=-0.54362463738706
x0=[0,0]; ff=optimset;ff.Display='iter'; x=fminsearch(f,x0,ff)
>>x=fminunc(f,x0,ff)
2013-7-11
14
3、全局最优解和局部最优解
例: 已知函数 y (t ) e 2t cos10t e 3t 6 sin 2t , t 0, 试观察不同的
一般格式: opt=optimset;opt.TolX=1e-10;或set(opt,’TolX’,1e-10)
2013-7-11 8
例: 试用数值法求方程 e 3t sin(4t 2) 4e 0.5t cos 2t 0.5的解. >>y=inline('exp(3*t)*sin(4*t+2)+4*exp(0.5*t)*cos(2*t)0.5','t'); >> ff=optimset; ff.Display='iter'; [t,f]=fsolve(y,3.5203,ff) M-函数 function y=fc(t) y=exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5; >> ff=optimset; ff.Display='iter';
2013-7-11 2
进行验证: >>t=3.5203; vpa(exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5) ans= -.43167073997540938989914138801396e-4
2013-7-11
3
2、二元方程的图解法
命令形式:利用ezplot()和hold on. 例: 用图解法求解下面的联立方程
x 2 e xy / 2 e x / 2 sin(xy) 0 2 x cos(x y 2 ) y 2 e x y 0
2
>> ezplot('x^2*exp(-x*y^2/2)+exp(-x/2)*sin(x*y)') hold on ezplot('y^2*cos(y+x^2)+x^2*exp(x+y)')
2013-7-11
4
3、多项式型方程的准解析解(数值解)
例: 用图解法求解下面的联立方程
x2 y 2 1 0 0.75 x 3 y 0.9 0
>> ezplot('x^2+y^2-1') hold on ezplot('0.75*x^3-y+0.9')
2013-7-11
例: 求解 min
( x1 1) 2 ( x2 2) 2 ( x3 3) 2 ( x4 4) 2
x1 x2 x3 x4 5 s.t. 3x1 3x2 2 x3 x4 10 x , x , x , x 0 1 2 3 4
2013-7-11
[x,y]=solve('x^2+y^2-1=0','0.75*x^3-y+0.9=0')
数值验证:
>>[eval('x.^2+y.^2-1') eval('0.75*x.^3-y+0.9')]
误差验证: >>err=[x.^2+y.^2-1,0.75*x.^3-y+0.9];
norm(double(eval(err))) 2013-7-11
一、代数方程的求解
1、一元方程的图解法
命令形式:ezplot(符号函数表达式,变量取值范围) 功能:绘制隐函数f(x)=0的曲线。变量取值范围缺省时 默认[-6,6]。 例: 用图解法求方程 e 3t sin(4t 2) 4e 0.5t cos 2t 0.5. >>ezplot('exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)0.5',[0 5]) hold on,line([0 5],[0 0])
2013-7-11
11
<<syms t; y=exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5; ezplot(y,[0 4]) y1=diff(y); ezplot(y1,[0 4]) t0=solve(y1) y2=diff(y1); b=subs(y2,t,t0)
6
4、一般非线性方程的数值解
命令形式:x=fsolve(fun,x0) %最简形式 [x,f,flag,out]=fsolve(fun,x0,opt,p1,p2,…) %一般形式 功能:fun—方程的M-函数;x0—搜索点的初值;flag>0—表示 求解成功,否则求解出问题;opt—求解控制参数。 opt控制参数及其说明
2013-7-11
b1
命令形式1:[X,lag,how]=lp(C,A,b,v1,v2,x0) 功能:C,A,b的意义如矩阵表示里参数;v1,v2表示 决策变量的上界和下界(其维数可以小于X,但表示 前几个分量的上下界);x0表示初始值;X时输出最 优解;lag是lagrange乘子,维数等于约束条件的个 数,非零的向量是起作用的约束条件;how给出错误 信息:infeasible(无可行解),unbounded(无界解), ok(求解成功).
2013-7-11
10
二、无约束最优化
Min z f ( x), x ( x1 , x n )T
1、解析解法和图解法
f f f | x x0 0, | x x0 0,..., | x x0 0 x1 x2 xn
例:用解析和图解法求解方程 e 3t sin(4t 2) 4e 0.5t cos 2t 0.5.
2013-7-11
21
2、二次型规划 目标函数: min
1 X HX CX 2
AX b
约束条件:
Aeq X Beq xm x x M
2013-7-11
22
命令形式: [X,f,flag,c]=quadprog(H,C,A,b,Aeq,Beq,xm,xM,x0,opt) 功能:各个参数的解释如前,若各个约束条件不存在, 则用空矩阵来代替。
Display—中间结果显示方式(off,iter,notify,final)
off:不显示; iter:逐步显示; notify:求解不收敛时给出提示; final:只显示最终值。
2013-7-11 7
opt控制参数及其说明
LargeScale—表示是否使用大规模问题算法(on,off),一般几个
目标函数:
min z CX
AX b
约束条件:
Aeq X Beq xm x x M
2013-7-11
19
命令形式2: [X,f,flag,c]=linprog(C,A,b,Aeq,Beq,xm,xM,x0,opt) 功能:各个参数的解释如前,若各个约束条件不存 在,则用空矩阵来代替。
例:求解 min m 13 x y 5 z >> c=[13,-1,5]; A=[-1,-1,0;0,1,1]; x y 7 b=[-7,10]; s.t. y z 10 x 2, y 0, z 0 v0=[2,0,0]; [X,lag,how]=lp(c,A,b,v0) 2013-7-11 18
变量的问题不必采用该算法; GradObj—对目标函数是否使用梯度(on,off),可加快搜索速 度; MaxIter—求解过程最大允许的迭代次数; MaxFunEvals—方程函数或目标函数的最大调用次数; TolFun—误差函数的误差控制量,当函数的绝对值小于此值时 停止求解;
TolX—解的误差控制量,当解的绝对值小于此值时停止求解。
2013-7-11
15
三、带约束的最优化
1、线性规划 目标函数: min z c1 x1 c2 x2 cn xn 约束条件:
a11 x1 a12 x2 a1n xn ( , )b1 a x a x a x ( , )b 22 2 2n n 2 21 1 a x a x a x ( , )b m2 2 mn n m m1 1 x1 , x2 , , xn 0