QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4881|回复: 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滤波程序% i% j7 N8 c7 C3 F. |  h8 C) c
    clear  N=200; w(1)=0;   
    1 y+ H9 G/ D/ v$ p' L$ F: T5 iw=randn(1,N) ( }9 B, D. Z+ I
    x(1)=0;   ) W: f2 R/ A& Y- Q6 t5 W+ ?/ H
    a=1;   3 l0 Y$ J* R7 j$ J0 U* l
    for k=2:N;   9 z( R" g. {" \! x7 k! C7 G- Y! o
    x(k)=a*x(k-1)+w(k-1);   
    + \2 ^9 W: r# w* ^/ Uend   ; F; x: c; S% l- `
    V=randn(1,N);   & u7 e) m. ]  f9 X
    q1=std(V);   
    , {0 T8 w- y2 R: qRvv=q1.^2;   3 _* f( K( |# S8 F
    q2=std(x);   # M0 q4 p7 I6 b" Q" h* N+ `
    Rxx=q2.^2;   
    9 D) }+ Z7 N1 Z" Gq3=std(w);   3 W6 @3 L, ^" p9 b* E5 G
    Rww=q3.^2;   
    % v/ N; w/ i6 z4 Kc=0.2;   1 p7 x6 D, S( a8 t: E1 b( O
    Y=c*x+V;   2 o- {6 M( q; {) }0 \/ l
    p(1)=0;   
    $ u' ?' C: |. L1 z# U5 {7 W; r4 os(1)=0;5 [! K5 A( T$ U
    for t=2:N;   0 E; v7 u1 ~" w( l$ i+ s7 B6 R
    p1(t)=a.^2*p(t-1)+Rww;   
    " z- i- S# W# J7 x2 ]. V& c2 \- W5 hb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   3 Z4 `. W. E3 E0 m" C9 @
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   4 ]& ^  V, ^/ }/ p- b$ @% L
    p(t)=p1(t)-c*b(t)*p1(t);   - u0 U8 n# ]- c! |; s0 b" _
    end   3 H: C6 M3 }% ~
    t=1:N;   
    ) L6 ]0 {9 d3 x" |  wplot(t,s,'r',t,Y,'g',t,x,'b');   1 F$ m/ I2 H3 [# p5 y! d: Z
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   . V" v3 Q3 I5 S& R( i! q* {
    % Kalman filter.   ) Y' K4 X; i9 C3 ^( O& S/ {6 B5 {
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)     q3 D6 m& W$ v* B
    %   
    ) t! d" k7 b  Y5 v5 Q$ \0 Y% INPUTS:   / ?$ r" o+ h6 l
    % y(:,t) - the observation at time t   : D. p; f* p- N9 q- e: R
    % A - the system matrix   8 G7 Q/ E  a7 q4 }7 z% J2 O9 t; K
    % C - the observation matrix   $ B9 b0 u& e( i: t; ?6 [
    % Q - the system covariance   + z6 k% X: X: b
    % R - the observation covariance   
    / N/ N1 g2 w2 O% init_x - the initial state (column) vector   $ ?; g7 i6 {. c% ^' d+ r9 r
    % init_V - the initial state covariance   
    8 k2 c) @7 ]* J/ ?  n/ w; f' U%   3 i+ Z* _9 t8 M% ?* _7 ]' a! d
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    ) b2 g' x! _+ f, q. P7 t. c$ A% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   8 a( @9 w5 V/ {; O
    % In this case, all the above matrices take an additional final dimension,   
    ! |3 h8 O+ L7 q' _0 x0 L( i% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   4 C8 q$ d9 G: X  k5 t4 o  M9 _
    % However, init_x and init_V are independent of model(1).   ( Z: h! Y; U* Z- O
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    ! G( H4 L1 A% P/ J: l& u. Y% 'B' - B(:,:,m) the input regression matrix for model m   % @0 q6 U4 |/ T1 Q( W8 h$ @# g+ G
    %   0 N% a) W& J  E0 I' Q0 G
    % OUTPUTS (where X is the hidden state being estimated)   % P" {9 f5 E! M. o2 N
    % x(:,t) = E[X(:,t) | y(:,1:t)]   8 w- H! O; g, s
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
      N; L0 w/ M/ A- F. y- C% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
      {- l5 S% I* R4 H# {" ~% n  ]% loglik = sum{t=1}^T log P(y(:,t))   3 X0 f0 {) G1 o# `( j7 t
    %   & H0 v5 p& y; V0 H7 R$ _% }2 Q! D
    % If an input signal is specified, we also condition on it:   
    1 W$ S. Y. I( T1 I% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    ' s" W, c' b& ?5 J" a* l6 J3 O% If a model sequence is specified, we also condition on it:   9 A' X+ J6 d8 t5 X- D
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   ( k  G4 ]; P$ p( k% ~' g$ D
    [os T] = size(y);   
    7 U0 F3 _; k+ bss = size(A,1); % size of state space   
    7 |7 |+ d) }7 |# i5 {% set default params   7 d7 v4 b9 M, A3 q4 v! I2 }$ f
    model = ones(1,T);   % R& p) m- I8 g) f  c
    u = [];   
    * b: G5 R6 C& K% N1 [) _  LB = [];   " S- F0 F- x9 G
    ndx = [];   5 _4 v# Y) v/ a0 U! U8 m
    args = varargin;   6 M6 d( U5 D' u5 {
    nargs = length(args);   , Q0 E' L$ n4 h
    for i=1:2:nargs   . I# I7 {; w) N9 c7 a5 {
    switch args   5 ]% L# W+ N4 [, k
    case 'model', model = args{i+1};   6 |) U! x) J" B# H8 S
    case 'u', u = args{i+1};   
    % M) D% c6 z) Z$ Ucase 'B', B = args{i+1};   
    . B4 ^7 \$ A1 Y$ r! @. t7 o' C8 Wcase 'ndx', ndx = args{i+1};   
    ) T, @! e* O% Aotherwise, error(['unrecognized argument ' args])   
    0 F: Y$ T# \- Oend   ; g+ @+ Z, k) p. |
    end   ( J. C+ Z+ f/ C# y0 I
    x = zeros(ss, T);   1 q$ Q4 M5 `/ L+ y- I$ {; a
    V = zeros(ss, ss, T);   6 E0 b/ E2 u' O$ G) U$ J) }
    VV = zeros(ss, ss, T);   + }# T6 v1 ^! d+ @1 {
    loglik = 0;   9 u4 T2 S- u* E
    for t=1:T   m = model(t);   : M. v: `, Y0 j" ?0 P( [" Z( H
    if t==1   %prevx = init_x(:,m);   
    # O- ^/ \: {+ o8 P%prevV = init_V(:,:,m);   
    4 `5 E" s2 F/ n, T9 c: nprevx = init_x;   ' |2 Z  u3 y5 G& q; E9 C
    prevV = init_V;   # J  q7 y4 ?2 e( I$ N, v( R% \4 n
    initial = 1;   1 Q( e( q; T+ \% M6 P9 t8 U. G; e
    else   prevx = x(:,t-1);     `2 J) D- }) `4 @1 h; A# y6 P
    prevV = V(:,:,t-1);   
    * S( q# u6 H1 u" m$ linitial = 0;   
    & e- T; t% a. G0 x3 l' O# Dend   ) x' y" B( i, f" }8 Z4 z
    if isempty(u)   / k: _) L7 _" T, Q# F
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    ) R8 n( J; g1 \kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    " D. O& ]. F( D  [' o: m  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   % ?, V% h* R, t
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    6 o/ ?' U' V  aelse   " r# _4 G  r  [! G/ Q5 e
    i = ndx;   5 c7 @+ m8 a4 l9 U5 N2 f. b
    % copy over all elements; only some will get updated   x(:,t) = prevx;   
    - Y. T0 {$ B9 ~9 vprevP = inv(prevV);   
    % r1 v8 z0 ~0 O: `0 {/ N9 F' P0 HprevPsmall = prevP(i,i);   # I& u- ]" W- _. v
    prevVsmall = inv(prevPsmall);   5 P! k4 F/ c+ F5 \1 K
    [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));   + _, h% x2 c! f
    smallP = inv(smallV);   7 M! ?8 v* y( `! n1 V
    prevP(i,i) = smallP;   
    3 A( o% p0 [5 Z3 E# r3 h" AV(:,:,t) = inv(prevP);   
    & Z7 s1 b' z( F' B7 }0 Wend   # u4 c2 F% q8 Z
    end   
    . L9 Q& Z4 E9 K; }; H( I" X- \loglik = loglik + LL;   % p6 e! `. T* J$ ?" B! N
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 & F; k1 n$ O/ |& J. S( S
    matlab下面的kalman滤波程序+ Y& J9 X# E" B0 f
    clear  N=200; w(1)=0;   
    9 j; x/ M5 q5 \/ q$ F- Mw=randn(1,N)
    . f; k$ v0 o$ f+ k% ]  [1 C
    强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-9 20:33 , Processed in 0.935046 second(s), 83 queries .

    回顶部