【Python数值分析】革命:引领【数学建模】新时代的插值与拟合前沿技术
目录
编辑
第一部分:插值的基本原理及应用
1. 插值的基本原理
1.1 插值多项式
1.2 拉格朗日插值
1.3 牛顿插值
1.4 样条插值
2. 插值的Python实现
2.1 使用 NumPy 进行插值
2.2 使用 SciPy 进行插值
2.2.1 一维插值
编辑
2.2.2 二维插值
3. 插值的应用场景
3.1 数据平滑和填补
3.2 图像处理
编辑
3.3 数值模拟
4. 实例分析
实例1:空气质量数据的校准
编辑
实例2:波浪能最大输出功率设计
第二部分:拟合的基本原理及应用
1. 拟合的基本原理
1.1 线性拟合
1.2 多项式拟合
1.3 指数拟合
编辑
1.4 对数拟合
编辑
1.5 幂函数拟合
2. 拟合的Python实现
2.1 使用 SciPy 进行拟合
2.1.1 线性拟合
2.1.2 多项式拟合
2.1.3 指数拟合
2.1.4 对数拟合
2.1.5 幂函数拟合
3. 拟合的应用场景
3.1 数据预测
3.2 数据建模
3.3 物理实验数据分析
3.4 工程设计
4. 实例分析
实例1:股票价格预测
实例2:温度变化分析
总结

专栏:数学建模学习笔记
第一部分:插值的基本原理及应用
1. 插值的基本原理
插值是一种在已知数据点之间估算函数值的方法。它在数据分析、信号处理和数值分析中具有广泛应用。插值的目标是通过构造一个插值函数,使该函数在给定的数据点处具有精确的函数值。
1.1 插值多项式

1.2 拉格朗日插值

import numpy as np
import matplotlib.pyplot as plt# 拉格朗日基函数
def lagrange_basis(x, x_values, j):basis = 1for i in range(len(x_values)):if i != j:basis *= (x - x_values[i]) / (x_values[j] - x_values[i])return basis# 拉格朗日插值多项式
def lagrange_interpolation(x, x_values, y_values):interpolation = 0for j in range(len(y_values)):interpolation += y_values[j] * lagrange_basis(x, x_values, j)return interpolation# 数据点
x_values = np.array([0, 1, 2, 3, 4, 5])
y_values = np.array([1, 3, 2, 5, 7, 8])# 插值点
x_interp = np.linspace(0, 5, 100)
y_interp = [lagrange_interpolation(x, x_values, y_values) for x in x_interp]# 绘图
plt.plot(x_values, y_values, 'o', label='Data points')
plt.plot(x_interp, y_interp, '-', label='Lagrange Interpolation')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.show()

1.3 牛顿插值

import numpy as np
import matplotlib.pyplot as plt# 计算差分商
def divided_diff(x_values, y_values):n = len(x_values)coef = np.zeros([n, n])coef[:,0] = y_valuesfor j in range(1,n):for i in range(n-j):coef[i][j] = (coef[i+1][j-1] - coef[i][j-1]) / (x_values[i+j] - x_values[i])return coef[0,:]# 牛顿插值多项式
def newton_interpolation(x, x_values, coef):n = len(x_values) - 1 p = coef[n]for k in range(1,n+1):p = coef[n-k] + (x -x_values[n-k])*preturn p# 数据点
x_values = np.array([0, 1, 2, 3, 4, 5])
y_values = np.array([1, 3, 2, 5, 7, 8])# 计算差分商系数
coef = divided_diff(x_values, y_values)# 插值点
x_interp = np.linspace(0, 5, 100)
y_interp = [newton_interpolation(x, x_values, coef) for x in x_interp]# 绘图
plt.plot(x_values, y_values, 'o', label='Data points')
plt.plot(x_interp, y_interp, '-', label='Newton Interpolation')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.show()

1.4 样条插值
样条插值是一种分段插值方法。常见的样条插值包括线性样条和三次样条。三次样条插值具有良好的光滑性和逼近性能,是一种常用的插值方法。
三次样条插值代码示例:
import numpy as np
from scipy.interpolate import CubicSpline
import matplotlib.pyplot as plt# 数据点
x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([1, 3, 2, 5, 7, 8])# 创建三次样条插值对象
cs = CubicSpline(x, y)# 插值点
x_interp = np.linspace(0, 5, 100)
y_interp = cs(x_interp)# 绘图
plt.plot(x, y, 'o', label='Data points')
plt.plot(x_interp, y_interp, '-', label='Cubic Spline Interpolation')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.show()

