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

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

?? matrix.cpp

?? 各種矩陣運算的實現(xiàn)
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// CMATRIX.cpp: implementation of the CMATRIX class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MATRIX.h"
#include "math.h"

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

inline Radian ToRad(Angle angle)
{ return (angle/180)*WKPI; }

inline Angle ToAng(Radian rad)
{ return (rad/WKPI)*180; }

double ctan(Radian rad)
{ return 1/tan(rad); }

double csc(Radian rad)
{ return 1/sin(rad); }

Radian actan(double r)
{ return atan(1/r); }

double Cos(Radian r)
{
	if(((int)ToAng(r)/90)==ToAng(r)/90&&((int)ToAng(r)/90)%2!=0)
		return 0;
	else
		return cos(r);
}

double round(double num,unsigned n=0)//四舍五入
{
	double dex=num-(long)num;
	dex*=pow(10,n);
	double here=dex-(long)dex;
	if(here>=0.5)
	{
		dex=((long)dex+1)/pow(10,n);
		return (long)num+dex;
	}
	else
	{
		dex=(long)dex/pow(10,n);
		return (long)num+dex;
	}
}
//========================================
struct _EXPARA
{
	unsigned ROW;
	unsigned COL;
	unsigned r1,c1;
	unsigned r2,c2;
} EXPARA;

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

CMATRIX::CMATRIX(unsigned r/*=1*/,unsigned c/*=1*/)
{
	if(Init()==false) return ;
//	ASSERT(Init());
		//無法分配堆內存以構建對象
	if(row<=0)	row=1;
		//指定的矩陣的行為零!將強制行為1!
	if(col<=0)	col=1;
		//指定的矩陣的列為零!將強制行為1!
	row=r; col=c;
/*
	couter++;
	cout<<"\nCON "<<couter<<endl;
//*/
}

CMATRIX::~CMATRIX()
{
	Destroy();

}

bool CMATRIX::Clear()
{
	Destroy();
	return Init();
}

bool CMATRIX::Init()
{
	if((head=fence=tail=new CElement)==NULL) return false;
	row=col=1; len=0; 
	return true;
}

void CMATRIX::Destroy()
{
	while(tail!=NULL)
	{
		fence=tail;
		tail=tail->prev;
		delete fence;
	}
/*
	couter--;
	cout<<"\nDE  "<<couter<<endl;
//*/
}

bool CMATRIX::Append(const double &_item_)
{
	if(tail==head&&len==0)
	{ fence->Set(_item_); len=1; }

	else
	{
		if(len==row*col) return true;
		else if((tail=tail->next=new CElement(_item_,tail,NULL))==NULL)
			return false;//無法分配堆內存以繼續(xù)!
		else len++;
	}
	return true;
}

inline unsigned CMATRIX::RowColToLen(unsigned r, unsigned c)
{ return ((r-1)*col+c); }

inline double CMATRIX::GetCell(unsigned l)
{
	if(l>=1&&l<=len)
	{
		fence=head;
		if(l==1)
		{ return fence->Cell();}
		else
		{
			for(unsigned i=1;i<l;i++)
			{ fence=fence->next; }
			return fence->Cell();
		}
	}
	else return (0.0);//越界讀取矩陣元素!
}

bool CMATRIX::SetCell(unsigned r, unsigned c, double it)
{
	if(r<1||r>row||c<1||c>col) return false;
		//越界設置矩陣元素!
	unsigned _l=RowColToLen(r,c);
	return SetCell(_l,it);
}

inline bool CMATRIX::SetCell(unsigned l, double cel)
{
	if(l>=1&&l<=len)
	{
		fence=head;
		if(l==1) { fence->Set(cel); return true; }
		for(unsigned i=1;i<l;i++)
		{ fence=fence->next; }
		fence->Set(cel);
		return true;
	}
	else return false;//越界設置矩陣元素!
}

inline void CMATRIX::SetRow(unsigned r)
{ row=r; }

inline void CMATRIX::SetCol(unsigned c)
{ col=c; }

inline unsigned CMATRIX::Row()
{ return row; }

inline unsigned CMATRIX::Col()
{ return col; }

inline unsigned CMATRIX::Len()
{ return len; }

bool CMATRIX::operator ==(CMATRIX &_m_)
{
	if((head==_m_.head&&tail==_m_.tail)||this==(&_m_)) return true;
	else
	{
		if(len==_m_.Len()&&row==_m_.Row()&&col==_m_.Col())
		{
			CElement* p;
			unsigned i=0;
			for(fence=head,p=_m_.head;fence,p;fence=fence->next,p=p->next)
			{ 
				if(fence->Cell()==p->Cell()) i++;
			}
			if(i==len) return true;
			else return false;
		}
		else return false;
	}
}

