QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3876|回复: 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

    主题

    737

    听众

    2万

    积分

    数学中国总编辑

  • TA的每日心情

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

    [LV.7]常住居民III

    超级版主

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

    群组2011年第一期数学建模

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

    群组第二届数模基础实训

    群组2012第二期MCM/ICM优秀

    群组MCM优秀论文解析专题

    matlab下面的kalman滤波程序
    4 c) P# q( ~* Z, sclear  N=200; w(1)=0;   
      X' v4 z5 [8 h7 rw=randn(1,N)
    7 E) f! l7 y" A- }2 h" Ox(1)=0;   
    % b- B% X4 C4 g8 f* H/ s6 Y! Ta=1;   0 a: ?% a; {/ C$ s
    for k=2:N;   / V3 t2 X1 @8 \8 J
    x(k)=a*x(k-1)+w(k-1);   
    $ v: j4 k2 `! j( {$ t) hend   $ m3 A9 z9 D/ B/ L9 R3 ~8 _
    V=randn(1,N);   
    4 C! r/ }% J( c1 @q1=std(V);   
    9 f; W' I. E2 X0 RRvv=q1.^2;     o( w: G' ]8 \; a! R: L
    q2=std(x);   % J/ |2 o2 O$ T
    Rxx=q2.^2;   
    / x' n% D7 J0 i% q# A0 Q2 Hq3=std(w);   
    0 b: R$ _: h7 f# r' t0 i( rRww=q3.^2;   ( ]% T3 j* I9 R: M
    c=0.2;   
    - H0 ^( D" D. \5 K$ WY=c*x+V;   
    8 E5 \  L% o! b/ Zp(1)=0;   2 T) K: |% H8 e; R% g
    s(1)=0;. @! {& }9 i' {# s$ P9 t8 b# O
    for t=2:N;   
    " i4 s$ \/ A  Gp1(t)=a.^2*p(t-1)+Rww;   8 c4 [' |+ s# Q1 @. C' F
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   % D: r& C. E, ?" q( x9 K& r. k
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   1 K' j8 r! g* l6 H
    p(t)=p1(t)-c*b(t)*p1(t);   9 D2 }  I0 r: M: s
    end   , ~' Y  y" f: t+ v
    t=1:N;   ( v: m2 u6 N( ?& x8 Z& c
    plot(t,s,'r',t,Y,'g',t,x,'b');   
    / v' \: u( m+ y* c; l/ nfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
      |6 ]0 x6 V9 {' I) q% Kalman filter.   
    & N: L( i; U. ~6 K7 M% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
      `5 K+ ^) K  u4 {# @; z* N6 O%   ( `, f2 a* g- P  g
    % INPUTS:   4 g. K9 k- u: T% X4 z, v
    % y(:,t) - the observation at time t   ( N: x* U* w* d
    % A - the system matrix   
    . ?* p: X4 _) V( G% C - the observation matrix   3 X, l4 |, S! V4 }% g  {7 M
    % Q - the system covariance   $ s$ {5 c4 S: k
    % R - the observation covariance   ; f1 V4 y0 T9 E$ s& g  X
    % init_x - the initial state (column) vector   0 x9 @6 K4 ?$ s3 K2 p1 b
    % init_V - the initial state covariance   
    7 v. O* m) T  U  z%   8 w9 ^5 S- W5 ?; S5 N9 V! q% b6 @
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    $ s3 I1 F- ]# A$ x0 L3 H7 T% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    % X3 s6 u5 \/ V/ y% In this case, all the above matrices take an additional final dimension,   / t5 w- H9 j$ K: l' _, {
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    ) O: k! D6 G! n% However, init_x and init_V are independent of model(1).   1 O1 T- I2 E: b$ H$ k
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    $ ~# \6 B' ], r5 e% 'B' - B(:,:,m) the input regression matrix for model m   . m+ R3 d4 ]4 n, T
    %     ]0 r% P8 h& B5 _5 o" ?1 U# Z
    % OUTPUTS (where X is the hidden state being estimated)   
    + [% X/ ^% h6 C% x(:,t) = E[X(:,t) | y(:,1:t)]   
    6 C. H" v. T) a( {  _% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    # R9 y0 N5 O: {" Q% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   / z! K7 i8 a' E$ k
    % loglik = sum{t=1}^T log P(y(:,t))   
    7 h1 {7 o8 I1 a/ m4 ^& l%   
    * N) Q9 L9 X: }  ]! [% If an input signal is specified, we also condition on it:   
    5 _; ^8 N( k, v2 w% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    2 u" V$ ^& S: v5 [/ k% If a model sequence is specified, we also condition on it:   
    , A8 H# D& K5 Q2 p& q' G: @% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    + P+ Z7 ~5 K" ^! L[os T] = size(y);   6 k& E4 j( R  `6 g' n( k# A
    ss = size(A,1); % size of state space   % H+ F2 _8 o$ o7 {' w
    % set default params   % Q  z; i3 V, k7 o, b8 L
    model = ones(1,T);   ; x' T2 c& v  b" Q, E  c- J- n
    u = [];   
    7 b& y* ^; q  {5 e# t4 G4 NB = [];   
    ) `+ |" \. S4 n" ]' A! b; undx = [];   
    . Q4 h: d% L4 y/ E: Gargs = varargin;   - h2 |" q  m  {% s
    nargs = length(args);   
    2 L! C8 _7 w) [; h' V) c8 ^for i=1:2:nargs   1 V9 j1 E5 e# u# P7 O
    switch args     c' ]6 i, x/ J5 l; @8 a- m
    case 'model', model = args{i+1};   
    " g1 p6 ]) C) c! L( d  T# Ocase 'u', u = args{i+1};   
    0 Z9 v' i, y  U) F4 z/ P4 xcase 'B', B = args{i+1};   - Z! p3 V' S# t! B
    case 'ndx', ndx = args{i+1};   2 j* l9 A2 Z6 |+ Y8 C
    otherwise, error(['unrecognized argument ' args])   
    : V6 O) ~) X. j: W4 K1 Yend   8 |* f0 Y1 F7 M# c5 _
    end   - W( c4 L* X7 |: q/ q1 ]$ A
    x = zeros(ss, T);   
    & |  H  Y: j6 KV = zeros(ss, ss, T);   " k( }" h; e/ I0 {* O
    VV = zeros(ss, ss, T);   ( o" x2 w( V" f; X  \- V
    loglik = 0;   
    4 R/ c! J( |, d* T6 p" p. S  |for t=1:T   m = model(t);   7 o/ H4 u0 @4 k* Y
    if t==1   %prevx = init_x(:,m);   
    1 Z. r% O( C4 m%prevV = init_V(:,:,m);   
    ( |7 y3 @. ]) f, j' h: x" _4 iprevx = init_x;   
    ( b  G4 I- n5 c- x& |prevV = init_V;   
    7 F) @/ k+ y( Binitial = 1;   
    & F4 Y2 O  k3 t# a, Jelse   prevx = x(:,t-1);   
    , j, b( T, r1 S( V. gprevV = V(:,:,t-1);   0 p4 N5 w; T" i) s+ J, S" R
    initial = 0;   
    . l/ o0 m" `& w( n; v+ u. mend   $ |+ p4 F: k' Q3 c0 M
    if isempty(u)   * k! p9 ^9 ^. ]7 U: G/ q# r
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   ! f6 o- X+ k5 Z
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   % }4 v9 j: h4 e( v6 A+ b8 J
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    ! T+ z; ?4 ^: `5 J" @     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   5 m0 n5 m. J! I; O
    else   
    ; @+ V/ d. m4 V' X/ J! li = ndx;   - A, s" i4 b5 s  T/ o
    % copy over all elements; only some will get updated   x(:,t) = prevx;   ! X( Q" {* b* G/ x* R4 v& v
    prevP = inv(prevV);   9 U% u4 C+ {( ]- v- `- U9 ^
    prevPsmall = prevP(i,i);   " n# B! C$ ^' g* q
    prevVsmall = inv(prevPsmall);   ) J1 P. [) O/ \0 A3 M0 S, x
    [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));   
    / a1 N4 s2 w" gsmallP = inv(smallV);   
    : U" _3 f) U0 C" l" u0 J! b6 _- hprevP(i,i) = smallP;   ! T1 b; S* j% Y. F* K# L: L, {% @
    V(:,:,t) = inv(prevP);   
    4 F8 M# r) d) U) v7 g0 }/ kend   5 c" a( A$ v1 V) e- n- e
    end   / v2 l! A1 x0 r" H
    loglik = loglik + LL;   
    / K( A+ U, |! w7 wend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    : H0 x8 ~0 y8 V& P" W+ w, hmatlab下面的kalman滤波程序
      d" t( U) H- }$ z2 N3 Sclear  N=200; w(1)=0;   
    , S- k: K5 S; l( y" A/ `$ l' U1 T; ?w=randn(1,N)

    " u, L: S) t) \& z7 ]: H4 {- k强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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, 2024-5-31 09:40 , Processed in 0.609411 second(s), 83 queries .

    回顶部