亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? matrix.cs

?? csharp版常見數(shù)值計(jì)算源碼
?? CS
?? 第 1 頁 / 共 5 頁
字號(hào):
/*
 * 操作矩陣的類 Matrix
 * 
 * 周長發(fā)編制
 */

using System;

namespace 土地適宜評(píng)價(jià)系統(tǒng).Algorithm
{
	/**
	* 操作矩陣的類 Matrix

	* @author 周長發(fā)
	* @version 1.0
	*/
	public class Matrix 
	{
		private int	numColumns = 0;			// 矩陣列數(shù)
		private int	numRows = 0;			// 矩陣行數(shù)
		private double eps = 0.0;			// 缺省精度
		private double[] elements = null;	// 矩陣數(shù)據(jù)緩沖區(qū)

		/**
		 * 屬性: 矩陣列數(shù)
		 */
		public int Columns
		{
			get
			{
				return numColumns;
			}
		}

		/**
		 * 屬性: 矩陣行數(shù)
		 */
		public int Rows
		{
			get
			{
				return numRows;
			}
		}

		/**
		 * 索引器: 訪問矩陣元素
		 * @param row - 元素的行
		 * @param col - 元素的列
		 */
		public double this[int row, int col]
		{
			get
			{
				return elements[col + row * numColumns]; 
			}
			set
			{
				elements[col + row * numColumns] = value;
			}
		}

		/**
		 * 屬性: Eps
		 */
		public double Eps
		{
			get
			{
				return eps;
			}
			set
			{
				eps = value;
			}
		}

		/**
		 * 基本構(gòu)造函數(shù)
		 */
		public Matrix()
		{
			numColumns = 1;
			numRows = 1;
			Init(numRows, numColumns);
		}

		/**
		 * 指定行列構(gòu)造函數(shù)
		 * 
		 * @param nRows - 指定的矩陣行數(shù)
		 * @param nCols - 指定的矩陣列數(shù)
		 */
		public Matrix(int nRows, int nCols)
		{
			numRows = nRows;
			numColumns = nCols;
			Init(numRows, numColumns);
		}

		/**
		 * 指定值構(gòu)造函數(shù)
		 * 
		 * @param value - 二維數(shù)組,存儲(chǔ)矩陣各元素的值
		 */
		public Matrix(double[,] value)
		{
			numRows = value.GetLength(0);
			numColumns = value.GetLength(1);
			double[] data = new double[numRows * numColumns];
			int k = 0;
			for (int i=0; i<numRows; ++i)
			{
				for (int j=0; j<numColumns; ++j)
				{
					data[k++] = value[i, j]; 
				}
			}
			Init(numRows, numColumns);
			SetData(data);
		}

		/**
		 * 指定值構(gòu)造函數(shù)
		 * 
		 * @param nRows - 指定的矩陣行數(shù)
		 * @param nCols - 指定的矩陣列數(shù)
		 * @param value - 一維數(shù)組,長度為nRows*nCols,存儲(chǔ)矩陣各元素的值
		 */
		public Matrix(int nRows, int nCols, double[] value)
		{
			numRows = nRows;
			numColumns = nCols;
			Init(numRows, numColumns);
			SetData(value);
		}

		/**
		 * 方陣構(gòu)造函數(shù)
		 * 
		 * @param nSize - 方陣行列數(shù)
		 */
		public Matrix(int nSize)
		{
			numRows = nSize;
			numColumns = nSize;
			Init(nSize, nSize);
		}

		/**
		 * 方陣構(gòu)造函數(shù)
		 * 
		 * @param nSize - 方陣行列數(shù)
		 * @param value - 一維數(shù)組,長度為nRows*nRows,存儲(chǔ)方陣各元素的值
		 */
		public Matrix(int nSize, double[] value)
		{
			numRows = nSize;
			numColumns = nSize;
			Init(nSize, nSize);
			SetData(value);
		}

		/**
		 * 拷貝構(gòu)造函數(shù)
		 * 
		 * @param other - 源矩陣
		 */
		public Matrix( Matrix other)
		{
			numColumns = other.GetNumColumns();
			numRows = other.GetNumRows();
			Init(numRows, numColumns);
			SetData(other.elements);
		}

