一维热传导方程.docx

上传人:b****6 文档编号:7135296 上传时间:2023-01-21 格式:DOCX 页数:16 大小:84.21KB
下载 相关 举报
一维热传导方程.docx_第1页
第1页 / 共16页
一维热传导方程.docx_第2页
第2页 / 共16页
一维热传导方程.docx_第3页
第3页 / 共16页
一维热传导方程.docx_第4页
第4页 / 共16页
一维热传导方程.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

一维热传导方程.docx

《一维热传导方程.docx》由会员分享,可在线阅读,更多相关《一维热传导方程.docx(16页珍藏版)》请在冰豆网上搜索。

一维热传导方程.docx

一维热传导方程

维热传导方程

问题介绍

考虑一维热传导方程:

1)ut

2

au2f(x),0tT,

x

其中a是正常数,f(x)是给定的连续函数。

按照定解条件的不同给法,可将方程

(1)的定解问题分为两类:

第一类、初值问题(

也称Cauthy问题)

求具有所需次数偏微商的函数

u(x,t),满足方程

1)

(x)

和初始条件:

2)

u(x,0)(x),

x

第二类、初边值问题(

也称混合问题):

求具有所需次数偏微商的函数

u(x,t),满足方程

(1)(0xl)和初始条件:

(3)u(x,0)(x),0xl

及边值条件

(4)u(0,t)u(l,t)0.0tT

假定(x)在相应区域光滑,并且在x0,l满足相容条件,使上述问题有唯一充分光滑的

解。

二.区域剖分

考虑边值问题

(1),(4)的差分逼近。

去空间步长hl/N和时间步长T/M,其中N,M都是正整数。

用两族平行直线:

将矩形域G{0xl;0tT}分割成矩形网格,网格节点为(xj,tk)。

以Gh表示网格内

是网格界点集合。

三.离散格式

第k+1层值通过第k层值明显表示出来,无需求解线性代数方程组,这样的格式称为显格式。

第k+1层值不能通过第k层值明显表示出来,而由线性代数方程组确定,这样的格式称为隐格式。

1.

向前差分格式

f(xj),

0kk

ujj(xj),u0uN0,

易知向前差分格式是显格式

2.向后差分格式

k1k1k1k

rukj11(12u)ukj1rukj11ukjfj,

0kk

ujj(xj),u0uN0,

其中j=1,2,⋯,N-1,k=1,2,⋯,M-1,易知向前差分格式是显格式。

3.

六点对称格式(Grank-Nicolson格式)将向前差分格式和向后差分格式作算术平均,即得到六点对称格式:

4.

 

1

外,还要用到u1j,这可以用前述二层差分格式计算(为保证精度,可将[0,]分成若干等份)

四.格式稳定性

通过误差估计方程

(1)可知对任意的r,Richardson格式都不稳定,所以Richardson格式绝对不稳定。

11

(2)当0r时,向前差分格式趋于稳定;当r时,向前差分格式的误差无限增长。

22

因此向前差分格式是条件稳定。

3)向后差分格式和六点对称格式都绝对稳定,且各自的截断误差阶分别为

O(h2)和

O(2h2)。

五.数值例子

u(x,t)=exp(x+t)

例1令f(x)=0和a=1,可求得u(x,t)一个解析解为

1.用向前差分格式验证得数值结果如下:

请输入n的值(输入0结束程序):

2

请输入m的值(输入0结束程序):

17

xjtk真实值x[i][k]近似值u[i][k]误差err[i][k]

0.3333330.0555561.4753411.4738670.001474

0.6666670.0555562.0590042.0569470.002057

0.3333330.1111111.5596231.5570370.002586

0.6666670.1111112.1766302.1737190.002911

0.3333330.1666671.6487211.6456190.003102

0.6666670.1666672.3009762.2973850.003591

0.3333330.2222221.7429091.7393730.003536

0.6666670.2222222.4324252.4284450.003981

0.3333330.2777781.8424771.8386470.003831

0.6666670.2777782.5713842.5670480.004337

0.3333330.3333331.9477341.9436200.004114

