function [result,error,errorDim]=zjfc(s,opt) [m,n]=size(s); p=max(s(:,1)); %取水平数 q=n-1;%取列数 sum0=zeros(p,q); for i=1:q for k=1:m for j=1:p if(s(k,i)==j) sum0(j,i)=sum0(j,i)+s(k,n); %求和 end end end end totalsum=sum(s(:,n)); ss=sum0.*sum0; levelsum=m/p; %水平重复数 ss=sum(ss./levelsum)-totalsum^2/m; %每一列的S ssError=sum(ss(opt)); for i=1:q f(i)=p-1; %自由度 end fError=sum(f(opt)); %误差自由度 ssbar=ss./f; Errorbar=ssError/fError; index=find(ssbar<Errorbar); index1=find(index==opt); index(index==index(index1))=[]; %剔除重复 ssErrorNew=ssError+sum(ss(index)); %并入误差 fErrorNew=fError+sum(f(index)); %新误差自由度 F=(ss./f)/(ssErrorNew./fErrorNew); %F值 errorDim=[opt,index]; errorDim=sort(errorDim); %误差列的序号 result=[ss',f',ssbar',F']; error=[ssError,fError;ssErrorNew,fErrorNew];
时间: 2024-04-20 22:25:38 浏览: 75
shujuchuli_方差标准差_
根据你提供的代码,我注意到在最后一行中,你将结果errorDim进行了sort操作,以对误差列的序号进行排序。
问题可能出现在这里,如果你在调用zjfc函数时传递的opt参数不是按照升序排列的,那么对errorDim进行排序可能导致index1的值不正确。
你可以尝试在调用zjfc函数时,将opt参数按照升序排列,并确保传递给zjfc函数的opt参数与你的数据矩阵s中的列索引对应。
另外,请确保你在调用zjfc函数时传递了正确的参数,并且数据矩阵s的维度与代码中的预期一致。
如果问题仍然存在,请提供更多关于报错信息的细节,以便我能够给出更具体的解决方案。
阅读全文