matlab2c基础使用教程(实矩阵、复矩阵)

全栈工程师开发手册 (作者:栾鹏)

matlab2c动态链接库下载
matlab库函数大全
matlab2c基础教程
matlab2c开发全解教程

开发注意事项:

1、目前matlab2c对矩阵的实现仅包含实数型、复数型数据。实数型矩阵使用Matrix定义,复数型矩阵使用CMatrix定义。
2、实数矩阵元素int、float元素类型会自动转为double。 复数元素类型为c++标准复数std::complex<double>使用typedef别名定义为Complex
3、本应用开发环境为vs2012,建议使用c++11编译器
4、借助广大网友的力量,动态链接库会实时更新实现更多的函数功能,欢迎下载最新版2017-12-06。
5、开发中请尽量规范代码编写,调用函数使用Matlab2c::xx函数,避免与其他库同名函数、同名变量的冲突
6、使用动态链接库dll,文件较小,需要匹配的调试环境。静态链接库,文件较大,不需要匹配的调试环境。

matlab2c开发调用方法(2选1):

使用动态链接库:
1、将Matlab2c.dll拷贝到exe同目录下
2、将Matlab2c.h、Matlab2c.lib放到项目头文件目录下
3、在cpp文件中引入下面的代码

#include "Matlab2c.h"
#pragma comment(lib,"Matlab2c.lib")  
using namespace Matlab2c;

使用静态链接库:
1、将Matlab2c.h、Matlab2c.lib放到项目头文件目录下
2、在cpp文件中引入下面的代码

#include "Matlab2c.h"
#pragma comment(lib,"Matlab2c.lib")  
using namespace Matlab2c;

matlab2c实数矩阵基础语法

#include "Matlab2c.h"
#pragma comment(lib,"Matlab2c.lib")  
using namespace Matlab2c;

