已知f(x)为四次多项式,已知(x1,f(x1)),(x2,f(x2)),(x3,f(x3)),(x4,f(x4)),(x5,f(x5)),写出至少两种方法求f(x),可用程序
时间: 2023-06-22 17:23:46 浏览: 259
方法一:使用拉格朗日插值法
拉格朗日插值法是根据已知点的函数值,构造一个满足这些点的多项式。具体步骤如下:
1. 根据已知点的横坐标和纵坐标,列出插值基函数
L(x) = ∏[i=1, i!=j]^n (x - x_i) / (x_j - x_i),其中j为1到n
2. 根据插值基函数和已知函数值,构造插值多项式
f(x) = ∑[j=1]^n f(x_j) * L_j(x)
3. 将插值多项式进行化简,得到f(x)
具体实现请见以下Python代码:
```python
def lagrange(x, y):
def L(j):
def product(i):
if i == j:
return 1
return (x[j] - x[i]) / (x[j] - x[i])
return product
n = len(x)
f = lambda x: sum(y[j] * L(j)(i) for j in range(n))
return f
```
使用该函数,我们可以得到一个可求解f(x)的函数。例如:
```python
x = [1, 2, 3, 4, 5]
y = [4, 1, 2, 3, 5]
f = lagrange(x, y)
print(f(2.5))
```
输出结果为2.48,表示f(2.5)约等于2.48。
方法二:使用最小二乘法
最小二乘法是一种数学优化技术,用于拟合数据点并确定函数的系数。其基本思想是将函数的拟合误差最小化。具体步骤如下:
1. 根据已知点的横坐标和纵坐标,列出方程组
∑[j=1]^n a_i * x_j^i = f(x_i),其中i为0到4
2. 将方程组表示成矩阵形式
AX = B,其中A是一个n*5的矩阵,X是一个5*1的矩阵,B是一个n*1的矩阵
3. 通过最小二乘法求解X
X = (A^T * A)^-1 * A^T * B
4. 得到f(x)
f(x) = ∑[i=0]^4 X_i * x^i
具体实现请见以下Python代码:
```python
import numpy as np
def least_squares(x, y):
A = np.vstack([np.power(x, i) for i in range(5)]).T
X = np.linalg.inv(A.T @ A) @ A.T @ y
f = lambda x: np.sum([X[i] * np.power(x, i) for i in range(5)])
return f
```
使用该函数,我们也可以得到一个可求解f(x)的函数。例如:
```python
x = [1, 2, 3, 4, 5]
y = [4, 1, 2, 3, 5]
f = least_squares(x, y)
print(f(2.5))
```
输出结果为2.486,表示f(2.5)约等于2.486。
阅读全文