精华内容
下载资源
问答
  • #求复数矩阵的长度(复数矩阵的模) 详见这里:https://www.cnblogs.com/seniusen/p/11957404.html
    展开全文
  • Intel MKL 求解大型稀疏复数矩阵 (C/C++)实例。 适用与求解大型对称或者非对称稀疏复数矩阵
  • numpy实现:预先指定一个复数矩阵,然后将两个实数矩阵所合成的复数矩阵结果放在其中 1、不预先指定,直接将两个实数矩阵合为一个复数矩阵 方法1: Complex_Mat = Real_Mat[0, :, :] + 1j * Real_Mat[1, :, :] 方法...

    numpy实现:预先指定一个复数矩阵,然后将两个实数矩阵所合成的复数矩阵结果放在其中

    1、不预先指定,直接将两个实数矩阵合为一个复数矩阵

    方法1:

    Complex_Mat = Real_Mat[0, :, :] + 1j * Real_Mat[1, :, :]
    

    方法2:

    Complex_Mat = 1j * Real_Mat[1, :, :]
    Complex_Mat += Real_Mat[0, :, :]
    

    其中,第二种方法大家说更节省内存。

    2、若出于某种需求,需使用numpy预先初始化一个复数矩阵存放结果

    这种情况下最需要注意的是:预先声明的这个矩阵的类型dtype一定得指定为复数complex

    Complex_Mat = np.zeros((1, 4, 4), dtype=complex)  # 注意dtype,否则下方的语句执行后Complex_Mat中只存放实数
    Complex_Mat = Real_Mat[0, :, :] + 1j * Real_Mat[1, :, :]
    

    将一个4维实数矩阵转换为3维的复数矩阵的简单函数代码如下:

    def Real2Complex(Real_Mat):
        """
    
        :param Real_Mat: 实数矩阵 (2*n, h, w, c) 输出样本数为2n(1-n为实部,n-2n为虚部),h和w为行和列,c为通道数
        :return: 复数矩阵 (n, h, w) n为样本数,h和w为行和列
        """
        Real_Mat = np.squeeze(Real_Mat, axis=3)
        n, h, w = Real_Mat.shape
        Complex_Mat = np.zeros((n // 2, h, w), dtype=complex)
        for idx in range(len(Complex_Mat)):
            Complex_Mat[idx, :, :] = Real_Mat[idx, :, :] + 1j * Real_Mat[idx + len(Complex_Mat), :, :]
        return Complex_Mat
    
    展开全文
  • 复数矩阵求逆

    2014-03-19 11:48:51
    复数矩阵求逆 用伴随矩阵法即公式法对复数矩阵求逆
  • Java复数矩阵库——JamPack,可用于简单的复数矩阵运算
  • 复数矩阵SVD

    2013-09-16 11:53:52
    复数矩阵的SVD分解代码,C++代码,与matlab结果一致,重构误差在1e-16量级 注意: 1. 待分解矩阵A(M*N)必须满足M>=N 2. 内含测试代码,和makefile,在xubuntu12.10下验证通过
  • 一个vc开发的复数矩阵用qr分解方法求解逆矩阵的V刹动态库源码,以在vc6平台调试通过,原始矩阵是4维的,可扩展
  • 复数矩阵相乘的扩展矩阵计算方法

    千次阅读 2018-07-04 21:44:18
    在诸多信号处理领域,我们所涉及到的信号都是复数信号,那么matlab如何处理复数矩阵呢? 假设矩阵AA\boldsymbol{A}和BB\boldsymbol{B}为复数矩阵,当我们运用matlab计算两个矩阵的乘积时(矩阵AA\boldsymbol{A}和BB\...

    Matlab是矩阵计算语言,其最基本的存储单位就是矩阵。在诸多信号处理领域,我们所涉及到的信号都是复数信号,那么matlab如何处理复数矩阵呢? 假设矩阵AB为复数矩阵,当我们运用matlab计算两个矩阵的乘积时(矩阵AB满足矩阵相乘的维度条件),我们可以直接在命令窗口输入AB

    当然,我们也可以采用扩展矩阵的做法来计算复数矩阵的计算。首先是对矩阵进行拆分B=BR+jBM,我们用实数矩阵表示B,如

    (393)B=(BRBM)

    另外
    (394)A=(ARAMAMAR)

    则有
    (395)AB=(ARAMAMAR)(BRBM)=(ARBRAMBMAMBR+ARBM)

    最后,我们用AB的计算结果来表示C,即C=ARBRAMBM+j(AMBR+ARBM)

    展开全文
  • 被应付的作业们实现复数矩阵的加减乘除大一非计算机类程序设计作业 实现复数矩阵的加减乘除 大一非计算机类程序设计作业 要求: (1)使用+与-号实现两个复数矩阵的加减法; (2)使用*实现两个复数矩阵的乘法; (3...

    实现复数矩阵的加减乘除

    大一非计算机类程序设计作业

    要求:

    (1)使用+与-号实现两个复数矩阵的加减法;
    (2)使用*实现两个复数矩阵的乘法;
    (3)使用!实现复数矩阵的共轭转置操作;
    (4)使用<<与>>实现复数矩阵的输出与输入;
    (5)要求兼容实数矩阵运算

    其实:;兼容矩阵运算也可以使用转换构造函数,但是我直接读取时判断,个人觉得比较方便。

    /*
      user: sky48
      language: c++
      for dream for young
    */
    #include<bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    double eps; bool correct;
    struct comp                                                              //complex 结构体 
    {	
    	comp(double a=0,double b=0){ real=a, imag=b; }                       //complex 构造函数 
    	comp operator + (comp& a){ return comp(real+a.real,imag+a.imag); }   //complex 重载运算符 + 
    	comp operator - (comp& a){ return comp(real-a.real,imag-a.imag); }   //complex 重载运算符 -
    	comp operator * (comp& a)
    		{return comp(real*a.real-imag*a.imag,real*a.imag+imag*a.real); } //complex 重载运算符 * 
    	void disp();                                                         //complex 输出函数 
    	double real,imag;
    };
    class matrix                                                             //矩阵 类 
    {
    	public:
    	friend istream &operator >> (istream&,matrix&);                      //matrix 重载运算符 >> 
    	friend ostream &operator << (ostream&,matrix&);                      //matrix 重载运算符 <<
    	friend matrix &operator + (matrix&,matrix&);                         //matrix 重载运算符 +
    	friend matrix &operator * (matrix&,matrix&);                         //matrix 重载运算符 *
    	friend matrix &operator - (matrix&,matrix&);                         //matrix 重载运算符 -
    	friend matrix &operator ! (matrix&);                                 //matrix 重载运算符 !
    	void display();                                                      //matrix 输出函数 
    	void reads();                                                        //matrix 读入函数 
    	int n,m;
    	private:
    	comp s[25][25];
    };
    void gets(double &real,double &imag,char tmp[]){                         // 复数读入 
    	int p=0,f=1; int v=0,v1=0,v2=1; double v3;
    	while(!isdigit(tmp[p])){if(tmp[p]=='-') f=-1; 
    	if(tmp[p]=='i'){ imag=f; return;} p++;} v=tmp[p++]-48; 
    	while( isdigit(tmp[p])) v=(v<<1)+(v<<3)+tmp[p]-48, p++;				 //读入优化 
    	if(tmp[p]=='.'){
    		p++;
    		while(isdigit(tmp[p])) v2=(v2<<1)+(v2<<3), v1=(v1<<1)+(v1<<3)+tmp[p]-48, p++;
    	}				
    	v3=double(v1)/double(v2)+double(v); v3*=f;	                         //兼容double类型读入优化 
    	if(tmp[p]=='i'){ real=0; imag=v3; return ; }                         //纯虚数判断 
    	if(tmp[p]!='+' && tmp[p]!='-'){	real=v3, imag=0; return ; }          //复数判断 
    	real=v3; f=v2=1, v=v1=v3=0;
    	if(tmp[p]=='-') f=-1; p++; if(tmp[p]=='i'){ imag=f; return;} 
    	v=tmp[p++]-48;
    	while( isdigit(tmp[p])) v=(v<<1)+(v<<3)+tmp[p]-48, p++;              //虚数读入优化 
    	if(tmp[p]=='.'){
    		p++;
    		while(isdigit(tmp[p])) v2=(v2<<1)+(v2<<3), v1=(v1<<1)+(v1<<3)+tmp[p]-48, p++;
    	}                                                                    //兼容double虚数读入优化 
    	v3=double(v1)/double(v2)+double(v); v3*=f; imag=v3;
    }
    istream& operator>>(istream& input,matrix& a){
    	cout<<"now input the matrix:(please input a+bi while a or b can be zero)\n";
    	char tmp[20];
    	rep(i,1,a.n) rep(j,1,a.m){
    		input>>tmp; gets(a.s[i][j].real,a.s[i][j].imag,tmp);             //读入并存储在real和imag中 
    	}
    	return input;
    }
    ostream& operator<<(ostream& ouput,matrix& a){
    	cout<<"the row and line is "<<a.n<<" "<<a.m<<endl;                   //输出行和列 
    	rep(i,1,a.n){
    		rep(j,1,a.m) a.s[i][j].disp(), cout<<" ";
    		cout<<endl;
    	}          															 //输出矩阵 
    }
    matrix &operator + (matrix &a,matrix &b){								 //matrix 重载运算符 +
    	a.n=max(b.n,a.n), a.m=max(b.m,a.m);
    	rep(i,1,a.n) rep(j,1,a.m) a.s[i][j]=a.s[i][j]+b.s[i][j];
    	return a;
    }
    matrix &operator - (matrix &a,matrix &b){								 //matrix 重载运算符 - 
    	a.n=max(b.n,a.n), a.m=max(b.m,a.m);
    	rep(i,1,a.n) rep(j,1,a.m) a.s[i][j]=a.s[i][j]-b.s[i][j];
    	return a;
    }
    matrix &operator * (matrix &a,matrix &b){  								 //matrix 重载运算符 * 
    	if(a.m!=b.n) correct=1, cout<<"the multiplication is error."<<endl;
    	int t=b.m; comp f[25][25];
    	rep(i,1,a.n) rep(j,1,b.m){
    		f[i][j]=comp(0,0); 
    		rep(k,1,a.m) f[i][j]=a.s[i][k]*b.s[k][j]+f[i][j];
    	}
    	a.m=b.m;
    	rep(i,1,a.n) rep(j,1,a.m) a.s[i][j]=f[i][j];
    	return a;
    }
    matrix &operator ! (matrix &a){ 										 //matrix 重载运算符 ! 
    	swap(a.n,a.m); comp tmp(0,0); int t=max(a.n,a.m);
    	rep(i,1,t) rep(j,1,i-1)
    		tmp=a.s[i][j], a.s[i][j]=a.s[j][i], a.s[j][i]=tmp, a.s[i][j].imag*=-1;
    	return a;
    }
    void matrix::display(){									 				 //matrix 输出函数 
    	rep(i,1,n) rep(j,1,m) s[i][j].disp();
    }
    void matrix::reads(){ 													 //matrix 读入行和列 
    	cout<<"please input the row and line of matrix:"; 
    	cin>>n>>m;
    }
    void comp::disp(){														 //matrix 输出函数 
    	if(fabs(imag)<eps) printf("%12.2lf",real);							 //如果为实数 
    	else {
    		if(fabs(real)<eps) printf("%11.2lfi",imag);						 //如果为纯虚数 
    		else printf("%5.2lf%+06.2lfi",real,imag);						 //如果为复数 
    	}
    }
    int main ()
    {
    //	freopen("tt.txt","r",stdin);
    	eps=0.00001; 
    	matrix mat1,mat2;
    	mat1.reads(); cin>>mat1;											 //读入行列和矩阵 
    	mat2.reads(); cin>>mat2;
    	char typ;
    	cout<<"what operator you wanna do:"; cin>>typ;						 //读入操作的类型 
    	if(typ=='+') mat1=mat1+mat2;
    	if(typ=='-') mat1=mat1-mat2;
    	if(typ=='*') mat1=mat1*mat2;	
    	if(typ=='!') mat1=!mat1;
    	if(!correct) cout<<mat1; 
    	return 0;
    }
    
    
    展开全文
  • 然而事实上, 绝大部分的实数算法都可以拓展到复数域,其核心思想大多都是将复数矩阵等效为一个实数矩阵,这样就可以满足实数算法的要求了。 本文讨论的就是如何将复数矩阵等效为一个实数矩阵。 本文的参考文献为:...
  • 复数矩阵的特征值分解,使用了GSL科学计算函数库,使得特征值分解时间大大减少。
  • C++实现复数矩阵求逆 matlab inv

    千次阅读 2020-07-06 11:10:57
    C++实现复数矩阵求逆 matlab inv一、引言二、原理2.1 实数矩阵求逆2.2 复数矩阵求逆三、代码四、测试 一、引言 之前偶尔一次有用到将matlab转为C++语言的需求,其中matlab有一个inv函数可以非常方便的求矩阵的逆,...
  • 复数矩阵求逆,用了STL中的vector表示矩阵,用了complex类表示复数,求逆矩阵使用了初等变换求逆矩阵的方法
  • 复数矩阵求逆运算

    2012-10-12 22:12:46
    复数矩阵求逆运算C++代码,可以准确的求其结果!
  • 法,构造了用于描述图像结构信息的复数矩阵。把复数作为一种信息合并方法,将图像中人眼敏感程度较高的局部方差分量和 代表一般敏感信息的图像像素的灰度值分布作为复数的实部和虚部。研究了非实数域的结构相似度...
  • 支持任意阶的复数矩阵求逆,a是复数矩阵的实属部分,b是虚数部分,c、d分别是输出实属和虚数部分
  • 使用 C 语言实现复数矩阵的求逆,可以运行,使用 VS2012 软件编写。
  • 内容:1、实数矩阵加法以及 2、复数矩阵加法 GPU并行 CUDA代码 MATLAB Cmex混合编程。MATLAB CUDA C++
  • 复数矩阵元表达的失调光学系统衍射积分,研究了部分相干光交叉谱密度经过复杂光学系统的传输规律,并将之用于无腔型激光输出特性的研究。具体对实验室等离子体X射线激光进行了分析,所得结果与已有实验符合较好。
  • 我想问一下各位大佬,matlab中的函数imnoise能否处理复数矩阵的图像,如果不能,求大佬给出一种给复数数组图像添加噪声的方法!
  • VB里怎么输入复数矩阵,怎么计算? 实数矩阵我可以计算,就是不知道复数怎么整。
  • 复数 矩阵.rar

    2019-07-15 10:59:47
    (1)完成矩阵加法,乘法运算. (2)完成复数的结构定义,并实现复数的赋值,加、减、输出等操作。
  • matlab 复数矩阵的转置

    千次阅读 2019-05-22 09:09:00
    如果a为复数矩阵,a'会将虚部改变,a.'不会改变虚部。K>> a= rand(3,3) + rand(3,3)*i a = 0.0357 + 0.7060i 0.6787 + 0.0462i 0.3922 + 0.6948i 0.8491 + 0.0318i 0.7577 + 0.0971i 0.6555 + 0.3171...
  • 一、前言 由于实数矩阵的运算较简单,因此在本章中,我只给出复数矩阵的相关...即复数矩阵复数矩阵之间的加/减法运算: /* Complex Matrix Add: matrixC = matrixA + matrixB */ void AddMatrix(const Matrix* matr
  • 复数矩阵共轭转置

    千次阅读 2013-04-05 14:04:29
    设矩阵A是复数矩阵,A=[(re+im)ij],A的共轭矩阵为[(re-im)ij],记为B矩阵,则B的转置矩阵即为A的共轭转置矩阵,记为C矩阵。   对于M×N复数矩阵来说,它的共轭转置矩阵是一个N×M矩阵。 从A☞B,只需要更改im...
  • 复数矩阵求逆的 C 语言程序

    千次阅读 2019-05-20 11:38:28
    关于复数矩阵求逆,如果使用 MATLAB,就非常简单。我们先用一个 MATLAB 的例子来说明,等会要将 C 语言的程序和 MATLAB 的程序进行对比。 close all; clear all; clc; %定义矩阵a为复数矩阵 a = [[4+2*i,3+1*i,4+3*...
  • 复数矩阵的转置、共轭、共轭转置

    千次阅读 2020-03-23 10:18:58
    复数矩阵的转置分【共轭转置】和【点转置】两种,如果不加说明默认指的是【共轭转置】。 在 MATLAB 中,点转置运算、共轭运算和共轭转置运算分别如下所示: ...
  • 这一讲主要介绍复数矩阵,其中一个最重要的例子就是傅里叶矩阵,它可以进行傅里叶变换。另外我们还会有快速傅里叶变换。 复向量和复矩阵 首先我们面对的问题是如何求复向量的模长。 我们可以回想一下,如何求一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,912
精华内容 764
关键字:

复数矩阵