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

📄 simplisma_4w.m

📁 GUI for Multivariate Image Analysis of 4-dimensional data (Matlab Code)
💻 M
字号:
function [purspec,purint,purity_spec]=simplisma(data,varlist,offset,n,data2);
% function [purspec,purint,purity_spec]=simplisma(data,varlist,offset,n,data2);
%
% It is a short non interactive version of SIMPLISMA taken from Windig's
% article Chemometrics and Intelligent Laboratory Systems, 36, 1997, 3-16. 
%
%   INPUT:
%   data contains the data matrix (spectra in rows)
%   data 2 can be ignored or empty.
%       For second derivative applications data contains the conventional 
%       data and data2 contains the inverted 2nd data.
%       to create data2 use function:
%       data2=invder(data);
%   Varlist contains the variable identifiers 
%   Offset is a correction factor for low intensity variables (1- no
%   offset, 15 - large offset)
%   n is a number of components
% 
%   OUTPUT:
%       purespec contains the pure spectra
%       purint contains the intensities ('concentrations') of the pure
%       spectra in the mixtures
%       purity_spec - spectra containing purity spectra
%
% The programm will plot the purity and standard deviation spectra, where
% the pure variables selected will be marked by a '*'. After each plot,
% any key needs to be pressed to continue.

%INITIALIZE;
if nargin==5;
   temp=data;data=data2;data2=temp;clear temp
end
[nspec,nvar]=size(data); purvarindex=[];
if nargin==4;
   data2=[];
end;

%CACULATE STATISTICS

stddata=std(data)*sqrt(nspec-1)/sqrt(nspec);
meandata=mean(data);
meandataoffset=meandata+((offset/100)*max(meandata));
lengthdata=sqrt((stddata.*stddata+meandataoffset.*meandataoffset)*...
   sqrt(nspec));
lengthmatrix=lengthdata(ones(1,nspec),:);
datalengthscaled=data./lengthmatrix;
puredata=stddata./meandataoffset;

%DETERMINE PURE VARIABLES
purity_spec=0*[1:nvar];
max_index=0;
for i=1:n+1;
   purvar=datalengthscaled(:,purvarindex);
   for j=1:nvar;
      addcolumn=datalengthscaled(:,j);
      purvartest=[purvar addcolumn];
      matrix=purvartest'*purvartest;
      weight(j)=det(matrix);
   end;
   purityspec=weight.*puredata;
	purity_spec=[purity_spec; purityspec];
   maxindex=find(purityspec==max(purityspec));
   maxindex=maxindex(1);
   %figure(2)
   %subplot(3,2,1); plot(varlist,purityspec,'g',varlist(maxindex),...
   %   purityspec(maxindex),'g*');
   max_index=[max_index, maxindex];
   %axis([sort([varlist(1) varlist(length(varlist))]) 0 1.1*max(purityspec)]);
   %if varlist(1)>varlist(2);
   %   set(gca,'Xdir','reverse');
   %end;
   %title(['purity spectrum # ', num2str(i)]);
   stdspec=weight.*stddata;
   %subplot(3,2,2);plot(varlist,  stdspec,'g',varlist(maxindex),...
   %   stdspec(maxindex),'g*');
   %axis([sort([varlist(1) varlist(length(varlist))]) 0 1.1*max(stdspec)]) ;
   %if varlist(1)>varlist(2);
   %   set(gca,'Xdir','reverse');
   %end;
%title(['standard deviation spectrum # ', num2str(i)]);
   
 %  pause
   
   purvarindex=[purvarindex maxindex];
end
%close(2)
purvarindex(n+1)=[];

%RESOLVE SPECTRA

purematrix=(data(:,purvarindex));
if isempty(data2)
   purspec=purematrix\data;
else;
   purspec=purematrix\data2;
end;

%RESOLVE INTENSITIES

if isempty(data2);
   purint=data/purspec;
else;
   purint=data2/purspec;
end;

%SCALE

if isempty(data2);
   tsi=sum(data')';
else;
   tsi=sum(data2')';
end;
a=purint\tsi;
purint=purint*diag(a);
purspec=inv(diag(a))*purspec;
H2.Position=[264 188 339 423];
%figure(H2)
%subplot(2,1,1),plot(varlist,purspec), set(gca,'Xdir','reverse')
%title ('pure spectra')
%subplot(2,1,2), plot(purint), title ('pure intensity')
%H3.Position=[616 190 339 423];
%figure(H3)
%for i=1:n+1;
%   subplot(n+1,1,i), plot(abs(varlist),purity_spec(i+1,:))
%   hold on, plot(abs(varlist(max_index(i+1))),purity_spec(max_index(i+1)),'g*');
%   set(gca,'Xdir','reverse')
%   hold off
%end

⌨️ 快捷键说明

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