0.6666670.3333332.7182822.7136510.004630

0.3333330.3888892.0590042.0546320.004372

0.6666670.3888892.8735712.8686440.004927

0.3333330.4444442.1766302.1719920.004638

0.6666670.4444443.0377323.0325120.005220

0.3333330.5000002.3009762.2960680.004908

0.6666670.5000003.2112713.2057440.005526

0.3333330.5555562.4324252.4272330.005193

0.6666670.5555563.3947233.3888780.005845

0.3333330.6111112.5713842.5658940.005491

0.6666670.6111113.5886563.5824750.006181

0.3333330.6666672.7182822.7124760.005805

0.6666670.6666673.7936683.7871330.006535

0.3333330.7222222.8735712.8674340.006137

0.6666670.7222224.0103924.0034830.006908

0.3333330.7777783.0377323.0312430.006488

0.6666670.7777784.2394964.2321930.007303

0.3333330.8333333.2112713.2044110.006859

0.6666670.8333334.4816894.4739690.007721

0.3333330.8888893.3947233.3874720.007251

0.6666670.8888894.7377184.7295560.0081620.3333330.9444443.5886563.5809910.0076650.6666670.9444445.0083734.9997450.008628当n等于2和m等于17时最大误差为0.008628其中r=1/2,格式是稳定的。

2.用向后差分格式验证得数值结果如下:

请输入n的值(输入0结束程序):

6

请输入m的值(输入0结束程序):

6

xj真实值x[i]近似值u[i]误差err[i]第1层结果时间节点Tk=0.1428570.1428571.3307121.3350020.0042890.2857141.5350631.5423580.0072950.4285711.7707951.7799490.0091540.5714292.0427272.0525240.0097970.7142862.3564182.3653460.0089270.8571432.7182822.7242560.005974第1层的最大误差是0.009797第2层结果时间节点Tk=0.2857140.1428571.5350631.5417970.0067340.2857141.7707951.7824240.0116290.4285712.0427272.0573450.0146180.5714292.3564182.3718950.0154770.7142862.7182822.7320700.0137880.8571433.1357153.1446330.008919第2层的最大误差是0.015477第3层结果时间节点Tk=0.4285710.1428571.7707951.7793240.0085290.2857142.0427272.0575180.0147910.4285712.3564182.3750100.0185920.5714292.7182822.7378840.0196020.7142863.1357153.1530410.0173260.8571433.6172513.6283370.011086第3层的最大误差是0.019602第4层结果时间节点Tk=0.5714290.1428572.0427272.0528880.0101610.2857142.3564182.3740620.0176440.4285712.7182822.7404570.0221750.5714293.1357153.1590580.0233430.7142863.6172513.6378270.0205760.8571434.1727344.1858510.013117第4层的最大误差是0.023343第5层结果时间节点Tk=0.7142860.1428572.3564182.3682760.011857

0.2857142.7182822.7388800.0205980.4285713.1357153.1616000.0258860.5714293.6172513.6444850.0272340.7142864.1727344.1967160.0239820.8571434.8135204.8287880.015268第5层的最大误差是0.027234第6层结果时间节点Tk=0.8571430.1428572.7182822.7320170.0137350.2857143.1357153.1595780.0238640.4285713.6172513.6472400.0299890.5714294.1727344.2042780.0315440.7142864.8135204.8412870.0277670.8571435.5527085.5703780.017670第6层的最大误差是0.031544当n等于6时最大误差为0.0315443.用六点对称格式验证数值结果如下:

请输入n的值(输入0结束程序):

6

请输入m的值(输入0结束程序):

6

