分段高次多项式插值代码
时间: 2023-10-09 22:09:14 浏览: 106
三次多项式插值 C 代码
以下是使用 Lagrange 插值法进行高次多项式插值的代码实现:
```python
from typing import List, Tuple
def lagrange_interpolation(x: List[float], y: List[float]) -> Tuple[float]:
"""
高次多项式插值,使用拉格朗日插值法
:param x: 插值节点 x 坐标列表
:param y: 插值节点 y 坐标列表
:return: 插值函数的系数
"""
n = len(x)
c = [0] * n
for k in range(n):
c[k] = y[k]
for j in range(n):
if j != k:
c[k] = c[k] / (x[k] - x[j])
return tuple(c)
def poly_interpolation(x: List[float], y: List[float]) -> str:
"""
高次多项式插值,返回插值函数的字符串表达式
:param x: 插值节点 x 坐标列表
:param y: 插值节点 y 坐标列表
:return: 插值函数的字符串表达式
"""
c = lagrange_interpolation(x, y)
n = len(c)
poly = []
for k in range(n):
if c[k] != 0:
if k == 0:
poly.append("{:.6f}".format(c[k]))
else:
poly.append("{:+.6f}".format(c[k]))
for j in range(k):
poly[-1] += "*(x-{:.6f})".format(x[j])
return "".join(poly)
```
其中,`lagrange_interpolation` 函数通过拉格朗日插值法求出插值函数的系数,`poly_interpolation` 函数则将系数转换为字符串表达式。函数使用示例如下:
```python
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
poly = poly_interpolation(x, y)
print(poly) # 输出:+0.000000+1.000000*(x-0.000000)+0.000000*(x-0.000000)*(x-1.000000)+-0.000000*(x-0.000000)*(x-1.000000)*(x-2.000000)+0.000000*(x-0.000000)*(x-1.000000)*(x-2.000000)*(x-3.000000)
```
上述代码实现了对点集 $(0,0),(1,1),(2,4),(3,9),(4,16)$ 的高次多项式插值,并返回了插值函数的字符串表达式。
阅读全文