QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5139|回复: 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滤波程序
    * \+ h) E  l: iclear  N=200; w(1)=0;   ; c8 _. A) v4 E# N
    w=randn(1,N) 9 Q& b; P; J; z
    x(1)=0;   % n: w5 ]# y, ]1 ~' z, h
    a=1;   
      s# C" V( S  @7 P$ y; u' u0 U1 ufor k=2:N;   " O+ S% e. j6 y  l! L8 p& t
    x(k)=a*x(k-1)+w(k-1);   : s. A3 ^6 ~; g! u* I' ?
    end   
    $ e2 Q8 W' O/ u1 z# [+ [  GV=randn(1,N);   
    4 P9 K5 r* A5 h1 ?: uq1=std(V);   # V) g# E* f/ A8 x1 i8 |6 q* ~
    Rvv=q1.^2;   & q) Y) s8 B, H0 U
    q2=std(x);   ) e% _. u9 I. ]
    Rxx=q2.^2;   
    6 X( L* \9 R% t4 R( X7 gq3=std(w);   
    ( y5 \5 _/ |  GRww=q3.^2;   
    - q' b' w' d& G) V" U* k) Bc=0.2;   / t' d, d. C. X
    Y=c*x+V;   
    " R0 N, _' E' E4 N3 ap(1)=0;   
    ( p+ P  I# _% |2 J; ~3 V: ^4 Ys(1)=0;
    * r# {3 N4 ^$ j7 A/ e$ Afor t=2:N;   ( [3 L" b' G2 P7 l4 U4 L7 a
    p1(t)=a.^2*p(t-1)+Rww;   
    5 {% `2 [0 T* d2 t( J/ Kb(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   & @3 C( `3 I2 j
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
      L0 d# N/ q: n6 a: `- f7 |/ W0 S) B5 Ap(t)=p1(t)-c*b(t)*p1(t);   ; x& A! e9 |0 N$ ~
    end   5 I% u+ ~! D! E6 d0 ]
    t=1:N;   
    2 {5 a0 K6 B# E& uplot(t,s,'r',t,Y,'g',t,x,'b');   
    ) ?; b& K+ M- n* I. ~) F" pfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   / \1 R) j! T* D8 i
    % Kalman filter.   . W/ P# d7 I4 X5 o
    % [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   
    4 v7 G- s, s3 L2 X3 ]$ W%   # M- p! m% b6 {% p
    % INPUTS:   : m/ w6 `5 |( D# B) u: e( `* O
    % y(:,t) - the observation at time t   1 W- {( t3 r6 ^8 j5 R3 i2 J6 I/ W; M/ G2 Y
    % A - the system matrix     D+ \$ y3 Q1 Z" m9 f
    % C - the observation matrix   
    5 h! ^2 `0 H+ d0 Z7 \, R/ R  b1 T% Q - the system covariance   - ~% n+ [+ G  ^& p0 E
    % R - the observation covariance   
      p* V1 u. \- H$ y. v; p% init_x - the initial state (column) vector   ) c$ b! w. S. ?5 ~( e1 w
    % init_V - the initial state covariance   
    0 i  u. }4 r0 S' d6 m, r%   & N; l- F3 f6 T& o+ Y) B4 `- v
    % OPTIONAL INPUTS (string/value pairs [default in brackets])   
    3 |7 t% o. |6 T8 B1 W$ n% 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   1 U0 z6 i9 @. t. H0 s7 P1 @
    % In this case, all the above matrices take an additional final dimension,   ; I! S1 h+ D3 x6 w8 W
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   ! X% p0 h8 y, L2 m; f3 B
    % However, init_x and init_V are independent of model(1).   
    8 @3 q5 j: H7 }4 A% 'u' - u(:,t) the control signal at time t [ [] ]   
    5 l- f9 o* J  g" ~8 C( e1 T3 X% 'B' - B(:,:,m) the input regression matrix for model m   ) g8 g. T, Z9 l8 x* C" C( T1 H
    %   ' B( e& O& W: E  I+ c# @
    % OUTPUTS (where X is the hidden state being estimated)   
    $ g( U6 U6 [6 H( N" S# G% x(:,t) = E[X(:,t) | y(:,1:t)]   * y; N0 S, }3 W) F
    % V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   ; y5 ]( t4 Z( o! O+ \3 s# P" E
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   ( X& \  ]: Y/ Y0 k& {! @
    % loglik = sum{t=1}^T log P(y(:,t))   
    7 J6 o1 p- X- y- B2 m9 a) H& V5 ]%   
    ' U2 P0 j6 h) a" [4 U4 M, Z5 t9 d% If an input signal is specified, we also condition on it:   
    ! e/ O3 Y4 o* _4 o% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   
    ( @- e; J1 J" e( U' X) ?  E% ^% If a model sequence is specified, we also condition on it:   * I" C* Q9 R6 c0 A0 `: X
    % e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   8 y' h" K( ^$ }. o( H
    [os T] = size(y);     B" M# s# x% e! X0 \# s
    ss = size(A,1); % size of state space   
    + b' W3 n2 [3 F; Z! H$ H# ]% set default params   
    3 p- g' \( \: W% `5 Wmodel = ones(1,T);   
    / e/ b% x! @5 u0 g# ?u = [];   3 I0 {( I, y: h, L) P
    B = [];   : d& \8 ~& a# n) \, E
    ndx = [];   ! A$ Q2 s  @6 c, P% x' I
    args = varargin;   
    / }3 [! H( N' wnargs = length(args);   9 ]0 Z2 R, M, \! X; w7 N  \. k
    for i=1:2:nargs   
    / `" L# Y! k6 |- Yswitch args   
    5 s# K7 y, i* h. _9 T2 m, tcase 'model', model = args{i+1};   
    $ I; ?' g+ l8 H) m" V+ ~1 xcase 'u', u = args{i+1};   
    ) m. p% N0 s! s' m* @8 gcase 'B', B = args{i+1};   " v( X! G8 x& F( D2 t
    case 'ndx', ndx = args{i+1};   8 O9 o1 U. h8 y2 }4 d) ~
    otherwise, error(['unrecognized argument ' args])   
    ! R& q- {$ R( \end   
    % h& G. A# i8 Z! eend   
    % n# l" F  [# `0 V; b: A1 Jx = zeros(ss, T);   
    * U) q0 m6 B1 p4 JV = zeros(ss, ss, T);   
    + g' e! i: S$ a; R! uVV = zeros(ss, ss, T);   : y* {: K- B3 o" i
    loglik = 0;   ( w7 \/ o4 U4 u- V6 b
    for t=1:T   m = model(t);   & n3 M$ b, x5 P: j
    if t==1   %prevx = init_x(:,m);   
    5 s$ m# |# X  B, A' M%prevV = init_V(:,:,m);   
    3 s# t# m. x0 v7 \- r1 ^/ Qprevx = init_x;   
    ; f! Z+ ^6 _- }( k5 P- S4 \prevV = init_V;   
    ' Y& u, d  v4 oinitial = 1;   
    / R4 j7 O4 r  g) q0 delse   prevx = x(:,t-1);   
    : n- P/ l6 v! AprevV = V(:,:,t-1);   7 E- m  h$ K& z5 Q* p) ^! `9 V
    initial = 0;   $ J4 ^2 f- M! B  T. f4 ~" D
    end   ! ?" |" X4 j$ B! ~% W
    if isempty(u)   0 f# \; A( d8 ^% R& A
    [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   7 W" n% K! T* J' r6 X
    kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    # ?) P/ F) S9 D9 H$ m' x3 C& \: W  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    . V$ u' s7 ]" ~: Y. G     kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   
    & O! s2 [3 j7 S* e2 C8 R1 i/ Helse   
    ; H( b' a6 b+ hi = ndx;   
    / T% p1 q% S: R% copy over all elements; only some will get updated   x(:,t) = prevx;   , z- I" Y$ h% k9 ?" m; H- J
    prevP = inv(prevV);   5 y7 ~. x9 @8 U  g! o( |" `
    prevPsmall = prevP(i,i);   ) ]& v9 k% s/ R. |  _' x) A  M
    prevVsmall = inv(prevPsmall);   + ~1 L6 f2 n9 N2 j
    [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));   , X0 z" D$ F5 t
    smallP = inv(smallV);   , v+ I/ H. _+ j" h
    prevP(i,i) = smallP;   5 E, O8 D1 ]9 [- I' j& n2 N
    V(:,:,t) = inv(prevP);   
    - C/ U$ I6 w/ dend   
    , R! V; q( ]9 y( i# ^# v# Send   
    / C, ?7 I& R9 j& d9 _+ G- |8 V& v- xloglik = loglik + LL;     y* f$ c+ h: g& n: W$ a' `2 Q' |
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组: 2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 + e2 F8 b0 P- v! P( a! Z, Z, Z
    matlab下面的kalman滤波程序7 j- P3 T; G- {" L3 H+ M* G( b
    clear  N=200; w(1)=0;   8 @7 Y* j. p0 ]4 C
    w=randn(1,N)

    1 d& p# Y' N( T9 k3 l强大呀,下了
    回复

    使用道具 举报

    工科男 实名认证       

    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-10-9 05:43 , Processed in 0.460769 second(s), 83 queries .

    回顶部