2. 插值的Python实现
Python 提供了丰富的库来实现插值方法,主要包括 NumPy 和 SciPy 库。
2.1 使用 NumPy 进行插值
NumPy 提供了一些基本的插值函数,例如 numpy.interp 可以进行一维线性插值。
import numpy as np
import matplotlib.pyplot as plt# 原始数据点
x = np.linspace(0, 10, 10)
y = np.sin(x)# 插值点
x_interp = np.linspace(0, 10, 100)
y_interp = np.interp(x_interp, x, y)# 绘图
plt.plot(x, y, 'o', label='Original data')
plt.plot(x_interp, y_interp, '-', label='Interpolated data')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

2.2 使用 SciPy 进行插值
SciPy 提供了更加全面的插值函数,例如 scipy.interpolate.interp1d 和 scipy.interpolate.CubicSpline。
2.2.1 一维插值
from scipy.interpolate import interp1d
import numpy as np
import matplotlib.pyplot as plt# 原始数据点
x = np.linspace(0, 10, 10)
y = np.sin(x)# 创建插值对象
linear_interp = interp1d(x, y, kind='linear')
cubic_interp = interp1d(x, y, kind='cubic')# 插值点
x_interp = np.linspace(0, 10, 100)
y_linear = linear_interp(x_interp)
y_cubic = cubic_interp(x_interp)# 绘图
plt.plot(x, y, 'o', label='Original data')
plt.plot(x_interp, y_linear, '-', label='Linear interpolation')
plt.plot(x_interp, y_cubic, '--', label='Cubic interpolation')
plt.legend()
plt.show()
2.2.2 二维插值
from scipy.interpolate import RectBivariateSpline
import numpy as np
import matplotlib.pyplot as plt# 原始数据点
x = np.linspace(0, 10, 10)
y = np.linspace(0, 10, 10)
z = np.sin(x[:, None] + y[None, :])# 创建插值对象
linear_interp = RectBivariateSpline(x, y, z, kx=1, ky=1)
cubic_interp = RectBivariateSpline(x, y, z, kx=3, ky=3)# 插值点
x_interp = np.linspace(0, 10, 100)
y_interp = np.linspace(0, 10, 100)
z_linear = linear_interp(x_interp, y_interp)
z_cubic = cubic_interp(x_interp, y_interp)# 绘图
plt.subplot(1, 2, 1)
plt.imshow(z_linear, extent=(0, 10, 0, 10), origin='lower', aspect='auto')
plt.title('Linear interpolation')plt.subplot(1, 2, 2)
plt.imshow(z_cubic, extent=(0, 10, 0, 10), origin='lower', aspect='auto')
plt.title('Cubic interpolation')plt.show()

3. 插值的应用场景
插值在许多实际问题中都有广泛的应用,例如:
3.1 数据平滑和填补
在处理实验数据时,可能会遇到一些缺失值或噪声数据。插值可以用于平滑数据和填补缺失值,使数据更加连贯。
import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt# 原始数据点,包含缺失值
x = np.array([0, 1, 2, 4, 5, 7, 8, 9])
y = np.array([3, 2, 7, 1, 8, 6, 2, 5])# 创建插值对象
f_linear = interp1d(x, y, kind='linear')# 插值点,包括原始数据点和缺失值
x_interp = np.arange(0, 10, 1)
y_interp = f_linear(x_interp)# 绘图
plt.plot(x, y, 'o', label='Original data')
plt.plot(x_interp, y_interp, '-', label='Interpolated data')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

3.2 图像处理
在图像处理领域,插值常用于图像的放大、缩小和旋转。例如,双线性插值和双三次插值是常用的图像插值方法。
import numpy as np
from scipy.ndimage import zoom
import matplotlib.pyplot as plt
from skimage import data# 加载示例图像
image = data.camera()# 使用双线性插值进行图像缩放
zoom_factor = 2
image_zoomed = zoom(image, zoom_factor, order=1) # order=1 表示双线性插值# 显示原始图像和缩放后的图像
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')plt.subplot(1, 2, 2)
plt.title('Zoomed Image')
plt.imshow(image_zoomed, cmap='gray')plt.show()
3.3 数值模拟
在数值模拟中,插值用于构造离散点之间的连续函数。例如,在有限元方法中,插值用于构造形函数。
import numpy as np
from scipy.interpolate import CubicSpline
import matplotlib.pyplot as plt# 离散点
x = np.linspace(0, 10, 10)
y = np.sin(x)# 创建三次样条插值对象
cs = CubicSpline(x, y)# 插值点
x_interp = np.linspace(0, 10, 100)
y_interp = cs(x_interp)# 绘图
plt.plot(x, y, 'o', label='Discrete points')
plt.plot(x_interp, y_interp, '-', label='Cubic Spline Interpolation')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

