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

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

?? matrix.h

?? 實現復數矩陣的基本運算
?? H
?? 第 1 頁 / 共 3 頁
字號:
/*! @file
********************************************************************************
<PRE>
模塊名       : 實現復數矩陣的基本運算
文件名       : matrix.h
文件實現功能 : 實現復數矩陣的基本運算,并能實現復數矩陣的求逆、快速傅里葉變換和奇異值分解。
作者         : 陳鵬飛
版本         : V1.0
--------------------------------------------------------------------------------
多線程安全性 : <是/否>[,說明]
異常時安全性 : <是/否>[,說明]
--------------------------------------------------------------------------------
備注         : 該復數矩陣模板只適用于float和double型復數矩陣。不能用于實數矩陣。
--------------------------------------------------------------------------------
修改記錄 : 
日 期        版本     修改人              修改內容
2009/04/16  V1.01      <陳鵬飛>    <模板的規范化>
</PRE>

*******************************************************************************/
#pragma once //避免頭文件重復定義

#include <cassert>
#include <valarray>
#include <complex>	
#include <cmath>
#include <cstdlib>
#include <float.h>
using namespace std;

// RTTI
#include <typeinfo> 

typedef complex<float>					 COMPLEX_FLOAT;
typedef complex<double>				    COMPLEX_DOUBLE;

const float            FLOATERROR = 1.0e-6F;
const double          DOUBLEERROR = 1.0e-15;
const long double LONGDOUBLEERROR = 1.0e-30;

const double       GOLDENSECTION = 0.618033399; //黃金分割常數(1.0-0.381966)
#define DBL_MIN         2.2250738585072014e-308 /* min positive value */
#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */

//取x符號,+-或0
template <class T>		
T Sgn(const T& x)
{
	return x < T(0) ? T(-1) : (x > T(0) ? T(1) : T(0));
}

//絕對值
template <class T>
long double Abs(const T& x)
{
    complex<long double> cld(x);
	long double ldAbs = abs(x);
	return(ldAbs);
}

//比較兩float浮點數相等
bool FloatEqual(float lhs, float rhs)
{
	if (Abs(lhs - rhs) < FLOATERROR)
		return true;
	else
		return false;
}

//比較兩float浮點數不相等
bool FloatNotEqual(float lhs, float rhs)
{
	if (Abs(lhs - rhs) >= FLOATERROR)
		return true;
	else
		return false;
}

//比較兩double浮點數相等
bool FloatEqual(double lhs, double rhs)
{
	if (Abs(lhs - rhs) < DOUBLEERROR)
		return true;
	else
		return false;
}

//比較兩double浮點數不相等
bool FloatNotEqual(double lhs, double rhs)
{
	if (Abs(lhs - rhs) >= DOUBLEERROR)
		return true;
	else
		return false;
}

//比較兩long double浮點數相等
bool FloatEqual(long double lhs, long double rhs)
{
	if (Abs(lhs - rhs) < LONGDOUBLEERROR)
		return true;
	else
		return false;
}

//比較兩long double浮點數不相等
bool FloatNotEqual(long double lhs, long double rhs)
{
	if (Abs(lhs - rhs) >= LONGDOUBLEERROR)
		return true;
	else
		return false;
}

//求x與y的最小值,返回小者
template <class T>
T Min(const T& x, const T& y)
{
	if(x < y)
		return x;
	else
		return y;
}

//求x與y的最大值,返回大者
template <class T>
T Max(const T& x, const T& y)
{
	if(x > y)
		return x;
	else
		return y;
}

