C# 列主元素(Gauss)消去法 计算一元多次方程组
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)消去法 计算一元多次方程组的更多相关文章
- C# 顺序高斯(Gauss)消去法计算一元多次方程组
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- (原创)列主元Gauss消去法的通用程序
import numpy as np np.set_printoptions(precision=5) A = np.array([[31., -13., 0., 0., 0., -10., 0., ...
- C语言简单计算一元二次方程
#include <stdio.h> #include <math.h> /*计算一元二次方程的根*/ void Cal(double a,double b,double c) ...
- 计算一元一次方程Y=kX+b
开发过程中用不到一元一次方程吗?非也,iOS开发中经常会遇到根据某个ScrollView动态偏移量的值来实时设置一个View的透明度,你敢说你不用一元一次方程你能搞定? 想把一个动画效果做好,经常会遇 ...
- python3 练手实例2 解一元二次方程组
import math def y(): a,b,c=map(float,input('请输入一元二次方程式ax^2+bx+c=0,abc的值,用空格隔开:').split()) d=math.pow ...
- 高斯消去、追赶法 matlab
1. 分别用Gauss消去法.列主元Gauss消去法.三角分解方法求解方程组 程序: (1)Guess消去法: function x=GaussXQByOrder(A,b) %Gauss消去法 N = ...
- NGUI之UIRoot——屏幕的自适应分辨率的计算
//原来写在其他博客上的东西,搬迁 预备知识: 要明确的三个概念: 设计分辨率:在编辑器上开发UI使用的分辨率.我们所有的UI都是在这个分辨率下设计制作的. 显示区域分辨率:设备上所显示的UI区域在编 ...
- 用php计算行列式
因为有课程设计要计算多元一次方程组,所以想编个程序实现,多元一次方程组的计算最系统的方法就是利用克拉默法则求解方程组,所以只需要编写一个类或者方法求出多元一次方程组系数行列式的值和和其他几个行列式,如 ...
- 三对角线性方程组(tridiagonal systems of equations)的求解
三对角线性方程组(tridiagonal systems of equations) 三对角线性方程组,对于熟悉数值分析的同学来说,并不陌生,它经常出现在微分方程的数值求解和三次样条函数的插值问题 ...
随机推荐
- 鸟哥的linux私房菜学习记录之系统设定工具与硬件检测
这部分没啥用,就不记录了,关于服务器的在服务器篇
- "未能找到类型或命名空间名称",引用dll的时候出错
当前项目是.net2.0框架,引用的dll是 .net 4.5框架,引用后编译时报错“未能找到类型或命名空间名称”. 当前项目 右键-->应用程序-->目标框架 改为 .net frame ...
- MySQL functions, IF, CASE
MySQLTutorial官网 IF function syntax: IF(expr,if_true_expr,if_false_expr) CASE expression syntax: CASE ...
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式
本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实操经历记录而成,碰到些出入,以及个别地方依据个人的习惯,所以在一定程度上未能保持原文的完整性,还望原著者海涵. 因原文中有较多的 ...
- 如何使官方提供的AppRTCDemo 运行在自己搭建的server(官方提供的apprtc)上(官方的server源码)
原文转自 http://stackoverflow.com/questions/21085261/apprtcdemo-with-local-server-works-between-browsers ...
- ajax 代码
function ajax(){ var aj=null; if(window.ActiveXObject){ aj = new ActiveXObject("Microsoft.XMLHT ...
- Network-POJ3694并查集+LCA
Network Time Limit: 5000MS Memory Limit: 65536K Description A network administrator manages ...
- -webkit-transform:scale(1.04)放大缩小效果
<p>[鼠标移动进去图片放大一倍效果:运用了-webkit-transform:scale(1.04)效果]</p> 如图:鼠标移动上去的时候图片放大一倍的效果, <!D ...
- [转]C#读写TEXT文件
1.使用FileStream读写文件 文件头: using System; using System.Collections.Generic; using System.Text; using Sys ...
- StudyFoxCMS-6
1.phpstrom中安装emmet File=>Settings=>Plugins=>右侧搜索框搜索“emmet”=>点击下方中间按钮“Browse repositories ...