• gaussi


     1 #include <iostream>
     2 #include <cstdio>
     3 #include <math.h>
     4 #include <time.h>
     5 #include <stdlib.h>
     6 using namespace std;
     7 const int MAXN = 10000;
     8 double a[MAXN][MAXN];
     9 double b[MAXN];
    10 double x[MAXN];
    11 int main()
    12 {
    13     int n=3;
    14     double l;
    15     int i,number;
    16     double sum;
    17     srand((unsigned) time(NULL)); 
    18     printf("a[][]:
    ");
    19     for(int i = 0;i<n;i++){
    20         for(int j = 0;j<n;j++){
    21             number = rand() % 11;
    22             a[i][j]=(double)(number*1.131121);
    23             printf("%f  ",a[i][j]);
    24             sum+=a[i][j];
    25         }
    26         cout << endl;
    27         b[i]=sum;
    28         sum=0;
    29     }
    30     ///消元过程
    31     for(int k = 0;k<n-1;k++){///消元行
    32         for(int i = k+1;i<n;i++){///被消元行
    33             l = a[i][k]/a[k][k];
    34             for(int j = k;j<n;j++){
    35                 a[i][j]-=l*a[k][j];
    36             }
    37             b[i]-=b[k]*l;
    38         }
    39     }
    40     ///回带过程
    41     for(int i = n-1;i>=0;i--){
    42             x[i] = b[i];
    43         for(int j = n-1;j>i;j--){
    44             x[i] -= a[i][j]*x[j];
    45         }
    46         x[i] /= a[i][i];
    47     }
    48     ///高斯消元法输出 
    49     printf("x[]:(gaussi)
    ");
    50      for(int i = 0;i<n;i++){
    51         printf("%.6f  ",x[i]);
    52     }
    53     cout << endl;
    54 
    55     //------------------------- 
    56 
    57     double maxs;
    58     ///消元过程
    59     for(int k = 0;k<n-1;k++){///消元行
    60         int cur = k;
    61         maxs = fabs(a[k][k]);
    62         for(int i = k;i<n;i++)if(maxs<fabs(a[i][k])){maxs = fabs(a[i][k]);cur = i;}///选主元
    63         if(cur != k){
    64             double temp;
    65             for(int j = k;j<n;j++){
    66                 temp = a[k][j];
    67                 a[k][j] = a[cur][j];
    68                 a[cur][j] = temp;
    69             }
    70             temp = b[k];b[k] = b[cur];b[cur] = temp;
    71         }
    72 
    73         for(int i = k+1;i<n;i++){///被消元行
    74             l = a[i][k]/a[k][k];
    75             for(int j = k;j<n;j++){
    76                 a[i][j]-=l*a[k][j];
    77             }
    78             b[i]-=b[k]*l;
    79         }
    80     }
    81 
    82     ///回带过程
    83     for(int i = n-1;i>=0;i--){
    84             x[i] = b[i];
    85         for(int j = n-1;j>i;j--){
    86             x[i] -= a[i][j]*x[j];
    87         }
    88         x[i] /= a[i][i];
    89     }
    90     ///高斯列主元素消元法输出 
    91      printf("x[]:(gaussi_row)
    ");
    92      for(int i = 0;i<n;i++){
    93         printf("%.6f  ",x[i]);
    94     }
    95     cout << endl;
    96     return 0;
    97 }
  • 相关阅读:
    超大文件排序
    透彻理解迪杰斯特拉算法
    Floyd-傻子也能看懂的弗洛伊德算法(转)
    轻松实现在浏览器上播放本地视频
    Caffeine缓存处理
    每日日报94
    每日日报93
    下载安装SQL server2008的步骤
    每日日报92
    每日日报91
  • 原文地址:https://www.cnblogs.com/DixinFan/p/9750582.html
Copyright © 2020-2023  润新知