void CMATRIX::operator =(CMATRIX &_m_)
{
	if((*this)==_m_) return ;
	Clear();
	row=_m_.Row(); col=_m_.Col();
	for(unsigned i=1;i<=_m_.Len();i++)
	{ Append(_m_.GetCell(i)); }
}

double CMATRIX::operator ()(unsigned r,unsigned c/*=1*/)
{ return GetCell(RowColToLen(r,c)); }

inline double CMATRIX::Cell(unsigned int r, unsigned int c)
{
	return (*this)(r,c);
}

CMATRIX& operator +(CMATRIX &_m1_, CMATRIX &_m2_)
{
	TMPPMAT(_m1_.Row(),_m2_.Col());
	if(_m1_.Len()==0||_m2_.Len()==0)
	{
		//矩陣為空!加法無效!
		PMATSET(1,1);
		BACK;
	}
	if(_m1_.Row()!=_m2_.Row()||_m1_.Col()!=_m2_.Col()||_m1_.Len()!=_m2_.Len())
	{
		//行或列數(shù)不等,無法相加!
		BACK;
	}
	for(unsigned i=1;i<=_m2_.Len();i++)
	{
		if(!(pmat->Append(_m1_.GetCell(i)+_m2_.GetCell(i))))
			BACK;//無法分配堆內存以繼續(xù)加法!
	}
	BACK;
}

CMATRIX& operator -(CMATRIX &_m1_, CMATRIX &_m2_)
{
	TMPPMAT(_m1_.Row(),_m2_.Col()); 
	if(_m1_.Len()==0||_m2_.Len()==0)
	{
		//矩陣為空!減法無效!
		PMATSET(1,1);
		BACK;
	}
	if(_m1_.Row()!=_m2_.Row()||_m1_.Col()!=_m2_.Col()||_m1_.Len()!=_m2_.Len())
	{
		//行或列數(shù)不等,無法相減!
		BACK;
	}
	for(unsigned i=1;i<=_m2_.Len();i++)
	{ 
		if(!(pmat->Append(_m1_.GetCell(i)-_m2_.GetCell(i))))
			BACK;//無法分配堆內存以繼續(xù)減法!
	}
	BACK;
}

CMATRIX& operator *(CMATRIX &_m1_, CMATRIX &_m2_)
{
	TMPPMAT(_m1_.Row(),_m2_.Col());
	if(_m1_.Len()==0||_m2_.Len()==0)
	{
		//矩陣為空!乘法無效!
		PMATSET(1,1);
		BACK;
	}
	if(_m1_.Col()!=_m2_.Row())
	{
		//行列不匹配,無法相乘!
		BACK;
	}
	double tmpdat=0;
	for(unsigned i=1;i<=_m1_.Row();i++)
	{
		for(unsigned j=1;j<=_m2_.Col();j++)
		{
			for(unsigned k=1;k<=_m2_.Row();k++)
			{ tmpdat=tmpdat+_m1_(i,k)*_m2_(k,j); }
			if(!(pmat->Append(tmpdat)))
				BACK;//無法分配堆內存以繼續(xù)兩矩陣相乘!
			tmpdat=0;
		}
	}
	BACK;
}

CMATRIX& operator *(double k, CMATRIX &_m_)
{
	TMPPMAT(_m_.Row(),_m_.Col());
	if(_m_.Len()==0)
	{
		//矩陣為空!數(shù)乘無效!
		PMATSET(1,1);
		BACK;
	}
	for(unsigned i=1;i<=_m_.Len();i++)
	{
		if(!(pmat->Append(k*_m_.GetCell(i))))
		{
			//無法分配堆內存以繼續(xù)數(shù)乘矩陣!
			BACK;
		}
	}
	BACK;
}

CMATRIX& CMATRIX::T()
{
	TMPPMAT(col,row);
	if(len==0)
	{
		//矩陣為空!無法轉置!
		PMATSET(1,1);
		BACK;
	}
	for(unsigned i=1;i<=col;i++)
	{
		for(unsigned j=1;j<=row;j++)
		{
			if(!(pmat->Append((*this)(j,i))))
				BACK;//無法分配堆內存以繼續(xù)矩陣轉置!
		}
	}
	BACK;
}