/*! @class
********************************************************************************
<PRE>
類名稱   : 復數矩陣模板類
功能     : 實現復數矩陣的基本運算 
--------------------------------------------------------------------------------
備注     : <該類只能用來實現float和double型復數矩陣的基本運算>  
--------------------------------------------------------------------------------
作者     : 陳鵬飛
</PRE>
*******************************************************************************/
template <class _Ty>
class CMatrix
{
	typedef CMatrix<_Ty> _MatTy;
	typedef _Ty _vTy;

public:

//構造函數一(參數1, 2分別為矩陣的行與列數)
/******
矩陣類matrix的構造函數一
構造函數中出現的m_Datas為valarray類的對象,申請stRow * stCol個單元,
單元內沒賦值。對數組對象m_Datas使用了valarray類的構造函數:
explicit valarray(size_t n)
對私有變量m_stRow和m_stCol分別賦初值stRow, stCol。
******/
	CMatrix(size_t stRow, size_t stCol)
		: m_Datas(stRow * stCol),
		m_stRow(stRow), m_stCol(stCol)
	{
		m_Datas.resize(GetRowNum() * GetColNum(), _vTy(0));
		/*
	構造函數中出現的m_Datas為valarray類的對象,若在函數體內調用的
	resize(size_t n, const T& c = T())函數有兩個參數(參閱valarray中的
	定義),第一個參數申請有矩陣行*列那么多元素個數的存儲空間,第二個
	參數對這些申請的空間賦予具有模式T的初值0。如果不調用該函數,則缺省
	情況下m_Datas長度為0;另外,調用該函數但不使用第二個參數,則不會對
	m_Datas的任何一個元素賦初值。
	*/
	}

//構造函數二(參數1為指向矩陣的指針,參數2, 3為矩陣行與列數)
/******
矩陣類matrix的構造函數二
對私有變量m_stRow和m_stCol分別賦初值stRow, stCol。
對數組對象m_Datas使用了valarray類的構造函數:
valarray(const _Ty *p, size_t n)
m_Datas初始化的第一參數為矩陣rhs指針,第二個參數為rhs的元素總個數,
即rhs行數*列數
******/
	CMatrix(const _vTy* rhs, size_t stRow, size_t stCol)
		: m_Datas(rhs, stRow * stCol),
		m_stRow(stRow), m_stCol(stCol)
	{
	}

//構造函數三(拷貝構造函數,參數為對矩陣matrix的引用)
/******
矩陣類matrix的構造函數三
用引用矩陣rhs的數組對象m_Datas初始化matrix所定義對象的m_Datas,
用引用矩陣rhs的行數rhs.GetRowNum()和列數rhs.GetColNum()分別初始化私
有變量m_stRow和m_stCol
******/
	CMatrix(const _MatTy& rhs)
		: m_Datas(rhs.m_Datas),
		m_stRow(rhs.GetRowNum()), m_stCol(rhs.GetColNum())
	{
	}


	size_t GetRowNum() const	//返回矩陣行數的函數
	{
		return m_stRow;
	}

	size_t GetColNum() const	//返回矩陣列數的函數
	{
		return m_stCol;
	}

	////////////////////////////////////////////////
	// 重載運算符
	// 索引行列(寫入)
	_vTy* operator [] (size_t stRow)
	{
		assert(stRow != 0);
		assert(stRow < GetRowNum() + 1);	//斷定stRow不超實際矩陣行值
		
		_vTy *p = &m_Datas[(stRow-1) * GetColNum()];

		return p;
	}

	// 索引行列(只讀)
	const _vTy* operator [] (size_t stRow) const
	{
		assert(stRow != 0);
		assert(stRow < GetRowNum());	//斷定stRow不超實際矩陣行值

		_vTy *p = &m_Datas[(stRow-1) * GetColNum()];

		return p;
	}

	// 索引行列(寫入)
	_vTy& operator () (size_t stRow, size_t stCol)
	{
		assert(stRow < GetRowNum());	//斷定stRow不超實際矩陣行值
		assert(stCol < GetColNum());	//斷定stCol不超實際矩陣列值

		return m_Datas[stRow * GetColNum() + stCol];
	}

	// 索引行列(只讀)
	const _vTy operator () (size_t stRow, size_t stCol) const
	{
		assert(stRow < GetRowNum());	//斷定stRow不超實際矩陣行值
		assert(stCol < GetColNum());	//斷定stCol不超實際矩陣列值

		return m_Datas[stRow * GetColNum() + stCol];
	}
	
	// 賦值操作符
	//矩陣與矩陣的自反*, +, -運算符

	// 矩陣與矩陣的自反+
	_MatTy& operator += (const _MatTy& rhs)		
	{
		assert(GetRowNum() == rhs.GetRowNum());	
		assert(GetColNum() == rhs.GetColNum());	

		m_Datas += rhs.m_Datas;
		return *this;
	}
	// 矩陣與矩陣的自反-
	_MatTy& operator -= (const _MatTy& rhs) 
	{
		assert(GetRowNum() == rhs.GetRowNum());
		assert(GetColNum() == rhs.GetColNum());

		m_Datas -= rhs.m_Datas;
		return *this;
	}
	// 矩陣與矩陣的自反*
	_MatTy& operator *= (const _MatTy& rhs)		
	{
		Multiply(*this, *this, rhs);	
		return *this;
	}

