function data_last = linear_mag( data_pre )
%data_pre
%为待拟合数据,本程序中目前以三列为一个单位,对前两列进行拟合,第三列为数据信息,比如RH@T的温度或者RT@H中的磁场,T_c为拟合阈值,只对第三列大于T_c的数据进行拟合
[row,col]=size(data_pre);
var_len=2;
%data_after=zeros((row-3)/2,col);
figure_num=1;
outdata_flag=0;
for i=0:1:col/var_len-1
k=1;
clear data_after; %每次拟合结束,删掉data_fit,重新存储
for j=1:1:row %选取横坐标大于零的数据
if isnan(data_pre(j,1+i*var_len)) == 0 && data_pre(j,2+i*var_len)>-4.96
for after_c=1:1:var_len
data_after(k,after_c)=data_pre(j,after_c+i*var_len);
end
k=k+1;
end
end
[row,col]=size(data_after);
for i_pai=1:1:row
for j=1:1:row-i_pai
data_1=data_after(j,1);
data_2=data_after(j+1,1);
if data_1>data_2
data_after([j,j+1],:)=data_after([j+1,j],:);
end
end
end
[row,col]=size(data_after);
for j=1:1:row %对数据前两列取对数
data_after(j,1)=data_after(j,1) ;
%data_after(j,1+i*3)=log10(data_after(j,1+i*3)/10000);
data_after(j,2)=data_after(j,2);
end
for j=1:1:var_len
for m=1:1:row
outdata(m,j+outdata_flag*var_len)=data_after(m,j);
end
end
outdata_flag=outdata_flag+1;
%{
这段暂时没啥用
for i=0:1:col/3-1
if data_pre(1,3+i*3)> T_c
fig=col/3-i;
break;
end
end
%}
%if data_pre(1,3+i*3)> T_c %大于T_c,进行拟合
clear data_fit; %每次拟合结束,删掉data_fit,重新存储
for delta=0.999:-0.001:0.80 %从相关系数大于0.999开始拟合,直到相关系数小于0.8结束
for j=0:1:row-2 %磁场范围从0.1T开始选取,如果相关系数均大于delta,则磁场范围从0.2T开始选取,以此类推
for m=1:1:row-j
data_fit(m,1)=data_after(j+m,1);
data_fit(m,2)=data_after(j+m,2);
end
p=polyfit(data_fit(:,1),data_fit(:,2),1); %做线性拟合,得到斜率
R=corrcoef(data_fit(:,1),data_fit(:,2)); %得到相关系数
flag=0;
if R(1,2)*R(1,2)>delta %&& j/row<0.98 %拟合到9T结束,如果满足磁场范围大于9T-15T,且相关系数>delta则记录相关数据,同时画图
flag=1;
data_last(figure_num,1)=p(1);
data_last(figure_num,2)=R(1,2)*R(1,2);
%data_last(figure_num,3)=data_pre(1,3+i*3);
data_last(figure_num,3)=j/row;
data_last(figure_num,4)=p(2);
figure_num=figure_num+1;
x=data_after(:,1);
y=polyval(p,x);
%figure(figure_num-1)
h=scatter(data_after(:,1),data_after(:,2), 30);
set(gca,'FontSize',20);
hold on;
plot(x,y,'LineWidth',2);
%{
if strcmp(str,'RT@H')==1
str_label='log10(Temperature)/K';
str1='Magnetic=';
res='log10(R(T))*100%)';
end
%}
%if strcmp(str,'RH@T')==1
str_label='1/T(1/K)';
str1='Maget=';
res='log[ρab(mΩcm)]';
%end
h1=xlabel(str_label);
set(h1,'FontSize',20)
h2=ylabel(res);
set(h2,'FontSize',20)
%{
str2='k=';
str7='T';
str3=num2str(data_pre(1,3+i*3));
str4=num2str(data_last(figure_num-1,1));
str5=[str1,str3,str7];
str6=[str2,str4];
h3=legend({str5,str6},'location','NorthWest');
set(h3,'FontSize',20)
saveas(h,[str5 '.jpg']);
%}
break;
end
clear data_fit; %每次拟合结束,删掉data_fit,重新存储
end
if flag==1
break;
end
end
%end
[row,col]=size(data_pre);
saveas(h,'summary-pen.jpg'); %该句用来做把所有的拟合直线和散点放在一张图里
end
end