码迷,mamicode.com
首页 > 其他好文 > 详细

高斯消元

时间:2018-05-14 23:01:57      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:code   根据   --   scan   算法   第一个   style   bsp   高斯消元   

刚才想着把算法复杂度降为O(n^2),但其实对于第i+1行~第n行加上第k行*一个系数,第k行的各个数的值不是相等的,是我想多了……………………

 

程序:

AX=B,已知A,B,求X

A(i,j) i>=j 都不用处理

 

1.化为上三角矩阵 (实际上是A(i,j) [i>=j] 被忽略)

2.根据上三角矩阵求出结果X1~Xn

 

时间复杂度:

对于“ a[j][k]+=value*a[i][k]; ”

(n-1)*n + (n-2)*(n-1) + … +  1*2 = (n-1)*n*(n+1)/3

 

对于“ a[j][n+1]-=x[i]*a[j][i]; ”

(n-1) + (n-2) + … + 1 = (n-1)*n/2

 

!!!有时更快的方法:

CA=A‘ (其中A’为上文所说的上三角矩阵)

其中C(j,i)=-A(j,i)/A(i,i)    [j>i]  即把第i行的部分数加入第i+1行~第n行,

然后其它的值为0,因为无意义。

矩阵乘法的时间复杂度为O(n^r) r=2.376 etc.

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <math.h>
 4 #define cha 1e-10
 5 
 6 double a[1000][1000],x[1000];
 7 int main()
 8 {
 9     long n,i,j,k;
10     double temp,value;
11     scanf("%ld",&n);
12     for (i=1;i<=n;i++)
13         for (j=1;j<=n;j++)
14             scanf("%lf",&a[i][j]);
15     for (i=1;i<=n;i++)
16         scanf("%lf",&a[i][n+1]);
17 
18     for (i=1;i<=n;i++)
19     {
20         //找到第i列从第i行开始第一个值不为0的数
21         if (fabs(a[i][i])<cha)
22         {
23             for (j=i+1;j<=n;j++)
24                 if (fabs(a[j][i])>cha)
25                     break;
26             //交换第i行和第j行
27             for (k=1;k<=n;k++)
28             {
29                 temp=a[i][k];
30                 a[i][k]=a[j][k];
31                 a[j][k]=temp;
32             }
33         }
34         for (j=i+1;j<=n;j++)
35         {
36             value=-a[j][i]/a[i][i]; //避免后面“a[j][k]-=value*a[i][k];”求多次补码
37             for (k=i+1;k<=n+1;k++)  //n+1:结果也要进行处理
38                 a[j][k]+=value*a[i][k];
39         }
40     }
41     for (i=n;i>=1;i--)
42     {
43         x[i]=a[i][n+1]/a[i][i];
44         for (j=i-1;j>=1;j--)
45             a[j][n+1]-=x[i]*a[j][i];
46     }
47     for (i=1;i<=n;i++)
48         printf("%.2lf ",x[i]);
49     return 0;
50 }
51 /*
52 3
53 2 1 1
54 6 2 1
55 -2 2 1
56 1 -1 7
57 
58 -1.00 2.00 1.00
59 */

 

高斯消元

标签:code   根据   --   scan   算法   第一个   style   bsp   高斯消元   

原文地址:https://www.cnblogs.com/cmyg/p/9038440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!