4. 实例分析
为了更好地理解插值方法,我们来看一个具体的实例分析。
实例1:空气质量数据的校准
在2019年的全国大学生数学建模竞赛中,赛题涉及到空气质量数据的校准问题,需要使用插值算法来处理不完整的数据。
import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt# 原始数据点
days = np.array([1, 2, 4, 7, 8, 10])
aqi = np.array([50, 55, 70, 65, 60, 75])# 创建插值对象
interp = interp1d(days, aqi, kind='cubic')# 插值点
days_interp = np.linspace(1, 10, 100)
aqi_interp = interp(days_interp)# 绘图
plt.plot(days, aqi, 'o', label='Original data')
plt.plot(days_interp, aqi_interp, '-', label='Interpolated data')
plt.xlabel('Days')
plt.ylabel('AQI')
plt.legend()
plt.show()
实例2:波浪能最大输出功率设计
在2022年的全国大学生数学建模竞赛中,赛题涉及到波浪能最大输出功率的设计问题,需要使用插值算法来优化设计参数。
import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt# 原始数据点
wave_heights = np.array([0.5, 1.0, 1.5, 2.0, 2.5, 3.0])
power_output = np.array([10, 20, 30, 40, 50, 60])# 创建插值对象
interp = interp1d(wave_heights, power_output, kind='cubic')# 插值点
wave_heights_interp = np.linspace(0.5, 3.0, 100)
power_output_interp = interp(wave_heights_interp)# 绘图
plt.plot(wave_heights, power_output, 'o', label='Original data')
plt.plot(wave_heights_interp, power_output_interp, '-', label='Interpolated data')
plt.xlabel('Wave Heights (m)')
plt.ylabel('Power Output (kW)')
plt.legend()
plt.show()
、
第二部分:拟合的基本原理及应用
1. 拟合的基本原理
拟合是一种通过选择适当的函数形式,使该函数尽可能逼近已知数据点的方法。拟合的目的是通过已有的数据点,预测或估计未知数据点的值。拟合方法包括线性拟合、多项式拟合、指数拟合、对数拟合等。
1.1 线性拟合
线性拟合假设数据点之间的关系是线性的,通过最小二乘法求解线性方程组,得到拟合直线。线性拟合的目标函数为:

from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 线性拟合函数
def linear_func(x, a, b):return a * x + b# 数据点
xdata = np.linspace(0, 10, 10)
ydata = 2.5 * xdata + 1.0 + np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(linear_func, xdata, ydata)
yfit = linear_func(xdata, *popt)# 绘图
plt.plot(xdata, ydata, 'o', label='Data')
plt.plot(xdata, yfit, '-', label='Linear Fit')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

1.2 多项式拟合
多项式拟合使用多项式函数来拟合数据点。多项式的阶数越高,拟合效果越好,但也容易出现过拟合现象。多项式拟合的目标函数为:
![]()
import numpy as np
import matplotlib.pyplot as plt# 数据点
xdata = np.linspace(0, 10, 10)
ydata = 2.5 * xdata**2 + 1.0 + np.random.normal(size=len(xdata))# 多项式拟合
p = np.polyfit(xdata, ydata, 2)
yfit = np.polyval(p, xdata)# 绘图
plt.plot(xdata, ydata, 'o', label='Data')
plt.plot(xdata, yfit, '-', label='Polynomial Fit')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

