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

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

?? cmatrix.cpp

?? 用c++編寫數學常用算法的源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "stdio.h"
#include "string.h"
#include <complex.h>
#include "d:\book\計算機\用c++編寫數學常用算法\用c++編寫數學常用算法\cmatrix.h"
#include "fstream.h"

// 缺省的構造函數,產生0行0列空復矩陣
cmatrix::cmatrix(cbuffer * b): rownum(0),colnum(0),
	isneg(0),istrans(0),isconj(0)
{
		if(b){
			buf=b;
			buf->alloc(0);
			}
		else
			buf = getnewcbuffer(0); // 如果缺省的b沒有給出,則產生一
				// 長度為行乘列個復數和緩存
}
// 構造一r行c列的復矩陣,可選的復緩存指向b
cmatrix::cmatrix(size_t r, size_t c, cbuffer * b):
		rownum(r),colnum(c),istrans(0),isneg(0),isconj(0)
{
		if(b){
			buf=b;
			buf->alloc(r*c);
			}
		else
			buf = getnewcbuffer(r*c); // 如果缺省的b沒有給出,則產生一
				// 長度為行乘列個復數和緩存
}

cmatrix::cmatrix(size_t n, cbuffer * b):
		rownum(n),colnum(1),istrans(0),isneg(0),isconj(0)
{
		if(b){
			buf=b;
			buf->alloc(n);
			}
		else
			buf = getnewcbuffer(n); // 如果缺省的b沒有給出,則產生一
				// 長度為行乘列個復數和緩存
}

cmatrix cunit(size_t n) // 產生n階單位矩陣
{
	cmatrix m(n,n);
	for(size_t i=0; i<n; i++)
	for(size_t j=0; j<n; j++)
			if(i==j) m.set(i,i,1.0);
			else m.set(i,j,0.0);
	return m;
}

// 拷貝構造函數
cmatrix::cmatrix(cmatrix& m)
{
	rownum = m.rownum; // 復制行數和列數
	colnum = m.colnum;
	istrans = m.istrans; // 復制標志
	isneg = m.isneg;
	isconj = m.isconj;
	buf = m.buf; // 指向相同的緩存
	buf->refnum++;	// 緩存的引用數增1
}

// 用數據文件構造復矩陣
cmatrix::cmatrix(const char * filename, cbuffer * b) :
	istrans(0),isneg(0),isconj(0)
{
	char label[10];
	ifstream in(filename); // 打開文件輸入
	in >> label; // 文件以cmatrix關鍵詞打頭
	if(strcmp(label, "cmatrix")!=0) throw TMESSAGE("format error!");
	in >> rownum >> colnum; // 接著是行數和列數
	if(!in.good()) throw TMESSAGE("read file error!");
	if(b) { buf=b;	// 產生所需長度的緩存
		buf->alloc(rownum*colnum);
	}
	else buf = getnewcbuffer(rownum*colnum);
	size_t line;
	for(size_t i=0; i<rownum; i++) { // 按行循環輸入
		in >> line;	// 每行以行號開始
		if(line != i+1) throw TMESSAGE("format error!");
		in.width(sizeof(label));
		in >> label; // 緊接著是冒號
		if(label[0] != ':') throw TMESSAGE("format error!");
		COMPLEX a;
		for(size_t j=0; j<colnum; j++) { // 隨后是一行的內容
			in >> a;
			set(i,j,a);
		}
		if(!in.good()) throw TMESSAGE("read file error!");
	}
}

// 從內存數據塊構造復矩陣。data指向內存數據塊,構造完畢后data指向的內存可以釋放
cmatrix::cmatrix(void * data, size_t r, size_t c, cbuffer * b):
		rownum(r),colnum(c),istrans(0),isneg(0),isconj(0)
{
	if(b){
		buf=b;
		buf->alloc(r*c);
		}
	else
		buf = getnewcbuffer(r*c);
	COMPLEX * d = (COMPLEX *)data;
	for(size_t i=0; i<r*c; i++)
		buf->set(i,d[i]);
}

cmatrix::cmatrix(matrix& m, cbuffer* b) : // 由實矩陣產生一個內容相同的復矩陣
	istrans(0),isneg(0),isconj(0)
{
	rownum = m.rownum;
	colnum = m.colnum;
	if(b) { buf=b;	// 產生所需長度的緩存
		buf->alloc(rownum*colnum);
	}
	else buf = getnewcbuffer(rownum*colnum);
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
		set(i,j,m.value(i,j));
}

