QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5044|回复: 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滤波程序; ^5 x/ F4 z) M, \" M$ C" I: \: [
    clear  N=200; w(1)=0;   
    / [0 V8 h. x. |, Qw=randn(1,N) $ r" Z' |, @4 {# q6 I& ~
    x(1)=0;   ' O) Q6 n- ^% R+ E' w9 `
    a=1;   
    ' L3 r3 I/ j2 Dfor k=2:N;   ' d* M' y/ U0 x) ^5 S% a3 V
    x(k)=a*x(k-1)+w(k-1);   
    ' v7 D3 P% a+ J, D& o, q% _end   ; o. J: t" r: j1 O8 |
    V=randn(1,N);   
    9 x4 k2 \% g' w+ G: _9 `q1=std(V);   
    1 d/ M) G; h! e  F1 u* @Rvv=q1.^2;   
    4 U0 Q! x' }  H! P1 Bq2=std(x);   
    4 U0 k% C. Z, V' M3 iRxx=q2.^2;   
    8 d8 s+ s" O( qq3=std(w);   
    7 Y: j, u; h9 N, dRww=q3.^2;     J6 D4 E. C/ M& _
    c=0.2;   
    ) s/ `/ ~# C7 j/ e- [# OY=c*x+V;   
    1 ^5 G" D% a, |" ap(1)=0;   
    " Z" d! ?  J$ ~- H$ {! L" [& m4 ~( Ks(1)=0;
    ; L7 j5 L, R" q3 u) B% M" Z/ r. Ffor t=2:N;   
    ! p9 o& c* q7 s! \/ X- Bp1(t)=a.^2*p(t-1)+Rww;   7 p" H- H$ J3 Q  c
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   # p& Z/ _. U! o1 \( o0 r' d
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   % a- [' u9 M5 \  {  Y+ j
    p(t)=p1(t)-c*b(t)*p1(t);   
    # a( e! Y# ]* v+ c# Mend   
    : r' u, w; p4 w3 [0 E2 \t=1:N;   
    ; N6 `# ?) C0 Y- {% _plot(t,s,'r',t,Y,'g',t,x,'b');   0 j! |" y* Q6 i( h# h8 n9 }1 V
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
      W" a: g7 R; U( s- r6 Y% o% Kalman filter.   % |1 P" V+ t( G' }0 y
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    ! s, v! Z! n/ q! m+ D%   
    & H3 z1 {: A  w" f: [) `. C% INPUTS:   
    / n, a. I  T0 k1 @8 f% y(:,t) - the observation at time t   5 p+ ?1 c7 R2 j
    % A - the system matrix   
    ! H- V2 V7 r" s* T+ R% C - the observation matrix   . h; N- c3 t# h3 t: s/ K4 S
    % Q - the system covariance   ' l; v9 l! Q- Y) X' ^
    % R - the observation covariance   
    / [1 a% N* [9 F5 t8 O* R% init_x - the initial state (column) vector   
    # Y6 G  G2 d- z! y* M% init_V - the initial state covariance   9 t/ v( v4 K, j7 h
    %   
    & T9 q! V  E' z% OPTIONAL INPUTS (string/value pairs [default in brackets])   
    4 m. J  t+ X& U9 m# ~% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    5 x! ~9 u( p2 W( z+ v- L" i% In this case, all the above matrices take an additional final dimension,   
    2 K; e! V0 x8 h& e+ }& r# V% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    1 o, x. i+ n& H: L% y( d% However, init_x and init_V are independent of model(1).   9 z5 }3 X* z2 ~, l  S6 c
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    * J* D  D. O1 z% 'B' - B(:,:,m) the input regression matrix for model m   
    4 N% q5 }" X& u0 l$ `( p1 U%   
    0 R( F1 r- q5 G9 K5 R/ `% OUTPUTS (where X is the hidden state being estimated)   
    5 Q5 A1 R; r* \/ I" U2 e' K% x(:,t) = E[X(:,t) | y(:,1:t)]   
    9 d/ Z0 A) d( u: e7 k& J* F% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    6 }$ A$ |$ q3 T# r% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    8 f- N7 y" b+ N0 e6 o. u3 I" L/ L% loglik = sum{t=1}^T log P(y(:,t))   0 S& S- |  L- e( v! o
    %   ; R1 n( S, ?* h3 \0 P3 n
    % If an input signal is specified, we also condition on it:   
    ( D5 C1 u* ]4 H  C9 I5 e& {% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    . L/ K" g0 ~# _; S% If a model sequence is specified, we also condition on it:   
    2 ?7 Z. Z5 D( r% A; i% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    ( Z0 v- @+ p5 \& Q  s[os T] = size(y);   9 u- |$ e0 O3 Z" _: r& b9 s
    ss = size(A,1); % size of state space   6 C3 {5 {; [1 J
    % set default params   ! n- a5 _! l8 n
    model = ones(1,T);   
    % e$ p( S( \" Tu = [];   
    & t/ `+ D; f- ?0 ?, b, @$ R/ h1 A& ZB = [];   ( J4 R7 ]/ o/ d6 l6 X
    ndx = [];   1 u6 w1 w7 Y4 e8 y  i
    args = varargin;   3 f5 I( i& k5 i: L! h
    nargs = length(args);   ( L0 G  @. m! s" a+ k  n, [/ P% a
    for i=1:2:nargs   
    - a9 ?* C5 f8 _% G4 i" Tswitch args   1 \8 ^- f! Q; M& u8 C
    case 'model', model = args{i+1};   ! u1 V$ Y! i1 H+ a
    case 'u', u = args{i+1};   3 k3 A  j# M! q# I, K5 s
    case 'B', B = args{i+1};   . H9 P; a( V, n3 w& w8 ]* h
    case 'ndx', ndx = args{i+1};   + E: k. s- N  u
    otherwise, error(['unrecognized argument ' args])   . q. ~5 q% y+ z
    end   
    & U1 d2 [  }1 ]: Eend   / C& R2 g& A. I% h
    x = zeros(ss, T);   
    * Y+ K" a- F- c" sV = zeros(ss, ss, T);   
      u+ v, u3 k3 o( D6 bVV = zeros(ss, ss, T);   
    + o8 P& k1 S6 D# T) K% y6 W  k) {loglik = 0;   / T. a$ G# z0 o) n. C7 h8 @) @
    for t=1:T   m = model(t);   ) X  m$ k& g  o
    if t==1   %prevx = init_x(:,m);   % ~  t4 Y/ h" S, e: o, G
    %prevV = init_V(:,:,m);   
    ( @* }; w, T' r  A; E  \  mprevx = init_x;   
    ; ]6 W2 o, A; O* sprevV = init_V;   
    2 h& _- P5 l6 x) ]initial = 1;   
    0 G8 ]3 f; [; c) g6 welse   prevx = x(:,t-1);   
    6 ^  Q% u+ c2 ]& OprevV = V(:,:,t-1);   1 J7 j/ t, H. H% b5 r
    initial = 0;   
    9 y7 ^1 `$ Y# n; y  Y! Q) i! tend   # s, Q, S* q/ N: k% F" L1 S" r
    if isempty(u)   * i: s: F8 C6 q2 o' I, f* @
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   : O0 D# i+ {9 t' ]2 V( c; J% [
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   7 x9 U/ P1 y: u# M1 N# C
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   % o! T/ y+ q# |0 ^
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   - Y- Z0 _8 j( |) U
    else   
      ^: t0 }2 |: d+ r) `; R4 D, Vi = ndx;   
    $ e$ Y4 _0 s* W, U! ?% copy over all elements; only some will get updated   x(:,t) = prevx;   9 S$ x4 {& d6 _$ i/ G
    prevP = inv(prevV);   
    . }2 H# p8 J3 T% K5 P6 IprevPsmall = prevP(i,i);   " @- }+ M- }3 t0 t6 P
    prevVsmall = inv(prevPsmall);   8 G" e: m' L6 ~1 }+ z7 B1 i
    [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));   5 x1 Q& C6 K' i% {, \; ~
    smallP = inv(smallV);   5 t; Y% O5 v- j+ k# O
    prevP(i,i) = smallP;   ( t: y" g: C) b9 E5 Z+ ^  d7 c
    V(:,:,t) = inv(prevP);   
    ! y# c3 j5 S" v1 K1 k9 rend   
    % U  V2 w2 L# m+ A  oend   
    + A6 x. h1 B" [) ?2 \! `$ h) Floglik = loglik + LL;   ; |' G) {" u. V, h* ]% L
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48   o. i* K* ]) A' p) G
    matlab下面的kalman滤波程序
    * p8 ~- I3 V5 ~! B2 d8 `3 i) x2 @clear  N=200; w(1)=0;   6 I3 E9 E; N& P8 Y' v5 w
    w=randn(1,N)
    " Q9 c7 B' x* p! _) K. u' B" u! X& H
    强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-5 23:24 , Processed in 0.475994 second(s), 84 queries .

    回顶部