QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5071|回复: 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滤波程序
    9 F0 R; s+ `: X/ Qclear  N=200; w(1)=0;   6 M* z4 }- Z- s' A3 W
    w=randn(1,N)   t5 ]( {# Z) O! U
    x(1)=0;   ; L: z, I, K! m! A. K
    a=1;   ; W/ P, }& x" W" A8 _
    for k=2:N;   9 n! W+ u1 F4 L* A6 u( a9 Q
    x(k)=a*x(k-1)+w(k-1);   
    - F. E" J# ^. n, E; iend   5 [5 z) {. Y; |' j: T8 R- B
    V=randn(1,N);   ( f5 c) z2 s& o. q  T
    q1=std(V);   
    6 a7 V6 C# N) {, w/ t- e4 kRvv=q1.^2;   
      T* z: r/ ]# p2 Mq2=std(x);   
    : ?1 n% K! k8 NRxx=q2.^2;   
    9 W1 u) F! K5 n8 b0 U! m8 ?q3=std(w);   3 u  Y" W. \3 z. i! R
    Rww=q3.^2;   
    % E# h" N- s6 R7 p1 Q5 yc=0.2;   
    ( |- [  V# ?+ n. Y1 {Y=c*x+V;   
    2 S$ d+ l' g$ t4 I) |3 A- tp(1)=0;   . I$ F5 l) r& ]8 O( G$ Y
    s(1)=0;
    0 K5 @: Q* H( p, Mfor t=2:N;   7 L: s4 s) [, n- y2 q1 m5 {; M
    p1(t)=a.^2*p(t-1)+Rww;   0 H! S4 u* T" p# A+ L1 s
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   ' W2 b; X5 y/ {/ T
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));     |- {, R3 T; ?2 u
    p(t)=p1(t)-c*b(t)*p1(t);   
    ! |# I5 Q1 E& ^' }& s& rend   6 Q9 r6 v6 e7 }
    t=1:N;   
    + f* l0 H% _1 xplot(t,s,'r',t,Y,'g',t,x,'b');   8 b3 ^$ n* q) k6 E3 V' r$ b
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   ! `: M& o( ?( s3 F
    % Kalman filter.   
    / J1 @8 R+ A  t* j% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   & `* }$ G: A1 @, v* |; K  u7 @
    %   
    2 r$ C( n: J% i5 a, z$ Y3 @5 T8 C! J3 ?. D% INPUTS:   & c/ x, K0 ]& e7 S
    % y(:,t) - the observation at time t   
    2 ~. G+ S+ ]2 v6 z0 x% A - the system matrix   2 |: X: b4 i( L7 Q% z2 c
    % C - the observation matrix   : w+ ~. T" ]* ]# t' G
    % Q - the system covariance   
    9 p) D8 m% q- H( K7 \. L2 U% R - the observation covariance   : e3 B' h0 b9 T4 e5 Y
    % init_x - the initial state (column) vector   
    6 C$ y5 d  w  D/ i$ }3 G% init_V - the initial state covariance   : i4 B* a) f1 \, c. I" N/ X
    %   
    / z) N/ X( U+ C9 V5 Y% m- \% OPTIONAL INPUTS (string/value pairs [default in brackets])   4 D3 X$ P- F1 j. R
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    3 V6 A, ~3 n( d3 _: N% In this case, all the above matrices take an additional final dimension,   # j2 v; o" O, J6 w% C
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   ! u7 Z4 A" t- z0 y. }& g
    % However, init_x and init_V are independent of model(1).   
    1 n8 p% C7 B1 L8 w) G% 'u' - u(:,t) the control signal at time t [ [] ]   
    6 e3 f1 f" z* r6 A0 T- o. f% 'B' - B(:,:,m) the input regression matrix for model m   ' c) U" s0 `8 ]: m: I9 K: V
    %   1 ~3 y/ N3 V* c) M7 s8 L
    % OUTPUTS (where X is the hidden state being estimated)   ' `% Z1 e+ y, L( P
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
      A# k1 t4 `# z+ D% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   
    " V5 F5 q' Z# i' o! p% VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   0 a8 B9 o4 b$ L9 v# |( T
    % loglik = sum{t=1}^T log P(y(:,t))   
    / j9 ^3 t& M; d- @9 M%   
      h5 c/ b+ F5 Z% f& \" r( B% If an input signal is specified, we also condition on it:   
    5 Q( V' n+ L" I& {: H1 n% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   5 j% {( [" j# E5 M
    % If a model sequence is specified, we also condition on it:     V7 ?( ]6 e1 a# b6 `- ?
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    4 W5 g. H5 c. q& `' _) o5 Z/ R! ~[os T] = size(y);   * C- Q' p) T+ Y7 `) L  X
    ss = size(A,1); % size of state space   ' f3 v; Z/ o) o4 n% d& N1 G* l; c
    % set default params   
    & ?0 y  x6 H$ ?/ P: t  fmodel = ones(1,T);   # \- ^& j' O) ?+ A& l8 d5 r& T
    u = [];   0 m  W9 U* o) d
    B = [];   ' X, o% }4 s/ ?
    ndx = [];   
    0 ~! S" n. y4 v" p% Vargs = varargin;   
    . a8 Y/ l* ]% `! W3 F, Wnargs = length(args);   $ h9 Z9 [  F5 D2 m- t- J& Z: k: k
    for i=1:2:nargs   
    ! P6 x1 i# u# c5 c  c$ Xswitch args   4 Q% }& P4 }1 B1 M. ^$ U& {
    case 'model', model = args{i+1};   # U8 D# O" s# ~+ D# e) S, q& O
    case 'u', u = args{i+1};   
    . i0 h2 E8 N8 I9 q$ g- ]3 Qcase 'B', B = args{i+1};   $ r( k% h* V& E2 ?7 I! q6 U# Y
    case 'ndx', ndx = args{i+1};   , ^% k6 g3 O9 a
    otherwise, error(['unrecognized argument ' args])   $ ^) \; l, M3 f: @5 `
    end   
    3 p; e( j6 k: p/ R" O; nend   
    9 h& K3 G# U( @8 fx = zeros(ss, T);   - X* J, }. ?/ ?9 d) a
    V = zeros(ss, ss, T);   
    ( q: Y  k* V  n) [4 H0 J9 uVV = zeros(ss, ss, T);   7 `+ S8 }! C$ Q- ]0 B
    loglik = 0;   / A" }: J+ @& o8 Q4 b( z5 O# N
    for t=1:T   m = model(t);   + |) t: l+ \# ]1 p
    if t==1   %prevx = init_x(:,m);   
    0 ~; f7 ^8 [9 ]9 w%prevV = init_V(:,:,m);   " W- D3 k: M2 v) g0 ?
    prevx = init_x;   
    2 b, `( ^$ h  u  V& N2 W) @prevV = init_V;   6 @3 V, H2 t# S7 E
    initial = 1;   3 |8 [% F' K) ~! a! Y
    else   prevx = x(:,t-1);   8 S! J- J' Y/ m2 M# p" M3 z- N# g
    prevV = V(:,:,t-1);   
    ; ]# v0 N( E" E# P, f+ _/ Zinitial = 0;   
    " i: p, v! K+ w# H2 fend   0 x; L6 i2 V, k' Z
    if isempty(u)   
    , N! C) u3 n! G" V[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
      U* |7 L% q9 v; |" i; rkalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
      y) U, H9 n; ]: Z  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    - h: I, Y( W; F     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    % l, _  L. d. {- Helse   
    1 I, T6 M& ~# t2 R+ e' P6 w4 K2 f! Ci = ndx;   ! _1 ~7 G' g5 W& x: G
    % copy over all elements; only some will get updated   x(:,t) = prevx;   
    " D# J7 |: ~& Y5 S- bprevP = inv(prevV);   6 k" b( g, e- D
    prevPsmall = prevP(i,i);   
    5 t' v( [' T: a' YprevVsmall = inv(prevPsmall);   
    ) Z8 U6 O6 d1 d+ d" }$ H' l& J3 L[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));   $ i5 A8 N) o7 f* J7 q' n
    smallP = inv(smallV);   8 |! F+ t; K0 g* S' F; I
    prevP(i,i) = smallP;   
    5 y: j* ?$ t; g3 }/ |V(:,:,t) = inv(prevP);   
    9 U+ A) D; f" K4 vend   
    ( n# F( Q, a5 ^( L9 @) W6 T% e+ {- Mend   $ R2 e" L( \1 q5 L6 O% l
    loglik = loglik + LL;   
    % ?3 h3 Z: }8 Wend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    5 T9 b2 ~# O& m& Tmatlab下面的kalman滤波程序) ^3 W/ f) R% [' a
    clear  N=200; w(1)=0;   ( O$ S  @& c( t) X
    w=randn(1,N)
    ( d! g) m2 F9 F: m* Y; F! @# 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-8-23 11:34 , Processed in 0.392100 second(s), 84 queries .

    回顶部