QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3931|回复: 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

    主题

    737

    听众

    2万

    积分

    数学中国总编辑

  • TA的每日心情

    2016-11-18 10:46
  • 签到天数: 206 天

    [LV.7]常住居民III

    超级版主

    社区QQ达人 邮箱绑定达人 元老勋章 发帖功臣 新人进步奖 原创写作奖 最具活力勋章 风雨历程奖

    群组2011年第一期数学建模

    群组第一期sas基础实训课堂

    群组第二届数模基础实训

    群组2012第二期MCM/ICM优秀

    群组MCM优秀论文解析专题

    matlab下面的kalman滤波程序% e+ C" ~1 l7 @: v4 Y' C2 s
    clear  N=200; w(1)=0;   
    7 ?- O7 f3 B( {/ H  tw=randn(1,N) + _9 F5 W! ~5 }/ C
    x(1)=0;   3 z( z8 k- ~$ E9 H6 u) L) a
    a=1;   9 M* n, I% O( b4 A" {
    for k=2:N;   
    ) Z* U* m! Q! I5 X& F* W7 Ux(k)=a*x(k-1)+w(k-1);   
    # q  b% c8 V4 b, T7 W( E) Bend   
    5 g) f% [5 X/ K" X. FV=randn(1,N);   & a% |% p" i/ r' r1 [; F( E
    q1=std(V);   & T3 P1 p/ d5 j
    Rvv=q1.^2;   
    , U7 O8 G* ?+ ^( w# ?q2=std(x);   0 Y  F* M# U9 `
    Rxx=q2.^2;   
    ( P) t0 z+ w" Xq3=std(w);   0 I* z! }* G% h' i% @  _
    Rww=q3.^2;   2 l5 I8 _3 q0 V2 H$ R2 d
    c=0.2;   
    ! _6 B0 c1 k0 \Y=c*x+V;   
    ) U# e8 V8 e( K) s% d& B9 ~6 Gp(1)=0;   
    4 o4 E0 ~8 E! Z) |+ Zs(1)=0;# r" \3 A* g9 l: u  Q, ^8 Y7 |9 w
    for t=2:N;   , R& {) O$ f$ {2 s
    p1(t)=a.^2*p(t-1)+Rww;   / f/ G9 \5 b0 |' s
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);     }$ H+ f5 c6 O4 u# K% B: @
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    ! }$ L7 _4 a$ l# u0 v  tp(t)=p1(t)-c*b(t)*p1(t);   
    2 _3 z) X: ~& V  e7 i( {. u" ]end   
    " m+ l+ Q& l& M+ ^9 O% Dt=1:N;   , o0 X. H( V/ m1 T8 L$ q: P
    plot(t,s,'r',t,Y,'g',t,x,'b');   2 H. J$ G4 M6 V$ a, P. W, E2 l
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   ) x, m+ w- I  g3 e" H/ c
    % Kalman filter.   ( ]8 }8 H4 B8 b6 M5 }7 F. Z
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    ( C! w5 w  U0 F) I: c%   
    ; e  y, I# J0 Z2 Z  R  X3 N% `% INPUTS:   + q2 A2 U% ^! O" F0 J
    % y(:,t) - the observation at time t   
    8 D8 h' c. i' H' p7 p* j8 B8 u' D% A - the system matrix   " i$ E6 k+ Y# C* R/ B/ t
    % C - the observation matrix   
    0 p' c2 K5 b  d+ [0 J% K& h0 e! P& R% Q - the system covariance   
    4 u: z  g) ^" J9 `  F% R - the observation covariance   5 X' {( W) r4 `9 {+ d* Y
    % init_x - the initial state (column) vector   
      |! r& t# Z- R6 Y  J2 i# B5 e% init_V - the initial state covariance   3 e  t3 q9 O# g
    %   
    ) i( j* s4 f1 Y, a' g& v% OPTIONAL INPUTS (string/value pairs [default in brackets])   
    % Q2 n) F+ L9 f: P. {: Q8 i6 _% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   ) i( n; O/ d6 B6 V+ ?3 d  x
    % In this case, all the above matrices take an additional final dimension,   
    # m% {1 t$ W- P/ `: l7 i% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   ' l/ O- K9 D" z4 q2 N
    % However, init_x and init_V are independent of model(1).   - C0 r" B* |; f: s# q! D4 [4 A5 c
    % 'u' - u(:,t) the control signal at time t [ [] ]   * G! p$ r9 d  N: ~
    % 'B' - B(:,:,m) the input regression matrix for model m   5 p2 m8 ~! y  F+ y
    %   
    , h" f$ p9 l6 v$ C9 ^) Z" v$ L% OUTPUTS (where X is the hidden state being estimated)   / ?3 Q8 m8 p+ s4 i6 q* B
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
    " X3 X8 m8 j, w. M! b% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    3 U7 O! j+ G: J+ f% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   . Y- o. |# m; y* [' M
    % loglik = sum{t=1}^T log P(y(:,t))   4 Q, ]5 }% }) c4 ^4 K, {: v) ~
    %   * H% }. @" s0 t0 ?8 C
    % If an input signal is specified, we also condition on it:   2 e0 k9 t, b7 D+ o
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   6 h4 v) {4 ~/ U! L% o
    % If a model sequence is specified, we also condition on it:   7 `" P) w, D) r* g: H
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    $ ~3 u' x$ v- F9 ~* e/ C[os T] = size(y);   
    6 G9 t; ^0 }9 \1 Iss = size(A,1); % size of state space   
    9 A3 u- {1 M) c. ^6 y  M, Y8 l) V% set default params   
    0 y- `  P$ L, ]+ f* p4 {9 P4 pmodel = ones(1,T);   
    3 G9 Z3 @2 s& t( v, Y- Qu = [];   
    7 ?% J7 }7 j, bB = [];   
    . u% W/ Y  h0 z  Wndx = [];   4 {- ^. {- z( N1 N0 U
    args = varargin;   9 U% ]. |- n3 M! `% e
    nargs = length(args);   
    7 O' \7 u# U9 ~- M( j) ]for i=1:2:nargs   & x  B9 O) q0 i0 f
    switch args   
    ' R# l! e& D; X+ ?; pcase 'model', model = args{i+1};   
    + N( ?% Y, E' P8 Q9 H9 s! scase 'u', u = args{i+1};   
    # F9 I4 T+ \3 X& [% ]! F  Acase 'B', B = args{i+1};   
    * o: a* W. `3 ocase 'ndx', ndx = args{i+1};   1 v+ Q. }* v5 p
    otherwise, error(['unrecognized argument ' args])   
      Q: @6 q3 s8 s6 W  Q$ x  y2 V: l7 Xend   
    ) Y: h2 c. c5 Dend   & l, P% b) W' {) V
    x = zeros(ss, T);   - e! |' Z/ b4 o- x; x2 r
    V = zeros(ss, ss, T);   
    % T  C, x% C2 s& S2 S# ~( r; WVV = zeros(ss, ss, T);   
    + E( M2 `& o. Y# l, z) yloglik = 0;   & K, v- E6 h, u: z7 J
    for t=1:T   m = model(t);   ( f  i3 M$ a5 I" {; ]" i! D2 B
    if t==1   %prevx = init_x(:,m);   ! r! e5 W6 F$ o  |. }/ [
    %prevV = init_V(:,:,m);   
    * Q% N8 o2 x: `prevx = init_x;   
    ( k9 L( A$ p! Z! OprevV = init_V;   
    % K! n( _, j8 t( \7 o7 Xinitial = 1;   ( [7 R# T7 e  S& X) Y" Z
    else   prevx = x(:,t-1);   
    3 R3 x% r1 q. }# x4 w; T# D* oprevV = V(:,:,t-1);   0 d; {4 H$ i, }* M( ^3 o) p
    initial = 0;   
    : z# Y0 L, m" S- \1 ~9 s+ M. \$ Aend   2 b- c: Z1 \  Q( P
    if isempty(u)   ' N$ B( [/ @% P& O( y
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   0 g4 n2 d6 b! C, S+ u  B6 l( ~* q
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   ' f8 c1 C+ m% B: }# j
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    6 C7 }2 m1 n0 T7 `, O" ]7 [% x     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    6 b7 B; _4 |0 ?% E" yelse   
    0 D7 N( G6 G% ?6 Y* C; H: f, [) ]; fi = ndx;   % H9 B9 M2 W! y6 K
    % copy over all elements; only some will get updated   x(:,t) = prevx;   
    * ?3 j) O/ y1 X" `prevP = inv(prevV);   
    3 b6 z$ ^+ U; C$ N! m" ZprevPsmall = prevP(i,i);   % b$ l! {( T; e' P0 K$ j6 a
    prevVsmall = inv(prevPsmall);   ' N5 [+ L4 z. @2 C2 Q
    [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' ~) l) {smallP = inv(smallV);   ( C. Y8 ^. ]  ?2 O; b$ X
    prevP(i,i) = smallP;   0 \5 c; |3 m& e' z
    V(:,:,t) = inv(prevP);   8 E5 j! `; N; h" ~) K
    end   * X# O" `8 k' p8 @. X3 a
    end   
    & _( d' r* m. C: t% N: ploglik = loglik + LL;   
    8 S! Q! X" ]) [9 p2 |end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 * T1 m$ J2 `, v2 r$ D: H
    matlab下面的kalman滤波程序& C- L) ?1 d* q6 z
    clear  N=200; w(1)=0;   
    5 Z  ]- N( }* t6 Q- R4 {/ p- Xw=randn(1,N)

    ; D8 K0 F5 W' y. A$ \% Y/ q强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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, 2024-6-9 13:12 , Processed in 0.508764 second(s), 83 queries .

    回顶部