【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 --> …...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
CppCon 2015 学习:REFLECTION TECHNIQUES IN C++
关于 Reflection(反射) 这个概念,总结一下: Reflection(反射)是什么? 反射是对类型的自我检查能力(Introspection) 可以查看类的成员变量、成员函数等信息。反射允许枚…...