计物
割圆术:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <stdio.h> #include <math.h>
int main(void) { double h; int i = 6; double l = 1; double r = 1; int n; scanf("%d", &n);
for (int k = 0; k < n; k++) { x = l * 0.5; h = sqrt(r * r - x * x); S = i * x * h; l = sqrt((r - h) * (r - h) + x * x); i *= 2; }
return 0; }
|
问题:
相差太小,两个数相减,有效数字丢失。
解决:
当
时,
AI 代码校核
手写代码的主要问题:
x 和 S 未声明,代码无法通过编译;应声明为 double x, S;。
- 计算出
S 后没有输出;若要观察圆周率近似值,应在循环中或循环后使用 printf。
- 原更新式中的
r - h 会在
时发生相消,正是板书指出的数值不稳定处。
- 对本页的
,可将边长更新改为
l = sqrt(2 * x * x / (1 + h));。若保留一般半径
,稳定的等价式是 l = sqrt(2 * r * x * x / (r + h));。
i 实际表示正多边形边数,改名为 sides 会更清楚;若迭代很多次,int 还可能溢出。
插值问题
Lagrange 插值法。
高次多项式插值
共
个不同点。
若
使
则
是
的插值多项式。
存在性与唯一性:
方程组有唯一解,因为 Vandermonde 行列式
[G: 补充展开式和证明]
G 补充
记该行列式为
。把它看成关于
的多项式:当
(
)时,末行与第
行相同,所以行列式为零。因此它含有全部因子
关于
的最高次项系数是前
行构成的 Vandermonde 行列式
,故
递推并使用
,得到
各节点互异,所以每个因子都非零,线性方程组因而有唯一解。
相互独立,构成一组完备基。
[G: 是正交基吗,证明?]
G 补充
它是多项式空间
的一组基,但没有指定内积时不能称为“正交基”。线性无关可这样证明:若
零多项式的每个系数都必须为零,因此
。同时任意次数不超过
的多项式都能由这些单项式线性表示,所以它们张成
。

线性插值
于是
抛物线插值
三点不共线,总有一条抛物线经过。
是二次多项式,且
故可设
由
,
同理,
多项式插值
缺点:无递推性;增加节点,需要全部重新计算。
Newton 插值法
差商:
[G: 差商性质]
G 补充
差商具有以下常用性质:
- 对节点对称,交换
的次序不改变
。
- 对函数具有线性:
。
- 若
是次数低于
的多项式,则
阶差商为
;若次数恰为
,则
阶差商等于最高次项系数。
- 若
,则存在节点区间内的
,使
Newton 插值。
线性:
由于插值的唯一性,
与
是同一个多项式,只是形式不同。
二次:
由
,
例题:
,
。