QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4965|回复: 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滤波程序! f3 ?5 f& o+ i6 ^2 I1 t% |% J
    clear  N=200; w(1)=0;   
    % g% l* l  i4 \6 b2 P# Gw=randn(1,N)
    8 o6 C4 Z, K) _0 Fx(1)=0;   2 k: L$ K9 i' ?" W
    a=1;   , G: Z( N( {: k$ Z6 u4 A. D3 g! u
    for k=2:N;   
    0 E) K) h+ s& Nx(k)=a*x(k-1)+w(k-1);     W1 `; K8 d# h+ T  C
    end   
    8 O& _) \2 h. k: G' `: f; {7 p4 v6 w! oV=randn(1,N);   
    5 r8 E5 c  f6 w2 Pq1=std(V);   . ~  Z; `1 \0 v) I7 R
    Rvv=q1.^2;   ! s! v! W6 y* k
    q2=std(x);   2 b: ^1 n5 V9 u
    Rxx=q2.^2;   ' u( @4 P, z6 O7 K% |
    q3=std(w);   
    7 a$ r1 W# \+ g. M# h5 l6 v* eRww=q3.^2;   ' {+ k# I, ]7 o; c
    c=0.2;   
    $ j1 q8 l8 u7 D' VY=c*x+V;   , f3 @# ^9 z/ p
    p(1)=0;   9 a" k- ?" ]. Q# g6 C- F. g
    s(1)=0;
    9 K/ F; b* x5 C- ]for t=2:N;     x4 e. Z7 F, Z5 J
    p1(t)=a.^2*p(t-1)+Rww;   
    1 F7 @1 `' s/ wb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   6 m  g# \* D9 e( x* i/ }" E' f
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   * u0 R$ s3 l0 g1 f: H7 {# }
    p(t)=p1(t)-c*b(t)*p1(t);   3 B1 C' Z6 _" k  O) _0 a+ T
    end   * x$ o1 e& q/ R+ _# |' I
    t=1:N;   . R8 b/ ~3 ?& F* n9 j# X$ s" u4 T
    plot(t,s,'r',t,Y,'g',t,x,'b');   
    / M6 Y  o# H  L- h5 mfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    7 h! I9 J. {) `2 H: f  I; n. l- o% Kalman filter.   6 ^1 G! Q$ P5 X6 C* C
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    % h8 Y0 P/ D) l0 f%   
    , y& Z0 z( Y: _0 w) B  K% INPUTS:   
    $ U3 K/ Q7 ~/ n" |) K4 B0 U5 E7 }% y(:,t) - the observation at time t   
    . y6 Y' ~( |" {7 q4 C# U5 g7 H+ P% A - the system matrix   1 w- Z( R) v; R5 b/ l# R
    % C - the observation matrix   
    0 G7 J" V8 D7 _* R% Q - the system covariance   * G  X4 C- j6 @# T. O0 ]% d0 K% M
    % R - the observation covariance   2 w1 R8 D' \* [
    % init_x - the initial state (column) vector   
    . [/ s2 W! V5 T$ t3 z- I* v6 S1 T% init_V - the initial state covariance   
    * d, }5 I# Q7 H+ H8 @%   . h$ X8 L5 X+ m7 u
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   ; z, z, ]5 Q$ L; w( Y/ b7 Y
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   3 ~3 j4 J' \6 A9 L
    % In this case, all the above matrices take an additional final dimension,   
    3 a! t, M$ @+ L% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   5 ]0 G8 }4 [" L" |9 p2 ~+ i
    % However, init_x and init_V are independent of model(1).   9 m! h" ^# B5 P4 Q  D! G
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    - |& F  S! i9 Z* p% 'B' - B(:,:,m) the input regression matrix for model m   0 Y5 h6 z( |$ z8 E
    %   : r/ Y# o: i# i$ m' O& F
    % OUTPUTS (where X is the hidden state being estimated)   1 b4 D2 h& d4 R. E
    % x(:,t) = E[X(:,t) | y(:,1:t)]   ; Q6 e0 D7 E  M1 ^" o% L) Y6 b
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   + |3 O) ]$ ~! A. e- r( `
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    . [' P# D; i2 Z$ @# O% loglik = sum{t=1}^T log P(y(:,t))   
    - T) O" ?3 z7 ]+ k* q; C%   ' }  {# F, ~3 {8 J
    % If an input signal is specified, we also condition on it:   4 g; e0 r. B; t# w1 [
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    $ Y5 S5 _( g! [4 m: `) l4 ^% If a model sequence is specified, we also condition on it:   ! g, |# D# ]# g$ U' Q) ]/ e
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   3 O9 L& Y* s5 {4 ]6 V3 }1 D% x+ j
    [os T] = size(y);   2 y5 ^) F' S* n
    ss = size(A,1); % size of state space   
    ; m. m# ~$ u! y% set default params   - ~6 @3 |3 \, I& C. r. s6 s' \4 k
    model = ones(1,T);   
    - O" X! `) x! gu = [];   7 B; T" q2 h5 Q. Z; c( L$ Q$ D
    B = [];   ; V3 h! c2 W5 E  T  z/ O
    ndx = [];   
    % f) j- p0 [2 R# T0 j) W# C* fargs = varargin;   : N1 h- k( V, }$ p4 f- `# K: l( v9 t
    nargs = length(args);   
    & z% D# Y' K! Y& |for i=1:2:nargs   
    & O# T! Z  s& u+ A0 _& Bswitch args   4 K& Z% P& _% A, f! z$ ^
    case 'model', model = args{i+1};   
    8 P* Q0 x& S# |  l4 xcase 'u', u = args{i+1};     @6 k) `0 ]' r
    case 'B', B = args{i+1};   & R9 N9 @+ ?) h6 t* y/ Y. P
    case 'ndx', ndx = args{i+1};   
    3 b9 K$ c) t! ~, g& C* q, D* Z  Jotherwise, error(['unrecognized argument ' args])   
    + h# L6 _, l1 O0 rend   % m0 n! X' y6 w0 w# z7 }0 f. L
    end   
    ' @( f$ e4 Q+ O9 Ax = zeros(ss, T);   
    ' ]; N+ C( {: ]6 g6 W3 k, q. \V = zeros(ss, ss, T);   
    : \  `; r  Q8 z! q5 J$ v, {VV = zeros(ss, ss, T);   
    ; |+ Z) _2 ?* T' H' Y) N1 v6 ~. Ologlik = 0;   1 B( |# _: b) |% N
    for t=1:T   m = model(t);   $ l" L) t" J+ ?* }: A6 b" c8 \
    if t==1   %prevx = init_x(:,m);   
    . }: k  ?2 j0 R%prevV = init_V(:,:,m);   
    ' c- {% d: W% _1 A+ c4 kprevx = init_x;   / \, I; Z. F2 a# f
    prevV = init_V;   - c# |' J7 p' f/ n' }  B' r
    initial = 1;   9 Y& l3 G+ b# J4 z7 E* @
    else   prevx = x(:,t-1);   2 S+ V; \; R0 W/ q8 w7 u: J
    prevV = V(:,:,t-1);   
    - {: R- C8 q! b/ ~6 }$ Sinitial = 0;   
    . j0 T! p3 r$ ~! l5 lend   
    1 k# V* a  G. h" {2 ~if isempty(u)   
    & Q2 m' I5 M; q[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   2 b7 R% v  @" P0 h3 M
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   0 [: K' w) W) @9 _  P; @) e
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    , \" B; G- H% V. j2 X1 e     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   & I5 J) ^! `) N( H
    else   ! n. a" W* V& N1 ^* K9 w2 A
    i = ndx;   
    + z1 \! `4 D) f  B% copy over all elements; only some will get updated   x(:,t) = prevx;   
    4 X( n, c1 q1 d# n( M  J) _prevP = inv(prevV);   ' ^) R/ u. L, C0 |& o/ ~
    prevPsmall = prevP(i,i);   
    " u& B! d, u2 o; |, `9 ~prevVsmall = inv(prevPsmall);   
    3 I& e- s: V" ~$ x6 c" f" M4 b$ X[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));   
    / |6 Y& v, H! A! hsmallP = inv(smallV);   
    ! H3 c4 _1 a  h) F! tprevP(i,i) = smallP;   
    . H0 I/ e* @/ c0 KV(:,:,t) = inv(prevP);   $ H0 x2 X6 M# f* A* z1 ^' z- l* k' @( N
    end   
    , ~7 t1 s% t1 c4 \end   " ~( {8 [1 w& J" B& k
    loglik = loglik + LL;   . d$ ]& F- ~+ m( f2 d
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    7 b/ _7 |( o- i' Q6 ^4 J# R! F, N0 Qmatlab下面的kalman滤波程序- j% B2 N5 L8 S- |7 D+ K3 W: o
    clear  N=200; w(1)=0;   $ B! V, K8 l9 Z
    w=randn(1,N)
    , L+ @% w* u  [( s: h; T
    强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-10 19:52 , Processed in 0.335252 second(s), 86 queries .

    回顶部