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

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

?? matrix.cpp

?? 該軟件為BP網(wǎng)絡的仿真軟件
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/////////////////////////////////////////////////////////////////////////////
// Matrix.cpp : Implementation of the class Matrix
//
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Matrix.h"
#include <math.h>
#include <stdlib.h>

#include <conio.h>
#include <stdio.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMatrix::CMatrix()
{
	m_nRow = 0;
	m_nCol = 0;

	m_pTMatrix.resize (m_nRow);
	for(unsigned int i=0; i < m_nRow; i++)
	{
		for(unsigned int j=0; j < m_nCol; j++)
		{
			m_pTMatrix[i].resize (m_nCol);
			m_pTMatrix[i][j] = (double) 0;
		}
	}
}


CMatrix::~CMatrix()
{	

}


CMatrix::CMatrix(unsigned int nRow,unsigned int nCol)
{
	// 動態(tài)分配二維數(shù)組
	TMatrix tMatrix;
	tMatrix.resize (nRow);

	for(unsigned int i=0; i < nRow; i++)
	{
		for(unsigned int j=0; j < nCol; j++)
		{
	        tMatrix[i].resize(nCol);
			tMatrix[i][j] = (double) 0;
		}
	}

	// 對對象變量賦值
	m_nRow	= nRow;
	m_nCol	= nCol;
	m_pTMatrix = tMatrix;

}


CMatrix::CMatrix(CMatrix& cMatrixB)
{
	// Initialize the variable
	m_nRow = cMatrixB.m_nRow ;
	m_nCol = cMatrixB.m_nCol ;
	m_pTMatrix = cMatrixB.m_pTMatrix ;

	// Copy Data
	for(unsigned int i=0; i< cMatrixB.m_nRow; i++)
	{
		for(unsigned int j=0; j < cMatrixB.m_nCol; j++)
		{
			m_pTMatrix [i][j] = cMatrixB.m_pTMatrix [i][j];
		}
	}
	
}


/////////////////////////////////////////////////////////////////////////////
// CMatrix member functions
//

CMatrix CMatrix::operator +(CMatrix& cMatrixB)
{
	// 要滿足矩陣相加的條件: 行列數(shù)目相等!
	if(m_nRow != cMatrixB.m_nRow || m_nCol != cMatrixB.m_nCol )
	{
		::AfxMessageBox (TEXT("執(zhí)行相加的兩個矩陣維數(shù)不相等!"),MB_OK | MB_ICONERROR);
	}

	CMatrix	cMatrix = *this;

	for(unsigned int i=0; i < m_nRow; i++)
	{
		for(unsigned int j=0; j < m_nCol; j++)
		{
			cMatrix.m_pTMatrix [i][j] = m_pTMatrix [i][j] + cMatrixB.m_pTMatrix [i][j];
		}
	}

	return	cMatrix;

}


CMatrix CMatrix::operator -(CMatrix& cMatrixB)
{
	// 要滿足矩陣相加的條件: 行列數(shù)數(shù)目相等!
	if(m_nRow != cMatrixB.m_nRow || m_nCol != cMatrixB.m_nCol )
	{
		::AfxMessageBox (TEXT("執(zhí)行相減的兩個矩陣維數(shù)不相等!"),MB_OK | MB_ICONERROR);
	}

	CMatrix cMatrix = *this;

	for(unsigned int i=0; i < m_nRow; i++)
	{
		for(unsigned int j=0; j < m_nCol; j++)
		{
			cMatrix.m_pTMatrix [i][j] = m_pTMatrix [i][j] - cMatrixB.m_pTMatrix [i][j];
		}
	}

	return	cMatrix;

}


CMatrix CMatrix::operator *(CMatrix& cMatrixB)
{
	if( m_nCol != cMatrixB.m_nRow )
	{
		::AfxMessageBox (TEXT("執(zhí)行相乘的兩個矩陣維數(shù)不滿足相乘的條件!"),MB_OK | MB_ICONERROR);
	}
	
	CMatrix cResultMatrix(m_nRow,cMatrixB.m_nCol);

	for(unsigned int i=0; i < m_nRow; i++)
	{
		for(unsigned int j=0; j < cMatrixB.m_nCol; j++)
		{
			for(unsigned int m=0; m < m_nCol; m++)
			{
				cResultMatrix.m_pTMatrix [i][j] +=  m_pTMatrix [i][m] * cMatrixB.m_pTMatrix [m][j];
			}
		}
	}

	return cResultMatrix;
}


CMatrix CMatrix::operator * (double nValue)
{
	CMatrix cMatrix = *this;

	for(unsigned int i=0; i < m_nRow; i++)
	{
		for(unsigned int j=0; j < m_nCol; j++)
		{
			cMatrix.m_pTMatrix [i][j] =m_pTMatrix [i][j] * nValue;
		}
	}

	return cMatrix;
}


CMatrix& CMatrix::operator =(CMatrix& cMatrixB)
{
	if( (m_nRow != cMatrixB.m_nRow) || (m_nCol != cMatrixB.m_nCol) )
	{
		::AfxMessageBox(TEXT("等號左右兩邊的矩陣的維數(shù)不相等!"),MB_OK | MB_ICONERROR);
		return *this;	// return invalid value
	}	

	// 給變量賦值
	m_nRow = cMatrixB.m_nRow ;
	m_nCol = cMatrixB.m_nCol ;
	m_pTMatrix = cMatrixB.m_pTMatrix ;

	// 賦值操作
	for(unsigned int i=0; i < cMatrixB.m_nRow; i++)
	{
		for(unsigned int j=0; j< cMatrixB.m_nCol; j++)
		{
			m_pTMatrix [i][j] = cMatrixB.m_pTMatrix [i][j];
		}
	}
	
	return *this;
}


CMatrix& CMatrix::operator += (CMatrix& cMatrixB)
{
	if(m_nRow != cMatrixB.m_nRow || m_nCol != cMatrixB.m_nCol )
	{
		//printf("錯誤!執(zhí)行相加的兩個矩陣維數(shù)不相等!\n");
		::AfxMessageBox (TEXT("運算符的兩邊矩陣的維數(shù)不相等!"),MB_OK | MB_ICONERROR);
		return *this;	// return invalid value
	}
	
	// 賦值操作
	for(unsigned int i=0; i < cMatrixB.m_nRow; i++)
	{
		for(unsigned int j=0; j< cMatrixB.m_nCol; j++)
		{
			m_pTMatrix [i][j] += cMatrixB.m_pTMatrix [i][j];
		}
	}
	
	return *this;

}


CMatrix CMatrix::Transpose()
{
	CMatrix cMatrix(m_nCol,m_nRow);

	for(unsigned int i=0; i < m_nRow; i++)
	{
		for(unsigned int j=0; j < m_nCol; j++)
		{
			cMatrix.m_pTMatrix [j][i] = m_pTMatrix [i][j];
		}
	}

	return cMatrix;
}

/////////////////////////////////////////////////////////////////////////////
// 將矩陣的所有的元素按列合成一列
//	例如:
//		matrix = [
//			1	2	3
//			4	5	6
//			7	8	9
//				]
//		CMatrix cMatrix = matrix.MergeColumnsToColumnVector();
//		cMatrix = 
//			[	1
//				4	
//				7
//				2
//				5
//				8
//				3
//				6
//				9	]
/////////////////////////////////////////////////////////////////////////////

CMatrix CMatrix::MergeColumnsToColumnVector()
{
	CMatrix cMatrix(m_nRow * m_nCol,(unsigned int)1);

	// 對矩陣賦值
	for(unsigned int j=0; j < m_nCol; j++)
	{
		for(unsigned int i=0; i < m_nRow; i++)
		{
			cMatrix.m_pTMatrix [i + j * m_nRow][(unsigned int)0] = m_pTMatrix [i][j];
		}
	}

	return cMatrix;

}

/////////////////////////////////////////////////////////////////////////////
// Get the total value of the matrix
/////////////////////////////////////////////////////////////////////////////

double CMatrix::GetTotalElementValue()
{
	double	nTotalValue = 0;

	for(unsigned int i=0; i < m_nRow; i++)
	{
		for( unsigned int j=0; j < m_nCol; j++)
		{
			nTotalValue += m_pTMatrix [i][j];
		}
	}

	return nTotalValue;
}

/////////////////////////////////////////////////////////////////////////////
// Get System Error
/////////////////////////////////////////////////////////////////////////////

double	CMatrix::GetSystemError() const
{
	double	nSystemError = 0;

	for(unsigned int i=0; i < m_nRow; i++)
	{
		for( unsigned int j=0; j < m_nCol; j++)
		{
			nSystemError += m_pTMatrix [i][j] * m_pTMatrix [i][j];
		}
	}

	return nSystemError;

}