//声明三个调用函数
double map_fun(double item,int row,int column,Matrix& src);
double map_row_fun(double prev,double cur,int row,int column,Matrix& src);
double map_column_fun(double prev,double cur,int row,int column,Matrix& src);
int main()
{
	try{
	//生成矩阵
	Matrix matrix1();   //定义一个空矩阵
	Matrix matrix2(2,3);  //定义矩阵行列,但是不定义矩阵元素的值
	Matrix matrix3(2,3,1.1);  //定义矩阵行列,同时设置所有元素的值等于第三个参数
	Matrix matrix3_1(3.14);  //定义一个1x1的矩阵
	cout<<"matrix3_1:\n"<<matrix3_1.toString()<<endl;   //输出矩阵

	//使用double[]定义矩阵
	double a[]={1,2,3,4,5,6};
	Matrix matrix4(2,3,a);    //使用一维数组定义一个矩阵,矩阵元素个数小于等于数组元素个数
	Matrix matrix5(1,6,a);	  //定义一个行向量
	Matrix matrix6(5,1,a);    //定义一个列向量,不使用全部数据
	cout<<"matrix6:\n"<<matrix6.toString()<<endl;   //输出矩阵


	//使用vector<>和vector<vector<>>定义矩阵
	vector<double> ivec(a, a+6);  //定义一个vector
	Matrix matrix6_1(ivec);   //使用vector定义一列矩阵(列向量)
	Matrix matrix6_2(ivec,2,3);   //使用vector定义矩阵
	vector<double> ivec1(a, a+6);
	vector<vector<double>> arr;    //定义一个vector<vector<>>
	arr.push_back(ivec);
	arr.push_back(ivec1);
	Matrix matrix6_3(arr);   //使用vector<vector<double>>定义矩阵
	cout<<"matrix6_3:\n"<<matrix6_3.toString()<<endl;   //输出矩阵
	
	//使用double[][]定义矩阵
	double aa[2][3]={{1,2,3},{4,5,6}} ;
	Matrix matrix7(2,3,(double*)aa);		//使用二维数组定义一个矩阵,矩阵元素个数小于等于数组元素个数
	Matrix matrix8("[1,2,3;4,5,6]");		//使用matlab语法字符串生成矩阵,分号表示换行
	Matrix matrix9("[1 2 3;4,5,6]");		//逗号或空格表示分列,
	Matrix matrix10("1 2 3;4,5,6;7 8 9");	//[]包含一个矩阵,可以省略
	Matrix matrix11("[1:2:8;4,5,6,7]");		//可以使用x1:x2:x3的数列形式表示一行数据,x1为首元素,x2为步长,x3为终点
	Matrix matrix12("[1:4;4,5,6,7]");		//可以使用x1:x3的数列形式表示一行数据,x1为首元素,x3为终点,步长为1
	Matrix matrix12_1=Matrix("1:3:12");				//生成向量
	matrix12_1 = Matrix("1:12");				//生成向量
	matrix12_1 = Matlab2c::linspace(1,12,13);	//使用函数生成向量,参数为起点,终点,数量
	cout<<"matrix12_1:\n"<<matrix12_1.toString()<<endl;   //输出矩阵


	//复制和赋值
	Matrix matrix13 = matrix12;				//复制生成一个矩阵,复制所有元素。[1,2,3,4;4,5,6,7]
	Matrix matrix14;
	matrix14=matrix12;		//赋值一个矩阵,复制所有元素
	cout<<"matrix14:\n"<<matrix14.toString()<<endl;   //输出矩阵

	//元素读取和赋值
	double dtemp=82.5;
	matrix14(0,1) = dtemp;   //矩阵元素赋值,下标从0开始
	dtemp = matrix14(1,0);   //读取矩阵元素,下标从0开始
	matrix5(0)=dtemp;   //向量元素赋值,下标从0开始
	dtemp = matrix5(1);  //读取向量元素,下标从0开始

	//子矩阵读取
	Matrix matrix15=matrix10(1,2,0,2);  //参数起始行(包含)、终止行(包含)、起始列(包含)、终止列(包含)
	Matrix matrix16=matrix10("1:2,0:1:2");  //读取子矩阵,下标从0开始
	Matrix matrix17=matrix6("0:2:5");  //读取子向量,下标从0开始
	cout<<"matrix17:\n"<<matrix17.toString()<<endl;   //输出矩阵
	//矩阵转置
	matrix17 = matrix4.T();   //T函数为转置
	cout<<"matrix17:\n"<<matrix17.toString()<<endl;   //输出矩阵

	//矩阵的运算
	double arr1[]={1,2,3,4,5,6};
	double arr2[]={6,5,4,3,2,1};
	Matrix matrix18(2,3,arr1);
	Matrix matrix19(2,3,arr2);

	//矩阵加法
	Matrix matrix20=matrix18+matrix19;   //矩阵相加
	matrix20 +=matrix18;	//矩阵+=运算符
	matrix20 = matrix18+1;	//矩阵加上常数,每个元素均加上常数
	matrix20 +=1;   //矩阵+=运算符
	cout<<"matrix20:\n"<<matrix20.toString()<<endl;   //输出矩阵

	//矩减法
	matrix20 =matrix18-matrix19;  //矩阵相减
	matrix20 -=matrix18;  //矩阵-=运算符
	matrix20 = matrix18-1;	//矩阵减去常数,每个元素均减去常数
	matrix20 -=1;   //矩阵-=运算符
	cout<<"matrix20:\n"<<matrix20.toString()<<endl;   //输出矩阵

	//矩阵乘法
	matrix19 = Matrix(3,2,arr2);
	matrix20 =matrix18*matrix19;  //矩阵相乘,
	matrix20 =matrix18*3;  //矩阵乘以常数,每个元素均乘以常数
	matrix20 *=3;  //矩阵常数的*=运算
	cout<<"matrix20:\n"<<matrix20.toString()<<endl;   //输出矩阵

	//矩阵除法
	matrix20 = matrix18/3;	//矩阵除以常数,每个元素均除以常数
	matrix20 /=3;   //矩阵常数的/=运算
	cout<<"matrix20:\n"<<matrix20.toString()<<endl;   //输出矩阵

	//矩阵点运算
	Matrix matrix20_1=matrix18.dot(matrix4,"+");   //点运算要求两个矩阵行列数相同
	matrix20_1=matrix18.dot(matrix4,"-");
	matrix20_1=matrix18.dot(matrix4,"*");
	matrix20_1=matrix18.dot(matrix4,"/");
	matrix20_1=matrix18.dot(matrix4,"\\");		//右除函数\在字符串中会被理解为转义符号,所以需要\\代表右除
	cout<<"matrix20_1:\n"<<matrix20_1.toString()<<endl;   //输出矩阵

	//矩阵正负号运算
	Matrix matrix21=-matrix18;    //负号表示每个元素都取反
	matrix21=+matrix18;  //正号表示元素不变
	cout<<"matrix21:\n"<<matrix21.toString()<<endl;   //输出矩阵

	//矩阵相等和不等判断
	if (matrix18==matrix4)   //矩阵相等性判断,每个元素均相等,要求行列数和每个元素都相等
		if (matrix4!=matrix5)  //矩阵的不相等性判断,行数、列数或其中任意一个元素不相等都会判断为不相等
			cout<<"矩阵18和矩阵4相等,矩阵4和矩阵5不相等"<<endl;

	//判断矩阵是否为行向量或列向量
	if (matrix5.isVector())
		cout<<"矩阵5是向量"<<endl;

	//矩阵横向和纵向扩展,改变源矩阵
	Matrix matrix22=matrix18;	//[1,2,3;4,5,6]
	matrix22.append_left(matrix3);   //在矩阵左侧扩展,改变了源矩阵,返回void,要求两个矩阵行数相等,等价于[matrix3,matrix22]
	matrix22=matrix18;
	matrix22.append_right(matrix3);   //在矩阵右侧扩展,改变了源矩阵,返回void,要求两个矩阵行数相等,等价于[matrix22,matrix3]
	matrix22=matrix18;
	matrix22.append_top(matrix3);   //在矩阵顶部扩展,改变了源矩阵,返回void,要求两个矩阵列数相等,等价于[matrix3;matrix22]
	matrix22=matrix18;
	matrix22.append_bottom(matrix3);   //在矩阵下部扩展,改变了源矩阵,返回void,要求两个矩阵列数相等,等价于[matrix22;matrix3]
	cout<<"matrix22:\n"<<matrix22.toString()<<endl;   //输出矩阵

	//矩阵删除行列,改变源矩阵
	Matrix matrix23=matrix10;	//[1 2 3;4,5,6;7 8 9]
	matrix23.remove_row(1);   //删除矩阵指定行,下标从0开始
	matrix23=matrix10;
	matrix23.remove_row(0,1);  //删除矩阵多行,起始行下标(包含),终止行下标(包含),下标从0开始
	matrix23=matrix10;
	matrix23.remove_column(1);  //删除矩阵指定列,下标从0开始
	matrix23=matrix10;
	matrix23.remove_column(1,2);  //删除矩阵多列,起始列下标(包含),终止列下标(包含),下标从0开始
	matrix23=matrix10;
	matrix23.remove_row_column(1,1);  //删除矩阵指定行和指定列,下标从0开始
	matrix23=matrix10;
	matrix23.remove_row_column(0,1,1,1);  //删除矩阵多行和多列,起始行下标(包含),终止行下标(包含),起始列下标,终止列下标,下标从0开始
	cout<<"matrix23:\n"<<matrix23.toString()<<endl;   //输出矩阵

	//替换子矩阵
	matrix10.replace(matrix8,0,1);    //matrix8为[1,2,3;4,5,6],matrix10为[1,2,3;4,5,6;7,8,9]
	cout<<"matrix10:\n"<<matrix10.toString()<<endl;   //输出矩阵

	//矩阵遍历
	Matrix matrix24;	//[1,2,3;4,5,6]
	matrix24 = matrix18.map(map_fun);   //map函数遍历每一个元素,不改变源矩阵
	matrix24 = matrix18.map_row(map_row_fun);   //map函数按行遍历每一行,不改变源矩阵。每一行返回一个值,最后获得一个列向量
	matrix24 = matrix18.map_column(map_column_fun);   //map函数按列遍历每一列,不改变源矩阵。每一列返回一个值,最后获得一个行向量
	cout<<"matrix24:\n"<<matrix24.toString()<<endl;   //输出矩阵

	//矩阵类型的转化
	Matrix matrix25=matrix4;	//[1 2 3;4,5,6]
	string str=matrix25.toString();   //转化为字符串,每个元素保留4位小数
	double *arr3 = matrix25.toSeries();  //转化为一维数组
	double **arr4 = matrix25.toArray();  //转化为二维数组
	vector<double> vec1 = matrix25.toVector();  //转化为一维向量vector
	vector<vector<double>> vec2 = matrix25.toVector2();  //转化为二维向量vector
	cout<<vec2[1][1]<<endl;
	}
	catch(exception err)
	{
		cout<<err.what()<<endl;
	}
	system("pause");
	return 0;
}

