Bootstrap

全国大学生数学建模竞赛2020A题炉温曲线MATLAB程序

目录

前言

一、第1问

1.1 数据预处理与数据可视化MATLAB程序

1.2 利用追赶法求解偏微分方程模型遍历寻找最优a系数与k系数MATLAB程序

1.3 代入a系数与k系数求解第1问MATLAB程序

1.4 第1问模型的检验

二、第2问

2.1 第2问按照模型遍历寻找最大过炉速度MATLAB程序

2.2 第2问模型的检验

三、第3问

3.1 第一次遍历寻找T1、T2、T3、T4、V五个变量MATLAB程序

3.2 第二次遍历寻找T1、T2、T3、T4、V五个变量MATLAB程序 

3.3 第三次遍历寻找T1、T2、T3、T4、V五个变量MATLAB程序

3.4 代入T1、T2、T3、T4、V五个变量MATLAB程序

3.5 第3问模型的检验

四、第4问

4.1 第一次遍历寻找T1、T2、T3、T4、V、Mm、data0七个变量MATLAB程序

4.2 第二次遍历寻找T1、T2、T3、T4、V、Mm、data0七个变量MATLAB程序

4.3 第三次遍历寻找T1、T2、T3、T4、V、Mm、data0七个变量MATLAB程序

4.4 代入T1、T2、T3、T4、V、Mm、data0七个变量MATLAB程序

4.5 第4问模型的检验


前言

程序中用到的附件为根据前后数据补全后的附件,从0s开始

链接:https://pan.baidu.com/s/1TZGx94tyIxSdAHkn2KXrcw 
提取码:6666

一、第1问

1.1 数据预处理与数据可视化MATLAB程序

%% 绘图
t=xlsread('附件.xlsx','Sheet1','A40:A748');
T=xlsread('附件.xlsx','Sheet1','B40:B748');
plot(t,T,'linewidth',2);
xlabel('时间(s)','FontSize',26);
ylabel('温度(ºC)','FontSize',26);
set(gca,'FontSize',26,'linewidth',1);

%% 数据预处理
Lqian=25;%炉前区域
Lhou=25;%炉后区域
L1=30.5*5+5*5;%小温区1~5
L2=30.5*1+5*1;%小温区6
L3=30.5*1+5*1;%小温区7
L4=30.5*2+5*2;%小温区8~9
L5=30.5*2+5*1;%小温区10~11
v=70/60;%锅炉速度
L0=v*t;%传送带长度
LQIAN=zeros(1,1);TQIAN=zeros(1,1);countQIAN=0;
L11=zeros(1,1);T1=zeros(1,1);count1=0;
L22=zeros(1,1);T2=zeros(1,1);count2=0;
L33=zeros(1,1);T3=zeros(1,1);count3=0;
L44=zeros(1,1);T4=zeros(1,1);count4=0;
L55=zeros(1,1);T5=zeros(1,1);count5=0;
LHOU=zeros(1,1);THOU=zeros(1,1);countHOU=0;
for i=1:709
if L0(i)<=Lqian
    countQIAN=countQIAN+1;
    LQIAN(countQIAN,1)=L0(i);TQIAN(countQIAN,1)=T(i);
end
if L0(i)<=L1+Lqian && L0(i)>Lqian
    count1=count1+1;
    L11(count1,1)=L0(i);T1(count1,1)=T(i);
end
if L0(i)<=L1+L2+Lqian && L0(i)>L1+Lqian
    count2=count2+1;
    L22(count2,1)=L0(i);T2(count2,1)=T(i);
end
if L0(i)<=L1+L2+L3+Lqian && L0(i)>L1+L2+Lqian
    count3=count3+1;
    L33(count3,1)=L0(i);T3(count3,1)=T(i);
end
if L0(i)<=L1+L2+L3+L4+Lqian && L0(i)>L1+L2+L3+Lqian
    count4=count4+1;
    L44(count4,1)=L0(i);T4(count4,1)=T(i);
end
if L0(i)<=L1+L2+L3+L4+L5+Lqian && L0(i)>L1+L2+L3+L4+Lqian
    count5=count5+1;
    L55(count5,1)=L0(i);T5(count5,1)=T(i);
end
if L0(i)<=L1+L2+L3+L4+L5+Lqian+Lhou && L0(i)>L1+L2+L3+L4+L5+Lqian
    countHOU=countHOU+1;
    LHOU(countHOU,1)=L0(i);THOU(countHOU,1)=T(i);
end
end
figure
% plot(L0,T,'linewidth',2);
% hold on
plot(LQIAN,TQIAN,'linewidth',2);
hold on
plot(L11,T1,'linewidth',2);
hold on
plot(L22,T2,'linewidth',2);
hold on
plot(L33,T3,'linewidth',2);
hold on
plot(L44,T4,'linewidth',2);
hold on
plot(L55,T5,'linewidth',2);
hold on
plot(LHOU,THOU,'linewidth',2);
xlabel('传送带长度(cm)','FontSize',26);
ylabel('温度(ºC)','FontSize',26);
set(gca,'FontSize',26,'linewidth',1);

1.2 利用追赶法求解偏微分方程模型遍历寻找最优a系数与k系数MATLAB程序

%% 小温区1~5
% 变量导入
T=xlsread('附件.xlsx','Sheet1','B2:B748');
t=xlsread('附件.xlsx','Sheet1','A2:A748');

% 变量初始化(遍历)
v=70/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=175;%第1段温度
T0=25;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=195;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 遍历
TT=zeros(1,1);
m=zeros(1,1);
count1=1e-8;
count2=1e-6;
for k=count1:count1:count1*100
for a0=count2:count2:count2*100
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=175;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=175;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';
for i=1:n+1
    TT(i,1)=abs(u(i,4)-T(i,1));
end
% 寻找最接近实际值的k与a0
m(round(a0*(1/(count2))),round(k*(1/count1)))=sum(TT,1);
[a0min,kmin]=find(m==min(min(m)));
mm=m(a0min,kmin);
a0min=a0min*count2;
kmin=kmin*count1;
end
end

% 变量初始化(代入求解)
v=70/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=175;%第1段温度
T0=25;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=195;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=kmin;
a0=a0min;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=175;
u(:,1)=25;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=175;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

