generateJacobianFcn
構文
説明
は、自動微分手法を使用して拡張カルマン フィルター (EKF) の状態遷移ヤコビ関数を生成します。fcnStateJac = generateJacobianFcn(obj,'state',Us1,...,Usn)
この関数により、現在のフォルダーに 2 つの 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)
この関数により、現在のフォルダーに 2 つの 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 で導入