QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3778|回复: 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

    主题

    736

    听众

    2万

    积分

    数学中国总编辑

  • TA的每日心情

    2016-11-18 10:46
  • 签到天数: 206 天

    [LV.7]常住居民III

    超级版主

    社区QQ达人 邮箱绑定达人 元老勋章 发帖功臣 新人进步奖 原创写作奖 最具活力勋章 风雨历程奖

    群组2011年第一期数学建模

    群组第一期sas基础实训课堂

    群组第二届数模基础实训

    群组2012第二期MCM/ICM优秀

    群组MCM优秀论文解析专题

    matlab下面的kalman滤波程序
    , g. w/ [  n) ?" K7 W4 @, M0 \1 wclear  N=200; w(1)=0;   0 M/ h$ ^$ \+ L
    w=randn(1,N) 3 \1 Y- }% I2 A& m2 D* N
    x(1)=0;   
    % {9 b: J  U& Ca=1;   
    * Q/ l8 k" A& y8 ~2 n8 Jfor k=2:N;   7 I4 B* }; c, |- B
    x(k)=a*x(k-1)+w(k-1);   
    % W( }0 Z$ O6 p, Lend   
    % G2 h; |( L- S& U3 ?( c. kV=randn(1,N);   
    # G2 h! o+ L9 c7 X  y7 K" qq1=std(V);   
    " v3 E$ x6 w: I( [. T8 I' {+ p$ K7 oRvv=q1.^2;   ( d# x; s! w# h/ ~
    q2=std(x);   
    1 a8 o/ ]5 w9 Y# ~1 ^9 X6 A( eRxx=q2.^2;   - L, z3 q1 a8 h9 e
    q3=std(w);   
    " i8 T. n7 c2 T- c* URww=q3.^2;   
    / K6 q0 j) }' a+ F8 f9 f) Gc=0.2;   . W2 C; W' w2 c9 x3 g/ Y
    Y=c*x+V;   
    1 ?' o" C1 R+ F, T( R0 B" \p(1)=0;   
    / l  ^! z) P, ^4 h; ws(1)=0;
    & m  H$ J+ ]. v  w5 \% jfor t=2:N;   4 r' [9 w% F* y$ ?  o" o
    p1(t)=a.^2*p(t-1)+Rww;   
    2 p6 M% J- z2 J  r* G) jb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   - [2 e3 N: h& V2 F
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   / a0 [, w  `* |2 I! N- j3 w0 L
    p(t)=p1(t)-c*b(t)*p1(t);   
    3 H4 u. D% g* f& B- Zend   ' k, L! s$ E% p; L1 Z
    t=1:N;   9 R5 X8 _4 z( M* K4 o
    plot(t,s,'r',t,Y,'g',t,x,'b');   
    + ?. R' l( `+ }5 O( mfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   / u8 _8 H% V9 v
    % Kalman filter.   
    . s3 I5 L. k; O+ B) F% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   ( k2 i5 s! e2 f' D
    %   6 m& H& u+ y* K- C
    % INPUTS:   4 I( s2 y  [) F  Q! J; M
    % y(:,t) - the observation at time t   
    ( t% B& Q) v% R2 S9 {  ?* n% A - the system matrix   5 V* N8 T+ k. O/ X/ ]+ v9 {
    % C - the observation matrix   
    % H& J7 e* R( V9 B7 v" B% Q - the system covariance   , V( \( }* N& N4 ?! |* n/ ]6 f
    % R - the observation covariance   
    , W" |# i* |* i" p/ h% init_x - the initial state (column) vector   
    , Y$ p3 L2 v! o; a8 H) W# v2 ^% init_V - the initial state covariance   
    ; A& {1 m& L3 M%   
    ) g: c! Q$ f8 [* X6 Z4 p% OPTIONAL INPUTS (string/value pairs [default in brackets])   
    9 t8 o' Y5 G) d: x2 \- _" g% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   9 o) P  x3 Z/ b
    % In this case, all the above matrices take an additional final dimension,   
    / h, [2 A( X6 g6 {% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    $ }  j1 ~2 G$ O% M% However, init_x and init_V are independent of model(1).   : D0 {  L6 s- A" M; D9 W
    % 'u' - u(:,t) the control signal at time t [ [] ]   # p3 }7 s0 N5 M- }) D* `
    % 'B' - B(:,:,m) the input regression matrix for model m   
    : N; ]& u+ `- ^%   ( u5 B1 R; _  @: b( Z% v2 {3 h
    % OUTPUTS (where X is the hidden state being estimated)   
    . ^& \- |8 N5 K. `% x(:,t) = E[X(:,t) | y(:,1:t)]   ( ]) ~3 z5 v" v9 v- h
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   % k$ M/ |% }, d7 I+ m6 _
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    1 V. w2 I" K6 D) C8 H. Z% loglik = sum{t=1}^T log P(y(:,t))   # P) Z) {( a+ k" b6 c
    %   
    ; r* r- K/ h7 }2 }2 _5 ^8 \% If an input signal is specified, we also condition on it:   / K0 I$ j1 g% D4 |
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    3 W. K: d! M5 f: B; p3 K, L7 O$ B% If a model sequence is specified, we also condition on it:   
    , @8 K) H& C  N- ?9 K% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   6 E# N; w$ s% Y) L' {/ e7 l
    [os T] = size(y);   % y" }/ ~# \8 D2 Y% t2 H
    ss = size(A,1); % size of state space   
    1 c; [6 F* X: m  k# ]# X, u% P+ V% set default params   & M" S% M. j7 g* n; r. ]
    model = ones(1,T);   5 \# w. }# }8 G
    u = [];   
    5 Z7 x; f. }, k/ l9 U% O! P4 s) i# rB = [];   
    / l9 j& S4 A( C/ dndx = [];   
    & ~- e3 _  I; W' vargs = varargin;   
    " f2 x- |) E: a# mnargs = length(args);   ! H# l; t& y4 P8 n
    for i=1:2:nargs   
    % G- l: c9 {8 J5 C, mswitch args   
    4 y5 W: ^1 O: Q3 m+ m; ]case 'model', model = args{i+1};   
    * y. D! R* J. f5 R( Wcase 'u', u = args{i+1};   
    : h% H6 D2 D$ k. z3 vcase 'B', B = args{i+1};   ) O/ Q# z' z0 u7 z2 J' ~; M. g2 T" ^6 v
    case 'ndx', ndx = args{i+1};   1 k5 D5 u' H8 n( e# ~
    otherwise, error(['unrecognized argument ' args])   
    ' B/ K; z% a4 T  F+ D' d- Zend   7 v" u0 ~9 r  D5 B
    end   
    # F+ H: l$ D; g( ]- c1 mx = zeros(ss, T);   # A. C# a+ m& e
    V = zeros(ss, ss, T);   $ R8 b5 i# h) `: X9 c$ W" c' x
    VV = zeros(ss, ss, T);   # J9 D  ?4 D6 E7 C0 h
    loglik = 0;   ( u- }$ Z( k7 M3 w/ @
    for t=1:T   m = model(t);   
    6 a# v  w# x3 y, vif t==1   %prevx = init_x(:,m);   . K! ]" g# D2 s* ^3 i5 B
    %prevV = init_V(:,:,m);   $ b0 `2 j# F  B
    prevx = init_x;   ' i/ k& m/ {# D1 w5 D3 l& `' F
    prevV = init_V;   
    9 I7 Q4 |7 t# s4 W, M6 ?+ Kinitial = 1;   4 X8 S9 y' J. g! s6 ~: b
    else   prevx = x(:,t-1);   
    . K" b, ^* m5 p1 v( pprevV = V(:,:,t-1);   & x) f' p; [6 J
    initial = 0;   
    7 ?+ x# a& g1 _2 l: Kend   
    ; [0 w8 D) I: `# u+ g3 d1 Iif isempty(u)   ) f( ^7 \/ k: O4 }& f
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    $ I% V( q+ L5 f5 g" `: ?& kkalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else     W9 _6 {- i0 `* X: R
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    ( N2 x/ B! s) v+ o) d( Q' M     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    " d5 i" W( B% U  w8 c& D: A. Kelse   
    ( c; x. T4 x8 r6 S9 Y* d# C# ~i = ndx;   4 a+ h7 Z( X1 o! W+ @. T
    % copy over all elements; only some will get updated   x(:,t) = prevx;   + \* |' l; C; Q' y# z# f; c
    prevP = inv(prevV);   : }# }3 p9 a$ \" d4 }6 C
    prevPsmall = prevP(i,i);   * K+ p8 q5 f$ r2 b& Q- K  t
    prevVsmall = inv(prevPsmall);   7 [8 D( l2 I' G3 ^
    [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));   7 r3 k; H! X- H
    smallP = inv(smallV);   
    - \, e+ `* ], p+ F: J7 `. _  QprevP(i,i) = smallP;   
    & o, W' \% O; WV(:,:,t) = inv(prevP);   
    * n8 g! o8 H1 u; T' Hend   
    / n, u. o8 O2 p2 aend   8 r' Q: C8 p: @
    loglik = loglik + LL;   : j# a# q& m9 H4 R% b5 F
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 4 D# Q) i3 _; x7 S5 r& N- ?
    matlab下面的kalman滤波程序3 V4 M, z/ H9 ^# M& D6 g, i
    clear  N=200; w(1)=0;   2 T* w% t0 W$ ?* t( [& Y
    w=randn(1,N)

    7 h& }4 l# @$ U3 t- x9 l强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-4-29 05:31 , Processed in 0.467354 second(s), 83 queries .

    回顶部