我好像对漂浮物失去了很多精确性。
例如,我需要解一个矩阵:4.0x -2.0y 1.0z =11.0
1.0x +5.0y -3.0z =-6.0
2.0x +2.0y +5.0z =7.0
这是我用来从文本文件导入矩阵的代码:f = open('gauss.dat')
lines = f.readlines()
f.close()
j=0
for line in lines:
bits = string.split(line, ',')
s=[]
for i in range(len(bits)):
if (i!= len(bits)-1):
s.append(float(bits[i]))
#print s[i]
b.append(s)
y.append(float(bits[len(bits)-1]))
我需要用gauss-seidel求解,所以我需要重新排列x,y和z的方程:x=(11+2y-1z)/4
y=(-6-x+3z)/5
z=(7-2x-2y)/7
这是我用来重新排列方程式的代码。b是系数矩阵,y是答案向量:def equations(b,y):
i=0
eqn=[]
row=[]
while(i
j=0
row=[]
while(j
if(i==j):
row.append(y[i]/b[i][i])
else:
row.append(-b[i][j]/b[i][i])
j=j+1
eqn.append(row)
i=i+1
return eqn
但是我得到的答案并不精确到小数点后。
例如,从上面重新排列第二个方程时,我应该得到:y=-1.2-.2x+.6z
我得到的是:y=-1.2-0.20000000000000001x+0.59999999999999998z
这看起来并不是一个大问题,但是当你把这个数字提高到一个很高的功率时,错误是相当大的。有办法解决这个问题吗?我试过Decimal类,但它在powers(即Decimal(x)**2)中不起作用。
有什么想法吗?