博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 顺序高斯(Gauss)消去法计算一元多次方程组
阅读量:6207 次
发布时间:2019-06-21

本文共 3085 字,大约阅读时间需要 10 分钟。

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace zblGauss1 8 { 9     class Program10     {11         static void Main(string[] args)12         {13             double[,] a = { { 8.1, 2.3, -1.5, 6.1 }, { 0.5, -6.23, 0.87, 2.3 }, { 2.5, 1.5, 10.2, 1.8 } };14             //double[,] a = { { 2, -1, 3, 1 }, { 4, 2, 5, 4 }, { 1, 2, 0, 7 } };15             int n = a.GetLength(0);//数组a的第一维长度,即行数,316             double[] x = new double[n];//存放解的数组,初始值为017 18             Gauss1(n, a, x);//调用Gauss1 方法计算用顺序高斯消去法计算一元多次方程组19             Console.WriteLine("方程的根为:");//输出方程组的根20             for (int i = 0; i < n; i++)21             {22                 Console.Write("x{0}={1,10:F10}, ", i, x[i]);23             }24         }25 26         //利用顺序高斯Gauss消元法求一元多次线性方程组的解27         public static void Gauss1(int n, double[,] a, double[] x)//写了一个静态方法,方法可以在别的方法中直接调用,不必声明对象然后调用对象中的方法了28         {29             Console.WriteLine("-----------利用顺序高斯Gauss消元法求线性方程组的解----------");30             Console.WriteLine("要计算的增广矩阵a为:");31             printArray(n, a);32 33             //消元过程34             for (int k = 0; k < n - 1; k++)//k=0 1 ,弄出来两个主元即可 ,两次大循环,此称为1层循环  ---主元---35             {36                 for (int i = k; i < n - 1; i++)//每个大循环中   要对主元素下面所有元素变化为零,,  ---行---  ,i= 0 1 ,此称为2层循环37                 {38                     double m = a[i + 1, k] / a[k, k];//可能用到多次,在此将化零因子放入m中39                     for (int j = k; j <= n; j++) //2层循环中要对每行所有元素都做相同变化,   ---列---    ,  j=40                     {41                         a[i + 1, j] = a[i + 1, j] - m * a[k, j];//由于第一行第一列元素不用化零,故首先从i+1开始,同列所以后面都是j,k处为主元行处42                     }43                     Console.WriteLine("第{0}个主元第{1}次变换后增广矩阵为:", k, i);44                     printArray(n, a);45                 }46                 Console.WriteLine();47             }48 49             //回代过程50             for (int k = n - 1; k >= 0; k--) //k=2 1 0 从最后一行开始往前迭代51             {52                 double addResult = 0.0;//用于存放已知的未知数代入相应式子中之和,换一行计算时需要清零,故放在此处53                 for (int j = k; j < n - 1; j++)//j=2   j 最大值为2,每行未知数可能不止一个,故需要遍历已知的未知数并代入54                 {55                     addResult = addResult + x[j + 1] * a[k, j + 1];//k代表计算的行,j+1代表的列,系数与解要对应,故都为 j+156                 }57                 x[k] = (a[k, n] - addResult) / a[k, k];//本行的未知数用本行最右边数-本行已知未知数代入系数之差 再除以本未知数系数58             }59 60         }61         public static void printArray(int n, double[,] a)62         {63             for (int i = 0; i < n; i++)64             {65                 for (int j = 0; j <= n; j++)66                 {67                     Console.Write("{0,10:F6}", a[i, j]);68                 }69                 Console.WriteLine();70             }71 72 73         }74     }75 }

 

高斯消去法由消元和回代两个过程组成。消元就是对增广矩阵做有限次的初等行变换,使它的系数矩阵部分变为一个上三角矩阵。所用的初等行变换主要有两种:第一种,交换两行的位置;第二种,用一个数乘某一行加到另一行上。

经过n-1次消元后,原增广矩阵变为行阶梯矩阵。

 

高斯消去法分为顺序高斯消去法和列主元素消去法两种。

顺序高斯消去法:在消元过程中对增广矩阵只做前述的第二种初等行变换就形成了顺序Gauss消去法。

 

原创, 转载请注明出处,谢谢。

转载于:https://www.cnblogs.com/zhubinglong/p/5897283.html

你可能感兴趣的文章
Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 详解
查看>>
ACL访问控制
查看>>
Zabbix监控(十六):分布式监控-Zabbix Proxy
查看>>
Windows下使用VisualSVN Server搭建SVN服务器
查看>>
重设MYSQL数据库ROOT用户的密码
查看>>
安装linux的准备
查看>>
linux下编译安装MySQL5.6新版本
查看>>
Linux:ps命令以及进程状态详解
查看>>
Soot生成控制流图
查看>>
Spring 的持久化实例(JDBC, JdbcTemplate、HibernateDaoSupport、JdbcDaoSupport、SqlSessionDaoSupport等)...
查看>>
前端解决跨域问题的8种方案
查看>>
验证码(一)
查看>>
如何利用好新浪微博
查看>>
datastage 重启 续
查看>>
从Zabbix数据库中提取内存采集的数据,做内存使用率计算
查看>>
什么是SAS
查看>>
nginx优化与防盗链
查看>>
Openssl的证书格式转换
查看>>
linux 下实现负载均衡群集(NAT方式)
查看>>
我的友情链接
查看>>