using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace zblGauss1
{
class Program
{
static void Main(string[] args)
{
//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 } };
//double[,] a = { { 2, -1, 3, 1 }, { 4, 2, 5, 4 }, { 1, 2, 0, 7 } };
double[,] a = { { 0.01200, 0.01000, 0.1670, 0.6781 }, { 1.000, 0.8334, 5.910, 12.10 }, { , , 4.200, 981.0 } };
int n = a.GetLength();//数组a的第一维长度,即行数,3
double[] x = new double[n];//存放解的数组,初始值为0 // Gauss1(n, a, x);//调用Gauss1 方法计算,用顺序高斯消去法计算一元多次方程组
Gauss2(n, a, x);//列主元Gauss消去法
Console.WriteLine("方程的{0}个根为:",n);//输出方程组的根
for (int i = ; i < n; i++)
{
Console.Write("x{0}={1,10:F10}, ", i+, x[i]);
}
} //利用顺序高斯Gauss消元法求一元多次线性方程组的解
public static void Gauss1(int n, double[,] a, double[] x)//写了一个静态方法,方法可以在别的方法中直接调用,不必声明对象然后调用对象中的方法了
{
Console.WriteLine("-----------利用顺序高斯Gauss消元法求线性方程组的解----------");
Console.WriteLine("要计算的增广矩阵a为:");
printArray(n, a); //消元过程
for (int k = ; k < n - ; k++)//k=0 1 ,弄出来两个主元即可 ,两次大循环,此称为1层循环 ---主元---
{
for (int i = k; i < n - ; i++)//每个大循环中 要对主元素下面所有元素变化为零,, ---行--- ,i= 0 1 ,此称为2层循环
{
double m = a[i + , k] / a[k, k];//可能用到多次,在此将化零因子放入m中
for (int j = k; j <= n; j++) //2层循环中要对每行所有元素都做相同变化, ---列--- , j=
{
a[i + , j] = a[i + , j] - m * a[k, j];//由于第一行第一列元素不用化零,故首先从i+1开始,同列所以后面都是j,k处为主元行处
}
Console.WriteLine("第{0}个主元第{1}次变换后增广矩阵为:", k, i);
printArray(n, a);
}
Console.WriteLine();
} //回代过程
for (int k = n - ; k >= ; k--) //k=2 1 0 从最后一行开始往前迭代
{
double addResult = 0.0;//用于存放已知的未知数代入相应式子中之和,换一行计算时需要清零,故放在此处
for (int j = k; j < n - ; j++)//j=2 j 最大值为2,每行未知数可能不止一个,故需要遍历已知的未知数并代入
{
addResult = addResult + x[j + ] * a[k, j + ];//k代表计算的行,j+1代表的列,系数与解要对应,故都为 j+1
}
x[k] = (a[k, n] - addResult) / a[k, k];//本行的未知数用本行最右边数-本行已知未知数代入系数之差 再除以本未知数系数
} } public static void Gauss2(int n, double[,] a, double[] x)//写了一个静态方法,方法可以在别的方法中直接调用,不必声明对象然后调用对象中的方法了
{
Console.WriteLine("-----------利用顺序高斯Gauss消元法求线性方程组的解----------");
Console.WriteLine("要计算的增广矩阵a为:");
printArray(n, a); //消元过程
for (int k = ; k < n - ; k++)//k=0 1 ,弄出来两个主元即可 ,两次大循环,此称为1层循环 ---主元---
{
selectMainElement(n, k, a); // 选择主元素
Console.WriteLine("------------第{0}个主元选择主元素后的增广矩阵为:---------------",k,a);
printArray(n, a);
Console.WriteLine();
for (int i = k; i < n - ; i++)//每个大循环中 要对主元素下面所有元素变化为零,, ---行--- ,i= 0 1 ,此称为2层循环
{
double m = a[i + , k] / a[k, k];//可能用到多次,在此将化零因子放入m中
for (int j = k; j <= n; j++) //2层循环中要对每行所有元素都做相同变化, ---列--- , j=
{
a[i + , j] = a[i + , j] - m * a[k, j];//由于第一行第一列元素不用化零,故首先从i+1开始,同列所以后面都是j,k处为主元行处
}
Console.WriteLine("第{0}个主元第{1}次变换后增广矩阵为:", k, i);
printArray(n, a);
}
Console.WriteLine();
} //回代过程
for (int k = n - ; k >= ; k--) //k=2 1 0 从最后一行开始往前迭代
{
double addResult = 0.0;//用于存放已知的未知数代入相应式子中之和,换一行计算时需要清零,故放在此处
for (int j = k; j < n - ; j++)//j=2 j 最大值为2,每行未知数可能不止一个,故需要遍历已知的未知数并代入
{
addResult = addResult + x[j + ] * a[k, j + ];//k代表计算的行,j+1代表的列,系数与解要对应,故都为 j+1
}
x[k] = (a[k, n] - addResult) / a[k, k];//本行的未知数用本行最右边数-本行已知未知数代入系数之差 再除以本未知数系数
} }
public static void printArray(int n, double[,] a)
{
for (int i = ; i < n; i++)
{
for (int j = ; j <= n; j++)
{
Console.Write("{0,15:F6}", a[i, j]);
}
Console.WriteLine();
}
} /// <summary>
/// selectMainElement 用来选择出第k个主元及其所在列下面所有元素中最大的元素作为主元
/// </summary>
/// <param name="n">传递过来的矩阵a的行数</param>
/// <param name="k">现在主元所在行数</param>
/// <param name="a">传递过来的用来处理的矩阵</param>
public static void selectMainElement(int n, int k, double[,] a)
{
double t, mainElement;// mainElement用于保存主元素的值
int l;// 用于保存主元素所在的行号
mainElement = Math.Abs(a[k, k]); // 注意别忘了取绝对值
// 从第k行到第n行寻找第k列的主元素,记下主元素mainElement和所在的行号l
l = k;
for (int i = k + ; i < n; i++)
{
if (mainElement < Math.Abs(a[i, k]))
{
mainElement = Math.Abs(a[i, k]);
l = i; // 记下主元素所在的行号
}
}
// l是主元素所在的行。将l行与k行交换,每行前面的k个元素都是0,不必交换
if (l != k)
{
for (int j = k; j <= n; j++)
{
t = a[k, j]; a[k, j] = a[l, j]; a[l, j] = t;
}
}
} }
}

