📄 plspulsm.m
字号:
function b = plspulsm(u,y,n,maxlv,split,delay)
%PLSPULSM Identifies FIR dynamics models for MISO systems
% This function determines the coefficients for finite impulse
% response (FIR) models using PLS for multi-input single
% output (MISO) systems. The inputs are the matrix or vector
% of system inputs (u), the system output (y), the number of
% FIR coefficients to include for each input (n), the maximum
% number of latent variables to consider (maxlv), the number of
% times to split the data set for cross validation (split) and
% the number of time units of delay for each input (delay).
% The output is the vector of FIR coefficients (b) given in
% in the order they appear in the input.
% I/O format is: b = plspulsm(u,y,n,maxlv,split,delay);
%
% Example b = plspulsm([u1 u2],y,[25 15],5,10,[0 3])
% This system has 2 inputs, with 25 and 15 coeffs, max of 5 lvs,
% 10 splits of the data, and 0 and 3 unit delays on each of
% the two inputs. Note that this function uses contiguous blocks
% of data for cross-validation.
% Copyright
% Barry M. Wise
% 1991
% Modified April 1994
[mu,nu] = size(u);
[my,ny] = size(y);
% Check to see that matrices are of consistant dimensions
if nu > mu
error('the input u is supposed to be colmn vectors')
end
if ny ~= 1
error('the output y is supposed to be a colmn vector')
end
if mu ~= my
error('There must be an equal number of points in the input and output vectors')
end
sum(n);
if maxlv > ans
error('The max no. of latent variables must be <= sum(n)')
end
test = mu - n;
% Find maximum number of terms for all inputs
a = max(n+delay);
% Write out file using maximum number of terms
for i = 1:nu
[temp,y2] = writein2(u(:,i),y,a);
% Delete proper number of columns according to delay and # of coeffs
temp = temp(:,delay(:,i)+1:n(:,i)+delay(:,i));
% Construct total matrix from each input part
if i == 1
umat = temp;
else
umat = [umat temp];
end
end
[press,cumpress,minlv,b] = plscvblk(umat,y2,split,maxlv);
z = axis;
yh = ((z(4) - z(3))*0.92)+z(3);
if nu > 1
cn = cumsum(n);
hold on, plot(cn(1:nu-1),zeros(1,nu-1),'+b'), hold off
for i = 1:nu
s = sprintf('FIR Model Input %g',i);
if i == 1
text(2,yh,s);
else
text(cn(i-1)+2,yh,s);
end
end
else
text(2,yh,'FIR Model Regression Coefficients')
end
pause
ypred = umat*b;
[mb,nb] = size(ypred);
plot(1:mb,ypred,1:mb,ypred,'+r',1:mb,y2,1:mb,y2,'og')
txt = sprintf('Actual (o) and Predicted (+) Outputs from %g LV PLS Model',minlv);
title(txt)
xlabel('Sample Number')
ylabel('Output')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -