QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4886|回复: 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 C4 ~) N/ Q; T( u& j/ i% V
    clear  N=200; w(1)=0;   " m  w" _" p8 u* B( h* Z8 h
    w=randn(1,N)
    5 a+ h5 P! N* E) Hx(1)=0;   ) L2 c& G( e: \- x8 v0 P6 B+ [
    a=1;   ( c- {9 J1 O" l0 [- }9 g
    for k=2:N;   : q4 g' }* ]. F% v1 c: I
    x(k)=a*x(k-1)+w(k-1);   3 g% Q8 \- S. [( |
    end   
    3 p/ O! W2 t# H% v9 Z8 NV=randn(1,N);   6 l5 S% X9 g$ K/ k* G
    q1=std(V);   6 p) L* B; q) O" w# ~
    Rvv=q1.^2;   
    0 |) _" o! a, i% N1 K; w2 Aq2=std(x);   
    ; A+ a! R+ i1 {6 B  m. F& sRxx=q2.^2;   
    & ^# k$ q* T1 B$ h$ uq3=std(w);   * A% p% y; v+ D9 [
    Rww=q3.^2;   $ u) @9 |: N* l/ Y6 N  x
    c=0.2;   
    % Q* n0 a/ N  R; A8 A5 jY=c*x+V;   5 J1 A' c/ s& H% U7 K5 D
    p(1)=0;   ) g2 g& A0 M, B" V$ J9 K
    s(1)=0;
    6 a/ [7 B/ D+ _) c. O9 ufor t=2:N;   
    . ~; W. `3 R! lp1(t)=a.^2*p(t-1)+Rww;   
    ) L, X' B$ D; ~b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    6 X3 \+ |: t( t3 C& m: _s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   7 G  `( T: W5 r# x1 H8 c( ^
    p(t)=p1(t)-c*b(t)*p1(t);   
    " `3 d  S# s0 r, N- W4 V# }) vend   
    5 O6 _! W  Z" jt=1:N;   # X- c+ e" V8 X4 r. H( c; M
    plot(t,s,'r',t,Y,'g',t,x,'b');   
    : T/ l' B; Q+ q# @" w/ Y; Sfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    0 A8 {. m" x0 B( D% Kalman filter.   
    ; X! i& t/ }: ~% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   " D8 i4 n! U$ X, _. z8 y7 W
    %   ) f' Q8 w% p- z+ |2 G0 E
    % INPUTS:   
    , A& R1 w' c9 w5 c6 Y% y(:,t) - the observation at time t   7 H0 Y8 a) G$ s
    % A - the system matrix   
    + }$ D, o# t6 L% L% C - the observation matrix   8 [; `! F' r& p6 I
    % Q - the system covariance   + J1 ]# n! x2 F9 O9 C5 B4 {+ G. P
    % R - the observation covariance   
    : J; i& F6 O1 d# T, d5 A9 |5 G% init_x - the initial state (column) vector   
    , x4 ]) ?9 j# i' g% init_V - the initial state covariance   ' Q$ E* @& c8 R1 \. U% E6 c; q
    %   
    ; d% M& d+ ^5 r6 s0 Z* d% OPTIONAL INPUTS (string/value pairs [default in brackets])   
    1 F+ G* e  L$ N' M$ v" e% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    4 L5 u! q: D) l& r8 v% In this case, all the above matrices take an additional final dimension,   : y$ Z3 Q* k4 o- |  f; L- {
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    9 x* E" h% q* ]) e  [7 A: o% However, init_x and init_V are independent of model(1).     m: W3 i5 a( h1 Q" F; o: i
    % 'u' - u(:,t) the control signal at time t [ [] ]   5 T( g1 L% ?# `, [
    % 'B' - B(:,:,m) the input regression matrix for model m   
    4 `$ t6 C+ @# }5 t! B- V3 H0 x%   
    4 @& a( s3 m  Z& `5 p: ?0 e% OUTPUTS (where X is the hidden state being estimated)   
    9 l9 B0 I$ r1 A" F- M" W& c% x(:,t) = E[X(:,t) | y(:,1:t)]   
    % R7 Q2 i6 J8 q" N+ \4 j: X% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    8 c$ V7 i- K1 M6 D% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   3 ?- m9 v0 X) V
    % loglik = sum{t=1}^T log P(y(:,t))   
    ! K% H* P  N! u4 _+ ]7 o4 D2 f%   . P( L0 a2 _, y- y6 H! }
    % If an input signal is specified, we also condition on it:   
    ) N) N4 G3 O* ~- ^2 t- r  Y  ?/ x% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    ' v! T0 }+ ?. q3 B% If a model sequence is specified, we also condition on it:   ( R4 C# A+ |- N* f! L# z
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    8 X1 e9 d) W8 e[os T] = size(y);   
    8 |- t# M' E$ ?- v" c. Lss = size(A,1); % size of state space   
    2 Q2 [9 [, A  ]% set default params   
    1 G; o: p" t! l- P- nmodel = ones(1,T);   7 F7 A, P; ^, ?6 F' U
    u = [];   : a6 u3 n( G' `3 ]- \  J. Z; S
    B = [];   
    ! B) P' `: V8 F" ~6 Sndx = [];   
    . _% ]  v$ g' n0 a' w* |# Oargs = varargin;   
    + G- a8 Y7 R& Z0 u) |6 dnargs = length(args);   0 J% q9 h4 f8 ]0 y$ _2 t
    for i=1:2:nargs   / t+ c' C8 B# Y$ z6 j9 V/ Z6 R2 W
    switch args   5 ?+ V0 u- ^, O3 s
    case 'model', model = args{i+1};   9 i6 z& R) ^: B
    case 'u', u = args{i+1};   8 E3 S2 o- f9 a/ w& K# n: F+ f1 \
    case 'B', B = args{i+1};   # _4 u- v2 M3 _
    case 'ndx', ndx = args{i+1};   * y- s; H+ j* e* S. U
    otherwise, error(['unrecognized argument ' args])     a4 t" H( N1 P; ^
    end   2 c6 X/ p3 f1 M% m# T
    end   ! z6 R6 Y! }" W8 ^- D
    x = zeros(ss, T);   
    : L8 A4 k  j/ S5 kV = zeros(ss, ss, T);   
    . r: C6 w" V' I, _7 z* C2 VVV = zeros(ss, ss, T);   
    3 d% d* j5 @* @loglik = 0;   $ o8 I+ `5 J+ k& ]/ ~
    for t=1:T   m = model(t);   
      `4 a  ~" G* y" x# O9 V7 tif t==1   %prevx = init_x(:,m);   3 k8 b  n. L- |0 r; J2 V
    %prevV = init_V(:,:,m);   1 I6 a7 S) I% b" _$ k. f2 O
    prevx = init_x;     C# P! }4 q( h; c
    prevV = init_V;   
    # _( v( q6 j$ d, Zinitial = 1;   
    ) Q" q/ B% W" P6 Ielse   prevx = x(:,t-1);   8 c7 f( s# b( B8 O
    prevV = V(:,:,t-1);   
    ) L+ I$ x( V8 e7 K$ Pinitial = 0;   
    0 ^: G. |8 b6 [9 [& O- q# e0 x, Jend   
    5 b2 M% m. t# R1 {, `* K# ^if isempty(u)   ) M) P& ]; Q8 |! i5 S( [0 D' c
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   : \& {) C2 v0 N5 E! U- W9 j( k9 w
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   6 B3 R6 j2 j( @% m; G$ d
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   8 M) U4 M: Q2 C
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    * e$ C* F) i" F0 {else   
    . z: M$ Q/ T2 A1 G' d2 c9 `% Ni = ndx;   
    ; H' h2 k( \$ E! `/ B/ a% copy over all elements; only some will get updated   x(:,t) = prevx;   4 n8 z! {1 O% [# C+ ^
    prevP = inv(prevV);   
    9 z) Q2 T6 I5 P% M: l7 m$ xprevPsmall = prevP(i,i);   , V6 S. G+ N: V+ j
    prevVsmall = inv(prevPsmall);   
    # a, m8 T, u: y4 d! C. q, w[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));   ) k: D  `4 W' P. K: r$ v
    smallP = inv(smallV);   
    9 L# ?8 y: n3 r1 N5 f2 o& NprevP(i,i) = smallP;   
    / v2 g8 V1 N% yV(:,:,t) = inv(prevP);   8 D+ W% h8 e8 b, E+ p  q/ g
    end   $ X9 j4 L) L4 F" I  [% }' t
    end   
    8 k9 W( ~7 l' Q: Hloglik = loglik + LL;   1 ]' o+ [! N% I6 S/ ]6 K
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    / Z0 O# f  D2 Q) V; xmatlab下面的kalman滤波程序
    ' B5 t5 k" o; p) A% b; y  G$ f5 Z# Zclear  N=200; w(1)=0;   
      a: u6 z/ g% m$ F! ]! S2 ~w=randn(1,N)

    + E# M* e6 D) ]7 b0 A' n强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-11 04:39 , Processed in 0.488577 second(s), 84 queries .

    回顶部