QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5136|回复: 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滤波程序
      z6 E7 r" \% z+ g" G; eclear  N=200; w(1)=0;   
    9 J/ ~, ^( `. j6 n9 U1 Ew=randn(1,N) 6 ]! Z1 d+ \7 N6 ~% [) c' l) L1 R
    x(1)=0;   ; R2 i* r2 s" D# y8 W
    a=1;   
      p. _4 ]% s# V6 i8 `+ r3 Dfor k=2:N;   6 q& O( C" ~3 t# B
    x(k)=a*x(k-1)+w(k-1);   
    5 n. y  z" S7 Y, }7 Send   
    - V( x' J& F7 ~  |! b+ xV=randn(1,N);     X6 p; L. D7 ~, n' k4 K6 ?" k
    q1=std(V);   - y/ \1 e5 \& O
    Rvv=q1.^2;   7 F& \0 _" x9 T3 _+ G
    q2=std(x);   
    ' ^( _& z3 z' h, f( BRxx=q2.^2;   
    + F. }" b3 ?3 nq3=std(w);   3 V( D6 m9 Y# h; t
    Rww=q3.^2;   
    3 M( b; l* f8 S4 mc=0.2;   & M  Y. x- c8 J& Y
    Y=c*x+V;   
    1 K) e: D0 t( M+ O1 {p(1)=0;   
    - R6 \) s( i% v" ns(1)=0;
    ) D, h4 ~* m, l2 gfor t=2:N;   
    ' o2 Y' F- T% E  u! H# f& O  x$ pp1(t)=a.^2*p(t-1)+Rww;   2 F3 y; N' A0 c# c/ }5 E4 R
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    5 V1 v8 _1 ^0 f8 J: ^s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    ' g, Q1 k+ b9 n4 ~7 q( ^p(t)=p1(t)-c*b(t)*p1(t);   
    9 z! ?+ _4 p7 y. |end   " Q  T1 S3 M* Q& X8 y1 f
    t=1:N;   " _0 Q- p0 S( `) p
    plot(t,s,'r',t,Y,'g',t,x,'b');   * o: P9 ], ~. x) K8 W
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    4 @# w7 e% t- z6 V% Kalman filter.   % |+ X5 a; j1 C8 O) r) h/ U6 u
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   # a/ g  K; A4 ^
    %   
    ; r. r4 A" ^6 C2 F. c; v% INPUTS:   * w7 e! b1 R( B, p6 i+ D4 R7 s
    % y(:,t) - the observation at time t   % t# _  ]9 h6 r' s8 [* e
    % A - the system matrix   
      t5 {( Q) J1 q9 X4 h2 g2 k% m' g- }% C - the observation matrix   8 t- }9 I6 X2 V' v0 s* N( {9 E
    % Q - the system covariance   
    6 `. w! B' N' d( {  @! C5 e% R - the observation covariance   * R: |; W0 x1 |/ n
    % init_x - the initial state (column) vector   
    " E5 r) R% L; [: c" w8 K% init_V - the initial state covariance   6 z: Q. D2 O2 _. Q2 u7 V3 r
    %   0 _+ L/ [* A) G0 t9 o
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    3 Q  ^# ]) L: [0 L; x* |. I% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   , |! r, ?& c# M8 J5 c! {
    % In this case, all the above matrices take an additional final dimension,   
    ' K9 q8 P/ F# R, `% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    3 ^' \: a! J0 ~% n% However, init_x and init_V are independent of model(1).   
    4 ^3 t) Y0 H" B2 U$ D" z% 'u' - u(:,t) the control signal at time t [ [] ]   
    2 b: _) C1 v0 c, g% 'B' - B(:,:,m) the input regression matrix for model m   " b, M/ z" W( w# L# X4 L/ m, X8 Z
    %   
    2 i2 Q  [# {" F$ M0 |. P' d. W% OUTPUTS (where X is the hidden state being estimated)   3 H: N7 p; I) q; j. r8 D
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
    ' }1 j6 a4 u7 L7 p% O% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   8 C3 I4 O' `2 B: X0 E  [4 e
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    . W- O5 ?' ~; ^% loglik = sum{t=1}^T log P(y(:,t))   
    / }% G( q* r& W! {" y8 f%   3 G# [. o' D* t5 y( Z
    % If an input signal is specified, we also condition on it:   
    9 ~3 h4 {# g7 k& |3 w6 S0 g3 P% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    ; M. Q  O& b, m0 e1 b- B% If a model sequence is specified, we also condition on it:   
    0 U) ^, N3 F( i' [; O% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   9 e  m9 p$ S% U. }7 K$ R
    [os T] = size(y);     O3 A* }3 i" t) `
    ss = size(A,1); % size of state space   
    ! R1 Q1 d$ g5 L, f8 H/ x% set default params   
    : J7 k$ f) |6 u2 K0 U; zmodel = ones(1,T);   " s4 c& ?: a6 T3 ]
    u = [];   / m! e  m0 Z5 W% s( J# Y; S
    B = [];   
    7 t' H/ q% v2 |ndx = [];   
    ; M7 @/ b+ Q- S7 i! c# O( E/ cargs = varargin;   * p+ a$ k1 _% y) |( B* ^0 @
    nargs = length(args);   - r: _$ f' _0 s+ ]: v
    for i=1:2:nargs   
      B3 \# Z) \( V* {switch args   
    8 G$ W& ]( n% _& e$ ]case 'model', model = args{i+1};   0 {$ Q+ z4 N1 l
    case 'u', u = args{i+1};   5 g+ J1 ~# B; ^4 @. W( E) M, H
    case 'B', B = args{i+1};   / n. R- A. U, q
    case 'ndx', ndx = args{i+1};   
    % M7 k: p! @# C1 }: Eotherwise, error(['unrecognized argument ' args])   * k+ g# e0 L5 c5 b. J
    end   
    , l4 d3 W8 @1 T! x4 k4 _- A' Pend   
    % ~# M' y2 ]; t4 yx = zeros(ss, T);   
    " U0 n6 G; R  o0 uV = zeros(ss, ss, T);   
    - u' E9 Y( y& K7 IVV = zeros(ss, ss, T);   
    & G1 y. T7 P' k7 D/ }loglik = 0;   * {- N1 ^1 o4 M9 m" j: x$ I9 {
    for t=1:T   m = model(t);   + c+ c0 I% M3 M9 `
    if t==1   %prevx = init_x(:,m);   ' N4 G0 r/ Y3 n9 J: B
    %prevV = init_V(:,:,m);   
    % J) f/ p" H2 Sprevx = init_x;   : O$ D6 G$ L% y' ~0 U4 Z9 n
    prevV = init_V;   
    1 H/ a! G% e( f* Dinitial = 1;   
    1 [* |* g' @( S6 Z- K- }. d2 Eelse   prevx = x(:,t-1);   
    ( x" _0 Z) k- z% H! U7 a, |prevV = V(:,:,t-1);   2 i9 n& u! h! Q
    initial = 0;   ' {+ ]( U/ Z; ^  J$ o8 Q% g1 ^
    end   # w+ p' _/ ^/ I
    if isempty(u)   ' ], Z4 z6 D6 h" [
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   7 K1 U5 e7 K! d4 X" O$ E3 O5 M
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   ) K6 l5 q/ x, Q* {/ u
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    / I3 n% [! d$ d  |5 `/ `     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    1 u( x. Y4 D' i4 Ielse   6 N3 v6 _* n. N) {# I5 O
    i = ndx;   4 D! `# L  ]& A  x, c
    % copy over all elements; only some will get updated   x(:,t) = prevx;   ( V# f( D& X6 x5 Y, Z
    prevP = inv(prevV);   
    ! s% S* ^6 H5 }% S: O# l$ g% m6 NprevPsmall = prevP(i,i);   
    * e2 I. w6 `. p$ PprevVsmall = inv(prevPsmall);   
    / V/ d1 x8 `3 H6 b# \9 H" 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));     G# K8 S4 c9 E) f
    smallP = inv(smallV);   ' \4 a* P  ~( g! ?! e
    prevP(i,i) = smallP;   * R8 B9 `' D7 {; K# f4 n* W, {
    V(:,:,t) = inv(prevP);   + `; z/ E  L# O% y9 Y
    end   
    9 n% d' i/ H0 Z; g! d* L* t) T8 m7 xend   
    ( H" e$ H6 `7 l% B* j4 z* G, Z7 _loglik = loglik + LL;   
    6 }9 H" F8 d# {" [1 ?end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组: 2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 8 d& M: c, q4 B( m# M/ y) E' T
    matlab下面的kalman滤波程序' Y- Y5 T* D+ z9 \- n4 s( y2 ]
    clear  N=200; w(1)=0;   - n" p. l) ^4 f; w: f( ~
    w=randn(1,N)

    ! ]& O. a/ _# m( y& ?7 x# z强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-10-9 04:06 , Processed in 0.431260 second(s), 84 queries .

    回顶部