[Matlab]2018國賽 A題思路以及Matlab代碼實現

一些關於CUMCM的思考

去年參加的CUMCM,覺得代碼閒置在附錄裏邊比較可惜就打算分享出來了。
國賽的題目想要求出結果並不是很難,使得論文的寫作以及驗證等環節愈發重要,語言表達是否精練以及模型的評價與改進是否合理有效成爲了評價參賽作品的一項重要指標。由於去年作品要求通過客戶端上傳,一定要注意上傳支撐材料的大小不要超過20M,注意參賽時間安排以及qq賬號的清潔(!)。
本文給出的思路,旨在輔助對於題目的理解並幫助解釋貼出的Matlab代碼,不代表最優做法。本文思路及代碼僅供參考,思路中涉及到的公式、方法以及詳細步驟等請移步至參考文獻。代碼中變量命名比較亂,僅供參考。

CUMCM2018 A題

A題 高溫作業專用服裝設計
在高溫環境下工作時,人們需要穿着專用服裝以避免灼傷。專用服裝通常由三層織物材料構成,記爲I、II、III層,其中I層與外界環境接觸,III層與皮膚之間還存在空隙,將此空隙記爲IV層。
爲設計專用服裝,將體內溫度控制在37ºC的假人放置在實驗室的高溫環境中,測量假人皮膚外側的溫度。爲了降低研發成本、縮短研發週期,請你們利用數學模型來確定假人皮膚外側的溫度變化情況,並解決以下問題:
(1) 專用服裝材料的某些參數值由附件1給出,對環境溫度爲75ºC、II層厚度爲6 mm、IV層厚度爲5 mm、工作時間爲90分鐘的情形開展實驗,測量得到假人皮膚外側的溫度(見附件2)。建立數學模型,計算溫度分佈,並生成溫度分佈的Excel文件(文件名爲problem1.xlsx)。
(2) 當環境溫度爲65ºC、IV層的厚度爲5.5 mm時,確定II層的最優厚度,確保工作60分鐘時,假人皮膚外側溫度不超過47ºC,且超過44ºC的時間不超過5分鐘。
(3) 當環境溫度爲80 時,確定II層和IV層的最優厚度,確保工作30分鐘時,假人皮膚外側溫度不超過47ºC,且超過44ºC的時間不超過5分鐘。

附件1. 專用服裝材料的參數值
附件2. 假人皮膚外側的測量溫度

對於題目的分析

對於該題目可以建立如下假設:
1.假設外界環境與假人體內的氣溫保持不變。
2.假設輻射傳熱的影響可以忽略。
3.假設人的體型對傳熱的影響可以忽略,人體可以等效爲圓柱體。
4.假設熱量在材料交接交界面處的傳導方向爲交界面法線方向。

這是那種第一問做出來之後第二問第三問都迎刃而解的題目,找準建立模型的物理理論依據,再確保瞭解決偏微分方程的求解手段就可以得到答案了。

第一問

1.1 總體思路

問題1要求在給定外界溫度和高溫工作服各層材料厚度的條件下求解工作服的溫度分佈情況。根據熱學分析可以建立出關於各層材料傳熱情況的偏微分方程組模型。工作服的初始溫度以及工作過程中材料各交界面的溫度作爲各層偏微分方程邊界條件。由於此微分方程組模型較爲複雜,運用有限差分法將微分方程化爲差分方程,再將差分方程組以矩陣的形式寫出,並用追趕法(Thomas算法)求解差分方程組模型可得出工作服的溫度分佈。
針對微分的邊界條件確定,最內層材料與假人皮膚交界面的溫度同最外層材料與外界空氣交界面的溫度依據牛頓冷卻定律通過外界環境氣溫、假人內部溫度計算,運用牛頓冷卻定律時需要確定對流換熱係數這一未知參數,此外工作服的初始溫度也是未知量。對於這兩個未知量,先大致估計這兩個未知量的範圍,再按照一定步長遍歷搜索。對於每個遍歷到的值,代入模型中運用有限差分法計算,得出相應的皮膚表面的溫度,與附件二給出的實測值進行對比,取殘差和最小時的值作爲初始溫度和對流換熱係數的理想值。

