⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guass.cs

📁 C#编写的Guass消去法
💻 CS
字号:
using System;

namespace szfx
{
	/// <summary>
	/// Summary description for Guass.
	/// </summary>
	public class Guass : szfx.matrix 
		//Guass消去法
	{
		public Guass()
		{
			//
			// TODO: Add constructor logic here
			//
		}

		//找出行列式a中j列的最大行
		public int FindMaxiall(float[,] a,int j1)
		{
			int maxi,maxj;
			int i,j;
			float temp;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			int i_return = -1;
			j = j1;
			if( j > maxj )
				return -1;
			j--;
			temp = a[0,j];
			for(i=1;i<maxi;i++)
			{
				if(temp < a[i,j])
				{
					temp = a[i,j];
					i_return = i;
				}
			}
			return i_return;
		}
		//找出行列式a中j级子式的最大行
		int FindMaxi(float[,] a,int j1)
		{
			int maxi,maxj;
			int i,j;
			float temp;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			int i_return = -1;
			j = j1;
			if( j > maxj )
				return -1;
			j--;
			temp = a[0,j];
			for(i=j+1;i<maxi;i++)
			{
				if(temp < a[i,j])
				{
					temp = a[i,j];
					i_return = i;
				}
			}
			return i_return;
		}


		//将对角增广阵返回行列式的值,并就得向量x在增广部分
		static float ansA(float[,] a)
		{
			int maxi,maxj,i,j,k;
			float r_f;
			r_f = 1f;
			maxi =a.GetLength(0);
			maxj = a.GetLength(1);
			for(i = 0;i < maxi;i++)
			{
				a[i,maxj - 1] = a[i,maxj - 1] / a[i,i];
				r_f *= a[i,i];
			}
			return r_f;
		}

		//打印增广矩阵的x向量
		public static void printx(float[,] a)
		{
			int maxi,maxj,i,j;
			float x;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			for(i = 0;i < maxi;i++)
				Console.WriteLine("X{0}:{1}",i,a[i,maxj - 1]);
		}
		//一行乘以x
		bool divide_i(float[,] a,int i,float x)
		{
			int maxi,maxj,j;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			for(j = 0;j <maxj;j++)
				a[i,j] = a[i,j] * x;
			return true;
		}
		//一列乘以x
		bool divide_j(float[,] a,int j,float x)
		{
			int maxi,maxj,i;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			for(i = 0;i <maxi;i++)
				a[i,j] = a[i,j] * x;
			return true;
		}
		//一行加x
		bool add_i(float[,] a,int i,float x)
		{
			int maxi,maxj,j;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			if(i > maxi)
				return false;
			i--;
			for(j = 0;j < maxj;j++)
				a[i,j] = a[i,j] + x;
			return true;
		}
		//一列加x
		bool add_j(float[,] a,int j,float x)
		{
			int maxi,maxj,i;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			if(j > maxj)
				return false;
			j--;
			for(i = 0;i <maxi;i++)
				a[i,j] = a[i,j] + x;
			return true;
		}

		//a为增广阵
		 public static float isdet(float[,] a)
		{
			eliminant(a);
			eliminant2(a);
			return ansA(a);
		}

		static float[,] athwart(float[,] a) //求矩阵的逆
		{
			int maxi,maxj,i,j;
			float[,] b;
			float det;
			b = copyAtoB(a);
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			eliminant(b);
			eliminant2(b);
			det = ansA(b);
			for(i=0;i<maxi;i++)
			{
				b[i,i] = det - b[i,i];
			}
			return b;
		}
		static float[,] copyAtoB(float[,] a)
		{
			int maxi,maxj,i,j;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			float[,] b = new float[maxi,maxj];
			for(i = 0;i < maxi;i++)
				for(j = 0;j < maxj;j++)
					b[i,j] = a[i,j];
			b = disBtoA(b);
			return b;
		}
		static float[,] disBtoA(float[,] a)//将增广阵变成普通阵
		{
			int maxi,maxj,i,j;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1)-1;
			float[,] b = new float[maxi,maxj];
			for(i = 0;i < maxi;i++)
				for(j = 0;j < maxj;j++)
					b[i,j] = a[i,j];
			return b;		
		}

		public static bool run()
		{
			float[,] A ={{3,4,1},{2,5,3},{1,4,6}};
			float[] b ={1,2,3};
			float[,] B;
			float[,] Bn;			
			float det;
			B = Guass.addAb(A,b);//增广阵B;
			printhls(B);
			det = isdet(B);
			printx(B); //打印增广阵的X向量组
			Console.WriteLine("det = {0}",det);
			Bn = athwart(B); //球矩阵的逆
			printhls(Bn);
			return true;
		}
	}
}


























⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -