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

📄 closure.m

📁 GUI for Multivariate Image Analysis of 4-dimensional data (Matlab Code)
💻 M
字号:
function [conc]=closure(conc,iclos,sclos1,iclos1,tclos1,tclos2,sclos2,iclos2,vclos1,vclos2)
% function [conc]=closure(conc,iclos,sclos1,iclos1,tclos1,tclos2,sclos2,iclos2,vclos1,vclos2)
% closure is applied for a single experiment 
% vclos is a vectorial closure of the same size than conc
% closure types

[kfin,nspec]=size(conc);

% calculation of the total sums
% iclos,sclos1,iclos1,tclos1,tclos2,sclos2,iclos2,vclos1,vclos2,conc
summ1=zeros(size(conc,1),1);
summ2=zeros(size(conc,1),1);


for ns=1:nspec,
   if iclos ==1 | iclos==2,
      if sclos1(ns) == 1,
         summ1=summ1+conc(:,ns);
      end
   end
   if iclos==2,
      if sclos2(ns) == 1,
         summ2=summ2+conc(:,ns);
      end
   end
end
% check summ1 and summ2 not to be zero
izero=find(summ1==0);
summ1(izero)=ones(size(izero));
if iclos==2,
   izero=find(summ2==0);
   summ2(izero)=ones(size(izero));
end
maxsum1=max(summ1);
maxsum2=max(summ2);

% aplication of the different closure types

for ns=1:nspec,

% one closure condition

if iclos ==1 
   if iclos1 ==1 & sclos1(ns) == 1 & sclos2(ns) == 0	
      if isempty(vclos1)| vclos1==0
         conc(:,ns)=((conc(:,ns)*tclos1)./summ1);
      else
         conc(:,ns)=((conc(:,ns).*vclos1)./summ1);
      end
   end
   if iclos1 == 2 & sclos1(ns) ==1 & sclos2(ns) == 0
         if isempty(vclos1)| vclos1==0
      conc(:,ns)=((conc(:,ns)*tclos1)./maxsum1);
  else
      conc(:,ns)=((conc(:,ns).*vclos1)./maxsum1);
  end  
end
end


% two closure conditions

if iclos == 2
   if sclos1(ns)==1 & sclos2(ns)==1
      error ('One species is included in the two closures')
   end
   
% obeying first closure condition   
   if iclos1 ==1 & sclos1(ns) == 1 & sclos2(ns) == 0	
      if isempty(vclos1)| vclos1==0
         conc(:,ns)=((conc(:,ns)*tclos1)./summ1);
      else
         conc(:,ns)=((conc(:,ns).*vclos1)./summ1);
      end
   end
   if iclos1 == 2 & sclos1(ns) ==1 & sclos2(ns) == 0
        if isempty(vclos1)| vclos1==0
      conc(:,ns)=((conc(:,ns)*tclos1)./maxsum1);
        else
      conc(:,ns)=((conc(:,ns).*vclos1)./maxsum1);
        end  
    end
    
% obeying second closure condition
   if iclos1 ==1 & sclos1(ns) == 0 & sclos2(ns) == 1	
      if isempty(vclos2)| vclos2==0
         conc(:,ns)=((conc(:,ns)*tclos2)./summ2);
      else
         conc(:,ns)=((conc(:,ns).*vclos2)./summ2);
      end
   end
   if iclos1 == 2 & sclos1(ns) ==0 & sclos2(ns) == 1
      if isempty(vclos2)| vclos2==0
        conc(:,ns)=((conc(:,ns)*tclos2)./maxsum2);
      else
         conc(:,ns)=((conc(:,ns).*vclos2)./maxsum2);
      end  
   end  
   
end

%close for condition
end

⌨️ 快捷键说明

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