QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5043|回复: 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滤波程序
    0 e8 R  i# f- s2 b/ Zclear  N=200; w(1)=0;   
    # d/ A7 v8 e; b8 h# [w=randn(1,N) . U" u- N. }, |6 S
    x(1)=0;   
    0 c/ T8 K7 O- m6 o5 na=1;   
    7 @6 k. e4 q9 x' F, X! mfor k=2:N;   % N" C4 K7 w* V( h( O# {, @! P4 A
    x(k)=a*x(k-1)+w(k-1);   # G5 e) C2 c* ?# L
    end   8 p- S8 @( ^6 g
    V=randn(1,N);   1 u" l8 D" W/ Q) y
    q1=std(V);   
    , H$ Z* K6 H: JRvv=q1.^2;   
    8 I- S3 }# ?7 L4 Dq2=std(x);   ; X, S/ h$ \$ e$ n: I! G! Z1 `
    Rxx=q2.^2;   3 j% X& v: F/ j0 @" a/ ~1 f" n
    q3=std(w);   5 t7 B) Q9 i  J7 i# G: t
    Rww=q3.^2;   5 f& T5 S" [3 E1 e) L* ~, W/ T
    c=0.2;   , K& x' W- }7 |5 d/ z9 ^5 G
    Y=c*x+V;   
    # h' O: P! x9 M* u+ o* k4 B, r  ^p(1)=0;   
    - z- \* V6 R, J" m2 n5 X+ t$ w2 ys(1)=0;
    + @, ]; N9 ]9 |) ifor t=2:N;   
    , _. z, X+ e5 X/ A4 e( f" sp1(t)=a.^2*p(t-1)+Rww;   8 b: [* M& `; }6 e: H
    b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);   # Y1 E3 x- [5 c$ n
    s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));   
    " A) V/ H0 ^( s. r0 ^# ~p(t)=p1(t)-c*b(t)*p1(t);   
    + o5 a) ]2 r) Y1 @  ]3 K+ h1 uend   
    9 e2 Z. r& _- E% F4 M' Ut=1:N;   
    6 v% O7 X2 w+ ^, j! Z# yplot(t,s,'r',t,Y,'g',t,x,'b');   
    " L) c( J0 ~9 {5 M! pfunction [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, varargin)   
    , H& h3 P" n5 U: {% Kalman filter.   
    5 C2 ^8 H8 q( l  `: b% [x, V, VV, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V, ...)   # v! K, \/ ]; K4 c) _
    %   " }9 k8 f% e; S/ C  A
    % INPUTS:   
    . E+ F4 s, |9 B4 h: i% z% y(:,t) - the observation at time t   ( k9 J  R5 J& a: ]# l4 Q
    % A - the system matrix     M  o5 X6 _9 E1 h0 F
    % C - the observation matrix     a' M+ d7 F, n& w0 t5 W
    % Q - the system covariance   ( q. i2 [5 G* c/ ?4 h  U. n
    % R - the observation covariance   
    $ r" X( j3 j/ w" O( u6 R3 X( {6 \% init_x - the initial state (column) vector   * t2 Y, m/ p3 n  Y$ ^+ O
    % init_V - the initial state covariance   
    7 ^: ?3 d; J3 |' y: C/ g6 w%   
    % K) e" k! {1 ]. B% [: F" {2 k9 m% OPTIONAL INPUTS (string/value pairs [default in brackets])   1 ]2 j( t: H  o( S. s2 L; M
    % 'model' - model(t)=m means use params from model m at time t [ones(1,T) ]   
    / r2 M; M* M$ x% In this case, all the above matrices take an additional final dimension,   3 ]. o- Z& z( ~5 N/ R( P! n* d2 `
    % i.e., A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m).   
    & S9 X  P. G4 q5 h9 M" q% However, init_x and init_V are independent of model(1).   
    4 `& F; d7 ?+ {% 'u' - u(:,t) the control signal at time t [ [] ]   
    ! I- r* g- K; d0 j1 y5 o- v% 'B' - B(:,:,m) the input regression matrix for model m   
    7 F3 o9 O* O8 J( }- D' H%   
    " {2 E" ?6 |' ]" ~% OUTPUTS (where X is the hidden state being estimated)   + ^" O6 T; g$ c( @
    % x(:,t) = E[X(:,t) | y(:,1:t)]   
    5 M# p1 {! m" |! l& e6 d% V(:,:,t) = Cov[X(:,t) | y(:,1:t)]   / u3 g; a* c: ^7 j' \/ e0 z) J  N2 w
    % VV(:,:,t) = Cov[X(:,t), X(:,t-1) | y(:,1:t)] t >= 2   , {2 a& I5 Q/ u1 ~/ z
    % loglik = sum{t=1}^T log P(y(:,t))   . S6 L  L. ~( ?! \- y+ j( m1 U& ?7 w0 e
    %   - D0 `- |+ D8 I
    % If an input signal is specified, we also condition on it:   
    5 d& ~/ \, }1 I. V5 X! o+ I  `% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t)]   3 I  t9 x6 O3 |# |; d
    % If a model sequence is specified, we also condition on it:   
    4 Y8 N4 e/ g7 s- l% e.g., x(:,t) = E[X(:,t) | y(:,1:t), u(:, 1:t), m(1:t)]   
    $ w% R. A' N; f* i" w# y% X[os T] = size(y);   / n1 V3 R: l' W% E6 p7 O
    ss = size(A,1); % size of state space   , N% b7 c4 I; F1 E
    % set default params   " p, E& `; a; r# B
    model = ones(1,T);   ; o2 q. o  W/ E" x! G/ I5 O1 V" B
    u = [];   
    - t7 Y$ K; I9 A# ?B = [];   
    , }8 f0 G& Z) c' Andx = [];   5 J( g9 z6 b) U' v1 t( O
    args = varargin;   
    # f. V3 e0 W* A! `8 R& G6 k" U6 `5 Qnargs = length(args);   + r% {4 D7 h2 E
    for i=1:2:nargs   
    7 E7 ^: q3 [- mswitch args   ) H- ^6 o3 g8 w& n. O1 G- r
    case 'model', model = args{i+1};   # f$ ]4 B" v! q7 H
    case 'u', u = args{i+1};   7 R/ Z0 o7 m% P' q4 H9 ]! Z
    case 'B', B = args{i+1};   / z, ^9 J0 X6 ]1 B' H* ~
    case 'ndx', ndx = args{i+1};   
    * W8 A% M3 x! z3 Ootherwise, error(['unrecognized argument ' args])   
    1 i+ G& c0 j3 [end   ) W$ F9 y3 I; o# N8 m6 c
    end   2 U' V  S8 u: I. b! I1 z/ ^* ^0 r0 t/ ~
    x = zeros(ss, T);   7 B# z5 C$ Z$ W; J. o- a& k9 ?1 L
    V = zeros(ss, ss, T);   
    4 G* g$ ?5 B9 L. X. L. U9 a; dVV = zeros(ss, ss, T);     W* Y& A7 i" x) G  ~
    loglik = 0;   
    ( l% t$ K* u. Y/ D+ afor t=1:T   m = model(t);   9 \- S% h3 [5 j* e4 G  f
    if t==1   %prevx = init_x(:,m);   
    6 _( F: F! P* N0 f7 I. s9 J%prevV = init_V(:,:,m);     A; f# ^3 P5 H% C4 D& p8 P
    prevx = init_x;   
    " h: p9 Y9 p, k1 pprevV = init_V;   
    + [6 B" W% G3 x- g* G1 w; Einitial = 1;   
    ! l1 w3 b3 B5 I. Telse   prevx = x(:,t-1);   
    2 u) b+ g, S% ?2 \prevV = V(:,:,t-1);   / I+ u7 q, K4 g- {5 r5 D
    initial = 0;   
    9 S& V2 }% P3 J  g5 _& O: ~; xend   
    3 g) A& g; w1 e* ~7 p# a' _if isempty(u)   
    $ ?1 K; |! D* L+ O6 h! i2 s[x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   
    ( A( Z! ~( H. p/ ~. E) Wkalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, 'initial', initial);   else   
    " c. q) z- ~) x. s1 ^  if isempty(ndx)   [x(:,t), V(:,:,t), LL, VV(:,:,t)] = ...   * p% i) X; C- L5 B9 @
         kalman_update(A(:,:,m), C(:,:,m), Q(:,:,m), R(:,:,m), y(:,t), prevx, prevV, ...   'initial', initial,     'u', u(:,t), 'B', B(:,:,m));   & ~6 G3 Q3 u7 }# j" k4 T
    else   ! F2 F8 J7 Q% ?. M
    i = ndx;   
    , P# g2 G; E9 R' j% copy over all elements; only some will get updated   x(:,t) = prevx;   . y: L7 V( i: m9 }1 h" B3 P
    prevP = inv(prevV);     R# d2 r$ ]$ p- V% e6 S
    prevPsmall = prevP(i,i);   " ~  [# X3 W& L, {; A8 U4 W! Y
    prevVsmall = inv(prevPsmall);   
    / q( Z7 j0 @0 ^& y[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));   
    7 |5 R/ v  }8 {8 e) X* csmallP = inv(smallV);   
    3 e! X  ?' j0 R- m' d! @) x' g* \prevP(i,i) = smallP;   
    / y& y5 ]+ k: k  U" G; o  ?1 C# nV(:,:,t) = inv(prevP);   
    9 Y8 M& ~" W2 u9 nend   7 @8 \- W4 b0 G7 m" k
    end   # u% ?  A2 ~  u+ P
    loglik = loglik + LL;   : Z$ C$ o* w& h6 D
    end
    回复

    使用道具 举报

    1

    主题

    3

    听众

    349

    积分

    升级  16.33%

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

    [LV.7]常住居民III

    社区QQ达人

    群组2012第三期美赛培训

    厚积薄发 发表于 2011-11-28 10:48 # x1 A. j: [, J7 p) }" F
    matlab下面的kalman滤波程序4 m& H3 O8 y& [# r( E0 Y
    clear  N=200; w(1)=0;   
    ( H% |; d+ U+ p' E: w3 Lw=randn(1,N)

    4 P. p/ [# f3 V/ 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, 2026-8-5 22:27 , Processed in 0.494769 second(s), 83 queries .

    回顶部