数值最优化

FindMinimum[f,{x,x0}] 为初始点,搜索函数 f 的局部极小值
FindMinimum[f,x]搜索函数 f 的局部极小值
FindMinimum[f,{{x,x0},{y,y0},}]
搜索多变量函数的局部极小值
FindMinimum[{f,cons},{{x,x0},{y,y0},}]
, , 为初始点,搜索在约束条件 cons 下的局部极小值
FindMinimum[{f,cons},{x,y,}]在约束条件 cons 下搜索局部极小值
FindMaximum[f,x], etc.搜索局部极大值

搜索局部极小值和极大值.

这里求使 达到极小的 的值,起始点为 .
In[1]:=
Click for copyable input
Out[1]=
列表的最后一个元素给出获得极小值对应的变量值.
In[2]:=
Click for copyable input
Out[2]=

FindRoot 一样,FindMinimumFindMaximum 从一个点开始,循序渐近地寻找极小值或极大值. 但是由于它们一旦找到一个极值,就会返回结果,它们可能只给出函数的局部极小值或极大值,而不是全局的极小值或极大值.

该曲线具有两个局部极小值.
In[3]:=
Click for copyable input
Out[3]=
为初始点时,在右边获得局部极小值.
In[4]:=
Click for copyable input
Out[4]=
以下情况给出左边的局部极小值,在本利中它也是全局极小值.
In[5]:=
Click for copyable input
Out[5]=
指定变量时可以不使用初始值.
In[6]:=
Click for copyable input
Out[6]=
用户可以指定一个约束条件.
In[7]:=
Click for copyable input
Out[7]=
NMinimize[f,x]尝试求 f 的全局极小值
NMinimize[f,{x,y,}]尝试求多变量函数的全局极小值
NMaximize[f,x]尝试求 f 的全局极大值
NMaximize[f,{x,y,}]尝试求多变量函数的全局极大值

求全局极小值和极大值.

这里立即找到全局极小值.
In[8]:=
Click for copyable input
Out[8]=

NMinimizeNMaximizeMinimizeMaximize 的数值模拟. 但是与 MinimizeMaximize 不同,它们经常不能保证可以找到绝对的全局极小值和极大值. 然而,当函数 f 很平滑,并且具有有限数目的局部极小值和极大值的时候,它们通常表现良好.

NMinimize[{f,cons},{x,y,}]尝试在约束条件 cons 下求 f 的全局极小值
NMaximize[{f,cons},{x,y,}]尝试在约束条件 cons 下求 f 的全局极大值

在约束条件下,求全局极小值和极大值.

在约束条件 下,NMinimize 将给出右边的局部极小值.
In[9]:=
Click for copyable input
Out[9]=
这里求在单位圆内 的极小值.
In[10]:=
Click for copyable input
Out[10]=
对这个例子,Minimize 可以给出精确结果.
In[11]:=
Click for copyable input
Out[11]=
但是以下情况就不可以.
In[12]:=
Click for copyable input
Out[12]=
这里给出了一个数值近似,实际上是使用了 NMinimize.
In[13]:=
Click for copyable input
Out[13]=

如果目标函数 f 和约束条件 cons 对于所有变量都是线性的,那么极小化和极大化就对应于一个线性规划问题. 有时候,用矩阵和向量的形式代替明确的方程组来描述这些问题更为方便.

LinearProgramming[c,m,b]求在约束条件 下极小化 的向量
LinearProgramming[c,m,b,l]使用约束条件

线性规划的矩阵形式.

以下是以方程形式给出的线性规划问题.
In[14]:=
Click for copyable input
Out[14]=
以下是相应问题的矩阵形式.
In[15]:=
Click for copyable input
Out[15]=

可以把列表 写成一个数字对 的序列来指明等式和不等式混合约束条件. 如果 ,那么第 个约束条件为 . 如果 , 那么约束条件为 ,如果 ,那么约束条件为 .

这里使得第一个不等式用 .
In[16]:=
Click for copyable input
Out[16]=

LinearProgramming[c,m,b,l] 中,可以把 写成形如 的数字对列表,分别表示 的上界和下界.

在实现大型线性规划问题时,把矩阵 作为 SparseArray 对象给出常常是方便的.