博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
02(a)多元无约束优化问题
阅读量:5037 次
发布时间:2019-06-12

本文共 3348 字,大约阅读时间需要 11 分钟。

2.1 基本优化问题

$\operatorname{minimize}\text{    }f(x)\text{       for   }x\in {

{R}^{n}}$

解决无约束优化问题的一般步骤为:

  • Step1:选择一个初始出点${
    {\mathbf{x}}_{0}}$(这里的${
    {\mathbf{x}}_{0}}$是向量),设置一个收敛误差$\varepsilon $(解的精度)和一个迭代次数$k=0$;
  • Step2:找到从点${
    {\mathbf{x}}_{k}}$使函数$f(x)$下降最快的方向${
    {d}_{k}}$;
  • Step3:确定一个步长${
    {\alpha }_{k}}>0$,使$f({
    {\mathbf{x}}_{k}}+{
    {\alpha }_{k}}{
    {\mathbf{d}}_{k}})$减小,且${
    {\mathbf{x}}_{k+1}}={
    {\mathbf{x}}_{k}}+{
    {\alpha }_{k}}{
    {\mathbf{d}}_{k}}$;
  • Step4:if走一步的距离$\left\| {
    {\alpha }_{k}}{
    {\mathbf{d}}_{k}} \right\|<\varepsilon $,则停止并且输出解${
    {\mathbf{x}}_{k+1}}$;else $k:=k+1$并返回Step2,继续迭代。

注意:Step2和Step3是优化问题的关键;Step3是一个元优化的问题,通常被称为线性搜索;其中$\mathbf{x}$是一个有n个元素的列向量;假设$f(x)$二阶连续可微(比较光滑);

我将以一个,求解非线性方程组的例子,介绍多元无约束优化的各个步骤。

2.2 解一个非线性方程:

ok,整个无约束多元优化问题,以解一个非线性方程开始,将介绍(度下降、牛顿法、拟牛顿法)。

$\left\{ \begin{aligned} & x_{1}^{2}+{

{x}_{2}}=11 \\& {
{x}_{1}}+x_{2}^{2}=7 \\\end{aligned} \right.$

  (a)用Matlab的roots()函数去解多项式方程:

        将${

{x}_{2}}=11-x_{1}^{2}$代入${
{x}_{1}}+x_{2}^{2}=7$中,有$x_{1}^{4}-22x_{1}^{2}+{
{x}_{1}}+114=0$

        解得:$x1={

{[3.5884\text{ 3}\text{.0000 -3}\text{.7793 -2}\text{.8051}]}^{T}};x2={
{[-1.8481\text{ 2}\text{.0000 -3}\text{.2832 -3}\text{.1313}]}^{T}}$

  (b) 用优化的方法去解

       将解方程组的问题转化为优化问题:

\[\left\{ \begin{aligned}& {

{f}_{1}}(\mathbf{x})=x_{1}^{2}+{
{x}_{2}}-11=0 \\& {
{f}_{2}}(\mathbf{x})={
{x}_{1}}+x_{2}^{2}-7=0 \\\end{aligned} \right.\Rightarrow \underset{\mathbf{x}}{\mathop{\operatorname{mini}}}\,f(\mathbf{x})=\underset{\mathbf{x}}{\mathop{\operatorname{mini}}}\,\left[ f_{1}^{2}(\mathbf{x})+f_{2}^{2}(\mathbf{x}) \right]\]

要求得方程的解,按照优化理论的理解来说,就是要找到能使得${

{f}_{1}}(\mathbf{x})$和${
{f}_{2}}(\mathbf{x})$尽量趋近于0的$({
{x}_{1}},{
{x}_{2}})$。(至于这里为什么是二次方的和最小,而不是4次方、6次方...,这是一个非线性的方程组我还没法解释,如果是线性的到能解释——误差服从高斯分布)。ok,上面的问题可写为:

$\operatorname{minimize}\text{    }f(\mathbf{x})\text{       for   }\mathbf{x}\in {

{R}^{2}}$              

现在按照解一般优化问题的基本步骤走:

Step1:选择一个初始出点${

{\mathbf{x}}_{0}}$(这里的${
{\mathbf{x}}_{0}}$是向量),设置一个收敛误差$\varepsilon $(解的精度)和一个迭代次数$k=0$;

Step2:找到从点${

{\mathbf{x}}_{k}}$使函数$f(x)$下降最快的方向${
{d}_{k}}$;

由泰勒公式可知,如果一个函数足够平滑,在已知函数在某一点的各阶导数值的情况之下,泰勒公式可以用这些导数值做系数构建一个多项式来近似函数在这一点的邻域中的值。泰勒公式还给出了这个多项式和实际的函数值之间的偏差。

对于一个一元函数来说,泰勒公式可写为下式

$\begin{aligned}& f(x)=f({

{x}_{0}})+{f}'({
{x}_{0}})(x-{
{x}_{0}})+\frac{
{f}''({
{x}_{0}})}{2!}{
{(x-{
{x}_{0}})}^{2}}+ \\& \text{          }...+\frac{
{
{f}^{(n)}}({
{x}_{0}})}{n!}{
{(x-{
{x}_{0}})}^{n}}+\frac{
{
{f}^{(n+1)}}({
{x}_{0}})}{(n+1)!}{
{({
{x}_{0}}+\theta (x-{
{x}_{0}}))}^{n+1}} \\\end{aligned}$