CMATRIX& CMATRIX::Remmat(unsigned r, unsigned c)
{
	if(len==0)
	{
		//矩陣為空!求取余子式矩陣無效!
		return *this;
	}
	if(r>row||c>col||r<=0||c<=0)
	{
		//越界求取余子式矩陣!
		return *this;
	}
	TMPPMAT(row-1,col-1);
	if((row==1&&col==1)||pmat->Row()==0||pmat->Col()==0)
	{
		if(!(pmat->Append(0)))
		{
			//無法分配堆內存以繼續(xù)求矩陣余子式!
			BACK;
		}
		PMATSET(row,col);
		BACK;
	}
	double tmpdat=-1;
	for(unsigned i=1;i<=row;i++)
	{
		if(i==r) { continue; }
		for(unsigned j=1;j<=col;j++)
		{
			if(j==c) { continue; }
			tmpdat=(*this)(i,j);
			if(!(pmat->Append(tmpdat)))
			{
				//無法分配堆內存以繼續(xù)求矩陣余子式!
				BACK;
			}
		}
	}
	BACK;
}

CMATRIX& adjoint(CMATRIX &_m_)
{
	TMPPMAT(_m_.Row(),_m_.Col());
	if(_m_.Len()==0)
	{
		//矩陣為空!無法求其對應的伴隨矩陣!
		PMATSET(1,1);
		BACK;
	}
	int modulus=-1;
	for(unsigned i=1;i<=_m_.Row();i++)
	{
		for(unsigned j=1;j<=_m_.Col();j++)
		{
			modulus=modulus*(-1);
			if(!(pmat->Append(modulus*det(_m_.Remmat(i,j)))))
			{
				//無法分配堆內存以繼續(xù)求其對應的伴隨矩陣!
				BACK;
			}
		}
	}
//	*pmat=pmat->T();
	pmat=&pmat->T();
	BACK;
}

double det(CMATRIX &_m_)
{
	if(_m_.Len()==0)
	{
		//矩陣為空!其對應的行列式值為零!
		return (0);
	}
	int cor=-1;
	double tmpdat=0;
	if(_m_.Row()!=_m_.Col())
	{
		//行列不同,無法求其對應的行列式值!
		return tmpdat;
	}
	if(_m_.Len()==1) { return _m_(1,1); } 
	if((_m_.Row()==1&&(_m_.Col()==1)||_m_.Len()==1)) { return _m_(1,1); }
	if((_m_.Row()==1&&(_m_.Col()==1)||_m_.Len()==1)) { return _m_(1,1); }
	for(unsigned j=1;j<=_m_.Col();j++)
	{
		cor=cor*(-1);
		tmpdat=tmpdat+_m_(1,j)*det(_m_.Remmat(1,j))*cor;
	}
	return tmpdat;
}

CMATRIX& CMATRIX::GetLine(unsigned lin)
{
	TMPPMAT(1,col);
	if(len==0)
	{
		//矩陣為空!無法提取其中的某一行!
		PMATSET(1,1);
		BACK;
	}
	if(lin<=0||lin>row)
	{
		//越界獲取行向量!
		PMATSET(1,1);
		BACK;
	}
	for(unsigned j=1;j<=col;j++)
	{
		if(!(pmat->Append((*this)(lin,j))))
		{
			//無法分配堆內存以繼續(xù)提取其中的某一行!
			BACK;
		}
	}
	BACK;
}

CMATRIX& CMATRIX::GetQue(unsigned que)
{
	TMPPMAT(row,1);
	if(len==0)
	{
		//矩陣為空!無法提取其中的某一列!
		PMATSET(1,1);
		BACK;
	}
	if(que<=0||que>col)
	{
		//越界獲取列向量!
		PMATSET(1,1);
		BACK;
	}
	for(unsigned i=1;i<=row;i++)
	{
		if(!(pmat->Append((*this)(i,que))))
		{
			//無法分配堆內存以繼續(xù)提取其中的某一列!
			BACK;
		}
	}
	BACK;
}

CMATRIX& CMATRIX::KidMat(unsigned l1, unsigned l2, unsigned q1, unsigned q2)
{
	TMPPMAT(1,1);
	if(len==0)
	{
		//矩陣為空!無法獲取子矩陣!
		BACK;
	}
	if(l1<=0||l2<=0||q1<=0||q2<=0||q1>col||q2>col||l1>row||l2>row)
	{
		//越界獲取子矩陣!
		BACK;
	}
	unsigned L1=(l1<=l2)?l1:l2; unsigned L2=(l1>l2)?l1:l2;
	unsigned Q1=(q1<=q2)?q1:q2; unsigned Q2=(q1>q2)?q1:q2;
	PMATSET(L2-L1+1,Q2-Q1+1); 
	for(unsigned i=L1;i<=L2;i++)
	{
		for(unsigned j=Q1;j<=Q2;j++)
		{
			if(!(pmat->Append((*this)(i,j))))
			{
				//無法分配堆內存以繼續(xù)獲取子矩陣!
				BACK;
			}
		}
	}
	BACK;
}

