示例:梯度算子
• 定义函数 f:
使用梯度算子求得 f 的偏导数矢量:
• 定义矢量函数并根据矢量 x 计算函数 f 的梯度。
在本示例中,为所有数组设置开始索引的
ORIGIN 设置为 0。
f 中带有最大下标的变量为 x2。Mathcad 假定有三个变量:x0、x1 和 x2。最终将生成由这些变量的三个偏导数值构成的梯度矢量。即使 x0 或 x1 未出现在 f 中,Mathcad 仍然返回由三个值构成的矢量,但会将与缺失变量相对应的条目设置为 0。
对于出现在 f 中的最大下标 n,Mathcad 假定 n + 1 个变量,x0、 x1...xn 并返回长度为 n + 1 的矢量。
• 如果以数值形式定义
x,则可使用
等号 = 来计算梯度。Mathcad 计算 x 值的梯度,然后返回一个数字矢量,表示点 x 处的梯度。x 的长度必须大于 f 中显示的最大下标,以便 Mathcad 返回一个带有 length(x) 条目的梯度。
在以下示例中,x0 和 x1 是表达式中显示的唯一变量,Mathcad 取 x0 和 x1 的偏导数,并返回由两个值构成的矢量。
但是,如果将 x 定义为三元素矢量,则 Mathcad 会假设一个附加变量 x2,该变量不会显示在表达式中。最终将生成由三个元素构成的矢量。
使用梯度算子和 genfit 函数
梯度算子尤其适用于设置 genfit 函数的自变量,该函数可将常规非线性函数与数据集相拟合。
• 使用下表中的数据。
• 第一列包含数据的 x 值,第二列包含 y 值。
• 用以下形式的函数对数据进行建模:
这里的 a1、a2 和 a3 为矢量 a 中包含的未知参数。
可按如下方式调用 genfit 对数据进行建模:
在该表达式中
◦ X 和 Y 为包含数据的 x 值和 y 值的矢量。
◦ guess 为包含参数初始估计值的矢量。
◦ F 矢量的初始条目为模型函数 f(x, a),其余条目为 f 对于未知参数的偏导数。
• 使用梯度算子和 stack 函数创建矢量 F。
• 函数 stack 将模型函数 f 置于由梯度算子创建的偏导数矢量之上。
• 接下来,创建参数的估值矢量。
• 按如下方式应用 genfit:
• 可实现最佳拟合的参数有: