QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4612|回复: 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滤波程序
    - h3 [$ k* `( u! m+ m) x3 Wclear  N=200; w(1)=0;   
    + ~) n$ |9 }( _# A; O8 q+ b6 sw=randn(1,N)
    8 H" s6 P" Q' C+ Yx(1)=0;   
    3 w3 s  e7 v; c/ va=1;   ' x, e  m8 J1 S& K6 Z; w
    for k=2:N;   ; v6 g/ o. ^& t6 l6 q' }
    x(k)=a*x(k-1)+w(k-1);   5 i# _$ k7 \( z3 Z' R
    end   . w: K( W. d8 F; \: k
    V=randn(1,N);   : W. J9 A4 ~6 v. L$ k
    q1=std(V);   ) c. s9 E7 \8 W" k
    Rvv=q1.^2;   8 b6 E, U" i0 p5 T7 c/ u
    q2=std(x);   
    ' P: q& O- H: {- x7 ZRxx=q2.^2;   ! Z# _+ F" |  }! i" w0 X
    q3=std(w);   ' ~5 |! e5 _, e% J* H
    Rww=q3.^2;   + e7 Z7 I- n- o
    c=0.2;   1 _! B; W$ Q/ @% e4 a. _
    Y=c*x+V;   . K8 l' d( ]+ Z# _5 l9 c8 N
    p(1)=0;   0 w4 K5 M" T+ X" h! O
    s(1)=0;& m, A" Z2 L9 x6 M$ j, \9 O% \
    for t=2:N;   7 }* u7 Z8 ~1 Y1 j# e8 j
    p1(t)=a.^2*p(t-1)+Rww;   3 q  [; y) W6 C" b
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    3 [$ f' e. M1 l! [s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   3 |- e$ \* v6 H. Z- x/ {0 b
    p(t)=p1(t)-c*b(t)*p1(t);   - M% c( [1 x+ ~( {  v( S7 T
    end   
    / Y( k1 x+ `  U1 n2 {9 gt=1:N;   , n  @7 I8 \' E! S& E
    plot(t,s,'r',t,Y,'g',t,x,'b');   
    # w% I" A0 i1 H( ]8 tfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   2 {4 l! \$ c2 }% d: E) _0 e
    % Kalman filter.   / ^1 q; G) j8 n" i, t( Q; F
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
      e9 y0 \1 U7 ~% g$ j8 x- p+ ~5 Q%   , N2 m% b# c+ O: Z% ^, O
    % INPUTS:   , ~5 T7 u$ o; w7 Y5 h5 a# y) ^% y; M8 b
    % y(:,t) - the observation at time t   & E, {$ c1 n0 u% Z- M
    % A - the system matrix   
    ( g3 [% a) o9 Q% C - the observation matrix   3 |6 n0 m# P3 h9 b4 @% c& I' i% s
    % Q - the system covariance   
    % R, S! R  X8 |, j% R - the observation covariance   
    / J' i7 |9 W: c. h5 `% init_x - the initial state (column) vector   
    ! c- Z9 V# a0 T. ?* S% init_V - the initial state covariance   3 u$ _+ G) }. s) g0 C
    %   $ v( a2 r- t4 A  p. z* I1 I/ C' X
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    9 v! Z$ ~2 G8 S& b0 s7 W$ X$ R8 j% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    % m: @; d1 [  I& c% In this case, all the above matrices take an additional final dimension,   ' e- U6 |/ V7 a% u5 L# I3 G; V
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    3 Q5 O' c/ _8 u4 [9 X+ D% However, init_x and init_V are independent of model(1).   3 o* Q3 G. \- `; [0 s
    % 'u' - u(:,t) the control signal at time t [ [] ]   1 C& S( q' \/ r/ m8 l+ W. E. [
    % 'B' - B(:,:,m) the input regression matrix for model m   
    7 \* Y% ]1 o: j+ D%   * [- g: f% i: A2 S: `
    % OUTPUTS (where X is the hidden state being estimated)   8 [% d: D6 l4 x4 F
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
    2 E/ l3 ~$ @$ P8 L% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    . s! E& ~0 d! j5 v% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    & i) I- e9 N+ ?( ^+ S% V7 U/ X/ r% loglik = sum{t=1}^T log P(y(:,t))   
    * Y0 ?4 M! p; O/ x! P% U%   
    - S, R% k( ]6 @) e0 f% If an input signal is specified, we also condition on it:   + q& |9 o3 R: f
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   ) |5 p9 a, {9 b( @
    % If a model sequence is specified, we also condition on it:   
    / W$ i6 h& s) m* H2 ~% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    & u0 K+ P: N) M, h" {3 c[os T] = size(y);   
    9 b% r, b. ^4 ?" nss = size(A,1); % size of state space   - f3 s3 r& W$ {: n
    % set default params   5 R$ i/ f7 |) W2 v; J( G
    model = ones(1,T);   
    / D, J* h$ `, J7 \) ju = [];   
    0 z/ b6 p0 c! @3 ^, tB = [];   7 m; ^* t- n% q: O1 I
    ndx = [];   
    " [2 ]! w7 _. {3 s" jargs = varargin;   4 d" ]: h; ]- ]9 n' l& m' V
    nargs = length(args);   4 |3 c4 Q! _$ Z* ]0 }; q
    for i=1:2:nargs   # |( v. c1 w% W2 n, e6 M2 N
    switch args   
    6 c  q9 `  w. l! ^case 'model', model = args{i+1};   
    $ U0 p  r$ _7 j/ \* Z% C1 m2 Lcase 'u', u = args{i+1};   6 |! l. g, h/ R9 F
    case 'B', B = args{i+1};   # _; s: A& L8 l; \, |
    case 'ndx', ndx = args{i+1};   
    8 S# ]+ S6 `. P4 i7 jotherwise, error(['unrecognized argument ' args])   1 B" q  D  v; M% p- i9 h  h" o/ F
    end   
    - ]/ w9 F2 g$ b1 A2 K5 g/ X) lend   
    # @" _; [2 Y, N+ e0 Hx = zeros(ss, T);   : p0 p* s; Z+ O/ B  |
    V = zeros(ss, ss, T);   
    , B: W( B) `4 m' C  }VV = zeros(ss, ss, T);   
      i" d; {3 O* Q; lloglik = 0;   
    0 b* B  [' z. tfor t=1:T   m = model(t);   , |/ j$ w" Y) ]5 i- Q
    if t==1   %prevx = init_x(:,m);   0 c, A: j; H9 Z# u# c# f4 `
    %prevV = init_V(:,:,m);   
      `" s4 f9 v& m. `  J0 S( w; lprevx = init_x;     q! c5 K$ Y6 b* X, `; n; `
    prevV = init_V;   ; s* o, Y' r2 b
    initial = 1;   
    ' v8 D+ |8 E8 t# G( z, T% L) L! @else   prevx = x(:,t-1);   
    0 y* V! l7 @- w; T) aprevV = V(:,:,t-1);   
    # [( l: H4 S/ g% G2 p4 pinitial = 0;   
      V) t1 M" l* `$ v& I- Mend   
    3 e/ c9 l1 k6 P: m0 S. u& Lif isempty(u)   ' q+ x) b* n3 s' h4 Q" r
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...     N$ Y+ U5 c# t
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    / U# L" T  ?6 D. h* D/ @  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    & z6 h( w% S" P     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   + x2 f3 G6 U( o$ v. N/ \& t' J9 W
    else   ; m; r! a; T6 Z1 u# j' w. K8 ^
    i = ndx;   " i5 O9 Z. x; U1 y
    % copy over all elements; only some will get updated   x(:,t) = prevx;   / W4 T- `* V' P8 g
    prevP = inv(prevV);   
    4 Z( ]' r& M5 a$ Y! m4 t3 oprevPsmall = prevP(i,i);   
    6 v+ E, x; V+ s( r, s% P6 fprevVsmall = inv(prevPsmall);   
    ( u7 S+ O8 n, E  R7 }3 _2 g) x[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));   
    8 f  Y" q+ @9 D' `6 AsmallP = inv(smallV);   
    + F! I; L& W! T% D2 v  P9 XprevP(i,i) = smallP;   
    . @6 I2 N8 |) x' M. fV(:,:,t) = inv(prevP);   
    + Q" u* e- Y! `7 Lend   
    5 o9 V4 z5 x$ O& w% xend   1 j3 \) z3 v. A7 P( p$ C% q
    loglik = loglik + LL;   
    : [4 j0 x8 Z$ e+ `$ |end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 ) v* Z  [& Z& ^
    matlab下面的kalman滤波程序  O: `& @1 B9 Y0 D3 U
    clear  N=200; w(1)=0;   
    : k% U! F6 k0 l  \w=randn(1,N)

    1 U5 B0 d( }: q4 f" p  T强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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, 2025-7-23 21:49 , Processed in 0.616623 second(s), 83 queries .

    回顶部