如下所示:
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