数值分析作业 - 插值
数值分析Problem 1
![](https://cdn.duanyll.com/img/20230428221906.png)
Lagrange 插值:
Newton 插值:
插值的结果是相同的.
Problem 2
![](https://cdn.duanyll.com/img/20230429214611.png)
Problem 3
![](https://cdn.duanyll.com/img/20230429215111.png)
Problem 4
![](https://cdn.duanyll.com/img/20230429221039.png)
下面的 Mathematica 程序给定插值点和函数值, 计算 Newton 差商矩阵的第一行
1 | newtonCoeffcient[xi_?ListQ, fi_?ListQ] := Module[{a, n, c}, ( |
先使用 Mathematica 内置的 InterpolatingPolynomial
计算插值多项式
1 | xi = {0, \[Pi]/6, \[Pi]/3, \[Pi]/4, \[Pi]/2}; |
再使用 Newton 法计算
1 | cNewton = newtonCoeffcient[xi, fi] // Simplify; |
1 | pNewton = newtonValue[xi, cNewton, x] // Expand; |
得到的结果与内置函数完全一致.
将给定点直接代入插值函数求近似值, 在
1 | x = N[{1, 2, 3, 4, 14, 1000}]; |
利用三角函数的周期性
1 | pSin[x_] := Piecewise[{ |
得到的结果是合理的
绝对误差
1 | Map[pSin, x] - Sin[x] // TeXForm |
可以注意到绝对误差均在小数点后三位.
1 | Plot[pSin[x] - Sin[x], {x, 0, \[Pi]/2}] |
![](https://cdn.duanyll.com/img/20230429233933.png)
Problem 5
![](https://cdn.duanyll.com/img/20230429232822.png)
定义一些辅助的变量和函数
1 | uniformSample[a_, b_, n_] := Range[a, b, (b - a)/(n - 1)]; |
取
1 | Clear[x]; |
![](https://cdn.duanyll.com/img/20230430105051.png)
注意到, 在中间的
Problem 6
![](https://cdn.duanyll.com/img/20230430105911.png)
实现三次自然样条插值
1 | splineCoefficient[xi_?ListQ, fi_?ListQ] := |
并绘制图形
1 | GraphicsGrid[ParallelMap[Module[{xi, data}, |
![](https://cdn.duanyll.com/img/20230430144824.png)
可以注意到样条法不会发生端点附近剧烈震荡的情况, 误差也要小于高次插值, 但是参数量较大.