QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4748|回复: 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滤波程序7 F+ P6 {" U3 c  s4 q# M; Z" r4 V  c
    clear  N=200; w(1)=0;   4 I) O! V/ K" s! \- {+ L6 ]+ j
    w=randn(1,N) 7 V' q' P/ R! g2 s' j; w
    x(1)=0;   - B+ g$ Y8 @4 s: V& M$ Y
    a=1;   
    ! \, k; O* U9 g" `- V3 afor k=2:N;   - L/ B9 g: b2 q) R" u5 n
    x(k)=a*x(k-1)+w(k-1);   
    ' {" x. ^3 g* x& Mend   % V$ y- g& j2 k. _7 g( Y% |
    V=randn(1,N);   # C9 f& T/ P; D" v
    q1=std(V);   0 X' g4 d1 _9 i$ _, @% L
    Rvv=q1.^2;   
    - ~8 h- X7 c+ i/ _0 c6 N1 _q2=std(x);   
    + u$ y6 L1 @( Y; g% A" P& M4 vRxx=q2.^2;   
    # i. v3 }  V- [$ i$ x0 Pq3=std(w);   
    ' J" l; c) ?) p6 j9 |3 [Rww=q3.^2;   & m& u- Y& Z4 d, p3 M
    c=0.2;   $ Y4 l1 [" R2 K6 x0 t7 d
    Y=c*x+V;   ) }4 Q: ^9 h6 u9 ?0 @
    p(1)=0;   
    $ F& F! n) }: xs(1)=0;* q* V* Q% X6 i1 r
    for t=2:N;   
    1 T2 w' C  i0 e- G6 Ip1(t)=a.^2*p(t-1)+Rww;   , ]# l. G$ G6 m# N8 t; S; x& A
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    " ?4 E8 M7 R& H7 e9 m3 L# a- cs(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    7 f/ F  H. Z: D+ l1 v! G+ ?9 @p(t)=p1(t)-c*b(t)*p1(t);   
    , D1 }: G. h0 o! y6 oend   * T4 b' T* m' ?; N8 G/ W1 e
    t=1:N;   
      ]1 f* l) E1 y; m( ^2 Yplot(t,s,'r',t,Y,'g',t,x,'b');   
    4 A0 D% @6 B# c2 r  xfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    * [6 [/ s$ }! S% Kalman filter.   4 P/ O; Q* l# }9 k
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   , x9 w- q8 N9 i5 S( O
    %   7 V; [: e! {1 \9 I+ m% A
    % INPUTS:   
    * W/ g- k1 e3 D  g8 _$ O: S% y(:,t) - the observation at time t   
    9 @# `6 P$ G* X! {% A - the system matrix   
    & J* p- j* O2 V+ ~' r9 J& v. C% C - the observation matrix   
    6 H7 D" n9 T% q# F+ f+ f% Q - the system covariance   9 @; x* G! m) a9 A1 r5 l$ Y8 g
    % R - the observation covariance   ! }+ f4 U0 `! e; _) h
    % init_x - the initial state (column) vector   2 G7 R: [  P7 o6 N$ T
    % init_V - the initial state covariance   ' s  l2 s, G8 ]% z9 P
    %   . l' V! O9 P/ B* O
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    ' t% @: |' u, X% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    / N' `; J& y, ~( `- v% In this case, all the above matrices take an additional final dimension,   + S( l9 Y+ J+ k4 M
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   3 x3 h: T, z% s9 j
    % However, init_x and init_V are independent of model(1).   + p% \3 Q7 p1 l
    % 'u' - u(:,t) the control signal at time t [ [] ]   9 j8 u! G) w8 V
    % 'B' - B(:,:,m) the input regression matrix for model m   
    3 b+ s6 M9 F, l6 h0 L+ s6 u9 J9 M%   
    & N! K+ T% n9 H2 C% OUTPUTS (where X is the hidden state being estimated)   
    , k8 P0 e8 c" T% x(:,t) = E[X(:,t) | y(:,1:t)]     B! o4 G* [  w1 k
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   + M1 b1 [2 P4 Y6 t% i
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    # W0 r" Y, N+ `' S% loglik = sum{t=1}^T log P(y(:,t))   
    ! _5 ]) a8 C  \7 ?0 A%     u) o; a7 I8 g' q7 D
    % If an input signal is specified, we also condition on it:   & d4 F7 [, g6 v: y* w0 Z
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   7 s9 D! `0 L5 J7 r5 f! e+ L+ G
    % If a model sequence is specified, we also condition on it:   ( b7 v* D9 I: |' u
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   7 ^( s" F0 t. ]6 P" N  g: Q$ w
    [os T] = size(y);   
    / |+ [3 l  h. U/ e# }ss = size(A,1); % size of state space   ) {: x* [! K1 f) N9 z
    % set default params   
    - J3 x. [1 O4 B8 Q, cmodel = ones(1,T);   
    3 J' n' x( f* a% e, n8 cu = [];   5 q( y6 t% W; ~6 N- j8 N# W0 m: d3 e
    B = [];   
    $ P% K$ P- V% bndx = [];   
      j6 X) s" j$ D! bargs = varargin;   4 ]: M0 u$ q5 S# \; U* k8 X
    nargs = length(args);   
    & l" u9 G9 c; |9 n/ [  bfor i=1:2:nargs   ; C/ y' T* `9 G: ~% U5 H
    switch args   
    & L* u' G1 Q5 Y" m. {case 'model', model = args{i+1};   7 H, m- u8 k* t
    case 'u', u = args{i+1};   : b5 d! a5 i4 h  `9 u5 t
    case 'B', B = args{i+1};   
    4 g5 R. f+ g; x; B! f9 M+ a8 w: u! Mcase 'ndx', ndx = args{i+1};   ( T. B& S4 Q3 z  e* o' Z
    otherwise, error(['unrecognized argument ' args])   ! ?# q: ~, P3 Z4 K6 W; f1 L' C
    end   
    , @" O% Z% c" `6 O* Vend   + C5 A2 H  V3 P) c& M4 s' H
    x = zeros(ss, T);   8 b7 a. w! a8 M" }* o) ~' T
    V = zeros(ss, ss, T);   . M# u/ L* ~. x+ K% x; V
    VV = zeros(ss, ss, T);   
    $ P+ O+ ?5 ?- v! x2 _8 O2 Floglik = 0;   
    1 {& J; Q$ N& z" P! P+ E+ wfor t=1:T   m = model(t);   ( d6 N8 j) _# X& b9 t& w
    if t==1   %prevx = init_x(:,m);   ! p* r; h- @# q+ O" x2 J+ Y$ [
    %prevV = init_V(:,:,m);   
    : l; H* i4 \6 V5 i4 N. fprevx = init_x;   
    ' w; t: V8 f7 j7 _$ BprevV = init_V;   ( n/ ?# G  P% f! Z
    initial = 1;   ' o/ ]) |( h. v, h3 T
    else   prevx = x(:,t-1);   6 \! j3 q6 y5 ]
    prevV = V(:,:,t-1);   
    - I( A3 g# q& b7 l1 g0 M3 tinitial = 0;   
    ( Q" ~# a; c# D! Lend   8 Q' j; i0 n  ]! Q
    if isempty(u)   6 X& E# u: b+ T, ~1 B1 M3 ?
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   6 `8 H9 o. [% k& r6 G" ]9 L
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   & T9 l$ s( R( |- \2 c2 }$ W: g& }! G8 E
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    , m; F4 F. H" a" C* P     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   ) v, Y% q) y' E# \9 \$ n/ h
    else     F( }8 B; s" w3 O! I
    i = ndx;   
    " ?7 I/ H/ [/ y( B6 @4 C0 t% copy over all elements; only some will get updated   x(:,t) = prevx;   
    - t' Y4 A& `0 [  J  [! P0 L1 kprevP = inv(prevV);   - P5 u6 M  I! Y2 u2 R
    prevPsmall = prevP(i,i);   , ^  k: C9 T1 Q3 u5 K6 f) d) y
    prevVsmall = inv(prevPsmall);   
    3 S0 i  x) x6 _8 |% D[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));   
    : E3 ~+ b" s- f5 B  E7 ysmallP = inv(smallV);   ! ?" @1 |) ]1 H: k# v( z
    prevP(i,i) = smallP;   
    + n) R3 ^) X9 r5 j; vV(:,:,t) = inv(prevP);   
    ) u# g8 }; @% [0 |* X8 d5 Y( Cend   
    / a6 N$ P3 I5 a2 i& @) ?" Kend     p4 q7 {  g3 K( a: x: n
    loglik = loglik + LL;   7 q. A9 W/ Z( U4 r' p
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    % i, |. W3 \+ Lmatlab下面的kalman滤波程序5 B3 v0 k# K4 y2 G
    clear  N=200; w(1)=0;   6 A$ a2 u4 x* @" i& v
    w=randn(1,N)

    ; z' o0 v# Q6 s" I; ^/ Y: X强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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, 2025-11-6 17:05 , Processed in 1.156461 second(s), 83 queries .

    回顶部