QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4972|回复: 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滤波程序6 h# c+ j  f  h1 x6 `
    clear  N=200; w(1)=0;   ' L0 o% v- R5 J  A( ]
    w=randn(1,N) 5 q% q# d# t% b% e1 q/ {
    x(1)=0;   
    . X8 ]$ C1 [6 O7 O6 ka=1;   / j% H& e9 N: ?2 l6 p, ^
    for k=2:N;   
    * q4 _# F" K- E! M/ G0 j9 ]x(k)=a*x(k-1)+w(k-1);   ' R  E1 O! u7 v  }
    end   
    . u' C' N* J1 a* ^5 o8 h3 IV=randn(1,N);   
    ( q- F& X. j7 @$ O2 ^q1=std(V);   
    2 q8 e( u$ i, K/ r! L  P$ zRvv=q1.^2;   
    ! h. \% l- n* P. O8 Cq2=std(x);   
    + F7 U6 p1 y- r! G6 [/ l& eRxx=q2.^2;   
    8 L4 g2 S8 G2 S0 Xq3=std(w);   
    9 A- n: c  M8 c* `4 C; @) K7 L1 ?Rww=q3.^2;     G. ~4 }% X- y! d5 P
    c=0.2;   ) t5 y# c2 E2 x$ W' A# f
    Y=c*x+V;   # m+ l# g2 P, ~# j
    p(1)=0;   
    - f+ U6 \0 @3 Y4 E2 R! ns(1)=0;
    0 d8 V9 Q2 ?9 ]5 F+ g4 b0 Z3 ~for t=2:N;   
    1 b# z, ^9 u$ T( Np1(t)=a.^2*p(t-1)+Rww;   4 f, Z" O7 _7 G" a1 o/ e' n# P
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   ( b  O4 k4 v2 ]8 P
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));     J/ R/ l. r( ~  v& }, |
    p(t)=p1(t)-c*b(t)*p1(t);   
    7 I1 p6 J, R) ?  z, Q" U  Q3 `) iend   " p3 H0 i+ m6 a" U5 O$ U
    t=1:N;   
    9 M( g, v+ g1 L+ R3 Bplot(t,s,'r',t,Y,'g',t,x,'b');   6 Y/ V: g/ D) h6 W9 G6 ?
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    - m  D+ P6 n% ?) R% Kalman filter.   ) p, f1 r2 s% y# L% n8 J
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    4 x2 T: e% |5 [# k%   ) h# H$ T; I) D9 l$ M! H
    % INPUTS:   / r  H1 \9 y+ \. {8 }6 ]! t' k
    % y(:,t) - the observation at time t   
    4 M7 G* V( r# r2 c" j  |+ O) g% A - the system matrix   
    % q& b. d# M) K4 ]% d, Q+ ?, Z% C - the observation matrix   
    " a+ L: h# ?2 S4 v% Q - the system covariance   1 `) B" z6 X1 q2 F1 J% w7 x
    % R - the observation covariance   4 |. y9 K3 K! {% }4 @
    % init_x - the initial state (column) vector   
    , d) t1 i: I1 U. b# z" P( L' ?% init_V - the initial state covariance   & n* V* T3 Q/ e0 l& d  H
    %   ; B# {5 B) `( H6 J6 h2 M
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    7 T/ h4 K9 v9 P8 v% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    9 A8 P/ L# a0 m2 @% J1 ~3 a% In this case, all the above matrices take an additional final dimension,   
    ( M& S& Z) |' r- l# v3 S% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   $ _: h+ w7 W* m7 L% e
    % However, init_x and init_V are independent of model(1).   
    ; {1 y  ]0 s2 f$ U  Z. ~% 'u' - u(:,t) the control signal at time t [ [] ]   
    # q; M  [7 o0 R2 g: c% 'B' - B(:,:,m) the input regression matrix for model m   / a0 p4 W) J, ~$ {, v5 e! H
    %   
    8 E+ _( ^! T, k  m' d8 T% OUTPUTS (where X is the hidden state being estimated)   7 V6 u4 ]  s1 W5 m) {$ x& V
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
    3 f3 {7 l& b" B' Y+ {% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    2 Y4 ^- F# T3 A  c" A% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   1 t! y' s, k4 S% ~( `
    % loglik = sum{t=1}^T log P(y(:,t))   + g  _2 Z" ^, w& k9 w3 T3 L
    %   
    8 o" y+ U: z7 F- w% If an input signal is specified, we also condition on it:   
    4 |# l$ K. A# o3 E' n* f2 G8 L% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   2 a+ R% @9 Y) F2 u
    % If a model sequence is specified, we also condition on it:   - \4 [' G9 L% [( p$ P9 Q: v
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   1 b+ L+ J/ h- s4 j( k8 q( q
    [os T] = size(y);   * v7 O2 ]3 o$ c- o3 }/ K
    ss = size(A,1); % size of state space   0 }& R2 e4 Y# u% c0 ~
    % set default params   
    ) h9 k( C! p. @: M. j( }" j, hmodel = ones(1,T);   
    : a3 H# }- ]/ |6 z) d9 hu = [];   
    + v% t( ~: M% @& B. C4 y& jB = [];   " e" y; s% B/ Y. u, c8 ^- e
    ndx = [];   
    ( P( v( p3 k; ?  G; y" r- Cargs = varargin;   ( ^+ O3 d2 {$ d2 T
    nargs = length(args);   
    . O$ ~  A" Z" u) ]for i=1:2:nargs   
    4 w& }1 {' c, {  @0 p1 Mswitch args   
    ' k$ X' _9 W, o: T0 W; Vcase 'model', model = args{i+1};   7 S% v) ]5 N3 |- L: Q
    case 'u', u = args{i+1};   1 R; D/ Q. v" F5 e* n
    case 'B', B = args{i+1};   ; J/ @% T% }% V0 k0 C
    case 'ndx', ndx = args{i+1};   
    6 c' I9 B% ?. ?8 lotherwise, error(['unrecognized argument ' args])   ! s0 ?, N' P7 E8 i! S% ?
    end   
    . j7 j8 e2 p! z$ Eend   
    8 [: x" W* [1 zx = zeros(ss, T);   
    # q/ u# V5 `% w" PV = zeros(ss, ss, T);   & R4 B" [2 Q/ r& k( j( c) C
    VV = zeros(ss, ss, T);   
    + Q6 x+ R8 m  `7 n( k4 Ologlik = 0;   
    9 D4 Z+ P$ ?7 n# b0 A3 R2 S% i7 h/ Efor t=1:T   m = model(t);   - `; C  i3 y8 S
    if t==1   %prevx = init_x(:,m);   " C+ v2 }6 B7 n% |) Y
    %prevV = init_V(:,:,m);   
    5 L3 O. T) T3 Vprevx = init_x;   8 e$ H5 V) w* o8 y% y
    prevV = init_V;   - H, Q) \$ v- e& w" m+ L. j7 o
    initial = 1;   
    ! P# ^+ ?6 C% ^, o  b& R! A( Zelse   prevx = x(:,t-1);   
    9 `7 O# Y" s) I; F' x* d. {prevV = V(:,:,t-1);   & P8 {4 V+ z8 u7 |! k. v1 |: K
    initial = 0;   9 f3 O! s; w$ f8 u# d
    end   2 L! b* B& z5 f% e# b6 Z* L
    if isempty(u)   
    % {/ ]6 l% G8 y: e; a+ s" Y[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   " ~" D8 |) l/ R* f2 m: K" I+ ~3 Y8 Q
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    ! V& ]2 j$ @  O  p' P8 v  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
      I8 D0 q( L* f     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    , E: `' ~5 |* X# P3 `else   
    ( _9 {3 ^" q* k- W" \' li = ndx;   
      i3 `, }5 M8 c: n+ x8 x% copy over all elements; only some will get updated   x(:,t) = prevx;   
    ) q6 N, K9 m, P5 E2 h0 ]$ fprevP = inv(prevV);   0 H- ^+ z$ l" \  q+ ~7 ?
    prevPsmall = prevP(i,i);   / ]- n" f. o  y' a% G1 v2 b, h
    prevVsmall = inv(prevPsmall);   1 t2 m5 a6 {3 i7 S. p8 y# \" d
    [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));   , U, \0 G0 f  ?2 ]" q& h4 Z
    smallP = inv(smallV);   
    . ?- S- X8 @7 G  tprevP(i,i) = smallP;   
    2 x, N6 O5 }; ^- ]2 fV(:,:,t) = inv(prevP);   
    " A! i% t, k$ X6 d7 L9 u; _end   
    % ~9 F( M3 j0 ~# B3 [6 |end   " G, i: r7 t8 k& m7 J8 n7 H
    loglik = loglik + LL;   
    0 v  f( x( J. k( J, E/ ]- S( Fend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    / p- N% R2 W4 Nmatlab下面的kalman滤波程序
    # G+ U$ B% \* @  \; r' W; u- zclear  N=200; w(1)=0;   : n# e# E2 p7 F$ k; J2 D9 z
    w=randn(1,N)

    - Z3 |5 o2 @  r, U强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-6-14 04:15 , Processed in 0.343847 second(s), 84 queries .

    回顶部