		/**
		 * 初始化函數(shù)
		 * 
		 * @param nRows - 指定的矩陣行數(shù)
		 * @param nCols - 指定的矩陣列數(shù)
		 * @return bool, 成功返回true, 否則返回false
		 */
		public bool Init(int nRows, int nCols)
		{
			numRows = nRows;
			numColumns = nCols;
			int nSize = nCols*nRows;
			if (nSize < 0)
				return false;

			// 分配內(nèi)存
			elements = new double[nSize];
		
			return true;
		}

		/**
		 * 設(shè)置矩陣運(yùn)算的精度
		 * 
		 * @param newEps - 新的精度值
		 */
		public void SetEps(double newEps)
		{
			eps = newEps;
		}
	
		/**
		 * 取矩陣的精度值
		 * 
		 * @return double型,矩陣的精度值
		 */
		public double GetEps()
		{
			return eps;
		}

		/**
		 * 重載 + 運(yùn)算符
		 * 
		 * @return Matrix對(duì)象
		 */
		public static Matrix operator +(Matrix m1, Matrix m2)
		{
			return m1.Add(m2);
		}

		/**
		 * 重載 - 運(yùn)算符
		 * 
		 * @return Matrix對(duì)象
		 */
		public static Matrix operator -(Matrix m1, Matrix m2)
		{
			return m1.Subtract(m2);
		}

		/**
		 * 重載 * 運(yùn)算符
		 * 
		 * @return Matrix對(duì)象
		 */
		public static Matrix operator *(Matrix m1, Matrix m2)
		{
			return m1.Multiply(m2);
		}

		/**
		 * 重載 double[] 運(yùn)算符
		 * 
		 * @return double[]對(duì)象
		 */
		public static implicit operator double[](Matrix m)
		{
			return m.elements;
		}

		/**
		 * 將方陣初始化為單位矩陣
		 * 
		 * @param nSize - 方陣行列數(shù)
		 * @return bool 型,初始化是否成功
		 */
		public bool MakeUnitMatrix(int nSize)
		{
			if (! Init(nSize, nSize))
				return false;

			for (int i=0; i<nSize; ++i)
				for (int j=0; j<nSize; ++j)
					if (i == j)
						SetElement(i, j, 1);

			return true;
		}

		/**
		 * 將矩陣各元素的值轉(zhuǎn)化為字符串, 元素之間的分隔符為",", 行與行之間有回車換行符
		 * @return string 型,轉(zhuǎn)換得到的字符串
		 */
		public override string ToString() 
		{
			return ToString(",", true);
		}
	
		/**
		 * 將矩陣各元素的值轉(zhuǎn)化為字符串
		 * 
		 * @param sDelim - 元素之間的分隔符
		 * @param bLineBreak - 行與行之間是否有回車換行符
		 * @return string 型,轉(zhuǎn)換得到的字符串
		 */
		public string ToString(string sDelim, bool bLineBreak) 
		{
			string s="";

			for (int i=0; i<numRows; ++i)
			{
				for (int j=0; j<numColumns; ++j)
				{
					string ss = GetElement(i, j).ToString("F");
					s += ss;

					if (bLineBreak)
					{
						if (j != numColumns-1)
							s += sDelim;
					}
					else
					{
						if (i != numRows-1 || j != numColumns-1)
							s += sDelim;
					}
				}
				if (bLineBreak)
					if (i != numRows-1)
						s += "\r\n";
			}

			return s;
		}

		/**
		 * 將矩陣指定行中各元素的值轉(zhuǎn)化為字符串
		 * 
		 * @param nRow - 指定的矩陣行,nRow = 0表示第一行
		 * @param sDelim - 元素之間的分隔符
		 * @return string 型,轉(zhuǎn)換得到的字符串
		 */
		public string ToStringRow(int nRow,  string sDelim) 
		{
			string s = "";

			if (nRow >= numRows)
				return s;

			for (int j=0; j<numColumns; ++j)
			{
				string ss = GetElement(nRow, j).ToString("F");
				s += ss;
				if (j != numColumns-1)
					s += sDelim;
			}

			return s;
		}

		/**
		 * 將矩陣指定列中各元素的值轉(zhuǎn)化為字符串
		 * 
		 * @param nCol - 指定的矩陣行,nCol = 0表示第一列
		 * @param sDelim - 元素之間的分隔符
		 * @return string 型,轉(zhuǎn)換得到的字符串
		 */
		public string ToStringCol(int nCol,  string sDelim /*= " "*/) 
		{
			string s = "";

			if (nCol >= numColumns)
				return s;

			for (int i=0; i<numRows; ++i)
			{
				string ss = GetElement(i, nCol).ToString("F");
				s += ss;
				if (i != numRows-1)
					s += sDelim;
			}

			return s;
		}

