QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5046|回复: 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滤波程序
    " l# A* s3 {6 A8 }2 oclear  N=200; w(1)=0;   : n& |9 r0 H0 J; _; G# h+ Y, @
    w=randn(1,N) - X, O5 D5 B$ S2 d. T2 w
    x(1)=0;   9 K/ B( \6 S6 w$ M) t5 t
    a=1;   
    ) K" {7 T% T$ m# t# y& a/ F; xfor k=2:N;   0 e8 M0 q/ {8 w, v6 y
    x(k)=a*x(k-1)+w(k-1);   
    7 p7 ]) a" L% kend   
    " z7 Q" ?. i$ l- w4 aV=randn(1,N);   
    2 L2 ?) ?5 M+ H& lq1=std(V);   3 c1 t8 ]* U+ Y4 `1 Z7 V. P
    Rvv=q1.^2;   
    6 H0 H+ e9 F; Q/ {: p6 D! O, @q2=std(x);   . S% ~6 O! Z% D- b& W4 f' v
    Rxx=q2.^2;   $ O+ z9 x& i. {4 c$ y7 S6 F6 P
    q3=std(w);   ' Z- v' a5 a7 ?" T0 n
    Rww=q3.^2;   
    7 g3 V5 ^+ S2 i* [& Y  tc=0.2;   7 R. q; Y3 F- t; ^3 r! F3 C
    Y=c*x+V;   
    9 Y1 H# d; x1 j; s# ip(1)=0;   0 m8 S! O! ?4 H1 M
    s(1)=0;
    + S2 ]. N8 D$ J' h' n, {% @for t=2:N;   
    % [# q( r$ B7 s0 ~3 Ap1(t)=a.^2*p(t-1)+Rww;   
    . Y5 g( v' p" K8 M* bb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    % A- z8 K; L' }2 s. ds(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
      E5 s/ }9 U) P; o% {" F3 Sp(t)=p1(t)-c*b(t)*p1(t);   # L, j% ~3 A1 k% G3 Y: M7 N
    end   
    , B. r" z0 k. x2 q8 d# Zt=1:N;   
    * Q7 Q# P) z: B0 k  `plot(t,s,'r',t,Y,'g',t,x,'b');   
    : b  J6 z8 \2 m7 B+ D- ~6 wfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    3 \( u) V2 }, C; d% Kalman filter.   , t1 P3 |! _7 r' b& h
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   4 p1 o! |. T" R6 A" `* Q
    %   
    * F3 Z6 y( _. m0 a% INPUTS:   
    4 x! |0 ]! S8 y6 Z- W% \% y(:,t) - the observation at time t   
    ' g  R8 U! @  B" K8 c% A - the system matrix   " b/ r# R0 K! L+ {
    % C - the observation matrix   
    4 y4 S0 [9 z2 c: E& Q% Q - the system covariance   1 s  W- p3 ~, c
    % R - the observation covariance   
    8 q, b% U0 o: x; Y! o' r) I' R% init_x - the initial state (column) vector   2 a0 `- S* f3 {, V
    % init_V - the initial state covariance   0 |; z9 D, K" a
    %   * c4 q4 o" W- L  l8 [4 x: j
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   ( s  S& V7 ^' A. \( c
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    8 u. P; m) g/ t- j% H% In this case, all the above matrices take an additional final dimension,   
    9 q$ U( w0 E6 X( h. [2 z9 S; W0 C% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    , a) o# p# ~! v- v+ Z% However, init_x and init_V are independent of model(1).   3 U# E& d$ r. c5 @9 ]
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    $ w! _- N6 e7 I5 o# [! ~* {% 'B' - B(:,:,m) the input regression matrix for model m   ; h  A3 s. e, ]! f  Q, c, ]" N' g, X
    %   
    # }/ c4 D7 u- V0 S8 ~0 M% OUTPUTS (where X is the hidden state being estimated)   4 G# h1 {/ |7 q2 a) Y4 W. S* v
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
    * ~) |6 d4 |2 ~. U% s% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    , A- V, [) g# t/ x; Q) I' K- ^% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    ! G; G* x, }0 |8 T8 ]3 [3 l% loglik = sum{t=1}^T log P(y(:,t))   
    + c  S, g4 w% q) q2 D7 l%   
    . x$ _- H1 B7 a% If an input signal is specified, we also condition on it:   
    # o! ^. f, H2 Z: u6 [6 U3 ^! u; z% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    0 o/ c; {) A, d( M' z% If a model sequence is specified, we also condition on it:   ) H: x3 Z) e" G' Q. t4 ~
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   + s+ F. `2 p! `8 Q* X% H9 U' A7 u
    [os T] = size(y);   2 e- c# c' Y& f  Z/ @* q  v
    ss = size(A,1); % size of state space   
    9 {& X& d: G7 l8 O# Y! g1 S% set default params   
    ! ?8 p3 @. j; r+ omodel = ones(1,T);   
    & R9 S0 m: o* s" h5 J  Mu = [];   
    ) L% h+ u+ v% G5 S3 AB = [];     w8 ~( O) n$ ~2 t/ ?
    ndx = [];   
    8 A3 g6 ^2 b  x1 i* s7 }2 V: uargs = varargin;   
    5 o' {2 ]9 T% |, a* Xnargs = length(args);   2 R6 ~2 s, k2 b7 V/ I# [9 W. g0 M
    for i=1:2:nargs   
    + B& P- D, `5 _, Y0 H0 qswitch args   + {& a2 S( ^7 L: q
    case 'model', model = args{i+1};   1 M6 ?) {* x: x% S3 }
    case 'u', u = args{i+1};   7 l( `: X8 v1 c9 O  W6 A, A  M% {
    case 'B', B = args{i+1};   - d  f/ N% n; |, M. d
    case 'ndx', ndx = args{i+1};   * s9 D- y/ }* c: G# _& Q" c
    otherwise, error(['unrecognized argument ' args])   
    . \+ o, h% w2 Zend   
    . O; M$ ]/ h+ _: ?: {end   . ~1 B  e+ B9 l% `/ I$ H6 r# Q
    x = zeros(ss, T);   + M+ e: {$ [, }1 b1 K
    V = zeros(ss, ss, T);   
    1 S0 W/ k& e* B3 s* g/ XVV = zeros(ss, ss, T);   
    & k6 @! l2 [) \6 E# i1 Y1 Uloglik = 0;   
    6 @- j* G- A- q5 v4 k! W% mfor t=1:T   m = model(t);   3 Z- Y+ \2 ~/ Q+ I4 c) C2 i8 N
    if t==1   %prevx = init_x(:,m);   
    3 {9 n0 s; V; v' U( k7 K( [; U& @2 x0 Y%prevV = init_V(:,:,m);   0 E1 ~' @: f& P  @
    prevx = init_x;   1 F6 Z# i& i8 P4 Q, B" s9 g( [
    prevV = init_V;   ( m- f6 f; @) S0 i
    initial = 1;   
    2 q( L( Z8 _+ K& _  Lelse   prevx = x(:,t-1);   5 H: N3 @- G8 H, k* G8 @% f+ t
    prevV = V(:,:,t-1);   % w4 U' t& d/ G/ L
    initial = 0;     `1 y+ X. G2 l- `
    end   
    9 l0 o$ Y3 j/ a9 Y) T5 }! Lif isempty(u)   8 d; V" \9 j6 K9 O" e) m. k4 n
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   # p' [8 Z! {( J0 d; s
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   $ p) E% T( d4 L2 l' v
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   + `( X6 M+ M6 f) v4 K
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    , F1 _( ?0 r) J2 Aelse   
    3 Q- o% c, D$ w/ ci = ndx;   % C9 [  \( ?* A* ?4 [8 h
    % copy over all elements; only some will get updated   x(:,t) = prevx;   
    % h' q" v+ D% H, B8 `+ \prevP = inv(prevV);   
    4 M/ l6 @- k3 aprevPsmall = prevP(i,i);   
    5 {& l+ G0 l0 `4 cprevVsmall = inv(prevPsmall);   * T5 e3 z) W' `" p" m
    [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));   0 ]# R8 K. n5 c/ w$ I6 `. {. i
    smallP = inv(smallV);   
    5 y$ Q+ r4 A' M- ^) ~prevP(i,i) = smallP;   
      {. o+ n7 H) x, rV(:,:,t) = inv(prevP);   
    * @/ K; c, j# I  Dend   3 C, G+ H+ j5 M& P2 o
    end   6 g+ m% f: n- Q! f0 d& I* l$ |
    loglik = loglik + LL;   
    & R- L" k6 P0 cend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 7 ^8 O% S3 c! U! d9 u  x, f
    matlab下面的kalman滤波程序
    $ g9 y) O3 u7 y" ~2 w7 k! xclear  N=200; w(1)=0;   
    3 E- p7 h* O" |; Z  W+ ]+ {& rw=randn(1,N)
    # T  ^, u0 P/ m; o
    强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-6 05:02 , Processed in 0.558735 second(s), 84 queries .

    回顶部