QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4598|回复: 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滤波程序0 V. B7 _& D9 X) T* C' {
    clear  N=200; w(1)=0;   
    . {, |# ~* h$ S. k) Yw=randn(1,N) - Z" D! `9 }7 T
    x(1)=0;     D( x# m! [6 S2 [& T4 u7 l0 g2 y1 k, Q9 o
    a=1;     `7 \8 G" O) S+ y
    for k=2:N;   
    ! c6 I7 p/ `% [' ^x(k)=a*x(k-1)+w(k-1);   
    " l% ]9 E7 v2 O; Q" r( vend   # I3 `& B0 Z  h6 ]  e; d- Y
    V=randn(1,N);   
    . c4 @" z! t: Wq1=std(V);   
    ; e. n% Y, [$ D5 U! ARvv=q1.^2;   
    0 M3 W" J% E& W+ ~! Pq2=std(x);   / ]5 H$ `" [' M! p( w; q: [
    Rxx=q2.^2;   : x/ L$ {. }* K" m% w/ K( m1 {/ R
    q3=std(w);   
    : w- D4 f  O- m% RRww=q3.^2;   2 I/ y1 }& S. V; n% ]2 ], Q
    c=0.2;   7 Z7 W  z6 ^$ m' j, k" }2 M' l
    Y=c*x+V;   
    2 o4 U; _* {2 v3 }" M2 Ep(1)=0;   
    * {& g! u( n( u* Q; Ls(1)=0;
    , a* G( s) r' O; t1 |# h! Kfor t=2:N;   
      w4 i" ?* J, Wp1(t)=a.^2*p(t-1)+Rww;   
    . S% G# q0 U0 f+ E" t  ib(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   % S0 X  E9 M. s
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   3 W0 q7 Q% @% z  ~; S
    p(t)=p1(t)-c*b(t)*p1(t);   
    5 ]. G! J# Z% m3 J% k9 Yend   
    ! O8 c3 {9 `( ~8 B5 n6 pt=1:N;   ( Q* }% G4 ~+ j# V
    plot(t,s,'r',t,Y,'g',t,x,'b');   ( Y. k& r% H( G% I0 h1 @" x, ^
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   $ e( ^3 F3 F% `( l% L; `
    % Kalman filter.   6 C; J2 Y8 A+ z; n3 A, b! e8 l
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    : s  t2 q/ d; y/ \  b! S%   $ n. V, A. J" o7 U
    % INPUTS:   ( o8 B# ^7 q" f5 P6 {  j& p
    % y(:,t) - the observation at time t   6 C/ u. M9 E# F# s4 W
    % A - the system matrix   & q3 ?/ p# a$ y( [
    % C - the observation matrix   ) V. _$ y4 s+ y' a1 ]* z# q; H' K
    % Q - the system covariance   . y8 s6 }0 r- m: Y- H
    % R - the observation covariance   
    " w5 x2 Q. `- N( }% init_x - the initial state (column) vector   ! s: h# e- k5 ~2 K$ M5 H9 w9 m2 B
    % init_V - the initial state covariance   
    * i1 \) G2 {& T4 v%   4 P+ W5 s% ^) k# x2 s+ Q4 Z& }3 b
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   1 v5 m0 l/ c' G
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   , h  d* p0 K7 o6 @  D/ Q" r. `
    % In this case, all the above matrices take an additional final dimension,   / Q/ ~2 \3 Z  o  a0 z* t
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   % i4 r4 b" K) |8 V9 B
    % However, init_x and init_V are independent of model(1).   ) W: c# r) v! i) a7 d# D
    % 'u' - u(:,t) the control signal at time t [ [] ]   ! B# o2 l* A# I. w+ j9 r
    % 'B' - B(:,:,m) the input regression matrix for model m   
    , C2 |& Q) D* f' d# N%   , O3 K+ @. S: O$ M- y+ j3 {6 A9 [
    % OUTPUTS (where X is the hidden state being estimated)   % I* J+ _% `/ z* I6 i  Q
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
    7 [( i/ n7 l  J# F% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   ; |: D# Z4 D$ f
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    8 a& g1 g  y  E/ D  P* \" D! A" C7 v% loglik = sum{t=1}^T log P(y(:,t))   . v8 b% b. F  J! e* }
    %   - V- m" D8 t, [2 ]# a9 j
    % If an input signal is specified, we also condition on it:   
    8 v% v3 @: q7 g# o' J# w0 }% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    / ~$ `! n' N6 v. E% If a model sequence is specified, we also condition on it:   
    - R) ]( u- y  [' O% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
      D. a2 c. r7 @1 Z& Q2 N' A[os T] = size(y);   
    $ n: y' g( W$ q. f+ q7 L& kss = size(A,1); % size of state space   
    $ @% T1 Z+ |3 `: _2 S% set default params   . s- A2 y5 f9 m- C7 [! Z
    model = ones(1,T);   
    5 M# D/ F- Q+ L# z  N: Fu = [];   
    # I2 @% b/ @# gB = [];   + ^$ `/ ~) o7 u
    ndx = [];   ( ^- S' b0 t2 t" F; k
    args = varargin;   
    / r  X8 f/ D5 |$ W9 [* Snargs = length(args);   
    , v6 K. M* h% ?8 Z. R4 ufor i=1:2:nargs   9 N5 B- T( `/ |4 o3 y* H
    switch args   
    3 L! ?3 r& q1 p; G! w0 `0 g$ L  Zcase 'model', model = args{i+1};   ( o, N8 Y% r4 a
    case 'u', u = args{i+1};   
    * Z' K8 S& l: v$ Z+ ccase 'B', B = args{i+1};   
    " h  ?8 N& H1 ]3 b% Ucase 'ndx', ndx = args{i+1};   8 f* ~5 f+ V$ D. T( \
    otherwise, error(['unrecognized argument ' args])   % I8 p; y, Z" g4 V" ~; f5 M
    end   ' }7 X- m% [3 v2 W& \7 _, {
    end   6 u! D) N; ~& M' T3 k
    x = zeros(ss, T);   
    / l3 I6 [# ]8 a+ q' mV = zeros(ss, ss, T);   ) Z7 P  P- e2 _, R  U3 i( }7 A
    VV = zeros(ss, ss, T);   4 U. S: [2 p8 I
    loglik = 0;   + ^. o! M- H/ D; T1 ?
    for t=1:T   m = model(t);   
    & V9 y, E+ F6 V5 ]if t==1   %prevx = init_x(:,m);   
    % x- T& P; O' Z2 o%prevV = init_V(:,:,m);   
    / `& D+ M9 z4 p" e* z. D3 |8 N3 Gprevx = init_x;   + \) A8 A1 W1 y; P% D! G- A9 Q2 d  W
    prevV = init_V;   . A9 R  ^" ]+ }- `
    initial = 1;   * ^0 e8 Y7 k9 [1 S3 y- L7 ?
    else   prevx = x(:,t-1);   
    0 O3 F' ?- p: l# K: R2 P& N* A8 W. {prevV = V(:,:,t-1);   
    + k) f# F9 Z8 G/ C3 N* R' E+ Pinitial = 0;   
    1 X& F! ?" J, fend   
    ( [. k% {8 [- N2 w" f9 z8 U7 S! L0 _if isempty(u)   
      v% ^& ^9 j9 }5 l6 ~[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   ) d  W+ D) o+ a# }, Y
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   2 T% u9 P0 J/ t. @* e5 p
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   0 g% D4 h8 \1 V$ X" b
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    4 ]& a; {; X; W$ S& |else   
    . X5 i' f3 g8 b# f$ \6 [6 \; ]i = ndx;   
    1 m7 q% Z% X; b% copy over all elements; only some will get updated   x(:,t) = prevx;   
    ( b& |, I4 Q. @0 WprevP = inv(prevV);   ) o0 l/ u: `$ @. `4 ]
    prevPsmall = prevP(i,i);     ~2 R$ ]/ h. _! P2 V
    prevVsmall = inv(prevPsmall);   + t* \3 j( e% z* i& L5 O5 D: 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));   
    $ |/ \. t( ]( y4 P5 u$ t' [1 j" [smallP = inv(smallV);   7 A6 t, O9 k1 [
    prevP(i,i) = smallP;   
    3 V4 x+ x0 }/ e' t2 v7 Z( {V(:,:,t) = inv(prevP);   , W2 N8 G1 f' m8 @9 O1 ?) n
    end   , S! e& d! @6 \5 G3 c5 U! }
    end   
    - x0 F* ^& z( H. f& F: Wloglik = loglik + LL;   
    ) o9 X' O- v" c$ T/ Mend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    ) _" J+ _* W% N6 m9 n2 Umatlab下面的kalman滤波程序9 M$ n6 Z6 v- Y% N4 V6 E; r. a
    clear  N=200; w(1)=0;   
    - v% c& U. @  ^& D% C& V$ A, `  v' r, fw=randn(1,N)

    ' d# S" z  L. o( \! f) k% @强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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, 2025-7-19 15:37 , Processed in 0.727132 second(s), 84 queries .

    回顶部