a01=a0min;
k01=kmin;
u1=u(:,4);
T01=u(n+1,4);
save('a01.mat','a01');%保存a01
save('k01.mat','k01');%保存k01
save('u1.mat','u1');%保存所有温度
save('T01.mat','T01');%保存初始温度
clear %清空工作区,防止迭代

%% 小温区6
load('T01.mat')
load('u1.mat')
% 变量导入
T=xlsread('附件.xlsx','Sheet1','B2:B748');
t=xlsread('附件.xlsx','Sheet1','A2:A748');

% 变量初始化(遍历)
v=70/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=195;%第1段温度
T0=T01;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=235;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 遍历
TT=zeros(1,1);
m=zeros(1,1);
count1=1e-8;
count2=1e-6;
for k=count1:count1:count1*100
for a0=count2:count2:count2*100
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=195;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=195;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';
for i=1:n+1
    TT(i,1)=abs(u(i,4)-T(i+size(u1,1),1));
end
% 寻找最接近实际值的k与a0
m(round(a0*(1/(count2))),round(k*(1/count1)))=sum(TT,1);
[a0min,kmin]=find(m==min(min(m)));
mm=m(a0min,kmin);
a0min=a0min*count2;
kmin=kmin*count1;
end
end

% 变量初始化(代入求解)
v=70/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=195;%第1段温度
T0=T01;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=235;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=kmin;
a0=a0min;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=195;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=195;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

a02=a0min;
k02=kmin;
u2=u(:,4);
T02=u(n+1,4);
save('a02.mat','a02');%保存a02
save('k02.mat','k02');%保存k02
save('u2.mat','u2');%保存所有温度
save('T02.mat','T02');%保存初始温度
clear%清空工作区,防止迭代

%% 小温区7
load('T02.mat')
load('u2.mat')
load('u1.mat')
% 变量导入
T=xlsread('附件.xlsx','Sheet1','B2:B748');
t=xlsread('附件.xlsx','Sheet1','A2:A748');

% 变量初始化(遍历)
v=70/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=235;%第1段温度
T0=T02;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=255;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 遍历
TT=zeros(1,1);
m=zeros(1,1);
count1=1e-8;
count2=1e-6;
for k=count1:count1:count1*100
for a0=count2:count2:count2*100
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=235;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=235;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';
for i=1:n+1
    TT(i,1)=abs(u(i,4)-T(i+size(u1,1)+size(u2,1),1));
end
% 寻找最接近实际值的k与a0
m(round(a0*(1/(count2))),round(k*(1/count1)))=sum(TT,1);
[a0min,kmin]=find(m==min(min(m)));
mm=m(a0min,kmin);
a0min=a0min*count2;
kmin=kmin*count1;
end
end

% 变量初始化(代入求解)
v=70/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=235;%第1段温度
T0=T02;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=255;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=kmin;
a0=a0min;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=235;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=235;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

a03=a0min;
k03=kmin;
u3=u(:,4);
T03=u(n+1,4);
save('a03.mat','a03');%保存a03
save('k03.mat','k03');%保存k03
save('u3.mat','u3');%保存所有温度
save('T03.mat','T03');%保存初始温度
clear%清空工作区,防止迭代

%% 小温区8~9
load('T03.mat')
load('u3.mat')
load('u2.mat')
load('u1.mat')
% 变量导入
T=xlsread('附件.xlsx','Sheet1','B2:B748');
t=xlsread('附件.xlsx','Sheet1','A2:A748');

% 变量初始化(遍历)
v=70/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=255;%第1段温度
T0=T03;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 遍历
TT=zeros(1,1);
m=zeros(1,1);
count1=1e-8;
count2=1e-6;
for k=count1:count1:count1*100
for a0=count2:count2:count2*100
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=255;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=255;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';
for i=1:n+1
    TT(i,1)=abs(u(i,4)-T(i+size(u1,1)+size(u2,1)+size(u3,1),1));
end
% 寻找最接近实际值的k与a0
m(round(a0*(1/(count2))),round(k*(1/count1)))=sum(TT,1);
[a0min,kmin]=find(m==min(min(m)));
mm=m(a0min,kmin);
a0min=a0min*count2;
kmin=kmin*count1;
end
end

% 变量初始化(代入求解)
v=70/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=255;%第1段温度
T0=T03;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=kmin;
a0=a0min;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=255;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=255;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

a04=a0min;
k04=kmin;
u4=u(:,4);
T04=u(n+1,4);
save('a04.mat','a04');%保存a04
save('k04.mat','k04');%保存k04
save('u4.mat','u4');%保存所有温度
save('T04.mat','T04');%保存初始温度
clear%清空工作区,防止迭代

%% 小温区10~11
load('T04.mat')
load('u4.mat')
load('u3.mat')
load('u2.mat')
load('u1.mat')
% 变量导入
T=xlsread('附件.xlsx','Sheet1','B2:B758');
t=xlsread('附件.xlsx','Sheet1','A2:A758');

% 变量初始化(遍历)
v=70/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第1段温度
T0=T04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 遍历
TT=zeros(1,1);
m=zeros(1,1);
count1=1e-8;
for k=count1:count1:count1*100
for a0=1e-5+1e-7:1e-7:1.2e-5
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';
for i=1:n+1
    TT(i,1)=abs(u(i,4)-T(i+size(u1,1)+size(u2,1)+size(u3,1)+size(u4,1),1));
end
% 寻找最接近实际值的k与a0
m(round(a0*(1/(1e-7))-100),round(k*(1/count1)))=sum(TT,1);
[a0min,kmin]=find(m==min(min(m)));
mm=m(a0min,kmin);
a0min=(a0min+100)*1e-7;
kmin=kmin*count1;
end
end

% 变量初始化(代入求解)
v=70/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=T04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=kmin;
a0=a0min;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

a05=a0min;
k05=kmin;
u5=u(:,4);
T05=u(n+1,4);
save('a05.mat','a05');%保存a05
save('k05.mat','k05');%保存k05
save('u5.mat','u5');%保存所有温度
save('T05.mat','T05');%保存初始温度
clear%清空工作区,防止迭代

%% 绘图并导出数据
T=xlsread('附件.xlsx','Sheet1','B40:B748');
t=xlsread('附件.xlsx','Sheet1','A40:A748');
load('u1.mat')
load('u2.mat')
load('u3.mat')
load('u4.mat')
load('u5.mat')
u0=[u1(39:size(u1,1),1);u2;u3;u4;u5(1:747-size(u1,1)-size(u2,1)-size(u3,1)-size(u4,1),1)];%除去为方便运算自己增加的时间
plot(t,T,'linewidth',2);
hold on
plot(t,u0,'linewidth',2);
xlabel('时间(s)','FontSize',26);
ylabel('温度(ºC)','FontSize',26);
set(gca,'FontSize',26,'linewidth',1);
%导出数据
load('a01.mat')
load('a02.mat')
load('a03.mat')
load('a04.mat')
load('a05.mat')
load('k01.mat')
load('k02.mat')
load('k03.mat')
load('k04.mat')
load('k05.mat')
a0=[a01;a02;a03;a04;a05];
k0=[k01;k02;k03;k04;k05];
filterName=["a0","k0"];
xlswrite('各系数取值.xlsx',filterName,'Sheet1','A1');
xlswrite('各系数取值.xlsx',a0,'Sheet1','A2')
xlswrite('各系数取值.xlsx',k0,'Sheet1','B2')

1.3 代入a系数与k系数求解第1问MATLAB程序

%% 小温区1~5
% 数据导入
load('a01.mat')
load('k01.mat')


% 变量初始化(代入求解)
v=78/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=173;%第1段温度
T0=25;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=198;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=25;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);
save('uu1.mat','uu1');%保存所有温度
save('TT01.mat','TT01');%保存初始温度
clear %清空工作区,防止迭代

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')
load('TT01.mat')

% 变量初始化(代入求解)
v=78/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=198;%第1段温度
T0=TT01;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=230;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);
save('uu2.mat','uu2');%保存所有温度
save('TT02.mat','TT02');%保存初始温度
clear%清空工作区,防止迭代

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')
load('TT02.mat')

% 变量初始化(代入求解)
v=78/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=230;%第1段温度
T0=TT02;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=257;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);
save('uu3.mat','uu3');%保存所有温度
save('TT03.mat','TT03');%保存初始温度
clear%清空工作区,防止迭代

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')
load('TT03.mat')

% 变量初始化(代入求解)
v=78/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=257;%第1段温度
T0=TT03;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);
save('uu4.mat','uu4');%保存所有温度
save('TT04.mat','TT04');%保存初始温度
clear%清空工作区,防止迭代

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')
load('TT04.mat')

% 变量初始化(代入求解)
v=78/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);
save('uu5.mat','uu5');%保存所有温度
save('TT05.mat','TT05');%保存初始温度
clear%清空工作区,防止迭代

%% 绘图
load('uu1.mat')
load('uu2.mat')
load('uu3.mat')
load('uu4.mat')
load('uu5.mat')
uu0=[uu1;uu2;uu3;uu4;uu5];
save('uu0.mat','uu0')
uu0size=size(uu0,1);
tt0=(0:0.5:(uu0size-1)/2)';
plot(tt0,uu0,'linewidth',2);
xlabel('时间(s)','FontSize',26);
ylabel('温度(ºC)','FontSize',26);
set(gca,'FontSize',26,'linewidth',1);
%导出数据
filterName=["时间(s)","温度(摄氏度)"];
xlswrite('result.csv',filterName,'result','A1');
xlswrite('result.csv',tt0,'result','A2')
xlswrite('result.csv',uu0,'result','B2')

1.4 第1问模型的检验

%% 检验(实际值与理论值)
T=xlsread('附件.xlsx','Sheet1','B40:B748');
t=xlsread('附件.xlsx','Sheet1','A40:A748');
load('u1.mat')
load('u2.mat')
load('u3.mat')
load('u4.mat')
load('u5.mat')
u0=[u1(39:size(u1,1),1);u2;u3;u4;u5(1:747-size(u1,1)-size(u2,1)-size(u3,1)-size(u4,1),1)];%除去为方便运算自己增加的时间

data=abs(u0-T);%每一时刻的温度误差
%求温度最大误差
countdata=find(data==max(data));
zuidawucha=data(countdata);
zuidawuchat=t(countdata);

%求温度平均误差
pingjunwucha=sum(data)/size(data,1);

%求各个温度误差绘图
data0=data./T;
plot(t,data0,'linewidth',2)
xlabel('时间(s)','FontSize',26);
ylabel('温度误差系数','FontSize',26);
set(gca,'FontSize',26,'linewidth',1)
pingjundata0=sum(data0)/size(data0,1);

二、第2问

2.1 第2问按照模型遍历寻找最大过炉速度MATLAB程序

%% 小温区1~5
for ii=0:0.01:35
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=182;%第1段温度
T0=25;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=203;%第1段温度
T0=TT01;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=237;%第1段温度
T0=TT02;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=254;%第1段温度
T0=TT03;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    save('V.mat','V')
    break
end
end
%% 绘图
uu0size=size(uu0,1);
tt0=(0:0.5:(uu0size-1)/2)';
plot(tt0,uu0,'linewidth',2);
xlabel('时间(s)','FontSize',26);
ylabel('温度(ºC)','FontSize',26);
set(gca,'FontSize',26,'linewidth',1);

2.2 第2问模型的检验

%% 小温区1~5
for ii=0:0.01:35
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=182;%第1段温度
T0=25;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=203;%第1段温度
T0=TT01;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=237;%第1段温度
T0=TT02;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T1=254;%第1段温度
T0=TT03;%初始温度

k1=(T1-T0)/(n1-n0);%线性系数
b1=T1-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T1)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T1;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T1;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    save('V.mat','V')
    break
end
end
%% 检验
jianyan1count=find(kk==max(kk));
jianyan2count=find(kk==min(kk));
jianyan1=kk(jianyan1count);%温度上升斜率
jianyan2=kk(jianyan2count);%温度下降斜率
jianyan3=(count190-count150)*0.5;%温度上升过程中在150℃~190℃的时间
jianyan4=(count217M-count217m)*0.5;%温度大于217℃的时间
jianyan5=uu0(countmax);%峰值温度

