QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4970|回复: 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滤波程序5 u/ E9 }! B( @  A, b4 m$ D- o7 W& R
    clear  N=200; w(1)=0;   " ~( Y% s7 \" n1 C7 }
    w=randn(1,N)
    ) K. K4 x" ]5 k" k! r4 G6 Ox(1)=0;   $ [6 Y2 D# |0 w% A& h( w/ e8 p, v/ C
    a=1;   
    7 c9 L/ U% `3 f- L; u5 Tfor k=2:N;   4 f* V6 a9 ?3 C/ f4 l
    x(k)=a*x(k-1)+w(k-1);   : h. ^& W4 @! K( }% `4 `/ h
    end   " W; Q+ L3 O6 e1 ^
    V=randn(1,N);   8 }8 d) R3 s% c% I$ P! s
    q1=std(V);   
    2 {+ H, o; s1 R7 }0 b8 mRvv=q1.^2;   1 u1 R1 P% h. H  @
    q2=std(x);   & p3 w" w0 g( q! u- @/ m8 ^
    Rxx=q2.^2;   
    ( x  n2 P; d! K* |! }% dq3=std(w);   - p- z; J$ C+ n1 x" \! E% l
    Rww=q3.^2;   9 }! q# P- [* W0 B4 i) W0 P1 e
    c=0.2;   
    1 c4 k. f3 p7 v. ~( U5 V+ CY=c*x+V;   / T/ P0 g( @' S9 F. V4 z
    p(1)=0;   # [% d. R9 j# h2 P* k* M) j
    s(1)=0;
    : N+ @$ a3 I# o9 r7 z6 r1 \for t=2:N;   
    8 C+ [% ~+ a3 q* [, kp1(t)=a.^2*p(t-1)+Rww;   
    - P; B" w# E9 ^4 M. }b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   : e+ X3 h% R9 D" r* _. u, S
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    3 j+ ?; o0 b: T* h# A* ?p(t)=p1(t)-c*b(t)*p1(t);   ' |; u; X- V/ J- h; W; H
    end   
    4 ~) b. u2 S; |! U% e8 q) L# c' St=1:N;   
    6 ^/ k: m1 `. S3 l3 J, pplot(t,s,'r',t,Y,'g',t,x,'b');   
    ' N3 D$ d. G$ }- \5 u0 ufunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    % V0 I/ o( N9 p/ o7 R" V7 U" T% Kalman filter.   . J$ c- E  O; b3 |: j
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    9 f% {' R7 O, j' w' Q%   2 ?0 z1 S# v2 G1 W' D
    % INPUTS:   4 o2 T5 p+ a6 N+ E+ }. p
    % y(:,t) - the observation at time t   5 i' l, j& R/ P) l; P
    % A - the system matrix   
    3 C6 Q8 N4 I2 d& q. u% C - the observation matrix   
    3 a, g/ i& I, B' x4 B- s+ n5 `% Q - the system covariance   
    ( J+ x/ O# }4 }7 d0 @1 B% R - the observation covariance   4 v  O3 ?: \- X, b
    % init_x - the initial state (column) vector   6 e) ?( A4 H! @7 W4 t- u) a; h  W
    % init_V - the initial state covariance   , i! H2 X$ \! o
    %   
    $ \4 t0 J6 f9 D% OPTIONAL INPUTS (string/value pairs [default in brackets])   
    0 _+ `/ f3 E1 B! h2 j% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   2 e1 m" J# h' \' d
    % In this case, all the above matrices take an additional final dimension,   
    : _% Z& }9 i4 `+ c. Z% i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    - S. J) M, a: h# S% However, init_x and init_V are independent of model(1).   5 i3 N3 @5 E5 J' F
    % 'u' - u(:,t) the control signal at time t [ [] ]   
    6 H. \- t$ _4 {1 u6 {! Q% 'B' - B(:,:,m) the input regression matrix for model m   
    , l; T: Z" q0 _: m2 M/ J7 G2 H  V%     T: e! ~0 R+ _5 J
    % OUTPUTS (where X is the hidden state being estimated)   . O3 W9 _2 P! d( p" C, r
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
    ' G, }2 n; c' F+ {8 K" s) g% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   1 s0 k- x2 O: [: x, F6 Y+ ^6 T
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    # G0 c7 B& O& D4 ]2 G- Q7 }% loglik = sum{t=1}^T log P(y(:,t))   
    8 q: x; r8 Z; K2 g. J; C%   
    / j. k/ g# q' r  b% If an input signal is specified, we also condition on it:   6 B7 L5 B% r! Y; u7 U& e
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    / ^7 U$ R$ b  D% If a model sequence is specified, we also condition on it:   
    3 R5 O5 E- ?6 g) u6 ^% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   " o9 o4 I$ x) {/ W) i
    [os T] = size(y);   ( a: ?, I! v3 S+ _. ~
    ss = size(A,1); % size of state space   5 D0 @5 y. |. x8 w5 c
    % set default params   
    2 i0 z( R4 P- i& H: {4 E/ \model = ones(1,T);   
    / C7 U/ V* a: C& `& iu = [];   
    ; l0 W( K* M" L& V$ q- h" cB = [];   
      v* i" k" {) l: Wndx = [];   4 O3 M; w+ j! l0 u( Y
    args = varargin;   
    7 |, c% J# d4 f7 Y& }nargs = length(args);   
    - [% a; E2 W# V# c  r9 q- Yfor i=1:2:nargs   
    5 ^3 B0 F' S/ O1 l$ pswitch args   
    7 w0 {) y+ v" b, a% ^. E8 hcase 'model', model = args{i+1};   5 u& l. J5 c9 k6 F. f1 V3 H  J- p
    case 'u', u = args{i+1};   ( K; c6 u' S( y7 N9 [" X
    case 'B', B = args{i+1};   
    $ R  V' t& z  S# K% Xcase 'ndx', ndx = args{i+1};   
    0 {. ?# M* k& A. ^5 j' \otherwise, error(['unrecognized argument ' args])   ( F6 j! h- ]+ N; r2 D* T. v) }5 G' A
    end   
    " ^/ A# ?* G7 h4 ]# @" Tend   
    : p# G' b& c7 Y9 ax = zeros(ss, T);   # [. N5 I: {$ M0 ]% F
    V = zeros(ss, ss, T);   $ A3 a* [1 i: {% {1 J
    VV = zeros(ss, ss, T);   
    6 _8 B+ r, P9 E2 s8 Gloglik = 0;   2 r  M! q: z6 {! O5 U  t
    for t=1:T   m = model(t);   ) B  C& Z+ a$ B) [: M! c: U# n
    if t==1   %prevx = init_x(:,m);   
    $ M. z/ {3 ^3 [6 S" ~, x3 u%prevV = init_V(:,:,m);   9 _9 h, c) b4 W4 c) M( M) C
    prevx = init_x;   . o' \: l2 R0 P+ {  K
    prevV = init_V;   9 `! p& ]5 t5 A
    initial = 1;   8 ~" W) Q" |7 i+ S& O5 ?" I% N
    else   prevx = x(:,t-1);   
    % S) p( A, \! m! P6 P- k% w  rprevV = V(:,:,t-1);   
    - w4 s5 ]' \4 Minitial = 0;   
    ' A" q6 |+ p: [6 M9 n1 q9 s9 Kend   
    2 L+ \' s" j& K- kif isempty(u)   * w3 [; s. \9 x" U# m
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    ! u1 K1 h8 R7 q4 S: a1 skalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    4 R* I5 }+ ?5 {5 o$ P  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    0 R% c* \' |5 ?0 F     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   . ^6 M. e% w6 y% S% P9 B7 `
    else   / \2 W2 [2 ~! x* O2 c- |4 `6 j
    i = ndx;   + S* ^! m) D/ z# P' q( j$ g6 v% ^& o
    % copy over all elements; only some will get updated   x(:,t) = prevx;   
    ! Y! m! ?' l+ u5 f2 n* [5 MprevP = inv(prevV);   , k' q" p, R( r4 p" n
    prevPsmall = prevP(i,i);   / v% b. o. z5 R+ P7 l& n
    prevVsmall = inv(prevPsmall);   7 j/ u9 |% Z* s7 o, _0 Z
    [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));   ( u4 Y$ M/ k" v8 Q
    smallP = inv(smallV);   
    7 s% v( ~, n2 I5 a: o: WprevP(i,i) = smallP;   : }9 e: B0 Z% S0 W
    V(:,:,t) = inv(prevP);   
    0 x: M: B+ A5 B$ e; C; b' Y9 B- ?end   
    : B* |3 [. Z5 lend   ) F% R& d; t, l' Q7 u. r$ \3 s
    loglik = loglik + LL;   
    , I% L1 K( @/ y8 send
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 7 i' f1 x/ S* N
    matlab下面的kalman滤波程序
    % x) [' e: u! B4 ^6 ]+ g, k% nclear  N=200; w(1)=0;   
    9 n; Y" j$ X# O8 T% \; _4 w6 }7 Xw=randn(1,N)

    4 ~0 v& k& Z1 _& M+ z* O- Y强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-6-11 11:57 , Processed in 0.454610 second(s), 84 queries .

    回顶部