		/**
		 * 設(shè)置矩陣各元素的值
		 * 
		 * @param value - 一維數(shù)組,長度為numColumns*numRows,存儲(chǔ)
		 *	              矩陣各元素的值
		 */
		public void SetData(double[] value)
		{
			elements = (double[])value.Clone();
		}

		/**
		 * 設(shè)置指定元素的值
		 * 
		 * @param nRow - 元素的行
		 * @param nCol - 元素的列
		 * @param value - 指定元素的值
		 * @return bool 型,說明設(shè)置是否成功
		 */
		public bool SetElement(int nRow, int nCol, double value)
		{
			if (nCol < 0 || nCol >= numColumns || nRow < 0 || nRow >= numRows)
				return false;						// array bounds error
		
			elements[nCol + nRow * numColumns] = value;

			return true;
		}

		/**
		 * 獲取指定元素的值
		 * 
		 * @param nRow - 元素的行
		 * @param nCol - 元素的列
		 * @return double 型,指定元素的值
		 */
		public double GetElement(int nRow, int nCol) 
		{
			return elements[nCol + nRow * numColumns] ;
		}

		/**
		 * 獲取矩陣的列數(shù)
		 * 
		 * @return int 型,矩陣的列數(shù)
		 */
		public int	GetNumColumns() 
		{
			return numColumns;
		}

		/**
		 * 獲取矩陣的行數(shù)
		 * @return int 型,矩陣的行數(shù)
		 */
		public int	GetNumRows() 
		{
			return numRows;
		}

		/**
		 * 獲取矩陣的數(shù)據(jù)
		 * 
		 * @return double型數(shù)組,指向矩陣各元素的數(shù)據(jù)緩沖區(qū)
		 */
		public double[] GetData() 
		{
			return elements;
		}

		/**
		 * 獲取指定行的向量
		 * 
		 * @param nRow - 向量所在的行
		 * @param pVector - 指向向量中各元素的緩沖區(qū)
		 * @return int 型,向量中元素的個(gè)數(shù),即矩陣的列數(shù)
		 */
		public int GetRowVector(int nRow, double[] pVector) 
		{
			for (int j=0; j<numColumns; ++j)
				pVector[j] = GetElement(nRow, j);

			return numColumns;
		}

		/**
		 * 獲取指定列的向量
		 * 
		 * @param nCol - 向量所在的列
		 * @param pVector - 指向向量中各元素的緩沖區(qū)
		 * @return int 型,向量中元素的個(gè)數(shù),即矩陣的行數(shù)
		 */
		public int GetColVector(int nCol, double[] pVector) 
		{
			for (int i=0; i<numRows; ++i)
				pVector[i] = GetElement(i, nCol);

			return numRows;
		}

		/**
		 * 給矩陣賦值
		 * 
		 * @param other - 用于給矩陣賦值的源矩陣
		 * @return Matrix型,陣與other相等
		 */
		public Matrix SetValue(Matrix other)
		{
			if (other != this)
			{
				Init(other.GetNumRows(), other.GetNumColumns());
				SetData(other.elements);
			}

			// finally return a reference to ourselves
			return this ;
		}

		/**
		 * 判斷矩陣否相等
		 * 
		 * @param other - 用于比較的矩陣
		 * @return bool 型,兩個(gè)矩陣相等則為true,否則為false
		 */
		public override bool Equals(object other) 
		{
			Matrix matrix = other as Matrix;
			if (matrix == null)
				return false;

			// 首先檢查行列數(shù)是否相等
			if (numColumns != matrix.GetNumColumns() || numRows != matrix.GetNumRows())
				return false;

			for (int i=0; i<numRows; ++i)
			{
				for (int j=0; j<numColumns; ++j)
				{
					if (Math.Abs(GetElement(i, j) - matrix.GetElement(i, j)) > eps)
						return false;
				}
			}

			return true;
		}

		/**
		 * 因?yàn)橹貙懥薊quals,因此必須重寫GetHashCode
		 * 
		 * @return int型,返回復(fù)數(shù)對(duì)象散列碼
		 */
		public override int GetHashCode()
		{
			double sum = 0;
			for (int i=0; i<numRows; ++i)
			{
				for (int j=0; j<numColumns; ++j)
				{
					sum += Math.Abs(GetElement(i, j));
				}
			}
			return (int)Math.Sqrt(sum);
		}