cmatrix::cmatrix(matrix& mr, matrix& mi, cbuffer * b): // 兩個實矩陣成為實部和虛部
	istrans(0),isneg(0),isconj(0)
{
	if(mr.rownum != mi.rownum || mr.colnum != mi.colnum)
		throw TMESSAGE("dimension not same!");
	rownum = mi.rownum;
	colnum = mr.colnum;
	if(b) { buf=b;	// 產生所需長度的緩存
		buf->alloc(rownum*colnum);
	}
	else buf = getnewcbuffer(rownum*colnum);
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
		set(i,j,COMPLEX(mr.value(i,j),mi.value(i,j)));
}

matrix cmatrix::real() // 由實部生成實矩陣
{
	matrix m(rownum, colnum);
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++) {
		m.set(i,j,::real(value(i,j)));
	}
	return m;
}

matrix cmatrix::image() // 由虛部生成實矩陣
{
	matrix m(rownum, colnum);
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
		m.set(i,j,imag(value(i,j)));
	return m;
}

// 矩陣賦值
cmatrix& cmatrix::operator=(cmatrix& m)
{
	rownum = m.rownum; // 復制行數和列數
	colnum = m.colnum;
	if(buf == m.buf) // 如果本來就指向相同的緩存,則返回
		return (*this);
	buf->refnum--;	// 否則放棄原來的緩存,先將原緩存引用數減1
						// 如果不為0說明還有其它的矩陣引用數據
	if(!buf->refnum)delete buf; // 否則刪除緩存
	istrans = m.istrans;	// 復制標志
	isneg = m.isneg;
	isconj = m.isconj;
	buf = m.buf; // 復制緩存指針
	buf->refnum++; // 緩存引用數增1
	return (*this);
}

cmatrix& cmatrix::operator=(matrix& m)
{
	rownum = m.rownum; // 復制行數和列數
	colnum = m.colnum;
	buf->refnum--;
	if(!buf->refnum) delete buf; // 放棄原來緩存
	istrans = isneg = isconj = 0; // 標志清零
	buf = getnewcbuffer(rownum*colnum); // 申請新的緩存
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
		set(i,j,m.value(i,j));
	return (*this);
}

cmatrix& cmatrix::operator=(COMPLEX a) // 將矩陣所有元素設為常數a
{
	if(rownum == 0 || colnum==0 ) return (*this);
	istrans = isneg = isconj = 0; // 標志清零
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
		set(i,j,a);
	return (*this);
}

COMPLEX cmatrix::operator()(size_t r, size_t c)
 // 重載函數運算符,返回第r行c列的值
{
	if(r>= rownum || c >= colnum)
		throw TMESSAGE("range overflow");
	return value(r,c);
}

COMPLEX cmatrix::operator()(size_t r)
	// 重載函數運算符,返回第r行0列的值,用于向量
{
	return (*this)(r,0);
}


// 流輸出
ostream& operator<<(ostream& o, cmatrix& m)
{	// 先輸出關鍵詞cmatrix,后跟行數和列數
	o << "cmatrix " << m.rownum << '\t' << m.colnum << endl;
	// 每行由行號,冒號,后跟一行的復數構成
	for(size_t i=0; i<m.rownum; i++) {
		o<< (i+1) <<':';
		size_t k=8;
		for(size_t j=0; j<m.colnum; j++) {
			o<<'\t'<<m.value(i,j);
			if(--k==0) {
				k=8;
				o<<endl;
			}
		}
		o<<endl;
	}
	return o;
}

// 流輸入
istream& operator>>(istream& in, cmatrix& m)
{
	char label[10];
	in.width(sizeof(label));
	in >> label;
	if(strcmp(label, "cmatrix")!=0) // 以關鍵詞cmatrix打到
		throw TMESSAGE("format error!");
	in >> m.rownum >> m.colnum; // 后跟行數和列數
	if(!in.good()) throw TMESSAGE("read file error!");
	m.buf->refnum--; // 放棄原來的緩存
	if(!m.buf->refnum) delete m.buf;
	m.buf = getnewcbuffer(m.rownum*m.colnum); // 申請新的緩存
	m.istrans = m.isneg = m.isconj = 0; // 標志清零
	size_t line;
	for(size_t i=0; i<m.rownum; i++) {
		in >> line;
		if(line != i+1) throw TMESSAGE("format error!"); // 每行以行號開始
		in.width(sizeof(label));
		in >> label;
		if(label[0] != ':') throw TMESSAGE("format error!"); // 后跟冒號
		COMPLEX a;
		for(size_t j=0; j<m.colnum; j++) { // 然后是這一行的數據
			in >> a;
			m.set(i,j,a);
		}
		if(!in.good()) throw TMESSAGE("read file error!");
	}
	return in;
}

// 數乘矩陣,原矩陣內容改變為結果
cmatrix& cmatrix::operator*=(COMPLEX a)
{
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
		set(i,j,a*value(i,j));
	return (*this);
}

