偏微分方程算法之向前欧拉法(Forward Euler) |
您所在的位置:网站首页 › 二维热传导方程数值解法 › 偏微分方程算法之向前欧拉法(Forward Euler) |
目录 一、研究对象 二、理论推导 2.1 网格剖分 2.2 建立离散方程 2.3 建立差分格式 2.4 求解差分格式 三、算例实现 一、研究对象以一维(空间维度)非齐次热传导方程的定解问题研究抛物型方程的差分方法为研究对象(热传导方程描述的是存在热源的一个区域内,与周围介质存在热交换的物体内部温度的分布及温度如何随时间变化)。 研究对象为抛物型方程初边值问题: 其中,a>0为常数。 二、理论推导类比常微分方程差分法求解,公式(1)的差分法可以通过多步实现: 2.1 网格剖分 对二维求解区域 在剖分好的网格节点上建立离散方程。本质上是将求解域内的微分方程弱化为节点上的离散方程,即: 由一阶向前差商公式: 得到关于时间的一阶偏导数的向前差商形式: 由二阶偏导数的二阶中心差商公式: 得到关于空间的二阶偏导数的中心差商公式: 将关于时间的一阶偏导数的差商形式公式、关于空间的二阶偏导数的中心差商公式代入公式(2),可得: 其中,C为常数,满足 向前欧拉格式的截断误差为 其中 公式(5)显示第k+1个时间层 意味着可以通过第0层上的初始信息 可将公式(5)改写为矩阵形式,即: 使用向前欧拉法计算抛物型方程初边值问题: 已知精确解为 代码如下: #include #include #include int main(int argc, char *argv[]) { int n,m,i,j,k,number; double a,h,tau,r; double *x,*t,**u; double phi(double x); double alpha(double t); double beta(double t); double f(double x, double t); double exact(double x, double t); n=100; //时间域n等分 m=5; //空间域m等分 a=1.0; h=1.0/m; //空间步长 tau=1.0/n; //时间步长 r=a*tau/(h*h); //网比 printf("r=%.4f.\n",r); x=(double*)malloc(sizeof(double)*(m+1)); for(i=0;i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |