QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4647|回复: 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 z2 Z& D1 R1 L1 j6 G% S
    clear  N=200; w(1)=0;   * X7 I. c8 x0 x" w& m' `
    w=randn(1,N)
    9 `" \$ w" J* e# dx(1)=0;   
    2 I* L, e! k" v1 A# z6 ea=1;   5 w' G! ?6 Y( j, b! l5 Y* X% q
    for k=2:N;   5 Q: B2 j/ |; L% i* F- I
    x(k)=a*x(k-1)+w(k-1);   2 J, E$ L& u$ u* `1 P6 W) O8 M7 C! w
    end   
    ' ^$ D2 c2 J" S8 r: TV=randn(1,N);   2 G( s5 Y' W' g4 `+ \4 x
    q1=std(V);   6 f% D8 g' G& h% p* S4 t6 B
    Rvv=q1.^2;   + A, E) o7 j4 }. s- K  ]; V
    q2=std(x);   
    * v4 u+ L7 O) D4 W5 N- T$ L5 U! K6 |Rxx=q2.^2;   
    % A- A3 t9 Z+ G" ?0 oq3=std(w);   % ?( W1 D* M4 V7 B( r6 [
    Rww=q3.^2;   
    ; @/ x! [4 A: H# V2 N& m# y+ Jc=0.2;   
      |3 _0 q5 T+ E1 S, [# qY=c*x+V;   
    + Y5 Y: H5 y9 F; c! f  sp(1)=0;   / w0 Q  h% F/ ^& O' b
    s(1)=0;
    ( f' e$ a$ v6 [" D0 B6 G1 `) Q, }for t=2:N;   
    . l# l' P5 b1 Z+ r, ep1(t)=a.^2*p(t-1)+Rww;   5 V5 F$ K4 w7 d% S/ W0 H
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   " d2 m2 l& H& b; a) _
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    3 j0 @2 l. n$ z7 I+ T5 j; ]' Mp(t)=p1(t)-c*b(t)*p1(t);   
    % [. A6 M+ o! b4 _. m4 |! p/ @end   
    / |! `" v2 i5 r# ft=1:N;   + V* t0 d0 v! I: s7 y
    plot(t,s,'r',t,Y,'g',t,x,'b');   
    8 m( e: \( W! c- w: J: ifunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    " ?9 K/ h$ Z, g- w( a8 B% Kalman filter.   * d* n4 q+ V; c, {) a, \3 y
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    5 L8 f3 Y7 t6 |2 n2 s" Q%   2 f8 e) q: T" T+ Y2 \
    % INPUTS:   
    3 ]  s, Y9 d! x, D* L6 |' J% y(:,t) - the observation at time t   
    , K) J; C2 ]/ b8 V$ f. p* U9 H% A - the system matrix   , q* P, Z7 V% \# o6 g! G- @
    % C - the observation matrix   
    / B1 Y+ D4 r! A# B9 d% Q - the system covariance   $ t4 G, F* |! F$ d
    % R - the observation covariance   
    # L; {, h7 W% |) S3 t% init_x - the initial state (column) vector   
    : j. ^' z; O  k0 v" Z, ?5 ]# i% init_V - the initial state covariance   
    ! ~. e* r9 W% C- R%   $ T* ~$ C6 E3 x' r' F. a
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   & H9 I8 C& E9 I) B3 j
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   3 O% N" S# h! G( z8 d# P' b0 T
    % In this case, all the above matrices take an additional final dimension,   0 k. Q( q3 `0 H( |& M
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    5 B1 w4 `8 t9 C5 A* g, \% However, init_x and init_V are independent of model(1).   
    ) _! n3 |# u  s% 'u' - u(:,t) the control signal at time t [ [] ]   
    5 }" k- L2 u3 ?& u8 `0 F% 'B' - B(:,:,m) the input regression matrix for model m   
    ; |- `' }' D- g%   
    ' p$ `; Q' T/ C% OUTPUTS (where X is the hidden state being estimated)   
    ) J6 Z& j$ x* U% x(:,t) = E[X(:,t) | y(:,1:t)]   6 J- O7 R- p5 w& `  U+ Y9 r
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   1 }" J+ ^  X* \- l
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    ! r9 |) }; e/ |/ \- S3 J5 L% loglik = sum{t=1}^T log P(y(:,t))   " v4 E$ u" \. V6 A
    %   
    8 {# @  E& c0 ]) {% l1 v% If an input signal is specified, we also condition on it:   # @" @8 _* f+ E: j- Z/ F0 i' J1 A
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    9 N2 U% N2 ~% i0 O% If a model sequence is specified, we also condition on it:   
    ! C8 `& H  `3 |+ c/ Y1 W( H1 B% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    , }) d$ C7 @2 k( |[os T] = size(y);   ( {& U2 I/ x& p4 S
    ss = size(A,1); % size of state space   / R7 P; @, R* _) ]' ^' C7 W* ]: S
    % set default params   6 |% [6 }0 \2 u1 c9 K3 F4 t
    model = ones(1,T);   
    1 V) G8 u7 o4 v% t% q: Cu = [];   + r4 o. Q7 U* ?1 ~
    B = [];   
    : M% t4 ?- }3 v4 ?: }9 undx = [];   " X$ O0 Q# v& x( J6 p9 A
    args = varargin;   0 z" {4 [% @0 Z, v. @
    nargs = length(args);   
    ) t7 v  q0 v7 n2 A6 z- Y1 G8 N" yfor i=1:2:nargs   
    7 I! ?3 b; K( i7 e5 {* ~switch args   % ]* ?! U8 n! E, u; U, s4 r
    case 'model', model = args{i+1};   ) b& I4 T/ d" [6 ^
    case 'u', u = args{i+1};   
    $ J- R; ^! n& ~' j6 pcase 'B', B = args{i+1};   1 {* }. Z2 h8 S8 S7 P" y
    case 'ndx', ndx = args{i+1};   4 ?/ g6 ]1 S. Y( P& \/ m
    otherwise, error(['unrecognized argument ' args])   & ~" P" p1 b9 z' Z4 a+ y: ~
    end   
    " e. i2 e) v6 e. Tend   
    ' b1 |* l8 t5 I9 W7 R1 Lx = zeros(ss, T);   
    / M* ]* U: }! w" A2 Z9 gV = zeros(ss, ss, T);   
    + t) r3 f* U% y1 a0 bVV = zeros(ss, ss, T);   * c0 h$ k( M# f, n; P4 s
    loglik = 0;   8 y0 S& Y& z2 U- m1 Z$ O1 B
    for t=1:T   m = model(t);   
    $ D, t: e/ q* `+ e' cif t==1   %prevx = init_x(:,m);   
    : V7 D# B3 C/ z9 W! D%prevV = init_V(:,:,m);   # A0 N6 b7 x& b$ \
    prevx = init_x;   
    % g* E) N: Y# }( q7 \prevV = init_V;     z/ z9 P# i; G, i9 s
    initial = 1;   
    ; |8 _+ t, k' B4 _7 Jelse   prevx = x(:,t-1);   
    # h; c- E1 _' f  b$ jprevV = V(:,:,t-1);   / n' R9 ^5 I6 J9 f  `; |
    initial = 0;   ) E5 `8 Q" s7 o% c8 k
    end   
    4 U5 K* f9 [1 Z! P; @* iif isempty(u)   9 p# Z* ^% S: ^( N2 m
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   ; G* D6 K& j- P' U
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    $ G5 i% P1 g# t# F3 @5 e7 A" z# Z1 y  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   - J* i+ z4 x2 ^0 h8 _; W
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   4 B3 L/ @5 c3 s9 A, E6 _7 Z
    else   
    - C- |8 J0 T6 h3 x) ~5 I( Zi = ndx;   : A$ Y: }) s/ y) x) Y" D7 k2 K
    % copy over all elements; only some will get updated   x(:,t) = prevx;   1 o- ?& m' c1 g1 R
    prevP = inv(prevV);   
    1 D9 o, Z' K+ s; u. V4 s: [* TprevPsmall = prevP(i,i);   3 ?0 `$ }! Z: |3 I: s% s. e
    prevVsmall = inv(prevPsmall);   
    - x! D; J8 ~0 T+ n. u[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));   
    # r7 i9 d# N, @, c- ?1 QsmallP = inv(smallV);   1 l8 N0 _2 j& U5 Q5 K) Y: X
    prevP(i,i) = smallP;   # y: ?. s/ ?3 Y3 w
    V(:,:,t) = inv(prevP);   
    / h: i& t6 L- ]; l7 I" [, Fend   
    % l5 j5 b% n  I" ~% `3 [, bend   
    & S) s8 S" M# _( p) uloglik = loglik + LL;   
    9 m; }" r1 J% v/ L: Zend
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 4 L8 I& i0 V! a1 r, i# w4 |, w
    matlab下面的kalman滤波程序
    - r( y+ N- d, h+ R) N# Q0 |" C8 aclear  N=200; w(1)=0;   9 T& f- j) m( Y$ v
    w=randn(1,N)
    ; F$ _' }, u' q' p$ f  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, 2025-8-8 03:21 , Processed in 1.024727 second(s), 84 queries .

    回顶部