QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4952|回复: 6
打印 上一主题 下一主题

[问题求助] 卡尔曼算法的matlab程序

[复制链接]
字体大小: 正常 放大
工科男 实名认证       

13

主题

3

听众

473

积分

升级  57.67%

  • TA的每日心情
    开心
    2014-7-4 12:51
  • 签到天数: 41 天

    [LV.5]常住居民I

    发帖功臣

    跳转到指定楼层
    1#
    发表于 2011-11-26 16:16 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    求卡尔曼算法的matlab预测程序
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    1341

    主题

    738

    听众

    2万

    积分

    数学中国总编辑

  • TA的每日心情

    2016-11-18 10:46
  • 签到天数: 206 天

    [LV.7]常住居民III

    超级版主

    社区QQ达人 邮箱绑定达人 元老勋章 发帖功臣 新人进步奖 原创写作奖 最具活力勋章 风雨历程奖

    群组2011年第一期数学建模

    群组第一期sas基础实训课堂

    群组第二届数模基础实训

    群组2012第二期MCM/ICM优秀

    群组MCM优秀论文解析专题

    matlab下面的kalman滤波程序
    % `0 T: }/ n9 }& Y8 i! Mclear  N=200; w(1)=0;   
    2 J) Z# |/ s. l* |5 s" _# D" w3 ~w=randn(1,N)
    ) M  r1 [% Q/ A4 D3 S8 qx(1)=0;   
    9 V: v  {% i* }/ q- Q: g# T( Aa=1;   
    ' d2 w+ |2 d# _+ [+ m  ^- i6 ]for k=2:N;   
    4 S& ?: {1 Z+ f7 J* @  Dx(k)=a*x(k-1)+w(k-1);   . k8 J# i% |& f  C
    end   
    . m5 o( \6 Y6 G0 h' I- P# DV=randn(1,N);   4 C4 |8 N" _3 U
    q1=std(V);   
    & q+ T6 e( C7 m3 QRvv=q1.^2;   / o8 M2 J9 Y0 {$ s- j- U0 O
    q2=std(x);   ) |1 F. L% a8 @, M7 a% F) r  V
    Rxx=q2.^2;   - [& D9 ^4 Q1 W/ ~* y. g- h
    q3=std(w);   
    ( ^% P. c7 ]' dRww=q3.^2;   
    / B% B  @2 J+ [c=0.2;   $ B+ O% c) G" A% |8 V7 U
    Y=c*x+V;   , t1 {1 w1 U1 a! P0 Q, N6 C; Y, M
    p(1)=0;   3 ]' q% S0 j! D
    s(1)=0;
    7 z+ T' z# S4 o4 ^for t=2:N;   
      A' B1 J: k1 Z' w  b  z& I' lp1(t)=a.^2*p(t-1)+Rww;   
    + k. S5 h4 U" g7 Lb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    ' d1 Y+ K' o' D5 Q0 X% g1 W; f+ As(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    ( t, \8 r$ W* e. l5 B0 e% dp(t)=p1(t)-c*b(t)*p1(t);   , i* I  R1 o/ H- d2 b: `" f
    end   
    % E: H0 V$ @2 o# ~7 p8 N# Gt=1:N;   
    . @6 W3 S* r5 C/ n2 @; I$ y& aplot(t,s,'r',t,Y,'g',t,x,'b');   3 Z. k' S% N0 C7 X( \
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    + P8 `  x: c0 Z: s6 r+ w% Kalman filter.   6 `% \2 @) s" a6 d3 `
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    # V8 x2 k/ ]: z, v* b%   
    ; F( }" _4 u' ]' L% A0 D# i% INPUTS:   7 b2 {) r" i5 W* E
    % y(:,t) - the observation at time t   & J4 p: d5 U$ v% o& T0 h
    % A - the system matrix   " `& }& M4 K7 v. U1 [& Z
    % C - the observation matrix   2 f* j  p( V5 j& p' }
    % Q - the system covariance   . p% w, D' l! {; O; S
    % R - the observation covariance   
    4 W9 {  F2 z6 ~2 y' g% init_x - the initial state (column) vector   
    / }) M7 ^( J. |( ?% init_V - the initial state covariance   
    " o$ V5 x+ z1 o) h% ^8 k9 f& d%   - q6 {& I6 O& |( T( w
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   1 |/ Y0 i0 v( z# e0 n
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   $ A- x( w" q. r0 q5 l
    % In this case, all the above matrices take an additional final dimension,   . J$ z- ]: ~5 ?6 C
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    + n+ H" G% M( x: `% However, init_x and init_V are independent of model(1).   0 A9 w( S) U# p, `9 T# H
    % 'u' - u(:,t) the control signal at time t [ [] ]   6 J0 v) `6 i# }
    % 'B' - B(:,:,m) the input regression matrix for model m   ! w$ M3 |1 G4 c/ g; n9 }+ Y+ f
    %   
    3 C5 q( W; _' d/ T, }3 \( B% OUTPUTS (where X is the hidden state being estimated)   
    0 ~" e) c4 m& M( ^% x(:,t) = E[X(:,t) | y(:,1:t)]   ; y2 X* Z  |( h$ Z/ Z
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    7 z( w) I) w$ D3 T5 u% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    4 N- z) V& z' L$ y, p/ h% loglik = sum{t=1}^T log P(y(:,t))   
    1 q7 v1 N; @, _. C2 \2 E. f%   
    & W! a5 c# y: F% q- B8 `. |  n, r" ]% If an input signal is specified, we also condition on it:   
    ' Z5 m6 o0 v/ f) i3 ~; p! \% m% N6 U% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    % F3 ]& H1 o4 p* ]' `% If a model sequence is specified, we also condition on it:   , Q5 M( g6 F" j* M4 o
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    ) h) j# M% h' J* B1 J[os T] = size(y);   7 h0 P$ b9 U0 Q7 j; }! }+ F
    ss = size(A,1); % size of state space   / ?: A% H3 l1 d
    % set default params   
    7 v+ c% Y- C9 T; K' D+ gmodel = ones(1,T);   6 d  C( k: o$ C( ~2 g' ?  p
    u = [];   ; ~0 h. M5 T0 l7 X5 W
    B = [];   1 D9 n  m' n7 I3 G. M6 L, d  O
    ndx = [];   
    # {% p2 u" [, S; J" B( cargs = varargin;   
    3 |+ l" F' _, @* ]& {6 I& Wnargs = length(args);   ' c7 _- V1 c" ^4 r( ?
    for i=1:2:nargs   " u( m5 ~5 C6 j3 k, a$ R5 U
    switch args   
    $ X# j% T  ^8 M0 Pcase 'model', model = args{i+1};   
    7 l3 [, `3 g) ?! ^case 'u', u = args{i+1};   
    ; G/ W  Q7 p% A; F; Zcase 'B', B = args{i+1};   
    , c+ x$ F9 x7 r$ G6 a' fcase 'ndx', ndx = args{i+1};   
    7 Q- N5 V8 \! x6 `/ h, }2 Kotherwise, error(['unrecognized argument ' args])   1 s; R/ T% G; j* \
    end   
    ) X: z2 u' Y+ P0 \  _- K4 zend   
    ) }# [* n/ d" r; sx = zeros(ss, T);   
    3 k4 Z  C& b3 y" g& \9 Q/ sV = zeros(ss, ss, T);   
      N3 n: N+ T4 T3 v/ K$ k- HVV = zeros(ss, ss, T);   
    3 G6 u3 C  j4 D8 m5 Z# |: T! Q* `- aloglik = 0;   
    % v6 l# G$ A$ I5 _# zfor t=1:T   m = model(t);   , p) N7 W& Q+ C( v8 [. ^4 m
    if t==1   %prevx = init_x(:,m);   
    2 D' |6 M  ^1 S+ Z' P1 E. ~%prevV = init_V(:,:,m);   
    * T+ A9 w8 }5 }# A( W6 dprevx = init_x;   
    & t1 q5 q" Y- a3 @prevV = init_V;   
    * F6 p/ }/ g' @9 h5 P3 einitial = 1;   
    1 ~' z8 R) b3 ^" Y+ O$ ^2 selse   prevx = x(:,t-1);   ) j( `/ t4 ]- ~+ ?
    prevV = V(:,:,t-1);     Z. n# Y3 o: x
    initial = 0;   ; l8 n2 z, K5 l0 L# b
    end   
    & f2 W: b& x+ J) c/ ~if isempty(u)   0 `; z. K2 I! E  c1 m  m' E& Y
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    * l' u+ Z1 X, |4 s, c4 M5 \kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   8 {. C7 Y& L3 B1 p9 v
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    9 c' g% o  F- {( }  c+ c1 t     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   ( Q: a5 J* @+ M! ^0 p/ G) x' Q
    else   
    8 M3 e, G; g0 ^7 h3 ~' A% s8 `& mi = ndx;   
    - u% h2 ^. T$ ~- l% copy over all elements; only some will get updated   x(:,t) = prevx;   . K: _8 A/ U9 \2 _+ e
    prevP = inv(prevV);   2 T. [2 F" t: e' ]
    prevPsmall = prevP(i,i);   
    " f& C! E  K/ j* _/ ?5 FprevVsmall = inv(prevPsmall);   
    6 O! K- r9 O6 v# K) x) T[x(i,t), smallV, LL, VV(i,i,t)] = ...   kalman_update(A(i,i,m), C(:,i,m), Q(i,i,m), R(:,:,m), y(:,t), prevx(i), prevVsmall, ...   'initial', initial, 'u', u(:,t), 'B', B(i,:,m));   
    / z9 t3 U/ Q1 `$ ~# ?, MsmallP = inv(smallV);   6 D* U$ Y8 z4 T
    prevP(i,i) = smallP;   : k1 d8 `; ~& p
    V(:,:,t) = inv(prevP);   : _4 b: {9 f5 h" B6 Y* \
    end   0 a& u- C- |5 T# S- N8 [+ W) r
    end   
    7 z' j! Q7 o1 E2 P  dloglik = loglik + LL;   
    7 F2 X( G; N: o% jend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

  • TA的每日心情
    奋斗
    2014-7-16 18:27
  • 签到天数: 123 天

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 / H  e( X: ?1 N4 I4 F: w
    matlab下面的kalman滤波程序
    6 a" s& \. c8 Tclear  N=200; w(1)=0;   * Z- L8 L0 I/ T/ z
    w=randn(1,N)
    ' |5 F/ D# L' j8 y: }
    强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    13

    主题

    3

    听众

    473

    积分

    升级  57.67%

  • TA的每日心情
    开心
    2014-7-4 12:51
  • 签到天数: 41 天

    [LV.5]常住居民I

    发帖功臣

    回复

    使用道具 举报

    244190977        

    1

    主题

    8

    听众

    80

    积分

    升级  78.95%

  • TA的每日心情
    开心
    2014-11-13 19:31
  • 签到天数: 44 天

    [LV.5]常住居民I

    自我介绍
    研究生

    社区QQ达人

    回复

    使用道具 举报

    yulun9988        

    3

    主题

    11

    听众

    524

    积分

    升级  74.67%

  • TA的每日心情
    擦汗
    2015-2-12 23:58
  • 签到天数: 108 天

    [LV.6]常住居民II

    自我介绍
    运用遗传算法

    邮箱绑定达人

    群组Matlab讨论组

    回复

    使用道具 举报

    yulun9988        

    3

    主题

    11

    听众

    524

    积分

    升级  74.67%

  • TA的每日心情
    擦汗
    2015-2-12 23:58
  • 签到天数: 108 天

    [LV.6]常住居民II

    自我介绍
    运用遗传算法

    邮箱绑定达人

    群组Matlab讨论组

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-5-24 16:47 , Processed in 0.507670 second(s), 83 queries .

    回顶部