/////////////////////////////////////////////////////////////////////////////
// Make all the matrix elements to be changed into absolute value
/////////////////////////////////////////////////////////////////////////////

CMatrix CMatrix::AbsoluteValue ()
{
	CMatrix cMatrix = *this;

	for(unsigned int i=0; i < m_nRow; i++)
	{
		for(unsigned int j=0; j < m_nCol; j++)
		{
			cMatrix.m_pTMatrix [i][j] = fabs( m_pTMatrix [i][j]);

		}

	}

	return cMatrix;

}


CMatrix CMatrix::Inverse()
{
	/////////////////////////////////////////////////////////////////////////
	// Using Gauss - Jordan Method
	// 參考書目: 計算機數(shù)值方法 --->施吉林 陳桂枝
	/////////////////////////////////////////////////////////////////////////

	/////////////////////////////////////////////////////////////////////////
	// 判斷是否是可逆陣:
	//		可逆陣一定是方陣!!!

	if ( m_nRow != m_nCol)
	{
		//printf("錯誤!矩陣的行列數(shù)不相等,是非可逆陣!\n");
		::AfxMessageBox (TEXT("矩陣的行列數(shù)不相等,是非可逆陣!"),MB_OK | MB_ICONERROR);
	}

	CMatrix cMatrix = *this;

	//***********************************************************************
	// 思路:(非常規(guī)思維!)
	//		動態(tài)分配整型數(shù)組(2*m_nCol)來存儲每次交換的行坐標的值
	//		不論有沒有行交換都記錄在數(shù)組中,
	//		1.沒進行行交換的兩個數(shù)據(jù)相等,在SwapMatrixRow()函數(shù)中
	//		檢測到兩個值相等立即返回,在SwapMatrixCol()函數(shù)中也一樣,
	//		檢測到兩個值相等立即返回,不占用系統(tǒng)資源;
	//		2.不相等的就交換
	//***********************************************************************
    
	//	分配內(nèi)存
	int *pIntArray = new int [2*m_nCol];

	// nSetp --- 約化步數(shù),按列展開	
	for(unsigned int k=0; k < cMatrix.m_nCol; k++)
	{
		/////////////////////////////////////////////////////////////////////
		// 進行行交換 ---> 游戲規(guī)則:
		// 為保證計算過程的數(shù)值穩(wěn)定性,在第k步約化時,先在{a(ik)}|i=k->n中選按
		// 模最大者作為約化主元素,并交換矩陣相應的行

		// 標記主元素
		double nMaxElement = cMatrix.m_pTMatrix [k][k];
		// 標記主元素所在的行數(shù)
		unsigned int nMainRow = k;

		for(unsigned int nCount = k+1; nCount < cMatrix.m_nCol; nCount++)
		{
			if( fabs(nMaxElement) < fabs(cMatrix.m_pTMatrix [nCount][k]) )
			{
				nMaxElement = cMatrix.m_pTMatrix [nCount][k];
				nMainRow = nCount;
			}
		}

		// 將欲交換的行數(shù)存在數(shù)組中
		pIntArray [2*k] = k;
		pIntArray [2*k+1] = nMainRow;
	

		// 交換行
		cMatrix.SwapMatrixRow(k,nMainRow);

		//Display();

		//	判斷是否是可逆陣
		if(cMatrix.m_pTMatrix [k][k] == 0)
		{
			//printf("錯誤!此矩陣為非可逆陣!\n");
			::AfxMessageBox (TEXT("此矩陣為非可逆陣,沒有逆矩陣!"),MB_OK | MB_ICONERROR);
		}

		cMatrix.m_pTMatrix [k][k] = 1/(cMatrix.m_pTMatrix [k][k]);
		

		// 算主列
		for(unsigned int i=0; i < cMatrix.m_nRow; i++)
		{	
			if( i != k)
				cMatrix.m_pTMatrix [i][k] = -(cMatrix.m_pTMatrix [k][k]) * (cMatrix.m_pTMatrix [i][k]); 
			
			//int nTempValue = m_pTMatrix [i][k];
			
		}
		
		//printf("\n");

		// 約化非主行
		for(unsigned int m=0; m < cMatrix.m_nRow; m++)
		{
			if ( m == k)
				continue;

			for(unsigned int n=0; n < cMatrix.m_nCol; n++)
			{
				if ( n == k)
					continue;

				cMatrix.m_pTMatrix [m][n] += cMatrix.m_pTMatrix [m][k] * cMatrix.m_pTMatrix [k][n];

				//printf("%10f ",m_pTMatrix [m][n]);

			}

			//printf("\n");

		}

		// 算主行
		for(unsigned int j=0; j < cMatrix.m_nCol; j++)
		{
			if( j != k)
				cMatrix.m_pTMatrix [k][j] = (cMatrix.m_pTMatrix [k][k]) * (cMatrix.m_pTMatrix [k][j]);

		}

	}

	
	/////////////////////////////////////////////////////////////////////////
	// 進行列交換 ---> 對交換行后的矩陣進行列交換 ---> 還原矩陣
	// 游戲規(guī)則:
	// 將開始矩陣中進行的行交換 ---> 現(xiàn)用相對應的列交換進行還原,即可得到所求的
	// 逆矩陣

	for(int i=2*m_nCol-1; i > 0; i--)
	{
		cMatrix.SwapMatrixCol(pIntArray[i],pIntArray[i-1]);
		i--;
	}

	delete []pIntArray;

	return cMatrix;

}