		/**
		 * 實(shí)現(xiàn)矩陣的加法
		 * 
		 * @param other - 與指定矩陣相加的矩陣
		 * @return Matrix型,指定矩陣與other相加之和
		 * @如果矩陣的行/列數(shù)不匹配,則會(huì)拋出異常
		 */
		public Matrix Add(Matrix other) 
		{
			// 首先檢查行列數(shù)是否相等
			if (numColumns != other.GetNumColumns() ||
				numRows != other.GetNumRows())
				throw new Exception("矩陣的行/列數(shù)不匹配。");

			// 構(gòu)造結(jié)果矩陣
			Matrix	result = new Matrix(this) ;		// 拷貝構(gòu)造
		
			// 矩陣加法
			for (int i = 0 ; i < numRows ; ++i)
			{
				for (int j = 0 ; j <  numColumns; ++j)
					result.SetElement(i, j, result.GetElement(i, j) + other.GetElement(i, j)) ;
			}

			return result ;
		}

		/**
		 * 實(shí)現(xiàn)矩陣的減法
		 * 
		 * @param other - 與指定矩陣相減的矩陣
		 * @return Matrix型,指定矩陣與other相減之差
		 * @如果矩陣的行/列數(shù)不匹配,則會(huì)拋出異常
		 */
		public Matrix Subtract(Matrix other) 
		{
			if (numColumns != other.GetNumColumns() ||
				numRows != other.GetNumRows())
				throw new Exception("矩陣的行/列數(shù)不匹配。");

			// 構(gòu)造結(jié)果矩陣
			Matrix	result = new Matrix(this) ;		// 拷貝構(gòu)造

			// 進(jìn)行減法操作
			for (int i = 0 ; i < numRows ; ++i)
			{
				for (int j = 0 ; j <  numColumns; ++j)
					result.SetElement(i, j, result.GetElement(i, j) - other.GetElement(i, j)) ;
			}

			return result ;
		}

