变量和初始条件

所有函数 FindMinimumFindMaximum,和 FindRoot 采取相同形式的变量指定形式. 函数 FindFit 使用相同形式的参数指定.

FindMinimum[f,vars]找出 f 关于 vars 中所给变量的一个局部极小值
FindMaximum[f,vars]找出 f 关于 vars 中所给变量的一个局部极大值,
FindRoot[f,vars]找出 关于 vars 中所给变量的一个根
FindRoot[eqns,vars]找出方程组 eqns 关于 vars 中所给变量的一个根
FindFit[data,expr,pars,vars]找到参数 pars 的值,使 expr 对作为 vars 的函数的 data 给出一个最好的拟合

函数中的变量和参数.

列表 vars (对于 FindFitpars)应该是由单个变量指定组成的列表. 每个变量指定应该采取如下形式.

{var,st}变量 var 有初始值 st
{var,st1,st2}变量 var 有两个初始值 ;第二个初始条件仅在主轴法和割线法中使用
{var,st,rl,ru}变量 var 有初始值 st; 当 var 的值超过区间 时,搜索将被终止
{var,st1,st2,rl,ru}变量 var 有两个初始值 ;当 var 的值超过区间 时,搜索将被终止

函数中单个变量的指定形式.

vars 中的变量指定都需要有相同数量的起始值. 当区域边界没有具体指定的时候,它们将被认为是无界的,即 .

向量和矩阵值变量

变量最常见的用途是代表数字. 然而,变量输入语法对可视为向量,矩阵,或高阶张量处理的变量提供支持. 一般情况下, 命令,除了目前只适用于标量型变量的 FindFit,都认为变量将采用具有与其初始条件相同的矩形结构的值.

下面是一个矩阵.
In[1]:=
Click for copyable input
这里用 FindRoot 寻找 一个特征值和相应的归一化特征向量.
In[2]:=
Click for copyable input
Out[2]=

当然,这不是计算特征值的最好方式,但是它显示了变量维度是如何从初始值中选定的. 由于 具有初始值1,它被视为标量. 另一方面,给予 的一个初始值是一个长度为 3 的向量,所以, 它始终被作为一个长度为3的向量来使用.

如果您对变量使用多个初始值,则这些值必须有一致的维度,并且初始值的每个分量是不同的.

这里对每个变量使用两个初始条件寻找一个不同的特征值.
In[3]:=
Click for copyable input
Out[3]=

能够采用向量和矩阵值的变量的一个优势是允许您写函数,而这些函数对于较大的问题和/或自动处理不同大小的问题非常有效.

这里定义了一个函数,给出一个相当于 UnconstrainedProblems 程序包中 问题的目标函数. 该函数所期待的 值,是一个由两个行组成的矩阵.
In[4]:=
Click for copyable input

请注意,因为除非 具有正确的结构,函数的值将会毫无意义,该定义仅限于具有该结构的变量. 例如,如果您对于任何模式 定义该函数,那么使用一个未定义的符号 计算(这就是 FindMinimum 所做的)会产生毫无意义的意外结果. 通常的情况是,在用到具有向量值的变量的函数时,您将不得不对这些定义进行限制. 请注意,上述的定义不排除具有正确结构的符号化的值. 例如, 对于标量 ,... 给出一个函数的符号化表示方法.

这里使用 FindMinimum 求解问题,在该问题中,对于问题的大小,我们提供了一个通用值. 您可以更改 的值,而不改变其他任何东西,以求解不同大小的问题.
In[5]:=
Click for copyable input
Out[7]=

这里我们求得的解没有达到默认的容差,原因是 Mathematica 无法对函数取得符号化的导数,因此它必须求助于并不准确的有限差分法.     

使用向量-和矩阵-值变量的一个缺点是 Mathematica 目前无法计算它们的符号化表示的导数. 有时不难开发一个产生正确导数的函数. (如果做不到这一点,如果您确实需要更高的准确性,您可以使用 高阶有限差分.)

这里定义一个返回 函数的梯度的函数. 请注意,该梯度是根据变量位置压平矩阵所得到的一个向量.
In[8]:=
Click for copyable input
这里用梯度的符号化表示的值求解该问题.
In[9]:=
Click for copyable input
Out[11]=

雅可比和Hessian导数往往是稀疏的. 如果适当,您也可以对这些导数 指定结构稀疏度,它可以相当程度上降低整体求解复杂度.

New to Mathematica? Find your learning path »
Have a question? Ask support »