1、第一题1.1 题目求函数f(X)=x14-2x12x2-2x1x2+3x12+4x22+4.5x1-4x2+5的极小值,初始点为X(0)=-2,2T,误差不大于0.001。注:此问题为无约束非线性规划问题的求解。1.2 建立数学模型 Find x1 , x2 min f(X)=x14-2x12x2-2x1x2+3x12+4x22+4.5x1-4x2+5 初始点 X(0)=-2,2T, 0.0011.3 运行结果迭代值 迭代次数x1x2f1-0.50000000000000-0.583333333333338.333333333333332-0.566062176165800.370682210
2、708123.004578340922933-0.652874320923100.398982834197582.978571588054454-0.650848939158930.401358609903932.978497143755115-0.650839107315690.401356625245232.97849714338108 通过牛顿法迭代5次可得出结果,当x1=-0.65083910731569,x2=0.40135662524523时,目标函数最优值fmin=2.97849714338108,且满足。1.4 迭代曲线1.5 检验结果 用Matlab自带优化程序检验 程序为:
3、 x0=-2,2;x,fval=fminsearch(x(1)4-5*x(1)2*x(2)-2*x(1)*x(2)+4*x(1)2+6*x(2)2+4.5*x(1)-4*x(2)+5,x0)x =-0.65086658687466 0.40137142333985fval =2.97849714628600 经检验用牛顿法进行迭代优化结果是正确的,优化结果达到精度要求,0.001。1.6 讨论(1)由以上迭代曲线可知,牛顿法迭代收敛速度很快,本优化经过迭代3次后目标函数值趋于平稳。也可采用黄金分割法,变尺度法等其他方法优化。由于本题比较简单,不必采用变尺度法来优化。(2)采用Matlab编程解
4、决了求导和计算海森阵比较复杂的难题,编程简单方便。1.7 Matlab源程序 function ZY32 format long syms x1 x2 %定义符号变量x1,x2 f=x14-2*x12*x2-5*x1*x2+6*x12+7*x22+4.5*x1-4*x2+5 %定义函数f df=diff(f,x1);diff(f,x2) %diff(f,x1)用于对函数f中变量x1求偏导 %diff(f,x2)用于对函数f中变量x2求偏导 f1=diff(f,x1,2); %diff(f,x1,2)用于对函数f中变量x1求而二次偏导 f2=diff(diff(f,x1),x2); %diff(
5、diff(f,x1),x2)用于对函数f中变量下x1,x2求偏导 f3=diff(diff(f,x2),x1); f4=diff(f,x2,2); %diff(f,x2,2)用于对函数f中变量x2求而二次偏导 ddf=f1,f2;f3,f4; %求函数f的海森阵 x1=-2;x2=2; td=eval(df); %计算梯度初值 hs=eval(ddf); %计算海森阵初值 %eval命令用于将符号变量转化为数值变量 i=0; eps=0.1 while eps0.01; i=i+1; eps=sqrt(td(1).2+td(2).2); %求梯度的模 x=x1;x2-inv(hs)*td; %
6、记录自变量迭代值 x1=x(1); x2=x(2); xx(i,:)=x; %记录迭代过程中间值 td=eval(df); hs=eval(ddf); last(i)=eval(f); %记录迭代过程中间值 end disp(迭代次数); i xx=xx fmin=last figure(1) plot(fmin); % 画目标函数变化图 grid on; hold on; xlabel(迭代次数); ylabel(f(x); title(f(x)函数迭代值); figure(2) plot(xx(:,1); grid on; xlabel(迭代次数); ylabel(x1迭代值); titl
7、e(x1变化图); figure(3) plot(xx(:,2); grid on; xlabel(迭代次数); ylabel(x2迭代值);title(x2变化图);第二题2.1 数学模型 Find x1 , x2 min f (X)=2x12+2x22-4x1-6x2 s.t. g1(X)=x1+5x2-50g2(X)=2x12-x20g3(X)=-x10g4(X)=-x20 初始点X(0)=0,0.75T, =0.0012.2 优化方法 此问题可规结为强约束问题,此题用罚函数法对在求解强约束非线性优化问题求解。用功能函数constr可以解决此类问题,本题中目标函数是非线性的,约束是线性的
8、。2.3 优化结果最小目标函数值f=-5.5039,自变量取值:X =0.6589, 0.8682T 验证优化结果正确。2.4 Matlab 源程序 在command window 输入question2,然后回车即行; Function questions2.m funf=f=x(1)2+4*x(2)2-7*x(1)-5*x(2) ; 定义目标函数 fung=g=x(1)+5*x(2)-5; 2*x(1)2-x(2); 定义约束条件 funi=funf fung; 组合矩阵 x0=0,0; %初值; options=1; 显示过程 vlb=0 0; 下边界x; vub= ; %无上边界;x,
9、options=constr(funi,x0,options,vlb,vub)2.5 计算结果 迭代次数目标值f自变量x1自变量x1约束g1约束g2约束g3约束g411010-10-12-1.0000-0.00001.0000-1.0000e-008-1.00001.0000e-008-13-1.000001.0000-5.0000e-008-1.00000-1.00004-1050050-505-12.75002.50000.5000012-2.5000-0.50006-8.68751.25000.750002.3750-1.2500-0.75007-8.68751.25000.7500-1
10、.0000e-0082.3750-1.2500-0.75008-8.68751.25000.7500-5.0000e-0082.3750-1.2500-0.75009-5.93650.71520.4511-2.02930.5720-0.7152-0.451110-5.51640.66090.867800.0059-0.6609-0.867811-5.51640.66090.86781.0000e-0080.0059-0.6609-0.867812-5.51640.66090.86785.0000e-0080.0059-0.6609-0.867813-5.50390.6589 0.868208.
11、5830e-006-0.6589-0.868214-5.50390.6589 0.86821.0000e-0088.6094e-006-0.6589-0.868215-5.50390.6589 0.8682-5.0000e-0088.5930e-006-0.6589-0.868216-5.50390.6589 0.868201.8429e-011-0.6589-0.868217-5.50390.6589 0.86828.2958e-0072.1864e-006-0.6589-0.868218-5.50390.65890.86824.7634e-005-9.5269e-006-0.6589-0.
12、868219-5.50390.65890.8682-8.8818e-016-1.1102e-016-0.6589-0.868220-5.49050.65650.8682-0.0024-0.0062-0.6565-0.868221-5.50440.65890.8680-0.00132.6130e-004-0.6589-0.868022-5.50390.65890.8682-1.0000e-0040.0000-0.6589-0.86822.6 迭代曲线2.7 讨论 (1)利用Matlab优化工具箱里边的功能函数condtr来优化求解目标函数f,能很快实现优化,达到目标,方便快捷。(2)由图可见迭代五次达到最低端,10次后趋于平稳。(3)优化结果满足精度要求0.001。(4)可见Matlab很容易对目标实现优化,对编程人员要求不高。只要知道如何使用命令。第三题
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1