如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
#列出实验数据
point = [[ 2 , 3 , 48 ],[ 4 , 5 , 50 ],[ 5 , 7 , 51 ],[ 8 , 9 , 55 ],[ 9 , 12 , 56 ]]
plt.xlabel( "X1" )
plt.ylabel( "X2" )
#表示矩阵中的值
ISum = 0.0
X1Sum = 0.0
X2Sum = 0.0
X1_2Sum = 0.0
X1X2Sum = 0.0
X2_2Sum = 0.0
YSum = 0.0
X1YSum = 0.0
X2YSum = 0.0
#在图中显示各点的位置
for i in range ( 0 , len (point)):
x1i = point[i][ 0 ]
x2i = point[i][ 1 ]
yi = point[i][ 2 ]
ax.scatter(x1i, x2i, yi, color = "red" )
show_point = "[" + str (x1i) + "," + str (x2i) + "," + str (yi) + "]"
ax.text(x1i,x2i,yi,show_point)
ISum = ISum + 1
X1Sum = X1Sum + x1i
X2Sum = X2Sum + x2i
X1_2Sum = X1_2Sum + x1i * * 2
X1X2Sum = X1X2Sum + x1i * x2i
X2_2Sum = X2_2Sum + x2i * * 2
YSum = YSum + yi
X1YSum = X1YSum + x1i * yi
X2YSum = X2YSum + x2i * yi
# 进行矩阵运算
# _mat1 设为 mat1 的逆矩阵
m1 = [[ISum,X1Sum,X2Sum],[X1Sum,X1_2Sum,X1X2Sum],[X2Sum,X1X2Sum,X2_2Sum]]
mat1 = np.matrix(m1)
m2 = [[YSum],[X1YSum],[X2YSum]]
mat2 = np.matrix(m2)
_mat1 = mat1.getI()
mat3 = _mat1 * mat2
# 用list来提取矩阵数据
m3 = mat3.tolist()
a0 = m3[ 0 ][ 0 ]
a1 = m3[ 1 ][ 0 ]
a2 = m3[ 2 ][ 0 ]
# 绘制回归线
x1 = np.linspace( 0 , 9 )
x2 = np.linspace( 0 , 12 )
y = a0 + a1 * x1 + a2 * x2
ax.plot(x1,x2,y)
show_line = "y=" + str (a0) + "+" + str (a1) + "x1" + "+" + str (a2) + "x2"
plt.title(show_line)
plt.show()
|
以上这篇python实现三维拟合的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/changye777/article/details/78437491