QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4572|回复: 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滤波程序
      T' p9 y- V, ~clear  N=200; w(1)=0;   0 e( o  m4 y& W. O
    w=randn(1,N)
    1 v9 w: B4 b8 G/ T$ D1 Rx(1)=0;   
    ! m7 j5 y1 }/ g7 W( Za=1;   
    ' R/ g+ ^8 K& u" t, Y) [for k=2:N;   
    7 Z, r1 a2 _! z* Wx(k)=a*x(k-1)+w(k-1);   + d+ x! M& A$ D0 }/ `
    end   6 D8 Y. X! r, A% M) f+ N3 e, V* {) p# L
    V=randn(1,N);   
    3 L, L% X8 a% U# a. J3 l/ eq1=std(V);   , D* f/ f0 |/ H! K$ o$ C6 Y% r  ~* A
    Rvv=q1.^2;   , t. b5 d: o3 y7 p6 Y* j
    q2=std(x);   / ^: ?2 f1 T7 D1 y' ?& v
    Rxx=q2.^2;   
    ' _# K2 ~- A( m: J$ wq3=std(w);   * v6 P+ P# ~$ ^1 j3 y
    Rww=q3.^2;   - N$ n) v" f+ a9 D9 L* {6 z
    c=0.2;   
    & \5 O0 L: D. [  a) I/ OY=c*x+V;   
    ; v* l4 R$ {4 n5 N- v+ ?9 op(1)=0;   
    7 Z2 Y2 R- V0 B! a9 i7 V+ _s(1)=0;
    . }- w; K) W7 ?* ?% c9 W5 U- [for t=2:N;   
    - X, v; V2 b6 b2 \p1(t)=a.^2*p(t-1)+Rww;   
    " k5 A  x- ^9 T! Z- b0 p. g/ ub(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    ; H5 Z. E, d+ R! b  n( bs(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    ) X1 b5 _- K) q) D# }. c3 ?  `, _p(t)=p1(t)-c*b(t)*p1(t);   $ m) z/ k3 K: V6 W- n* w2 f; P
    end   
    . [' {! `3 \* ?8 it=1:N;   
    0 L# R" Y9 E& T: b# z/ xplot(t,s,'r',t,Y,'g',t,x,'b');   
    : @" u0 Y# f9 a! R1 Jfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   , j# B/ u5 ^8 R5 y9 B
    % Kalman filter.   
    , F- j1 \& G8 m" i4 S; Z% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   : |" r% r/ Q7 M/ G1 f) k4 v+ A
    %   ' U! ]: @) `1 v8 R; ~" u
    % INPUTS:   
    9 c7 h+ j1 e4 t' [+ S% y(:,t) - the observation at time t   
    8 H( [5 n8 W, C% A - the system matrix   / s6 F) [3 {* ~
    % C - the observation matrix   ) b: W- I( _8 P
    % Q - the system covariance   
    : f8 T1 x! I8 c4 C: V) G; b% R - the observation covariance   
    : y$ {) `9 p, i& t- S& A, O" r% init_x - the initial state (column) vector   
    * W% f5 e/ G( G% g* }4 j% init_V - the initial state covariance   ; y% r; A! U/ @3 r
    %   ) U8 o0 a) n" M7 o
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   1 O7 s  K: x  G) {2 R8 M
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    : L& _7 L: O4 F# o' A% In this case, all the above matrices take an additional final dimension,   
    $ o% Q) t, {0 y0 _- @% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   6 i4 X9 V: @3 K% D  ]
    % However, init_x and init_V are independent of model(1).   
    / j" W+ K! g# h0 S! C$ n9 b7 W% 'u' - u(:,t) the control signal at time t [ [] ]   ( {+ a& Y) Z2 W5 B
    % 'B' - B(:,:,m) the input regression matrix for model m   
      @- q5 R9 u; Y+ D& ]6 i%   
    % v/ B) F% Y3 L8 k' o4 l) u' q% OUTPUTS (where X is the hidden state being estimated)   
    8 F: u2 {& H- q( c' I% x(:,t) = E[X(:,t) | y(:,1:t)]   
    / W0 ]" i7 C3 a6 q% X# j9 ]9 W3 J% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    ( R3 E! D5 r. B% B! }% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   ! A8 c4 {) x3 I3 y+ g) D
    % loglik = sum{t=1}^T log P(y(:,t))   6 N. d  z. [8 G+ B/ m, F- f# l: u
    %   8 [: R7 T7 O2 M+ I; V
    % If an input signal is specified, we also condition on it:   
    : [8 f( _5 M+ A0 \) k% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   & Q) ^$ l* `6 x8 H' T* G
    % If a model sequence is specified, we also condition on it:   
    / [1 }0 q) T- d& d% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    $ P/ ]" h' ?4 q+ ?[os T] = size(y);   5 f& j1 Q$ A& ]% e
    ss = size(A,1); % size of state space   
    3 ]/ C4 Z+ w5 R* m. o% set default params   
    9 z% n% j( V" emodel = ones(1,T);   
    2 t; u( m0 a  x- f( _2 S; su = [];   
      I1 r5 ~% o; r6 y+ N8 J9 T/ ]B = [];   , g$ n5 ^+ |8 k0 p! u: o7 T; g
    ndx = [];   
    ! g. g8 t( Q. n# @& targs = varargin;   1 n6 b, w! ^9 ~" i: Z! U
    nargs = length(args);   - Z$ C# x* {9 r
    for i=1:2:nargs   
    ) _, c# P; p4 T7 R7 v! O" dswitch args   
      Y9 v$ t/ z5 _3 gcase 'model', model = args{i+1};   # _! F, }1 U* n; J
    case 'u', u = args{i+1};   # _0 V4 F& C. f% p$ I9 ]3 j& d! J
    case 'B', B = args{i+1};   
    ; `6 m* i, E% q. Y) mcase 'ndx', ndx = args{i+1};   
    1 _. `1 O' I  T8 w5 U( jotherwise, error(['unrecognized argument ' args])   
    7 d: [# M) k* O# r. hend   ! B, ^5 b5 R4 c" L* ^2 L4 D( j4 P
    end   : @1 D" A1 c3 ?+ w
    x = zeros(ss, T);   , `# K0 [6 }+ m- K6 w& ^0 p
    V = zeros(ss, ss, T);   
    0 u: R2 M1 _7 \8 ?VV = zeros(ss, ss, T);   
    0 ]9 b- v9 Z+ R9 Bloglik = 0;   
    % t6 r5 u" N0 U8 Ufor t=1:T   m = model(t);   
    % U) T: W# W4 D5 O  aif t==1   %prevx = init_x(:,m);   ) @# c; m) y, R) ^( J5 S
    %prevV = init_V(:,:,m);   . k) u( O$ }, L  q& q
    prevx = init_x;   
    ( R2 M1 R, ^9 `8 l2 v, NprevV = init_V;   
    ) [3 a' V& a; P, a% yinitial = 1;   / ^0 H; A: B6 Q( h! R4 ?
    else   prevx = x(:,t-1);   
    - `0 u) Y, N, `prevV = V(:,:,t-1);   9 v% O4 ?3 j( t) t3 ~8 _
    initial = 0;   9 k; p6 F' a% |
    end   % L- \3 a8 L( y, V! h
    if isempty(u)   # E- P' g: e- U& q3 H  F
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    ( x3 A* [2 i0 n9 ?$ kkalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   / O3 G, G9 N+ x' ~
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    * m+ w: W4 S! q0 m3 R/ N# T9 b; B     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   2 i+ W' A6 N. P
    else   
    2 `4 G! M/ W! {6 Ei = ndx;   
    4 z9 n; w- Z) ^1 \0 w% copy over all elements; only some will get updated   x(:,t) = prevx;   
    1 R' M# Y+ M  eprevP = inv(prevV);   
    2 a& z+ y1 c6 l0 x7 CprevPsmall = prevP(i,i);   & |! ~& \# k# n
    prevVsmall = inv(prevPsmall);   + b8 I6 A; t7 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));   
    3 K5 D. p1 o) o2 ^  x9 |- o* ~smallP = inv(smallV);   
    & J2 L" O, @! n! w' w/ ~/ N% sprevP(i,i) = smallP;   
    4 i  `- j  p5 CV(:,:,t) = inv(prevP);   3 G$ S$ E6 o2 }) ~/ O1 ?6 F
    end   & O0 _3 r) [* ]0 J( {8 e9 z# D
    end   ! G" A8 U+ q: i/ J
    loglik = loglik + LL;   ! ?+ z7 X7 Y9 `( w9 L7 r
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    ( e0 ^: n0 _3 L- i) P; _$ _+ zmatlab下面的kalman滤波程序
    # j6 M1 P1 U5 T# g' Tclear  N=200; w(1)=0;   / R- ^6 k4 i# ^- j. d+ e# I4 v
    w=randn(1,N)

    ; w# I5 A; |  M% @, E4 X! V# @$ L强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-7-9 13:10 , Processed in 1.011881 second(s), 83 queries .

    回顶部