所以,我试图在pylab中实现一个简单的共轭梯度程序。
from scipy import *
from numpy import *
import numpy as np
import math
class conGradient:
def __init__(self,A,b,TOL,x):
self.a=mat(A)
self.b=mat(b).T
self.x=mat(x).T
self.tol=TOL
def Algo(self):
A=self.a
b=self.b
x=self.x
xo=x
ro=b-A*xo
po=ro
while(math.fabs(np.linalg.norm(ro,2))>self.tol):
print str(ro.transpose())
print str(ro)
ak=((ro.transpose())*ro)/((po.transpose())*A*po)
print str(ak.item(0))
xn=xo+(ak.item(0)*po)
rn=ro-(ak.item(0)*A*po)
temp=rn.transpose()
print str(temp)
print str(rn)
bn=(temp*rn)/((ro.transpose)*ro)
pn=rn+bn*po
xo=xn
ro=rn
po=pn
print "Soltuion found within " + str(self.tol)+ "\n" + str(xn)
x=conGradient('[10 15; 4 1]','[45,9]', .001, '[1,1]')
x.Algo()
当我跑的时候,我遇到了转座问题
python conguateGradient.py
[[20 4]]
[[20]
[ 4]]
0
[[20 4]]
[[20]
[ 4]]
Traceback (most recent call last):
File "conguateGradient.py", line 43, in <module>
x.Algo()
File "conguateGradient.py", line 35, in Algo
bn=(temp*rn)/((ro.transpose)*ro)
TypeError: unsupported operand type(s) for *: 'builtin_function_or_method' and 'matrix'
对我来说非常奇怪,因为在第一行,它会转换并继续,但是我继续尝试用rn再次执行它,然后出现这个问题。对这个问题的一些见解会非常有帮助。谢谢。