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

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

?? matrix.cs

?? 使用C#編輯的一些矩陣運(yùn)算的源程序
?? CS
?? 第 1 頁 / 共 5 頁
字號(hào):
/*
 * 操作矩陣的類 Matrix
 * 
 * 周長(zhǎng)發(fā)編制
 */

using System;

namespace CSharpAlgorithm.Algorithm
{
	/**
	* 操作矩陣的類 Matrix

	* @author 周長(zhǎng)發(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ù)組,長(zhǎng)度為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ù)組,長(zhǎng)度為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ù)組,長(zhǎng)度為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一区二区三区免费野_久草精品视频
91社区在线播放| av动漫一区二区| 一区二区三区在线视频观看| 亚洲精品一区二区三区香蕉| 欧美日韩一区二区在线观看视频 | 免费在线观看视频一区| 亚洲综合色区另类av| 亚洲免费观看在线视频| 亚洲日本电影在线| 亚洲欧美日韩小说| 亚洲另类在线一区| 亚洲素人一区二区| 亚洲特级片在线| 亚洲欧美一区二区久久| 亚洲黄网站在线观看| 樱桃视频在线观看一区| 一区二区在线免费| 亚洲五月六月丁香激情| 在线亚洲高清视频| 日韩高清欧美激情| 精品免费国产二区三区| 日韩欧美亚洲国产另类| 久久综合色8888| 国产亚洲福利社区一区| 日本一区二区三区视频视频| 国产日产欧美一区二区视频| 18成人在线视频| 日韩在线卡一卡二| 国内成人精品2018免费看| 国产一区高清在线| 99国产欧美久久久精品| 欧美日韩精品一区二区三区蜜桃| 欧美一区二区视频在线观看| 国产欧美一区二区精品性| 亚洲视频香蕉人妖| 日本强好片久久久久久aaa| 久久精工是国产品牌吗| 99riav久久精品riav| 日韩一区二区影院| 亚洲色图视频免费播放| 日韩精品欧美精品| 成人天堂资源www在线| 欧美老女人在线| 亚洲国产精品99久久久久久久久| 亚洲国产精品天堂| 成av人片一区二区| 精品成人私密视频| 午夜精品爽啪视频| 国产99久久久国产精品| 精品久久久久久亚洲综合网| 亚洲精品视频一区二区| 国产99久久久久| 久久综合久久综合久久| 日韩国产一区二| 欧洲av一区二区嗯嗯嗯啊| 中文字幕成人在线观看| 国产精品资源在线看| 欧美一级xxx| 日韩国产欧美在线视频| 欧美私模裸体表演在线观看| 亚洲欧美偷拍另类a∨色屁股| 国产a久久麻豆| 国产精品乱码人人做人人爱| 国产精品12区| 中文字幕av一区二区三区免费看| 麻豆成人综合网| 精品日韩欧美一区二区| 裸体歌舞表演一区二区| 精品国产亚洲一区二区三区在线观看 | 欧美三区在线观看| 亚洲一区二区不卡免费| 欧美日韩国产免费一区二区 | 91蜜桃视频在线| 亚洲永久免费av| 欧美日韩国产区一| 日本午夜一区二区| 国产亚洲美州欧州综合国| www.欧美色图| 日韩精品福利网| 国产清纯白嫩初高生在线观看91| 国产成人免费在线| 亚洲人吸女人奶水| 日韩免费观看2025年上映的电影| 国产一区日韩二区欧美三区| 亚洲三级小视频| 一本色道久久综合亚洲精品按摩 | 国产精品亲子乱子伦xxxx裸| 欧美最猛性xxxxx直播| 久久精品国产亚洲高清剧情介绍| 国产日产精品一区| 欧美色精品在线视频| 国产精品主播直播| 亚洲午夜久久久久| 国产人妖乱国产精品人妖| 在线观看91视频| 岛国av在线一区| 日日夜夜一区二区| 一区二区在线电影| 国产精品午夜久久| 欧美精品一区二区三区在线播放| 色综合天天天天做夜夜夜夜做| 麻豆91在线看| 婷婷久久综合九色综合伊人色| 国产日产欧美一区二区视频| 日韩欧美成人一区二区| 欧美日韩一级视频| 欧美视频在线不卡| 91黄色免费网站| 色中色一区二区| 99久久99久久久精品齐齐| 国产一区二区按摩在线观看| 日韩**一区毛片| 日本成人在线看| 香蕉久久一区二区不卡无毒影院| 亚洲综合在线电影| 亚洲午夜激情av| 亚洲欧美日韩国产综合在线| 亚洲同性gay激情无套| 中文字幕永久在线不卡| 亚洲视频一区二区在线| 一区二区三区精品在线| 夜夜嗨av一区二区三区中文字幕| 日韩理论片中文av| 亚洲自拍都市欧美小说| 午夜av一区二区| 久久9热精品视频| 成人理论电影网| 色综合视频一区二区三区高清| 色欧美片视频在线观看| 欧美日韩一区 二区 三区 久久精品| 欧美日韩国产成人在线免费| 欧美变态凌虐bdsm| 亚洲欧美日本在线| 免费观看在线综合色| 懂色av一区二区三区蜜臀| 91视频观看视频| 91精品国产欧美一区二区成人| 精品免费一区二区三区| 亚洲丝袜精品丝袜在线| 秋霞午夜av一区二区三区| 国产精品一区不卡| 欧美三日本三级三级在线播放| 精品日韩在线观看| 夜夜嗨av一区二区三区| 国产福利不卡视频| 3atv在线一区二区三区| 亚洲一区免费视频| 亚洲精品在线观看视频| 亚洲免费在线播放| 欧美三级蜜桃2在线观看| 亚洲国产另类精品专区| www.亚洲在线| 国产情人综合久久777777| 美女视频第一区二区三区免费观看网站| www.亚洲激情.com| 久久奇米777| 九色porny丨国产精品| 一本久久综合亚洲鲁鲁五月天 | 久久综合久久综合久久综合| 国产一区91精品张津瑜| 精品国精品国产尤物美女| 青青草97国产精品免费观看| 欧美三级一区二区| 日韩成人一级片| 日韩一级在线观看| 精品一区二区三区欧美| 久久久精品综合| 北条麻妃一区二区三区| 亚洲欧美成人一区二区三区| 欧美亚洲国产bt| 亚洲chinese男男1069| 夜夜精品浪潮av一区二区三区| 91美女视频网站| 国产尤物一区二区在线 | 午夜精品久久久久影视| 欧美另类一区二区三区| 国产盗摄精品一区二区三区在线| 中文字幕日韩精品一区| 欧美三日本三级三级在线播放| 美女视频免费一区| 国产精品美日韩| 欧美日韩一区 二区 三区 久久精品| 日产欧产美韩系列久久99| 欧美国产精品一区二区三区| 欧美色窝79yyyycom| 成人a区在线观看| 麻豆91精品视频| 成人免费在线视频| 久久免费电影网| 欧美片在线播放| 欧美无人高清视频在线观看| 国产成人丝袜美腿| 日韩高清国产一区在线| 1区2区3区国产精品| 精品国产百合女同互慰| 欧美精品欧美精品系列| 99久久精品国产观看| 国产精品一区专区| 日本伊人色综合网| 日韩电影在线观看一区|