python怎么算⼆元⼀次⽅程_python如何拟合⼆元⼀次⽅程?import numpy as np
from scipy import optimize# 最⼩⼆乘法拟合
import matplotlib.pyplot as plt # python matplotlib 绘图
from mpl_toolkits.mplot3d import Axes3D # 3D 绘图
def func(x, y, p):
""" 数据拟合所⽤的函数:z=ax+by:param x: ⾃变量 x:param y: ⾃变量 y:param p: 拟合参数 a, b"""
a, b = p
return a * x + b * y
def residuals(p, z, x, y):
""" 得到数据 z 和拟合函数之间的差"""
return z - func(x, y, p)
def main():
x = np.arange(5)
y = np.arange(5)
z = np.array([2, 4, 7, 7, 10]) # 数据随便取的
plsq = optimize.leastsq(residuals, np.array([0, 0]), args=(z, x, y)) # 最⼩⼆乘法拟合
# [0, 0] 为参数 a, b 初始值
a, b = plsq[0] # 获得拟合结果
print("拟合结果:\na ={}".format(a))
print("b ={}".format(b))
# 绘图
xp = np.linspace(-1, 6, 100)
yp = np.linspace(-1, 6, 100)
X, Y = np.meshgrid(xp, yp)linspace numpy
Z = func(X, Y, [a, b]) # 带⼊拟合得到的 a, b
fig = plt.figure(figsize=(8, 6))
ax = Axes3D(fig) # 3D 绘图
ax.plot_surface(X, Y, Z, alpha=0.5)
ax.scatter(x, y, z, color="r")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_zlabel("z")
plt.show()
if __name__ == "__main__": main()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论