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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cmatrix.cpp

?? 《陳必紅算法》一書的附帶的源代碼
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
#include "stdio.h"
#include "string.h"
#include "complex.h"
#include "cmatrix.h"
#include "fstream.h"

// 缺省的構(gòu)造函數(shù),產(chǎn)生0行0列空復(fù)矩陣
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沒有給出,則產(chǎn)生一
				// 長(zhǎng)度為行乘列個(gè)復(fù)數(shù)和緩存
}
// 構(gòu)造一r行c列的復(fù)矩陣,可選的復(fù)緩存指向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沒有給出,則產(chǎn)生一
				// 長(zhǎng)度為行乘列個(gè)復(fù)數(shù)和緩存
}

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沒有給出,則產(chǎn)生一
				// 長(zhǎng)度為行乘列個(gè)復(fù)數(shù)和緩存
}

cmatrix cunit(size_t n) // 產(chǎ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;
}

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

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

// 從內(nèi)存數(shù)據(jù)塊構(gòu)造復(fù)矩陣。data指向內(nèi)存數(shù)據(jù)塊,構(gòu)造完畢后data指向的內(nèi)存可以釋放
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) : // 由實(shí)矩陣產(chǎn)生一個(gè)內(nèi)容相同的復(fù)矩陣
	istrans(0),isneg(0),isconj(0)
{
	rownum = m.rownum;
	colnum = m.colnum;
	if(b) { buf=b;	// 產(chǎn)生所需長(zhǎng)度的緩存
		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): // 兩個(gè)實(shí)矩陣成為實(shí)部和虛部
	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;	// 產(chǎn)生所需長(zhǎng)度的緩存
		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() // 由實(shí)部生成實(shí)矩陣
{
	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() // 由虛部生成實(shí)矩陣
{
	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; // 復(fù)制行數(shù)和列數(shù)
	colnum = m.colnum;
	if(buf == m.buf) // 如果本來就指向相同的緩存,則返回
		return (*this);
	buf->refnum--;	// 否則放棄原來的緩存,先將原緩存引用數(shù)減1
						// 如果不為0說明還有其它的矩陣引用數(shù)據(jù)
	if(!buf->refnum)delete buf; // 否則刪除緩存
	istrans = m.istrans;	// 復(fù)制標(biāo)志
	isneg = m.isneg;
	isconj = m.isconj;
	buf = m.buf; // 復(fù)制緩存指針
	buf->refnum++; // 緩存引用數(shù)增1
	return (*this);
}

cmatrix& cmatrix::operator=(matrix& m)
{
	rownum = m.rownum; // 復(fù)制行數(shù)和列數(shù)
	colnum = m.colnum;
	buf->refnum--;
	if(!buf->refnum) delete buf; // 放棄原來緩存
	istrans = isneg = isconj = 0; // 標(biāo)志清零
	buf = getnewcbuffer(rownum*colnum); // 申請(qǐng)新的緩存
	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) // 將矩陣所有元素設(shè)為常數(shù)a
{
	if(rownum == 0 || colnum==0 ) return (*this);
	istrans = isneg = isconj = 0; // 標(biāo)志清零
	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)
 // 重載函數(shù)運(yùn)算符,返回第r行c列的值
{
	if(r>= rownum || c >= colnum)
		throw TMESSAGE("range overflow");
	return value(r,c);
}

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


// 流輸出
ostream& operator<<(ostream& o, cmatrix& m)
{	// 先輸出關(guān)鍵詞cmatrix,后跟行數(shù)和列數(shù)
	o << "cmatrix " << m.rownum << '\t' << m.colnum << endl;
	// 每行由行號(hào),冒號(hào),后跟一行的復(fù)數(shù)構(gòu)成
	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) // 以關(guān)鍵詞cmatrix打到
		throw TMESSAGE("format error!");
	in >> m.rownum >> m.colnum; // 后跟行數(shù)和列數(shù)
	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); // 申請(qǐng)新的緩存
	m.istrans = m.isneg = m.isconj = 0; // 標(biāo)志清零
	size_t line;
	for(size_t i=0; i<m.rownum; i++) {
		in >> line;
		if(line != i+1) throw TMESSAGE("format error!"); // 每行以行號(hào)開始
		in.width(sizeof(label));
		in >> label;
		if(label[0] != ':') throw TMESSAGE("format error!"); // 后跟冒號(hào)
		COMPLEX a;
		for(size_t j=0; j<m.colnum; j++) { // 然后是這一行的數(shù)據(jù)
			in >> a;
			m.set(i,j,a);
		}
		if(!in.good()) throw TMESSAGE("read file error!");
	}
	return in;
}