方法是在第k次消元之前,先对增广矩阵作第一种初等行变换,目的是把此主元所在列中找到包括主元在内及其下面元素中最大值作为新的主元,新主元与原先主元所在行交换,然后再用消去法,然后再计算。

C# 列主元素(Gauss)消去法 计算一元多次方程组的更多相关文章

  1. C# 顺序高斯(Gauss)消去法计算一元多次方程组

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. (原创)列主元Gauss消去法的通用程序

    import numpy as np np.set_printoptions(precision=5) A = np.array([[31., -13., 0., 0., 0., -10., 0., ...

  3. C语言简单计算一元二次方程

    #include <stdio.h> #include <math.h> /*计算一元二次方程的根*/ void Cal(double a,double b,double c) ...

  4. 计算一元一次方程Y=kX+b

    开发过程中用不到一元一次方程吗?非也,iOS开发中经常会遇到根据某个ScrollView动态偏移量的值来实时设置一个View的透明度,你敢说你不用一元一次方程你能搞定? 想把一个动画效果做好,经常会遇 ...

  5. python3 练手实例2 解一元二次方程组

    import math def y(): a,b,c=map(float,input('请输入一元二次方程式ax^2+bx+c=0,abc的值,用空格隔开:').split()) d=math.pow ...

  6. 高斯消去、追赶法 matlab

    1. 分别用Gauss消去法.列主元Gauss消去法.三角分解方法求解方程组 程序: (1)Guess消去法: function x=GaussXQByOrder(A,b) %Gauss消去法 N = ...

  7. NGUI之UIRoot——屏幕的自适应分辨率的计算

    //原来写在其他博客上的东西,搬迁 预备知识: 要明确的三个概念: 设计分辨率:在编辑器上开发UI使用的分辨率.我们所有的UI都是在这个分辨率下设计制作的. 显示区域分辨率:设备上所显示的UI区域在编 ...

  8. 用php计算行列式

    因为有课程设计要计算多元一次方程组,所以想编个程序实现,多元一次方程组的计算最系统的方法就是利用克拉默法则求解方程组,所以只需要编写一个类或者方法求出多元一次方程组系数行列式的值和和其他几个行列式,如 ...

  9. 三对角线性方程组(tridiagonal systems of equations)的求解

    三对角线性方程组(tridiagonal systems of equations)   三对角线性方程组,对于熟悉数值分析的同学来说,并不陌生,它经常出现在微分方程的数值求解和三次样条函数的插值问题 ...

随机推荐

  1. 关于华擎X99+5820K

    受到之前Intel  I7-5775C的困扰,于是直接整套平台换掉. 把Z97+I7-5775C+DDR3换成了X99+5820K+DDR4. 但是依然不理想,又是另外一个坑. 组装好后安装系统的过程 ...

  2. mysql出现“SELECT list is not in GROUP BY clause and contains nonaggregated column [duplicate]”错误提示

    项目跨平台时由于mysql设置的问题,原代码运行出现这个错误,此时把mysql设置改下就好了 sql_mode='NO_ENGINE_SUBSTITUTION'

  3. 给jar包进行数字签名(2014-06-28记)

    整理一下两年前用到的一些资料. 为了使Applet或者Java Web Start程序能够访问客户端本地资源,需要对Applet或者JWS程序jar包进行数据签名,当客户端打开Applet或者JWS程 ...

  4. Dynamics AX 2012 R2 AIF 错误 '/MicrosoftDynamicsAXAif60' 应用程序中的服务器错误

    Reinhard在使用AIF的时候,服务端收到如下错误提示之一,并触发InsufficientMemoryException 和ServiceActivationException异常,那么代表你服务 ...

  5. 微信JS SDK PHP Demo

    一.JSSDK类定义 <?php class JSSDK { private $appId; private $appSecret; public function __construct($a ...

  6. Mac平台上OpenCV开发环境搭建

    转载于:https://segmentfault.com/a/1190000000711132 linux 编译指定库.头文件的路径问题 http://blog.csdn.net/jiaweizou/ ...

  7. 大分享-hibernate,springmvc,easyui简要介绍

    近期公司一直在做项目,主要用到了springMVC,eseayui,hibernate几大框架.近一个月的时间,个人就目前自我知识给予分享. 很多公司使用mybatis产品,综合所述其最大优点是全SQ ...

  8. MySQL修改表一次添加多个列(字段)和索引

    MySQL修改表一次添加多个列(字段) ALTER TABLE table_name ADD func varchar(50), ADD gene varchar(50), ADD genedetai ...

  9. Sprint(第二天11.15)

    Sprint1第一阶段 1.类名:软件工程-第一阶段 2.时间:11.14-11.23 3.选题内容:点餐系统 4.团队博客地址:http://www.cnblogs.com/iamCarson/ 团 ...

  10. velocity常用语句速查表

    velocity常用语句 * 变量定义 #set($directoryRoot = "www" ) * #if($!list.size() != 0) //判断list不为空 #f ...