偏微分方程數(shù)值解法的MATLAB源碼

上傳人:txadgkn****dgknqu... 文檔編號(hào):62673826 上傳時(shí)間:2022-03-15 格式:DOCX 頁(yè)數(shù):16 大?。?13.92KB
收藏 版權(quán)申訴 舉報(bào) 下載
偏微分方程數(shù)值解法的MATLAB源碼_第1頁(yè)
第1頁(yè) / 共16頁(yè)
偏微分方程數(shù)值解法的MATLAB源碼_第2頁(yè)
第2頁(yè) / 共16頁(yè)
偏微分方程數(shù)值解法的MATLAB源碼_第3頁(yè)
第3頁(yè) / 共16頁(yè)

下載文檔到電腦,查找使用更方便

0 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《偏微分方程數(shù)值解法的MATLAB源碼》由會(huì)員分享,可在線閱讀,更多相關(guān)《偏微分方程數(shù)值解法的MATLAB源碼(16頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、精選優(yōu)質(zhì)文檔-傾情為你奉上 原創(chuàng)偏微分方程數(shù)值解法的MATLAB源碼【更新完畢】 說(shuō)明:由于偏微分的程序都比較長(zhǎng),比其他的算法稍復(fù)雜一些,所以另開(kāi)一貼,專(zhuān)門(mén)上傳偏微分的程序謝謝大家的支持!其他的數(shù)值算法見(jiàn):1、古典顯式格式求解拋物型偏微分方程(一維熱傳導(dǎo)方程)function U x t=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C)%古典顯式格式求解拋物型偏微分方程%U x t=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C)%方程:u_t=C*u_xx 0 =

2、x = uX,0 = t 0.5 disp(r 0.5,不穩(wěn)定)end%計(jì)算初值和邊值U=zeros(M+1,N+1);for i=1:M+1 U(i,1)=phi(x(i);endfor j=1:N+1 U(1,j)=psi1(t(j); U(M+1,j)=psi2(t(j);end%逐層求解for j=1:N for i=2:M U(i,j+1)=r*U(i-1,j)+r1*U(i,j)+r*U(i+1,j); endendU=U;%作出圖形mesh(x,t,U);title(古典顯式格式,一維熱傳導(dǎo)方程的解的圖像)xlabel(空間變量 x)ylabel(時(shí)間變量 t)zlabel(一維

3、熱傳導(dǎo)方程的解 U)return;古典顯式格式不穩(wěn)定情況古典顯式格式穩(wěn)定情況2、古典隱式格式求解拋物型偏微分方程(一維熱傳導(dǎo)方程)function U x t=PDEParabolicClassicalImplicit(uX,uT,phi,psi1,psi2,M,N,C)%古典隱式格式求解拋物型偏微分方程%U x t=PDEParabolicClassicalImplicit(uX,uT,phi,psi1,psi2,M,N,C)%方程:u_t=C*u_xx 0 = x = uX,0 = t = uT%初值條件:u(x,0)=phi(x)%邊值條件:u(0,t)=psi1(t), u(uX,t)

4、=psi2(t)%輸出參數(shù):U -解矩陣,第一行表示初值,第一列和最后一列表示邊值,第二行表示第2層% x -空間變量% t -時(shí)間變量%輸入?yún)?shù):uX -空間變量x的取值上限% uT -時(shí)間變量t的取值上限% phi -初值條件,定義為內(nèi)聯(lián)函數(shù)% psi1 -邊值條件,定義為內(nèi)聯(lián)函數(shù)% psi2 -邊值條件,定義為內(nèi)聯(lián)函數(shù)% M -沿x軸的等分區(qū)間數(shù)% N -沿t軸的等分區(qū)間數(shù)% C -系數(shù),默認(rèn)情況下C=1%應(yīng)用舉例:%uX=1;uT=0.2;M=50;N=50;C=1;%phi=inline(sin(pi*x);psi1=inline(0);psi2=inline(0);%U x t=P

5、DEParabolicClassicalImplicit(uX,uT,phi,psi1,psi2,M,N,C);%設(shè)置參數(shù)C的默認(rèn)值if nargin=7 C=1;end%計(jì)算步長(zhǎng)dx=uX/M;%x的步長(zhǎng)dt=uT/N;%t的步長(zhǎng)x=(0:M)*dx;t=(0:N)*dt;r=C*dt/dx/dx;%步長(zhǎng)比Diag=zeros(1,M-1);%矩陣的對(duì)角線元素Low=zeros(1,M-2);%矩陣的下對(duì)角線元素Up=zeros(1,M-2);%矩陣的上對(duì)角線元素for i=1:M-2 Diag(i)=1+2*r; Low(i)=-r; Up(i)=-r;endDiag(M-1)=1+2*r

6、;%計(jì)算初值和邊值U=zeros(M+1,N+1);for i=1:M+1 U(i,1)=phi(x(i);endfor j=1:N+1 U(1,j)=psi1(t(j); U(M+1,j)=psi2(t(j);end%逐層求解,需要使用追趕法(調(diào)用函數(shù)EqtsForwardAndBackward)for j=1:N b1=zeros(M-1,1); b1(1)=r*U(1,j+1); b1(M-1)=r*U(M+1,j+1); b=U(2:M,j)+b1; U(2:M,j+1)=EqtsForwardAndBackward(Low,Diag,Up,b);endU=U;%作出圖形mesh(x,

7、t,U);title(古典隱式格式,一維熱傳導(dǎo)方程的解的圖像)xlabel(空間變量 x)ylabel(時(shí)間變量 t)zlabel(一維熱傳導(dǎo)方程的解 U)return;此算法需要使用追趕法求解三對(duì)角線性方程組,這個(gè)算法在上一篇帖子中已經(jīng)給出,為了方便,再給出來(lái)追趕法解三對(duì)角線性方程組function x=EqtsForwardAndBackward(L,D,U,b)%追趕法求解三對(duì)角線性方程組Ax=b%x=EqtsForwardAndBackward(L,D,U,b)%x:三對(duì)角線性方程組的解%L:三對(duì)角矩陣的下對(duì)角線,行向量%D:三對(duì)角矩陣的對(duì)角線,行向量%U:三對(duì)角矩陣的上對(duì)角線,行向量

8、%b:線性方程組Ax=b中的b,列向量%應(yīng)用舉例:%L=-1 -2 -3;D=2 3 4 5;U=-1 -2 -3;b=6 1 -2 1;%x=EqtsForwardAndBackward(L,D,U,b)%檢查參數(shù)的輸入是否正確n=length(D);m=length(b);n1=length(L);n2=length(U);if n-n1 = 1 | n-n2 = 1 | n = m disp(輸入?yún)?shù)有誤!) x= ; return;end%追的過(guò)程for i=2:n L(i-1)=L(i-1)/D(i-1); D(i)=D(i)-L(i-1)*U(i-1);endx=zeros(n,1

9、);x(1)=b(1);for i=2:n x(i)=b(i)-L(i-1)*x(i-1);end%趕的過(guò)程x(n)=x(n)/D(n);for i=n-1:-1:1 x(i)=(x(i)-U(i)*x(i+1)/D(i);endreturn;古典隱式格式在以后的程序中,我們都取C=1,不再作為一個(gè)輸入?yún)?shù)處理3、Crank-Nicolson隱式格式求解拋物型偏微分方程需要調(diào)用追趕法的程序function U x t=PDEParabolicCN(uX,uT,phi,psi1,psi2,M,N)%Crank-Nicolson隱式格式求解拋物型偏微分方程%U x t=PDEParabolicCN

10、(uX,uT,phi,psi1,psi2,M,N)%方程:u_t=u_xx 0 = x = uX,0 = t = uT%初值條件:u(x,0)=phi(x)%邊值條件:u(0,t)=psi1(t), u(uX,t)=psi2(t)%輸出參數(shù):U -解矩陣,第一行表示初值,第一列和最后一列表示邊值,第二行表示第2層% x -空間變量% t -時(shí)間變量%輸入?yún)?shù):uX -空間變量x的取值上限% uT -時(shí)間變量t的取值上限% phi -初值條件,定義為內(nèi)聯(lián)函數(shù)% psi1 -邊值條件,定義為內(nèi)聯(lián)函數(shù)% psi2 -邊值條件,定義為內(nèi)聯(lián)函數(shù)% M -沿x軸的等分區(qū)間數(shù)% N -沿t軸的等分區(qū)間數(shù)%應(yīng)

