generateJacobianFcn
语法
说明
利用自动微分技术,为扩展卡尔曼滤波器 (EKF) 生成状态转移雅可比矩阵函数。fcnStateJac = generateJacobianFcn(obj,'state',Us1,...,Usn)
该函数会在当前文件夹中生成两个 MATLAB® 函数文件:
stateTransitionJacobianFcn.m- 生成的状态转移雅可比函数stateTransitionJacobianFcnAD.m- 一个利用自动微分生成状态转移雅可比矩阵的辅助函数
fcnStateJac 是一个匿名函数的句柄,该函数使用输入对象 extendedKalmanFilter (obj)、传递给 obj 的 predict 函数的附加参量 (Us1,...,Usn),以及内部用于计算状态转移雅可比矩阵的常量来调用 stateTransitionJacobianFcn.m。
要在 EKF 对象中使用此雅可比矩阵,请在该对象的 StateTransitionJacobianFcn 属性中指定 fcnStateJac。例如:
obj.StateTransitionJacobianFcn = fcnStateJac;
利用自动微分技术,为扩展卡尔曼滤波器 (EKF) 生成测量雅可比矩阵函数。fcnMeasurementJac = generateJacobianFcn(obj,'measurement',Um1,...,Umn)
该函数会在当前文件夹中生成两个 MATLAB 函数文件:
measurementJacobianFcn.m- 生成的测量雅可比函数measurementJacobianFcnAD.m- 一个利用自动微分生成测量雅可比矩阵的辅助函数
fcnMeasurementJac 是一个匿名函数的句柄,该函数使用输入对象 extendedKalmanFilter (obj)、传递给 obj 的 correct 函数的附加参量 (Um1,...,Umn),以及内部用于计算测量雅可比矩阵的常量来调用 measurementJacobianFcn.m。
要在 EKF 对象中使用此雅可比矩阵,请在该对象的 MeasurementJacobianFcn 属性中指定 fcnMeasurementJac。例如:
obj.MeasurementJacobianFcn = fcnMeasurementJac;
[___, 还会返回用于计算雅可比函数的常量。您可以返回任意一个雅可比函数的常数。constants] = generateJacobianFcn(___)
示例
输入参数
输出参量
限制
目前,自动微分仅支持有限的数学运算集,相关内容详见优化变量和表达式支持的运算 (Optimization Toolbox)。如果原始的状态转移或测量函数使用了列表中未包含的操作或函数,或者包含 if-else 语句或循环,则
generateJacobianFcn将因错误而终止。要生成雅可比函数,请勿在原始函数中预分配任何优化变量。例如,假设您试图从包含以下代码的函数中生成雅可比矩阵。
这段代码会导致以下错误。dxdt = zeros(2,1); dxdt(1) = x(1)*x(2); dxdt(2) = x(1)/x(2);
请改用这段代码。Unable to perform assignment because value of type 'optim.problemdef.OptimizationExpression' is not convertible to 'double'.
dxdt = [x(1)*x(2); x(1)/x(2)];
建议将
obj中的状态转移和测量函数指定为当前文件夹或 MATLAB 路径下某个文件夹中的文件。虽然在生成雅可比矩阵函数时支持本地函数的句柄,但在生成 C/C++ 部署代码时则不支持。有关局部函数的信息,请参阅局部函数。
版本历史记录
在 R2023a 中推出
另请参阅
extendedKalmanFilter | predict | correct | clone | initialize | residual