initialize
粒子フィルターの状態を初期化
構文
説明
initialize(
は、指定した粒子数で粒子フィルター オブジェクトを初期化します。状態空間における粒子の初期状態は、指定された pf
,numParticles
,mean
,covariance
)mean
と covariance
をもつ多変量正規分布からのサンプリングにより定義されます。状態変数の数 (NumStateVariables
) は mean
ベクトルの長さに基づいて自動的に取得されます。
initialize(
は、与えられた pf
,numParticles
,stateBounds
)stateBounds
をもつ多変量一様分布からサンプリングすることにより、numParticles
粒子の初期位置を決定します。
initialize(___,
は、1 つ以上の Name,Value
)Name,Value
のペアの引数で指定された追加オプションを使って粒子を初期化します。
例
システムの状態を推定するための粒子フィルター オブジェクトを作成するには、システムに適切な状態遷移関数と測定関数を作成します。
この例の関数 vdpParticleFilterStateFcn
および vdpMeasurementLikelihoodFcn
は、1 と等しい非線形性パラメーター mu を使用して、ファン デル ポール振動子に対する離散近似を記述します。
粒子フィルター オブジェクトを作成します。関数ハンドルを使用して、オブジェクトに状態遷移関数と測定尤度関数を提供します。
myPF = particleFilter(@vdpParticleFilterStateFcn,@vdpMeasurementLikelihoodFcn);
粒子フィルターを状態 [2; 0]
で単位共分散を使って初期化し、1000
個の粒子を使用します。
initialize(myPF, 1000, [2;0], eye(2)); myPF
myPF = particleFilter with properties: NumStateVariables: 2 NumParticles: 1000 StateTransitionFcn: @vdpParticleFilterStateFcn MeasurementLikelihoodFcn: @vdpMeasurementLikelihoodFcn IsStateVariableCircular: [0 0] ResamplingPolicy: [1×1 particleResamplingPolicy] ResamplingMethod: 'multinomial' StateEstimationMethod: 'mean' StateOrientation: 'column' Particles: [2×1000 double] Weights: [1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 … ] (1×1000 double) State: 'Use the getStateEstimate function to see the value.' StateCovariance: 'Use the getStateEstimate function to see the value.'
作成したオブジェクトから状態と状態推定誤差の共分散を推定するには、predict
コマンドと correct
コマンドを使用します。
粒子フィルター オブジェクトを作成し、そのオブジェクトに関数ハンドルを使用して状態遷移関数と測定尤度関数を提供します。
myPF = particleFilter(@vdpParticleFilterStateFcn,@vdpMeasurementLikelihoodFcn);
この粒子フィルター オブジェクトをカスタム分布を使用して初期化するには、まずガウス分布または一様分布を使用して初期化します。その後、目的のカスタム分布の粒子を生成して粒子フィルター オブジェクトに割り当てます。
この例では、ガウス分布を使用して、粒子フィルターを状態 [2; 0]
で単位共分散を使って初期化します。使用する粒子の数は 1000 個です。
initialize(myPF,1000,[2;0],eye(2)); myPF
myPF = particleFilter with properties: NumStateVariables: 2 NumParticles: 1000 StateTransitionFcn: @vdpParticleFilterStateFcn MeasurementLikelihoodFcn: @vdpMeasurementLikelihoodFcn IsStateVariableCircular: [0 0] ResamplingPolicy: [1×1 particleResamplingPolicy] ResamplingMethod: 'multinomial' StateEstimationMethod: 'mean' StateOrientation: 'column' Particles: [2×1000 double] Weights: [1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 1.0000e-03 … ] (1×1000 double) State: 'Use the getStateEstimate function to see the value.' StateCovariance: 'Use the getStateEstimate function to see the value.'
分布を選択し、その確率分布オブジェクトを関数makedist
(Statistics and Machine Learning Toolbox)を使用して作成します。
pd = makedist('Poisson');
目的の分布の粒子を関数random
(Statistics and Machine Learning Toolbox)を使用して生成します。
Particles = random(pd,myPF.NumStateVariables,myPF.NumParticles);
これらの粒子を粒子フィルターの Particles
プロパティに割り当てて、オブジェクトをカスタム分布で初期化します。
myPF.Particles = Particles;
作成したオブジェクトから状態と状態推定誤差の共分散を推定するには、predict
コマンドと correct
コマンドを使用します。
入力引数
粒子フィルター。オブジェクトとして指定します。詳細については、particleFilter
を参照してください。
フィルターで使用される粒子の数。スカラーとして指定します。
パフォーマンスが問題になる場合を除き、1000 個以上の粒子を使用してください。粒子の数が多いほど推定結果は改善しますが、アルゴリズムでより多くの粒子を処理しなければならないため、パフォーマンス速度が犠牲になります。粒子フィルターの追跡を改善するには、粒子の数を調整するのが最良の方法です。
粒子分布の平均値。ベクトルとして指定します。pf
の NumStateVariables
プロパティはこのベクトルの長さに基づいて設定されます。
粒子分布の共分散。N 行 N 列の行列として指定します。N は pf
の NumStateVariables
プロパティの値です。
状態変数の範囲。n 行 2 列の行列として指定します。pf
の NumStateVariables
プロパティは n の値に基づいて設定されます。各行は対応する状態変数の下限と上限に対応します。状態変数の数 (NumStateVariables
) は、配列 stateBounds
の行数に基づいて自動的に取得されます。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名で、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name
を引用符で囲みます。
例: ...'StateOrientation','row'
循環変数。CircularVariables
からなるコンマ区切りのペアで、logical ベクトルとして指定します。循環座標または角座標を使用する各状態変数は 1 で示されます。ベクトルの長さは particleFilter
の NumStateVariables
プロパティと等しくなります。
状態の方向。'column' または 'row' の値をとる StateOrientation
からなるコンマ区切りのペアとして指定します。'column' の場合、オブジェクト pf
の State
プロパティと getStateEstimate
メソッドは状態を列ベクトルとして返し、Particles
プロパティの次元は NumStateVariables
行 NumParticles
列となります。'row' の場合、状態は行方向になり、Particles
の次元は NumParticles
行 NumStateVariables
列です。
バージョン履歴
R2017b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)