高斯消元-解求精技术(Python)
来源:互联网 发布:莆田云计算机房 编辑:程序博客网 时间:2024/06/06 07:22
第一次写CSDN博客,以前年幼无知玩新浪博客,文章仅代表个人观点,如有错误,欢迎各位大佬指出。废话不多说,马上献上这次博客的内容!
最近刚学习了高斯消元,老师要求我们用Python实现高斯消元的解求精技术。所谓高斯消元的解求精技术主要包含以下三种:
- 使用更多有效位
- 交换主元
- 缩放
一、使用更多有效位
大家都知道,对于病态方程组,是不能使用高斯消元法对其进行求解的。
那么,最简单的解决办法就是在计算中使用更多的有效位。
在此,我就不深入解释了,大家有空可以尝试一下。
二、交换主元
在方程的规范化过程中,会出现除零的问题。
所谓除零问题,就是:在方程组相应的系数矩阵中,主对角线的值出现0或全为0时,用编程方式实现高斯消元法时,就要对各个方程的顺序进行调整,称为除0。
因为计算机是不会像人类一样,知道出现0,就会自动地将方程调换顺序,对计算机来说,实现高斯消元还要加上除零这个步骤。这个时候,就需要交换主元。
首先要确定主元下的列的最大系数。
1.将最大系数的行和原主元的行进行交换,成为新的主元行,这个方法称为部分交换主元
2.将行和列都进行最大值的选择搜索并交换,成为新主元的行和列,这个方法称为完全交换主元
一般来说,常使用部分交换主元法。
例如:
使用高斯消元法求解方程组:
0.0003 x1 + 3.0000 x2 = 2.0001
1.0000 x1 + 1.0000 x2 = 1.0000
准确解应为: x1 = 1/3,x2 = 2/3
# coding=utf-8# 高斯消元法# 0.0003x1+3.0000x2=2.0001# 1.0000x1+1.0000x2=1.0000# 交换主元def gauss(): matrix1 = [[0.0003, 3.0000], [1.0000, 1.0000]] matrix2 = [2.0001, 1.0000] result = [0, 0] k = 0 p = k big = matrix1[k][k] for i in range(k+1, 1): dummy = matrix1[i][k] if dummy > big : big = dummy p = i if p != k : for j in range(k, 1): dummy = matrix1[p][j] matrix1[p][j] = matrix1[k][j] matrix1[k][j] = dummy dummy = matrix2[p] matrix2[p] = matrix2[k] matrix2[k] = dummy for w in range(0, 0): for i in range(w+1, 1): factor = matrix1[i][w]/matrix1[w][w] for j in range(w+1, 1): matrix1[i][j] = matrix1[i][j] - factor * matrix1[w][j] matrix2[i] = matrix2[i] - factor * matrix2[w] for w in range(0, 1): result[w] = matrix2[w] / matrix1[w][w] for i in range(0, 0): sum = matrix2[i] for j in range(i+1, 1): sum = sum - matrix1[i][j] * result[j] result[i] = sum / (matrix1[i][j] * 10000) print resultif __name__ == '__main__': res = gauss() print res
各位大佬请注意!
程序运行结果是有问题的,但是由于我不会改,于是就这样了,代码仅供参考。
结果求得: x1 = 6667.000000000001, x2 = 0
跪求知道原因的大佬指出错误,交流学习。
三、缩放
将某行方程组的系数进行缩小或放大,可以使得行列式的大小标准化,还可以减小舍入误差。
但是需要注意的是,缩放的目的只是判断是否需要交换主元,并不是为了真正的缩小放大方程系数。
缩小或放大系数后模拟高斯消元解方程的过程,若合适,再交换主元,而不是缩放。
希望有更多的人跟我探讨这个程序的解决办法!再次感谢!
- 高斯消元-解求精技术(Python)
- Python 技术专题
- Python 应用发布技术
- Python 技术博客
- Python 应用发布技术
- python 技术专题
- 【转】python技术博客
- python中的多线程技术
- python技术学习.
- 【转】python技术博客
- python爬虫技术总结
- python 爬虫技术
- Python 调试技术
- Python 技术博客
- Python 扩展技术总结
- python技术博客
- python线程池技术
- Python Excel技术比较
- linux鸟哥视频学习笔记04
- PropertyInfo的使用
- POJ-3107-Godfather
- HTTP 方法:GET 对比 POST
- Nuttx操作系统用户手册(阅读记录)(翻译)
- 高斯消元-解求精技术(Python)
- codeforces 894E
- POJ 1201 Intervals (差分约束)
- ctype.h
- IntelliJ IDEA 的 Content Root 概念
- 【巴什博弈】HDU2147[kiki's game]题解
- Java实现单链表和双链表
- Windows下用Anaconda安装TensorFlow
- 【ZT】华为内部硬件开发设计流程