目录
1.2 利用追赶法求解偏微分方程模型遍历寻找最优a系数与k系数MATLAB程序
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程序
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程序
前言
程序中用到的附件为根据前后数据补全后的附件,从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);%峰值温度