QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4880|回复: 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滤波程序: s9 A% `/ w6 s' p- H3 S
    clear  N=200; w(1)=0;   
    1 r9 r% g5 C2 e- b+ ?8 u" |w=randn(1,N)
    " x7 U% u; Z, z/ e4 {: F) Zx(1)=0;   
    / n0 v% e$ f% V; [: va=1;   - c1 i- K  c9 ]6 q& O0 ]
    for k=2:N;   
    7 Y; b$ P% `& ~3 F. a- Yx(k)=a*x(k-1)+w(k-1);   : J7 o. a6 H" I3 ~" z! R3 S
    end   
    1 c; j6 H0 w: y2 ZV=randn(1,N);   
      n1 [5 S1 E+ r- S! S- l  Q2 |5 e/ E8 bq1=std(V);   
    & r  h9 ^, T, O8 A9 yRvv=q1.^2;   
    + Z% j1 U. ?8 ~* Dq2=std(x);   
    ; P% N& ~2 u0 Y# I  {Rxx=q2.^2;   * k$ S. x2 F  G3 @, G9 \
    q3=std(w);   
    " }! c. Z0 B' q. T0 [+ lRww=q3.^2;   
    6 X" k' ^9 ]% {c=0.2;   
    ( b6 @, C5 M0 R, H# f+ ~4 L% q9 RY=c*x+V;   & s( g: v% I! p. T7 K
    p(1)=0;   
      X8 `4 k5 p9 y$ v% Z/ F7 ]4 Ws(1)=0;2 c3 e( C; Z0 `4 T) i: w% W
    for t=2:N;   
    % k1 r' F7 |8 q. c  }6 a+ `p1(t)=a.^2*p(t-1)+Rww;   
    % M! L; B- Q& Z% z5 @- {. Zb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);     ^2 E6 _4 @5 _; r4 B
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    1 i: |7 g9 k) }/ W( Gp(t)=p1(t)-c*b(t)*p1(t);   
    3 O" X; n: ?$ s2 d4 p1 [end   0 T( d4 d# }. t- S0 q
    t=1:N;   
      }9 s. G1 j% e- g1 Q5 z4 Oplot(t,s,'r',t,Y,'g',t,x,'b');   
    7 R: W3 @' }) `) j7 f) [$ [function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   8 q" M8 K6 ~8 B  f# o. Y! l/ u
    % Kalman filter.   ( a% ]) h6 O3 w* l  ?7 k" b
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   & o! y: u! g+ q1 [+ V- s
    %   ! g2 ~* e% ^8 p" F) x# Z. x0 ]
    % INPUTS:   1 i& w9 H4 a0 ?, Y
    % y(:,t) - the observation at time t   ( k+ ?8 S- I+ [, H. X! g" y. S
    % A - the system matrix   
    * ^- }7 r$ @/ F. Y& H" A+ I( K& b% C - the observation matrix   
      x) s; E% N$ j0 T; z' I% Q - the system covariance   
    8 B2 l( |3 t' W# Z% R - the observation covariance   : x  u; i1 i5 x) j, {' A* }2 W
    % init_x - the initial state (column) vector   
    : n9 k: w/ J2 T! C: E! Y3 @, y0 P5 R% init_V - the initial state covariance   
      F/ m. a: c+ e: ^2 c! y%   
    * s; l9 A" J4 P* o, _4 {% OPTIONAL INPUTS (string/value pairs [default in brackets])   & T4 W" K6 Y7 Z5 S
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   ; U. g& q: H9 V* O$ U) y# V8 p
    % In this case, all the above matrices take an additional final dimension,   ; y3 Q0 a9 g( R, H% m
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   " P$ }. T6 A( M( ~0 u1 G
    % However, init_x and init_V are independent of model(1).   
    2 d) b$ `. g& h8 O% 'u' - u(:,t) the control signal at time t [ [] ]   
    ' S% {8 X8 f  c6 b. a, z% 'B' - B(:,:,m) the input regression matrix for model m     V! F2 E/ u4 J3 o
    %   0 L1 }4 [* ]3 @" E4 m9 t- F
    % OUTPUTS (where X is the hidden state being estimated)   
    + ]: [5 A# g* G/ Q* Z! r) H2 C% x(:,t) = E[X(:,t) | y(:,1:t)]   . [" r+ j4 H2 J9 o3 E
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   ; `5 l5 j4 t7 X6 t) g
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    & T) u# Z; {; r: S4 X% loglik = sum{t=1}^T log P(y(:,t))   
    , }+ Y$ y( |- o  |9 X%   
    0 F4 T! g4 m4 ~6 m( d& ?% If an input signal is specified, we also condition on it:   
    ) J! x. h$ z  `0 Z" P% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   0 `2 y9 [: I# \8 t. |% G
    % If a model sequence is specified, we also condition on it:   
    ! ?) ?5 }2 n+ U% |+ ?; Y% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    4 W8 U5 l1 f: P4 v[os T] = size(y);   
    5 n6 F' b* e7 |6 z& z0 y+ ]4 M$ Z! oss = size(A,1); % size of state space   5 }0 G' m9 i5 Q2 w0 F6 `
    % set default params   ; L! V/ w1 G8 _9 V
    model = ones(1,T);   0 {' ^, a. Z, B0 o( N
    u = [];   - L4 F7 F3 o4 }9 ]+ j
    B = [];   
    " N% ~5 J; B7 b' ]ndx = [];   + I2 i& _. T" j+ W' {
    args = varargin;   
    & U' z8 V2 b$ a; k$ u7 P- O* Gnargs = length(args);   
    8 w) P3 A7 y% X2 mfor i=1:2:nargs   7 |5 @, Q" \. c3 m/ y# x: j; ]
    switch args   # S' q; [- f5 p/ [9 k
    case 'model', model = args{i+1};   7 S/ L: _+ g% |3 P5 n
    case 'u', u = args{i+1};   
    4 J1 C' h# B0 j. j9 C3 ecase 'B', B = args{i+1};   6 u- z4 t' b4 }% B3 E$ z
    case 'ndx', ndx = args{i+1};   
    1 C* b, T5 x! w' L( t, ]/ `$ lotherwise, error(['unrecognized argument ' args])   6 e2 X( `# o3 p; o: }# o+ C; b
    end   
    , ?1 t  t( a1 N. t0 x9 v0 Y3 cend   
    & {. w! t% C; P" cx = zeros(ss, T);   
    3 {$ U3 q8 c! Q# M) T  T5 ~/ bV = zeros(ss, ss, T);   
    ) f. M! g2 `: c& K$ R+ @VV = zeros(ss, ss, T);   / O  o* _/ y$ }, ^% l3 {: F1 V+ L* H
    loglik = 0;   
    & U! Q% F9 }( ~1 Kfor t=1:T   m = model(t);   
    ( S8 i1 ]: `7 k+ E- U3 S& q4 Aif t==1   %prevx = init_x(:,m);   8 ?% R2 C- p- A4 o2 f
    %prevV = init_V(:,:,m);   ) A7 Y' Q5 \& L7 c2 V: r, b
    prevx = init_x;   
    5 x- K: P9 m) KprevV = init_V;   
    * n' U4 E, s# a, u/ Yinitial = 1;   
      A! r3 N7 o4 P3 i1 Yelse   prevx = x(:,t-1);   
    3 s' O! T* h- a" W1 Y$ XprevV = V(:,:,t-1);   
    * A: C5 c: n# }. rinitial = 0;   8 n2 N& c) \8 u6 o
    end   , f1 E; ^/ m9 p  J3 J" b7 V
    if isempty(u)   
    , U6 [  ~6 z8 y) H, [" R[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   * Y" T; X) `4 Y6 Y% @
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   9 q3 R) p: v( Q4 F# i: g* m) N
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    , w+ y* k7 v" ^& A* k: E* n     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   " ?9 Q1 A5 D2 K
    else   ( W' x7 a8 Q/ K6 U  ^+ M6 C
    i = ndx;   " F1 y' `$ o0 |5 y  F! c
    % copy over all elements; only some will get updated   x(:,t) = prevx;   
    ; g# N9 U3 P1 D# z+ v, N) bprevP = inv(prevV);   2 W! k2 u: e; k. W! Z! Y' c
    prevPsmall = prevP(i,i);   
    $ n; `! w: k8 {" b2 zprevVsmall = inv(prevPsmall);   
    1 F9 j7 y. T7 ^5 H% Z2 @" ^& K[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));   ) S, F3 C% W- A) \
    smallP = inv(smallV);   
    ) F  e5 g/ o' }& l3 M2 hprevP(i,i) = smallP;   
    ; j4 Y- K! K! R4 a  F! F  L) K( lV(:,:,t) = inv(prevP);   , U/ i+ J2 X7 b) A4 K* a+ {
    end   5 m8 W8 L% ]3 k! n
    end   
    $ T, _: o. _' d. ~  hloglik = loglik + LL;   
    3 t8 L) s5 g. V; m5 Cend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    & G) c; i# b1 w. c8 T+ hmatlab下面的kalman滤波程序
    3 B3 n  }% w/ r$ vclear  N=200; w(1)=0;   
    % L' `8 x# l0 v3 C$ k( bw=randn(1,N)

    % w3 y5 @  h6 I; G$ l; e. f  X强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-4-9 19:51 , Processed in 0.723321 second(s), 84 queries .

    回顶部