三、第3问

3.1 第一次遍历寻找T1、T2、T3、T4、V五个变量MATLAB程序

%% 小温区1~5
%遍历计算
ss=zeros(1,1);%存储面积及对应的温度和时间(1:面积 2:T11 3:T12 4:T13 5:T14 6:V)
countss=0;%计数
for T11=165:5:185
    for T12=185:5:205
        for T13=225:5:245
            for T14=245:5:265
                for ii=0:5:35
                    
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=25;%初始温度

k1=(T11-T0)/(n1-n0);%线性系数
b1=T11-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T11)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T11;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T11;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT01;%初始温度

k1=(T12-T0)/(n1-n0);%线性系数
b1=T12-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T12)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T12;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T12;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT02;%初始温度

k1=(T13-T0)/(n1-n0);%线性系数
b1=T13-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T13)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T13;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T13;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=TT03;%初始温度

k1=(T14-T0)/(n1-n0);%线性系数
b1=T14-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T14)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T14;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T14;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    countss=countss+1;
    sss=zeros(1,1);
    countsss=0;
    for nnn=count217m:countmax
    countsss=countsss+1;
    sss(countsss,1)=(uu0(nnn)-uu0(count217m))*0.5;
    end
    ss(countss,1)=sum(sss);
    ss(countss,2)=T11;
    ss(countss,3)=T12;
    ss(countss,4)=T13;
    ss(countss,5)=T14;
    ss(countss,6)=V;
end
                end
            end
        end
    end
end
countmin=find(ss==min(ss(:,1)));
S=ss(countmin,:);

3.2 第二次遍历寻找T1、T2、T3、T4、V五个变量MATLAB程序 

%% 小温区1~5
%遍历计算
ss=zeros(1,1);%存储面积及对应的温度和时间(1:面积 2:T11 3:T12 4:T13 5:T14 6:V)
countss=0;%计数
for T11=175:2:185
    for T12=185:2:195
        for T13=225:2:235
            for T14=255:2:265
                for ii=5:2:15
                    
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=25;%初始温度

k1=(T11-T0)/(n1-n0);%线性系数
b1=T11-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T11)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T11;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T11;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT01;%初始温度

k1=(T12-T0)/(n1-n0);%线性系数
b1=T12-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T12)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T12;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T12;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT02;%初始温度

k1=(T13-T0)/(n1-n0);%线性系数
b1=T13-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T13)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T13;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T13;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=TT03;%初始温度

k1=(T14-T0)/(n1-n0);%线性系数
b1=T14-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T14)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T14;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T14;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    countss=countss+1;
    sss=zeros(1,1);
    countsss=0;
    for nnn=count217m:countmax
    countsss=countsss+1;
    sss(countsss,1)=(uu0(nnn)-uu0(count217m))*0.5;
    end
    ss(countss,1)=sum(sss);
    ss(countss,2)=T11;
    ss(countss,3)=T12;
    ss(countss,4)=T13;
    ss(countss,5)=T14;
    ss(countss,6)=V;
end
                end
            end
        end
    end
end
countmin=find(ss==min(ss(:,1)));
S=ss(countmin,:);

3.3 第三次遍历寻找T1、T2、T3、T4、V五个变量MATLAB程序

%% 小温区1~5
%遍历计算
ss=zeros(1,1);%存储面积及对应的温度和时间(1:面积 2:T11 3:T12 4:T13 5:T14 6:V)
countss=0;%计数
for T11=181:0.8:185
    for T12=193:0.8:197
        for T13=231:0.8:235
            for T14=261:0.8:265
                for ii=5:0.8:9
                    
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=25;%初始温度

k1=(T11-T0)/(n1-n0);%线性系数
b1=T11-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T11)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T11;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T11;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT01;%初始温度

k1=(T12-T0)/(n1-n0);%线性系数
b1=T12-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T12)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T12;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T12;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT02;%初始温度

k1=(T13-T0)/(n1-n0);%线性系数
b1=T13-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T13)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T13;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T13;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=TT03;%初始温度

k1=(T14-T0)/(n1-n0);%线性系数
b1=T14-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T14)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T14;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T14;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    countss=countss+1;
    sss=zeros(1,1);
    countsss=0;
    for nnn=count217m:countmax
    countsss=countsss+1;
    sss(countsss,1)=(uu0(nnn)-uu0(count217m))*0.5;
    end
    ss(countss,1)=sum(sss);
    ss(countss,2)=T11;
    ss(countss,3)=T12;
    ss(countss,4)=T13;
    ss(countss,5)=T14;
    ss(countss,6)=V;
end
                end
            end
        end
    end
end
countmin=find(ss==min(ss(:,1)));
S=ss(countmin,:);
save('S.mat','S')

3.4 代入T1、T2、T3、T4、V五个变量MATLAB程序

%% 小温区1~5
%代入求解
load('S.mat')
ss=zeros(1,1);%存储面积及对应的温度和时间(1:面积 2:T11 3:T12 4:T13 5:T14 6:V)
countss=0;%计数
for T11=S(1,2)
    for T12=S(1,3)
        for T13=S(1,4)
            for T14=S(1,5)
                for ii=100-S(1,6)
                    
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=25;%初始温度

k1=(T11-T0)/(n1-n0);%线性系数
b1=T11-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T11)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T11;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T11;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT01;%初始温度

k1=(T12-T0)/(n1-n0);%线性系数
b1=T12-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T12)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T12;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T12;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT02;%初始温度

k1=(T13-T0)/(n1-n0);%线性系数
b1=T13-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T13)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T13;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T13;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=TT03;%初始温度

k1=(T14-T0)/(n1-n0);%线性系数
b1=T14-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T14)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T14;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T14;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    countss=countss+1;
    sss=zeros(1,1);
    countsss=0;
    for nnn=count217m:countmax
    countsss=countsss+1;
    sss(countsss,1)=(uu0(nnn)-uu0(count217m))*0.5;
    end
    ss(countss,1)=sum(sss);
    ss(countss,2)=T11;
    ss(countss,3)=T12;
    ss(countss,4)=T13;
    ss(countss,5)=T14;
    ss(countss,6)=V;
