QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4996|回复: 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滤波程序
    , e$ c) _4 o: _: E% O1 `7 n3 c7 qclear  N=200; w(1)=0;   % o/ g: ^* d. e0 n# W: L( ~" j1 T
    w=randn(1,N)
      u2 X7 x. }/ |- I8 f% {' Bx(1)=0;   / ^! P$ U1 K2 |$ `- ~- g
    a=1;   
    8 d6 m2 e$ W/ _# a' F8 h; ]for k=2:N;   ) D2 K6 R1 h1 A1 i8 A7 T
    x(k)=a*x(k-1)+w(k-1);   3 T- e1 v; N0 `8 G
    end   
    ( l) V3 m  W/ w- bV=randn(1,N);   * D- m& ~6 m  b; U
    q1=std(V);   
    $ ]# E( [- a; c2 n/ ^( ORvv=q1.^2;   
    ! d3 J- M5 f9 l& eq2=std(x);   
    : N* E4 e  z! X" ^* a" G; x' b2 P2 \Rxx=q2.^2;   1 a/ {, B  J0 _" Q( y
    q3=std(w);   
    / l. M2 c0 s$ |Rww=q3.^2;   
    0 U' _" l* L9 r3 M. @8 V1 ec=0.2;   
    $ c& r/ q5 ^# r  }4 }/ Q% o9 rY=c*x+V;   
    9 F% Z$ N4 {& g4 s5 wp(1)=0;   . V# R; A+ j# x0 Q6 u
    s(1)=0;
    . i0 Z  j  z0 g3 @. Qfor t=2:N;     x' |' w' G* o  S1 C5 D9 D8 A, }" i
    p1(t)=a.^2*p(t-1)+Rww;   / M& |7 Z' F! [& k* x2 f$ g$ l4 e- z
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   " Y- V# ?: H( }; ]7 ^
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    - k4 L" W3 d: P$ b9 G. E: Z: rp(t)=p1(t)-c*b(t)*p1(t);   
    . [" b- y8 Z" \% F2 `end   1 }* F$ B9 t3 Z6 }# o
    t=1:N;   
    ( p* S6 K7 q2 Yplot(t,s,'r',t,Y,'g',t,x,'b');   , f: B/ v! v+ W/ M4 F8 z6 A9 Z
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   & a  [0 M; r7 a- d  p: ?
    % Kalman filter.   : g7 ^3 ]  A" n) t# G' j. {! l
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   ( r, t3 ?- I. X+ F  V! q
    %   4 E' e* U( h6 D0 ^* O
    % INPUTS:   : `; k% R3 G% `  }1 r5 z
    % y(:,t) - the observation at time t   3 L+ k9 s6 |; M1 W6 l! s. K
    % A - the system matrix   
    2 w0 O+ q. E4 q( S- e% C - the observation matrix   6 k, S- c7 O5 X: O" O$ r. b2 h! T
    % Q - the system covariance   . }" U* Q1 K4 D  i
    % R - the observation covariance   
    ' }) T. I; i7 L5 l; s  \% init_x - the initial state (column) vector   
    , `. `" A  X, w# I, g% init_V - the initial state covariance   
    ! H1 B; G4 Q. D8 M' K8 s# E* N%   
    # h2 w; y9 X1 v% OPTIONAL INPUTS (string/value pairs [default in brackets])   9 x# b, t3 g. X5 ^/ P, _% n6 r
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    + A* `! M( h1 s9 v6 J. H% In this case, all the above matrices take an additional final dimension,   
    8 u. z. p; x: S% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   ' T+ h# X7 L/ |; L* z- a( l
    % However, init_x and init_V are independent of model(1).   3 ], I: i/ b+ j5 ~/ U/ a2 m; X1 y
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    ' y( a: p1 ~! \' W3 M- m% 'B' - B(:,:,m) the input regression matrix for model m   % y6 I$ _9 B& V3 i  d
    %   ! Q* g2 |# N: }2 g0 \7 h/ p
    % OUTPUTS (where X is the hidden state being estimated)   0 {0 q6 {: P( a. Y
    % x(:,t) = E[X(:,t) | y(:,1:t)]   . |  V. }7 U" z; g6 a3 @% h
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   # @6 H) l+ P& Z" ?
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    9 g& K: n7 u6 X8 e2 V% loglik = sum{t=1}^T log P(y(:,t))   7 ?0 e4 y( Y+ L% p' R) L2 \# W
    %   
    & S9 j5 i' _# S! P5 K% If an input signal is specified, we also condition on it:   
    2 E; a1 F+ D8 v: `4 b  I% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   . x, u) O) I# q1 U6 e
    % If a model sequence is specified, we also condition on it:   . J4 J0 G) E# Q: q
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    5 E/ E7 c) t9 p& [; z[os T] = size(y);   
    # X. L( o* u2 S4 `6 qss = size(A,1); % size of state space   
    # P, O3 D+ F/ N# ?* Q% set default params   ! X8 B) R8 Y8 L" H
    model = ones(1,T);   
    - g8 b% z4 e" ~5 _. Nu = [];   & ^6 p5 `1 i8 t. x7 R5 ]. ?/ Q7 B$ t
    B = [];   
    , c. S6 \  F# p% Z4 N9 pndx = [];   $ B* F+ P  O- |/ Q/ l& u* t
    args = varargin;   $ X6 f5 I) V7 Q7 d' A8 B( s/ y
    nargs = length(args);   " g& q/ l# {: h* C7 l& f
    for i=1:2:nargs   
    ! G- f: F$ Y8 q# l6 M( pswitch args   3 e( h# z; o) J% L3 c8 x
    case 'model', model = args{i+1};   
    ; ?( u2 B, _/ e* H7 dcase 'u', u = args{i+1};   
    . A- ]3 ^+ j! ucase 'B', B = args{i+1};   
      T# N  ~" g' m, H- _case 'ndx', ndx = args{i+1};   & I7 v0 k9 y4 R, i7 E  |7 _# x' o
    otherwise, error(['unrecognized argument ' args])   " ]/ I/ H" P' s! _- y
    end   
    % x' ?1 s) U. f  o) xend   
    ) Q* g) h- j) Bx = zeros(ss, T);   
    : \, J% I8 G& M2 K+ o/ d; F$ IV = zeros(ss, ss, T);   3 z  P4 p( |- r9 {: @' c
    VV = zeros(ss, ss, T);   
    $ l$ j/ L7 k  C& p8 @) o% n/ ]8 Jloglik = 0;   
    ; R$ y0 R9 s: i/ c- [for t=1:T   m = model(t);   2 c, e  Z, c  D- m/ S
    if t==1   %prevx = init_x(:,m);   
    7 a3 a' A( _1 F8 ^) V2 \- o%prevV = init_V(:,:,m);   4 ^7 _! |. o: t  l
    prevx = init_x;   ! W1 A6 j/ ~6 J  A+ _' s" x
    prevV = init_V;   ' y/ r+ M/ ^/ T# |) C( E( X4 h6 V5 F
    initial = 1;   
    " C9 L5 V$ M. R3 ]0 G% K' ]else   prevx = x(:,t-1);   
    " n3 d5 {( _( L9 s, M$ ]9 VprevV = V(:,:,t-1);   
    2 D& O5 ^: n& ?$ i& f+ z/ z" ^initial = 0;     P4 O% j* S' b; x
    end   ; N* o' L7 k8 D/ v! s' m
    if isempty(u)   
      u# w) o3 K9 K2 y  [5 O[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   1 f$ S. B3 C9 T2 D4 L
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    & g' j2 ?* }! L9 k/ \9 J' Y$ t5 B  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    ( c5 ^# V2 w& _- j     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    4 g  h3 M' p, _4 F* R' F( p+ Relse   
    & F4 l* Z( E4 ?4 z0 r; Ai = ndx;   
    $ e; [! D4 r: w4 V9 N9 _% copy over all elements; only some will get updated   x(:,t) = prevx;   
    ! `) M+ ?" O" e9 S. OprevP = inv(prevV);   * e6 W1 W0 a  a
    prevPsmall = prevP(i,i);   
    & P: p1 G- t3 _) u( Y& D$ Q5 `' IprevVsmall = inv(prevPsmall);   6 v' L1 s. G) t
    [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) p( ^# k' x' EsmallP = inv(smallV);   
    2 F+ h' w6 w* eprevP(i,i) = smallP;   
    6 P( t2 t$ K1 d/ ^/ F$ r# ~% IV(:,:,t) = inv(prevP);   
    # w1 A" V% ?- u  A7 xend   7 c% {/ r' Y/ x) M; a
    end   * [! N2 y3 N1 u, J. C1 `9 u! P, F
    loglik = loglik + LL;     ]* @& u+ n* A& m' x
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 ( y' A# @" i$ n
    matlab下面的kalman滤波程序7 _7 I" Z0 E( M4 J
    clear  N=200; w(1)=0;   , }9 [, y% R& ^4 F6 k( a
    w=randn(1,N)

    - }) t+ j* _) y/ I* _' @' Q* v7 f$ H强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-7-9 08:40 , Processed in 0.564627 second(s), 84 queries .

    回顶部