	//矩陣自反加、減、乘以、除以數
	_MatTy& operator += (const _Ty& rhs)		//矩陣自加數
	{
		m_Datas += rhs;			//利用數組對象對每個元素加數
	
		return *this;			//結果放在原矩陣(數組m_Datas)中
	}

	_MatTy& operator -= (const _Ty& rhs)		//矩陣自減數
	{
		m_Datas -= rhs;

		return *this;
	}

	_MatTy& operator *= (const _Ty& rhs)		//矩陣自乘數
	{
		m_Datas *= rhs;
	
		return *this;
	}

	_MatTy& operator /= (const _Ty& rhs)		//矩陣自除以數
	{
		m_Datas /= rhs;

		return *this;
	}

	// 矩陣取反
	_MatTy operator - () const	
	{
		_MatTy mat(*this);
		mat.m_Datas = -mat.m_Datas;	

		return mat;
	}

	//矩陣乘數	mat = lhs * rhs
	friend _MatTy operator * (const _MatTy& lhs, const _Ty& rhs)
	{
		_MatTy mat(lhs);			//新生成一新矩陣對象mat
		mat.m_Datas *= rhs;		//對新矩陣對象每個元素乘以數

		return mat;				
	}

    //數加矩陣	mat = lhs + rhs
	friend _MatTy operator + (const _Ty& lhs, const _MatTy& rhs)
	{
		_MatTy mat(rhs);			//新生成一新矩陣對象mat
		mat.m_Datas += lhs;		//數加上新矩陣對象的每個元素

		return mat;
	}

	//矩陣加數	mat = lhs + rhs
	friend _MatTy operator + (const _MatTy& lhs, const _Ty& rhs)
	{
		_MatTy mat(lhs);			//新生成一新矩陣對象mat
		mat.m_Datas += rhs;		//數加上新矩陣對象的每個元素

		return mat;
	}

	//數減矩陣	mat = lhs - rhs
	friend _MatTy operator - (const _Ty& lhs, const _MatTy& rhs)
	{
		_MatTy mat(rhs);			//新生成一新矩陣對象mat
		mat.m_Datas -= lhs;		//數減新矩陣對象的每個元素

		return mat;
	}

	//數乘矩陣	mat = lhs * rhs
	friend _MatTy operator * (const _Ty& lhs, const _MatTy& rhs)
	{
		_MatTy mat(rhs);			
		mat.m_Datas *= lhs;	

		return mat;
	}

	//矩陣加法	mat = lhs + rhs
	friend _MatTy operator + (const _MatTy& lhs, const _MatTy& rhs)
	{
		_MatTy mat(lhs);					
		mat.m_Datas += rhs.m_Datas;		

		return mat;					
	}

	//矩陣減法	mat = lhs - rhs
	friend _MatTy operator - (const _MatTy& lhs, const _MatTy& rhs)
	{
		_MatTy mat(lhs);					
		mat.m_Datas -= rhs.m_Datas;		

		return mat;			
	}

	//矩陣乘法	mTmp = lhs * rhs
	friend _MatTy operator * (const _MatTy& lhs, const _MatTy& rhs)
	{	//生成一個矩陣新對象mTmp		
		_MatTy mTmp(lhs.GetRowNum(), rhs.GetColNum());	//沒初始化

		return Multiply(mTmp, lhs,  rhs);				
	}

	//矩陣點乘
	friend _MatTy PM(_MatTy& lhs, _MatTy& rhs)
	{
		int Row, Col;

		Row = lhs.GetRowNum();
		Col = lhs.GetColNum();

		_MatTy Temp(Row, Col);

		for ( int i = 0; i < Row; i++)
			for ( int j = 0; j < Col; j++)
				Temp(i, j) = lhs(i, j) * rhs(i, j);

			return Temp;
	}