end
                end
            end
        end
    end
end
countmin=find(ss==min(ss(:,1)));
S=ss(countmin,:);
%% 绘图
uu0size=size(uu0,1);
tt0=(0:0.5:(uu0size-1)/2)';
plot(tt0,uu0,'linewidth',2);
axis([0 350 0 250]);
xlabel('时间(s)','FontSize',26);
ylabel('温度(ºC)','FontSize',26);
set(gca,'FontSize',26,'linewidth',1);

3.5 第3问模型的检验

%% 小温区1~5
%代入求解
load('S.mat')
ss=zeros(1,1);%存储面积及对应的温度和时间(1:面积 2:T11 3:T12 4:T13 5:T14 6:V)
countss=0;%计数
for T11=S(1,2)
    for T12=S(1,3)
        for T13=S(1,4)
            for T14=S(1,5)
                for ii=100-S(1,6)
                    
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=25;%初始温度

k1=(T11-T0)/(n1-n0);%线性系数
b1=T11-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T11)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T11;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T11;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT01;%初始温度

k1=(T12-T0)/(n1-n0);%线性系数
b1=T12-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T12)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T12;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T12;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT02;%初始温度

k1=(T13-T0)/(n1-n0);%线性系数
b1=T13-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T13)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T13;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T13;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=TT03;%初始温度

k1=(T14-T0)/(n1-n0);%线性系数
b1=T14-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T14)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T14;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T14;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    countss=countss+1;
    sss=zeros(1,1);
    countsss=0;
    for nnn=count217m:countmax
    countsss=countsss+1;
    sss(countsss,1)=(uu0(nnn)-uu0(count217m))*0.5;
    end
    ss(countss,1)=sum(sss);
    ss(countss,2)=T11;
    ss(countss,3)=T12;
    ss(countss,4)=T13;
    ss(countss,5)=T14;
    ss(countss,6)=V;
end
                end
            end
        end
    end
end
countmin=find(ss==min(ss(:,1)));
S=ss(countmin,:);
%% 检验
jianyan1count=find(kk==max(kk));
jianyan2count=find(kk==min(kk));
jianyan1=kk(jianyan1count);%温度上升斜率
jianyan2=kk(jianyan2count);%温度下降斜率
jianyan3=(count190-count150)*0.5;%温度上升过程中在150℃~190℃的时间
jianyan4=(count217M-count217m)*0.5;%温度大于217℃的时间
jianyan5=uu0(countmax);%峰值温度

四、第4问

4.1 第一次遍历寻找T1、T2、T3、T4、V、Mm、data0七个变量MATLAB程序

%% 小温区1~5
%遍历计算
ss=zeros(1,1);%存储面积及对应的温度和时间(1:面积 2:T11 3:T12 4:T13 5:T14 6:V 7:Mm 8:data0)
countss=0;%计数
for T11=165:5:185
    for T12=185:5:205
        for T13=225:5:245
            for T14=245:5:265
                for ii=0:5:35
                    
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=25;%初始温度

k1=(T11-T0)/(n1-n0);%线性系数
b1=T11-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T11)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T11;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T11;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT01;%初始温度

k1=(T12-T0)/(n1-n0);%线性系数
b1=T12-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T12)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T12;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T12;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT02;%初始温度

k1=(T13-T0)/(n1-n0);%线性系数
b1=T13-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T13)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T13;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T13;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=TT03;%初始温度

k1=(T14-T0)/(n1-n0);%线性系数
b1=T14-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T14)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T14;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T14;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    
    %第3问
    countss=countss+1;
    sss=zeros(1,1);
    countsss=0;
    for nnn=count217m:countmax
    countsss=countsss+1;
    sss(countsss,1)=(uu0(nnn)-uu0(count217m))*0.5;
    end
    ss(countss,1)=sum(sss);
    ss(countss,2)=T11;
    ss(countss,3)=T12;
    ss(countss,4)=T13;
    ss(countss,5)=T14;
    ss(countss,6)=V;
    
    %第4问
    count217mm=countmax-count217m; %上升阶段217℃到峰值温度的距离
    count217MM=count217M-countmax; %下降阶段217℃到峰值温度的距离
    Mm=abs(count217MM-count217mm);
    ss(countss,7)=Mm;%记录第一个对称参照数Mm
    
    data1=zeros(1,1);
    countdata1=0;
    for nnn1=countmax:-1:count217m
    countdata1=countdata1+1;
    data1(countdata1,1)=abs(uu0(nnn1)-uu0(nnn1-1))/0.5;
    end
    data2=zeros(1,1);
    countdata2=0;
    for nnn2=countmax:1:count217M
    countdata2=countdata2+1;
    data2(countdata2,1)=abs(uu0(nnn2+1)-uu0(nnn2))/0.5;
    end
    if size(data1,1)<size(data2,1)
    data0=abs(data1-data2(1:size(data1,1),1));
    else
    data0=abs(data1(1:size(data2,1),1)-data2);
    end
    ss(countss,8)=sum(data0)/size(data0,1);%记录第二个对称参照数sum(data0)/size(data0,1)
    ss(countss,9)=0.3*(Mm/46)+0.3*(sum(data0)/size(data0,1)/0.272456)+0.4*(sum(sss)/789.21);%去量纲(除实验值)
end
                end
            end
        end
    end
end
countmin=find(ss(:,9)==min(ss(:,9)));
SS=ss(countmin,:);

4.2 第二次遍历寻找T1、T2、T3、T4、V、Mm、data0七个变量MATLAB程序

%% 小温区1~5
%遍历计算
ss=zeros(1,1);%存储面积及对应的温度和时间(1:面积 2:T11 3:T12 4:T13 5:T14 6:V 7:Mm 8:data0)
countss=0;%计数
for T11=165:2:175
    for T12=185:2:195
        for T13=225:2:235
            for T14=255:2:265
                for ii=10:2:20
                    
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=25;%初始温度

k1=(T11-T0)/(n1-n0);%线性系数
b1=T11-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T11)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T11;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T11;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT01;%初始温度

