跳转到内容

BASIC 编程/规范 BASIC/最小 BASIC

来自维基教科书,开放世界中的开放书籍

示例程序

[编辑 | 编辑源代码]

最小 BASIC 的示例程序将出现在这里。

数值积分

[编辑 | 编辑源代码]

存在两种情况,需要用数值方法计算定积分的值。其中一个是计算由一组实验数据定义的曲线下的面积,另一个是计算已知数学函数的定积分,但没有已知的积分。前者通常是科学和工程实验工作中的响应函数的情况,而后者通常是物理、数学和工程实际研究的情况。

独立于此,用于积分目的的数值方法的开发(属于应用数学部门的领域)是基于它所产生的简单想法,即如果 的实值(复值情况可以通过将其分离为实部和虚部来类似地处理)连续函数,定义在区间 中,它的定积分,

,

可以近似地计算为在区间 中的某些给定点上计算的乘积 的有限和。

在实验数据的情况下,测量函数值的点集通常不是规律分布的(即,点不是等间隔的),因此必须以以下形式计算定积分的值

,

可以近似地计算为

,

或者

.

在第一种情况下,对于单调递增(递减)函数,积分值被低估(高估),因为在每次评估中取的 在每个子区间内总是最低(最高),因此构成了积分值的绝对下界(上界),而在第二种情况下,对于单调递减(递增)函数,积分值被高估(低估),因为在每次评估中取的 在每个子区间内总是最高(最低),因此构成了积分值的绝对上界(下界)。

根据微积分中的中值定理,定积分的值也可以计算为

,

对于 中的某个值 ,其中 代表 中的平均值,因此,将一组实验数据的定积分计算为

,

,

.

由于一些我们将在后面看到的理由,这等效于假设在不同点之间有一个分段线性插值函数,并且如此计算出的积分值对于线性函数是精确的(即,斜率以恒定速率变化的函数),尽管对于斜率以非恒定速率增长的函数(即,它的二阶导数在所考虑的区间内严格为正),它被低估了,并且对于斜率以非恒定速率减小的函数(即,它的二阶导数在所考虑的区间内严格为负),它被高估了。如此计算出的值构成比之前提出的上下界更好的近似值,并且在函数的二阶导数(可以通过二阶差分或中心差分从实验数据中计算得到)在子区间之间改变符号的情况下,由于近似平均值的误差抵消,该值预计接近实际值。

对于数学函数,我们拥有更多关于函数的信息,因为不仅可以计算函数在任何给定点的值,还可以计算一阶、二阶和更高阶导数,且具有任意精度。

让我们详细阐述一些数学结果,从简单到更复杂的方法。

数值方法开发的主要主题,以及稳定性研究(即,如果一个方法收敛),是方法的收敛速度,它研究需要多少次评估以及近似误差(对于非迭代方法),或者需要多少次迭代以及误差在每次迭代中如何最小化(对于迭代方法)。

在稳定性研究中,正如我们之前看到的,函数在区间内定义的定积分的值,

,

可以近似地计算为在区间 中的某些给定点上计算的乘积 的有限和。

在极限 中,有限和趋于无穷积分,因此收敛性得到保证。

在收敛速度研究中,我们感兴趣的是提高近似值的精度,同时保持子区间的数量,并且计算复杂度的增加很小。

通常使用的方法是在每个子区间内使用函数 的值进行多项式近似,使用子区间内几个点的函数值提供的信息。

让我们考虑等间距点的例子(尽管这个限制很容易解除)

根据定义,

,

其中 表示子区间, 是每个子区间 中的任意数,其中 ,以及 ,并且 ,其中 ,以及 .

微积分中值定理告诉我们,如果

如果 上的定积分,则在 中存在一个值 ,使得

.

此外,根据定义,如果

上的定积分,那么它也可以理解为由以下各个部分的贡献组成:

其中 是任意值。

现在,对每个部分应用均值定理,得到结果

,

这个结果是精确的。

在每个子区间大小相等的情况下,即 ,则表达式简化为

.

这样,求初始定积分就简化为求平均值

.

在第一次近似中,只有一个点,

,

其中 在每个子区间中的中间值,从而得到

.

在第二种近似中,只有两个点,

,

其中 是每个子区间的开头和结尾处的 值,这会导致

.

在第三种近似中,只有三个点,

,

其中 分别是每个子区间的开始、中间和结束处的 的值,这将导致

.

在第四个近似中,虽然仍然使用函数 在每个子区间的开始、中间和结束处进行评估,但可以使用以下结果:如果 是对 的估计,那么它们的算术平均数 也是另一个估计,至少具有相同的精度,甚至可能更好。

因此,将第一个和第二个近似结果加起来,然后除以 2,

,

这导致了以下结果

.

将第一个和第三个近似结果加起来,然后除以 2,

,

这导致了以下结果

.

在实践中,如果只在一个区间内进行三次评估,就不能做得更好,但即使在一个区间内,获得的结果也足够简单和准确。

让我们通过一个例子来说明这种情况。

假设我们想要计算函数 在区间 的定积分,我们知道它的精确值是 .

为了保持问题的简单性,我们只用一个区间进行计算,即 .

因此,我们有

第一次近似

这等于相对误差为

.

第二次近似

这等于相对误差为

.

第三次近似

这等于相对误差为

.

第四次近似,第一项和第二项(线性展开)

这等于相对误差为

.

第四次近似,第一项和第三项(二次展开)

这等于相对误差为

.

如果需要更高的精度,可以类似地引入 附近的展开式中的高阶项,或者在之前考虑的其中一种方法中将积分步长减半。

让我们考虑在展开式中考虑高阶项的情况,即:

,

这导致了以下结果

.

让我们通过一个例子来说明这种情况。

假设我们想要计算函数 在区间 的定积分,我们知道它的精确值是 .

为了简化问题,我们用两个区间进行计算,即 , , , 以及 .

应用二阶展开

,

得到

,

这相当于相对误差为

.

应用四阶展开

,

得到

.

我们从差分学知道,任何函数都可以表示为多项式展开

在正向差分的情况下,或者

在反向差分的情况下,或者

在中心差分的情况下。

在第一近似中,

在向前差分的情况下,

在后向差分的情况下,

在中心差分的情况下。

因此,在用单个点对积分进行估算的情况下,如果函数在估算点的斜率值是正的,则使用前向(后向)差分,积分值总是被低估(高估);如果函数在估算点的斜率值是负的,则使用前向(后向)差分,积分值总是被低估(高估)。估算误差与函数在估算点的斜率值成正比,并与积分步长的平方的一半成正比。在使用中心差分对积分进行估算的情况下,对于线性函数,积分值是精确的。

在第二阶近似中,

在向前差分的情况下,