当前位置: 移动技术网 > IT编程>脚本编程>Python > Python 线性方程组求解之:Jacobi迭代算法

Python 线性方程组求解之:Jacobi迭代算法

2019年06月12日  | 移动技术网IT编程  | 我要评论

90mm,f1dy,木头人互刷平台

  1. import numpy as np
  2. delta=0.0001#精度要求
  3. #数据读取
  4. data = []
  5. f = open("h:/notepad/数学实验/jacobi_data.txt")
  6. for line in f:
  7. line = line.replace("\n","")
  8. data.append(list(map(eval, line.split(","))))
  9. f.close()
  10. data=np.array(data)
  11. #对data行初等变换,主元变为每列最大值
  12. row,column=data.shape
  13. for i in range(row):
  14. max_value_index=np.argmax(np.fabs(data[i:row,i]))
  15. temp=np.copy(data[i,:])
  16. data[i,:]=data[max_value_index+i,:]
  17. data[max_value_index+i,:]=temp
  18. #lu: -(l+u)
  19. #d:系数矩阵的对角线元素
  20. #b:ax=b中的b
  21. lu=np.negative(data[:,0:column-1])
  22. d=np.zeros(row)
  23. b=data[:,column-1]
  24. for i in range(row):
  25. d[i]=data[i,i]
  26. lu[i,i]=0
  27. #迭代求解
  28. x=np.ones(row)#用于存储迭代过程中x的值
  29. y=np.ones(row)#用于存储中间结果
  30. for iteration in range(100):
  31. print('x:',x)
  32. #迭代计算
  33. for i in range(row):
  34. y[i]=np.vdot(lu[i,:],x)+b[i]
  35. y[i]=y[i]/d[i]
  36. #判断是否达到精度要求
  37. if np.max(np.fabs(x-y))<delta:
  38. print('iteration:',iteration)
  39. break
  40. #将y幅值到x,开始下一轮迭代
  41. x=np.copy(y)

原理:

注:

 

实例数据:jacobi_data.txt 。组织方式:[a,b]

2,-1,-1,-5
1,1,10,11
1,5,-1,8

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网