1.3 指数拟合
指数拟合假设数据点之间的关系是指数函数,通过对数变换和线性拟合相结合的方法进行求解。指数拟合的目标函数为:
![]()
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 指数拟合函数
def exponential_func(x, a, b):return a * np.exp(b * x)# 数据点
xdata = np.linspace(0, 4, 10)
ydata = 2.5 * np.exp(1.3 * xdata) + np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(exponential_func, xdata, ydata)
yfit = exponential_func(xdata, *popt)# 绘图
plt.plot(xdata, ydata, 'o', label='Data')
plt.plot(xdata, yfit, '-', label='Exponential Fit')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()
1.4 对数拟合
对数拟合假设数据点之间的关系是对数函数,通过非线性最小二乘法进行求解。对数拟合的目标函数为:
![]()
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 对数拟合函数
def logarithmic_func(x, a, b):return a * np.log(x) + b# 数据点
xdata = np.linspace(1, 10, 10)
ydata = 2.5 * np.log(xdata) + 1.0 + np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(logarithmic_func, xdata, ydata)
yfit = logarithmic_func(xdata, *popt)# 绘图
plt.plot(xdata, ydata, 'o', label='Data')
plt.plot(xdata, yfit, '-', label='Logarithmic Fit')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()
1.5 幂函数拟合
幂函数拟合假设数据点之间的关系是幂函数,通过对数变换和线性拟合相结合的方法进行求解。幂函数拟合的目标函数为:

from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 幂函数拟合函数
def power_func(x, a, b):return a * x**b# 数据点
xdata = np.linspace(1, 10, 10)
ydata = 2.5 * xdata**1.5 + np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(power_func, xdata, ydata)
yfit = power_func(xdata, *popt)# 绘图
plt.plot(xdata, ydata, 'o', label='Data')
plt.plot(xdata, yfit, '-', label='Power Fit')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

2. 拟合的Python实现
Python 提供了丰富的库来处理拟合问题,常用的库包括 SciPy 和 NumPy。
2.1 使用 SciPy 进行拟合
SciPy 提供了多种拟合函数,例如 scipy.optimize.curve_fit 可以进行非线性拟合。
2.1.1 线性拟合
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 线性拟合函数
def linear_func(x, a, b):return a * x + b# 数据点
xdata = np.linspace(0, 10, 50)
ydata = 2.5 * xdata + 1.0 + 0.5 * np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(linear_func, xdata, ydata)
yfit = linear_func(xdata, *popt)# 绘图
plt.plot(xdata, ydata, 'b-', label='Data')
plt.plot(xdata, yfit, 'r-', label='Fit: a=%.3f, b=%.3f' % tuple(popt))
plt.legend()
plt.show()

2.1.2 多项式拟合
import numpy as np
import matplotlib.pyplot as plt# 数据点
xdata = np.linspace(0, 10, 50)
ydata = 2.5 * xdata**2 + 1.0 + 0.5 * np.random.normal(size=len(xdata))# 拟合
p = np.polyfit(xdata, ydata, 2)
yfit = np.polyval(p, xdata)# 绘图
plt.plot(xdata, ydata, 'b-', label='Data')
plt.plot(xdata, yfit, 'r-', label='Polynomial fit')
plt.legend()
plt.show()

2.1.3 指数拟合
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 指数拟合函数
def exponential_func(x, a, b):return a * np.exp(b * x)# 数据点
xdata = np.linspace(0, 4, 50)
ydata = 2.5 * np.exp(1.3 * xdata) + 0.5 * np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(exponential_func, xdata, ydata)
yfit = exponential_func(xdata, *popt)# 绘图
plt.plot(xdata, ydata, 'b-', label='Data')
plt.plot(xdata, yfit, 'r-', label='Fit: a=%.3f, b=%.3f' % tuple(popt))
plt.legend()
plt.show()

2.1.4 对数拟合
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 对数拟合函数
def logarithmic_func(x, a, b):return a * np.log(x) + b# 数据点
xdata = np.linspace(1, 10, 50)
ydata = 2.5 * np.log(xdata) + 1.0 + 0.5 * np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(logarithmic_func, xdata, ydata)
yfit = logarithmic_func(xdata, *popt)# 绘图
plt.plot(xdata, ydata, 'b-', label='Data')
plt.plot(xdata, yfit, 'r-', label='Fit: a=%.3f, b=%.3f' % tuple(popt))
plt.legend()
plt.show()

2.1.5 幂函数拟合
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 幂函数拟合函数
def power_func(x, a, b):return a * x**b# 数据点
xdata = np.linspace(1, 10, 50)
ydata = 2.5 * xdata**1.5 + 0.5 * np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(power_func, xdata, ydata)
yfit = power_func(xdata, *popt)# 绘图
plt.plot(xdata, ydata, 'b-', label='Data')
plt.plot(xdata, yfit, 'r-', label='Fit: a=%.3f, b=%.3f' % tuple(popt))
plt.legend()
plt.show()