	//矩陣點除
	friend _MatTy PD(_MatTy& lhs, _MatTy& rhs)
	{
		int Row, Col;

		Row = lhs.GetRowNum();
		Col = rhs.GetColNum();

		_MatTy Temp(Row, Col);

		for ( int i = 0; i < Row; i++)
			for ( int j = 0; j < Col; j++)
			{
				if(rhs(i, j) == _Ty(0, 0))
				{	
					//cout << "input is error" << endl;
					exit(1);
				}
				Temp(i, j) = lhs(i, j) / rhs(i, j);
			}

			return Temp;
	}

	//矩陣余弦函數
	friend _MatTy COS(_MatTy& lhs)
	{
		int Row, Col;

		Row = lhs.GetRowNum();
		Col = lhs.GetColNum();
		_MatTy tmp(Row, Col);

		for ( int i = 0; i < Row; i++)
			for ( int j = 0; j < Col; j++)
				tmp(i, j) = cos(lhs(i, j));

		return tmp;
	}

	//矩陣正弦函數
	friend _MatTy SIN(_MatTy& lhs)
	{
		int Row, Col;

		Row = lhs.GetRowNum();
		Col = lhs.GetColNum();
		_MatTy tmp(Row, Col);

		for ( int i = 0; i < Row; i++)
			for ( int j = 0; j < Col; j++)
				tmp(i, j) = sin(lhs(i, j));

		return tmp;
	}

