QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4884|回复: 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 X4 b4 H3 D0 Vclear  N=200; w(1)=0;   ; T0 A7 D" f: F7 M
    w=randn(1,N) / j/ O" R# S. f9 `
    x(1)=0;   
    ( }% I: N9 T- }3 A! A4 `# e0 oa=1;   5 S( H, r4 ?! F# T) n" f
    for k=2:N;   
    " H+ @0 b2 X* x  j3 }0 W6 Q$ lx(k)=a*x(k-1)+w(k-1);   
    % q) ?. K1 r7 P  P& Bend   , N0 T1 q+ N' }* J9 T4 \( n' `
    V=randn(1,N);   
    # w7 S, V. m7 q, \8 B: D/ r$ P  nq1=std(V);   
    6 b0 {+ X, V# r) m- O5 E/ D3 }. HRvv=q1.^2;   
    , @) H2 _! n) M) cq2=std(x);   
    $ c6 Y) B, T* a8 GRxx=q2.^2;   
    . S! d8 _4 f/ m  A2 R. mq3=std(w);   3 x0 t" U- K& }" ~& e) v* X
    Rww=q3.^2;   9 k6 L8 D4 P( S2 E7 S0 ], u& V" d3 S
    c=0.2;   
    7 k5 j! G( z4 ?) v1 d6 }" l5 aY=c*x+V;   
    . h+ M- Y2 r( Sp(1)=0;   
    ' ^/ p2 J( F( u9 `2 ^$ z& R9 ]) vs(1)=0;
    ) Z4 x& K7 q. {, w1 L" r1 nfor t=2:N;   
    ! f4 k! e& i2 V4 w! ?p1(t)=a.^2*p(t-1)+Rww;   
    / |8 Y! N) G, m3 ?/ v7 T) N4 a  n% Rb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   ( \  T" l$ l% E7 R
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   8 g1 L% q& J% C, c* v! N
    p(t)=p1(t)-c*b(t)*p1(t);   
    ! r( E7 l9 ?9 u7 x- H5 @end   0 h. R' w8 I5 B! g1 ]3 k
    t=1:N;   
    / n1 y" i- B; j2 [+ S. j6 Z1 _plot(t,s,'r',t,Y,'g',t,x,'b');   
    3 y; O4 d1 Q3 I& sfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    5 C3 c  Y6 m' o% Kalman filter.   5 d. x3 y0 Z+ K8 o6 G
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   * a( E, A* |; C. A5 ]* `
    %   & A6 c5 j1 ]. u$ h* }
    % INPUTS:   - j! Q' `. d/ P% N  ?
    % y(:,t) - the observation at time t   ! Z! a9 }1 \% J+ z: `$ I
    % A - the system matrix   
    % y/ I1 M. P4 A% C - the observation matrix   / U( E1 |( e$ i) Y" i' I
    % Q - the system covariance   
    % c- H: f" _  o0 h; K% R - the observation covariance   1 K/ ?+ X% c1 M" w  \  g
    % init_x - the initial state (column) vector   
    , x5 M* |( a' A4 g4 ^* q* c% init_V - the initial state covariance   & ?1 `$ M) w4 K7 F5 O' Z% v/ J
    %   % v. X9 p( ]2 z
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    ; ]$ U- U4 d: Q# F( t( _% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   * R" `& q# ~5 f. S8 t
    % In this case, all the above matrices take an additional final dimension,   
    6 g0 k3 \* N$ w3 B) P% X% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    ! M& B3 I! N. W0 T0 i  S" F% However, init_x and init_V are independent of model(1).   
    $ o3 ^. [; R3 A5 v3 e5 [2 |* j; ^. C% 'u' - u(:,t) the control signal at time t [ [] ]   
    1 g/ p. h& Q) g( }6 T% 'B' - B(:,:,m) the input regression matrix for model m   
    5 m& V$ o4 l+ K" z- k2 v/ j%   , }5 b. Z, O) Z  r; X; K- z6 `
    % OUTPUTS (where X is the hidden state being estimated)   
      C! }1 _6 I4 {( R3 U( \9 R" D% x(:,t) = E[X(:,t) | y(:,1:t)]   5 Y: J. @1 l; w' V- |6 t# J
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   2 @. X# s; m* S; Z/ b" J
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    - n: j1 |0 h% c2 v% loglik = sum{t=1}^T log P(y(:,t))   
    # j1 T& o0 X- f7 x%   & e/ m3 C1 e# E3 H2 F& A, j
    % If an input signal is specified, we also condition on it:   
    7 N8 E0 E2 `- T* J. w7 o% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   ; Z( O% i* r9 ?: }9 }: u
    % If a model sequence is specified, we also condition on it:   
    , G; L& R) o' F) ~; p0 q4 t7 H, v% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   8 S" _* ^4 H8 S
    [os T] = size(y);   ! E; I/ a$ C! g& g
    ss = size(A,1); % size of state space   3 G& |4 P, `' L4 E
    % set default params   
      p: v+ ^( p6 @, ?6 `model = ones(1,T);   
    5 B, r7 x1 L2 }* c" D- j, yu = [];   
    " D3 v( C; g) x, N9 G9 MB = [];   
    8 W% ~+ x/ {# [0 q1 indx = [];   
    6 }2 z4 g& c: oargs = varargin;   8 Y# g( ?* ^7 a8 @0 {3 @( H1 ], J
    nargs = length(args);   ( b. n& p) D. g1 g# f
    for i=1:2:nargs   
    5 ?- e; D9 E8 n' v- V$ S' Q1 }switch args   . ^5 ^& ^7 A1 H1 k% \9 c; }  G
    case 'model', model = args{i+1};   
    3 j  _. f# E0 g0 Y8 Ocase 'u', u = args{i+1};   " r5 x( ?: p  W( G6 c6 x) Q# h
    case 'B', B = args{i+1};   5 h# C' Z5 R2 v
    case 'ndx', ndx = args{i+1};   # ?8 U0 V% M  Z3 `6 F
    otherwise, error(['unrecognized argument ' args])   
    ) r0 F& R; L5 v( E- \4 Oend   ( S3 ]; M: f" ~  [- C2 T
    end   
    ! B* d3 H9 H$ K1 n# yx = zeros(ss, T);   
    $ S+ V6 ?, g& ~6 \% ]" mV = zeros(ss, ss, T);   2 B& V+ V6 [. A5 F- M% ^
    VV = zeros(ss, ss, T);   . k2 o+ {( }0 f& j2 c  y
    loglik = 0;   
    ) k! f* l/ k0 k# F3 y( o6 }) ^, D0 bfor t=1:T   m = model(t);   
    6 K* W  C5 o1 e7 R8 G" Q+ T/ cif t==1   %prevx = init_x(:,m);   - x# Y0 Q  t- J0 a
    %prevV = init_V(:,:,m);   
    ; A5 C) m0 r" G7 k2 f5 j8 {6 dprevx = init_x;   7 ~6 F: C: I1 O$ i( \) g' q; C
    prevV = init_V;   
    7 X9 X+ {3 w6 ?$ N2 F' pinitial = 1;   ) i$ s  L' ~# I; O  [2 a
    else   prevx = x(:,t-1);   
    4 ?, f- m5 V$ Y* s: L" Q* SprevV = V(:,:,t-1);   
    & S2 t7 b8 x1 e0 ^0 iinitial = 0;   ! y/ ^) H7 w6 O6 B4 p' F3 r' {1 ~
    end   
    % `! g: x/ o, Z, _if isempty(u)   
    0 P  G4 c1 i# @[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   2 S1 X, p/ s* R, P. W# t0 E; n
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    8 O; H$ s' c9 K6 e# d  S9 V  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    + E) K0 o' r# a# d# n     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   . ^% R- x( p0 a; |6 Q
    else   
      x0 u7 E$ A; [9 B: Ui = ndx;   
    ; {! x8 u1 @8 R$ Z% copy over all elements; only some will get updated   x(:,t) = prevx;   
    , J, J! b6 r  J& k' CprevP = inv(prevV);   9 X3 c5 l  B  R5 C
    prevPsmall = prevP(i,i);   
    ! V- f5 W0 V4 O& V% FprevVsmall = inv(prevPsmall);   4 G$ g4 b1 b. L% }2 ^
    [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));   ) l' y1 y/ f* y5 ^/ p
    smallP = inv(smallV);   
    . g7 P( u  R7 Y2 JprevP(i,i) = smallP;   
    5 [! I: f7 o; W$ }- V& A' B9 N2 yV(:,:,t) = inv(prevP);   1 ^  Q! o; A* k0 a6 s& `
    end   
    9 r- @" D5 A9 _! w3 v6 d9 C$ n% \end   9 k: q# w( v) I+ }. |6 q9 n+ \
    loglik = loglik + LL;   . C/ d+ A4 |$ F/ D4 K. x& q
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 $ u' y- i" ]$ j8 u
    matlab下面的kalman滤波程序5 o# |+ g6 i3 z, [" w( E
    clear  N=200; w(1)=0;   7 O/ n- G. i' y+ v
    w=randn(1,N)

    $ u/ V0 D2 I4 M( G0 J强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-4-10 07:22 , Processed in 0.749749 second(s), 84 queries .

    回顶部