其中$0<\theta <1$,${

{x}_{0}}+\theta (x-{
{x}_{0}})=\xi $其实$\xi $就表示${
{x}_{0}}$与$x$之间的任意一点。现实中描述一个问题的时候,一般都有多个输入变量;在工程中一般认为展开到二阶导数就能精确的表示点${
{\mathbf{x}}_{k}}$周围任意一点${
{\mathbf{x}}_{k}}+\mathbf{\delta }$的函数值$f({
{\mathbf{x}}_{k}}+\mathbf{\delta })$,则有:

\[\begin{aligned} & f({

{\mathbf{x}}_{k}}+\mathbf{\delta })=f({
{\mathbf{x}}_{k}})+{f}'({
{\mathbf{x}}_{k}})\mathbf{\delta }+\frac{1}{2}{
{\mathbf{\delta }}^{T}}{f}''({
{\mathbf{x}}_{k}})\mathbf{\delta }+O\left( {
{\left\| \mathbf{\delta } \right\|}^{3}} \right) \\& \text{               =}f({
{\mathbf{x}}_{k}})+{
{\nabla }^{T}}f({
{\mathbf{x}}_{k}})\cdot \mathbf{\delta }+\frac{1}{2}{
{\mathbf{\delta }}^{T}}\cdot {
{\nabla }^{2}}f({
{\mathbf{x}}_{k}})\cdot \mathbf{\delta }+O\left( {
{\left\| \mathbf{\delta } \right\|}^{3}} \right) \\\end{aligned}\]

从这里开始分各类算法,像最速下降法、牛顿法、拟牛顿法,这些方法的目的就是在找方向${

{d}_{k}}$。这些内容将在,02(b)、02(c)、02(e)中介绍。

转载于:https://www.cnblogs.com/duyiExplorer/p/11176385.html

你可能感兴趣的文章
css修改滚动条样式
查看>>
2018.11.15 Nginx服务器的使用
查看>>
Kinect人机交互开发实践
查看>>
百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET...
查看>>
JAVA 技术类分享(二)
查看>>
android客户端向服务器发送请求中文乱码的问
查看>>
UOJ#220. 【NOI2016】网格 Tarjan
查看>>
Symfony翻译教程已开课
查看>>
Python模块之pickle(列表,字典等复杂数据类型与二进制文件的转化)
查看>>
通过数据库表反向生成pojo类
查看>>
css_去掉默认样式
查看>>
TensorFlow2.0矩阵与向量的加减乘
查看>>
NOIP 2010题解
查看>>
javascript中的each遍历
查看>>
String中各方法多数情况下返回新的String对象
查看>>
浅谈tcp粘包问题
查看>>
UVA11524构造系数数组+高斯消元解异或方程组
查看>>
排序系列之——冒泡排序、插入排序、选择排序
查看>>
爬虫基础
查看>>
jquery.lazyload延迟加载图片第一屏问题
查看>>