// 數乘矩陣,原矩陣內容不變,返回結果矩陣
cmatrix cmatrix::operator*(COMPLEX a)
{
	cmatrix m(rownum, colnum);
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
		m.set(i,j,a*value(i,j));
	return m;
}

cmatrix cmatrix::operator+(COMPLEX a) // 矩陣加常數,產生新矩陣
{
	cmatrix m(rownum, colnum);
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
		m.set(i,j,a+value(i,j));
	return m;

}

cmatrix& cmatrix::operator+=(COMPLEX a) // 矩陣加常數,更動原矩陣
{
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
		set(i,j,a+value(i,j));
	return (*this);
}

// 矩陣相加
cmatrix cmatrix::operator+(cmatrix& m)
{
	if(rownum != m.rownum || colnum != m.colnum) // 行列必須對應相等
		throw TMESSAGE("can not do add of cmatrix");
	cmatrix mm(rownum, colnum);
	COMPLEX a;
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
	{
		a = value(i,j)+m.value(i,j);
		mm.set(i,j,a);
	}
	return mm;
}

// 矩陣相加,不產生新的矩陣,修改原矩陣的內容
cmatrix& cmatrix::operator+=(cmatrix &m)
{
	COMPLEX a;
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<colnum; j++)
	{
		a = value(i,j)+m.value(i,j);
		set(i,j,a);
	}
	return (*this);
}

cmatrix cmatrix::operator-(cmatrix& a)	// 矩陣相減
{
	return (*this)+(-a);
}

cmatrix& cmatrix::operator-=(cmatrix& a) // 矩陣自身減矩陣
{
	(*this)+=(-a);
	return (*this);
}

// 矩陣相乘,返回新產生的結果矩陣
cmatrix cmatrix::operator*(cmatrix& m)
{
	if(colnum != m.rownum) // 前矩陣的列數必須等于后矩陣的行數
		throw TMESSAGE("can not multiply!");
	cmatrix mm(rownum,m.colnum);
	COMPLEX a;
	for(size_t i=0; i<rownum; i++)
	for(size_t j=0; j<m.colnum; j++){
		a = 0.0;
		for(size_t k=0; k<colnum; k++)
			a += value(i,k)*m.value(k,j);
		mm.set(i,j,a);
	}
	return mm;
}

// 矩陣相乘,改變原矩陣的內容
cmatrix& cmatrix::operator*=(cmatrix& m)
{
	(*this) = (*this)*m;
	return (*this);
}

