QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3859|回复: 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滤波程序( Q% [* E" }1 h9 P, C
    clear  N=200; w(1)=0;   
    + X. s$ J$ Y2 x8 `; Qw=randn(1,N)
    % p0 [9 o6 ]" \5 M7 I, bx(1)=0;   8 t: p2 F7 |6 B4 X
    a=1;   
    " `2 {$ m8 q) t: z. |for k=2:N;   
    1 j2 N  G2 W6 {* ]* fx(k)=a*x(k-1)+w(k-1);   ! T; a/ D: i; O5 K+ W& ]/ l
    end   ' d5 D6 D" B6 ^& V6 q7 P
    V=randn(1,N);   
    , X/ T$ `4 ~+ F0 i& Yq1=std(V);   4 Q* Z& B4 [6 p* ]
    Rvv=q1.^2;   
    2 z0 b7 q2 U0 Z: p3 ~0 Fq2=std(x);   ' @  v, m( r/ T0 G7 l! N
    Rxx=q2.^2;   4 o% A0 P! n) D+ g- X! X
    q3=std(w);   
    + \! U; t5 C; E, z* dRww=q3.^2;   6 d0 `7 }! {; s0 O, R- H
    c=0.2;   
    % |0 O' ^; N; N+ jY=c*x+V;   
    : Z! k/ ]" S( a8 t' y3 g$ v! N; wp(1)=0;   
    / ]) Z8 y2 l9 I  @! [& }$ R. j9 {s(1)=0;) C+ y! c. V# }
    for t=2:N;   * u; A6 T7 Y! z! K
    p1(t)=a.^2*p(t-1)+Rww;   ' T* W' E3 o0 x8 S" k- `1 p
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   . T$ m1 a$ [9 Q6 _( |2 |$ c; b! @
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    7 p5 Y+ z7 q8 `p(t)=p1(t)-c*b(t)*p1(t);   
    & M3 [, k7 Y$ b- S- a$ Kend   8 \( _( T8 L9 D8 z( J1 f: b
    t=1:N;     |; H6 D0 V8 F+ L8 H
    plot(t,s,'r',t,Y,'g',t,x,'b');   
    4 G+ R! I3 c4 e( U& }0 Cfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   ) X$ J' M" @) S- t  a# C4 m% U& V
    % Kalman filter.   2 g/ U" r7 ?) A; E
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    ; z! e) a( n0 z& w; a5 U- {%   ) L4 O' h9 H, H9 V
    % INPUTS:   
    # B$ ]! m0 \" r: w& {' Q6 X# ?% y(:,t) - the observation at time t   ; u7 P( l! ~& @; f  F% g
    % A - the system matrix   
    1 c& Y! N2 F% a$ L4 _* z% C - the observation matrix   9 l' |1 h! a4 N, t  `& U
    % Q - the system covariance   * u) W: Z) y5 T/ ~
    % R - the observation covariance   
    4 a8 U) z4 _4 s! N" I. L$ l- k% init_x - the initial state (column) vector   & y  F/ ^7 ]) v9 B8 f
    % init_V - the initial state covariance   
    # ^3 w) V/ I& ^& `6 f- a; T9 @%   ( I6 X# R7 f$ B# q! O
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    - Z( U. v3 @9 [  B0 M! H$ x8 b% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    0 W* ^/ N& @, U  z1 D- u' b% q% In this case, all the above matrices take an additional final dimension,   
      E$ R# C" W& }( {% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    - M) h$ Q+ d. j5 ^& X$ Z: m  |2 J% However, init_x and init_V are independent of model(1).   
    " V/ l9 `- Q; O. S# \" g+ J% 'u' - u(:,t) the control signal at time t [ [] ]   + l. |& Z$ L- P& T+ i: ~
    % 'B' - B(:,:,m) the input regression matrix for model m   / J! W/ p5 o" @  ~9 L4 Z. |! k
    %   
    7 E" s& D- Q0 q) f# Y4 W2 `/ M! h% OUTPUTS (where X is the hidden state being estimated)   4 L7 z. y8 w+ l- e
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
    $ R9 J) t3 M9 y* h9 z7 K2 E3 h% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   ; O7 Y1 C. X3 K0 K6 c2 V3 m
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    ( o1 U5 V1 ~" ?0 D8 y# ?7 q; e+ y) t+ I% loglik = sum{t=1}^T log P(y(:,t))   
    / G$ z, w- Y8 G1 H; l" c. Z%     H; Q+ M! A8 K! o9 e
    % If an input signal is specified, we also condition on it:   - g* g0 m' m4 b4 A3 v7 f+ d8 H
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    # a# _: {% w- @# N" R% If a model sequence is specified, we also condition on it:   $ ]: y& z6 H$ g- z. a: g! q+ @7 d
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    2 ?& i  v* v: u# u7 P. k[os T] = size(y);   & L, j/ a* J" Q* b8 }- @# |
    ss = size(A,1); % size of state space   
    ( o* @. ^0 x6 b% set default params   ) I, P" p) Y3 U2 u
    model = ones(1,T);   
    - n9 e, l7 X/ ~' L9 `7 ]u = [];   
    ; x. B% t7 H0 j: P5 T' L2 A7 _5 hB = [];   ( W9 \- Q1 ]: F
    ndx = [];   % n0 G/ E7 V; I1 ?
    args = varargin;   
    ( @4 y/ N. A0 k! j, unargs = length(args);   * Q3 R; @3 S- p0 U  D
    for i=1:2:nargs   $ ^& Z( \  K  J3 U; X  @
    switch args   ! z' ]1 @% F+ z3 Z9 p
    case 'model', model = args{i+1};   8 [8 y$ O( ]' C
    case 'u', u = args{i+1};   8 c* v0 u3 r# z) |6 e1 S1 s
    case 'B', B = args{i+1};   ! p) T. g8 w# U) h# D& L
    case 'ndx', ndx = args{i+1};   
    ! n5 w, y/ Q$ G' G  Eotherwise, error(['unrecognized argument ' args])   ) D% V" O6 R' v3 w
    end   4 s! G9 \# @# a' j* F, o
    end   
    : g% f! D% S2 `/ j/ j0 R* qx = zeros(ss, T);   
    # I5 e/ }5 ]8 ~' g% F" nV = zeros(ss, ss, T);   + l0 k- Q1 N! {2 I6 U" M* }, S
    VV = zeros(ss, ss, T);   
    ' d; O1 C  m! D/ {. u' wloglik = 0;   - {  {( e) u+ U3 s! x
    for t=1:T   m = model(t);   
      z/ |1 }' O/ R3 b+ ^' _' A6 @if t==1   %prevx = init_x(:,m);   
    5 N- V" W" H9 [% }! _6 q6 C%prevV = init_V(:,:,m);   2 U# S) w( R- }- W
    prevx = init_x;   
    * o$ D# j2 ]. E5 PprevV = init_V;   
    2 u9 N# C1 O; @* ?initial = 1;   . J3 r0 P5 O7 s# m+ J% B' a6 v
    else   prevx = x(:,t-1);   
    - o( ~. k5 T  }+ y7 y/ V* `, rprevV = V(:,:,t-1);   $ E5 @5 N. Z5 I
    initial = 0;   
    7 d0 C, w+ I5 X& S4 B6 [end   % G2 [: N( S4 d" |3 R# T9 g
    if isempty(u)   7 k- s8 ?3 e, |: K% \+ O
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    * y% _. F9 J9 Nkalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    9 O% K; B1 M4 \! O) z8 O( N" H4 i" ]  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   . V2 M; b  X; W; h0 X
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   ) `: v9 P6 e1 h0 g8 a7 g
    else   
      r7 _* ~7 r- m, }9 g2 ni = ndx;   . u+ p3 n9 W5 x- g4 X( M
    % copy over all elements; only some will get updated   x(:,t) = prevx;   
    / o# B% z; O! t& K3 ]3 k! gprevP = inv(prevV);   3 o- Q/ I# N  I- a+ Z. {
    prevPsmall = prevP(i,i);   2 `" Q0 u# o, P
    prevVsmall = inv(prevPsmall);   " I8 E# F  G+ ~
    [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));   
    1 G4 b" ?( }* @* a0 csmallP = inv(smallV);   
    - v3 E" h% _2 Z# g6 n( a% C6 n) lprevP(i,i) = smallP;   9 S$ i/ T+ s+ G/ O4 [4 L% i
    V(:,:,t) = inv(prevP);     V' n! g, N! T1 `4 m/ G1 ?
    end   2 Q* ]7 q1 Q# F! r6 A9 t  H
    end   
    & i& v1 }7 Q) z: Y/ ~loglik = loglik + LL;   
    , d+ U, g) |  X! {( pend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 ( ~5 ?# p, [) Z
    matlab下面的kalman滤波程序
    % C0 Y; ]* m5 K5 bclear  N=200; w(1)=0;   
    8 c+ v( Q& v1 E6 _; h5 Mw=randn(1,N)

    ) z: @. h* n7 R2 R! F: `强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-29 07:02 , Processed in 0.647666 second(s), 83 queries .

    回顶部