CMATRIX& inverse(CMATRIX &_m_)
{
	TMPPMAT(_m_.Row(),_m_.Col());
	if(_m_.Len()==0)
	{
		//矩陣為空!無法求其對應的逆矩陣!
		PMATSET(1,1);cout<<"\ndet=0"<<endl;
		BACK;
	}
	if(det(_m_)==0)
	{
		//奇異矩陣無法求解逆矩陣!
		PMATSET(1,1);
		BACK;
	}
//	*pmat=(1/det(_m_))*adjoint(_m_);
	pmat=&((1/det(_m_))*adjoint(_m_));
	BACK;
}

CMATRIX& CMATRIX::Identity()
{
	TMPPMAT(row,col);
	for(unsigned i=1;i<=pmat->Row();i++)
	{
		for(unsigned j=1;j<=pmat->Col();j++)
		{
			if(i==j)
			{
				if(!(pmat->Append(1)))
				{
					//無法分配堆內存以繼續(xù)生成標準形的矩陣!
					BACK;
				}

			}
			else
			{
				if(!(pmat->Append(0)))
				{
					//無法分配堆內存以繼續(xù)生成標準形的矩陣!
					BACK;
				}
			}
		}
	}
	BACK;
}

CMATRIX& CMATRIX::IDENTITY(unsigned dim)
{
	TMPPMAT(dim,dim);
	if(dim==0)
	{
		//指定的方陣維數(shù)為零!
		PMATSET(1,1);
		BACK;
	}
	for(unsigned i=1;i<=pmat->Row();i++)
	{
		for(unsigned j=1;j<=pmat->Col();j++)
		{	
			if(i==j)
			{
				if(!(pmat->Append(1)))
				{
					//無法分配堆內存以繼續(xù)生成單位矩陣!
					BACK;
				}
			}
			else
			{
				if(!(pmat->Append(0)))
				{
					//無法分配堆內存以繼續(xù)生成單位矩陣!
					BACK;
				}
			}
		}
	}
	BACK;
}

