C++中complex应用的一些问题总结以及傅里叶的一些细节

说明: Complex 是个复数类,我在用傅里叶变换的时候用到它

1:使用中要包含#include <complex>

2:complex 赋值的几种方式:

  2.1 在初始化的时候赋值   如:    complex <double>  c(3.2,-6); 

  2.2 构造无名对象赋值方式   如: c =  complex <double>(3.2,-6); 

  2.2  用等号“=”得到一个已知的复数的值    如:  complex <double>  d;    d =c;

  2.3 因为我是用到傅里叶变换的时候用到,所以有把实数代入到复数的实部但是虚数为0的需求,所有使用了  d =(2);//这样得到右边的赋值给复数的实部,而虚数为0

  2.4 但是一定不能用 把实部和虚部的值赋值给一个复数,这样得到的只会是后面的数值变为复数实部的值,而虚部为0的结果。

        没做分析,据说是“=”没有进行重载,没打开看,如果要这个结果,可试试重载等号看看,

例如  d = (2,8)  ; 这样得到的是一个实部为8,而虚部为0的数据   



 用如下方式验证

     complex <double>  c(3.14,-2);    
    complex <double>  d; 
    

cout <<"c first"  << c <<endl; 

c =  complex <double>(9,18);  //可以构造无名对象赋值给d = complex <double>(3.14,-2); 

cout <<"c sec"  << c <<"real ="<<real(c) <<"image ="<<imag(c)  <<endl; 
 d=c; //
  cout <<"d first"  <<d<<endl; 

   d = (-2);       //结果就是d变成了(-2,0) 

  cout <<"d sec"  <<d<<"real(d) ="<<real(d) <<"image(d)="<<imag(d)  <<endl; 
         d = (4,2);        //(4,-2)是逗号表达式,结果相当于(2).所以这里调用complex <double> ::operator=(const double & ) 

cout <<"d  third"  <<d<<"real(d) ="<<real(d) <<"image(d)="<<imag(d)  <<endl; 

system( "PAUSE");



补充傅里叶的一些问题:


// int sdf = log(btx) / log(2);     这个有bug 4096 应该是12,但是他是11  这个是自然数e打底

// int r = log10(btx) / log10(2);   这个正确  这是10打底

如果以上部分出错,会导致傅里叶转换的结果不能正确输出,因为下表会不准确.



我们在做傅里叶时候有时候会开辟数组        

 complex<double>* interVar1 = new complex<double>(countN);
   complex<double>* interVar2 = new complex<double>(countN);

这个在里面还要delete []interVar1 ;  delete []interVar2 ;  太麻烦,而且个人觉得会降低效率,同时遇到过没有给他赋初始值的情况下,会报内存泄漏,所以我都是在开辟的时候在后面加个(),这样可以让他初始值为0;

所以在已经数组个数的情况下在,为了保险起见,在上位机的程序中,我喜欢直接开辟程序空间和赋初始值

complex<double>* interVar1 = new complex<double>[countN]();

double s1[4096] = {0.0};  //养成定义就赋值的好习惯

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值