无约束优化是数学建模中的一个重要问题,广泛应用于工程、经济、管理等领域。本文介绍了无约束优化的基本思想、常用算法,并重点讲解了如何使用MATLAB求解无约束优化问题。
无约束优化问题的标准形式为:
min f ( x ) \min f(x) minf(x)
其中,( x ) 是决策变量,( f(x) ) 是目标函数。无约束优化的目标是找到使目标函数 ( f(x) ) 最小的 ( x ) 值。
最速下降法是一种基本的优化算法,适用于寻优过程的前期迭代。其优点是计算量小,存储变量少,初始点要求不高;缺点是收敛速度较慢。
算法步骤:
牛顿法利用目标函数的二阶导数信息,收敛速度较快。如果目标函数是二次函数,牛顿法可以一步达到最优点。
算法步骤:
拟牛顿法通过近似 Hessian 矩阵来避免直接计算二阶导数,常用的方法包括 BFGS 和 DFP 算法。
MATLAB提供了多种求解无约束优化问题的函数,常用的有 fminbnd
、fminunc
和 fminsearch
。
fminbnd
函数fminbnd
用于求解一维无约束优化问题,基于黄金分割法和二次插值法。
调用格式:
x = fminbnd(fun, x1, x2)
[x, fval] = fminbnd(fun, x1, x2)
示例:
f = @(x) 2*exp(-x).*sin(x);
[xmin, ymin] = fminbnd(f, 0, 8);
disp(['最小值点:', num2str(xmin)]);
disp(['最小值:', num2str(ymin)]);
fminunc
函数fminunc
用于求解多维无约束优化问题,支持大型和中型优化算法。
调用格式:
x = fminunc(fun, x0)
[x, fval] = fminunc(fun, x0)
示例:
fun = @(x) exp(x(1))*(4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);
x0 = [-1, 1];
[x, fval] = fminunc(fun, x0);
disp(['最优解:', num2str(x)]);
disp(['目标函数值:', num2str(fval)]);
fminsearch
函数fminsearch
使用单纯形法求解多维无约束优化问题,适用于目标函数不可导的情况。
调用格式:
x = fminsearch(fun, x0)
[x, fval] = fminsearch(fun, x0)
示例:
fun = @(x) 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
x0 = [-1.2, 2];
[x, fval] = fminsearch(fun, x0);
disp(['最优解:', num2str(x)]);
disp(['目标函数值:', num2str(fval)]);
MATLAB的优化工具箱提供了丰富的函数和选项,用户可以通过 optimset
函数设置优化参数。
options = optimset('Display', 'iter', 'TolFun', 1e-8);
[x, fval] = fminunc(fun, x0, options);
对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?
MATLAB代码:
fun = @(x) -(3 - 2*x).^2 * x;
[xmax, fmax] = fminbnd(fun, 0, 1.5);
disp(['剪掉的正方形边长:', num2str(xmax)]);
disp(['最大容积:', num2str(-fmax)]);
运行结果:
剪掉的正方形边长:0.5
最大容积:2
Rosenbrock函数是一个经典的无约束优化问题,其形式为:
f ( x ) = 100 ( x 2 − x 1 2 ) 2 + ( 1 − x 1 ) 2 f(x) = 100(x_2 - x_1^2)^2 + (1 - x_1)^2 f(x)=100(x2−x12)2+(1−x1)2
MATLAB代码:
fun = @(x) 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
x0 = [-1.2, 2];
[x, fval] = fminsearch(fun, x0);
disp(['最优解:', num2str(x)]);
disp(['目标函数值:', num2str(fval)]);
运行结果:
最优解:1.0000 1.0000
目标函数值:1.9151e-010
本文介绍了无约束优化的基本概念和常用算法,重点讲解了如何使用MATLAB求解无约束优化问题。通过 fminbnd
、fminunc
和 fminsearch
等函数,用户可以方便地求解一维和多维无约束优化问题。MATLAB的优化工具箱提供了丰富的选项,用户可以根据需要设置优化参数,以获得更好的优化效果。
无约束优化在数学建模中有着广泛的应用,掌握其基本原理和MATLAB实现方法对于解决实际问题具有重要意义。