QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4966|回复: 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滤波程序7 B% ?- _# a0 j. I, U, ]
    clear  N=200; w(1)=0;   
    % b: K1 B* n7 kw=randn(1,N)
    7 Z( v- `7 t/ \3 _; mx(1)=0;   
    9 i9 V3 A5 u4 i' Xa=1;   
    * @! D7 Y9 s! T4 }0 u# W+ _for k=2:N;   
    " G! V* O& V/ Q  K( {. G3 C. Y; Sx(k)=a*x(k-1)+w(k-1);   * [8 e- [, M+ A3 [" G
    end   ( Q# o0 D. [4 ]; o2 W3 G
    V=randn(1,N);   
    / Y( r. {4 X! @8 Bq1=std(V);   
    ' }- ^1 c( T) T6 R% V: yRvv=q1.^2;   * G% C; G* o/ }. L
    q2=std(x);   
    8 M' m# ?: N+ aRxx=q2.^2;   ( E7 P$ `, F: ~$ s& X  X( [( \
    q3=std(w);   
    1 t' D& o5 t! e9 O  ?Rww=q3.^2;   
    + e/ m4 b8 \5 v0 G2 ^c=0.2;   
    7 {. T- s& [1 H, c1 Y$ N, kY=c*x+V;   9 l2 Y$ T# O0 g9 a, }0 `
    p(1)=0;   
    , t- M* F3 r* u4 X& ys(1)=0;6 p9 |  Y7 {. }" V' y* ?* p, f
    for t=2:N;   ) n: `! ~! l1 Q: V2 O3 l7 D
    p1(t)=a.^2*p(t-1)+Rww;   
    & l/ ?6 X$ U* r1 o+ u  ob(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   % B& C* u+ |4 t( w/ _& h; A
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   5 [* ]' H8 o+ e6 y: h% A% i0 v+ j
    p(t)=p1(t)-c*b(t)*p1(t);   8 W% [1 `/ W- ~$ }; R: V
    end   
    ' X) X9 p2 M4 I' J7 Jt=1:N;   & R6 l6 I" C, \( A! `) c- r8 j
    plot(t,s,'r',t,Y,'g',t,x,'b');   . `- R. Q9 k0 u
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    ! ?7 [. ?8 B9 a7 ?. L% Kalman filter.   2 v5 i5 r4 F$ K& k0 _
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    5 r& d8 z) k: l- ?" L%   4 l# b+ w& @6 ?- Z1 v
    % INPUTS:   , \1 R3 C* j2 C- [# ~
    % y(:,t) - the observation at time t   + `# Q( ?; y' l4 _: X
    % A - the system matrix   , L2 P0 c8 r! D+ M
    % C - the observation matrix   $ l4 z& j% F0 Q. \
    % Q - the system covariance   ( F- ?6 e6 D$ P
    % R - the observation covariance   
    . D) l( O# O9 e# G2 g# D; Y  i$ A! B% init_x - the initial state (column) vector   - V3 z& y9 B- x5 l
    % init_V - the initial state covariance   2 @' ^) y  S! }1 X1 @; R
    %   
    : B4 I8 e4 G! P8 x; @2 e! Q) C% OPTIONAL INPUTS (string/value pairs [default in brackets])   ( F/ G3 O# R9 M$ e6 l; C1 Q
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    7 Y- `. R4 d% A% In this case, all the above matrices take an additional final dimension,   9 o% c! W. h  [3 M8 H
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   4 S- @0 g4 }- Q) q: v
    % However, init_x and init_V are independent of model(1).   3 O* s  N$ a# F
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    0 b: H* s# ~+ u' X, _, \% 'B' - B(:,:,m) the input regression matrix for model m   
    1 N8 k; o1 s0 |  W1 `- O9 l+ a%   
    $ Z; {$ D& W2 a5 B- L. @* H% OUTPUTS (where X is the hidden state being estimated)   
    $ K, m5 p9 u' R( ?- f1 D' m% x(:,t) = E[X(:,t) | y(:,1:t)]   ! U7 o2 l  C, O6 o) y
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    ' J% ~# K. ^7 U: x/ b+ o% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   $ J; H; v/ m. D+ N- U5 h; R
    % loglik = sum{t=1}^T log P(y(:,t))   % l  z: }) L' d* @/ M1 x! Y* s$ l
    %   % ]4 Y$ g$ v/ D7 {: p( {1 P
    % If an input signal is specified, we also condition on it:   $ ?) h3 y2 s3 {
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
      N+ H4 o. |! a2 O, k. R& H% If a model sequence is specified, we also condition on it:   
    # Y  i2 ~: b7 h: K% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    $ e: E8 W# N5 a[os T] = size(y);   
    - [* s2 X% N; i! }* Vss = size(A,1); % size of state space   , k( j1 s/ D, o4 @5 z( D! s: H: P& j
    % set default params   8 r' A  ]; b: n
    model = ones(1,T);   
    5 o6 _4 e- c2 L) {2 c: ?u = [];   
    ) s2 h, W- j/ }B = [];   
    % }2 G3 m( E" e( J9 w* Q4 B4 |; Indx = [];   
    7 ?8 ^0 T  }- W% Y9 oargs = varargin;   
    * A' h2 X' }7 q( N: b, ]nargs = length(args);   
    , m0 k: S5 ?2 ]. V$ `6 M9 vfor i=1:2:nargs   6 R- S# N$ e( x/ R& M* `8 }2 x
    switch args   # r% Q$ U/ d3 m) j, M/ ~% K
    case 'model', model = args{i+1};   2 D5 {3 E* A2 z8 N- m9 f; J
    case 'u', u = args{i+1};   0 W6 L) i* y* W8 O
    case 'B', B = args{i+1};   
    0 Z0 d4 a( B" V2 P% l9 kcase 'ndx', ndx = args{i+1};   
    4 C2 Z, x2 ~8 Notherwise, error(['unrecognized argument ' args])   
    , b* [4 t# Y% g3 [; cend   * ?: x! M2 k' O$ J" Q; s
    end   
    , M  D- b3 B* ]) s3 n* qx = zeros(ss, T);   0 h* K0 F5 }2 k
    V = zeros(ss, ss, T);   5 S: @, B: ?9 C) O1 N/ }( _
    VV = zeros(ss, ss, T);   
    ; w) h8 N! Q+ v( k! t# Yloglik = 0;   
    " B: n2 G; E% n! H+ c4 F2 Bfor t=1:T   m = model(t);   
    1 O  `8 J1 D4 d, r% v/ F: }if t==1   %prevx = init_x(:,m);   0 E  u1 Y0 n) u) ~* k
    %prevV = init_V(:,:,m);   2 v5 b. I8 H* h' l
    prevx = init_x;   ; y, K# o1 t/ R6 o: }5 |  T, T
    prevV = init_V;   4 z+ Z5 {8 O0 H8 C7 A
    initial = 1;   
    - q% N) K! Y3 M) U6 _+ X/ l3 d$ helse   prevx = x(:,t-1);   . M1 h$ t7 D6 s. O7 x$ F, d! [* E
    prevV = V(:,:,t-1);   ) X8 l  t& W, o* `+ ?; ^2 i
    initial = 0;   
    ! y; o6 ]* g& t# P: ?+ ]  W( V% fend   ) L& l$ d  x4 ^7 z6 q
    if isempty(u)   
    , q2 s$ ^3 `1 Y8 Z" ?% g1 M2 r! d# j[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    * w* t7 l9 L. @" ?3 ]7 s# P. Nkalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   % W! D) Q6 B  R3 b
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    ' ~. ]1 E9 x+ h! i     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   6 V& p, A& s0 S0 ?! a) a
    else   4 W7 n' X* ]) j" q) b7 ~
    i = ndx;   
    . x& _( }6 Y, K2 y% copy over all elements; only some will get updated   x(:,t) = prevx;   . k" ?9 w- Y& S6 R! C
    prevP = inv(prevV);   6 K* Y& |" e# p$ ]5 {" |# p9 C
    prevPsmall = prevP(i,i);   ; A" |/ |3 X& R. r( t
    prevVsmall = inv(prevPsmall);   + e/ m! Q( z& k+ g# G
    [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));   
    # _# ?4 @/ A0 q" F+ Q6 XsmallP = inv(smallV);   
    * U* Y) L. a* g' z, g/ MprevP(i,i) = smallP;   
    ( z- L1 H, k$ z: GV(:,:,t) = inv(prevP);   ' q# a& t# M0 t/ W6 Q' R, o
    end   ! L. }& ?) _6 K% j! M+ {
    end   ( x! B" `6 o2 c% v" k- E
    loglik = loglik + LL;   0 y# w) Z3 M$ v. Q6 m) Z" m  @
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    7 w8 z' m* H2 \4 l+ x- M: }8 ?, `matlab下面的kalman滤波程序
    0 X% J0 f5 Y' A* E6 Tclear  N=200; w(1)=0;   
    1 y9 [7 u6 k, U4 }w=randn(1,N)
    0 r8 _% v2 T1 r% F1 ~2 N; U
    强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-6-11 07:40 , Processed in 0.467429 second(s), 84 queries .

    回顶部