// 數(shù)乘矩陣,原矩陣內(nèi)容改變?yōu)榻Y(jié)果
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);
}

// 數(shù)乘矩陣,原矩陣內(nèi)容不變,返回結(jié)果矩陣
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) // 矩陣加常數(shù),產(chǎn)生新矩陣
{
	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) // 矩陣加常數(shù),更動(dòng)原矩陣
{
	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) // 行列必須對(duì)應(yīng)相等
		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;
}

// 矩陣相加,不產(chǎn)生新的矩陣,修改原矩陣的內(nèi)容
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);
}

// 矩陣相乘,返回新產(chǎn)生的結(jié)果矩陣
cmatrix cmatrix::operator*(cmatrix& m)
{
	if(colnum != m.rownum) // 前矩陣的列數(shù)必須等于后矩陣的行數(shù)
		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;
}

// 矩陣相乘,改變?cè)仃嚨膬?nèi)容
cmatrix& cmatrix::operator*=(cmatrix& m)
{
	(*this) = (*this)*m;
	return (*this);
}

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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品夜夜嗨av一区二区三区| 国产99一区视频免费| 91麻豆精品国产91| 国产免费成人在线视频| 亚洲成人综合视频| 97久久人人超碰| 欧美大片日本大片免费观看| 亚洲精品视频免费看| 91国产福利在线| 国产激情一区二区三区| 这里只有精品免费| 亚洲国产日韩综合久久精品| 成人影视亚洲图片在线| 日韩一区二区影院| 午夜av一区二区| 欧美综合天天夜夜久久| 欧美一区二区三区男人的天堂| 亚洲精品一区二区精华| 美国欧美日韩国产在线播放| 欧美天天综合网| 亚洲免费电影在线| 亚洲美女少妇撒尿| 99久久精品国产精品久久| 中文字幕电影一区| 国产69精品久久99不卡| 日本一区二区综合亚洲| 国产成人精品aa毛片| 久久精品国产亚洲a| 久久国产生活片100| 在线综合+亚洲+欧美中文字幕| 亚洲国产精品久久不卡毛片| 精品污污网站免费看| 亚洲图片欧美一区| 欧美高清视频www夜色资源网| 亚洲一区二区三区在线看| 欧美亚州韩日在线看免费版国语版| 国产精品福利影院| 97精品久久久久中文字幕| ㊣最新国产の精品bt伙计久久| 99视频在线精品| 亚洲一区二区三区爽爽爽爽爽| 欧洲一区在线电影| 欧美色精品天天在线观看视频| 午夜久久福利影院| 日韩你懂的在线播放| 国产成人在线视频网址| 欧美激情一区二区三区四区| 亚洲精品免费播放| 国产精品久久看| 日韩激情一二三区| 精品久久五月天| 成人18精品视频| 玉米视频成人免费看| 欧美高清dvd| 国产精品一二三四五| 亚洲精品一二三| 欧美一区二区三区的| 高清不卡在线观看| 亚洲一区二区五区| 日韩精品一区二区三区在线| 成人国产亚洲欧美成人综合网| 一区二区三区在线影院| 日韩一区二区免费在线观看| 国产亚洲午夜高清国产拍精品 | 日韩三级中文字幕| 国产高清亚洲一区| 亚洲一卡二卡三卡四卡五卡| 欧美成va人片在线观看| 91免费看`日韩一区二区| 成人午夜电影久久影院| 欧美一区二区高清| 99久久99久久精品免费看蜜桃| 午夜精品一区在线观看| 中文字幕av一区二区三区高 | 国产欧美精品一区二区三区四区| 91 com成人网| 2024国产精品| 欧美高清你懂得| caoporn国产一区二区| 人禽交欧美网站| 最新国产の精品合集bt伙计| 精品国产欧美一区二区| 亚洲丝袜美腿综合| 26uuu国产一区二区三区| 欧美午夜电影网| 成人高清在线视频| 国产一区二区三区免费观看| 午夜免费欧美电影| 亚洲精品五月天| 五月婷婷色综合| 欧美日韩一区二区三区不卡| 成人精品视频网站| 国产一区二区影院| 免费亚洲电影在线| 亚洲第一二三四区| 一区二区三区在线不卡| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 日韩一区二区免费电影| 欧美三级午夜理伦三级中视频| 中文字幕色av一区二区三区| 久久久蜜桃精品| 亚洲精品在线观看视频| 欧美电影免费观看高清完整版 | 欧洲国内综合视频| 日韩国产在线一| 亚洲人成人一区二区在线观看| 国产欧美日韩精品一区| 久久久久国产精品免费免费搜索| 欧美r级电影在线观看| 制服丝袜av成人在线看| 欧美人妇做爰xxxⅹ性高电影| 欧美主播一区二区三区| 欧美亚洲高清一区| 欧美日韩国产综合视频在线观看| 91国产视频在线观看| 欧亚洲嫩模精品一区三区| 欧美日韩中文字幕一区二区| 欧美午夜电影一区| 天堂影院一区二区| 日韩高清在线观看| 另类人妖一区二区av| 国产毛片一区二区| 成人免费av在线| 日本韩国欧美一区| 91麻豆精品国产91久久久久| 欧美丰满少妇xxxxx高潮对白| 精品福利二区三区| 欧美日韩免费电影| 日韩一级欧美一级| 久久久精品免费免费| 国产精品你懂的在线| 亚洲一区二区三区中文字幕| 日欧美一区二区| 国产精品一区二区无线| a在线播放不卡| 欧美精品丝袜久久久中文字幕| 日韩一区二区电影| 国产欧美1区2区3区| 亚洲精品大片www| 麻豆精品一二三| 成人激情黄色小说| 国产在线乱码一区二区三区| 国产精品一区二区三区网站| 亚洲另类色综合网站| 亚洲国产成人tv| 国产精品99久久久久久久vr| 91久久国产最好的精华液| 91麻豆精品国产91久久久使用方法 | 日韩视频永久免费| 国产精品沙发午睡系列990531| 一区二区免费在线| 青青国产91久久久久久| 成人伦理片在线| 欧美一区二区三区免费| 亚洲欧洲精品一区二区三区| 免费观看91视频大全| 成人黄色av电影| 日韩精品中午字幕| 一区二区三区在线播| 国产91色综合久久免费分享| 欧美群妇大交群中文字幕| 日本一区免费视频| 美国一区二区三区在线播放| 在线免费观看视频一区| 久久久午夜精品| 日本在线不卡一区| 在线观看国产精品网站| 日本一区二区高清| 制服丝袜亚洲网站| 亚洲制服丝袜一区| 波多野结衣一区二区三区| 欧美mv和日韩mv国产网站| 亚洲第一搞黄网站| 色域天天综合网| 国产精品久久99| 国产精品1区二区.| 欧美大白屁股肥臀xxxxxx| 国产精品国产三级国产aⅴ入口| 亚洲图片激情小说| 日本欧美一区二区三区| 欧美午夜一区二区| 亚洲欧美激情一区二区| 成人精品视频.| 久久久99精品久久| 久久精品国产成人一区二区三区| 欧美日韩国产综合一区二区| 一区二区免费在线播放| 色综合天天综合| 亚洲激情av在线| 色综合久久中文综合久久牛| 中文字幕一区二区三区不卡| 国产 欧美在线| 欧美高清一级片在线观看| 成人一道本在线| 国产精品美女久久久久久久| 久久久久久久久久久黄色| 国产精品一区二区视频| 久久久久国产精品免费免费搜索| 国产一区二区三区黄视频 | 久久精品男人的天堂|