k1=(T12-T0)/(n1-n0);%线性系数
b1=T12-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T12)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T12;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T12;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT02;%初始温度

k1=(T13-T0)/(n1-n0);%线性系数
b1=T13-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T13)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T13;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T13;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=TT03;%初始温度

k1=(T14-T0)/(n1-n0);%线性系数
b1=T14-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T14)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T14;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T14;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    
    %第3问
    countss=countss+1;
    sss=zeros(1,1);
    countsss=0;
    for nnn=count217m:countmax
    countsss=countsss+1;
    sss(countsss,1)=(uu0(nnn)-uu0(count217m))*0.5;
    end
    ss(countss,1)=sum(sss);
    ss(countss,2)=T11;
    ss(countss,3)=T12;
    ss(countss,4)=T13;
    ss(countss,5)=T14;
    ss(countss,6)=V;
    
    %第4问
    count217mm=countmax-count217m; %上升阶段217℃到峰值温度的距离
    count217MM=count217M-countmax; %下降阶段217℃到峰值温度的距离
    Mm=abs(count217MM-count217mm);
    ss(countss,7)=Mm;%记录第一个对称参照数Mm
    
    data1=zeros(1,1);
    countdata1=0;
    for nnn1=countmax:-1:count217m
    countdata1=countdata1+1;
    data1(countdata1,1)=abs(uu0(nnn1)-uu0(nnn1-1))/0.5;
    end
    data2=zeros(1,1);
    countdata2=0;
    for nnn2=countmax:1:count217M
    countdata2=countdata2+1;
    data2(countdata2,1)=abs(uu0(nnn2+1)-uu0(nnn2))/0.5;
    end
    if size(data1,1)<size(data2,1)
    data0=abs(data1-data2(1:size(data1,1),1));
    else
    data0=abs(data1(1:size(data2,1),1)-data2);
    end
    ss(countss,8)=sum(data0)/size(data0,1);%记录第二个对称参照数sum(data0)/size(data0,1)
    ss(countss,9)=0.3*(Mm/46)+0.3*(sum(data0)/size(data0,1)/0.272456)+0.4*(sum(sss)/789.21);%去量纲(除实验值)
end
                end
            end
        end
    end
end
countmin=find(ss(:,9)==min(ss(:,9)));
SS=ss(countmin,:);

4.3 第三次遍历寻找T1、T2、T3、T4、V、Mm、data0七个变量MATLAB程序

%% 小温区1~5
%遍历计算
ss=zeros(1,1);%存储面积及对应的温度和时间(1:面积 2:T11 3:T12 4:T13 5:T14 6:V 7:Mm 8:data0)
countss=0;%计数
for T11=167:0.8:171
    for T12=185:0.8:189
        for T13=225:0.8:229
            for T14=261:0.8:265
                for ii=12:0.8:16
                    
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=25;%初始温度

k1=(T11-T0)/(n1-n0);%线性系数
b1=T11-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T11)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T11;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T11;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT01;%初始温度

k1=(T12-T0)/(n1-n0);%线性系数
b1=T12-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T12)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T12;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T12;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT02;%初始温度

k1=(T13-T0)/(n1-n0);%线性系数
b1=T13-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T13)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T13;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T13;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=TT03;%初始温度

k1=(T14-T0)/(n1-n0);%线性系数
b1=T14-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T14)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T14;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T14;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    
    %第3问
    countss=countss+1;
    sss=zeros(1,1);
    countsss=0;
    for nnn=count217m:countmax
    countsss=countsss+1;
    sss(countsss,1)=(uu0(nnn)-uu0(count217m))*0.5;
    end
    ss(countss,1)=sum(sss);
    ss(countss,2)=T11;
    ss(countss,3)=T12;
    ss(countss,4)=T13;
    ss(countss,5)=T14;
    ss(countss,6)=V;
    
    %第4问
    count217mm=countmax-count217m; %上升阶段217℃到峰值温度的距离
    count217MM=count217M-countmax; %下降阶段217℃到峰值温度的距离
    Mm=abs(count217MM-count217mm);
    ss(countss,7)=Mm;%记录第一个对称参照数Mm
    
    data1=zeros(1,1);
    countdata1=0;
    for nnn1=countmax:-1:count217m
    countdata1=countdata1+1;
    data1(countdata1,1)=abs(uu0(nnn1)-uu0(nnn1-1))/0.5;
    end
    data2=zeros(1,1);
    countdata2=0;
    for nnn2=countmax:1:count217M
    countdata2=countdata2+1;
    data2(countdata2,1)=abs(uu0(nnn2+1)-uu0(nnn2))/0.5;
    end
    if size(data1,1)<size(data2,1)
    data0=abs(data1-data2(1:size(data1,1),1));
    else
    data0=abs(data1(1:size(data2,1),1)-data2);
    end
    ss(countss,8)=sum(data0)/size(data0,1);%记录第二个对称参照数sum(data0)/size(data0,1)
    ss(countss,9)=0.3*(Mm/46)+0.3*(sum(data0)/size(data0,1)/0.272456)+0.4*(sum(sss)/789.21);%去量纲(除实验值)
end
                end
            end
        end
    end
end
countmin=find(ss(:,9)==min(ss(:,9)));
SS=ss(countmin,:);
save('SS.mat','SS')

4.4 代入T1、T2、T3、T4、V、Mm、data0七个变量MATLAB程序

%% 小温区1~5
%代入求解
load('SS.mat')
ss=zeros(1,1);%存储面积及对应的温度和时间(1:面积 2:T11 3:T12 4:T13 5:T14 6:V 7:Mm 8:data0)
countss=0;%计数
for T11=SS(1,2)
    for T12=SS(1,3)
        for T13=SS(1,4)
            for T14=SS(1,5)
                for ii=100-SS(1,6)
                    
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=25;%初始温度

k1=(T11-T0)/(n1-n0);%线性系数
b1=T11-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T11)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T11;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T11;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT01;%初始温度

k1=(T12-T0)/(n1-n0);%线性系数
b1=T12-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T12)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T12;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T12;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT02;%初始温度

k1=(T13-T0)/(n1-n0);%线性系数
b1=T13-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T13)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T13;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T13;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=TT03;%初始温度

