QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4893|回复: 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滤波程序3 d) P6 C5 j5 |
    clear  N=200; w(1)=0;   
    + a7 x6 E! w6 I0 k- v' rw=randn(1,N) 6 \( {" }3 Y- g, T6 o+ }1 N- q0 ~
    x(1)=0;   
    1 g( N; F4 T! a7 c5 na=1;   3 ], C! I/ h2 z1 l" U
    for k=2:N;   
    % x8 J- A% T3 g/ ax(k)=a*x(k-1)+w(k-1);   
    ' N* P3 v" N; J+ W2 t8 Fend   
    3 @# l# z- {/ Q/ U" T% |" fV=randn(1,N);   8 l; k* n6 |  R) R# F% s
    q1=std(V);   
    3 H7 w0 Y4 o' w6 s+ ]Rvv=q1.^2;   " ?) o& D6 H$ Y0 S
    q2=std(x);   . q9 r+ o% k1 d, V. R! B
    Rxx=q2.^2;   
    1 Y/ y9 B  ]: q; x9 K/ ~q3=std(w);   
    $ C# U) n% j0 r  [% _. bRww=q3.^2;   5 O3 r5 y4 W" }- F! T
    c=0.2;   3 T# p: x; r) d3 G% G6 ?5 U
    Y=c*x+V;   ! {6 J8 G1 X8 |6 l
    p(1)=0;   4 ], [5 ]8 f, u3 K  f- H
    s(1)=0;) Q# X# w4 @+ E5 R& @
    for t=2:N;   
    # u  E2 f! ^+ O: i3 T8 W: ^5 _p1(t)=a.^2*p(t-1)+Rww;   
    0 Z1 Y* z/ k) T2 T, L/ Pb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   . w+ {* I0 o/ t! H4 j
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    % W6 V! Y8 d4 v) }p(t)=p1(t)-c*b(t)*p1(t);   % u5 v" Y; H3 h3 M! k  {, b
    end   # A' u: {9 Z( K5 f
    t=1:N;   ! ~/ y: o( S* O& R3 j7 O, }
    plot(t,s,'r',t,Y,'g',t,x,'b');   , d; {6 l! C+ f0 C" {$ e3 j5 W
    function [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    $ y! s; m- c  @+ y% Kalman filter.   
    4 n3 r7 d6 A. g+ I! G% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   / x! X1 \8 [( M5 s; w4 p! N3 A
    %   
    . O  v, G$ c8 m% INPUTS:   / j3 A7 d0 ^# O) b& S' V: g6 }
    % y(:,t) - the observation at time t   
    4 q; B) E: M2 k7 ?( t* Y9 y% A - the system matrix   # @! z% ^: v  a# w, D0 t; W( ]7 M6 u
    % C - the observation matrix   
    1 i, ?1 f4 \9 T2 {% Q - the system covariance   
    # i8 {9 ?4 m* U1 R% R - the observation covariance   " F" @1 J+ n. S2 R+ @
    % init_x - the initial state (column) vector   5 P& r1 Z, c/ w$ L4 P- i- ]
    % init_V - the initial state covariance   ! J) W7 k8 ?" v
    %     Z, K! f4 B2 F! K
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    * V3 F3 Y# L+ n. R8 J1 ]% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   # p' I* Z1 Z! X; N9 {3 h# D" S
    % In this case, all the above matrices take an additional final dimension,   $ i2 ~7 x+ q3 |1 p, y
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    & `7 ^5 P. J  y% However, init_x and init_V are independent of model(1).   
    ' [6 \0 ^- T! d" N" t4 ?2 l* q$ x% 'u' - u(:,t) the control signal at time t [ [] ]   
    ! O3 T) _( h7 j8 {- [0 ^( D. A! E% 'B' - B(:,:,m) the input regression matrix for model m   
    0 j6 A! V1 Y" P. s0 H# R9 [%   
    * U, j& K8 W1 d  Q% OUTPUTS (where X is the hidden state being estimated)   
    9 n( U* `! O, O& e( B& D% x(:,t) = E[X(:,t) | y(:,1:t)]   , e9 W# k4 n0 M$ c
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   / I$ I. ^4 z' s9 c3 _. K
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   
    ( [. |, s! k! {! P$ \: l% loglik = sum{t=1}^T log P(y(:,t))   6 K1 N7 n$ c2 s0 F
    %   1 z3 o1 b1 v- z% G0 {& G" `- n
    % If an input signal is specified, we also condition on it:   & o  i( t& D; z+ E; o6 p1 {7 X
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    ; a1 Q9 t' m1 }  @! C* A% If a model sequence is specified, we also condition on it:     \' J! b- m" `
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   ! d0 b% r9 o/ ^
    [os T] = size(y);   
    0 r! w. ^" B; I& l8 o+ S6 W+ V' wss = size(A,1); % size of state space   
    ! x$ v& B% T/ g& W% k% set default params   
    $ f$ U) q" ]( R# G' n  ^model = ones(1,T);   7 W+ X% u1 I5 D' H( ^& T: h0 B
    u = [];   + I9 I- P, J' t) E1 y) r
    B = [];   
    0 z8 q/ Q! I% M6 _: j2 K3 \ndx = [];   
    - j, N! v# H# |% L$ c/ eargs = varargin;   % i, X7 h3 {* }; s
    nargs = length(args);   
    " w/ U: L% o: e. `, Vfor i=1:2:nargs   
    : E1 P. A0 E# tswitch args   
    3 \* k  Q; H, @9 M+ C7 Ecase 'model', model = args{i+1};   . m+ [7 u) }! B, ~# ~7 S
    case 'u', u = args{i+1};   - F) |; t6 h4 d0 T0 D" _
    case 'B', B = args{i+1};   
    + l6 R" e$ D3 ]3 g1 E7 Rcase 'ndx', ndx = args{i+1};   8 ?8 f, O0 `& S3 ?% ~% a( f* x
    otherwise, error(['unrecognized argument ' args])   + }; t3 [2 J* s5 X6 z5 w8 U; M
    end   
    0 w- l' g" n2 G$ @5 Jend   / P/ C7 w5 k  {$ L3 }; _' a8 h
    x = zeros(ss, T);   & f! j/ F4 Q7 L) C0 u8 ]
    V = zeros(ss, ss, T);   
    / `- s4 Y5 V; mVV = zeros(ss, ss, T);   
    8 V% \2 M8 X" m2 |( b4 mloglik = 0;   
    6 Y- l8 h! l) ofor t=1:T   m = model(t);   * X$ m% I* @# o' S
    if t==1   %prevx = init_x(:,m);   
    9 c% k. f3 v6 F: v* J; z9 R%prevV = init_V(:,:,m);   3 I# _% P. c' _8 O* A3 W
    prevx = init_x;   ( d  Y5 t6 W8 j6 ^# E
    prevV = init_V;   $ a5 m7 z' ?( o; h7 ?- F& d
    initial = 1;   $ O+ Z! B9 J, i7 W# k
    else   prevx = x(:,t-1);   
    ; @) N! H7 N1 c' _/ ^prevV = V(:,:,t-1);   3 h9 s6 I& v2 c8 Z3 Z* q: R3 k8 V) F
    initial = 0;   9 }9 d4 v) u: g: o# J; ]! R
    end   
    2 Z, `: }4 w" _, s8 e* vif isempty(u)   . U8 K- s: c9 [6 q- S- J
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    ( e, r7 R4 `2 m* S( e3 V$ skalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   / g) W5 C, V4 I# C/ u. p
      if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    7 a( C. T1 B5 S3 `$ \2 s2 q     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   0 i8 W; q+ ~' T8 z0 F
    else   
    4 F' X/ ]' ~/ {: a5 I& |# ji = ndx;   
    ( p- a- Z2 k8 }) `  {# w% copy over all elements; only some will get updated   x(:,t) = prevx;   
    $ B" w: U9 r* ^$ T: D# E2 i( rprevP = inv(prevV);   
    1 n/ T) R- y- h, R9 B9 EprevPsmall = prevP(i,i);   
    % F( V; I& [8 OprevVsmall = inv(prevPsmall);     [: y# F3 `  @$ `& G& 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));   
    ! g; S& A! W( d( u1 msmallP = inv(smallV);   1 @) I/ x/ Q, S0 q
    prevP(i,i) = smallP;   * G' m  @3 @/ y& T2 j
    V(:,:,t) = inv(prevP);   
    ( [4 p; E. D% F4 rend   
    7 k, b+ I9 Z! W1 M# S. |2 x* hend   
    $ K6 b) S$ R4 U% I+ F0 ?$ uloglik = loglik + LL;   ) u4 ?& d! v/ L
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48
    $ z7 N0 V' \; u) o: tmatlab下面的kalman滤波程序
    0 i  p8 s0 g$ D- uclear  N=200; w(1)=0;   
      E" ^. x' Q  o/ r# W* Zw=randn(1,N)

    , j* f$ M$ G6 e1 J3 r强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-4-16 11:50 , Processed in 0.423628 second(s), 84 queries .

    回顶部