📄 sor2.m
字号:
%clear;
close all;
h=10;k=30;md=7300;cp=800;t0=1000;tw=0;tsp=600;le=0.1;%tw为环境温度
n_space = input('n_space? ');
n_space=n_space+1;
n_time = input('n_time? ');
alfa=tsp/n_time/(le*le/n_space/n_space)*k/md/cp;
alfa1=1+2*alfa;
beta=(le/n_space)*h/k;
x(1,1)=tw*beta;
x(n_space,1)=tw*beta;
x(2:(n_space-1),1)=t0;
b=x;
%矩阵计算:
D(n_space,n_space)=1+beta;
D(1,1)=1+beta;
L(n_space,n_space)=0;
L(n_space,n_space-1)=1;
U(n_space,n_space)=0;
U(1,2)=1;
for ii=2:(n_space-1)
D(ii,ii)=alfa1;
L(ii,ii-1)=alfa;
U(ii,ii+1)=alfa;
end
J=pinv(D)*(L+U);pj=vrho(J);
w=2/(1+sqrt(1-(pj*pj)));
clear J;
MM=pinv(D-w*L);
loopmatrix=MM*((1-w)*D+w*U); %%%%%%%%%%%迭代矩阵
MM=w*MM;
for tt=1:n_time%对时分的循环
zzz=1;stop=1;
while stop>0.01%某时间片一次SOR循环 循环控制条件 有待改进~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
x1=loopmatrix*x+MM*b;
stop=norm(x-x1,2);
x=x1;
disp(['时间步= ' , int2str(tt), ';第几次SOR: ' ,int2str(zzz)]); stop
zzz=zzz+1;
end
count(tt)=zzz;
if tt<n_time
b=x;
b(1,1)=0;
b(n_space,1)=0;
end
end
sor_average_times=mean(count)
w
pj
for i=1:n_space length_dis(i)=(le/(n_space-1))*(i-1);end
x2=x;length_dis2=length_dis;
figure;
plot(length_dis,x,'k');
title (['\fontsize{12}\bf \rm','温度场曲线图']);
xlabel ('棒子空间,以长度计量'); ylabel ('温度');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -