QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4967|回复: 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滤波程序
    0 s; P- `7 y& c  eclear  N=200; w(1)=0;   % m. [3 v2 j+ l1 |3 l) A; s
    w=randn(1,N) 5 b$ c+ v3 X% `/ n  }
    x(1)=0;   
    ( H6 o3 v" ~* L: n  l- l1 K5 @a=1;   
    ( {% A4 A) K1 L3 w4 g0 ^+ i" bfor k=2:N;   
    5 h1 k* n1 A' [' ax(k)=a*x(k-1)+w(k-1);   . P, t& |5 ~( ?) y$ b% }
    end   
    - r( W/ ^- B$ W8 S7 ^V=randn(1,N);   
    ) f8 h. ?! a* lq1=std(V);   " B4 q9 b( r3 `  N  W. W) L
    Rvv=q1.^2;   ) b9 M) q" L; c- K$ z$ R  M1 K
    q2=std(x);   
    - ~! n& P" S' ]+ D6 {1 kRxx=q2.^2;   4 m) z' H0 B9 y# F; Y# w
    q3=std(w);   
    2 O& P4 \" I4 GRww=q3.^2;   7 S5 W3 l: r1 W$ ]# Y; G
    c=0.2;   
    # ]! e$ G" q# l0 A0 `Y=c*x+V;   + R# W+ Q" M% n& D5 t
    p(1)=0;   
    , X8 {0 ]3 b& Y& e9 C. Es(1)=0;
    , W0 V6 Q, v7 p8 Ufor t=2:N;   * n( E+ p' L7 ~. l% Z
    p1(t)=a.^2*p(t-1)+Rww;   " j4 N8 S# y' {9 \9 _; R! S) A: U3 q
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   6 p/ c: C5 Y8 l
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    1 d5 i: D3 Z+ ]+ k! b+ V  S1 Pp(t)=p1(t)-c*b(t)*p1(t);   ! y# B' |$ t9 {4 i8 h' Y( ?
    end   : n4 K0 H. ~4 b2 c' ^% g
    t=1:N;   $ ~; q" K  n0 |
    plot(t,s,'r',t,Y,'g',t,x,'b');   
    - d& K0 B& Y8 C/ Efunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    4 q4 A# ^3 G( W0 Z% Kalman filter.   - I9 p% Y. L6 }- S0 e7 R5 q
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   0 D2 ^% x# E% X" y4 t& }8 [
    %   1 [" e# c4 e3 K; g* S3 [
    % INPUTS:     k# Y5 @$ W1 \, u
    % y(:,t) - the observation at time t   
    + o' \, G& e1 a# ~# V% t% A - the system matrix   
    6 Q1 i2 O6 k3 m& X% C - the observation matrix   
    , e  L/ E& C; H' P0 h3 F/ r% Q - the system covariance   
    9 s5 [9 X- o0 y* N7 k; U  I% R - the observation covariance   
    1 b: b: L5 n% ^. m8 a. E% init_x - the initial state (column) vector   
    : U; R6 O  {& Y; o# [6 z8 }% init_V - the initial state covariance   
    ( h3 z& D* D" Z( z2 d%   
    6 J% S8 C) D# i; w3 n  l3 [% OPTIONAL INPUTS (string/value pairs [default in brackets])   
    6 ~! o% f" v& F, R7 N% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   9 x  j7 {7 c/ F9 }
    % In this case, all the above matrices take an additional final dimension,   
    4 V: b% j5 n' ?% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   * ?, h1 O: o; k- B, B) y+ p% u9 |
    % However, init_x and init_V are independent of model(1).   " _4 k! @( W- i
    % 'u' - u(:,t) the control signal at time t [ [] ]   4 A) ]$ h( D+ a* u% n1 l
    % 'B' - B(:,:,m) the input regression matrix for model m   
    ) p% n4 @5 S% b0 G% c9 c7 r2 l, I( p%   
    ! Z5 L$ Z" U: O$ X4 g& @) E; ]% OUTPUTS (where X is the hidden state being estimated)   
    2 ]8 a9 n/ b4 i" M1 q% x(:,t) = E[X(:,t) | y(:,1:t)]   + D* s  D9 d8 ?3 W' w% y! [8 E
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   / X6 ^2 Z+ \4 j7 g5 ]
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   + Y5 P# w5 o8 S3 u+ a
    % loglik = sum{t=1}^T log P(y(:,t))   
    7 F* C8 z% m) T%   3 g, `# [6 a0 `- ]1 ~
    % If an input signal is specified, we also condition on it:   / d& [4 t5 O6 A# d
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    9 P# U; Y; G9 D! Z  N; i8 J' F% If a model sequence is specified, we also condition on it:   ( `0 G+ n: F8 j, m
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    2 y  @  d' G$ O" w[os T] = size(y);   " I+ L0 V  I1 F
    ss = size(A,1); % size of state space   
    $ S/ H9 V0 l( \$ V% set default params   * T, x4 {/ [1 J
    model = ones(1,T);   $ i1 c: t3 i! B. `1 C: L- H% d
    u = [];   " F- Y2 b. p5 y1 i) v
    B = [];     K, C9 F( ]6 ~& u
    ndx = [];   . |. X' D2 U6 l5 D/ J9 D" _9 y
    args = varargin;   ' N2 z5 y  X" ~. k, C
    nargs = length(args);   * t  e& j, s: z: `- b
    for i=1:2:nargs   % V( V) S0 }  t4 ]) d4 D) P
    switch args   
    2 p3 Q8 j) B8 scase 'model', model = args{i+1};   & d/ a/ Z' _3 d- v- q8 A% I
    case 'u', u = args{i+1};   
    2 |+ |% E8 u, l2 B2 X1 xcase 'B', B = args{i+1};   
    ) Q5 U: C2 D5 g  j3 K# h- X4 qcase 'ndx', ndx = args{i+1};     ^( C1 F  K' V" c0 O. @  k6 [6 o
    otherwise, error(['unrecognized argument ' args])   + M5 p: h4 `$ x! G( F
    end   
    ! x1 \  M9 m: Y8 {( ~end   4 w* k* Z7 t9 ?$ X7 ~. v2 h
    x = zeros(ss, T);   
    : t( J; ?" B2 W* Y0 vV = zeros(ss, ss, T);   
    $ |! G1 J5 w! N: h, L  NVV = zeros(ss, ss, T);   
    2 n6 g* n8 t/ O5 I1 G( |loglik = 0;   3 N9 |0 q0 f: z! c
    for t=1:T   m = model(t);   8 }) E+ p! c/ R; q
    if t==1   %prevx = init_x(:,m);   
    , }; A( o- @8 j2 z+ v5 o8 n%prevV = init_V(:,:,m);   
    ) W. a( L+ S# K9 ^8 a6 C7 Xprevx = init_x;   
    3 ~- Q& n  {8 a& y5 z( HprevV = init_V;   
    2 |+ ^* c) n& Rinitial = 1;   
    6 e6 l  \' g# B# L4 b! [# qelse   prevx = x(:,t-1);   
    9 o4 O+ B/ R# S( NprevV = V(:,:,t-1);   
    5 ^; B  ^; r; jinitial = 0;   
    & ?1 y8 K* s. m# ?end   
    - t2 D2 @+ K2 X/ q4 Uif isempty(u)   
    # y4 N9 M, n6 U$ K[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   2 f4 G8 J' s5 A. c) b7 Z
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   1 S* m9 F0 b: e7 O( e5 f7 F. i
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   $ K% R7 k0 t6 I7 J7 i. c
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    , r7 D" c4 R  t" j) nelse   
    9 t( x2 O+ W9 }0 L7 i. R# ki = ndx;   
    ' X, U, r8 V* l+ S" g% copy over all elements; only some will get updated   x(:,t) = prevx;   - Z, G7 s" F+ w  j- T
    prevP = inv(prevV);   $ h/ A* V' d! T1 D' ^5 j' S
    prevPsmall = prevP(i,i);   
    0 k* _* X: @% v9 l( t; A/ P" hprevVsmall = inv(prevPsmall);   
    5 A1 E! b' e. j& q! O8 Q7 K$ j4 z[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));   ' Z+ ^3 Q+ r& g0 |' ~
    smallP = inv(smallV);     ^1 W* S( l/ c
    prevP(i,i) = smallP;   . J# P8 s! U9 {$ J. E% u
    V(:,:,t) = inv(prevP);   * F2 Y% V. J; ?" U8 f
    end   / O' ^& x2 A: B0 Z6 @
    end   3 r5 ^; n  b4 B6 ?4 [" I
    loglik = loglik + LL;   4 _! U& N' f8 x( ?3 D2 M' y
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 & T6 p" h1 A* x! Q, n6 [- V
    matlab下面的kalman滤波程序
    % h6 \+ r1 W% m3 u2 f% X- q4 b4 Iclear  N=200; w(1)=0;   
    6 |# X" n2 x/ J  E. C9 n( C* Q+ vw=randn(1,N)
    ( b9 R; j! Z$ K2 o' Y- v8 t: B
    强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-11 08:49 , Processed in 0.480251 second(s), 84 queries .

    回顶部