	friend void lstSprsFit(_MatTy& x, _MatTy& y, int n, _MatTy& yFit, _MatTy& coef)
	{
		int mCol = x.GetColNum();
		int yCol = y.GetColNum();

		_MatTy X1(1, 2*n);
		_MatTy X2(1, n+1);
		_MatTy X3(n, n+1);
		_MatTy XSUM(n+1, n+1);
		_MatTy YSUM(1, n+1);

		_Ty SumNum = (0, 0);
		for ( int i = 0; i < yCol; i++)
		{
			SumNum = SumNum + y(0, i);
		}

		for ( int i = 0; i < 2*n; i++) 
		{
			_Ty sum = (0, 0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久嫩草精品久久久久| 久久午夜国产精品| 国产精品白丝av| 亚洲电影在线免费观看| 欧美精品一区二| 欧洲精品一区二区三区在线观看| 国产毛片精品国产一区二区三区| 亚洲高清免费在线| 中文幕一区二区三区久久蜜桃| 6080午夜不卡| 91蝌蚪porny九色| 国产成人免费视频网站| 午夜日韩在线观看| 一区二区三区自拍| 国产欧美一区二区三区沐欲 | 国产综合久久久久久久久久久久| 亚洲另类色综合网站| 国产欧美日韩精品一区| 精品剧情在线观看| 777亚洲妇女| 欧美日韩1区2区| 色偷偷88欧美精品久久久| 国产高清不卡二三区| 久久电影网站中文字幕| 丝袜诱惑亚洲看片| 亚洲高清不卡在线| 亚洲综合精品久久| 亚洲啪啪综合av一区二区三区| 久久久不卡网国产精品二区| 日韩欧美一级二级三级久久久| 欧美日韩成人综合天天影院 | 亚洲黄色录像片| 国产精品福利电影一区二区三区四区| 精品国产乱码久久久久久久| 欧美一区二区三区在线视频| 91精品福利在线一区二区三区| 欧美日韩亚洲综合| 欧美日韩国产影片| 欧美精品v日韩精品v韩国精品v| 欧美在线观看视频在线| 欧美午夜精品一区| 欧美探花视频资源| 欧美另类高清zo欧美| 欧美日韩视频在线观看一区二区三区| 色成年激情久久综合| 色婷婷av久久久久久久| 在线观看av不卡| 欧美特级限制片免费在线观看| 欧美三电影在线| 7777精品伊人久久久大香线蕉超级流畅| 欧美日韩色一区| 91精品国产福利| 久久一夜天堂av一区二区三区 | 亚洲国产精品自拍| 亚洲国产一区视频| 日韩av网站免费在线| 美国十次了思思久久精品导航| 久久精品国产99| 国产不卡视频在线播放| 99久久精品99国产精品| 欧美性色黄大片| 91精品国产综合久久精品麻豆| 日韩免费成人网| 欧美国产激情二区三区| 亚洲精选一二三| 三级久久三级久久| 国产美女一区二区| 99久久er热在这里只有精品66| 色综合久久综合网97色综合| 欧美日韩国产大片| 精品国产一区久久| 亚洲欧美在线另类| 午夜精品国产更新| 激情文学综合插| 91最新地址在线播放| 宅男在线国产精品| 国产精品久久久久三级| 五月天中文字幕一区二区| 国产精品一二三四五| 色综合久久久久久久久| 精品国产一区二区三区av性色| 日韩一区在线看| 久久激情五月激情| 97久久精品人人做人人爽50路| 欧美日韩大陆在线| 中文字幕不卡在线| 日本成人超碰在线观看| 99久久综合色| 日韩精品一区二区三区四区 | 国产乱码精品一区二区三区五月婷| 不卡一区二区三区四区| 91精品国产一区二区人妖| 国产精品亲子伦对白| 日韩精品国产欧美| 99久久国产免费看| 亚洲精品一区二区三区香蕉| 一区二区三区中文字幕精品精品 | 极品少妇xxxx偷拍精品少妇| 99久久精品国产毛片| 亚洲精品在线免费播放| 亚洲福利视频导航| 91视频观看视频| 26uuu精品一区二区| 午夜日韩在线电影| 色婷婷综合久久久中文字幕| 久久综合成人精品亚洲另类欧美| 一区2区3区在线看| 成人性生交大片免费看视频在线 | 欧美电视剧在线观看完整版| 亚洲国产成人av网| 一本一道波多野结衣一区二区| 欧美激情自拍偷拍| 韩国精品免费视频| 日韩欧美一级精品久久| 爽好久久久欧美精品| 色婷婷亚洲精品| 国产精品久久久久久久久晋中| 国产一区二区三区在线观看精品 | 亚洲v日本v欧美v久久精品| 99re这里只有精品首页| 国产欧美日本一区视频| 极品少妇xxxx精品少妇| 日韩美女一区二区三区四区| 日韩av在线发布| 51精品国自产在线| 日韩中文字幕1| 欧美人动与zoxxxx乱| 亚洲福利电影网| 欧美三级电影精品| 亚洲国产综合人成综合网站| 在线精品国精品国产尤物884a| 综合欧美一区二区三区| 成年人国产精品| 中文字幕一区二区三区视频| 成人av在线播放网址| 国产精品久久久久影院老司| 懂色av一区二区夜夜嗨| 亚洲国产精品二十页| 成人精品视频.| 1区2区3区精品视频| 色综合色狠狠天天综合色| 亚洲自拍偷拍网站| 3atv一区二区三区| 精品一区二区在线观看| 2021国产精品久久精品| 国产98色在线|日韩| 国产精品久久久久三级| 色婷婷激情久久| 亚洲高清免费视频| 日韩一区二区影院| 国产在线视频一区二区三区| 国产欧美日韩在线视频| www.亚洲精品| 亚洲线精品一区二区三区八戒| 欧美福利电影网| 久久99热狠狠色一区二区| 久久男人中文字幕资源站| 国产成人一级电影| 亚洲欧美电影一区二区| 欧美日韩中文国产| 韩国三级电影一区二区| 国产精品无遮挡| 欧美在线制服丝袜| 奇米色一区二区三区四区| 久久综合99re88久久爱| 成人黄色软件下载| 五月婷婷欧美视频| 国产亚洲欧洲997久久综合| 91女神在线视频| 成人性生交大片免费看中文| 日韩精品一区二区三区视频在线观看 | 精品在线免费观看| 国产精品不卡在线| 欧美精品欧美精品系列| 国产精品一区二区三区99| 中文字幕视频一区| 精品一区二区三区免费| 天天色综合天天| 亚洲区小说区图片区qvod| 欧美国产精品一区二区三区| 欧美www视频| 欧美一卡二卡在线| 欧美日韩日本视频| 91国偷自产一区二区三区成为亚洲经典 | 2023国产精品| 91精品国产手机| 欧美在线影院一区二区| 91网址在线看| 99国产欧美久久久精品| 国产凹凸在线观看一区二区| 久88久久88久久久| 麻豆精品视频在线观看| 日韩—二三区免费观看av| 亚洲777理论| 五月综合激情日本mⅴ| 一区二区三区四区国产精品| 亚洲日本va在线观看| 亚洲免费观看高清完整版在线观看| 中文字幕不卡三区| 成人欧美一区二区三区白人|