k1=(T14-T0)/(n1-n0);%线性系数
b1=T14-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T14)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T14;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T14;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    
    %第3问
    countss=countss+1;
    sss=zeros(1,1);
    countsss=0;
    for nnn=count217m:countmax
    countsss=countsss+1;
    sss(countsss,1)=(uu0(nnn)-uu0(count217m))*0.5;
    end
    ss(countss,1)=sum(sss);
    ss(countss,2)=T11;
    ss(countss,3)=T12;
    ss(countss,4)=T13;
    ss(countss,5)=T14;
    ss(countss,6)=V;
    
    %第4问
    count217mm=countmax-count217m; %上升阶段217℃到峰值温度的距离
    count217MM=count217M-countmax; %下降阶段217℃到峰值温度的距离
    Mm=abs(count217MM-count217mm);
    ss(countss,7)=Mm;%记录第一个对称参照数Mm
    
    data1=zeros(1,1);
    countdata1=0;
    for nnn1=countmax:-1:count217m
    countdata1=countdata1+1;
    data1(countdata1,1)=abs(uu0(nnn1)-uu0(nnn1-1))/0.5;
    end
    data2=zeros(1,1);
    countdata2=0;
    for nnn2=countmax:1:count217M
    countdata2=countdata2+1;
    data2(countdata2,1)=abs(uu0(nnn2+1)-uu0(nnn2))/0.5;
    end
    if size(data1,1)<size(data2,1)
    data0=abs(data1-data2(1:size(data1,1),1));
    else
    data0=abs(data1(1:size(data2,1),1)-data2);
    end
    ss(countss,8)=sum(data0)/size(data0,1);%记录第二个对称参照数sum(data0)/size(data0,1)
    ss(countss,9)=0.3*(Mm/46)+0.3*(sum(data0)/size(data0,1)/0.272456)+0.4*(sum(sss)/789.21);%去量纲(除实验值)
end
                end
            end
        end
    end
end
countmin=find(ss(:,9)==min(ss(:,9)));
SS=ss(countmin,:);
%% 绘图
uu0size=size(uu0,1);
tt0=(0:0.5:(uu0size-1)/2)';
plot(tt0,uu0,'linewidth',2);
xlabel('时间(s)','FontSize',26);
ylabel('温度(ºC)','FontSize',26);
set(gca,'FontSize',26,'linewidth',1);

4.5 第4问模型的检验

%% 小温区1~5
%代入求解
load('SS.mat')
ss=zeros(1,1);%存储面积及对应的温度和时间(1:面积 2:T11 3:T12 4:T13 5:T14 6:V 7:Mm 8:data0)
countss=0;%计数
for T11=SS(1,2)
    for T12=SS(1,3)
        for T13=SS(1,4)
            for T14=SS(1,5)
                for ii=100-SS(1,6)
                    