1.2 模型求解

1.2.1 偏微分方程的建立
熱傳導在不同溫度的物體相互接觸或者同一物體不同部分具有不同溫度時產生,符合本題中幾種材料互相接觸傳遞熱量的情形。將假人抽象爲多層互相包裹的同軸圓柱體後,可以對上述三維幾何模型進行降維處理,建立一維幾何模型。且該題可忽略對流傳熱與輻射傳熱的影響,物體內部的熱傳遞由傅里葉定律確定,而物體表面和內部的熱量流動又滿足能量守恆定律,依據題目給定部分邊界條件可建立一維熱傳導模型。
物體在邊界上與其他傳熱介質接觸時,物體表面與介質的溫度往往不相同,此時運用牛頓冷卻定律:單位時間從物體流入介質中的熱量和兩者的溫度差成正比,可確定熱傳導的第三類邊界條件。
1.2.2 有限差分法——化爲差分方程
生成網格–>微分化差分–>差分方程矩陣化–>邊界條件矩陣化–>合成矩陣差分方程組(這一步比較考驗耐心)–>追趕法
具體做法可參考這篇文章:史策.熱傳導方程有限差分法的MATLAB實現[J].咸陽師範學院學報,2009,24(04):27-29+36.
1.2.3 追趕法——解差分方程
實際建立出方程組的係數矩陣爲三對角矩陣,即非零元素都集中在主對角線和其相鄰兩條次對角線上,故容易分解成兩個三角陣,因此可以用追趕法求解。
追趕法的理論可參考這篇博文:追趕法求解三對角方程組
1.2.4 輸出結果至Excel文件。

1.3 Matlab實現

代碼如下:

%%爲應用牛頓冷卻定律確定邊值條件,需要在測試範圍內遍歷k21取值,計算邊值條件與附件二中數據進行比對;
%%選取得到最小平均殘差,並將最大殘差控制在一定範圍內的k21值(此程序得到k21=-0.0046);
clc;
clear;
load('tX4.mat');%導入附件2假人皮膚外側溫度變化數據,事先已存儲爲變量,在此問作爲參考值使用
%%常量及邊界條件定義
d1=0.6; d2=6; d3=3.6; d4=5;%單位爲mm
k1=0.082; k2=0.370; k3=0.045; k4=0.028;%熱傳導率
c1=1377; c2=2100; c3=1726; c4=1005;%比熱
p1=300; p2=862; p3=74.2; p4=1.18;%密度
a2=[k1/(c1*p1) k2/(c2*p2) k3/(c3*p3) k4/(c4*p4)];%a2=k/(cp)
dx=0.1;
m=floor([d1/dx d2/dx d3/dx d4/dx]);
m1=m(1);m2=m(2);m3=m(3);m4=m(4);
for k=1:(m1+m2+m3+m4)
    u(k,1)=14.7;%設衣服初始溫度爲14.7度(最小平均殘差)、25度(室溫)、37度(假人皮膚外溫度)時分別進行殘差計算
end
N=5400;%離散化點數
 k11=-1.2;
 k21=-0.0046;
for j=1:N
    M=m1+m2+m3+m4;ox1=d1/m1;ox2=d2/m2;ox3=d3/m3;ox4=d4/m4;ot=1;
    %%變量定義
    r1=a2(1)*ot/(ox1/1000)^2;
    r2=a2(2)*ot/(ox2/1000)^2;
    r3=a2(3)*ot/(ox3/1000)^2;
    r4=a2(4)*ot/(ox4/1000)^2;
    %數據的輸入
    B=zeros(M-1,1);%存放係數矩陣主對角線元素
    A=zeros(M-1,1);%存放係數矩陣主對角線元素下方次對角線的元素
    C=zeros(M-1,1);%存放係數矩陣主對角線元素上方次對角線的元素
    S=zeros(M-1,1);%存放右端的常數項
    for ii=1:m1
        B(ii)=1+2*r1;A(ii)=-r1;C(ii)=-r1;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+1:m1+m2
        B(ii)=1+2*r2;A(ii)=-r2;C(ii)=-r2;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+m2+1:m1+m2+m3
        B(ii)=1+2*r3;A(ii)=-r3;C(ii)=-r3;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+m2+m3+1:m1+m2+m3+m4-1
        B(ii)=1+2*r4;A(ii)=-r4;C(ii)=-r4;
        S(ii)=u(ii+1,1);
    end
    A(1)=0;C(M-1)=0;
    B(M-1)=1+2*r4;S(M-1)=u(M,1);
    datac(j)=(u(2,1)-dx*75*k11/k1)/(1-dx*k11/k1);
    datad(j)=(dx*37*k21/k4-u(end-1,1))/(dx*k21/k4-1);%根據牛頓冷卻定律計算出人皮膚外側溫度作爲邊界條件
    u(1,2)=datac(j);%熱源邊值條件輸入!!
    u(M+1,2)=datad(j);%人皮膚表面溫度:邊值條件輸入!!
    S(1,1)=r1*u(1,2)+S(1,1);S(M-1,1)=S(M-1,1)+r4*u(M+1,2);
    %…矩陣建造結束
    %追趕法求解矩陣方程,b是對角線元素,a爲-1對角線,c爲1對角線
    T=B(1);U=B;l=B;
    for k=2:M-1  %解Lx=b:追
        l(k)=A(k)/U(k-1);
        U(k)=B(k)-C(k-1)*l(k);
    end
    Y=S;
    for k=2:M-1
        Y(k)=S(k)-l(k)*Y(k-1);%中間解
    end
    X=Y;X(M-1)=Y(M-1)/U(M-1);
    for k=M-2:-1:1  %解Ux=b:趕
        X(k)=(Y(k)-C(k)*X(k+1))/U(k);
    end
    outputa(j,:)=X;
    u(2:M,2)=X; %把結果放入矩陣 u 中
    u(:,1)=u(:,2);% 計算下一時刻
end
dada=max(abs(outputa(31:end,end)-tX4(32:end,2)))%最大殘差
kaka=mean(abs(outputa(31:end,end)-tX4(32:end,2)))%平均殘差
clc;
clear;
load('tX4.mat');%導入附件2假人皮膚外側溫度變化數據,事先已存儲爲變量
%%常量定義
d1=0.6; d2=6; d3=3.6; d4=5;%各段厚度,單位爲mm
k1=0.082; k2=0.370; k3=0.045; k4=0.028;%熱傳導率
c1=1377; c2=2100; c3=1726; c4=1005;%比熱
p1=300; p2=862; p3=74.2; p4=1.18;%密度
a2=[k1/(c1*p1) k2/(c2*p2) k3/(c3*p3) k4/(c4*p4)];%a2=k/(cp)
dx=0.01;%離散化步長
m=floor([d1/dx d2/dx d3/dx d4/dx]);
m1=m(1);m2=m(2);m3=m(3);m4=m(4);
for k=1:(m1+m2+m3+m4)
    u(k,1)=37;
end
N=5400;%離散化點數
for j=1:N
    M=m1+m2+m3+m4;ox1=d1/m1;ox2=d2/m2;ox3=d3/m3;ox4=d4/m4;ot=1;
    %%變量定義
    r1=a2(1)*ot/(ox1/1000)^2;
    r2=a2(2)*ot/(ox2/1000)^2;
    r3=a2(3)*ot/(ox3/1000)^2;
    r4=a2(4)*ot/(ox4/1000)^2;
    %數據的輸入
    B=zeros(M-1,1);%存放係數矩陣主對角線元素
    A=zeros(M-1,1);%存放係數矩陣主對角線元素下方次對角線的元素
    C=zeros(M-1,1);%存放係數矩陣主對角線元素上方次對角線的元素
    S=zeros(M-1,1);%存放右端的常數項
    for ii=1:m1
        B(ii)=1+2*r1;A(ii)=-r1;C(ii)=-r1;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+1:m1+m2
        B(ii)=1+2*r2;A(ii)=-r2;C(ii)=-r2;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+m2+1:m1+m2+m3
        B(ii)=1+2*r3;A(ii)=-r3;C(ii)=-r3;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+m2+m3+1:m1+m2+m3+m4-1
        B(ii)=1+2*r4;A(ii)=-r4;C(ii)=-r4;
        S(ii)=u(ii+1,1);
    end
        k11=-0.9;
    A(1)=0;C(M-1)=0;
    B(M-1)=1+2*r4;S(M-1)=u(M,1);
    datac(j)=(u(2,1)-dx*75*k11/k1)/(1-dx*k11/k1);
    u(1,2)=datac(j);%熱源邊界條件輸入!!
    u(M+1,2)=tX4(j,2);%人皮膚表面溫度:邊值條件輸入!!
    S(1,1)=r1*u(1,2)+S(1,1);S(M-1,1)=S(M-1,1)+r4*u(M+1,2);
    %…矩陣建造結束
    %追趕法求解矩陣方程,b是對角線元素,a爲-1對角線,c爲1對角線
    T=B(1);U=B;l=B;
    for k=2:M-1  %解Lx=b:追
        l(k)=A(k)/U(k-1);
        U(k)=B(k)-C(k-1)*l(k);
    end
    Y=S;
    for k=2:M-1
        Y(k)=S(k)-l(k)*Y(k-1);%中間解
    end
    X=Y;X(M-1)=Y(M-1)/U(M-1);
    for k=M-2:-1:1  %解Ux=b:趕
        X(k)=(Y(k)-C(k)*X(k+1))/U(k);
    end
    outputa(j,:)=X;
    u(2:M,2)=X; %把結果放入矩陣 u 中
    u(:,1)=u(:,2);% 用來計算下一時刻
end
xlswrite('problem1.xlsx',outputa);%生成Excel文件存儲溫度分佈矩陣,其中第(i,j)個單元格的值代表第i點厚度、第j點時刻的溫度值

第二問

2.1 總體思路

問題2是在給定了環境溫度和除Ⅱ層之外每一層的厚度的條件下,要求確定Ⅱ層的最優厚度,使得該高溫工作服能夠滿足在65℃環境中工作60分鐘時假人皮膚外側溫度不超過47℃且超過44℃的時間不超過5分鐘。已知材料越厚則隔絕高溫的效果越好,但從實際出發,高溫工作服越薄則質量越輕,活動越靈活,就越有利於提高使用者穿着舒適度和正常工作能力。同時,相同材質的高溫工作服越薄則製造成本也就越低。本題就是要求出在高溫工作服能夠達到給定的高溫防護標準的前提下Ⅱ層的最小厚度。
可以類比問題1的做法建立列寫熱傳導微分方程建立模型。本問中皮膚外側的溫度未知,只知道假人體內溫度恆定爲37℃,因此在確定假人皮膚外側與Ⅳ層交界面的溫度這一邊界條件時需要用到牛頓冷卻定律,這與問題1中確定最外層材料與空氣交界面溫度以及假人皮膚外側與Ⅳ層交界面溫度的做法一致。

2.2 模型求解

對於建立好的微分方程組模型,沿用問題1的有限差分法進行求解。爲了找到滿足要求的最小Ⅱ層厚度,可先選定一個較小的Ⅱ層厚度的值,計算假人皮膚外側的溫度隨時間的變化情況,遍歷搜索的算法逐漸增大Ⅱ層材料厚度的值,直至皮膚外側的溫度剛好滿足題目要求,此時的Ⅱ層材料厚度即爲最佳厚度。

2.3 Matlab實現

代碼如下:

%%最優厚度即滿足要求的最小厚度,此程序選擇滿足問題二要求的第二層最小厚度;
clc;
clear;
%%常量及邊界條件定義
for dd=8.5:0.01:9.5  %遍歷範圍1:5~10,步長:0.1;遍歷範圍2:8.5~9.5,步長:0.01;
d1=0.6; d2=dd; d3=3.6; d4=5.5;%單位爲mm
k1=0.082; k2=0.370; k3=0.045; k4=0.028;%熱傳導率
c1=1377; c2=2100; c3=1726; c4=1005;%比熱
p1=300; p2=862; p3=74.2; p4=1.18;%密度
a2=[k1/(c1*p1) k2/(c2*p2) k3/(c3*p3) k4/(c4*p4)];%a2=k/(cp)
dx=0.1;
m=floor([d1/dx d2/dx d3/dx d4/dx]);
m1=m(1);m2=m(2);m3=m(3);m4=m(4);
for k=1:(m1+m2+m3+m4)
    u(k,1)=14.7;%由於此溫度時模擬邊值條件平均殘差最小,在第二問遍歷尋優時利用該溫度作爲服裝的初始溫度
end
N=3600;%離散化點數
outputa=zeros(3600,m1+m2+m3+m4-1);
 k11=-1.2;
for j=1:N
    M=m1+m2+m3+m4;ox1=d1/m1;ox2=d2/m2;ox3=d3/m3;ox4=d4/m4;ot=1;
    %%變量定義
    r1=a2(1)*ot/(ox1/1000)^2;
    r2=a2(2)*ot/(ox2/1000)^2;
    r3=a2(3)*ot/(ox3/1000)^2;
    r4=a2(4)*ot/(ox4/1000)^2;
    %數據的輸入
    B=zeros(M-1,1);%存放係數矩陣主對角線元素
    A=zeros(M-1,1);%存放係數矩陣主對角線元素下方次對角線的元素
    C=zeros(M-1,1);%存放係數矩陣主對角線元素上方次對角線的元素
    S=zeros(M-1,1);%存放右端的常數項
    for ii=1:m1
        B(ii)=1+2*r1;A(ii)=-r1;C(ii)=-r1;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+1:m1+m2
        B(ii)=1+2*r2;A(ii)=-r2;C(ii)=-r2;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+m2+1:m1+m2+m3
        B(ii)=1+2*r3;A(ii)=-r3;C(ii)=-r3;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+m2+m3+1:m1+m2+m3+m4-1
        B(ii)=1+2*r4;A(ii)=-r4;C(ii)=-r4;
        S(ii)=u(ii+1,1);
    end
    k21=-0.0046;
    A(1)=0;C(M-1)=0;
    B(M-1)=1+2*r4;S(M-1)=u(M,1);
    datac(j)=(u(2,1)-dx*65*k11/k1)/(1-dx*k11/k1);
    datad(j)=(dx*37*k21/k4-u(end-1,1))/(dx*k21/k4-1);
    u(1,2)=datac(j);%熱源邊值條件輸入!!
    u(M+1,2)=datad(j);%人皮膚表面溫度:邊值條件輸入!!
    S(1,1)=r1*u(1,2)+S(1,1);S(M-1,1)=S(M-1,1)+r4*u(M+1,2);
    %…矩陣建造結束
    %追趕法求解矩陣方程,b是對角線元素,a下c上
    T=B(1);U=B;l=B;
    for k=2:M-1  %解Lx=b:追s
        l(k)=A(k)/U(k-1);
        U(k)=B(k)-C(k-1)*l(k);
    end
    Y=S;
    for k=2:M-1
        Y(k)=S(k)-l(k)*Y(k-1);%中間解
    end
    X=Y;X(M-1)=Y(M-1)/U(M-1);
    for k=M-2:-1:1  %解Ux=b:趕
        X(k)=(Y(k)-C(k)*X(k+1))/U(k);
    end
    outputa(j,:)=X;
    u(2:M,2)=X; %把結果放入矩陣 u 中
    u(:,1)=u(:,2);% 下一時刻的值
end
if outputa(3300-1,end)>=44;%條件1
    continue;
end
if outputa(:,end)>=47;%條件2
    continue;
end
outi=dd;
break;%得到最小厚度即退出循環
end

第三問

3.1 總體思路

問題3與問題2類似,也是在給定環境氣溫和隔熱效果要求的條件下求高溫工作服某些層的厚度。與問題2不同的是,本問要同時確定Ⅱ、Ⅳ兩層材料的最優厚度。此處的厚度最優一方面要使得兩種材料都儘可能薄,另一方面,考慮到第Ⅱ層材料爲某種製作高溫工作服的原材料,第Ⅳ層爲衣服與皮膚之間的空氣間隙,從附件給出的參數上看,空氣的密度遠遠小於Ⅱ層材料的密度,因此同等厚度的Ⅱ層材料的質量遠遠大於Ⅳ層空氣的質量,而且Ⅱ層材料需要成本,而Ⅳ層空氣間隙不需成本,所以無論從工作服舒適度還是成本上看,在進行設計時,應該優先使Ⅱ層材料的厚度儘量小,其次再考慮減小Ⅳ層空氣間隙的厚度。
在問題2的求解過程中已經求得了Ⅰ層材料與外界空氣的熱交換系數以及Ⅳ層材料與假人皮膚的熱交換系數,並且已經查閱文獻得知在材料與介質不變時熱交換系數可認爲是定值,因此問題二中求出的值在問題3中可以直接使用。
反覆改變Ⅱ、Ⅳ兩層材料的厚度值,在使得假人皮膚表面溫度滿足題目要求的解中尋找出最優的Ⅱ、Ⅳ兩層材料的厚度值。
問題3與問題2相比,熱量傳遞的物理模型相同,僅僅有參數上的差別,因此可以直接沿用問題2中的熱傳導方程建立偏微分方程組模型。

3.2 模型求解

由於本問題的微分方程組模型與問題2形式一致,因此問題3也沿用問題1和問題2求解微分方程組的辦法,即用有限差分法求解此模型。在前兩問中已經求得熱交換系數的值,考慮到熱交換系數的值在材料以及介質相同時變化較小,因此本問在求解時直接沿用問題2中的熱傳導係數值。
爲了得到第Ⅱ、Ⅳ兩層的最優厚度,使用在一定範圍內遍歷搜索的算法。最優厚度是要使得兩層材料都儘可能薄,並且優先保證第Ⅱ層材料的厚度最小。做兩層循環就好。

3.3 Matlab實現

代碼如下:

clc;
clear;
%%常量及邊界條件定義
num=0;
for dd=8:0.1:15
    flag=0;
    for dd1=1.4:0.1:6.4
d1=0.6; d2=dd; d3=3.6; d4=dd1;%單位爲mm
k1=0.082; k2=0.370; k3=0.045; k4=0.028;%熱傳導率
c1=1377; c2=2100; c3=1726; c4=1005;%比熱
p1=300; p2=862; p3=74.2; p4=1.18;%密度
a2=[k1/(c1*p1) k2/(c2*p2) k3/(c3*p3) k4/(c4*p4)];%a2=k/(cp)
dx=0.1;
m=floor([d1/dx d2/dx d3/dx d4/dx]);
m1=m(1);m2=m(2);m3=m(3);m4=m(4);
for k=1:(m1+m2+m3+m4)
    u(k,1)=14.7;
end
N=1800;
outputa=zeros(1800,m1+m2+m3+m4-1);
 k11=-1.2;