11、用舉例:%uX=1;uT=0.2;M=50;N=50;%phi=inline(sin(pi*x);psi1=inline(0);psi2=inline(0);%U x t=PDEParabolicCN(uX,uT,phi,psi1,psi2,M,N);%計(jì)算步長(zhǎng)dx=uX/M;%x的步長(zhǎng)dt=uT/N;%t的步長(zhǎng)x=(0:M)*dx;t=(0:N)*dt;r=dt/dx/dx;%步長(zhǎng)比Diag=zeros(1,M-1);%矩陣的對(duì)角線元素Low=zeros(1,M-2);%矩陣的下對(duì)角線元素Up=zeros(1,M-2);%矩陣的上對(duì)角線元素for i=1:M-2 Diag(i)=1+r; L

12、ow(i)=-r/2; Up(i)=-r/2;endDiag(M-1)=1+r;%計(jì)算初值和邊值U=zeros(M+1,N+1);for i=1:M+1 U(i,1)=phi(x(i);endfor j=1:N+1 U(1,j)=psi1(t(j); U(M+1,j)=psi2(t(j);endB=zeros(M-1,M-1);for i=1:M-2 B(i,i)=1-r; B(i,i+1)=r/2; B(i+1,i)=r/2;endB(M-1,M-1)=1-r;%逐層求解,需要使用追趕法(調(diào)用函數(shù)EqtsForwardAndBackward)for j=1:N b1=zeros(M-1,1)

13、; b1(1)=r*(U(1,j+1)+U(1,j)/2; b1(M-1)=r*(U(M+1,j+1)+U(M+1,j)/2; b=B*U(2:M,j)+b1; U(2:M,j+1)=EqtsForwardAndBackward(Low,Diag,Up,b);endU=U;%作出圖形mesh(x,t,U);title(Crank-Nicolson隱式格式,一維熱傳導(dǎo)方程的解的圖像)xlabel(空間變量 x)ylabel(時(shí)間變量 t)zlabel(一維熱傳導(dǎo)方程的解 U)return;Crank-Nicolson隱式格式4、正方形區(qū)域Laplace方程Diriclet問(wèn)題的求解需要調(diào)用Jac

14、obi迭代法和Guass-Seidel迭代法求解線性方程組function U x y=PDEEllipseSquareLaplaceDirichlet(ub,phi1,phi2,psi1,psi2,M,type)%正方形區(qū)域Laplace方程的Diriclet邊值問(wèn)題的差分求解%此程序需要調(diào)用Jacobi迭代法或者Guass-Seidel迭代法求解線性方程組%U x y=PDEEllipseSquareLaplaceDirichlet(ub,phi1,phi2,psi1,psi2,M,type)%方程:u_xx+u_yy=0 0=x,y=ub%邊值條件:u(0,y)=phi1(y)% u(u

15、b,y)=phi2(y)% u(x,0)=psi1(x)% u(x,ub)=psi2(x)%輸出參數(shù):U -解矩陣,第一行表示y=0時(shí)的值,第二行表示第y=h時(shí)的值% x -橫坐標(biāo)% y -縱坐標(biāo)%輸入?yún)?shù):ub -變量邊界值的上限% phi1,phi2,psi1,psi2 -邊界函數(shù),定義為內(nèi)聯(lián)函數(shù)% M -橫縱坐標(biāo)的等分區(qū)間數(shù)% type -求解差分方程的迭代格式,若type=Jacobi,采用Jacobi迭代格式% 若type=GS,采用Guass-Seidel迭代格式。默認(rèn)情況下,type=GS%應(yīng)用舉例:%ub=4;M=20;%phi1=inline(y*(4-y);phi2=inl

16、ine(0);psi1=inline(sin(pi*x/4);psi2=inline(0);%U x y=PDEEllipseSquareLaplaceDirichlet(ub,phi1,phi2,psi1,psi2,M,GS);if nargin=6 type=GS;end%步長(zhǎng)h=ub/M;%橫縱坐標(biāo)x=(0:M)*h;y=(0:M)*h;%差分格式的矩陣形式AU=K%構(gòu)造矩陣AM2=(M-1)2;A=zeros(M2);for i=1:M2 A(i,i)=4;endfor i=1:M2-1 if mod(i,M-1)=0 A(i,i+1)=-1; A(i+1,i)=-1; endendf

17、or i=1:M2-M+1 A(i,i+M-1)=-1; A(i+M-1,i)=-1;endU=zeros(M+1);%邊值條件for i=1:M+1 U(i,1)=psi1(i-1)*h); U(i,M+1)=psi2(i-1)*h); U(1,i)=phi1(i-1)*h); U(M+1,i)=phi2(i-1)*h);end%構(gòu)造KK=zeros(M2,1);for i=1:M-1 K(i)=U(i+1,1); K(M2-i+1)=U(i+1,M+1);endK(1)=K(1)+U(1,2);K(M-1)=K(M-1)+U(M+1,2);K(M2-M+2)=K(M2-M+2)+U(1,M

18、);K(M2)=K(M2)+U(M+1,M);for i=2:M-2 K(M-1)*(i-1)+1)=U(1,i+1); K(M-1)*i)=U(M+1,i+1);endx0=ones(M2,1);switch type %調(diào)用Guass-Seidel迭代法求解線性方程組AU=K case Jacobi X=EqtsJacobi(A,K,x0); %調(diào)用Guass-Seidel迭代法求解線性方程組AU=K case GS X=EqtsGS(A,K,x0); otherwise disp(差分格式類(lèi)型輸入錯(cuò)誤) return;end%把求解結(jié)果化成矩陣型式for i=2:M for j=2:M

