经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
关于高斯消元
来源:cnblogs  作者:Floatiy  时间:2018/10/19 9:20:02  对本文有异议

关于高斯消元

定义

来自百度百科

数学上,高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方程组求解。但其算法十分复杂,不常用于加减消元法,求出矩阵的秩,以及求出可逆方阵的逆矩阵。不过,如果有过百万条等式时,这个算法会十分省时。一些极大的方程组通常会用迭代法以及花式消元来解决。当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。高斯消元法可以用在电脑中来解决数千条等式及未知数。亦有一些方法特地用来解决一些有特别排列的系数的方程组。

没啥用

适用范围

高斯消元的时间复杂度是O(n3),一般数据范围在100左右。

高斯消元可用于解多元线性方程组。

具体方法

高斯消元可以看作模拟解方程的过程,就像小学生那样,最终要削的每一个未知数只在一个式子里出现,就可以得出其中一项的解,回代得出全部解。

在一个式子里,用这个式子的x消去其他式子里的x,然后在剩下的两个式子里再选择一个式子里的y,用这个y消去最后剩下的式子里的y。那么现在最后一个方程里就只有一个未知数z了。倘若z的系数是1,那么我们就可以直接得出答案来了。

(摘自luogu高斯消元模板的题解)

Code

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cmath>
  5. using namespace std;
  6. const int MAXN = 100 + 5;
  7. const double eps = 0.00001;
  8. int n;
  9. double a[MAXN][MAXN];
  10. double ans[MAXN];
  11. inline void swap_judge(int x) {
  12. int det = x;
  13. for(int i = x+1;i <= n;i++) {
  14. if(abs(a[i][x]) > abs(a[det][x])) det = i;
  15. }
  16. if(det == x) return;
  17. for(int i = x;i <= n+1;i++) {
  18. swap(a[x][i],a[det][i]);
  19. }
  20. return;
  21. }
  22. inline void Gauss() {
  23. double tmp;
  24. for(int i = 1;i <= n;i++) {
  25. swap_judge(i);
  26. if(fabs(a[i][i]) <= eps) {
  27. puts("No Solution");
  28. exit(0);
  29. }
  30. for(int j = i+1;j <= n;j++) {
  31. if(fabs(a[j][i]) > eps) {
  32. tmp = a[i][i] / a[j][i];
  33. for(int k = i;k <= n+1;k++) {
  34. a[j][k] = a[j][k] * tmp - a[i][k];
  35. }
  36. }
  37. }
  38. }
  39. for(int i = n;i;i--) {
  40. for(int j = i+1;j <= n;j++) {
  41. a[i][n+1] -= a[i][j] * a[j][n+1];
  42. }
  43. a[i][n+1] /= a[i][i];
  44. }
  45. return;
  46. }
  47. int main() {
  48. scanf("%d",&n);
  49. for(int i = 1;i <= n;i++) {
  50. for(int j = 1;j <= n + 1;j++) {
  51. scanf("%lf",&a[i][j]);
  52. }
  53. }
  54. Gauss();
  55. for(int i = 1;i <= n;i++) {
  56. printf("%.2lf\n",a[i][n+1]);
  57. }
  58. return 0;
  59. }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号