⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radialrw.m

📁 大家可以参考的例子滤波源码
💻 M
字号:
function [k,mu,M,match,aRW,rRW] = radialRW(match,aRW,rRW,k,mu,M,delta,x,y,hyper,t,bFunction,sWalk,walk);if nargin < 14, error('Not enough input arguments.'); end[N,d] = size(x);      % N = number of data, d = dimension of x.[N,c] = size(y);      % c = dimension of y, i.e. number of outputs.insideRW=1;uU=rand(1);% INITIALISE H AND P MATRICES:% ===========================invH=zeros(k(t)+1+d,k(t)+1+d,c);P=zeros(N,N,c);invHproposal=zeros(k(t)+1+d,k(t)+1+d,c);Pproposal=zeros(N,N,c);% UPDATE EACH CENTRE:% ==================   for basis=1:k(t),     for i=1:c,    invH(:,:,i) = (M'*M + (1/delta(t,i))*eye(k(t)+1+d));    P(:,:,i) = eye(N) - M*inv(invH(:,:,i))*M';  end;  % PROPOSE AND CONSTRAIN RANDOM WALK:  % =================================  proposal = mu{t}(basis,:) + sqrt(sWalk)*randn(size(mu{t}(basis,:)));  for i=1:d,    proposal(:,i) = min(proposal(:,i),max(x(:,i))+walk(i));    proposal(:,i) = max(proposal(:,i),min(x(:,i))-walk(i));  end;    % CHECK IF THE PROPOSED CENTRE ALREADY EXISTS:  % ===========================================   match1=0;  notEnded=1;  i=1;  while ((match1==0)&(notEnded==1)),    if (mu{t}(i,:)==proposal),      match1=1;    elseif (i<k(t)),      i=i+1;    else      notEnded=0;    end;  end;  match2=0;  notEnded=1;  i=1;  if basis>1,    match2=0;    notEnded=1;    i=1;    while ((match2==0)&(notEnded==1)),      if (mu{t+1}(i,:)==proposal),        match2=1;      elseif (i<basis-1),        i=i+1;      else        notEnded=0;      end;    end;  end;   if (match1>0),    match=match+1;    mu{t+1}(basis,:)=mu{t}(basis,:);  elseif (match2>0),    match=match+1;    mu{t+1}(basis,:)=mu{t}(basis,:);  else    % IF IT DOESN'T EXIST, PERFORM AN UPDATE MOVE:    % ===========================================    Mproposal = M;    Mproposal(:,d+1+basis) = feval(bFunction,proposal,x);    for i=1:c,      invHproposal(:,:,i) = (Mproposal'*Mproposal + inv(delta(t,i))*eye(k(t)+1+d));          Pproposal(:,:,i) = eye(N) - Mproposal*inv(invHproposal(:,:,i))*Mproposal';     end;    ratio = 1;    for i=1:c,      ratio = ratio*sqrt((det(invH(:,:,i)))/(det(invHproposal(:,:,i))))*(((hyper.gamma+y(:,i)'*P(:,:,i)*y(:,i))/(hyper.gamma+y(:,i)'*Pproposal(:,:,i)*y(:,i)))^((hyper.v+N)/2));             end;    acceptance = min(1,ratio);    if (uU<acceptance),      mu{t+1}(basis,:) = proposal;      M=Mproposal;      aRW=aRW+1;    else      mu{t+1}(basis,:) = mu{t}(basis,:);      rRW=rRW+1;      M=M;    end;  end;end;k(t+1) = k(t); % Don't change dimension.M = M;         % Return the last value of M.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -