QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3798|回复: 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滤波程序1 c' p/ i- i. v6 a: J+ I5 s
    clear  N=200; w(1)=0;   8 v+ M8 E0 d2 H/ L% R
    w=randn(1,N)
    0 @$ [. q& x6 ]# q; A% a8 p, kx(1)=0;   
    0 L3 a8 d; a% V9 {0 s0 G1 b5 N) m+ Ta=1;   / z1 r) @2 [# Z/ A
    for k=2:N;   
    , S* J$ z/ R% `+ W$ k9 ], b  z' Bx(k)=a*x(k-1)+w(k-1);   / e( {* q( y- Y# e/ `! E% W" [
    end   
    4 t+ C6 {; ?& tV=randn(1,N);   
    5 V* V% E$ L3 k$ X' e! x( Eq1=std(V);   * J3 I6 d1 r/ h/ \% Z- D
    Rvv=q1.^2;   " K6 X" t% ~2 L9 _# \7 q
    q2=std(x);   
    & G# u8 ]' ~5 t. `. {Rxx=q2.^2;   
    7 F" S  @: P1 J4 \7 Mq3=std(w);   
    . z( P7 o2 o" L5 L. u6 zRww=q3.^2;   
    4 N! r) K% g. [c=0.2;   
    ; ~( n" J' Z4 s$ a1 h6 IY=c*x+V;   , G; S' W  w1 R( p4 m; v0 c; m7 w' I
    p(1)=0;   1 O7 P7 {6 O3 u% S
    s(1)=0;' a9 V( f( x2 ~9 u6 p4 t
    for t=2:N;   9 q0 }; C8 g  w* {  v  @: `( w
    p1(t)=a.^2*p(t-1)+Rww;   
    " P% E! d; n9 h$ `, \% ^; [b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   6 q6 e( P: a$ s$ ]  I8 ]$ I
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    9 c+ o5 r' v2 d6 v9 u- [: b4 |# Q" Fp(t)=p1(t)-c*b(t)*p1(t);   
    2 b3 o2 @6 `5 M6 o* |end   
    & w* G  ^- G0 f7 D- ^4 Wt=1:N;   5 q! D, y% j, I; P! U
    plot(t,s,'r',t,Y,'g',t,x,'b');   2 X  k; q8 A" {
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   ( o8 n0 o" }* q8 {
    % Kalman filter.   + Q0 L3 G, r9 R- T! l
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    $ S$ V; {, ?4 U: k) Z6 O%   
    % m+ q; S5 t6 E/ Q: C( w* j; w% INPUTS:   & t" z6 |% L5 l3 o7 b
    % y(:,t) - the observation at time t   
    0 y# i% d3 @% V1 Z. V% A - the system matrix   
    * V$ L/ X: o' h3 R6 v; V* u% C - the observation matrix   
    5 m7 h* r7 n9 _& T7 X% Q - the system covariance   
    $ z% F. H2 ^# G% R - the observation covariance   
    4 ]1 @; P$ m1 L4 ~% F, Y- I$ c3 `: W% init_x - the initial state (column) vector   5 N) ?, u  q1 y1 o  W& q1 W0 b
    % init_V - the initial state covariance   : l0 j: O. J( `& i  C( N
    %   
    3 X4 E1 k" L1 }. U) R0 o* V0 _' X% OPTIONAL INPUTS (string/value pairs [default in brackets])   / ?/ Y$ u& D0 E: m7 ~; W) j0 E
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    # p' N  x7 E2 k  K( ]/ J) n* s& P% In this case, all the above matrices take an additional final dimension,   
    ; T9 Y2 Z/ g' n6 p+ L- v, K5 G% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    8 w# O( h* s) S, `( W% However, init_x and init_V are independent of model(1).   6 K' X- |3 D% n. d1 {
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    - r, Q! R. P9 ^3 X; E% 'B' - B(:,:,m) the input regression matrix for model m   # J5 D! K7 z4 \
    %   
    " e4 l  I2 N: ^$ o+ s% OUTPUTS (where X is the hidden state being estimated)   
    ) R% n4 H& }" k9 M: f% x(:,t) = E[X(:,t) | y(:,1:t)]   
    3 y3 \4 ~: j! @2 C% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   - s8 S+ l: R: D
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    ( N: [1 ?/ _3 }3 @& b% loglik = sum{t=1}^T log P(y(:,t))   
    / O$ q0 T1 e9 d2 i2 D, i, N0 M%   4 q0 r2 D; g2 t. N3 I4 J
    % If an input signal is specified, we also condition on it:   
    - h. a- M1 o4 p% Y; M3 o% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    # h2 _  z4 s/ c/ J2 [% If a model sequence is specified, we also condition on it:   5 c" N" `8 Z" }3 E
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   ( R0 {# ?+ J7 ^; M
    [os T] = size(y);   
    ) r# ^0 t! x$ G  [2 @7 qss = size(A,1); % size of state space   
    . g  ]: P5 I3 T" X- N6 q) a3 p% set default params   
    # y- |+ d6 a# ^; u  h2 U* U" \model = ones(1,T);   
    / @% M* }8 R# y; }# \u = [];   
      f' t3 f; a/ ?7 d2 B) |1 HB = [];   ! e/ l2 a- J  q, r) M  t
    ndx = [];   * x0 E* b1 \% p, v4 H7 w' u/ s
    args = varargin;   & O' B/ K2 S0 C4 i7 k  i! ~$ T
    nargs = length(args);   5 Q7 B" ?6 ^- I4 S' C) T+ Q( K
    for i=1:2:nargs   
    7 \6 E' Q& `& e9 v4 ~* o, y4 Xswitch args   1 a1 B! N0 Y0 L3 o
    case 'model', model = args{i+1};   
    ' Z0 y* v& Y& Q/ B( Hcase 'u', u = args{i+1};   1 z: B3 l- E7 Y+ p- J$ A
    case 'B', B = args{i+1};   4 x# s4 K' ~' G5 F
    case 'ndx', ndx = args{i+1};   
    ( M5 u9 j3 [& \otherwise, error(['unrecognized argument ' args])   , c5 Q- O% Z) _6 t
    end   + {$ y9 A: H6 f8 y8 x! \% Q
    end   7 o$ b  o; M  O# b
    x = zeros(ss, T);   
    7 l, H: |8 J% D7 x* _V = zeros(ss, ss, T);   
    7 @& l( E: S- ~& ?/ ^$ rVV = zeros(ss, ss, T);   
      n1 ~& \  ~! M8 ~loglik = 0;   
    ) r3 I# V6 r1 ~; T5 G" e! vfor t=1:T   m = model(t);   4 h7 W: m9 s3 X, N7 N
    if t==1   %prevx = init_x(:,m);   
    * J" m9 k) R3 H1 H0 c" S%prevV = init_V(:,:,m);   
    $ u# U: u5 ]! T8 gprevx = init_x;   
    ( M  `( l  {* x, [4 _% UprevV = init_V;   " Z; ?  [$ ^" t
    initial = 1;   
    + J. I8 I, e3 |* R8 `  nelse   prevx = x(:,t-1);   
    . D+ f! h& V3 f- XprevV = V(:,:,t-1);   
    1 i3 _8 j7 L  P$ \2 [" {$ M7 Sinitial = 0;   
    0 C/ v6 ?: Z7 S6 vend   
    " M" V' L; ]; Y* k' uif isempty(u)     [' `9 s9 _1 @, U# o9 F. ?
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   6 F% A  H* t  |$ R/ l+ ~
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    : [4 }- L% e; y  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   $ p, I+ D. \0 w" @$ O) n
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   9 B. N' D1 A' ~( z+ e$ I) R
    else   ( [$ T' p7 [: r6 n. C
    i = ndx;   
    1 |$ T: X' S0 O0 e% copy over all elements; only some will get updated   x(:,t) = prevx;   
    : O! u  v& G5 ]) B$ a! A3 c- L& U6 KprevP = inv(prevV);   " y' r$ x* x5 X. P6 n
    prevPsmall = prevP(i,i);   
    % C" ~) a' p1 g" y( S( B" TprevVsmall = inv(prevPsmall);   ) w& S8 Z" ]8 P& v* a0 v
    [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));   
    : a! J8 @7 G& h, S' fsmallP = inv(smallV);   0 c3 D2 _/ ~; Y; M( j
    prevP(i,i) = smallP;   - O3 s, V: ]  [9 q3 l2 \
    V(:,:,t) = inv(prevP);   
    + ?4 N  Q3 O2 k/ s+ nend   
    1 g$ d. v; i1 Y9 W7 H  W/ k; jend   4 y: k" p! t7 L9 _. y" v9 [; u- J
    loglik = loglik + LL;   
    % R( H, c' }/ O" A* S1 Pend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 5 ]: M2 _4 T/ h2 p+ j# Z- F3 X: Y
    matlab下面的kalman滤波程序
    ! H2 }$ A) J% @% f4 h! \$ {5 ~& W. \clear  N=200; w(1)=0;   $ e/ G; c6 Y1 J; V9 f( Y( \+ y
    w=randn(1,N)
    , f! d1 X  }5 g  Z8 p4 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, 2024-5-14 19:15 , Processed in 0.539141 second(s), 89 queries .

    回顶部