19、U(j,i)=X(j-1+(M-1)*(i-2); endendU=U;%作出圖形mesh(x,y,U);title(五點(diǎn)差分格式Laplace方程Diriclet問(wèn)題的解的圖像)xlabel(x)ylabel(y)zlabel(Laplace方程Diriclet問(wèn)題的解 U)return;正方形區(qū)域Laplace方程五點(diǎn)差分格式5、一階雙曲型方程的差分方法function U x t=PDEHyperbolic(uX,uT,M,N,C,phi,psi1,psi2,type)%一階雙曲型方程的差分格式%U x t=PDEHyperbolic(uX,uT,M,N,C,phi,psi1,psi2,

20、type)%方程:u_t+C*u_x=0 0 = t = uT, 0 = x 1 disp(|C*r|1,Lax-Friedrichs差分格式不穩(wěn)定!) end %逐層求解 for j=1:N for i=2:M U(i,j+1)=(U(i+1,j)+U(i-1,j)/2-C*r*(U(i+1,j)-U(i-1,j)/2; end end %Courant-Isaacson-Rees差分格式 case CourantIsaacsonRees if C0 disp(C0,采用前差公式) if C*r0,采用后差公式) if C*r1 disp(Courant-Isaacson-Lees差分格式不

21、穩(wěn)定!) end %逐層求解 for j=1:N for i=2:M U(i,j+1)=C*r*U(i-1,j)+(1-C*r)*U(i,j); end end end %Leap-Frog(蛙跳)差分格式 case LeapFrog phi2=input(請(qǐng)輸入第二層初值條件函數(shù):psi2=); if abs(C*r)1 disp(|C*r|1,Leap-Frog差分格式不穩(wěn)定!) end %第二層初值條件 for i=1:M+1 U(i,2)=phi2(x(i); end %逐層求解 for j=2:N for i=2:M U(i,j+1)=U(i,j-1)-C*r*(U(i+1,j)-U

22、(i-1,j); end end %Lax-Wendroff差分格式 case LaxWendroff if abs(C*r)1 disp(|C*r|1,Lax-Wendroff差分格式不穩(wěn)定!) end %逐層求解 for j=1:N for i=2:M U(i,j+1)=U(i,j)-C*r*(U(i+1,j)-U(i-1,j)/2+C2*r2*(U(i+1,j)-2*U(i,j)+U(i-1,j)/2; end end %Crank-Nicolson隱式差分格式,需調(diào)用追趕法求解三對(duì)角線性方程組的算法 case CrankNicolson Diag=zeros(1,M-1);%矩陣的對(duì)角

23、線元素 Low=zeros(1,M-2);%矩陣的下對(duì)角線元素 Up=zeros(1,M-2);%矩陣的上對(duì)角線元素 for i=1:M-2 Diag(i)=4; Low(i)=-r*C; Up(i)=r*C; end Diag(M-1)=4; B=zeros(M-1,M-1); for i=1:M-2 B(i,i)=4; B(i,i+1)=-r*C; B(i+1,i)=r*C; end B(M-1,M-1)=4; %逐層求解,需要使用追趕法(調(diào)用函數(shù)EqtsForwardAndBackward) for j=1:N b1=zeros(M-1,1); b1(1)=r*C*(U(1,j+1)+U(1,j)/2; b1(M-1)=-r*C*(U(M+1,j+1)+U(M+1,j)/2; b=B*U(2:M,j)+b1; U(2:M,j+1)=EqtsForwardAndBackward(Low,Diag,Up,b); end otherwise disp(差分格式類(lèi)型輸入有誤!) return;endU=U;%作出圖形mesh(x,t,U);title(type 格式求解一階雙曲型方程的解的圖像);xlabel(空間變量 x);ylabel(時(shí)間變量 t);zlabel(一階雙曲型方程的解 U);return;專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!