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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? matrix.cs

?? 使用C#編輯的一些矩陣運算的源程序
?? CS
?? 第 1 頁 / 共 5 頁
字號:
/*
 * 操作矩陣的類 Matrix
 * 
 * 周長發編制
 */

using System;

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

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

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

		/**
		 * 屬性: 矩陣行數
		 */
		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;
			}
		}

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

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

		/**
		 * 指定值構造函數
		 * 
		 * @param value - 二維數組,存儲矩陣各元素的值
		 */
		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);
		}

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

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

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

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

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

			// 分配內存
			elements = new double[nSize];
		
			return true;
		}

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

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

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

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

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

		/**
		 * 將方陣初始化為單位矩陣
		 * 
		 * @param nSize - 方陣行列數
		 * @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;
		}

		/**
		 * 將矩陣各元素的值轉化為字符串, 元素之間的分隔符為",", 行與行之間有回車換行符
		 * @return string 型,轉換得到的字符串
		 */
		public override string ToString() 
		{
			return ToString(",", true);
		}
	
		/**
		 * 將矩陣各元素的值轉化為字符串
		 * 
		 * @param sDelim - 元素之間的分隔符
		 * @param bLineBreak - 行與行之間是否有回車換行符
		 * @return string 型,轉換得到的字符串
		 */
		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;
		}

		/**
		 * 將矩陣指定行中各元素的值轉化為字符串
		 * 
		 * @param nRow - 指定的矩陣行,nRow = 0表示第一行
		 * @param sDelim - 元素之間的分隔符
		 * @return string 型,轉換得到的字符串
		 */
		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;
		}

		/**
		 * 將矩陣指定列中各元素的值轉化為字符串
		 * 
		 * @param nCol - 指定的矩陣行,nCol = 0表示第一列
		 * @param sDelim - 元素之間的分隔符
		 * @return string 型,轉換得到的字符串
		 */
		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;
		}

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

		/**
		 * 設置指定元素的值
		 * 
		 * @param nRow - 元素的行
		 * @param nCol - 元素的列
		 * @param value - 指定元素的值
		 * @return bool 型,說明設置是否成功
		 */
		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] ;
		}

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

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

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

		/**
		 * 獲取指定行的向量
		 * 
		 * @param nRow - 向量所在的行
		 * @param pVector - 指向向量中各元素的緩沖區
		 * @return int 型,向量中元素的個數,即矩陣的列數
		 */
		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 - 指向向量中各元素的緩沖區
		 * @return int 型,向量中元素的個數,即矩陣的行數
		 */
		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 型,兩個矩陣相等則為true,否則為false
		 */
		public override bool Equals(object other) 
		{
			Matrix matrix = other as Matrix;
			if (matrix == null)
				return false;

			// 首先檢查行列數是否相等
			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;
		}

		/**
		 * 因為重寫了Equals,因此必須重寫GetHashCode
		 * 
		 * @return int型,返回復數對象散列碼
		 */
		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);
		}

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

			// 構造結果矩陣
			Matrix	result = new Matrix(this) ;		// 拷貝構造
		
			// 矩陣加法
			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 ;
		}

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

			// 構造結果矩陣
			Matrix	result = new Matrix(this) ;		// 拷貝構造

			// 進行減法操作
			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 ;
		}

		/**
		 * 實現矩陣的數乘
		 * 
		 * @param value - 與指定矩陣相乘的實數

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品欧美久久久久一区二区| 日韩毛片视频在线看| 欧美国产一区视频在线观看| 亚洲一区二区中文在线| 激情国产一区二区| 欧美三日本三级三级在线播放| 久久久精品免费网站| 中文字幕字幕中文在线中不卡视频| 青青草原综合久久大伊人精品| 成人av午夜电影| 久久精品在线免费观看| 日韩综合小视频| 91美女在线视频| 国产亚洲欧美日韩俺去了| 偷拍日韩校园综合在线| 夫妻av一区二区| 精品国产免费一区二区三区香蕉| 亚洲精品视频在线看| 国产精品资源在线看| 欧美日本一区二区三区四区| 国产精品白丝在线| 国产宾馆实践打屁股91| 精品久久久三级丝袜| 亚洲aⅴ怡春院| 欧美性一级生活| 亚洲黄网站在线观看| 成人综合在线观看| 欧美精品一区二区精品网| 日本最新不卡在线| 777a∨成人精品桃花网| 亚洲国产精品久久人人爱蜜臀 | 国产精品毛片大码女人| 国产麻豆视频一区| 久久综合久久综合久久综合| 久久成人免费日本黄色| 欧美伦理影视网| 亚洲电影第三页| 欧美日本高清视频在线观看| 午夜欧美2019年伦理| 欧美视频三区在线播放| 午夜天堂影视香蕉久久| 欧美三级中文字| 天堂精品中文字幕在线| 6080午夜不卡| 久久国产成人午夜av影院| 日韩美女主播在线视频一区二区三区| 午夜电影网一区| 日韩免费高清av| 国产中文字幕一区| 国产精品国产三级国产普通话三级 | 日本不卡一区二区三区高清视频| 欧洲精品在线观看| 日韩在线一区二区三区| 日韩欧美色综合| 国产乱人伦精品一区二区在线观看| 久久久久99精品国产片| 不卡av免费在线观看| 中文字幕亚洲一区二区va在线| 91豆麻精品91久久久久久| 亚洲午夜私人影院| 欧美xxx久久| 99精品黄色片免费大全| 日韩中文字幕亚洲一区二区va在线| 久久日一线二线三线suv| 国产99久久久国产精品潘金网站| 国产精品麻豆视频| 欧美日韩三级一区二区| 日本视频中文字幕一区二区三区| 欧美精品一区男女天堂| 色国产综合视频| 蜜芽一区二区三区| 国产嫩草影院久久久久| 日本韩国一区二区三区| 蜜臀av一区二区| 亚洲女厕所小便bbb| 日韩欧美二区三区| 色94色欧美sute亚洲线路一久 | 精品sm捆绑视频| 日本乱码高清不卡字幕| 久久精品国产一区二区三| 中文字幕佐山爱一区二区免费| 日韩一区二区不卡| 一本色道a无线码一区v| 国产精品一级在线| 日日夜夜免费精品| 一区二区三区四区不卡在线 | 99久久精品99国产精品| 免费在线看成人av| 亚洲精品大片www| 26uuu精品一区二区| 欧美偷拍一区二区| 成人午夜电影网站| 精品一区二区在线视频| 五月婷婷综合在线| 亚洲精品免费一二三区| 国产日韩欧美制服另类| 欧美成人艳星乳罩| 欧美一区二区三区啪啪| 欧美日韩一二三区| 日本丶国产丶欧美色综合| 成人黄色免费短视频| 精久久久久久久久久久| 久久福利资源站| 久久国产精品99精品国产| 日本麻豆一区二区三区视频| 婷婷久久综合九色综合绿巨人| 亚洲精品视频观看| 亚洲女人****多毛耸耸8| 中文字幕亚洲一区二区va在线| 国产日韩欧美一区二区三区乱码| 精品88久久久久88久久久| 日韩精品一区二区三区三区免费| 欧美日韩在线三区| 欧美视频你懂的| 在线成人免费视频| 欧美一区二区二区| 欧美精品第1页| 91精品中文字幕一区二区三区| 欧美一区二区三区思思人| 日韩精品在线网站| 精品免费视频.| 久久久99精品免费观看不卡| 久久婷婷一区二区三区| 久久久久久99精品| 国产精品欧美综合在线| 国产精品白丝在线| 亚洲国产成人va在线观看天堂| 香蕉加勒比综合久久| 蜜臀av国产精品久久久久| 免费不卡在线视频| 国产露脸91国语对白| 不卡欧美aaaaa| 在线欧美日韩国产| 欧美美女网站色| 精品蜜桃在线看| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲国产欧美在线| 日本网站在线观看一区二区三区 | 色综合久久综合网97色综合 | 久久亚洲综合av| 国产精品视频免费| 亚洲国产综合色| 蜜臀久久99精品久久久久久9| 国产成人综合自拍| 色吊一区二区三区| 欧美一区二区三区免费在线看 | 91小视频免费看| 欧美猛男gaygay网站| 久久蜜桃一区二区| 夜夜亚洲天天久久| 蜜臀av一级做a爰片久久| 国产成人精品亚洲日本在线桃色| 97久久超碰国产精品电影| 91.成人天堂一区| 国产精品久久久久一区二区三区| 亚洲一区av在线| 国产v日产∨综合v精品视频| 91电影在线观看| 日本一区二区三区高清不卡| 亚洲国产精品影院| 福利电影一区二区三区| 欧美精品色一区二区三区| 国产精品狼人久久影院观看方式| 午夜精品福利一区二区蜜股av| 成人黄色片在线观看| 精品毛片乱码1区2区3区| 亚洲最大成人网4388xx| 国产成人av一区二区三区在线| 欧美色图片你懂的| 中文字幕精品三区| 麻豆成人免费电影| 欧美亚洲另类激情小说| 日本一区二区视频在线| 免费高清在线一区| 色猫猫国产区一区二在线视频| 日本一区二区免费在线| 蜜乳av一区二区| 777亚洲妇女| 亚洲最色的网站| 一本一本大道香蕉久在线精品 | 国产欧美精品一区二区色综合朱莉| 性做久久久久久| 91久久奴性调教| 国产精品久久久久三级| 国产精品99久久久久久似苏梦涵| 欧美一区二区美女| 亚洲国产精品一区二区久久| 91欧美一区二区| 中文字幕av资源一区| 国产精品99久久久久久久女警 | 亚洲福利视频三区| 91日韩一区二区三区| 中文字幕一区免费在线观看| 国产精品18久久久久久久久| 精品国产99国产精品| 美腿丝袜在线亚洲一区| 日韩欧美精品在线视频| 久久精品72免费观看| 精品国产网站在线观看| 久久精品国产亚洲5555|