QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5138|回复: 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滤波程序+ A' T' u3 }" e( H. `! m2 b  d4 [
    clear  N=200; w(1)=0;   
    1 S' }7 J% x% p6 ]$ q7 s0 o+ Gw=randn(1,N) ; @- s+ }  N' p4 y" q, o  Q5 |( t
    x(1)=0;   ( X% }, N4 D6 h
    a=1;   
    ; Q6 @+ C4 H- r3 Y+ O; L; bfor k=2:N;   
    0 S: c; y' V1 Q1 D: H+ \x(k)=a*x(k-1)+w(k-1);   
    8 E7 N0 g& Y- {" k& Jend   9 h* a; ]( I2 M8 N( o
    V=randn(1,N);   : o$ p) Z/ |0 C$ r9 u
    q1=std(V);   
    / o5 ^2 `$ H/ m5 i. g; uRvv=q1.^2;   
    : q( Z) d" Y, v) |$ {" w" Eq2=std(x);   ; B4 O0 A  V# {: j  j! l& S
    Rxx=q2.^2;   
    # Z( C# O- P! o$ ?* l7 ]9 s' E$ mq3=std(w);   
    8 s. l9 x/ ]* V7 O+ xRww=q3.^2;   4 O) V: O: W& J$ D% B4 O
    c=0.2;   
    5 R4 d" m$ r3 b4 |3 z$ nY=c*x+V;   
    6 ~) V  B6 f  X3 x: c. z' op(1)=0;   
    3 e  a4 H4 i7 F. t3 Gs(1)=0;
    . e5 S( |6 {) ^6 Wfor t=2:N;   
    8 s' r% V' s" U2 \! K( m6 R1 h9 pp1(t)=a.^2*p(t-1)+Rww;   6 Y3 C/ c4 W  g; Z  [1 L
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    9 z& g. N7 f+ s0 n2 k( B8 Us(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    4 A; J! e" W9 n. }% X0 ?8 c  Y( [p(t)=p1(t)-c*b(t)*p1(t);   2 q7 t6 f( W) b+ |* c
    end   6 l1 L- I: F4 D
    t=1:N;   
    . ], Q! L8 P( d9 tplot(t,s,'r',t,Y,'g',t,x,'b');   
    . v! `& J; E: c$ s# K8 F9 B& W# hfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   . ?9 _, a1 {4 }' U/ ^- k
    % Kalman filter.   
      ?, e! T( @8 Z! f3 J; X% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    & _3 i! B9 v2 {%   ; ?7 v3 Z4 \  p- R* F
    % INPUTS:   9 e8 U) i/ [. E" `1 q. N. |2 t$ }
    % y(:,t) - the observation at time t   
    ! L+ X, u" q) G' |; {: d8 u7 ?% A - the system matrix   ; l5 I( E8 d5 e. i, O* I
    % C - the observation matrix   5 V2 X( V; }$ l" U5 l
    % Q - the system covariance   . }/ [" n  Y2 S. b3 y+ j  o  N
    % R - the observation covariance   , R/ }! C: `- s/ q
    % init_x - the initial state (column) vector   
    % ~. w5 w8 l9 p# f7 G  |+ n$ T% init_V - the initial state covariance   
    # j& Z% K( [" R. A6 h$ `' }+ ^%   
    ( c1 k4 U( n( A9 Z$ ?3 }% OPTIONAL INPUTS (string/value pairs [default in brackets])   " k; h9 h% f: ?$ w
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    1 _4 I; X  _* ~- R. g% In this case, all the above matrices take an additional final dimension,   
    9 \$ K. n- Q- Y8 z% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   5 j/ }! c. o1 \$ z  ~
    % However, init_x and init_V are independent of model(1).   7 _1 r! J9 u+ C9 X3 z* G# j' d
    % 'u' - u(:,t) the control signal at time t [ [] ]   ! d. K# J1 J8 o) r
    % 'B' - B(:,:,m) the input regression matrix for model m   
      D2 }  F% d' u3 T( r  H%   
    " o7 C+ i+ e3 ]& o* w0 @% OUTPUTS (where X is the hidden state being estimated)   " V0 k) n4 c7 P! c' g
    % x(:,t) = E[X(:,t) | y(:,1:t)]   6 z6 F3 s7 `: d# m$ _
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   ! g: ^% e8 v+ K" ~' j$ r8 r) {
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   8 J( v* J5 |+ L! \
    % loglik = sum{t=1}^T log P(y(:,t))   % q2 @9 q( X5 A! D  P) y
    %   2 Z7 a: ~; z- b  {* L$ A
    % If an input signal is specified, we also condition on it:   * l; s# z- u% q; l
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   . \& g! C6 t5 V# c
    % If a model sequence is specified, we also condition on it:   
    $ ]# n" n" G) x5 T% g/ F% p% C+ {% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    # q6 |6 C$ J1 s: i- N$ v! ~[os T] = size(y);   
    ! p7 b6 @7 n( A& `ss = size(A,1); % size of state space   ( @2 i2 o: [$ E" W# B: Z  ^* A/ y
    % set default params   # I" t: o, ?: R4 i/ }  R- u) `% L
    model = ones(1,T);     q4 V% m7 z) |( h+ T9 _( c$ H) l/ I9 _
    u = [];   + h+ @  J- O& K+ H
    B = [];   
    8 |7 {+ c: }7 E4 C, N! Qndx = [];   
    ; a& Q6 q! N: \args = varargin;   & N. x6 b' w2 }/ K9 X- y) C4 @2 `
    nargs = length(args);   
    , [% U7 D- D" `: E  l& U6 E  k9 pfor i=1:2:nargs   
    . h% U$ D) ~  _4 @% I+ m% g0 pswitch args   
    ) U0 k" w" j5 y' icase 'model', model = args{i+1};   5 H. c* q! ~1 h5 a/ `9 o6 q
    case 'u', u = args{i+1};   
    ; Z7 ]& `; Z" f$ T; ]case 'B', B = args{i+1};   . @) `2 Q5 V6 G' ]
    case 'ndx', ndx = args{i+1};     `4 v8 h! R6 [$ x, E9 T- I& Y) a4 a% u
    otherwise, error(['unrecognized argument ' args])   1 M! O% L, }7 [2 p+ n8 J5 S
    end   
    , Q& d& M: P0 O. v% _/ vend   , p) f. g, A$ W; [5 Z
    x = zeros(ss, T);   
    7 W0 s# Z. P; O" i4 rV = zeros(ss, ss, T);   - ~; m4 M# z" ]" v! r1 k
    VV = zeros(ss, ss, T);   
    3 F: A. Z, ?* _% _* k1 s" |loglik = 0;   
    ; H& [$ ?; j& X: L/ _for t=1:T   m = model(t);   1 w/ y5 s/ V( N7 T7 K  s
    if t==1   %prevx = init_x(:,m);   6 w7 g, \  p0 [' n! g4 M/ X; H
    %prevV = init_V(:,:,m);   
    * H  d9 b% X, i; _prevx = init_x;   
    % u, d. C8 w, J: jprevV = init_V;   
    $ u$ o7 ?" S# k( d/ G1 n# i* ]0 rinitial = 1;   
    1 r  R: l5 O% \- L4 p" s$ Eelse   prevx = x(:,t-1);   
    / S) w& t7 b7 I: O3 ^4 j! m6 J: E& lprevV = V(:,:,t-1);   
    1 p+ b  P3 i2 p) L+ y% B+ ^# O, Winitial = 0;   
    - A$ U6 g; R# B) j9 K  v, ~, Iend   
    $ J. j4 \7 A" }if isempty(u)   7 o1 n, w" ^, x: r$ T* P
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...     f2 X$ r2 a: G, w* A$ h+ i
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    . x" C6 r% q% [& L5 ], G9 g$ I  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   3 w; i. o3 W( g# T
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
      Z+ m3 @8 F+ _' n* H/ }6 A4 Felse   , b6 H1 q9 X# K$ E2 G/ L% ?$ o
    i = ndx;   
    ' b% s$ [, ^% [) p8 T" D% copy over all elements; only some will get updated   x(:,t) = prevx;   
    ) T/ B7 ~* `! x. m* UprevP = inv(prevV);     j5 J5 S/ L5 W8 e* B% T0 |
    prevPsmall = prevP(i,i);   " F7 T+ P! O* `% q6 A$ U1 W
    prevVsmall = inv(prevPsmall);   
    9 k8 H9 a! j1 K( c[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));   
    - z8 l+ y  d9 jsmallP = inv(smallV);   
    / N0 c& a, G4 h. i3 LprevP(i,i) = smallP;   
    5 f5 v* K7 \2 Q4 Q& J1 h, XV(:,:,t) = inv(prevP);   
    1 V+ d+ q2 t2 }5 i% Y8 send   8 ]6 X) M. ~8 [4 j! p7 _
    end   ) W& ?/ ]/ T4 j
    loglik = loglik + LL;   
    ; ]0 S  e4 t& B' W+ p  n) k1 s' j0 h& d( dend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组: 2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 $ s. R/ d4 J' M3 R
    matlab下面的kalman滤波程序% \) ?4 U$ N) b8 h$ t1 Z4 }" a: P" y
    clear  N=200; w(1)=0;   
    ) U6 ~" G8 Z6 ]+ h: |w=randn(1,N)
    # u1 |0 n- z/ d  z8 L; r9 D' 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, 2026-10-9 05:23 , Processed in 0.484331 second(s), 84 queries .

    回顶部