logo资料库

偏微分方程数值解实验报告.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
偏微分方程数值解实验报告一 实验题目: 求解  )1,0(  u  u  ' ,5 tu  1)0(  (1)用 Euler 法和改进的 Euler 法求解,其中步长 h=0.1,0.05,0.01 (2)用三阶 Adams 外插法及内插法求解,步长 h=0.1,0.05,0.01 预备知识: 1.Euler 法的迭代格式及其误差分析。 2.预估-校正算法,改进的 Euler 法迭代格式及其误差分析。 3.差分与等距节点插值,Adams 外插法格式及误差估计。 4.高精度的单步法格式,Adams 内插法格式及其误差估计。 实验过程分析: 1.本次实验代码用 c++语言编写,编译器为 VC++6.0. Euler 法最简单的数值积分法, 数值格式也很简单。在将数学语言转化为计算机语言时,可以直接转化,无需作其他计算或 转换。在程序代码中,其数值格式用 C++代码表示为 u[j]=u[j-1]+h*(-5)*u[j-1]; 在编写程序时,先输入步长 h 的值,针对 h 将区间(0,1)等分成 N=1/h 份。然后计算 u 在这 些节点上的近似值 iu 。经计算可以得出微分方程满足边值条件的解为 )( tu 5 te  。计算真解 在节点上的值 )( itu 。输出时,只是输出 及数值解误差 - .对其优良性进行分析。 按照书本上的分析,Euler 法的局部截断误差为 ( 2hO ) 阶,故其全局误差为 )(hO 阶。因此 可以预期它的逼近效果不会很理想。 2.进行改进的 Euler 法格式实验时,由于右端项只与 u 有关,t 没有显式出现,故进行迭 代时,可以将右端的 1iu 移项到左边,合并后再进行迭代。但为了与书本同步,使用了书本 上介绍的预估-校正算法。虽然经计算它们的结果是一样的,但这个算法更具有一般性。预 估-校正格式如下: u[j]=u[j-1]; //预测,让 u(i+1)=u(i) for(k=0;k<150;k++) u[j]=u[j-1]+h/2*((-5)*u[j-1]+(-5)*u[j]); //校正 式中将校正进行了 150 次。得出的结果比较理想。改进的 Euler 法较 Euler 法复杂些,因此 其误差也会更小。全局误差达 ( 2hO ) 阶。实验输出同上,只是输出 及数值解误差 - . 对其优良性进行分析。 3.Adams 外插法比较复杂,用到的知识比较多。不过由于右端项比较特殊,可以将数值格 式化为很简单的格式。由于外插法的局部阶段误差为 2khO ( ) 阶,故其全局误差为 1khO ( )
阶。按照题目的精度要求,本次实验选取 k=2.这时全局误差为 3 阶。在进行 的计算时, u 需用到用到前面 , 1,  i u i  2 的值。而题目中只是给出一个初值 0u 。至少还需要 1,uu 的值 2 为已知,数值格式才可以进行。在这里用了后面介绍的高精度单步法。精度也选为 3 阶,故 单 步 格 式 中 q 取 为 3 。 由 于 右 端 项 只 与 u 有 关 , 故 f 的 二 阶 导 数 要 算 出 也 不 算 难 。 f '  25 , fu ''  125 u 。代入化简后,格式如下: u[1]=u[0]+h*(1.0-5.0/2.0*h+25.0/6.0*h*h)*(-5)*u[0]; u[2]=u[1]+h*(1.0-5.0/2.0*h+25.0/6.0*h*h)*(-5)*u[1]; 在数值格式右端项中,用到了差分与等距节点插值的相关知识。系数 a[i]可以预先计算出 来。由于 k=2,故只需知道 a[0]-a[2]的值,经计算分别为 1, 1 2 , 5 12 .而 f 的差分最高为二 阶。算出来也很简便。将书本数值格式中的 a[j], j f   jn 算出来后,进行化简。最终得出 以下结果: u[i+1]=u[i]+h*(23.0/12.0*(-5.0)*u[i]-4.0/3.0*(-5.0)*u[i-1]+5.0/12.0*(-5.0)*u[i- 2]); 上式并未进行最简单的化简。但结果无异。实验输出同上。总的来说,Adams 外插法的精度 还是比较高的。且 k 愈大,精度越高。 4.Adams 内插法较外插法要复杂。不过由于右端项 f 只与 u 有关,故进行计算时,同样可 以先进行移项合并,再进行数值格式计算。但是在这里同样用了预估-校正方式。而在实际 计算中,两者结果无异,不过后者更具有代表性。根据内插法的局部截断误差为 3khO ( ) , 故其全局误差为 2khO ( ) 阶。令 k+2=3,得 k=1.在进行 的计算时,由于右端含有 项, 故还需要 , i uu 1 i 为已知的。由于只给出 一个初值 0u ,故至少还需知道 1u 的值,和外插法 一样,用高精度的单步法求出 ,误差为 3 阶,取 q=3.在右端的计算中,a[i]和上面的有 所不同,经计算分别为 1, 主要用到的格式如下:  1, 1  2 12 。而 的计算和上面一样。将它们代入,化简后, u[1]=u[0]+h*(1.0-5.0/2.0*h+25.0/6.0*h*h)*(-5)*u[0]; //单步法求 //预测,让迭代格式右端中的 u(i+1)=u(i) u[i+1]=u[i]+h*(5.0/12.0*(-5)*u[i]+2.0/3.0*(-5)*u[i]-1.0/12.0*(-5)*u[i-1]); for(int r=0;r<1000;r++)//校正 1000 次 u[i+1]=u[i]+h*(5.0/12.0*(-5)*u[i+1]+2.0/3.0*(-5)*u[i]-1.0/12.0*(-5)*u[i-1]); 上式中,校正进行 1000 次,以保证足够的精度。根据书本的总结,内插法的 a[j]要比外插 法的小,又是隐式,故其精度要比外插法的要高。同样用真解 在节点 ix 上的值与 数值解 iu 进行比较,分析结果误差及该格式的优良性。
实验结果,误差分析及总结: 下面逐一对上述四种数值格式进行结果以及误差分析。并对它们进行比较。再进行实验 总结。一下所有的输出结果中,第一列为数值解,第二列为数值解与真实解之间的误差。 1.对于欧拉法,由于其算法简单,故其误差也相对比较大。根据分析,其全局误差为 )(hO 阶。而下面的结果当 h=0.1 时,精度刚好为 1 阶: 下面分别是 h=0.05,h=0.01 时的结果输出: (h=0.05 时的结果,与 h 同阶) 从输出结果可以看出,该算法的全局误差都为 )(hO 阶。与理论结果一致。随着 h 的减小, (h=0.01 时的结果) 误差也相应减小。当然这是建立在误差阶为 的基础上的。
2.下面分别是改进的 Euler 法在 h=0.1,0.05.0.01 时的结果截图: (h=0.1) (h=0.05) (h=0.01,其中 e-006 表示 610  ) 经分析,改进的 Euler 法的全局误差为 ( 2hO ) 阶。而上面的结果则很好的符合了这个理论。 而 h 越小,则误差越小。且其误差比 Euler 法要好很多。这个也和理论相符。 3.下面分别是 Adams 外插法在 h=0.1,0.05,0.01 时的输出结果: (h=0.1)
(h=0.05) (h=0.01) 根据题目要求,全局误差要为 3 阶,应该选取 k=2.而当 h=0.1 及 0.01 时,出现部分结果的 误差为两阶。与理论结果不太符合。而 h 越小,则误差越小这个理论还是符合的。说明这个 数值格式不是很尽人意。而由于 u(2)和 u(3)是通过高精度的单步法求出来的,它们的误差 则无论 h 取何值,误差均为 3 阶,这个符合要求。说明了单步法还是比较准确的。 4.下面分别是 Adams 内插法在 h=0.1,0.05,0.01 时的输出结果: (h=0.1) (h=0.05)
内插法的误差要求同样为 3 阶,因此取 k=1。从结果看来,误差都符合要求。而且大部分都 去到了 4 阶,甚至更高。其中 u(2)是用高精度的单步法求出来的,它也达到了 3 阶的误 差要求。这也说明了高精度的单步法在这个初值问题中,是比较稳定的。 (h=0.01) 综合上述四个数值格式,发觉它们基本上涵盖了第一单元的主要数值格式。除了待定系 数法外,就连后面的单步法,也包括进去了。通过这次实验,对第一单元的主要内容进行了 一次复习以及总结。当然,限于知识水平,无法用实验的方法测试它们的稳定性,收敛性等 等。在这里仅是对误差大小进行分析。而就本题目来说,Euler 法,改进的 Euler 法以及 Adams 内插法都能满足精度要求。而 Adams 外插法则比要求少了一阶,这个是在完全符合书上的 理论要求的情况下进行的。而且在进行了很多次修改,用单步法给出的附加初值同样为 3 阶的情况下,确保迭代格式没有错误的情况下,结果还是一样。当然,如果附加初值采取更 高精度的单步法来球的话,可能后面的误差会控制的很好,但是这不符合题目要求,也没什 么意义。于是实验就此结束,不再做深入探究了。在实验过程中,发觉了一些值得注意的地 方,例如在改进的 Euler 法和 Adams 内插法中,应该用书上介绍的预估-校正法,这个更具 一般性,而且又可以验证它的可行性。在计算 a[i]时,应该特别留意外插法和内插法是不同 的,虽然看起来形式一样,等等。
分享到:
收藏