QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4878|回复: 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滤波程序
    - |6 c. A* c" M9 r4 r/ sclear  N=200; w(1)=0;   - V5 u( w( n" d4 _4 [9 g( o
    w=randn(1,N) & k% [+ {" F* W
    x(1)=0;   0 v7 O. H6 M, q. F  g
    a=1;   
    2 x0 _# B) l6 A1 ]7 A$ hfor k=2:N;   
    % v9 {3 h  o" _# I& k) Ox(k)=a*x(k-1)+w(k-1);   
    * S$ U, S9 h% ^- ]end   8 u3 b* ]9 r+ R& Y6 Z; z
    V=randn(1,N);   
    # E3 g0 F& X8 ^. W2 Vq1=std(V);   " `3 @: _# |6 K  w$ e( r
    Rvv=q1.^2;   & [0 p9 ]! T. B* t8 Y
    q2=std(x);   % k. r& v: R4 J
    Rxx=q2.^2;   & D& i5 Z' S5 a  `2 @4 g
    q3=std(w);   
    * z; T9 {# A4 ]8 G2 H8 C# P7 q) BRww=q3.^2;   ) g0 [% {+ S3 e" I( j8 N7 L
    c=0.2;   1 k/ E+ O7 X/ W1 _$ ^
    Y=c*x+V;   " Z8 A7 `/ V1 h/ O  M
    p(1)=0;   
    0 F4 S& h  |: r$ @/ y, S3 G6 [" Us(1)=0;
    ! u6 L+ c1 O# y1 ~% w: i% c5 C, Xfor t=2:N;   
    ( N' Y, T* Q" t1 q  N1 v7 fp1(t)=a.^2*p(t-1)+Rww;   ; z) R- {; ^1 I& A) G1 w# J
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    8 D2 H1 m9 I% p) t9 }/ j7 S4 O0 ?s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    ! F; l' L6 I. T( u! Vp(t)=p1(t)-c*b(t)*p1(t);   $ @7 }- X- m7 \. h6 P$ y  N- H4 I: j  h
    end   8 J- j* Y1 ~" h: [
    t=1:N;   . i* F3 _4 U) d! i+ K% b. \+ C, S
    plot(t,s,'r',t,Y,'g',t,x,'b');   
    1 N2 ?) M+ P- m/ z  X/ i0 d6 Qfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
      A3 R) z8 j7 X" w9 }/ Q' @% Kalman filter.   : n5 l, d) Z( r" Z: r
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   ( I) \8 P! v9 U( Y! a
    %   
    2 {& r5 `9 g% E, O( n. G% INPUTS:   6 g/ G" N; ?/ W
    % y(:,t) - the observation at time t   8 g& \* d  L6 x* k
    % A - the system matrix   : _8 k6 G, p" p( n/ z
    % C - the observation matrix   
    ; b; p' I. p4 c! ^/ c' g/ y# b  Q% Q - the system covariance   
    , `: P+ Q+ w( N  _1 ^3 {+ L% R - the observation covariance   & B' y7 s. w5 _* c6 l2 |
    % init_x - the initial state (column) vector   
    ! h4 z% X1 G2 Q% P1 m% init_V - the initial state covariance   ! b6 ~; D1 y$ V" \
    %   7 Z5 e- P: \- V
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   ' E$ `, b9 D; v! Y6 H1 O
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    . k+ i* F! Y( y+ I% In this case, all the above matrices take an additional final dimension,   # ^+ m& B! c2 N  k, p
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   , ~, |0 H; I! O1 ^5 D" t
    % However, init_x and init_V are independent of model(1).   
    0 h" f3 R7 ]2 B' J" E1 h& \% 'u' - u(:,t) the control signal at time t [ [] ]   
    # O/ _  \% s- U% 'B' - B(:,:,m) the input regression matrix for model m   
    4 I  v0 j3 @5 `" ~8 ]6 g%   2 O6 M& }+ u# l
    % OUTPUTS (where X is the hidden state being estimated)   6 I$ Y! S' C) C4 a, D& G& q" u
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
    2 A! p% t( q: |9 Q! e8 ]! p& V% B% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    " k5 D# L; \; \7 f8 W1 O2 r% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   * V# u6 `+ v% b- \, Y0 v: ^$ i$ M
    % loglik = sum{t=1}^T log P(y(:,t))   / n+ |1 R1 }6 F5 T0 U
    %   % g3 G. i( |' D4 y5 s0 @
    % If an input signal is specified, we also condition on it:   
    ; g; z2 v# u3 ~  K% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   ( S# \$ B* h7 `1 N0 f
    % If a model sequence is specified, we also condition on it:   
      h! F! U3 \  J5 Q- ~  ^% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   + ^2 w& c3 t, x* J6 f3 {9 L
    [os T] = size(y);   8 d4 m3 s1 T; e) t, Q
    ss = size(A,1); % size of state space   % w9 |8 @0 Z& I: y0 w1 I
    % set default params   5 K* q# }2 f  s4 y2 n$ o' N4 Q; L
    model = ones(1,T);   
    0 X: u2 b9 e3 Y* su = [];   8 P7 u# |+ D- [% c' r/ Y+ c
    B = [];   
    , J# m8 S, [) B8 p% i3 @  [% x* ~ndx = [];   
    3 d( r, d0 H* z6 fargs = varargin;   
    + u3 |! Q) x; |% q& E+ bnargs = length(args);   ; h& B+ ]' p7 q! _% d
    for i=1:2:nargs   
    ' r$ k( e' u" q7 K7 J, o) Tswitch args   # _8 r! l( N; L3 M
    case 'model', model = args{i+1};   
    1 w7 q- m  t; kcase 'u', u = args{i+1};   ! ^: F4 C4 `7 v  H, K, J
    case 'B', B = args{i+1};   
    + X7 w9 ]1 e, _% p' i: `case 'ndx', ndx = args{i+1};   ( y1 E3 V9 v# Z& b
    otherwise, error(['unrecognized argument ' args])   ) F6 B2 q3 ?9 v
    end   ' l3 e5 P& V+ T$ {& v
    end   ( ~% ^4 g2 M/ ?
    x = zeros(ss, T);   % r1 }& V( x: O& I0 q; h8 Z
    V = zeros(ss, ss, T);   2 H% ~6 n' k$ C( e" n1 A  z
    VV = zeros(ss, ss, T);   
    & E5 \9 N' X' y, k$ U) `loglik = 0;   & @2 |$ q" ?4 w; y
    for t=1:T   m = model(t);   
    . [, R; q; k5 f1 p, Xif t==1   %prevx = init_x(:,m);   
    ! d4 R" ?, Q  E; u& d%prevV = init_V(:,:,m);   
    + h6 F0 a6 q) R, s% n2 s. m+ aprevx = init_x;   $ Q% ]7 Y* L/ O
    prevV = init_V;   
    9 p( q3 r9 ~4 U  r9 q& _8 b9 |" ^initial = 1;   / Q  D4 g6 L, y! I8 ^  i
    else   prevx = x(:,t-1);     P8 n0 z1 F" A2 b1 M) W
    prevV = V(:,:,t-1);   : D7 k8 x( [) N; h6 d$ z
    initial = 0;   ! O' n4 {' ]( R" X, A
    end   ) j! k  r( Z) |. v1 e& \
    if isempty(u)   4 ^) o  o5 |9 u9 D% ?
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    % ?& J' M' D8 Ikalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   & e  p9 q4 ^. w0 F/ U
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   ( Q3 s0 g# k* o, Y: l/ S
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   7 t1 u* ?6 _" }
    else   
    / N8 [2 C- N  Y7 Mi = ndx;   
    ! _9 o8 f) {1 x: s# [0 F% copy over all elements; only some will get updated   x(:,t) = prevx;   + q0 Y* `6 e+ }" c) R
    prevP = inv(prevV);   & M8 J- J) U, p1 |; _& l7 n
    prevPsmall = prevP(i,i);   
    ( Q1 w& z8 U% d2 ]+ m& jprevVsmall = inv(prevPsmall);   
    # s- l) u* k/ a3 B" c& u- |4 e( b[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));   2 _( l+ Z1 |5 V3 I
    smallP = inv(smallV);   / E/ Q# ?  u) W
    prevP(i,i) = smallP;   # K9 J% n, @# q5 V5 H7 s0 z
    V(:,:,t) = inv(prevP);   - O7 @9 f9 i1 Q  ?/ Y
    end   3 g# K/ y8 }! r6 O# o0 K
    end   
    5 Z6 ~" J% B) ?: K* Q% U$ nloglik = loglik + LL;   
    * k; i/ W7 B% [8 Pend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    , {% S% d$ t: D* i4 lmatlab下面的kalman滤波程序3 W: ?3 [2 M1 |
    clear  N=200; w(1)=0;   
    4 z+ T% l9 _$ k9 `. k+ j: Iw=randn(1,N)

    : p: L/ H& g7 B* }0 V强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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 15:18 , Processed in 0.601292 second(s), 84 queries .

    回顶部