% 数据导入
load('a01.mat')
load('k01.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=25+30.5*0.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=25;%初始温度

k1=(T11-T0)/(n1-n0);%线性系数
b1=T11-k1*n1;%线性系数

L2=25+30.5*5+5*4;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=L2+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=203;%第2段温度

k2=(T2-T11)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k01;
a0=a01;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T11;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T11;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu1=u(:,4);
TT01=u(n+1,4);

%% 小温区6
% 数据导入
load('a02.mat')
load('k02.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT01;%初始温度

k1=(T12-T0)/(n1-n0);%线性系数
b1=T12-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=237;%第2段温度

k2=(T2-T12)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k02;
a0=a02;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T12;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T12;
    end
    if s>=n2 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu2=u(:,4);
TT02=u(n+1,4);

%% 小温区7
% 数据导入
load('a03.mat')
load('k03.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数

T0=TT02;%初始温度

k1=(T13-T0)/(n1-n0);%线性系数
b1=T13-k1*n1;%线性系数

L2=30.5+2.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5+7.5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=254;%第2段温度

k2=(T2-T13)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k03;
a0=a03;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T13;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T13;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu3=u(:,4);
TT03=u(n+1,4);

%% 小温区8~9
% 数据导入
load('a04.mat')
load('k04.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=2.5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T0=TT03;%初始温度

k1=(T14-T0)/(n1-n0);%线性系数
b1=T14-k1*n1;%线性系数

L2=30.5*2+7.5;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=30.5*2+7.5+5;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数
T2=25;%第2段温度

k2=(T2-T14)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k04;
a0=a04;

dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=T14;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=T14;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu4=u(:,4);
TT04=u(n+1,4);

%% 小温区10~11
% 数据导入
load('a05.mat')
load('k05.mat')

% 变量初始化(代入求解)
v=(100-ii)/60;%传送带速度

L1=30.5+5;%第1段长度
t1=L1/v;%第1段时间
n1=round(2*t1);%第1段行数
n0=1;%初始行数
T2=-200;%第2段温度
T0=TT04;%初始温度

k1=(T2-T0)/(n1-n0);%线性系数
b1=T2-k1*n1;%线性系数

L2=2*30.5+1.5*5+25;%第2段长度
t2=L2/v;%第2段时间
n2=round(2*t2);%第2段行数
L3=2*30.5+1.5*5+25;%第3段长度
t3=L3/v;%第3段时间
n3=round(2*t3);%第3段行数

k2=(T2-T2)/(n3-n2);%线性系数
b2=T2-k2*n3;%线性系数
% 代入遍历得到的k与a0
k=k05;
a0=a05;

TT=zeros(1,1);
m=zeros(1,1);
dt=0.5;
dx=0.15/6;
r=a0*dt/((dx)^2);
h=dx;

a=zeros(5,5);
b=zeros(5,1);

n=round((n2+n3)/2);%总时间

u=zeros(5+1,n+1);
u(1,:)=25;
u(:,1)=T0;
% 构造a矩阵
for i=1:5
    if i==1
        a(i,i)=1;
         a(i,i+1)=-k/(h+k);
    end
    
    if (1<i)&&(i<5)
        a(i,i)=1+2*r;
        a(i,i-1)=-r;
        a(i,i+1)=-r;
    end
    if i==5
        a(i,i)=1;
        a(i,i-1)=-k/(h+k);
    end
    
end
% 构造b矩阵
for s=2:n+1
    if s<=n1+1
    g=k1*s+b1;
    end
    if s>n1+1 && s<n2+1
    g=25;
    end
    if s>=n2+1 && s<(n3+n2)/2+1
    g=k2*s+b2;
    end
for t=1:5
    if t==1
    b(t,1)=h/(h+k)*g;
    end
    if t>1 && t<5
    b(t,1)=u(1+t,s-1);
    end
    if t==5
    b(t,1)=h/(h+k)*g;
    end
end
% 追赶法求解
bb=diag(a)';
aa=[0,diag(a,-1)'];
c=diag(a,1)';
N=length(bb);
L=zeros(N);
uu0=0;y0=0;aa(1)=0;
L(1)=bb(1)-aa(1)*uu0;
y(1)=(b(1)-y0*aa(1))/L(1);
uu(1)=c(1)/L(1);
for i=2:(N-1)
L(i)=bb(i)-aa(i)*uu(i-1);
y(i)=(b(i)-y(i-1)*aa(i))/L(i);
uu(i)=c(i)/L(i);
end
L(N)=bb(N)-aa(N)*uu(N-1);
y(N)=(b(N)-y(N-1)*aa(N))/L(N);
x(N)=y(N);
for i=(N-1):-1:1
x(i)=y(i)-uu(i)*x(i+1);
end
u(2:5+1,s)=x';
end
u=u';

uu5=u(:,4);
TT05=u(n+1,4);

%% 条件限制
uu0=[uu1;uu2;uu3;uu4;uu5]; %%汇总温度数组
nn=size(uu0,1); %温度数组大小

%条件1:满足时flag1=1,不满足时flag1=0。(温度上升下降斜率)
flag1=1;
kk=zeros(nn,1);
for nn1=1:nn-1
    kk(nn1,1)=(uu0(nn1+1)-uu0(nn1))/0.5;
    if kk(nn1,1)>3 || kk(nn1,1)<-3 %不满足条件1时
       flag1=0;
       break 
    end
end

%条件2:满足时flag2=1,不满足时flag2=0。(温度上升过程中在150℃~190℃的时间)
flag2=1;
countmax=find(uu0==max(uu0));%找出最大温度的位置
countmax=countmax(1);%避免出现一摸一样的值
uu00=uu0(1:countmax,1); %筛选出上升过程
u150=abs(uu00-150);
count150=find(u150==min(u150));%寻找最接近150的位置
count150=count150(1);%避免出现一摸一样的值
u190=abs(uu00-190);
count190=find(u190==min(u190));%寻找最接近190的位置
count190=count190(1);%避免出现一摸一样的值
if count190-count150>(120/0.5) || count190-count150<(60/0.5) %不满足条件2时
    flag2=0;
end

%条件3:满足时flag3=1,不满足时flag3=0。(温度大于217℃的时间)
flag3=1;
u217m=abs(uu00-217);
count217m=find(u217m==min(u217m));%寻找最接近217的位置(上升)
count217m=count217m(1);%避免出现一摸一样的值
uu01=uu0(countmax+1:nn,1); %筛选出下降过程
u217M=abs(uu01-217);
count217M=find(u217M==min(u217M))+countmax;%寻找最接近217的位置(下降)
count217M=count217M(1);%避免出现一摸一样的值
if count217M-count217m>(90/0.5) || count217M-count217m<(40/0.5) %不满足条件3时
    flag3=0;
end

%条件4:满足时flag4=1,不满足时flag4=0。(峰值温度)
flag4=1;
if uu0(countmax)>250 || uu0(countmax)<240 %不满足条件4时
    flag4=0;
end

if flag1==1 && flag2==1 && flag3==1 && flag4==1
    V=v*60; %最大过炉速度
    
    %第3问
    countss=countss+1;
    sss=zeros(1,1);
    countsss=0;
    for nnn=count217m:countmax
    countsss=countsss+1;
    sss(countsss,1)=(uu0(nnn)-uu0(count217m))*0.5;
    end
    ss(countss,1)=sum(sss);
    ss(countss,2)=T11;
    ss(countss,3)=T12;
    ss(countss,4)=T13;
    ss(countss,5)=T14;
    ss(countss,6)=V;
    
    %第4问
    count217mm=countmax-count217m; %上升阶段217℃到峰值温度的距离
    count217MM=count217M-countmax; %下降阶段217℃到峰值温度的距离
    Mm=abs(count217MM-count217mm);
    ss(countss,7)=Mm;%记录第一个对称参照数Mm
    
    data1=zeros(1,1);
    countdata1=0;
    for nnn1=countmax:-1:count217m
    countdata1=countdata1+1;
    data1(countdata1,1)=abs(uu0(nnn1)-uu0(nnn1-1))/0.5;
    end
    data2=zeros(1,1);
    countdata2=0;
    for nnn2=countmax:1:count217M
    countdata2=countdata2+1;
    data2(countdata2,1)=abs(uu0(nnn2+1)-uu0(nnn2))/0.5;
    end
    if size(data1,1)<size(data2,1)
    data0=abs(data1-data2(1:size(data1,1),1));
    else
    data0=abs(data1(1:size(data2,1),1)-data2);
    end
    ss(countss,8)=sum(data0)/size(data0,1);%记录第二个对称参照数sum(data0)/size(data0,1)
    ss(countss,9)=0.3*(Mm/46)+0.3*(sum(data0)/size(data0,1)/0.272456)+0.4*(sum(sss)/789.21);%去量纲(除实验值)
end
                end
            end
        end
    end
end
countmin=find(ss(:,9)==min(ss(:,9)));
SS=ss(countmin,:);
%% 检验
jianyan1count=find(kk==max(kk));
jianyan2count=find(kk==min(kk));
jianyan1=kk(jianyan1count);%温度上升斜率
jianyan2=kk(jianyan2count);%温度下降斜率
jianyan3=(count190-count150)*0.5;%温度上升过程中在150℃~190℃的时间
jianyan4=(count217M-count217m)*0.5;%温度大于217℃的时间
jianyan5=uu0(countmax);%峰值温度
;