无约束最优化问题及其Matlab求解
- 格式:doc
- 大小:206.50 KB
- 文档页数:4
Matlab中的最优化问题求解方法近年来,最优化问题在各个领域中都扮演着重要的角色。
无论是在工程、经济学还是科学研究中,我们都需要找到最优解来满足特定的需求。
而Matlab作为一种强大的数值计算软件,在解决最优化问题方面有着广泛的应用。
本文将介绍一些Matlab中常用的最优化问题求解方法,并探讨其优缺点以及适用范围。
一. 无约束问题求解方法1. 最速下降法最速下降法是最简单且直观的无约束问题求解方法之一。
其基本思想是沿着梯度的反方向迭代求解,直到达到所需的精度要求。
然而,最速下降法的收敛速度通常很慢,特别是在局部极小值点附近。
2. 共轭梯度法共轭梯度法是一种改进的最速下降法。
它利用了无约束问题的二次函数特性,通过选择一组相互共轭的搜索方向来提高收敛速度。
相比于最速下降法,共轭梯度法的收敛速度更快,尤其适用于大规模优化问题。
3. 牛顿法牛顿法是一种基于二阶导数信息的优化方法。
它通过构建并求解特定的二次逼近模型来求解无约束问题。
然而,牛顿法在高维问题中的计算复杂度较高,并且需要矩阵求逆运算,可能导致数值不稳定。
二. 线性规划问题求解方法1. 单纯形法单纯形法是一种经典的线性规划问题求解方法。
它通过在可行域内进行边界移动来寻找最优解。
然而,当问题规模较大时,单纯形法的计算复杂度会大幅增加,导致求解效率低下。
2. 内点法内点法是一种改进的线性规划问题求解方法。
与单纯形法不同,内点法通过将问题转化为一系列等价的非线性问题来求解。
内点法的优势在于其计算复杂度相对较低,尤其适用于大规模线性规划问题。
三. 非线性规划问题求解方法1. 信赖域算法信赖域算法是一种常用的非线性规划问题求解方法。
它通过构建局部模型,并通过逐步调整信赖域半径来寻找最优解。
信赖域算法既考虑了收敛速度,又保持了数值稳定性。
2. 遗传算法遗传算法是一种基于自然进化过程的优化算法。
它模拟遗传操作,并通过选择、交叉和变异等操作来搜索最优解。
遗传算法的优势在于其适用于复杂的非线性规划问题,但可能需要较长的计算时间。
优化问题的Matlab求解方法引言优化问题在实际生活中有着广泛应用,可以用来解决很多实际问题。
Matlab作为一款强大的数学计算软件,提供了多种求解优化问题的方法。
本文将介绍在Matlab中求解优化问题的常见方法,并比较它们的优缺点。
一、无约束无约束优化问题是指没有约束条件的优化问题,即只需要考虑目标函数的最大或最小值。
在Matlab中,可以使用fminunc函数来求解无约束优化问题。
该函数使用的是拟牛顿法(quasi-Newton method),可以迭代地逼近最优解。
拟牛顿法是一种迭代方法,通过逐步近似目标函数的梯度和Hessian矩阵来求解最优解。
在使用fminunc函数时,需要提供目标函数和初始点,并可以设置其他参数,如迭代次数、容差等。
通过不断迭代,拟牛顿法可以逐步逼近最优解。
二、有约束有约束优化问题是指在优化问题中加入了约束条件。
对于有约束优化问题,Matlab提供了多种求解方法,包括线性规划、二次规划、非线性规划等。
1. 线性规划线性规划是指目标函数和约束条件都为线性的优化问题。
在Matlab中,可以使用linprog函数来求解线性规划问题。
该函数使用的是单纯形法(simplex method),通过不断迭代来逼近最优解。
linprog函数需要提供目标函数的系数矩阵、不等式约束矩阵和约束条件的右手边向量。
通过调整这些参数,可以得到线性规划问题的最优解。
2. 二次规划二次规划是指目标函数为二次型,约束条件线性的优化问题。
在Matlab中,可以使用quadprog函数来求解二次规划问题。
该函数使用的是求解二次规划问题的内点法(interior-point method),通过迭代来求解最优解。
quadprog函数需要提供目标函数的二次项系数矩阵、线性项系数矩阵、不等式约束矩阵和约束条件的右手边向量。
通过调整这些参数,可以得到二次规划问题的最优解。
3. 非线性规划非线性规划是指目标函数或者约束条件中至少有一个是非线性的优化问题。
Matlab优化算法以及应用案例分析引言Matlab是一款功能强大的数学软件,以其丰富的功能和灵活的编程环境而受到广泛的应用。
在数学建模和优化问题中,Matlab优化算法是一个重要的工具。
本文将介绍Matlab优化算法的基本原理和常见应用案例分析。
一、Matlab优化算法的基本原理1.1 最优化问题的定义在开始介绍优化算法之前,我们首先需要了解什么是最优化问题。
最优化问题可以定义为在一定的约束条件下,找到使得目标函数达到最大或者最小的变量取值。
最优化问题可以分为无约束问题和约束问题两种。
1.2 Matlab优化工具箱Matlab提供了丰富的优化工具箱,其中包含了许多优化算法的实现。
这些算法包括无约束优化算法、约束优化算法、全局优化算法等。
这些工具箱提供了简单易用的函数接口和丰富的算法实现,方便用户在优化问题中使用。
1.3 优化算法的分类优化算法可以分为传统优化算法和启发式优化算法两类。
传统优化算法包括梯度下降法、牛顿法、共轭梯度法等,它们利用目标函数的一阶或二阶导数信息进行搜索。
而启发式优化算法则通过模拟生物进化、遗传算法、蚁群算法等方法来进行搜索。
二、Matlab优化算法的应用案例分析2.1 无约束优化问题无约束优化问题是指在没有约束条件的情况下,找到使得目标函数达到最小或最大值的变量取值。
在Matlab中,可以使用fminunc函数来求解无约束优化问题。
下面以一维函数的最小化问题为例进行分析。
首先,我们定义一个一维的目标函数,例如f(x) = 3x^2 - 4x + 2。
然后使用fminunc函数来求解该问题。
代码示例:```matlabfun = @(x)3*x^2 - 4*x + 2;x0 = 0; % 初始点[x, fval] = fminunc(fun, x0);```在上述代码中,fun是目标函数的定义,x0是初始点的取值。
fminunc函数将返回最优解x和目标函数的最小值fval。
matlab 牛顿法多维无约束最优化在MATLAB中,你可以使用内置的优化工具箱函数来使用牛顿法进行多维无约束最优化。
具体来说,你可以使用fminunc函数,该函数使用一种基于牛顿法的优化算法。
以下是一个示例:
MATLABfunction [x,fval,exitflag,output] = multidimensional_unconstrained_optimization()
% 定义目标函数
fun = @(x) x(1)^2 + x(2)^2 - 4*cos(x(1)) - 2*cos(x(2));
% 定义初始点
x0 = [0.5,0.5];
% 调用fminunc函数
options = optimoptions('fminunc','Algorithm','quasi-newton');
[x,fval,exitflag,output] = fminunc(fun,x0,options);
end在这个例子中,我们定义了一个目标函数fun,它是一个多维函数,然后我们定义了一个初始点x0。
然后我们调用fminunc函数,并指定我们想要使用的算法为quasi-newton(一种牛顿法)。
最后,我们得到了优化问题的解x,以及目标函数在最优解处的值fval。
注意:这个例子中的目标函数是一个简单的二次函数,其最小值在原点。
因此,对于更复杂的目标函数,你可能需要更精细地调整初始点或选项。
在MATLAB中,BFGS(Broyden-Fletcher-Goldfarb-Shanno)算法是一种常用的拟牛顿法,用于解决无约束最优化问题。
它是基于牛顿法的一种改进方法,可以在不需要计算Hessian矩阵的情况下进行优化。
BFGS算法在理论和实际应用中都具有重要意义,对于复杂的优化问题具有较好的收敛性和有效性。
在BFGS算法中,通过不断迭代更新逆Hessian矩阵的估计来逼近Hessian矩阵的逆,从而实现对目标函数的优化。
该算法的核心思想是利用目标函数的梯度信息来不断调整逆Hessian矩阵的估计,以求得最优解。
与牛顿法相比,BFGS算法避免了计算和存储目标函数的Hessian矩阵,从而减少了计算的复杂度,提高了算法的效率。
针对BFGS算法的MATLAB实现,可以通过以下步骤进行展开:1. 导入目标函数和梯度计算:在MATLAB中,首先需要定义目标函数和梯度的计算方法。
这可以通过函数句柄或匿名函数的方式实现,以便在算法中进行调用。
2. 初始点设置与参数设定:根据优化问题的特点和要求,在MATLAB 中设置初始点和算法参数,如最大迭代次数、容许误差等。
3. BFGS算法实现:使用MATLAB内置的优化函数或自行编写BFGS 算法的迭代更新过程,在每次迭代中更新参数估计并计算新的搜索方向,直至满足停止条件为止。
4. 结果分析与可视化:分析优化结果,包括最优解、最优目标值以及迭代过程中的效果。
通过MATLAB的绘图功能,可视化优化过程,观察收敛性和效率。
在实际应用中,BFGS算法的MATLAB实现可以结合特定的优化问题进行定制和调整,以获得最佳的优化效果。
通过在MATLAB中灵活使用BFGS算法,可以解决各类复杂的优化问题,包括机器学习模型训练、参数估计、信号处理等领域的实际应用问题。
总结来说,BFGS算法在MATLAB中的应用是一项重要而又复杂的工作,需要对优化问题和算法本身有深入的理解和应用经验。
例4-1 MA TLAB实现,用M函数文件形式求解:syms s t;f=s^2+3*t^2-2*t*s+4*t+3*s;[x,minf]=minZBLH(f,[-2 6],[0.2 0.2],1.5,[t s],0.0001,0.0001) 坐标轮换minZBLH函数文件如下:function [x,minf] = minconPS2(f,x0,delta,u,var,eps1,eps2)%目标函数:f;%初始点:x0;%收缩系数:u;%自变量向量:var;%步长精度:eps1;%自变量精度:eps2;if nargin == 7eps2 = 1.0e-6;endn = length(var);y = x0;bmainCon = 1;while bmainConyf = subs(f,var,y);yk_1 = y;for i=1:ntmpy = zeros(size(y));tmpy(i) = delta(i);tmpf = subs(f, var,y+tmpy);if tmpf < yfbcon = 1;while bcontmpy(i) = 2*tmpy(i);tmpf_i = subs(f, var,y+tmpy);if tmpf_i <yfy_res = y + tmpy;elsebcon = 0;endendelsetmpy(i) = delta(i);tmpf = subs(f, var,y-tmpy);if tmpf < yfbcon = 1;while bcontmpy(i) = 2*tmpy(i);tmpf_i = subs(f, var,y-tmpy);if tmpf_i <yfy_res = y - tmpy;elsebcon = 0;endendelsey_res = y ;delta = delta/u;endendy = y_res;endif norm(y - yk_1) <= eps2if max(abs(delta)) <= eps1x = y;bmainCon = 0;elsedelta = delta / u;endendendminf =subs(f,var,x);M函数文件的运行结果如下:x = -1.7499-3.2499minf = -8.3750======================================================= 例4-2 MA TLAB实现,用M函数文件形式求解:syms t s;f=t^2+s^2-t*s-10*t-4*s+60;[x,mf]=minFD(f,[0 0],[t s])梯度法函数文件minFD如下:function [x,minf] = minFD(f,x0,var,eps)%目标函数:f;%初始点:x0;%自变量向量:var;%精度:eps;%目标函数取最小值时的自变量值:x;%目标函数的最小值:minfformat long;if nargin == 3eps = 1.0e-6;endsyms l;tol = 1;gradf = - jacobian(f,var);while tol>epsv = subs(gradf,var,x0);tol = norm(v);y = x0 + l*v;yf = subs(f,var,y);[a,b] = minJT(yf,0,0.1);xm = minHJ(yf,a,b); %用黄金分割法进行一维搜索x1 = x0 + xm*v;x0 = x1;endx = x1;minf = subs(subs(f,x(1)),x(2));format short;M函数文件的运行结果如下:x = 8.0000 6.0000mf =8.0000======================================================================= 例4-3 MA TLAB实现,用M函数文件形式求解:syms t s;f=t^2-4*s^2;[x,mf]=minNT(f,[1 1],[t s])牛顿法函数文件minNT如下function [x,minf] = minNT(f,x0,var,eps)%目标函数:f;%初始点:x0;%自变量向量var;%精度:eps;%目标函数取最小时的自变量值:x;%目标函数最小值:minf;format long;if nargin == 3eps = 1.0e-6;endtol = 1;x0 = transpose(x0);gradf = jacobian(f,var); %梯度方向jacf = jacobian(gradf,var); %雅克比矩阵while tol>epsv = subs(gradf,var,x0);tol = norm(v);pv = subs(jacf,var,x0);p = -inv(pv)*transpose(v); %搜索方向p = double(p);x1 = x0 + p;x0 = x1;endx = x1;minf = subs(f,var,x);format short;M函数文件的运行结果如下:x = 0mf = 0============================================================================ 例4-4 MA TLAB实现,用M函数文件形式求解:syms t s z;f=(t-s+z)^2+(-t+s+z)^2+(t+s+z)^2[x,mf]=minMNT(f,[0.5 1 0.5],[t s z])阻尼牛顿法函数文件minNT如下function [x,minf] = minMNT(f,x0,var,eps)format long;if nargin == 3eps = 1.0e-6;endtol = 1;x0 = transpose(x0);syms l;gradf = jacobian(f,var);jacf = jacobian(gradf,var);while tol>epsv = subs(gradf,var,x0);tol = norm(v);pv = subs(jacf,var,x0);p = -inv(pv)*transpose(v);y = x0 + l*p;[a,b] = minJT(yf,0,0.1); %进退法求单峰区间xm = minHJ(yf,a,b); %黄金分割法进行一维搜素x1 = x0 + xm*p;x0 = x1;endx = x1;minf = subs(f,var,x);format short;M函数文件的运行结果如下:x = 1.0e-015 *-0.3468-0.6936-0.3468mf =2.4053e-030=================================================================== 例4-5 MA TLAB实现,用M函数文件形式求解:syms t s;f=t^2+4*s^2;[x,mf]=minGETD(f,[1 1],[t s])共轭梯度法函数文件minGETD如下x0 = transpose(x0);n = length(var);syms l;gradf = jacobian(f,var);v0 = subs(gradf,var,x0);p = -transpose(v0);k = 0;while 1v = subs(gradf,var,x0);tol = norm(v);if tol<=epsx = x0;break;endy = x0 + l*p;yf = subs(f,var,y);[a,b] = minJT(yf,0,0.1); %进退法确定单峰区间xm = minPWX(yf,a,b); %二次插值一维搜素x1 = x0 + xm*p;vk = subs(gradf,var,x1);if tol<=epsx = x1;break;endif k+1==nx0 = x1;continue;elselamda = dot(vk,vk)/dot(v,v);p = -transpose(vk) + lamda*p;k = k+1;x0 = x1;endendminf = subs(f,var,x);format short;M函数文件的运行结果如下:x = 1.0e-015 *0.33310.0971mf = 1.4868e-031=================================================================== 例4-6 MA TLAB实现,用M函数文件形式求解:syms t s;f=4*(t-5)^2+(s-6)^2;X=[8 10 11;9 11 11];[x,mf]=minSimpSearch(f,X,1.2,0.5,2.0,0.3,[t s])单纯形法函数文件minGETD如下function [x,minf] = minSimpSearch(f,X,alpha,sita,gama,beta,var,eps)%:f;%反射系数:alpha;%紧缩系数:sita;%扩展系数:gama;%收缩系数:beta;%自变量向量:var;%精度:eps;%目标函数取最小值时的自变量值:x;%目标函数最小值:minf;format long;if nargin == 7eps = 1.0e-6;endN = size(X);n = N(2);FX = zeros(1,n);while 1for i=1:nFX(i) = subs(f,var,X(:,i));end[XS,IX] = sort(FX); %将单纯形的顶点按目标函数值的大小重新编号Xsorted = X(:,IX); %排序后的编号px = sum(Xsorted(:,1:(n-1)),2)/(n-1); %单纯形的中心Fpx = subs(f,var,px);SumF = 0;for i=1:nSumF = SumF + (FX(IX(i)) - Fpx)^2;endSumF = sqrt(SumF/n);if SumF <= epsx = Xsorted(:,1);break;elsex2 = px + alpha*(px - Xsorted(:,n)); %将中心点向单纯形外反射fx2 = subs(f,var,x2);if fx2 < XS(1)x3 = px + gama*(x2 - px); %中心点的扩展fx3 = subs(f,var,x3);if fx3 < XS(1)Xsorted(:,n) = x3;X = Xsorted;continue;elseXsorted(:,n) = x2;X = Xsorted;continue;endelseif fx2 < XS(n-1)Xsorted(:,n) = x2;X = Xsorted;continue;elseif fx2 < XS(n)Xsorted(:,n) = x2;endx4 = px + beta*(Xsorted(:,n) - px); %中心点压缩fx4 = subs(f,var,x4);FNnew = subs(f,var,Xsorted(:,n));if fx4 < FNnewXsorted(:,n) = x4;X = Xsorted;continue;elsex0 = Xsorted(:,1);for i=1:nXsorted(:,j) = x0 + sita*(Xsorted(:,j) - x0);endendendendendX = Xsorted;endminf = subs(f,var,x);format short;M函数文件的运行结果如下:x = 5.00025.9999mf =1.8370e-007================================================================= 例4-7 MA TLAB实现,用M函数文件形式求解:syms t s;f=t^2+2*s^2-4*t-2*t*s;p=[-1 0; 0 1];[x,mf]=minPowell(f,[1 1],p,[t s])Powell法函数文件minPowell如下function [x,minf] = minPowell(f,x0,P,var,eps)%目标函数:f;%初始搜索点:x0;%线性无关的初始向量组:p;%自变量向量:var;%精度:eps;%目标函数取最小值时的自变量:x;%目标函数的最小值:minf:format long;if nargin == 4eps = 1.0e-6;endn = length(var)+1;syms l;while 1y = zeros(size(P));y(:,1) = x0;for i=1:n-1 %在每个搜索方向上进行一维搜索yv = y(:,i) + l*P(:,i);fy = subs(f, var,yv);[a,b] = minJT(fy,0,0.1);tl = minPWX(fy,a,b);y(:,i+1) = y(:,i) + tl*P(:,i);endP(:,n) = y(:,n) - y(:,1);if norm(P(:,n)) <= eps %精度判断x = y(:,n);break;elsefor j=1:nFY(j) = subs(f, var,y(:,j));endmaxDF = -inf;m = 0;for j=1:n-1 %求出算法中对应的m df = FY(j) - FY(j+1);if df > maxDFmaxDF = df;m = j+1;endendtmpF = subs(f, var,2*y(:,n)-y(:,1));fl = FY(1) - 2*FY(n) + tmpF;if fl<2*maxDFyv = y(:,n) + l*P(:,n);fy = subs(f, var,yv);[a,b] = minJT(fy,0,0.1);tl = minPWX(fy,a,b);x0 = y(:,n) + tl*P(:,n);P(:,m:(n-1)) = P(:,(m+1):n); %重新设置搜索方向elsex0 = y(:,n);endendendminf = subs(f,var,x);format short;M函数文件的运行结果如下:x = 4.00002.0000mf = -8.0000====================================================================== 例4-8 MA TLAB实现,用M函数文件形式求解:syms x1 x2f=x1^2+4*x2^2;[x,mf]=minDFP(f,[1 1],[x1 x2])DF P法函数文件minDFP如下function [x,minf] = minDFP(f,x0,var,eps)%目标函数:f:%初始点:x0;%自变量向量:var;%精度:eps;%目标函数取最小值时的自变量:x;%目标函数的最小值:minf;format long;if nargin == 3eps = 1.0e-6;endx0 = transpose(x0);n = length(var);syms l;H = eye(n,n);gradf = jacobian(f,var);v0 = subs(gradf,var,x0);p = -H*transpose(v0);k = 0;while 1v = subs(gradf,var,x0);tol = norm(v);if tol<=epsx = x0;break;endy = x0 + l*p;yf = subs(f,var,y);[a,b] = minJT(yf,0,0.1);xm = minPWX(yf,a,b); %用抛物线法进行一维搜索 x1 = x0 + xm*p;vk = subs(gradf,var,x1);tol = norm(vk);if tol<=epsx = x1;break;endif k+1==n %重新迭代x0 = x1;continue;elsedx = x1 - x0;dgf = vk - v;dgf = transpose(dgf);dxT = transpose(dx);dgfT = transpose(dgf);mdx = dx*dxT;mdgf = dgf*dgfT;fz = H*(dgf*(dgfT*H));H = H + mdx/(dxT*dgf)-inv(dgfT*(H*dgf))*fz; %校正公式 p = -H*transpose(vk);k = k+1;x0 = x1;endendminf = subs(f,var,x);format short;M 函数文件的运行结果如下:x = 1.0e-015 *⎪⎪⎭⎫ ⎝⎛-0555.01110.0 mf = 2.4652e-032==============================例4-10 用fminsearch 函数求解函数5)1(213)2(1)(2221-+-+--=x x X f 的极值。
无约束最优化问题及其Matlab 求解
一、教学目标
1. 了解悟约束规划的基本算法最速下降法(共轭梯度法)的基本步骤
2. 掌握用Matlab 求解五约束的一元规划问题、多元规划问题、以及Matlab 求解过程中参数的设置。
3. 针对实际问题能列出其无约束规划方程并用Matlab 求解。
二、 教学手段
1. 用Flashmx 2004制作课件,并用数学软件Matlab 作辅助教学。
2. 采用教学手法上采取讲授为主、讲练结合的方法。
3. 上机实践操作。
三、 教学内容
(一)、求解无约束最优化问题的基本思想
标准形式:
★(借助课件说明过程)
(二)、无约束优化问题的基本算法
1.最速下降法(共轭梯度法)算法步骤:
⑴ 给定初始点n E X ∈0,允许误差0>ε,令k=0;
⑵ 计算()k X f ∇;
⑶ 检验是否满足收敛性的判别准则: ()ε≤∇k X f ,
若满足,则停止迭代,得点k X X ≈*,否则进行⑷;
⑷ 令()k k X f S -∇=,从k X 出发,沿k S 进行一维搜索,
即求k λ使得: ()()
k k k k k S X f S X f λλλ+=+≥0min ; ⑸ 令k k k k S X X λ+=+1,k=k+1返回⑵.
最速下降法是一种最基本的算法,它在最优化方法中占有重要地位.最速下降法的优点是工作量小,存储变量较少,初始点要求不高;缺点是收敛慢。
★(借助课件说明过程,由于 算法 在实际中用推导过程比较枯燥,用课件显示搜索过程比较直观)
2. 采用Matlab 软件,利用最速下降法求解无约束优化问题
常用格式如下:
(1)x= fminbnd (fun,x1,x2)
(2)x= fminbnd (fun,x1,x2 ,options)
(3)[x ,fval]= fminbnd (...)
(4)[x ,fval ,exitflag]= fminbnd (...)
(5)[x ,fval ,exitflag ,output]= fminbnd (...)
其中(3)、(4)、(5)的等式右边可选用(1)或(2)的等式右边。
函数fminbnd ()X f n E X ∈min 其中 1:E E f n →
的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解。
或者fminunc、fminsearch命令。
3.优化函数的变量Matlab输入格式
4. Matlab计算结果的输出
5.控制参数options的设置
(1) Display: 显示水平.取值为’off’时,不显示输出; 取值为’iter’时,显示每次迭代的信息;取值为’final’时,显示最终结果.默认值为’final’.
(2) MaxFunEvals: 允许进行函数评价的最大次数,取值为正整数.
(3) MaxIter: 允许进行迭代的最大次数,取值为正整数.
(三)、多元函数无约束优化问题Matlab命令格式为:
(1)x= fminunc (fun,X0 );或x=fminsearch (fun,X0 )
(2)x= fminunc (fun,X0 ,options );或x=fminsearch (fun,X0 ,options ) (3)[x ,fval]= fminunc (...);或[x ,fval]= fminsearch (...)
(4)[x ,fval ,exitflag]= fminunc (...);或[x ,fval ,exitflag]= fminsearch (5)[x ,fval ,exitflag ,output]= fminunc (...); 或[x ,fval ,exitflag ,output]= fminsearch (...)
(四)、 练习题
例1 求 f = 2x e x sin -在0<x<8中的最小值与最大值
主程序为wliti1.m:
f='2*exp(-x).*sin(x)';
fplot(f,[0,8]); %作图语句
[xmin,ymin]=fminbnd (f, 0,8)
f1='-2*exp(-x).*sin(x)';
[xmax,ymax]=fminbnd (f1, 0,8)
运行结果:
xmin = 3.9270 ymin = -0.0279
xmax = 0.7854 ymax = 0.6448
★(借助课件说明过程、作函数的图形)
例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?
设剪去的正方形的边长为x ,则水槽的容积为:x x )23(2-,建立无约束优化模型为:min y=-x x )23(2-, 0<x<1.5
先编写M 文件fun0.m 如下:
function f=fun0(x)
f=-(3-2*x).^2*x;
主程序为wliti2.m:
[x,fval]=fminbnd('fun0',0,1.5);
xmax=x
fmax=-fval
运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.
★(借助课件说明过程、作函数的图形、并编制计算程序)
例3 22121221min ()(42421)*exp()F x x x x x x x =++++
1、编写M-文件 fun1.m:
function f = fun1 (x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
2、输入M 文件wliti3.m 如下:
x0 = [-1, 1];
x=fminunc(‘fun1’,x0);
y=fun1(x)
3、运行结果:
x= 0.5000 -1.0000
y = 1.3029e-10
★(借助课件说明过程、作函数的图形并编制计算程序)
例4 Rosenbrock 函数 f (x1,x2)=100(x 2-x 12)2+(1-x 1)2 的最优解(极小)
为x*=(1,1),极小值为f*=0.试用不同算法(搜索方向和步长搜索)求数值最优解.初值选为x0=(-1.2 , 2).
为获得直观认识,先画出Rosenbrock 函数的三维图形, 输入以下命令:
[x,y]=meshgrid(-2:0.1:2,-1:0.1:3);
z=100*(y-x.^2).^2+(1-x).^2;
mesh(x,y,z)
画出Rosenbrock 函数的等高线图,输入命令:
contour(x,y,z,20)
hold on
plot(-1.2,2,' o ');
text(-1.2,2,'start point')
plot(1,1,'o')
text(1,1,'solution')
f='100*(x(2)-x(1)^2)^2+(1-x(1))^2';
[x,fval,exitflag,output]=fminsearch(f, [-1.2 2])
运行结果:
x =1.0000 1.0000
fval =1.9151e-010
exitflag = 1
output =
iterations: 108
funcCount: 202
algorithm: 'Nelder-Mead simplex direct search'
★(借助课件说明过程、作函数的图形并编制计算程序)
(五)、 作业
陈酒出售的最佳时机问题
某酒厂有批新酿的好酒,如果现在就出售,可得总收入R 0=50万元(人民币),如果窖藏起来待来日(第n 年)按陈酒价格出售,第n 年末可得总收入60n e R R (万元),而银行利率为r=0.05,试分析这批好酒窖藏多少年后出售可使总收入的现值最大. (假设现有资金X 万元,将其存入银行,到第n 年时增值为R(n)万元,则称X 为R(n)的现值.)并填下表:。