3. 拟合的应用场景
拟合在许多实际问题中都有广泛的应用,例如:
3.1 数据预测
在时间序列分析中,拟合常用于预测未来的数据点。例如,线性回归模型可以用于预测股票价格、温度变化等。
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 线性拟合函数
def linear_func(x, a, b):return a * x + b# 数据点
xdata = np.linspace(0, 10, 10)
ydata = 2.5 * xdata + 1.0 + np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(linear_func, xdata, ydata)
yfit = linear_func(xdata, *popt)# 预测未来的数据点
x_predict = np.linspace(10, 15, 5)
y_predict = linear_func(x_predict, *popt)# 绘图
plt.plot(xdata, ydata, 'o', label='Data')
plt.plot(xdata, yfit, '-', label='Linear Fit')
plt.plot(x_predict, y_predict, 'x', label='Prediction')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

3.2 数据建模
在机器学习中,拟合用于构建回归模型,以揭示数据之间的关系。常见的回归模型包括线性回归、逻辑回归和多项式回归。
import numpy as np
import matplotlib.pyplot as plt# 数据点
xdata = np.linspace(0, 10, 10)
ydata = 2.5 * xdata**2 + 1.0 + np.random.normal(size=len(xdata))# 多项式拟合
p = np.polyfit(xdata, ydata, 2)
yfit = np.polyval(p, xdata)# 绘图
plt.plot(xdata, ydata, 'o', label='Data')
plt.plot(xdata, yfit, '-', label='Polynomial Fit')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

3.3 物理实验数据分析
在物理实验中,拟合用于分析实验数据,提取物理参数。例如,通过拟合实验数据,可以确定材料的弹性模量、热导率等物理参数。
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 指数拟合函数
def exponential_func(x, a, b):return a * np.exp(b * x)# 实验数据点
xdata = np.linspace(0, 4, 10)
ydata = 2.5 * np.exp(1.3 * xdata) + np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(exponential_func, xdata, ydata)
yfit = exponential_func(xdata, *popt)# 绘图
plt.plot(xdata, ydata, 'o', label='Data')
plt.plot(xdata, yfit, '-', label='Exponential Fit')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

3.4 工程设计
在工程设计中,拟合用于优化设计参数。例如,在机械设计中,通过拟合实验数据,可以优化零件的尺寸和材料选择。
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 幂函数拟合函数
def power_func(x, a, b):return a * x**b# 实验数据点
xdata = np.linspace(1, 10, 10)
ydata = 2.5 * xdata**1.5 + np.random.normal(size=len(xdata))# 拟合
popt, pcov = curve_fit(power_func, xdata, ydata)
yfit = power_func(xdata, *popt)# 绘图
plt.plot(xdata, ydata, 'o', label='Data')
plt.plot(xdata, yfit, '-', label='Power Fit')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

4. 实例分析
为了更好地理解拟合方法,我们来看几个具体的实例分析。
实例1:股票价格预测
通过拟合历史股票价格数据,可以预测未来的股票价格。
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 线性拟合函数
def linear_func(x, a, b):return a * x + b# 历史股票价格数据
days = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
prices = np.array([10, 11, 13, 14, 15, 18, 19, 21, 22, 24])# 拟合
popt, pcov = curve_fit(linear_func, days, prices)
predicted_prices = linear_func(days, *popt)# 绘图
plt.plot(days, prices, 'o', label='Historical data')
plt.plot(days, predicted_prices, '-', label='Predicted data')
plt.xlabel('Days')
plt.ylabel('Prices')
plt.legend()
plt.show()

实例2:温度变化分析
通过拟合温度数据,可以分析温度变化的趋势。
from scipy.optimize import curve_fit
import numpy as np
import matplotlib.pyplot as plt# 指数拟合函数
def exponential_func(x, a, b):return a * np.exp(b * x)# 温度数据
days = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
temperatures = np.array([15, 17, 20, 22, 24, 28, 30, 32, 35, 37])# 拟合
popt, pcov = curve_fit(exponential_func, days, temperatures)
predicted_temperatures = exponential_func(days, *popt)# 绘图
plt.plot(days, temperatures, 'o', label='Historical data')
plt.plot(days, predicted_temperatures, '-', label='Predicted data')
plt.xlabel('Days')
plt.ylabel('Temperatures')
plt.legend()
plt.show()

