我有一個數據集,我試圖從中得到一個平面的方程。 即:a * x + b * y + c = z 在我的情況下,dT = x,dTa = y,Constant = c,dV = z。求解Python中的平面方程(如在Matlab中)
我能夠在Matlab中做到這一點很容易,代碼:
dT = [8.5; 3.5; .4; 12.9]
dT =
8.5000
3.5000
0.4000
12.9000
dTa = [8.5; 18; 22; 34.9]
dTa =
8.5000
18.0000
22.0000
34.9000
dV = [3; 1; .5; 3]
dV =
3.0000
1.0000
0.5000
3.0000
Constant = ones(size(dT))
Constant =
1
1
1
1
coefficients = [dT dTa Constant]\dV
coefficients =
0.2535
-0.0392
1.0895
所以,在這裏,係數=(A,B,C)。
在Python中是否有相當的方法來做到這一點? 我一直在嘗試使用numpy模塊(numpy.linalg),但它的工作效果並不好。 其中之一,矩陣必須是方形的,即使如此,它也不會給出非常好的答案。例如:
錯誤:
>>> dT
[8.5, 3.5, 0.4, 12.9]
>>> dTa
[8.5, 18, 22, 34.9]
>>> dV
[3, 1, 0.5, 3]
>>> Constant
array([ 1., 1., 1., 1.])
>>> numpy.linalg.solve([dT, dTa, Constant], dV)
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
numpy.linalg.solve([dT, dTa, Constant], dV)
File "C:\Python27\lib\site-packages\numpy\linalg\linalg.py", line 312, in solve
_assertSquareness(a)
File "C:\Python27\lib\site-packages\numpy\linalg\linalg.py", line 160, in _assertSquareness
raise LinAlgError, 'Array must be square'
LinAlgError: Array must be square
Wokrking與方陣:
>>> dT
array([ 8.5, 3.5, 12.9])
>>> dTa
array([ 8.5, 18. , 34.9])
>>> dV
array([3, 1, 3])
>>> Constant
array([ 1., 1., 1.])
>>> numpy.linalg.solve([dT, dTa, Constant], dV)
array([ 2.1372267 , 2.79746835, -1.93469505])
這些甚至還沒有接近我之前得到的值!
任何想法傢伙?任何意見讚賞。
在您對問題的解釋中,您是不是指'dT = x,dTa = y'? – 2012-08-15 06:47:33
對,我完全搞砸了。將立即編輯。 – sirgogo 2012-08-15 18:42:14