CMATRIX& CMATRIX::Basis(unsigned lin,unsigned que)
{
	TMPPMAT(row,col);
	if(len==0)
	{
		//矩陣為空!無法求其基矩陣!

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色av一区二区| www.欧美精品一二区| 一区二区三区不卡视频| 国产精品成人一区二区艾草| 国产精品视频线看| 国产精品久久久久久久久动漫| 国产精品视频一区二区三区不卡| 国产精品蜜臀av| 综合在线观看色| 一区二区三区 在线观看视频 | 国产一区欧美一区| 精品亚洲欧美一区| 国产精品一区在线| 色综合激情久久| 91超碰这里只有精品国产| 91精品国产欧美一区二区18| 亚洲精品一区二区精华| 中文字幕日韩一区| 亚洲h在线观看| 精一区二区三区| 成人午夜视频福利| 欧美日韩在线精品一区二区三区激情 | 国产精品亚洲成人| 99视频在线精品| 欧美伦理视频网站| 国产精品色在线| 天天色天天操综合| 国产成人综合精品三级| 在线观看欧美黄色| 精品国产91乱码一区二区三区| 欧美激情在线观看视频免费| 亚洲另类色综合网站| 美女视频黄久久| 色综合久久天天| 欧美大片免费久久精品三p| 国产精品久久久久久久久免费丝袜 | 精品国产乱码久久久久久久久 | 欧美日韩www| 欧美高清在线视频| 日韩成人一级大片| 色婷婷av一区二区三区gif| 日韩欧美一级精品久久| 亚洲欧美偷拍卡通变态| 国产精品一二三四五| 欧美性受xxxx| 亚洲美女免费在线| 国产高清精品久久久久| 日韩三级.com| 午夜久久久久久久久久一区二区| 国产91精品在线观看| 91精品国产91综合久久蜜臀| 亚洲卡通动漫在线| 国产精品亚洲综合一区在线观看| 制服视频三区第一页精品| 1000部国产精品成人观看| 国产精品99久久不卡二区| 日韩视频在线观看一区二区| youjizz国产精品| 99久久99久久久精品齐齐| 欧美一区二区三区在线电影| 亚洲欧洲制服丝袜| 成人91在线观看| 国产日韩精品视频一区| 国内精品写真在线观看| 欧美成人精品高清在线播放| 偷窥国产亚洲免费视频| 欧美日韩国产免费一区二区 | 欧美激情一区二区| 国产精品一区久久久久| 欧美videossexotv100| 国产精品自拍三区| 日韩视频中午一区| 国内精品嫩模私拍在线| 精品国偷自产国产一区| 国内精品伊人久久久久av影院| 日韩欧美www| 国产九九视频一区二区三区| 欧美大片在线观看| 国产一区二区不卡| 日本一区二区在线不卡| 粗大黑人巨茎大战欧美成人| 中文字幕一区二区三区四区不卡 | 欧美综合天天夜夜久久| 亚洲欧美日韩电影| 欧美日韩一区二区三区免费看 | 欧美国产精品久久| 99精品视频中文字幕| 亚洲国产欧美另类丝袜| 精品视频1区2区3区| 麻豆精品视频在线观看视频| 精品福利一二区| 粗大黑人巨茎大战欧美成人| 亚洲欧美一区二区不卡| 欧美日韩精品三区| 精品一区二区在线免费观看| 久久久久99精品国产片| 色综合天天在线| 中文字幕一区二区三区不卡| 99免费精品视频| 午夜日韩在线电影| 国产欧美日韩视频在线观看| 成人高清免费在线播放| 亚洲动漫第一页| 久久综合色天天久久综合图片| jlzzjlzz亚洲女人18| 亚洲成人激情综合网| 精品国产sm最大网站| 91蜜桃在线免费视频| 蜜桃视频一区二区| 一区视频在线播放| 精品国产乱码久久久久久老虎 | 色视频成人在线观看免| 免费精品视频在线| 亚洲欧美日韩国产综合| 精品国内片67194| 欧美中文字幕不卡| 国产成人精品影视| 图片区小说区区亚洲影院| 亚洲欧美怡红院| 欧美电视剧在线观看完整版| 欧美在线观看一二区| 国产乱码精品一区二区三区五月婷| 亚洲精品免费电影| 欧美国产日本韩| 精品国产网站在线观看| 欧美视频在线观看一区| heyzo一本久久综合| 久久精品999| 日日欢夜夜爽一区| 亚洲精品国产a| 国产精品久久久久一区| 久久久一区二区| 日韩精品一区二区三区视频播放 | 欧美本精品男人aⅴ天堂| 欧美视频一区二区三区四区| 国产.欧美.日韩| 国产永久精品大片wwwapp| 六月婷婷色综合| 日韩精品成人一区二区在线| 亚洲激情一二三区| 国产精品白丝在线| 亚洲欧洲一区二区三区| 国产精品麻豆一区二区 | 亚洲人被黑人高潮完整版| 国产亚洲精品aa| 久久综合丝袜日本网| 欧美成人女星排名| 日韩精品一区二区在线观看| 欧美精品电影在线播放| 欧美美女一区二区三区| 欧美人妖巨大在线| 欧美一区二区不卡视频| 欧美一级久久久久久久大片| 欧美群妇大交群中文字幕| 欧美一区二区三区在线电影 | 国产精品午夜春色av| 国产喷白浆一区二区三区| 国产欧美日本一区视频| 国产精品福利av| 樱桃视频在线观看一区| 亚洲无线码一区二区三区| 全部av―极品视觉盛宴亚洲| 久久精品免费观看| 成人免费精品视频| 9i在线看片成人免费| 欧美视频在线一区| 日韩午夜激情免费电影| 国产亚洲欧美一区在线观看| 国产精品乱码一区二三区小蝌蚪| 亚洲欧美怡红院| 亚洲风情在线资源站| 精品一区二区国语对白| aaa亚洲精品| 欧美日韩情趣电影| 精品福利一二区| 亚洲美女偷拍久久| 日本免费新一区视频| 成人国产电影网| 欧美久久一二区| 久久精品一二三| 亚洲一区二区三区小说| 久久国产精品露脸对白| www.在线成人| 日韩欧美亚洲国产另类| 中文字幕亚洲综合久久菠萝蜜| 亚洲va欧美va人人爽| 国产精品1区2区| 欧美日韩国产综合一区二区| 日韩女优av电影| 一个色综合网站| 国内久久精品视频| 欧美三级电影一区| 国产日韩v精品一区二区| 天堂一区二区在线免费观看| 波多野结衣在线aⅴ中文字幕不卡| 678五月天丁香亚洲综合网| 亚洲欧洲日韩在线| 国产一区二区美女| 欧美日韩高清一区二区三区| 国产精品女主播在线观看|