English · PDF 859
保守起见,将估计的步长向下取整为,比如说,0.005,我们本应得到 $X(1) = 3.23043$ ,其误差仅为 0.9%,本可以满足所需的精度准则。
既然我们在例 10.22 中提到了使用计算机来进行微分方程数值解中涉及的重复计算,那么也值得简要评论一下编写计算机程序来实现这些数值求解方法的问题。虽然完全可以编写非正式的、无结构的程序来实现诸如欧拉方法之类的算法,但稍加注意程序的良好规划和结构通常会得到丰厚的回报——特别是从降低引入“错误”的概率的角度来看。仔细构造结构的另一个原因是,通过这种方式,程序的某些部分往往可以用相当通用的方式编写,并且以后可以复用于其他问题。图 10.12 和图 10.13 中的两个伪代码算法都会产生例 10.21 中的结果表。图 10.12 的伪代码程序非常针对所提出的问题,而图 10.13 的伪代码程序则更通用、结构更好,并且更能表达数学问题的结构。通常来说,以图 10.13 的风格为目标会更好。

MATLAB 包含一种过程式编程语言,具备此类语言的所有基本结构。图 10.12 和图 10.13 中的伪代码算法可以在 MATLAB 中实现为程序。但是,当该语言的标准过程中已经封装了复杂得多的数值算法时,这样做就显得不合情理了。尽管如此,该软件仍可以用作编程环境,用于实现简单的程序来完成练习 10.6.4 中的第 43–45 题。
x1←1
x2←1
write(printer,0,1,1,1)
for i is 1 to 10 do
x1←x1 + 0.1*x1*x1/((i − 1)*0.1 + 1)
x2←x2 + 0.05*x2*x2/((i − 1)*0.1 + 1)
x2←x2 + 0.05*x2*x2/((i − 1)*0.1 + 1.05)
x←1/(1 − ln(i*0.1 + 1))
write(printer,0.1*i,x1,x2,x,x − x1,x − x2,(x − x2)/(x − x1))
endfor
图 10.12
用于例 10.21 的一个结构不佳的算法。