QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5045|回复: 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 微信微信
    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讨论组

    回复

    使用道具 举报

    244190977        

    1

    主题

    8

    听众

    80

    积分

    升级  78.95%

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

    [LV.5]常住居民I

    自我介绍
    研究生

    社区QQ达人

    回复

    使用道具 举报

    工科男 实名认证       

    13

    主题

    3

    听众

    473

    积分

    升级  57.67%

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

    [LV.5]常住居民I

    发帖功臣

    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 ( u2 J( _4 ~+ w
    matlab下面的kalman滤波程序
    5 U1 D/ U( T. M0 ?! d% g% ~/ Aclear  N=200; w(1)=0;   
    . N2 h% G# `. |, j% F  G; F7 d9 Uw=randn(1,N)

    5 h+ K$ M  m& n6 v强大呀,下了
    回复

    使用道具 举报

    1341

    主题

    738

    听众

    2万

    积分

    数学中国总编辑

  • TA的每日心情

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

    [LV.7]常住居民III

    超级版主

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

    群组2011年第一期数学建模

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

    群组第二届数模基础实训

    群组2012第二期MCM/ICM优秀

    群组MCM优秀论文解析专题

    matlab下面的kalman滤波程序
    " g  O, V/ h! ~5 n8 fclear  N=200; w(1)=0;   
    $ T% {' B. M4 L/ d) f3 Sw=randn(1,N)
    : v2 X2 k  [% E! p- f  Ox(1)=0;   
    # h- T& E. m3 Sa=1;   0 t4 H4 r! a1 i# |8 N" U. _
    for k=2:N;   7 }" C1 j9 h1 E' F1 l* C* k
    x(k)=a*x(k-1)+w(k-1);   
    9 q* Y" n& ]  O% \, ^end     b0 ?* L) q2 ]# I9 `9 n5 d9 x" {
    V=randn(1,N);   1 w# O" d8 Y7 H4 I' n8 l
    q1=std(V);   
    # H/ M5 V$ H) SRvv=q1.^2;     |$ n+ @' \# k+ \: V2 W3 \# y
    q2=std(x);   5 n  J9 t. o" t( s9 t0 w
    Rxx=q2.^2;   
    ' r) Z2 x% C- ~: ^q3=std(w);   ' W' L* C; x1 n5 o5 Q& B
    Rww=q3.^2;   ! u+ q9 F0 L% B7 f% c  U
    c=0.2;   5 {8 o0 ~1 y5 R4 U* G; M- q5 a
    Y=c*x+V;   + w, C. z  [; K
    p(1)=0;   & d7 @& _* d- ?
    s(1)=0;
    5 T8 S6 \8 e, d( k8 G- ^. `for t=2:N;   
    $ n! s/ ?. ~, M7 ep1(t)=a.^2*p(t-1)+Rww;   
    3 z* s1 s) G$ h4 y, W0 ~( @+ y9 ?b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   0 {  J8 r, H& f) L
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    / l% P8 n3 y* z. @p(t)=p1(t)-c*b(t)*p1(t);   4 e2 y4 P( z5 e; J7 M0 E& h8 a
    end   , w0 W9 z$ k4 O  n5 e9 z6 e# a
    t=1:N;   
    # |6 i- r5 ]! F3 a+ Bplot(t,s,'r',t,Y,'g',t,x,'b');   : z! W: |) G8 C. |$ I$ O) ~
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    7 Q3 M4 j& q9 j5 X$ c% Kalman filter.   . q' u! U. B! }4 m* {
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    ) W! x  i- u% P! [9 J2 [9 \%   
    ' D0 i/ _$ O) d0 r' `+ P' S% INPUTS:   6 w; r$ Z; O) o+ J( y! @3 G
    % y(:,t) - the observation at time t   
    1 t+ i2 M* Y: M8 f6 a& `% A - the system matrix   
    4 ^- u( c9 M4 R. U% C - the observation matrix   
      e& G+ [5 s/ m9 F. v: b# }0 J% Q - the system covariance   
    4 @' f! }& z- `- }; ^( D0 d% R - the observation covariance   
    7 y1 f- @3 K; ]! ^4 f8 [* C% init_x - the initial state (column) vector   
    5 g8 W- h# V  `/ p  @+ R: c% init_V - the initial state covariance   , q, J1 g0 Y# g' I
    %   
    * z1 W" j' ^! }# ~: O% OPTIONAL INPUTS (string/value pairs [default in brackets])   
    $ u. y& i, P3 ~% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   5 b; p9 A* e0 _3 q& q* A
    % In this case, all the above matrices take an additional final dimension,   
    . |) X- G3 }$ X0 a% j0 c% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    0 Z" T3 l2 i6 s% n) c9 ~% However, init_x and init_V are independent of model(1).   
    & g' v" C9 W8 S- ^- ^6 A$ [% 'u' - u(:,t) the control signal at time t [ [] ]   2 u' U0 |% P2 s7 ?) z9 Q9 a
    % 'B' - B(:,:,m) the input regression matrix for model m   
    ( ]8 v& ~- z$ ]) l# w7 V%   : G( S* L% i- w8 {
    % OUTPUTS (where X is the hidden state being estimated)   
    # m8 y* u" T. @6 M' b( \. k7 ^% x(:,t) = E[X(:,t) | y(:,1:t)]   
    1 X  F: L9 T3 g2 o% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    ; y% }+ W, X% ]( q$ a% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    7 K# E, V: M" w) i% loglik = sum{t=1}^T log P(y(:,t))   . u# s  A$ U; f: {/ N
    %   
    1 Q# v/ f+ b1 p* A# o! m6 d% If an input signal is specified, we also condition on it:   , C+ L2 G: z: e" D5 x4 @6 S
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   6 X8 u, G$ l. m9 q, y
    % If a model sequence is specified, we also condition on it:   
    ) d% ?" P& }2 C2 p+ G: _+ Y' p! E9 k0 @% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   5 b) c' y% D# t" E
    [os T] = size(y);   
      j9 A7 c4 N, Yss = size(A,1); % size of state space   5 j& @2 v9 p& c) p& }) Y
    % set default params   
    5 K5 w5 ]" _* ^model = ones(1,T);   " E- N7 a# }; ~  c2 R  ?
    u = [];   6 @7 y8 h" ~* n
    B = [];   
    & m! g0 F( m1 J6 l$ I% Zndx = [];   
    ) o0 ^& b7 {1 P) _+ b/ _args = varargin;   / g% I! R1 H0 E' o
    nargs = length(args);   # |3 x6 ]5 M3 L7 B5 Y! @9 I! [! x
    for i=1:2:nargs   9 _  C# m) X* w. k1 O7 i
    switch args   
      Y/ T# f8 k: w1 [case 'model', model = args{i+1};   
    8 [" G# ~3 V/ R, Wcase 'u', u = args{i+1};   - u, \6 X& F* A! V, _: e
    case 'B', B = args{i+1};   
    0 C" T0 E" [4 x3 |- m( fcase 'ndx', ndx = args{i+1};   ; A" H1 f7 }9 ?( l) t
    otherwise, error(['unrecognized argument ' args])   
    - j% J) s  u& _# @' bend   ' W) h% |. }8 v  E  a9 G
    end   
    $ y. Y3 D  ?" q9 k4 y  rx = zeros(ss, T);   : {: _) G+ R4 X' d# P: R8 |& y
    V = zeros(ss, ss, T);   
    ( A+ n1 i3 Z- \5 Y& L6 F3 x# XVV = zeros(ss, ss, T);   + J- B. X0 k; F" V
    loglik = 0;   
    * E5 S/ `+ }* u# g- [8 P- `" cfor t=1:T   m = model(t);   ; b& {% ~3 E( `" q" s1 u
    if t==1   %prevx = init_x(:,m);   6 k8 Y3 _( k) S( x* _+ ?
    %prevV = init_V(:,:,m);   6 t- X- R, X4 }' ~5 a8 e3 J
    prevx = init_x;   7 g7 i3 S" Q, {# b& d! g$ c
    prevV = init_V;   
    # I( S5 I& f+ ?( T5 @  X( L* b! kinitial = 1;   
    + Q. ~# j# S6 V) G  felse   prevx = x(:,t-1);   
    & b$ Y7 i2 S1 T* t2 d% Z3 ]prevV = V(:,:,t-1);   
    0 L$ V7 [5 Q' B0 Xinitial = 0;   ; m' ^7 w$ A4 L) U' w
    end   
    / W; E$ D$ c0 T) r; d" b7 t3 Jif isempty(u)   
    ) P, I* Z+ H; |- i[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   " I+ f- [5 }0 s: ~4 c
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   " i0 |: ~: a7 R( o8 ^+ h2 ^
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   8 }& N+ |7 |/ L4 I
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    2 T& x  Y4 q' b- belse   4 g3 c3 ]  S! J. @# W
    i = ndx;   
    ' B. C- h; e* R& q) O- \" m% copy over all elements; only some will get updated   x(:,t) = prevx;   
    ( A6 d/ U4 r, N# U. P8 z0 t: fprevP = inv(prevV);   0 l8 N7 c( o4 h& b/ ?
    prevPsmall = prevP(i,i);   
    , r; b" {7 V, w, o! C5 ^2 QprevVsmall = inv(prevPsmall);   
      U% i, N: w4 P[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));   ) t) [8 f8 r- V- k
    smallP = inv(smallV);   
    & f! S% ?# |& s: EprevP(i,i) = smallP;   / W" q6 j$ r& w7 R0 o
    V(:,:,t) = inv(prevP);   9 `3 e3 r) p& T( U, W: u
    end   
    - m- ?8 d- `$ Xend   7 s  P9 J- j3 N0 l, a, R3 E3 g
    loglik = loglik + LL;   
    9 c7 J! U7 D! h: S5 y( w* lend
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-6 04:00 , Processed in 0.360558 second(s), 85 queries .

    回顶部