cmatrix cmatrix::operator-() // 矩陣求負,產生新的矩陣
{
	cmatrix m(*this);
	m.neg();
	return m;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡一区在线观看| 久久亚洲私人国产精品va媚药| 制服丝袜日韩国产| 国产色综合一区| 视频精品一区二区| 色综合久久综合网| 国产欧美视频在线观看| 午夜精品福利一区二区三区av| 国产iv一区二区三区| 欧美一区二区三区视频| 亚洲精品综合在线| 国产91精品一区二区| 日韩精品一区在线| 亚洲第一福利一区| 色哟哟国产精品免费观看| 亚洲国产精品成人综合色在线婷婷| 亚欧色一区w666天堂| 色哟哟精品一区| 亚洲天天做日日做天天谢日日欢| 国产成人在线影院| 欧美精品一区二区三区蜜桃视频| 亚洲3atv精品一区二区三区| 日本韩国一区二区三区视频| 亚洲视频一区在线| 99综合电影在线视频| 中文字幕不卡在线观看| 极品少妇一区二区| 久久天天做天天爱综合色| 乱一区二区av| 日韩欧美国产系列| 久久国产视频网| 欧美一级在线视频| 裸体一区二区三区| 欧美变态口味重另类| 国产在线国偷精品免费看| 欧美成人一区二区三区片免费| 另类调教123区| 精品国产第一区二区三区观看体验| 免费日本视频一区| 精品国产麻豆免费人成网站| 精品一区二区三区久久| 久久婷婷色综合| 成人av影视在线观看| 中文字幕制服丝袜成人av| 91美女在线看| 亚洲成人综合网站| 日韩精品中文字幕在线不卡尤物| 国产一区欧美一区| 亚洲欧美区自拍先锋| 欧美日韩免费视频| 日本欧美加勒比视频| 国产婷婷色一区二区三区四区| 懂色av中文字幕一区二区三区| 亚洲三级在线免费| 666欧美在线视频| 狠狠色综合播放一区二区| 国产日韩成人精品| 在线观看一区二区视频| 日韩福利电影在线| 国产色婷婷亚洲99精品小说| 91女神在线视频| 首页欧美精品中文字幕| 国产亚洲自拍一区| 91国模大尺度私拍在线视频| 麻豆91精品视频| 中文字幕中文乱码欧美一区二区| 欧美男男青年gay1069videost| 九色|91porny| 亚洲一区在线观看网站| 欧美本精品男人aⅴ天堂| 91香蕉视频黄| 国内精品伊人久久久久av一坑 | 在线综合亚洲欧美在线视频| 狠狠色丁香久久婷婷综| 亚洲午夜精品一区二区三区他趣| 亚洲精品欧美专区| 日韩美女天天操| 在线一区二区观看| 国产mv日韩mv欧美| 免费av成人在线| 一区二区三区在线观看网站| 欧美精品一区二区三区蜜桃 | 成人一区在线看| 日韩高清国产一区在线| 亚洲人123区| 日本一二三不卡| 久久综合国产精品| 5566中文字幕一区二区电影| 99在线精品观看| 国产一区二区三区电影在线观看| 亚洲成在人线在线播放| 有码一区二区三区| 国产免费久久精品| 精品国产自在久精品国产| 制服.丝袜.亚洲.中文.综合 | 国产69精品久久777的优势| 免费在线看成人av| 亚洲成人动漫一区| 一区二区三区四区在线| 国产精品你懂的在线欣赏| 精品动漫一区二区三区在线观看| 欧美另类高清zo欧美| 欧美三级中文字| 欧美亚洲日本一区| 在线精品亚洲一区二区不卡| 91视频在线观看免费| 成人黄色电影在线| 成人av在线电影| 波多野结衣在线aⅴ中文字幕不卡| 国产麻豆视频精品| 国产福利不卡视频| 国产精品1区2区3区在线观看| 久久99热这里只有精品| 免费观看久久久4p| 精品在线一区二区| 久久精品免费观看| 精品无人码麻豆乱码1区2区 | 一本久久a久久精品亚洲| 成人福利电影精品一区二区在线观看| 国产高清不卡一区| 成人午夜av在线| 91在线你懂得| 欧美日韩国产系列| 欧美一区二区三区在线电影| 欧美一级在线观看| 国产欧美日韩精品一区| 国产精品福利一区| 亚洲一区二区三区不卡国产欧美| 亚洲gay无套男同| 国内精品在线播放| 北条麻妃国产九九精品视频| 色婷婷av一区二区三区gif| 欧美日韩黄色一区二区| 精品国产伦一区二区三区观看体验| 久久女同互慰一区二区三区| 一区在线播放视频| 亚洲福利一二三区| 极品少妇xxxx精品少妇偷拍 | 激情欧美一区二区| 成人理论电影网| 欧美午夜片在线看| 欧美精品一区二区三区在线播放 | 亚洲一线二线三线久久久| 偷拍与自拍一区| 国产成人精品综合在线观看| 91论坛在线播放| 日韩欧美在线123| 国产精品伦理一区二区| 亚洲午夜免费福利视频| 国产精品99久久久久久似苏梦涵 | 丁香网亚洲国际| 欧美主播一区二区三区美女| 精品美女在线播放| 亚洲精品国产成人久久av盗摄| 乱一区二区av| 欧美日韩一卡二卡| 欧美极品另类videosde| 五月综合激情婷婷六月色窝| 国产精品亚洲第一区在线暖暖韩国| 91黄色小视频| 中文字幕欧美日本乱码一线二线| 亚洲一级二级在线| 成人美女在线观看| 欧美电视剧免费观看| 亚洲一区二区三区爽爽爽爽爽| 丁香另类激情小说| 日韩三级伦理片妻子的秘密按摩| 亚洲欧美日韩一区二区| 国产一区在线视频| 日韩午夜精品视频| 亚洲综合久久久久| 99久久久免费精品国产一区二区 | 欧美精品99久久久**| 国产精品福利一区| 国产成人aaa| 日韩欧美亚洲一区二区| 午夜欧美2019年伦理| 色婷婷精品大视频在线蜜桃视频| 国产精品无遮挡| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美日韩国产在线播放网站| 亚洲视频在线一区| 99精品偷自拍| 中文字幕第一区二区| 国产精品一区二区你懂的| 欧美va亚洲va| 秋霞影院一区二区| 欧美日韩国产在线播放网站| 亚洲一区在线观看免费| 色www精品视频在线观看| 国产精品久久久久久久久动漫 | 亚洲国产视频一区| 在线精品观看国产| 一区二区不卡在线视频 午夜欧美不卡在| 国产宾馆实践打屁股91| 中文字幕精品—区二区四季| 粉嫩av一区二区三区| 国产精品视频在线看| 成人在线视频首页| 亚洲免费观看高清完整版在线|