xj真实值x[i]近似值u[i]误差err[i]第1层结果时间节点Tk=0.1428570.1428571.3307121.3309880.0002760.2857141.5350631.5355220.0004590.4285711.7707951.7713680.0005730.5714292.0427272.0433500.0006230.7142862.3564182.3570040.0005850.8571432.7182822.7186920.000410第1层的最大误差是0.000623第2层结果时间节点Tk=0.2857140.1428571.5350631.5354240.0003610.2857141.7707951.7714350.0006400.4285712.0427272.0435380.0008100.5714292.3564182.3572680.0008490.7142862.7182822.7190160.0007340.8571433.1357153.1361620.000447第2层的最大误差是0.000849第3层结果时间节点Tk=0.4285710.1428571.7707951.7712330.0004380.2857142.0427272.0434760.0007490.4285712.3564182.3573550.0009370.5714292.7182822.7192680.0009860.7142863.1357153.1365920.0008770.8571433.6172513.6178250.000574第3层的最大误差是0.000986第4层结果时间节点Tk=0.5714290.1428572.0427272.0432220.0004950.2857142.3564182.3572870.0008690.4285712.7182822.7193770.0010950.5714293.1357153.1368670.0011530.7142863.6172513.6182610.0010100.8571434.1727344.1733650.000631第4层的最大误差是0.001153第5层结果时间节点Tk=0.7142860.1428572.3564182.3569990.0005810.2857142.7182822.7192840.0010030.4285713.1357153.1369730.0012580.5714293.6172513.6185730.0013220.7142864.1727344.1739000.0011660.8571434.8135204.8142710.000751第5层的最大误差是0.001322第6层结果时间节点Tk=0.8571430.1428572.7182822.7189450.0006630.2857143.1357153.1368710.0011570.4285713.6172513.6187050.0014550.5714294.1727344.1742650.0015310.7142864.8135204.8148670.0013470.8571435.5527085.5535590.000851第6层的最大误差是0.001531当n等于6时最大误差为0.0015314.用Richardson格式验证数值结果如下:

请输入n的值(输入0结束程序):

5请输入m的值(输入0结束程序):

5xjtk真实值x[i][k]近似值u[i][k]误差err[i][k]0.1666670.1666671.3956121.3960800.0004680.3333330.1666671.6487211.6494810.0007600.5000000.1666671.9477341.9486490.0009150.6666670.1666672.3009762.3018880.0009120.8333330.1666672.7182822.7189490.0006670.1666670.3333331.6487211.6455400.0031820.3333330.3333331.9477341.9448060.0029280.5000000.3333332.3009762.2975830.0033930.6666670.3333332.7182822.7136000.0046820.8333330.3333333.2112713.2040990.0071710.1666670.5000001.9477341.9881450.0404110.3333330.5000002.3009762.2916210.009355

0.5000000.5000002.7182822.7075140.010768

0.6666670.5000003.2112713.1956850.015586

0.8333330.5000003.7936683.9077790.114111

0.1666670.6666672.3009761.2141561.086820

0.3333330.6666672.7182823.2938220.575541

0.5000000.6666673.2112713.1649070.046364

0.6666670.6666673.7936685.4006921.607024

0.8333330.6666674.4816891.5458782.935811

0.1666670.8333332.71828235.74707433.028792

0.3333330.8333333.211271-24.21136127.422631

0.5000000.8333333.79366831.08392727.290259

0.6666670.8333334.481689-69.89150974.373198

0.8333330.8333335.29449095.14889189.854401

附录1

#include

#include

#include

#defineMax_N1000

