栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 实现三维平面拟合 附纸质版(!!!)最小二乘法的推导与程序的实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 实现三维平面拟合 附纸质版(!!!)最小二乘法的推导与程序的实现

1.公式推导

 2.程序的实现         2.1数据集格式

        程序的数据集格式如下,只要数据集格式相同,只要修改程序的文件路径即可运行。

        2.2程序
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

df = pd.read_excel("你的文件路径",engine='openpyxl')       #修改数据文件路径即可


x = list(df["x"])
y = list(df["y"])
z = list(df["z"])
# 构造A矩阵
A = np.zeros((3, 3))
for i in range(0, len(x)):
    A[0, 0] = A[0, 0] + x[i] ** 2
    A[0, 1] = A[0, 1] + x[i] * y[i]
    A[0, 2] = A[0, 2] + x[i]
    A[1, 0] = A[0, 1]
    A[1, 1] = A[1, 1] + y[i] ** 2
    A[1, 2] = A[1, 2] + y[i]
    A[2, 0] = A[0, 2]
    A[2, 1] = A[1, 2]
    A[2, 2] = len(x)
# 构造b矩阵
b = np.zeros((3, 1))
for i in range(0, len(x)):
    b[0, 0] = b[0, 0] + x[i] * z[i]
    b[1, 0] = b[1, 0] + y[i] * z[i]
    b[2, 0] = b[2, 0] + z[i]

# 求解x
A_inv = np.linalg.inv(A)  # 求矩阵A的逆
X = np.dot(A_inv, b)
print('平面拟合结果为:z = %.3f * x + %.3f * y + %.3f' % (X[0, 0], X[1, 0], X[2, 0]))
#
# 展示图像
fig1 = plt.figure()
# ax1 = fig1.add_subplot(111, projection='3d')
ax1 = plt.axes(projection='3d')
ax1.set_xlabel("x")
ax1.set_ylabel("y")
ax1.set_zlabel("z")
ax1.scatter(x,y,z,c='r',marker='o')
x_p = np.array([i/1000 for i in range(-50,50)])
y_p = np.array([i/1000 for i in range(-50,50)])
x_p, y_p = np.meshgrid(x_p, y_p)
z_p = X[0, 0] * x_p + X[1, 0] * y_p + X[2, 0]
ax1.plot_wireframe(x_p, y_p, z_p, rstride=10, cstride=10)
plt.show()
        2.3程序结果(作者的数据绘制出的图)

        

 程序参考:python如何拟合三维平面(拟合Intel Realsense D435深度数据点)_Dontla的博客-CSDN博客_python 拟合平面文章目录拟合Intel Realsense D435深度数据点参考文章:【MQ笔记】超简单的最小二乘法拟合平面(Python)import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D # 创建函数,用于生成不同属于一个平面的100个离散点def not_all_in_plane(a, b, c): x = np.random.uniform(-10, 10, sizhttps://blog.csdn.net/Dontla/article/details/108445277

 如果大家觉得有点难,可以使用matlab中的拟合工具箱进行拟合,更加方便。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/300051.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号