python decimal_python – 浮点数和decimal.Decimal的小数位问题

我似乎在漂浮物上失去了很多精确度.

例如,我需要解决一个矩阵:

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类,但它不能很好地处理幂(即Decimal(x)** 2).

有任何想法吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值