QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5047|回复: 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滤波程序  l( N/ `. h5 ^9 w* S- ?1 I. v' O
    clear  N=200; w(1)=0;   7 L- p5 v& e, O- {7 O- D8 D
    w=randn(1,N) 8 ~1 R8 `! P- e
    x(1)=0;   # N( ]2 }6 ]7 |* d
    a=1;   8 ~/ W5 X/ ?" \
    for k=2:N;   * j4 o4 A# t$ S, @5 p
    x(k)=a*x(k-1)+w(k-1);   1 f) N3 y0 T% ~7 C* a" Q
    end   % v3 D& E# ~2 k+ }
    V=randn(1,N);   
    3 x) E, e2 t% H1 Wq1=std(V);   
    & m( R; h- z5 Y+ @  @9 JRvv=q1.^2;   
    4 n/ B/ }5 d9 c$ X! U5 u; L! ?q2=std(x);   1 x0 ~" S' P/ G, |) [. [7 |/ b
    Rxx=q2.^2;   
    " Z/ g- L, W: m- o: Yq3=std(w);   
    . Y: V8 ^2 n9 W) Z$ S, J, ?) K4 uRww=q3.^2;   5 E& P! S$ q9 K+ v
    c=0.2;   % N' K% b2 Z: X6 a
    Y=c*x+V;   
    # M) x/ i& g1 s$ ^, @+ R0 k6 wp(1)=0;   ; {4 `9 s) ]  T4 X
    s(1)=0;
    * L7 b& I' ]' O0 G5 h4 E' J0 E9 T1 yfor t=2:N;   5 [0 N4 Z6 m8 z) t$ E7 @
    p1(t)=a.^2*p(t-1)+Rww;   ; M7 @; x; G" |6 b
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    $ Y, j% K1 `; k0 P- P( Ms(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   ! K* I6 s8 ?! N4 n
    p(t)=p1(t)-c*b(t)*p1(t);   # p8 n" p8 D$ H" D" d
    end   & V6 L8 P6 B; L* W8 Y& z4 b1 v
    t=1:N;   $ i% y& ~& L- x& g6 e+ P% E* t, ?3 A6 F
    plot(t,s,'r',t,Y,'g',t,x,'b');   
    ; V  w  W7 F* C4 |8 f7 ], n0 y0 Kfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    0 _$ @1 S: t8 x* K9 f) h- t% Kalman filter.   
    & R8 F' D7 }0 G+ L1 I# n2 Q. z% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   / g( }3 N2 D+ w
    %   + e$ r/ c7 C' f) ?
    % INPUTS:   
    8 _7 f9 h: _& g/ c. b% y(:,t) - the observation at time t   
    . V& o" O; {3 F4 [3 Y9 L, a% A - the system matrix   9 f$ ]& ?5 |: Y! I
    % C - the observation matrix   
    $ S6 _5 p; h; F* Z1 D% Q - the system covariance   
    & b% c$ n9 M3 K% @2 o. F9 F6 H% R - the observation covariance   ( }! O) F% ~* Q1 b( {8 T! X% f
    % init_x - the initial state (column) vector   
    ; V; j/ I8 T0 J1 z/ X" M7 Y% init_V - the initial state covariance   # a! R: y" G" m1 f! D  [" V
    %   
    & U& W7 ^3 L3 H" l+ L' F% OPTIONAL INPUTS (string/value pairs [default in brackets])   ! E9 d/ p) \% _
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    4 T" e" \8 v- o; Z3 L, K% In this case, all the above matrices take an additional final dimension,   
    . @7 F9 e( E. a& s4 v4 S+ r% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).     x( D& q. q8 z2 K* D; O
    % However, init_x and init_V are independent of model(1).   # r4 k/ t6 D4 e8 C; e8 [) s' O
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    9 t2 T+ M3 G: {  X6 _& G/ H% 'B' - B(:,:,m) the input regression matrix for model m   
    1 a; j7 p+ [  u%   
    ( [- A& C0 O4 {* q  W% OUTPUTS (where X is the hidden state being estimated)   " ?  b5 Q! Y2 L/ B' x0 e
    % x(:,t) = E[X(:,t) | y(:,1:t)]   0 C, a  ^# ]' M2 q
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   ' F% ^5 G! R0 s9 u: k
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    + M  e3 u2 d- |  A+ m2 A1 o' {. I% loglik = sum{t=1}^T log P(y(:,t))   - @; o9 i" [8 N! j
    %   
    $ P9 Y2 t9 v4 B% If an input signal is specified, we also condition on it:   
    ! M! [+ b- c% S0 A8 `! ?# R% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    1 }6 a! i4 p$ g. g% If a model sequence is specified, we also condition on it:   
    # m, n- V- y& z" B% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    3 X+ n; j: ^& a- T[os T] = size(y);   ' h7 U. @5 |) W; p8 h
    ss = size(A,1); % size of state space   7 |  {  e5 _, Y
    % set default params   
    , w7 |. q; {( Y5 `; ~: G7 f0 Jmodel = ones(1,T);   0 p! z+ |3 g; U6 S6 K4 n
    u = [];   
    & \6 t- z- {+ fB = [];   3 S3 L3 o/ C! x
    ndx = [];   
    8 `: K( Y8 q$ {$ U: z: \  ?" w8 dargs = varargin;   
    2 O/ f; e5 B6 t: ~& ]6 w3 w( j( knargs = length(args);   
    ( S. U4 g+ R- m  Dfor i=1:2:nargs   # J. n5 B) ]* _4 x8 c
    switch args   
    / y* W  c7 c. |! {7 L8 p& b  A* xcase 'model', model = args{i+1};   
    ' N# K) F+ x+ m8 K- N8 I/ r5 zcase 'u', u = args{i+1};   ) {  V% ]& O, [$ a4 G" Y, ]
    case 'B', B = args{i+1};   
    * e: w1 w! c: @, mcase 'ndx', ndx = args{i+1};   - F4 T9 {; ^+ k
    otherwise, error(['unrecognized argument ' args])   3 F3 g0 a3 O3 N1 ~( w% j
    end   
    3 C1 P, Q0 L2 H5 M9 S. uend   ! f4 U! j1 v- q7 i' ^4 J
    x = zeros(ss, T);   ) G2 C* q' f( S0 U7 S
    V = zeros(ss, ss, T);   
    + G$ O) S/ L% O$ WVV = zeros(ss, ss, T);   
    ! ]0 M9 \2 Y" _" M* `% ~: nloglik = 0;   
    5 `6 |4 T4 Z4 k9 H: ?" yfor t=1:T   m = model(t);   % r' u2 @7 {- s1 I$ h
    if t==1   %prevx = init_x(:,m);   
    , p& }/ D4 A( @: t; d%prevV = init_V(:,:,m);   
    5 }: Y& N; _" C8 p5 f5 kprevx = init_x;   
    5 \0 r  [" ]2 ?1 U" V% w* cprevV = init_V;   ( r6 D4 h5 Y  v9 y( g( u
    initial = 1;   # i" R5 ~% H0 p& I; e
    else   prevx = x(:,t-1);   
    / v% C/ [, F0 T" W& RprevV = V(:,:,t-1);   # M+ z) r  q$ ?* O9 }
    initial = 0;   2 S6 D/ F& e! Q# v3 m' o% L
    end   - L; h2 j% U  |8 R; e
    if isempty(u)   9 M! D. Z/ T# ?3 G+ I: c
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    . {/ k7 }1 A* ?) `kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
      q6 v; c2 H, o' u' m- e. |  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   + |8 C' G5 E2 _! ]
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    - w0 |9 ?- |- y3 k: t$ W# U* Celse   ' [1 M$ `; F6 f, O; }! N3 n5 A! v
    i = ndx;   0 ^, d5 C8 J- o0 u$ B' L
    % copy over all elements; only some will get updated   x(:,t) = prevx;   ( B4 \$ \; i! ~9 _5 w- ~
    prevP = inv(prevV);   
    * e: ]2 X$ r# z( z* V9 g: mprevPsmall = prevP(i,i);   
    . ?: e. s- a7 ]  v# ?5 E6 z" WprevVsmall = inv(prevPsmall);   
    : L/ H# }# ~& ^& P" |  ]6 h[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));   
    3 y$ P9 N+ C+ d3 ~smallP = inv(smallV);   7 s+ `8 u8 u! H) q5 h) Q
    prevP(i,i) = smallP;   
    ; l( q% W8 T" K* _6 _6 aV(:,:,t) = inv(prevP);   1 L: Q0 _9 W& ^! q, T: Z3 V
    end   
    . p. J3 V* W0 y! [' U: H- }end   ) p* G8 n9 ?  k( C0 _* {7 C* c2 S
    loglik = loglik + LL;   
    , w1 K" X, l1 m2 iend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 2 o4 [  z7 e5 ?" b( |" Q( N
    matlab下面的kalman滤波程序; e  ~+ r0 V/ E3 _) o, S4 ?
    clear  N=200; w(1)=0;   ; L8 @- |; e. O  m
    w=randn(1,N)

    : |4 I! O" K' e2 U3 e( w: s强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-8-6 06:54 , Processed in 0.478619 second(s), 84 queries .

    回顶部