doubleu[Max_N][Max_N],b[Max_N],a[Max_N],c[Max_N],f[Max_N],err[Max_N][Max_N],x[Max_N][Max_N],y[Max_N],beta[Max_N],Err[Max_intn,m;//将空间区间【0,1】分为n等份;时间区间【0,1】分为m等份voidcatchup()

{

inti;

beta[1]=c[1]/b[1];

for(i=2;i

beta[i]=c[i]/(b[i]-a[i]*beta[i-1]);

y[1]=f[1]/b[1];

for(i=2;i<=n;i++)

y[i]=(f[i]-a[i]*y[i-1])/(b[i]-a[i]*beta[i-1]);

u[n][1]=y[n];

for(i=n-1;i>0;i--)

u[i][1]=y[i]-beta[i]*u[i+1][1];

}

intmain()//一维热传导方程的向前差分格式

{

intk,i;

doubleh,t,r;

doublepi=3.1415627;

printf("请输入n的值(输入0结束程序):

\n");

属于[0,1],t属于

if(scanf("%d",&n))printf("请输入m的值(输入0结束程序):

\n");while(scanf("%d",&m)&&m&&n)//u(x,t)=exp(x+t),u(x,0)=exp(x),f(x)=0,x[0,1],a=1.

{

h=1.0/(n+1);

t=1.0/(m+1);

r=t/(h*h);

for(i=0;i<=n+1;i++)//初值条件

{

u[i][0]=exp(i*h);

}

for(k=0;k<=m+1;k++)//边值条件

{

u[0][k]=exp(k*t);

u[n+1][k]=exp((n+1)*h+k*t);

}

printf("xjtk真实值x[i][k]近似值u[i][k]误差err[i][k]\n");

for(k=1;k<=m;k++)

{

for(intj=1;j<=n;j++)

{

u[j][k]=r*u[j+1][k-1]+(1-2*r)*u[j][k-1]+r*u[j-1][k-1];

}

}

doubleT=0;

for(k=1;k<=m;k++)

{

for(i=1;i<=n;i++)

{

x[i][k]=exp(i*h+k*t);err[i][k]=x[i][k]>u[i][k]?

x[i][k]-u[i][k]:

u[i][k]-x[i][k];printf("%lf%lf%lf%lf%lf\n",i*h,k*t,x[i][k],u[i][k],err[i][k]);if(err[i][k]>T)T=err[i][k];

}

}

printf("当n等于%d和m等于%d时最大误差为%lf\n",n,m,T);printf("请输入n的值(输入0结束程序):

");

if(scanf("%d",&n))printf("请输入m的值(输入0结束程序):

");

}

system("PASUE");

return0;

}

附录2

#include

#include

#include

#defineMax_N1000

doubleu[Max_N],b[Max_N],a[Max_N],c[Max_N],f[Max_N],err[Max_N],x[Max_N],y[Max_N],beta[Max_N],Err[Max_N];

intn,m;//将空间区间【0,1】分为n等份;时间区间【0,1】分为m等份voidcatchup()

{

inti;

beta[1]=c[1]/b[1];

for(i=2;i

beta[i]=c[i]/(b[i]-a[i]*beta[i-1]);

y[1]=f[1]/b[1];

for(i=2;i<=n;i++)

y[i]=(f[i]-a[i]*y[i-1])/(b[i]-a[i]*beta[i-1]);

u[n]=y[n];

for(i=n-1;i>0;i--)u[i]=y[i]-beta[i]*u[i+1];

}

intmain()//一维热传导方程的六点对称格式

{

intk,i;

doubleh,t,r;

//intj=0;

doublepi=3.1415627;

printf("请输入n的值(输入0结束程序):

\n");

if(scanf("%d",&n))printf("请输入m的值(输入0结束程序):

\n");while(scanf("%d",&m)&&m&&n)//u(x,t)=exp(x+t),u(x,0)=exp(x),f(x)=0,x属于[0,1],t属于

[0,1],a=1.

{

h=1.0/(n+1);

t=1.0/(m+1);

r=t/(h*h);

printf("xj真实值x[i]近似值u[i]误差err[i]\n");doubleM=0;

//doubletemp=0;for(k=1;k<=m;k++){

b[1]=1+2*r;c[1]=-r;a[n]=-r;

b[n]=1+2*r;

if(k==1)

{f[1]=exp(h)+r*exp(t);f[n]=exp(n*h)+r*exp((n+1)*h+t);

}else

{f[1]=u[1]+r*exp(k*t);f[n]=u[n]+r*exp((n+1)*h+k*t);

}

for(i=2;i

{b[i]=1+2*r;a[i]=-r;c[i]=-r;

if(k==1)f[i]=exp(i*h);elsef[i]=u[i];

}

catchup();

printf("第%d层结果时间节点Tk=%lf\n",k,k*t);doubleT=0;

//doubletem=0;

for(i=1;i<=n;i++){

x[i]=exp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动物植物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1