//定义一个遍历函数(格式固定)。输入参数:当前元素的值,所属行,所属列,源矩阵。返回当前元素的替代值。
//此处的遍历函数为每一个元素加上1
 double map_fun(double item,int row,int column,Matrix& src)
 {
	 return item+1;
 }

 //定义一个按行遍历函数(固定格式),每一行得到一个值
 //输入参数:前一个元素,当前元素,当前元素所属行,当前元素所属列,源矩阵。
 //迭代从第二项开始,prev初始值为第一项,cur初始值为第二项。计算值自动传给下一函数的prev,返回最后一次迭代产生的值
 //此处的按行遍历函数求每行中的最大值
 double map_row_fun(double prev,double cur,int row,int column,Matrix& src)
 {
	 if(prev>cur)
		 return prev;
	 return cur;
 }


 //定义一个按列遍历函数(固定格式),每一列得到一个值
  //输入参数:前一个元素,当前元素,当前元素所属行,当前元素所属列,源矩阵
 //迭代从第二项开始,prev初始值为第一项,cur初始值为第二项。计算值自动传给下一函数的prev,返回最后一次迭代产生的值
 //此处的按列遍历函数求每列中的平均值
 double map_column_fun(double prev,double cur,int row,int column,Matrix& src)
 {
	 if(row==src.row-1)  //如果遍历到最后一行数据
		return (prev+cur)/src.row;   //加上当前项,再取平均
	return prev+cur;		//前一项加上当前项,获得的和向后传递
 }