void CMatrix::SwapMatrixRow(unsigned int nRow1,unsigned int nRow2)
{
	if( nRow1 == nRow2)
		return;

	double *pArray = new double;

	for(unsigned int i=0; i < m_nCol; i++)
	{
		// Swap the datum of the two rows
		pArray[0] = m_pTMatrix [nRow1][i];
		m_pTMatrix [nRow1][i] = m_pTMatrix [nRow2][i];
		m_pTMatrix [nRow2][i] = pArray[0];
	}

	delete pArray;
}


void CMatrix::SwapMatrixCol(unsigned int nCol1,unsigned int nCol2)
{
	if( nCol1 == nCol2)
		return;

	double *pArray = new double;
	for(unsigned int i=0; i < m_nRow; i++)
	{
		// Swap the datum of the two columns
		pArray[0] = m_pTMatrix [i][nCol1];
		m_pTMatrix [i][nCol1] = m_pTMatrix [i][nCol2];
		m_pTMatrix [i][nCol2] = pArray[0];
	}
	
	delete pArray;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品私人影院| 欧美日韩一区二区三区在线 | av中文字幕不卡| 中文一区二区完整视频在线观看| 成人中文字幕合集| 亚洲天堂成人在线观看| 欧美性高清videossexo| 日韩中文字幕麻豆| 精品少妇一区二区三区在线播放 | 久久99精品国产麻豆不卡| 久久婷婷国产综合国色天香| 成人av一区二区三区| 亚洲免费在线播放| 欧美一级xxx| 成人久久久精品乱码一区二区三区 | 国产成人综合在线| 亚洲天堂网中文字| 91精品国产综合久久精品图片| 国产专区综合网| 亚洲欧美区自拍先锋| 日韩一区二区三区观看| 成人免费视频一区二区| 亚洲444eee在线观看| 久久欧美中文字幕| 欧美亚洲另类激情小说| 激情五月婷婷综合网| 亚洲色欲色欲www| 精品国产乱子伦一区| 一本到三区不卡视频| 韩国毛片一区二区三区| 一区二区三区在线播| 精品88久久久久88久久久| 欧美中文字幕久久| 国产乱淫av一区二区三区| 亚洲福中文字幕伊人影院| 久久久久9999亚洲精品| 在线播放日韩导航| 99re8在线精品视频免费播放| 美女视频黄免费的久久| 亚洲女同ⅹxx女同tv| 久久青草欧美一区二区三区| 欧美精品电影在线播放| 99国产精品国产精品毛片| 激情国产一区二区| 日韩精品国产精品| 亚洲一区日韩精品中文字幕| 国产精品视频线看| www日韩大片| 51精品秘密在线观看| 色综合久久中文字幕综合网| 国产成人午夜片在线观看高清观看| 亚洲成av人片在线观看无码| 自拍偷拍国产精品| 国产精品网站在线观看| 26uuu久久综合| 日韩欧美国产一区在线观看| 欧美疯狂性受xxxxx喷水图片| 91蜜桃传媒精品久久久一区二区| 春色校园综合激情亚洲| 激情欧美一区二区| 精品在线一区二区| 奇米777欧美一区二区| 亚洲.国产.中文慕字在线| 一区二区三区在线视频免费观看| 欧美激情综合五月色丁香| 国产亚洲精品aa午夜观看| 精品久久国产字幕高潮| 日韩精品一区国产麻豆| 欧美tk—视频vk| 欧美电视剧免费全集观看| 91精品国产麻豆| 欧美一区永久视频免费观看| 91麻豆精品国产综合久久久久久| 欧美喷潮久久久xxxxx| 欧美日韩国产bt| 欧美一区二区精品在线| 日韩一卡二卡三卡| 日韩视频免费观看高清完整版 | 欧美又粗又大又爽| 在线视频一区二区三| 在线看国产一区| 欧美三级资源在线| 欧美日韩高清在线播放| 欧美一区日本一区韩国一区| 欧美一区二区黄色| 日韩欧美色综合网站| 亚洲精品在线三区| 亚洲国产激情av| 一区二区三区中文字幕电影| 午夜精品福利一区二区蜜股av | 国产一区不卡在线| 国产夫妻精品视频| gogo大胆日本视频一区| 一本一道久久a久久精品| 欧美三级欧美一级| 日韩欧美你懂的| 国产女人18水真多18精品一级做| 中文字幕一区三区| 亚洲中国最大av网站| 日本中文在线一区| 国产精品一区二区三区四区| 成人av免费观看| 欧美四级电影网| 精品国产污网站| 国产精品福利一区| 天天综合网天天综合色| 精品午夜一区二区三区在线观看 | 国产精品99久久久久久久vr| 99天天综合性| 538prom精品视频线放| 日本一区二区三区免费乱视频| 亚洲免费成人av| 蜜桃视频在线观看一区二区| 成人一区二区三区在线观看| 欧美午夜在线一二页| 久久午夜老司机| 亚洲激情在线播放| 国产在线麻豆精品观看| 欧洲人成人精品| www国产成人免费观看视频 深夜成人网| 国产精品久久久久久久久晋中| 偷拍亚洲欧洲综合| 成人激情av网| 日韩视频不卡中文| 亚洲一区二区美女| 成人性视频网站| 宅男噜噜噜66一区二区66| 国产精品久99| 国产自产v一区二区三区c| 欧美日韩亚洲综合在线| 国产精品无人区| 国产综合久久久久影院| 欧美另类变人与禽xxxxx| 最新国产精品久久精品| 国模套图日韩精品一区二区| 在线成人午夜影院| 亚洲精品国产精华液| 国产精品伊人色| 日韩三区在线观看| 亚洲高清免费观看| 在线一区二区视频| 国产精品久久久久久亚洲毛片 | 欧美视频一区二区三区四区| 中文字幕国产一区| 国产真实精品久久二三区| 91麻豆精品国产91久久久使用方法| 中文字幕一区日韩精品欧美| 国产suv精品一区二区6| 精品国产露脸精彩对白| 日韩国产在线观看一区| 欧美色精品在线视频| 夜夜操天天操亚洲| 一本色道久久综合狠狠躁的推荐| 日本一区二区三区高清不卡| 国产精品亚洲第一| 2023国产精品自拍| 久久国产福利国产秒拍| 日韩欧美国产综合一区| 奇米精品一区二区三区在线观看一 | 一区二区三区波多野结衣在线观看 | 欧美日韩精品二区第二页| 亚洲黄色小说网站| 91看片淫黄大片一级| 中文字幕一区二区三区色视频| 国产白丝网站精品污在线入口| 久久精品水蜜桃av综合天堂| 国产精品亚洲第一区在线暖暖韩国 | 久久久99精品免费观看不卡| 国产一区视频导航| 久久久91精品国产一区二区三区| 国产一区二区三区四| 久久久.com| 99久久久精品| 亚洲精品国产一区二区精华液 | 经典一区二区三区| 精品成人在线观看| 国产福利一区二区三区在线视频| 久久久91精品国产一区二区三区| 成人激情午夜影院| 怡红院av一区二区三区| 欧美日韩精品一区二区三区| 捆绑调教一区二区三区| 久久精品视频在线看| www.在线欧美| 亚洲一区二区三区四区在线观看 | 一区二区三区在线观看国产| 欧美午夜精品理论片a级按摩| 亚洲国产wwwccc36天堂| 日韩欧美国产小视频| 国产高清不卡二三区| 樱花草国产18久久久久| 日韩午夜激情视频| 国产成人av一区二区三区在线| 综合色天天鬼久久鬼色| 欧美老年两性高潮| 国产综合色产在线精品| 亚洲乱码国产乱码精品精小说 | 琪琪久久久久日韩精品| 久久久不卡影院| 91丨porny丨国产|