for j=1:N
    M=m1+m2+m3+m4;ox1=d1/m1;ox2=d2/m2;ox3=d3/m3;ox4=d4/m4;ot=1;
    %%變量定義
    r1=a2(1)*ot/(ox1/1000)^2;
    r2=a2(2)*ot/(ox2/1000)^2;
    r3=a2(3)*ot/(ox3/1000)^2;
    r4=a2(4)*ot/(ox4/1000)^2;
    %數據的輸入
    B=zeros(M-1,1);%存放係數矩陣主對角線元素
    A=zeros(M-1,1);%存放係數矩陣主對角線元素下方次對角線的元素
    C=zeros(M-1,1);%存放係數矩陣主對角線元素上方次對角線的元素
    S=zeros(M-1,1);%存放右端的常數項
    for ii=1:m1
        B(ii)=1+2*r1;A(ii)=-r1;C(ii)=-r1;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+1:m1+m2
        B(ii)=1+2*r2;A(ii)=-r2;C(ii)=-r2;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+m2+1:m1+m2+m3
        B(ii)=1+2*r3;A(ii)=-r3;C(ii)=-r3;
        S(ii)=u(ii+1,1);
    end
    for ii=m1+m2+m3+1:m1+m2+m3+m4-1
        B(ii)=1+2*r4;A(ii)=-r4;C(ii)=-r4;
        S(ii)=u(ii+1,1);
    end
    k21=-0.0046;
    A(1)=0;C(M-1)=0;
    B(M-1)=1+2*r4;S(M-1)=u(M,1);
    datac(j)=(u(2,1)-dx*80*k11/k1)/(1-dx*k11/k1);
    datad(j)=(dx*37*k21/k4-u(end-1,1))/(dx*k21/k4-1);
    u(1,2)=datac(j);%熱源邊值條件輸入!!
    u(M+1,2)=datad(j);%人皮膚表面溫度:邊值條件輸入!!
    S(1,1)=r1*u(1,2)+S(1,1);S(M-1,1)=S(M-1,1)+r4*u(M+1,2);
    %…矩陣建造結束
    %追趕法求解矩陣方程,b是對角線元素,a爲-1對角線,c爲1對角線
    T=B(1);U=B;l=B;
    for k=2:M-1  %解Lx=b:追
        l(k)=A(k)/U(k-1);
        U(k)=B(k)-C(k-1)*l(k);
    end
    Y=S;
    for k=2:M-1
        Y(k)=S(k)-l(k)*Y(k-1);%中間解
    end
    X=Y;X(M-1)=Y(M-1)/U(M-1);
    for k=M-2:-1:1  %解Ux=b:趕
        X(k)=(Y(k)-C(k)*X(k+1))/U(k);
    end
    outputa(j,:)=X;
    u(2:M,2)=X; %把結果放入矩陣 u 中
    u(:,1)=u(:,2);% 下一時刻值
end
if outputa(1500-1,end)>=44  %條件1
    continue;
end
if outputa(:,end)>=47  %條件2
    continue;
end
num=num+1;
outi(num)=dd;
outj(num)=dd1;
if (outputa(1500-1,end)<44)&(outputa(:,end)<47)
    flag=1;
    break;%得到每個滿足要求的第二層厚度對應的第四層最小厚度即退出循環
end
    end
if flag==1
    break;
end
end



另一種做法

還有一種不應用牛頓冷卻定律確定人體皮膚外表面溫度這個邊界條件,而假想出“第五層材料”的做法,雖然可以和本文提供的方法得到一樣的結果(第二問、第三問),但是略微欠缺一些物理理論的支持。
如果只是想看到第一問的分佈圖的話,數值仿真軟件Comsol的熱傳遞模塊可以較爲輕鬆地得到第一問的仿真結果,但是內存消耗比較嚴重不是很友好。
——————————————————————————————————————
本文給出的思路,旨在輔助對於題目的理解並幫助解釋貼出的Matlab代碼,不代表最優做法。本文思路及代碼僅供參考,思路中涉及到的公式、方法以及詳細步驟等請移步至參考文獻。代碼中變量命名比較亂,僅供參考。

參考文獻

[1]王元明.數學物理方程與特殊函數[M].高等教育出版社.2011,:84-97.
[2] (美) 施羅德 (Schroeder,D.V.) , 著. 熱物理學導論[M].北京:世界圖書出版公司北京公司, 2008.
[3]史策.熱傳導方程有限差分法的MATLAB實現[J].咸陽師範學院學報,2009,24(04):27-29+36.
[4]南京大學數學系計算數學專業.偏微分方程數值解法[M].北京.科學出版社.1979

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章