Python 代码,多项式拟合 二项式 coefficients[2]*x1*x1++coefficients[1]*x1+coefficients[0]
import numpy as np def fit_polynomial(x, y, degree): n = len(x) # 创建一个系数向量,初始化为0 coefficients = [0.0] * (degree + 1) # 创建矩阵 A 和向量 B,用于最小二乘法 A = np.zeros((degree + 1, degree + 1)) B = np.zeros(degree + 1) # 填充 A 和 B for i in range(n): for j in range(degree + 1): for k in range(degree + 1): A[j][k] += x[i] ** (j + k) B[j] += y[i] * x[i] ** j # 使用高斯消元法求解线性方程组 for i in range(degree + 1): for j in range(i + 1, degree + 1): factor = A[j][i] / A[i][i] for k in range(i, degree + 1): A[j][k] -= factor * A[i][k] B[j] -= factor * B[i] # 回代求解系数 for i in range(degree, -1, -1): coefficients[i] = B[i] for j in range(i + 1, degree + 1): coefficients[i] -= A[i][j] * coefficients[j] coefficients[i] /= A[i][i] return coefficients
C++代码 多项式拟合
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <numeric>
#include <tuple>
// 多次函数拟合函数
std::vector<double> fitPolynomial(std::vector<double>& x, std::vector<double>& y, int degree) {
int n = x.size();
// 创建一个系数向量,初始化为0
std::vector<double> coefficients(degree + 1, 0.0);
// 创建矩阵 A 和向量 B,用于最小二乘法
std::vector<std::vector<double>> A(degree + 1, std::vector<double>(degree + 1, 0.0));
std::vector<double> B(degree + 1, 0.0);
// 填充 A 和 B
for (int i = 0; i < n; i++) {
for (int j = 0; j <= degree; j++) {
for (int k = 0; k <= degree; k++) {
A[j][k] += std::pow(x[i], j + k);
}
B[j] += y[i] * std::pow(x[i], j);
}
}
// 使用高斯消元法求解线性方程组
for (int i = 0; i <= degree; i++) {
for (int j = i + 1; j <= degree; j++) {
double factor = A[j][i] / A[i][i];
for (int k = i; k <= degree; k++) {
A[j][k] -= factor * A[i][k];
}
B[j] -= factor * B[i];
}
}
// 回代求解系数
for (int i = degree; i >= 0; i--) {
coefficients[i] = B[i];
for (int j = i + 1; j <= degree; j++) {
coefficients[i] -= A[i][j] * coefficients[j];
}
coefficients[i] /= A[i][i];
}
return coefficients;
}