总结
插值与拟合的基本原理、常用方法及其Python实现,涵盖了拉格朗日插值、牛顿插值、样条插值等插值方法,以及线性拟合、多项式拟合、指数拟合、对数拟合和幂函数拟合等拟合方法,并通过具体的代码实例展示了插值与拟合在数据平滑、图像处理、数值模拟、数据预测、数据建模、物理实验数据分析和工程设计中的实际应用。
相关文章:
【Python数值分析】革命:引领【数学建模】新时代的插值与拟合前沿技术
目录 编辑 第一部分:插值的基本原理及应用 1. 插值的基本原理 1.1 插值多项式 1.2 拉格朗日插值 1.3 牛顿插值 1.4 样条插值 2. 插值的Python实现 2.1 使用 NumPy 进行插值 2.2 使用 SciPy 进行插值 2.2.1 一维插值 编辑 2.2.2 二维插值 3. 插值…...
PCL-基于超体聚类的LCCP点云分割
目录 一、LCCP方法二、代码实现三、实验结果四、总结五、相关链接 一、LCCP方法 LCCP指的是Local Convexity-Constrained Patch,即局部凸约束补丁的意思。LCCP方法的基本思想是在图像中找到局部区域内的凸结构,并将这些结构用于分割图像或提取特征。这种…...
git 推送时出现错误 Locking support detected on remote “origin“
背景:代码托管是局域网搭建的gitlab 按照提示配置 lfs.locksverify true 还是没有用。 网上搜索了一番,其中有人提到可能时服务器磁盘满了,连到服务器上 df -h 查看, 发现根目录已经写满了: 使用命令行: d…...
劳动仲裁经验篇【赶紧收藏】
【劳动仲裁】纯经验干货分享,点个关注防止需要时找不到! 当公司决定搞你心态,变相逼退你时,无非就那么些手段,只要你能正确应对,并做好收集证据的准备,就不住畏惧。合理利用法律的武器维护自身…...
QT多媒体编程(一)——音频编程知识详解及MP3音频播放器Demo
目录 引言 一、QtMultimedia模块简介 主要类和功能 二、QtMultimedia相关类及函数解析 QAudioInput QAudioOutput QAudioFormat QMediaPlayer QMediaPlaylist QCamera 三、音频项目实战Demo UI界面 核心代码 运行结果 四、结论 引言 在数字时代,音频…...
MySQL使用教程 最最最实用的零基础教程 直接从安装开始教!!!!
数据构成了我们日益数字化的社会基础。想象一下,从移动应用和银行系统到搜索引擎,再到如 ChatGPT 这样的先进人工智能聊天机器人,这些工具若没有数据支撑,将寸步难行。你有没有好奇过这些海量数据都存放在哪里呢?答案正…...
pycharm怎么使用Anaconda和配置
打开Anaconda Prompt 要删除 Conda 环境 yolov5sconda,你可以使用以下命令: conda remove --name yolov5sconda --all这个命令会删除名为 yolov5sconda 的整个环境,包括其中安装的所有包和依赖项。请在命令提示符或终端中运行此命令。执行此…...
android中打包apk体积优化方案
1.在配置文件AndroidManifest中新增 android:extractNativeLibs"true" 2.在模块build文件下配置支持的cpu,一般配置64的就行了,多配一种so库体积大一倍,择优。 ndk { abiFilters arm64-v8a } 3.在模块builde文件下配置混淆除去无用的资源文件 注:三种…...
Kubernetes常见的3种部署方式
Kubernetes常见的3种部署方式 1. kubeadm2. 二进制包安装3. Minikube💖The Begin💖点点关注,收藏不迷路💖 Kubernetes(K8s)作为容器编排领域的领导者,提供了多种部署方式以适应不同场景的需求。 1. kubeadm 简介:Kubernetes官方推荐的集群部署工具。特点:简单易用…...
什么情况?我代码没了
前两天检视代码时,发现PR里面有两个提交的描述信息一模一样,于是我提出应该将这两个提交合并成一个,保持提交树的清晰。 1 先储存起来! 而同事这时正在开发别的特性,工作区不是干净的,没法直接执行 git r…...
关于Unity四种合批技术详解
文章目录 一.静态合批(StaticBatching)1.启用静态合批2.举例说明3.静态合批的限制4.静态合批的优点缺点5.动态指定物品合批 二.动态合批(Dynamic Batching)1.启用动态合批2.合批规则3.举例说明4.使用限制 三.GPU Instancing1.启用GPU Instancing2.启用限制3.举例说明 四.SRP Ba…...
自定义注解+拦截器+redis限流
逻辑:写一个注解,自定义在多少秒内限制访问多少次。 自定义拦截器,对于加了注解的请求,在执行方法前。先检查有没有注解,如果有注解就将请求的ipurl拼接作为key。 查询redis中有没有该key,没有就存入&…...
Springcloud物流配送后台-计算机毕业设计源码69809
目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 物流配送后台系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2 数据修改流程 2.2.3 数据…...
【Java面试篇】数据埋点监控页面pv的SDK接口实现
面试题如下: 题目要求你实现一个 Monitor.counter(String code, String dim) 接口,用于监控数据统计。 具体要求: 数据聚合: 你需要按照 code 和 dim 的组合进行数据聚合, code 代表监控项的唯一标识, dim 为自定义维度。上报频率: 每分钟上报一次聚合后的数据。数据保证…...
vue3直播视频流easy-player
vue3直播视频流easy-player <script src"/easyPlayer/EasyPlayer-element.min.js"></script> easyPlayer文件下载地址 https://download.csdn.net/download/weixin_42120669/89605739 <template><div class"container"><div …...
Python笔试面试题AI答之面向对象(3)
文章目录 12.Python中OOPS是什么?1. 类(Class)2. 对象(Object)3. 面向对象编程的主要特性4. 面向对象编程的优点 13.解释一下Python中的继承?继承的基本语法继承的特性继承的类型 14. 什么是封装࿱…...
vulnhub靶场serial-php渗透(蜥蜴细!)
目录 一、信息收集 1.探测主机存活(目标主机IP地址) 2.访问web服务 3.后台目录和端口扫描 4.解析bak.zip源码 二、漏洞利用 1.构造payload 2.通过bp的repeater模块 3.get shell 4.获取反弹shell 三、提升权限 1. 查看系统版本,内核…...
Qt Designer,仿作一个ui界面的练习(一):界面的基本布局
初学不要太复杂,先做一个结构简单的,大致规划一下功能分区,绘制草图: 最终的效果: 界面主要由顶边栏、侧边栏、内容区构成。顶边栏左边是logo,右边是时钟显示。侧边栏最上边是切换按钮,用以动画…...
《深入了解 Postman 接口测试工具》
在现代 Web 开发中,接口测试是确保系统稳定性和可靠性的关键环节。Postman 作为一款强大的接口测试工具,为开发者和测试人员提供了便捷、高效的测试体验。本文将深入详解 Postman 的各项功能和使用方法。 一、Postman 简介 Postman 是一款功能丰富的 A…...
java使用org.apache.commons:commons-compress解压 .7z压缩包
前言 java使用org.apache.commons:commons-compress解压 .7z压缩包 一、使用步骤 1.引入库 代码如下(示例):cpmpress需要用到xz依赖,不一起引入会报错。 <!-- https://mvnrepository.com/artifact/org.tukaani/xz --> …...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
【版本控制】GitHub Desktop 入门教程与开源协作全流程解析
目录 0 引言1 GitHub Desktop 入门教程1.1 安装与基础配置1.2 核心功能使用指南仓库管理日常开发流程分支管理 2 GitHub 开源协作流程详解2.1 Fork & Pull Request 模型2.2 完整协作流程步骤步骤 1: Fork(创建个人副本)步骤 2: Clone(克隆…...
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.
这个警告表明您在使用Vue的esm-bundler构建版本时,未明确定义编译时特性标志。以下是详细解释和解决方案: 问题原因: 该标志是Vue 3.4引入的编译时特性标志,用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...
[特殊字符] Spring Boot底层原理深度解析与高级面试题精析
一、Spring Boot底层原理详解 Spring Boot的核心设计哲学是约定优于配置和自动装配,通过简化传统Spring应用的初始化和配置流程,显著提升开发效率。其底层原理可拆解为以下核心机制: 自动装配(Auto-Configuration) 核…...
VASP软件在第一性原理计算中的应用-测试GO
VASP软件在第一性原理计算中的应用 VASP是由维也纳大学Hafner小组开发的一款功能强大的第一性原理计算软件,广泛应用于材料科学、凝聚态物理、化学和纳米技术等领域。 VASP的核心功能与应用 1. 电子结构计算 VASP最突出的功能是进行高精度的电子结构计算ÿ…...






