QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5131|回复: 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滤波程序
    . p% G& v5 H/ Nclear  N=200; w(1)=0;   2 L' X2 L% [/ {0 S( J  b; z2 F7 G
    w=randn(1,N)
    ' _# o8 t' i" b4 }x(1)=0;   
    ) o" h8 D) ~. ^! z$ k3 A. |! ^a=1;   
    ) i5 }& [; v8 r- b2 Xfor k=2:N;   5 r7 i4 g5 j, d  e) q7 `- a; t
    x(k)=a*x(k-1)+w(k-1);   
    . A9 ?2 \( c% D) Q- T% l; b8 ?end   
    7 c5 a& Y5 c8 Z, iV=randn(1,N);   / ~: P) a- _- t% z$ L7 ?2 w- E8 Y
    q1=std(V);   
    ' E3 d/ I# @2 X1 G- e5 fRvv=q1.^2;   
    - j- \4 P) M# |, z: @$ iq2=std(x);   
    3 k; t: o5 l, D% yRxx=q2.^2;   
    7 V1 D6 c% k/ }$ Z% H/ Nq3=std(w);   ; y6 p$ h" Z/ T
    Rww=q3.^2;   
    7 L' k$ |8 c3 I& |4 D6 @6 u; pc=0.2;   
    ) z& S0 i( Z; y3 k& R, cY=c*x+V;   
    + m0 f% c  u0 t" L8 tp(1)=0;   
    / c4 X$ v/ K8 W* O; \1 b9 U, Gs(1)=0;: M( @8 l3 M# P. `. p6 R- L
    for t=2:N;   
    / Z8 X3 t2 I2 `$ Y/ M+ {  \p1(t)=a.^2*p(t-1)+Rww;   
    4 N5 O. z7 v3 Ab(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   
    5 i% R# n5 i- q9 S+ `! s/ J$ a8 H0 xs(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   9 ?; v9 X: n7 P4 |0 p* y  c
    p(t)=p1(t)-c*b(t)*p1(t);   
    ( M3 o: w4 b" H! U# f  F6 j0 Z3 W2 f6 dend   
    ) R( U' g, f% x1 c0 et=1:N;   
    , f9 w! a! z, Bplot(t,s,'r',t,Y,'g',t,x,'b');   
    7 }7 Q$ _( C! ?* Yfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   3 Z3 V2 ?2 b3 h  c1 F
    % Kalman filter.   
    * U# y% p# K! _% x0 L& U5 ]% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    0 u! m( H! k5 F1 y6 R# j. ~) L3 ]%   
    " E  [9 f) b' t/ n! H% Y9 M/ H% INPUTS:   
    4 Q1 o2 j/ s! M; j% V1 z+ V% y(:,t) - the observation at time t   
    % |! T9 ?: j8 n. n" D, ^- ?% A - the system matrix   & A) M/ C  F2 q. C! I; p
    % C - the observation matrix   " L" z$ N! j, {8 d
    % Q - the system covariance   
      ]% f# x7 y  r$ t; Z% ~, K# x) s% R - the observation covariance   ) b' f8 ]- B9 b  L0 ^+ [
    % init_x - the initial state (column) vector   
    8 ~4 D, N! U( Z% @# q8 x$ l% init_V - the initial state covariance   
    ' P5 U% E" O; B% z8 p%   7 P' k) V5 S9 ]
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    / O3 O' k+ }6 e2 r% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   # U' w. x/ d. K8 O3 r" K
    % In this case, all the above matrices take an additional final dimension,   3 `  d0 o0 ~' b& @. m6 w& M
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    % h! ]) Q8 y% y3 `# |$ }  w0 P% However, init_x and init_V are independent of model(1).   8 b# R! V& s# u; F5 A. X. L
    % 'u' - u(:,t) the control signal at time t [ [] ]   6 w3 E$ V0 P# O3 ^3 m
    % 'B' - B(:,:,m) the input regression matrix for model m   % W8 F& m4 F1 G! G: w/ R
    %   
    4 C& K! Q( {3 D% OUTPUTS (where X is the hidden state being estimated)   " n0 {( D( B9 H' W  _! [
    % x(:,t) = E[X(:,t) | y(:,1:t)]   7 o' {' l& M5 L, h$ n+ W4 F- ^
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   4 h) F  g/ y; x9 l6 n7 _# f7 E
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   1 U; E2 V  o3 R1 s' \: ]
    % loglik = sum{t=1}^T log P(y(:,t))   
    6 S6 U2 y2 G9 v( q$ {* `/ s%   3 g7 R- m" H& F  \/ l( }
    % If an input signal is specified, we also condition on it:   ( W+ [3 f7 x/ l
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   / N) G' d- k9 w; f9 w0 `6 P
    % If a model sequence is specified, we also condition on it:   
    4 }) G1 j; J% S" t$ b% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   5 D- X- l3 U) U
    [os T] = size(y);     F: N- U# r6 [
    ss = size(A,1); % size of state space   
    # E: }4 C7 d6 a) G# T* g% [6 S% set default params   
    1 x! A* G7 z, ]/ ^& wmodel = ones(1,T);   
    , w4 z$ {& \6 |u = [];   
    ' f6 A0 ~  ?6 c! {3 F% v' kB = [];   
    . u+ X& g) f; e- W( cndx = [];   
      E7 c  I* }" t5 X; i! m* Uargs = varargin;   
    9 h. E: E0 ?2 J) n/ B5 F. cnargs = length(args);   
    ; p; z$ u5 R/ Hfor i=1:2:nargs   
    ' Y! X' K% n% Y, H+ j$ p( Vswitch args   4 @! O, b' H6 D4 {1 n! K6 S! n9 t
    case 'model', model = args{i+1};   8 c& ?2 j7 m2 g( t* l
    case 'u', u = args{i+1};   ; W' k; W; M' `! H
    case 'B', B = args{i+1};   2 L! N. ^2 U' Y3 j* d- ^
    case 'ndx', ndx = args{i+1};   
    4 N& K8 ~4 _2 Qotherwise, error(['unrecognized argument ' args])   % B6 O  p  e3 U* J
    end   + X) u$ j1 H7 Q6 V' q* A: C
    end   
    " W9 b- H$ t8 @+ r( i! W" ?9 lx = zeros(ss, T);   
    ) O5 U4 x( }+ F6 |4 c" |8 xV = zeros(ss, ss, T);   
    % X- O# S8 s- m7 H% T0 GVV = zeros(ss, ss, T);   
    0 \* M, l) X3 O, R9 }* _9 k. ]' t2 |& `) cloglik = 0;   
    ; M$ N: }0 k- C! @6 ?for t=1:T   m = model(t);   
    & N" _! @: `2 Iif t==1   %prevx = init_x(:,m);   7 f% |" O$ ?6 x* @
    %prevV = init_V(:,:,m);   + n6 O- \+ l; o( I! e3 l, E: h
    prevx = init_x;   9 H5 ^6 ~7 ^! k; l) Q
    prevV = init_V;   
    8 C7 ^7 m* A( Z) O# ~initial = 1;   8 |7 u( _/ {% T, ^6 U& }; }
    else   prevx = x(:,t-1);   
    0 w' p- C6 o# f* k) aprevV = V(:,:,t-1);   
      B- P7 s) M# C& P6 f) tinitial = 0;   6 {* r7 @& p; o2 K1 I0 S
    end   ( }6 ^9 [( Z2 [  W7 o9 T
    if isempty(u)   
    * m  ^! A1 M0 E0 X4 a2 L0 y[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    - F; \* f8 x! I' _kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   0 K# b, w: ]. t, s& w% \
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
      Q/ T# |1 f: @9 X     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    - }( i7 B0 ^3 |/ l* Y; Ielse   
      a1 L4 e% |' @/ S* H; ki = ndx;   8 ~( z! ]1 W( U, H
    % copy over all elements; only some will get updated   x(:,t) = prevx;   3 t% H- a/ Z  V( I. w2 p
    prevP = inv(prevV);   ! X) n/ C7 t3 y' \8 ^1 E& ^
    prevPsmall = prevP(i,i);   
    ; M' m9 `+ ]- {  u5 L, JprevVsmall = inv(prevPsmall);   
    6 j& ^8 X$ ~7 A- [[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));   
    ! @  x* _  a, o2 \6 CsmallP = inv(smallV);   ) n4 B7 t; L9 l8 S* X
    prevP(i,i) = smallP;   * C; G1 T4 m* K) ?4 [$ M% }/ w4 }
    V(:,:,t) = inv(prevP);   
    ' m* O' H9 J  B) Y' k" K: Qend   
    3 y) c( o2 V+ L- r$ Y. Xend   
    * o* A; ~6 N6 J  A- P7 n# s5 qloglik = loglik + LL;   
    4 ?5 D- c5 ?7 V3 L' n: I2 @end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组: 2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    2 i  N/ p" R/ [# K3 g  Fmatlab下面的kalman滤波程序5 Y& r8 C% L/ o# j! b  w! V
    clear  N=200; w(1)=0;   5 q4 o" g6 I) W! Q+ V; D5 y' ^
    w=randn(1,N)

    4 `) I! I* ~4 Y% O" b9 w强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-8 09:44 , Processed in 0.634222 second(s), 83 queries .

    回顶部