		/**
		 * 實(shí)現(xiàn)矩陣的數(shù)乘
		 * 
		 * @param value - 與指定矩陣相乘的實(shí)數(shù)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品视频在线| 国产99久久久国产精品潘金| 韩国成人福利片在线播放| 色综合久久久久综合体桃花网| 欧美视频第二页| 国产午夜亚洲精品理论片色戒| 亚洲精品国产a| 国产精品一区二区黑丝| 欧美久久久久久久久久| 国产精品色噜噜| 精品亚洲porn| 欧美高清一级片在线| 成人欧美一区二区三区| 国产在线视频一区二区三区| 欧美日韩一级视频| 亚洲天堂a在线| 99久久婷婷国产综合精品| 久久综合九色综合97婷婷| 肉肉av福利一精品导航| 色视频一区二区| 亚洲欧美自拍偷拍色图| 国产精品综合网| 欧美精品一区二区在线观看| 亚洲午夜免费福利视频| 在线日韩国产精品| 亚洲另类春色校园小说| 97久久超碰国产精品电影| 国产亚洲1区2区3区| 国产精品一色哟哟哟| 欧美成人精品1314www| 日韩成人精品在线| 欧美美女网站色| 日韩国产在线一| 欧美日韩国产精品成人| 亚洲一区二区三区四区在线免费观看 | 在线一区二区三区四区五区| 国产精品久久久久久久久快鸭| 国产精品影音先锋| 久久中文娱乐网| 国产mv日韩mv欧美| 国产精品久久久久三级| 成人sese在线| 亚洲视频一区在线| 欧美亚洲国产一卡| 视频一区欧美精品| 精品美女一区二区三区| 狠狠狠色丁香婷婷综合激情 | 国产欧美一区二区三区在线老狼 | 制服丝袜亚洲播放| 日韩av中文字幕一区二区三区| 欧美丰满美乳xxx高潮www| 久久激情五月婷婷| 日本一区二区高清| 97精品国产露脸对白| 亚洲国产一区二区三区青草影视 | 欧美丝袜丝交足nylons图片| 香蕉久久夜色精品国产使用方法 | 亚洲综合免费观看高清完整版| 欧美色欧美亚洲另类二区| 日韩av不卡在线观看| 久久精品一区八戒影视| 91在线观看污| 日本成人在线视频网站| 国产日本欧洲亚洲| 在线看国产日韩| 国内精品视频666| 亚洲日本丝袜连裤袜办公室| 欧美电影在线免费观看| 国产精品66部| 午夜国产不卡在线观看视频| 26uuu另类欧美亚洲曰本| 91美女片黄在线观看| 蜜桃久久久久久| 亚洲三级电影网站| 精品久久久影院| 欧美日韩在线亚洲一区蜜芽| 经典一区二区三区| 亚洲一二三级电影| 亚洲国产精品国自产拍av| 欧美亚洲国产一卡| 成人黄色一级视频| 三级精品在线观看| 亚洲自拍偷拍图区| 国产精品欧美经典| 精品99999| 在线不卡a资源高清| 99re66热这里只有精品3直播 | 日韩国产欧美三级| 亚洲天堂精品在线观看| 26uuu成人网一区二区三区| 色屁屁一区二区| 成人国产亚洲欧美成人综合网| 免费精品视频最新在线| 亚洲国产精品久久人人爱| 国产精品拍天天在线| 精品久久五月天| 日韩你懂的在线播放| 欧美色欧美亚洲另类二区| 成人免费观看视频| 激情久久五月天| 欧美片在线播放| 91成人在线观看喷潮| 国产成人精品三级麻豆| 蜜乳av一区二区| 国产精品久久久久久久久免费桃花| 这里只有精品视频在线观看| 91老司机福利 在线| 国产乱国产乱300精品| 日韩二区在线观看| 亚洲国产aⅴ成人精品无吗| 亚洲美女淫视频| 国产精品久久久久国产精品日日| 精品捆绑美女sm三区| 91精品国产综合久久蜜臀| 在线视频欧美精品| 成人网男人的天堂| 99久久99久久精品免费观看| 韩国一区二区视频| 麻豆成人在线观看| 日本不卡123| 亚洲精品国产视频| 性做久久久久久| 亚洲自拍欧美精品| 一区二区三区不卡视频在线观看| 久久精品人人做人人综合| 欧美一级xxx| 欧美日韩国产美| 日韩视频一区二区在线观看| 欧美精品在线一区二区三区| 在线观看亚洲a| 欧美日韩高清一区二区三区| 欧美性三三影院| 在线一区二区观看| 欧美日韩中文字幕精品| 日本黄色一区二区| 欧美午夜寂寞影院| 欧美另类videos死尸| 色综合天天综合给合国产| 欧美日韩免费电影| 欧美一级xxx| 2019国产精品| 中文成人av在线| 亚洲欧洲性图库| 奇米四色…亚洲| 另类小说综合欧美亚洲| 九九视频精品免费| 国产精品1区2区3区| 波多野结衣视频一区| 成人小视频在线| 欧美一区午夜视频在线观看| 欧美一级一级性生活免费录像| 欧美va亚洲va国产综合| 中文一区一区三区高中清不卡| 国产精品乱人伦一区二区| 亚洲免费观看视频| 日韩中文字幕一区二区三区| 久久66热re国产| 波多野结衣亚洲| 91精品国产福利| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲女人的天堂| 视频一区欧美精品| 国产麻豆9l精品三级站| 欧美日韩国产另类一区| 国产亚洲人成网站| 亚洲激情网站免费观看| 久久国产精品免费| 99视频精品在线| 国产精品久久久久一区二区三区 | 国产精品天美传媒沈樵| 亚洲精品国产精华液| 久久国产精品露脸对白| 91丨九色porny丨蝌蚪| 91行情网站电视在线观看高清版| 精品国产凹凸成av人导航| 亚洲精品成人精品456| 久久爱另类一区二区小说| 91免费视频大全| 久久色.com| 午夜精品免费在线观看| av资源网一区| 精品国产乱码久久| 亚洲高清免费观看高清完整版在线观看| 老司机一区二区| 欧美日韩一区二区三区免费看| 欧美va亚洲va| 美国十次综合导航| 欧美性猛交xxxxxx富婆| 欧美经典一区二区三区| 热久久国产精品| 欧美日韩中字一区| 国产精品久久久久久久久晋中 | 亚洲三级视频在线观看| 亚洲国产日日夜夜| 欧美日韩一区二区在线观看| 中文字幕第一区| 国产激情精品久久久第一区二区| 51午夜精品国产| 午夜精品久久久久久久| 欧美亚洲综合色|