matlab2c实数矩阵基础语法

#include "Matlab2c.h"
#pragma comment(lib,"Matlab2c.lib")  
using namespace Matlab2c;

//在Matlab2c空间中,使用typedef std::complex<double> Complex将c++标准复数重命名为Complex,所以Complex的使用遵循标准复数的使用

//声明三个调用函数
Complex map_fun(Complex item,int row,int column,CMatrix& src);
Complex map_row_fun(Complex prev,Complex cur,int row,int column,CMatrix& src);
Complex map_column_fun(Complex prev,Complex cur,int row,int column,CMatrix& src);
int main()
{
	Complex com0= Complex(0,0);
	Complex com1 = Complex(1,1);
	Complex com2 = Complex(2,2);
	Complex com3 = Complex(3,3);
	Complex com4 = Complex(4,4);
	Complex com5 = Complex(5,5);
	Complex com6 = Complex(6,6);
	Complex com7 = Complex(7,7);
	Complex com8 = Complex(8,8);
	Complex com9 = Complex(9,9);
	cout<<com1+2.0<<endl;								//Complex在运算中只能将double型数据自动转化为Complex

	try{

	//生成矩阵
	double a0[]={1,2,3,4,5,6};
	double a1[]={1,2,3,4,5,6};
	CMatrix matrix1();									//定义一个空矩阵
	CMatrix matrix2(2,3);								//定义矩阵行列,但是不定义矩阵元素的值
	CMatrix matrix3(2,3,Complex(1,-1));					//定义矩阵行列,同时设置所有元素的值等于第三个参数
	CMatrix matrix4(3.14);								//定义一个1x1的矩阵,可以使用一个实数,会自动转为复数
	CMatrix matrix4_1(Matrix(a0,2,3));					//使用实数矩阵生成复数矩阵,虚部为0
	CMatrix matrix4_2(Matrix(a0,2,3),Matrix(a0,2,3));   //使用两个实数矩阵生成复数矩阵,分别为实部和虚部
	CMatrix matrix4_3(2,3,a0,a1);						//使用两个实数数组生成复数矩阵,分别为实部和虚部
	CMatrix matrix4_4(a0,a1,2,3);						//使用两个实数数组生成复数矩阵,分别为实部和虚部
	cout<<"matrix4_4:\n"<<matrix4_4.toString()<<endl;   //输出矩阵

	//使用double[]定义矩阵
	Complex a[6] = {com1,com2,com3,com4,com5,com6};
	CMatrix matrix5(2,3,a);								//使用一维数组定义一个矩阵,矩阵元素个数小于等于数组元素个数
	CMatrix matrix6(1,6,a);								//定义一个行向量
	CMatrix matrix7(5,1,a);								//定义一个列向量,不使用全部数据
	cout<<"matrix7:\n"<<matrix7.toString()<<endl;		//输出矩阵


	//使用vector<>和vector<vector<>>定义矩阵
	vector<Complex> ivec(a, a+6);						//定义一个vector
	CMatrix matrix8(ivec);								//使用vector定义一列矩阵(列向量)
	CMatrix matrix9(ivec,2,3);							//使用vector定义矩阵
	vector<Complex> ivec1(a, a+6);
	vector<vector<Complex>> arr;						//定义一个vector<vector<>>
	arr.push_back(ivec);
	arr.push_back(ivec1);
	CMatrix matrix10(arr);								//使用vector<vector<double>>定义矩阵
	cout<<"matrix10:\n"<<matrix10.toString()<<endl;		//输出矩阵
	
	使用double[][]定义矩阵
	Complex aa[2][3]={{com1,com2,com3},{com4,com5,com6}} ;
	CMatrix matrix11(2,3,(Complex*)aa);					//使用二维数组定义一个矩阵,矩阵元素个数小于等于数组元素个数
	cout<<"matrix11:\n"<<matrix11.toString()<<endl;		//输出矩阵


	//复制和赋值
	CMatrix matrix12 = matrix5;							//复制生成一个矩阵,复制所有元素。
	CMatrix matrix13;
	matrix13=matrix5;									//赋值一个矩阵,复制所有元素
	cout<<"matrix13:\n"<<matrix13.toString()<<endl;		//输出矩阵

	//元素读取和赋值
	matrix13(0,1) = com0;								//矩阵元素赋值,下标从0开始
	com0 = matrix13(1,0);								//读取矩阵元素,下标从0开始
	matrix7(0)=com0;									//向量元素赋值,下标从0开始
	com0 = matrix7(1);									//读取向量元素,下标从0开始

	//子矩阵读取
	CMatrix matrix14=matrix5(0,1,0,2);					//参数起始行(包含)、终止行(包含)、起始列(包含)、终止列(包含)
	cout<<"matrix14:\n"<<matrix14.toString()<<endl;		//输出矩阵
	
	//矩阵转置
	CMatrix matrix15 = matrix5.T();						//T函数为转置
	cout<<"matrix15:\n"<<matrix15.toString()<<endl;		//输出矩阵

	//矩阵的运算
	Complex arr1[]={com1,com2,com3,com4,com5,com6};
	Complex arr2[]={com6,com5,com4,com3,com2,com1};
	CMatrix matrix16(2,3,arr1);
	CMatrix matrix17(2,3,arr2);

	//矩阵加法
	CMatrix matrix18=matrix16+matrix17;					//矩阵相加
	matrix18 +=matrix16;								//矩阵+=运算符
	matrix18 = matrix16+1;								//矩阵加上常数,每个元素均加上常数
	matrix18 +=com1;									//矩阵+=运算符
	cout<<"matrix18:\n"<<matrix18.toString()<<endl;		//输出矩阵

	//矩减法
	matrix18 =matrix16-matrix17;						//矩阵相减
	matrix18 -=matrix16;								//矩阵-=运算符
	matrix18 = matrix16-1;								//矩阵减去常数,每个元素均减去常数
	matrix18 -=com1;									//矩阵-=运算符
	cout<<"matrix18:\n"<<matrix18.toString()<<endl;		//输出矩阵

	//矩阵乘法
	matrix17 = CMatrix(3,2,arr2);
	matrix18 =matrix16*matrix17;						//矩阵相乘,
	cout<<"matrix18:\n"<<matrix18.toString()<<endl;		//输出矩阵
	matrix18 =matrix18*3.0;								//矩阵乘以常数,每个元素均乘以常数
	matrix18 *=com1;									//矩阵常数的*=运算
	cout<<"matrix18:\n"<<matrix18.toString()<<endl;		//输出矩阵

	//矩阵除法
	matrix18 = matrix16/3.0;							//矩阵除以常数,每个元素均除以常数
	matrix18 /=com1;									//矩阵常数的/=运算
	cout<<"matrix18:\n"<<matrix18.toString()<<endl;		//输出矩阵

	//矩阵点运算
	CMatrix matrix19=matrix16.dot(matrix5,"+");			//点运算要求两个矩阵行列数相同
	matrix19=matrix16.dot(matrix5,"-");
	matrix19=matrix16.dot(matrix5,"*");
	matrix19=matrix16.dot(matrix5,"/");
	matrix19=matrix16.dot(matrix5,"\\");				//右除函数\在字符串中会被理解为转义符号,所以需要\\代表右除
	cout<<"matrix19:\n"<<matrix19.toString()<<endl;		//输出矩阵

	//矩阵正负号运算
	CMatrix matrix20=-matrix16;							//负号表示每个元素都取反
	matrix20=+matrix16;									//正号表示元素不变
	cout<<"matrix20:\n"<<matrix20.toString()<<endl;		//输出矩阵

	//矩阵相等和不等判断
	if (matrix16==matrix5)								//矩阵相等性判断,每个元素均相等,要求行列数和每个元素都相等
		if (matrix5!=matrix6)							//矩阵的不相等性判断,行数、列数或其中任意一个元素不相等都会判断为不相等
			cout<<"矩阵16和矩阵5相等,矩阵5和矩阵6不相等"<<endl;

	//判断矩阵是否为行向量或列向量
	if (matrix6.isVector())
		cout<<"矩阵6是向量"<<endl;

	//矩阵横向和纵向扩展,改变源矩阵
	CMatrix matrix21=matrix16;	
	matrix21.append_left(matrix3);						//在矩阵左侧扩展,改变了源矩阵,返回void,要求两个矩阵行数相等,等价于[matrix3,matrix21]
	matrix21=matrix16;
	matrix21.append_right(matrix3);						//在矩阵右侧扩展,改变了源矩阵,返回void,要求两个矩阵行数相等,等价于[matrix21,matrix3]
	matrix21=matrix16;
	matrix21.append_top(matrix3);						//在矩阵顶部扩展,改变了源矩阵,返回void,要求两个矩阵列数相等,等价于[matrix3;matrix21]
	matrix21=matrix16;
	matrix21.append_bottom(matrix3);					//在矩阵下部扩展,改变了源矩阵,返回void,要求两个矩阵列数相等,等价于[matrix21;matrix3]
	cout<<"matrix21:\n"<<matrix21.toString()<<endl;		//输出矩阵

	//矩阵删除行列,改变源矩阵
	Complex b1[9] = {com1,com2,com3,com4,com5,com6,com7,com8,com9};
	CMatrix matrix22(3,3,b1);
	CMatrix matrix23=matrix22;
	matrix23.remove_row(1);								//删除矩阵指定行,下标从0开始
	matrix23=matrix22;
	matrix23.remove_row(0,1);							//删除矩阵多行,起始行下标(包含),终止行下标(包含),下标从0开始
	matrix23=matrix22;
	matrix23.remove_column(1);							//删除矩阵指定列,下标从0开始
	matrix23=matrix22;
	matrix23.remove_column(1,2);						//删除矩阵多列,起始列下标(包含),终止列下标(包含),下标从0开始
	matrix23=matrix22;
	matrix23.remove_row_column(1,1);					//删除矩阵指定行和指定列,下标从0开始
	matrix23=matrix22;
	matrix23.remove_row_column(0,1,1,1);				//删除矩阵多行和多列,起始行下标(包含),终止行下标(包含),起始列下标,终止列下标,下标从0开始
	cout<<"matrix23:\n"<<matrix23.toString()<<endl;		//输出矩阵

	//替换子矩阵
	matrix22.replace(matrix5,0,1);						//matrix5为[1,2,3;4,5,6],matrix22为[1,2,3;4,5,6;7,8,9]
	cout<<"matrix22:\n"<<matrix22.toString()<<endl;		//输出矩阵

	//矩阵遍历
	matrix23 = matrix5.map(map_fun);					//map函数遍历每一个元素,不改变源矩阵
	matrix23 = matrix5.map_row(map_row_fun);			//map函数按行遍历每一行,不改变源矩阵。每一行返回一个值,最后获得一个列向量
	matrix23 = matrix5.map_column(map_column_fun);		//map函数按列遍历每一列,不改变源矩阵。每一列返回一个值,最后获得一个行向量
	cout<<"matrix23:\n"<<matrix23.toString()<<endl;		//输出矩阵

	//复矩阵属性函数
	Matrix matrix24;
	matrix24 = matrix5.real();							//求实部矩阵
	matrix24 = matrix5.imag();							//求虚部矩阵
	matrix24 = matrix5.angle();							//求角度矩阵
	matrix24 = matrix5.abs();							//求模值矩阵
	CMatrix matrix24_1 = matrix5.conj();				//求共轭矩阵
	cout<<"matrix24_1:\n"<<matrix24_1.toString()<<endl;	//输出矩阵

	//矩阵类型的转化
	CMatrix matrix25=matrix5;
	string str=matrix25.toString();						//转化为字符串,每个元素保留4位小数
	Complex *arr3 = matrix25.toSeries();				//转化为一维数组
	Complex **arr4 = matrix25.toArray();				//转化为二维数组
	vector<Complex> vec1 = matrix25.toVector();			//转化为一维向量vector
	vector<vector<Complex>> vec2 = matrix25.toVector2();//转化为二维向量vector
	cout<<vec2[1][1]<<endl;
	}
	catch(exception err)
	{
		cout<<err.what()<<endl;
	}
	system("pause");
	return 0;
}

//定义一个遍历函数(格式固定)。输入参数:当前元素的值,所属行,所属列,源矩阵。返回当前元素的替代值。
//此处的遍历函数为每一个元素加上1+1j
 Complex map_fun(Complex item,int row,int column,CMatrix& src)
 {
	 Complex com1(1,1);
	 return (item+com1);
 }

 //定义一个按行遍历函数(固定格式),每一行得到一个值
 //输入参数:前一个元素,当前元素,当前元素所属行,当前元素所属列,源矩阵。
 //迭代从第二项开始,prev初始值为第一项,cur初始值为第二项。计算值自动传给下一函数的prev,返回最后一次迭代产生的值
 //此处的按行遍历函数求每行中的实部最大值
 Complex map_row_fun(Complex prev,Complex cur,int row,int column,CMatrix& src)
 {
	 if(prev.real()>cur.real())
		 return prev;
	 return cur;
 }


 //定义一个按列遍历函数(固定格式),每一列得到一个值
  //输入参数:前一个元素,当前元素,当前元素所属行,当前元素所属列,源矩阵
 //迭代从第二项开始,prev初始值为第一项,cur初始值为第二项。计算值自动传给下一函数的prev,返回最后一次迭代产生的值
 //此处的按列遍历函数求每列中的平均值
 Complex map_column_fun(Complex prev,Complex cur,int row,int column,CMatrix& src)
 {
	 if(row==src.row-1)						//如果遍历到最后一行数据
		return (prev+cur)/(src.row*1.0);	//加上当前项,再取平均
	return prev+cur;						//前一项加上当前项,获得的和向后传递
 }


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾讯AI架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值