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

Python实现3D点曲面拟合及坐标插值求解方法咨询

3D点曲面拟合与可视化方案

拟合二次曲面步骤

我们采用二次多项式曲面进行拟合,模型形式为:

z = a*x² + b*y² + c*x*y + d*x + e*y + f

以下是完整实现代码:

import numpy as np
from scipy.linalg import lstsq
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 原始数据
x = np.array([600, 450, 302, 151, 600, 450, 302, 151, 599, 450, 302, 150, 599, 449, 301, 150])
y = np.array([0.4, 0.2, 0.1, 0.0, 2.1, 2, 2, 2, 4, 4.1, 4, 4.1, 6.1, 6.1, 6, 6])
z = np.array([23.77, 17.74, 11.93,5.97, 23.60, 17.60, 11.78, 5.82, 23.09, 17.24, 11.39, 5.39, 21.89, 16.18, 10.36, 4.26])

# 构造设计矩阵:每一行对应 [x², y², x*y, x, y, 1]
X = np.column_stack((x**2, y**2, x*y, x, y, np.ones(len(x))))

# 最小二乘求解系数
coeffs, residuals, rank, singular_vals = lstsq(X, z)
a, b, c, d, e, f = coeffs

# 定义曲面函数:输入任意x,y返回z
def compute_z(x_input, y_input):
    return a * x_input**2 + b * y_input**2 + c * x_input * y_input + d * x_input + e * y_input + f

# 生成绘图用的网格点
x_grid = np.linspace(min(x), max(x), 50)
y_grid = np.linspace(min(y), max(y), 50)
X_grid, Y_grid = np.meshgrid(x_grid, y_grid)
Z_grid = compute_z(X_grid, Y_grid)

# 绘制3D图
fig = plt.figure(figsize=(10,7))
ax = fig.add_subplot(111, projection='3d')

# 原始数据点
ax.scatter(x, y, z, color='red', label='原始数据点')
# 拟合曲面
ax.plot_surface(X_grid, Y_grid, Z_grid, alpha=0.6, cmap='viridis', label='拟合曲面')

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('3D点二次曲面拟合结果')
ax.legend()
plt.show()

# 打印拟合系数
print(f"拟合曲面方程系数:")
print(f"a = {a:.6f}, b = {b:.6f}, c = {c:.6f}")
print(f"d = {d:.6f}, e = {e:.6f}, f = {f:.6f}")

关键说明

  1. 设计矩阵构造:这是你之前可能出错的地方。必须把每个点的x²、y²、x*y、x、y、常数项1组合成矩阵,才能用最小二乘法求解多项式系数。
  2. 系数解读:得到的a-f对应二次曲面模型的各项系数,直接代入compute_z函数就能计算任意(x,y)对应的z值。
  3. 可视化:用meshgrid生成均匀网格点,绘制拟合曲面和原始点对比,直观验证拟合效果。

测试任意(x,y)的z值

比如输入x=300, y=3:

test_z = compute_z(300, 3)
print(f"x=300, y=3时,z={test_z:.2f}")

内容的提问来源于stack exchange,提问作者somnath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:53:23