You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为实测数据拟合三维指数曲面并实现绘图与方程获取

三维指数曲面拟合与绘图实现

实现思路

我们采用指数曲面模型:z = a·e^(b·x + c·y),其中x对应变量d,y对应变量J4,z为实测数据。通过非线性最小二乘法拟合模型参数a、b、c,最终同时绘制原始散点与拟合曲面,并输出曲面的数学方程。

完整代码

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from scipy.optimize import curve_fit

# 实测数据
data = [
    [1.0183786345931547, 1.0299586760768078, 1.038641346963767, 1.0450398412805133, 1.194598528164483],
    [1.0498980141678536, 1.0740481275807727, 1.101990429736493, 1.1528998376687427, 1.4439775675193383],
    [1.072406763443829, 1.150808521648661, 1.2306731013044911, 1.3516512408949992, 1.8936625169205694]
]
J4 = [0.3, 0.4, 0.5, 0.6, 0.7]
d = [0.25, 0.333333, 0.5]

# 将数据整理为拟合所需的一维数组
x_data = np.repeat(d, len(J4))
y_data = np.tile(J4, len(d))
z_data = np.array(data).flatten()

# 定义指数曲面模型
def exponential_surface(xy, a, b, c):
    x, y = xy
    return a * np.exp(b * x + c * y)

# 非线性最小二乘法拟合参数
initial_guess = [1, 1, 1]  # 参数初始猜测值,可根据数据趋势调整
params, _ = curve_fit(exponential_surface, (x_data, y_data), z_data, p0=initial_guess)
a_fit, b_fit, c_fit = params

# 生成拟合曲面的网格数据
x_grid, y_grid = np.meshgrid(d, J4)
z_fit = exponential_surface((x_grid, y_grid), a_fit, b_fit, c_fit)

# 绘制散点与拟合曲面
fig = plt.figure(figsize=(6, 10))
ax = Axes3D(fig)

# 原始实测散点
ax.scatter(x_grid, y_grid, np.array(data).transpose(), s=40, alpha=1, label='实测数据')
# 拟合曲面
ax.plot_surface(x_grid, y_grid, z_fit, alpha=0.5, cmap='viridis', label='拟合曲面')

ax.set_proj_type('ortho')
ax.set_xlabel('d')
ax.set_ylabel('J4')
ax.set_zlabel('测量值')
ax.legend()
plt.tight_layout()
plt.show()

# 输出拟合的数学方程
print(f"拟合的指数曲面方程:z = {a_fit:.4f}·e^({b_fit:.4f}·x + {c_fit:.4f}·y)")

关键说明

  • 拟合依赖scipy.optimize.curve_fit实现非线性最小二乘法,初始猜测值initial_guess可根据数据大致趋势微调,提升拟合精度。
  • 拟合完成后,参数a_fit、b_fit、c_fit会被输出,直接代入模型即可得到最终的曲面方程。
  • 绘图时通过设置曲面的alpha=0.5,保证原始散点与拟合曲面互不遮挡。

内容的提问来源于stack exchange,提问作者Ladislav Révay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 09:20:31