QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4995|回复: 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滤波程序
    , B& K# u9 C0 x" B- xclear  N=200; w(1)=0;   % p8 ^+ {4 c+ D3 G# F
    w=randn(1,N) ! K* |. B/ {/ s" N. u
    x(1)=0;   
      T4 r" ~  f5 N$ D' j: na=1;   
    - a0 [" G* g% r5 Mfor k=2:N;   
    ' i$ z, O/ F5 M1 z: v+ Nx(k)=a*x(k-1)+w(k-1);   6 P) v4 h* J3 @4 l9 B
    end     j7 R7 R3 q/ [& Q# B
    V=randn(1,N);   
    ; D! w9 _4 u7 r6 `q1=std(V);   
    1 {4 Q- m9 [5 i( C2 e4 uRvv=q1.^2;   
      O% }0 @- O4 A- jq2=std(x);   
    6 s: u0 x3 j9 h% |Rxx=q2.^2;   
    ! R: n( A8 K/ Z- i; _: U) Mq3=std(w);   4 ^1 z+ g/ J9 \
    Rww=q3.^2;   
    6 }) ^! \) P3 X$ J1 d  c4 Xc=0.2;     _7 ]6 a$ C: }# z) w
    Y=c*x+V;   
    ' W8 |1 r' K7 v) }& Jp(1)=0;   
    ; e7 p2 @* b, ?' }0 [) r8 S8 Ps(1)=0;
    & g1 {/ @* Y# e0 O3 [; Ufor t=2:N;   
    % G9 c+ p! w* ~: D. |! d% L0 fp1(t)=a.^2*p(t-1)+Rww;   
    $ w3 }4 w% E' \  d+ r8 Zb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   , D* q# ]; h" K1 E7 w
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    3 b" ~0 Y, g) ^# w$ Rp(t)=p1(t)-c*b(t)*p1(t);   
    2 u: L/ @9 u' j9 ^. g4 |end   
    : n) U4 _% V, P$ m/ x) ~t=1:N;   4 ]& k' F! s! c: X
    plot(t,s,'r',t,Y,'g',t,x,'b');   ( D. k( Q7 U/ c
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    5 n, q+ A( M; F0 I% Kalman filter.   
    : }3 l6 Z5 m" @3 k$ P: }: t" E% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    : Q: W  ^" Q$ c# F, E! K%   / A2 [* _$ D/ I7 o0 Y  a5 k
    % INPUTS:   
    ' r8 N4 ~/ N: G& y% i6 `% y(:,t) - the observation at time t   . J& g$ Y3 b2 H# O/ E' }
    % A - the system matrix   ( }, L' D9 w4 {8 t' ]9 C; U3 z
    % C - the observation matrix   5 _# ]0 D; B# V6 Q* O" x
    % Q - the system covariance   
    4 b/ Y) y3 w2 K. Z# {8 t% R - the observation covariance   
    : I2 ^5 O  }( c3 c) X. z4 H; q% init_x - the initial state (column) vector   * h3 i4 W1 p7 F
    % init_V - the initial state covariance   
    8 A  Z/ Z: P) E+ a: j%   
    $ w$ ^9 c3 B# _1 P3 _( y% OPTIONAL INPUTS (string/value pairs [default in brackets])   / M$ Y, M+ O9 O# f
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   3 q% Z" ^- h( V# I) M% k
    % In this case, all the above matrices take an additional final dimension,   ) S  @' ^7 g/ D% N4 k* {
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    & ^  s$ u- B) x% t% However, init_x and init_V are independent of model(1).   6 _3 Q/ N2 v2 D, X! Q1 K: ~4 g; i' ]
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    & q9 J3 @# x0 y; B% 'B' - B(:,:,m) the input regression matrix for model m   9 j5 p2 a+ q+ n$ q& d
    %   
    * G+ r" U3 t! h& a& `% OUTPUTS (where X is the hidden state being estimated)   % J7 J+ Q5 C% L3 K& j
    % x(:,t) = E[X(:,t) | y(:,1:t)]   8 E; c# L  v+ a" O) m, L. ~/ _
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   " j( {) V6 Z4 Y$ S7 H  G( y
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   " `7 c" J: [/ H$ @: A  }# c
    % loglik = sum{t=1}^T log P(y(:,t))   
    $ g, o2 F( r9 K' e0 n%   
    7 O; p( ?, n: n! v- J* R" g1 [% If an input signal is specified, we also condition on it:   
    + N+ \9 K' t. p% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   - C0 ^3 _- Y1 m9 P) K) a( i
    % If a model sequence is specified, we also condition on it:   : e- g- X# N$ P# q. W' w. u) M
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   1 ]3 j& G- k6 p7 \9 c& r) }
    [os T] = size(y);   - S* z0 E* ?$ n, C; O8 [& L
    ss = size(A,1); % size of state space   
    + q# W; O: \0 ?3 l% set default params   
    3 c/ Q5 L0 J$ r+ f+ Fmodel = ones(1,T);   
    ; B: j) D9 Q, C" s4 \2 H5 Xu = [];   9 O% C7 H6 V3 c1 p: G  U  ^8 k
    B = [];   . y5 |% U  Z# ]+ u( C
    ndx = [];   
    $ P3 j6 l' o4 m( _( k/ o% r# \( [& y1 dargs = varargin;   
    , J/ V$ v  f7 s' W- z4 x4 znargs = length(args);   ! o  H- J2 |' b% j% X2 e7 k4 \3 f
    for i=1:2:nargs   
    . e9 ^) E8 t+ b! Bswitch args   : F' O1 N' y8 G% }7 h- c+ {
    case 'model', model = args{i+1};   
    $ ?* F- |0 I& e9 T$ t" p. Icase 'u', u = args{i+1};   
    $ L0 J& _! R, icase 'B', B = args{i+1};     P8 M5 J; c+ K  @3 t
    case 'ndx', ndx = args{i+1};   
    4 y: Q& F9 o; h9 t9 O% Notherwise, error(['unrecognized argument ' args])   
    4 u! u1 k; n5 N9 Dend   
    , }1 H' z' q* R5 E- L1 I, Fend   
      g! L, |6 _$ N# e5 z* xx = zeros(ss, T);   7 L! Y2 Q2 ^5 U
    V = zeros(ss, ss, T);   7 N, u4 I3 c4 c# t
    VV = zeros(ss, ss, T);   % l' W4 E. [! g! P. O
    loglik = 0;   / d* _. ~+ `& f; a
    for t=1:T   m = model(t);   
    / x/ i' d( I. K: ?if t==1   %prevx = init_x(:,m);   . Q9 h: H8 H* s2 \$ e  U; Q- P
    %prevV = init_V(:,:,m);   / c! Q6 c2 I; X& E! J9 h: C& @% M
    prevx = init_x;   
    ) C* q; C3 B& o( G! I9 O& _prevV = init_V;   
    ) F: z& {+ g" {initial = 1;   
    ( L" B. O5 ~4 R" L0 H+ kelse   prevx = x(:,t-1);   7 i  e4 E; v( w# t: k
    prevV = V(:,:,t-1);   ; {, }& k: r5 X5 v
    initial = 0;   1 s4 F5 @% p, T; b1 _0 ~" r& Z& s
    end   
      m1 P/ e) k) A/ _% v" v8 Nif isempty(u)   
    ! |1 @9 I$ T7 V1 ], @) M$ z7 J[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   + e) H4 {( A9 d
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    # m7 u& t8 Y; n- Y$ c  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    + L9 h' V* m- M1 x     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   9 Z4 h$ |$ K. l# s6 ?
    else   
    0 f; v3 U$ Z& ^5 A4 ii = ndx;   ! I# ]# Y/ [9 U3 ~% O5 p
    % copy over all elements; only some will get updated   x(:,t) = prevx;   
    * T" F4 u7 b1 z! bprevP = inv(prevV);     h7 ~3 |8 z  t8 _
    prevPsmall = prevP(i,i);   ; Z: V- s+ v: O& e4 Y( ?8 k
    prevVsmall = inv(prevPsmall);   , {1 c1 V" |) @/ x9 I2 m# s/ c
    [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));   
    6 V4 |. Z$ l, |smallP = inv(smallV);     G& e* l' J, F7 {0 }
    prevP(i,i) = smallP;   
      A  C2 w' d; D5 {9 S' W2 m: M- `V(:,:,t) = inv(prevP);   6 d6 n# s; E: o. |
    end   . F. P6 u+ O( ?# k
    end   
    7 W% V, g1 k! W' {+ Rloglik = loglik + LL;   
    ( R- e9 N. G; k% [. m8 Zend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 / q. F4 t7 K$ v0 ~) d, K+ M! S1 i
    matlab下面的kalman滤波程序
    + ~: g7 O5 h" \clear  N=200; w(1)=0;   ) G' b; ?; a! }: Q4 D& n
    w=randn(1,N)
    ) H% M" ?" w  U  B7 b6 a
    强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-7-9 07:08 , Processed in 0.414274 second(s), 84 queries .

    回顶部