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

📄 matrix.cs

📁 C#编写的二重积分算法-数值分析算法
💻 CS
字号:
using System;

namespace szfx
{
	/// <summary>
	/// Summary description for matrix.
	/// </summary>
	public class matrix
	//矩阵类
	{
		public matrix()
		{
			//
			// TODO: Add constructor logic here
			//
		}
		public static void printhls(float[,] a)//打印行列式
		{
			int maxi,maxj,i,j;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			for(i=0;i<maxi;i++)
			{
				for(j=0;j<maxj;j++)
				{
					if(a[i,j] < 0.00001)
						a[i,j] = 0;
					Console.Write("{0,-9}\t",a[i,j]);
				}
				Console.WriteLine();
			}
		}
		public static bool liezhuyuan(float[,] a)
		{
			int maxi,n;
			n = a.GetLength(0);
			for(int k = 0 ;k < n;k++)
			{
                maxi = FindMaxi(a,k);
				if(maxi != k)
				{
					changeitoj(a,k,maxi);
				}
			}
			return true;
		}
		//将矩阵A与一个向量组b合并成为一个增广矩阵
		//这个函数有一个问题,我想将原来传入的A变成增广矩阵a,并负值给A,将它传回
		//可是函数执行完了就变回去了,我想得到一个传回的增广矩阵我应改怎么做呀
		public static float[,] addAb(float[,] A,float[] b)
		{
			int maxi,maxj,maxk,i,j;
			maxi = A.GetLength(0);
			maxj = A.GetLength(1);
			maxk = b.Length;
			if( maxi != maxk)
				return null;
			float[,] a =new float[maxi,maxj+1];
			for(i = 0;i < maxi;i++)
				for(j = 0;j < maxj;j++)
					a[i,j] = A[i,j];
			for(i = 0;i < maxi;i++)
				a[i,maxj] = b[i];
			A = a;
			return a;
		}
		//找出行列式a中j列的最大行
		public static 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级子式的最大行
		public static 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;
		}
		//交换矩阵a的i1行i2行
		public static bool changeitoj(float[,] a,int i1,int i2)
		{
			int maxi,maxj;
			int j;
			float temp;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			if((i1 > maxi) || i2 >maxi)
				return false;
			i1--;i2--;
			for(j = 0;j < maxj;j++)
			{
				temp = a[i2,j];
				a[i2,j] = a[i1,j];
				a[i1,j] = temp;
			}
			return true;
		}
		//将增广矩阵a化为上三角增广阵
		public static bool eliminant(float[,] a)
		{
			int maxi,maxj,i,j;
			float aik,akk;
			maxi =a.GetLength(0);
			maxj = a.GetLength(1);
			for(j = 0;j < (maxj - 1);j++)
			{
				akk = a[j,j];
				for(i = (j + 1);i < maxi;i++)
				{
					aik = a[i,j];
					add_i1toi2(a,j,-aik/akk,i);
					//					add_i(a,i,-aik);
				}
			}
			return true;
		}
		//将上三角增广阵化为对角增广阵
		public static float abs(float a)
		{
			if( a < 0)
				a = -a;
			return a;
		}
		public static bool eliminant2(float[,] a)
		{
			int maxi,maxj,i,j;
			float aik,akk;
			maxi =a.GetLength(0);
			maxj = a.GetLength(1);
			//			i = maxi - 1;
			j = maxj - 2;
			for(;j >= 0;j--)
			{
				akk = a[j,j] ;
				for( i = (j - 1);i >= 0;i--)
				{
					aik = a[i,j];
					add_i1toi2(a,j,-aik/akk,i);
				}
			}
			return true;
		}
		//行列式i1行k倍加到i2行
		public static bool add_i1toi2(float[,] a,int i1,float k,int i2)
		{
			int maxi,maxj,j;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			if((i1 > maxi) || (i2 > maxi))
				return false;
			for(j = 0;j < maxj;j++)
				a[i2,j] = a[i1,j] * k + a[i2,j];
			return true;
		}
		
		//行列式j1列k倍加到j2列
		public bool add_j1toj2(float[,] a,int j1,float k,int j2)
		{
			int maxi,maxj,i;
			maxi = a.GetLength(0);
			maxj = a.GetLength(1);
			if((j1 > maxj) || (j2 > maxj))
				return false;
			for(i = 0;i < maxi;i++)
				a[i,j2] = a[i,j1] * k + a[i,j2];
			return true;
		}
	}
}

⌨️ 快捷键说明

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