QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5070|回复: 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 i' _8 V. `& S$ k2 ?
    clear  N=200; w(1)=0;     W7 t) G9 Q; r' D' p
    w=randn(1,N) 2 _: g0 o% h9 w% ]6 \1 W& Y
    x(1)=0;   $ L4 S6 n6 s0 X7 P; V3 P- m9 O
    a=1;   
    4 Q! Q0 x! P5 }& ~for k=2:N;   
    9 k' `! M1 t- R" r9 A$ o. z* W: Tx(k)=a*x(k-1)+w(k-1);   " {* N  i$ J# k* a8 P% Z
    end   5 P9 I! }% Z6 p0 m+ u5 G3 b. u9 I/ n
    V=randn(1,N);   # {7 Q9 d3 J4 X! M+ A7 o& `
    q1=std(V);   
    ' s; H. F7 u  [4 E! ^6 w( p8 vRvv=q1.^2;   " B) M) r4 i- r+ k' T6 U
    q2=std(x);   
    3 E0 s3 E$ m$ a  S6 ]) N& wRxx=q2.^2;   6 i! _+ d6 _7 B! S, d! n) |
    q3=std(w);   # ?& _6 z1 m, J& y% h
    Rww=q3.^2;   
    $ V& A. N& K% b5 U* p) U1 Kc=0.2;   
    " d) i5 ?" X7 ~3 l* @: hY=c*x+V;   
    8 p2 n6 H7 [" i) o) Z: vp(1)=0;   
    1 C  }. \4 n, D6 I# i1 Xs(1)=0;
    # X: ~, _% J/ d! |9 W" T0 Pfor t=2:N;   2 P: A5 y: h5 g8 a* j! L4 L+ }/ ]
    p1(t)=a.^2*p(t-1)+Rww;   
    9 Y$ u6 a$ {" p- Mb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   ' g5 L( Z! A& F# x
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    : G7 `; [" T# `8 }' v3 Yp(t)=p1(t)-c*b(t)*p1(t);   
    * {% m+ {2 {& K2 C) p3 c0 b% eend   
    % A6 I( I! h+ h. Vt=1:N;   % f7 l7 ?0 [; t8 |9 u% T
    plot(t,s,'r',t,Y,'g',t,x,'b');   $ |0 ^. r& ~& D0 ]3 y& a
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   1 _' c) s  c, u/ G; L; z8 C3 H
    % Kalman filter.   4 N# N: |! c5 a: f; g3 `7 E+ F, k
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    ! c# Y& }0 L/ a%   
    4 a" x$ t. [! ~1 t+ I% INPUTS:   * i3 m4 [0 k2 T& S; }% w
    % y(:,t) - the observation at time t   
    9 J: p* K! O  r- ~% A - the system matrix   / k6 J6 j1 c% K/ Y& a) i
    % C - the observation matrix   6 R! b1 Q) i2 K' G; ^  o" k6 |
    % Q - the system covariance   ) h( v6 Q! L5 N1 {  B
    % R - the observation covariance   & V* p, [7 f" h: @2 l, g
    % init_x - the initial state (column) vector   
    % t9 _* t" C( @% init_V - the initial state covariance   " |$ d7 `2 z! X) q7 k, c
    %   
    8 Z9 X9 C4 ?2 a% OPTIONAL INPUTS (string/value pairs [default in brackets])   
    7 p/ V6 r' }3 |) Y$ Y% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   ' F8 }2 e- A. I+ J, n0 H
    % In this case, all the above matrices take an additional final dimension,   4 D9 Z7 O1 I* s" `
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   + o- R7 j. O: }0 M. {; i
    % However, init_x and init_V are independent of model(1).   
    ( l9 o1 q! N$ v& Q% 'u' - u(:,t) the control signal at time t [ [] ]   
    ; M2 r' n; R2 F/ {/ X% 'B' - B(:,:,m) the input regression matrix for model m   
    + B5 Y" h& F1 R  R( e% i%   
    ' O, d6 L% b+ V% |" T5 X% OUTPUTS (where X is the hidden state being estimated)   $ X$ _' ~9 H9 R3 N5 ^4 J
    % x(:,t) = E[X(:,t) | y(:,1:t)]   ; C! [; [! d6 S* T' u% F
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    / F4 h1 k" {; w' i9 G* X( E% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    . @$ n2 j* `2 W; n% loglik = sum{t=1}^T log P(y(:,t))   
    ( I) Y1 y6 g. n%   
    0 `' P6 {0 W, m  h% If an input signal is specified, we also condition on it:   
    ) w+ V- V) v! {% `1 N% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   , f% I$ {9 l5 Y( ~
    % If a model sequence is specified, we also condition on it:   
    8 q: J3 L" T9 |% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    & X4 {. g: `( R8 E/ o+ `[os T] = size(y);   
    1 i  T" a# X/ ]4 a4 hss = size(A,1); % size of state space   
    7 U/ l) j* _2 Y. \; I  V6 G% set default params   
    $ I: y% b" Z% Z. @' c" emodel = ones(1,T);   
    - b/ b: m: H' I# o; U5 ou = [];   6 z& O1 U/ a* ^
    B = [];   ) N3 m  i8 s. X/ i- {: d5 G
    ndx = [];   4 [/ z4 i1 H/ p+ V4 o' g
    args = varargin;   
    ) X  I9 o. h& f2 t$ i; vnargs = length(args);   
    2 K! o. i" z; }5 N5 [5 F% Efor i=1:2:nargs   
    ( y; V% \+ a. ]) M) j: `  `switch args   9 e8 A, a3 T( G% b9 D
    case 'model', model = args{i+1};   $ Z8 W* ?. }5 @
    case 'u', u = args{i+1};   7 ^+ f8 v% u; z# x! K& R
    case 'B', B = args{i+1};   9 G& c3 a. X! g- X
    case 'ndx', ndx = args{i+1};   
    + l* T' n/ [9 Notherwise, error(['unrecognized argument ' args])   
    : n1 g" ^  {( ^" C+ |* `end   6 R2 m8 x9 F0 b% r0 n0 a
    end   ' G# T5 L0 T( ]3 J3 a# \
    x = zeros(ss, T);   
    5 ^: h. A1 g( G1 _V = zeros(ss, ss, T);   
    ) p- @2 s1 C$ a7 |; X! ]" BVV = zeros(ss, ss, T);   
    0 }3 [* ]3 U$ v8 x% `8 vloglik = 0;   
    + N  a6 A7 I) Ffor t=1:T   m = model(t);   
    4 `3 ?" f- s. m. [/ r. W; Tif t==1   %prevx = init_x(:,m);   
    . X' k, |  J0 T2 [; }" C3 a- ^5 e; ?%prevV = init_V(:,:,m);   
    4 v' {% G. U8 ?0 `/ U0 yprevx = init_x;   3 B: s6 U7 W+ y
    prevV = init_V;     ~6 r, o( |8 J
    initial = 1;   5 y2 k- G$ r; L1 K! l3 h. H& D3 Y
    else   prevx = x(:,t-1);   
    & ^: b. ~) |: [prevV = V(:,:,t-1);   , x/ `2 ?/ f4 i" P+ |8 }
    initial = 0;   
    6 V- M5 Q( C4 Uend   . V# h" J; _' M1 n" I, F9 Z/ a
    if isempty(u)   
    ' m, i0 e" g. f, }0 {5 j& f# r3 }7 g[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   9 M% W; \2 S3 ]' [9 @5 ^5 E% d; F
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    ' ~+ h# y3 M6 a% p3 Y  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    " D, Q- A6 V7 A! K! B" D5 t8 Q     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   + }8 X5 X% x3 d  f& P' C
    else   
      x$ d( S6 ?* Y* {8 Ni = ndx;   
    $ O2 j1 ~4 H( d9 u" y% copy over all elements; only some will get updated   x(:,t) = prevx;   + j) M, g' }6 ]% y: h8 G
    prevP = inv(prevV);   
    1 Z2 N6 X1 N, ]prevPsmall = prevP(i,i);   # z' T7 z) k8 a. N/ x& j
    prevVsmall = inv(prevPsmall);   
    $ S. k$ M5 b3 Y1 V: M2 z& |0 P2 O[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));   
    + ~) n6 d( h) [2 c: \; V5 EsmallP = inv(smallV);   3 p0 |  k4 l& N% R1 z+ b
    prevP(i,i) = smallP;   
    , d$ u$ h. Q' L, ^  cV(:,:,t) = inv(prevP);   & Q5 Z) U, b; D
    end   
    ' G. |3 @( }5 n  B$ n0 Jend   
    : j8 m6 R/ _8 c4 w. `# Cloglik = loglik + LL;   . s4 r, R2 M! ^* x" c
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    5 h1 b  j% i3 R9 e) I, i1 s0 R/ z/ ?matlab下面的kalman滤波程序
    ; d/ K) V! P4 y: W$ Jclear  N=200; w(1)=0;   
    9 N$ N2 l  A4 Qw=randn(1,N)
    # w/ c* ~5 P4 P6 @3 D% r  w
    强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-8-23 11:11 , Processed in 0.381328 second(s), 84 queries .

    回顶部