2017-1-7

function1:

C语言如何实现一个复数加法,好像C语言里没有matlab的复数变量i,那么怎么办:

typedef struct _F_COMPLEX {
double real;
double img;
}F_COMPLEX;

然后在需要的地方调用:

void add(F_COMPLEX a,F_COMPLEX b,F_COMPLEX *c)

{
 c->real = a.real + b.real;
 c->img = a.img + b.img;
}

即可实现一个复数加法。->操作符适用于结构体指针。

function2:

经常看到需要求一些数学公式,能在math.h里找到的自然最好,找不到的就要自己查一下公式如何实现的。例如求反双曲余弦函数:

数学公式是这样的:

反双曲 余弦函数记作y=arcoshx。
双曲函数y=coshx的定义是y=coshx=

 

.那么,取它的反函数,最终得到反双曲余弦函数的定义是y=arcoshx=

 

参见百度:http://baike.baidu.com/view/6688537.htm

然后就可实现:

double arccosh(double x)//反双曲余弦,
{
return log(x+sqrt(pow(x,2)-1));
}

需要注意的是C语言里log是以e为底的。

function3:

复数的除法:这个好像是上大学那会线性代数还是复变函数里学的,基本上全忘完了,不说了,直接展代码:

void divi(F_COMPLEX a,F_COMPLEX b,F_COMPLEX *c)
{
 c->real=( a.real * b.real + a.img * b.img ) / ( b.real * b.real + b.img * b.img);
 c->img=( a.img * b.real - a.real * b.img) / (b.real * b.real + b.img * b.img);
}

function4:

一个在信号处理里比较常用的特征值,名曰峭度,数学上不过是归一化的4阶中心矩,没什么神奇的。

matlab 上有现成的函数:kurtosis函数,相应的skewness,歪度还是倾斜度

过程实现:

%  qd2=0;
%         for w=1:N
%             qd2=qd2+(x(w)-mean(x)).^4;
%         end
%             qd2=qd2/N;
%             qd2=qd2/(rms.^4);%qiaodu峭度是原信号的峭度

照着matlab验证完的去敲C代码是比较爽的:

double  find_Kurtosis(double a[],int n) //峭度值ok
{
int i;
double qd2=0;
double qd[N]={0};
//double qd2[N]={0};
double mean=find_mean(a,n);
for (i=0;i<n;i++)
{
qd[i]=a[i]-mean;//除均值
}
for (i=0;i<n;i++)
{
qd[i]=pow(qd[i],4);
}
return sum(qd,n)/n/(pow(find_rms(a,n),4));
}

function5:

找一个数组里的最大值。太简单了,就是把数组遍历一遍,然后依次比较如果当前值大于现在的最大值则替换当前的最大值,肯定有遍历一遍还要好的算法,这个找最大值太弱了;

double  find_max(double *a,int n) 
{
double max_value=a[0];
int i;
for (i=1;i<n;i++)
{
if(a[i] > max_value)
{
//printf("最大值=%f----i=%d---a[i]=%f\n",max_value,i,a[i]);
max_value=a[i];
}
}
return max_value;

}

function6:

找一个数组的平均值:所有点加和除以点数即可;

double  find_mean(double a[],int n) 
{
double sum_a=sum(a,n);
return sum_a/n;
}

function7:

找一个数组里的最小值,与找最大值得过程一样,不过这样算法的效率也是很低的:

double  find_min(double a[],int n) 
{
double min_value=a[0];
int i;
for (i=1;i<n;i++)
{
if(a[i]<min_value)
min_value=a[i];
}
return min_value;
}

function8:

找峰峰值,严格意义上来说,应该是最大值减去最小值:

double  find_Peak_to_Peak(double a[],int n) 
{
return find_max(a,n)-find_min(a,n);

}

function9:

double  find_rms(double a[],int n) 
{
int i;
double mean;
double b[N]={0};
mean=find_mean(a,n);
for (i=0;i<n;i++)
{
b[i]=a[i]-mean;
}
for (i=0;i<n;i++)
{
b[i]=pow(b[i],2);
}
return sqrt(sum(b,n)/n);
}

function10:

matlab里的翻转函数,

%FLIPLR Flip matrix in left/right direction.
%   FLIPLR(X) returns X with row preserved and columns flipped
%   in the left/right direction.
%   
%   X = 1 2 3     becomes  3 2 1
%          4 5 6                        6 5 4

matlab是比较强大的,不论你是数组还是矩阵,它都能翻转。

void fliplr(double *a,int len)//实现一维矩阵左右翻转,原始变量输入被修改
{
int i;
double temp;
if(len % 2 == 0){
for (i = 0; i < len / 2; i++) {
temp = a[i];
a[i] = a[len - i - 1];
a[len - i - 1] = temp;
}
}
else{
for( i = 0;i < (len-1) / 2;i++ ){
temp = a[i];
a[i] = a[len-i-1];
a[len-i-1] = temp;
}
}
}

function11:

C语言实现两个一维数组相乘;

void muiti_2_array(double *a,int length,double *b,double *c)
{
int i;
for (i=0;i<length;i++){
c[i]=a[i]*b[i];
}
}

function12:

//实现变量与数组相乘

void muiti_a_array(double a,int length,double *b,double *c)
{
int i;
for (i=0;i<length;i++){
c[i]=a*b[i];
}
}

function13:

复数的乘法,返回一个复数变量:

F_COMPLEX mul(F_COMPLEX a, F_COMPLEX b)
{
F_COMPLEX c;
c.real = a.real*b.real - a.img*b.img;
c.img = a.real*b.img + a.img*b.real;
return c;
}

function14:

void mul2(F_COMPLEX a,F_COMPLEX b,F_COMPLEX *c)
{
 c->real = a.real*b.real - a.img*b.img;
 c->img = a.real*b.img + a.img*b.real;
}

function15:

F_COMPLEX sub(F_COMPLEX a,F_COMPLEX b)
{
FFT_COMPLEX c;
c.real = a.real - b.real;
c.img = a.img -b.img;
return c;
}

function16:

地球人应该都能看懂:

double sum(double a[],int n)//ok
{
double sum=0.0;
int i;
for (i=0;i<n;i++)
{
sum=sum+a[i];
}
return sum;
}

function17:

写出一个运算结果到文件中,无奈基础太差,只能先记下来了;

void write_file(double *pf)
{
int i = 0;
FILE *pfwrite = NULL;
fopen_s(&pfwrite,"test.txt", "w+");
for (i = 0; i < 16384; i++) {

fprintf(pfwrite, "%.20f\n", pf[i]);

}
fclose(pfwrite);
}

fopen_s与fopen的区别,说是一个能编译,一个不能。后面有空再研究。

C语言笔记--代码学习笔记--C语言语法--基本操作运算-basic-logorithm相关推荐

  1. 语言 提取列名_学习健明老师发布的R语言练习题的学习笔记(二)

    学习者:骆栢维 题目来源:生信基石之R语言 中级10 个题目:http://www.bio-info-trainee.com/3750.html 备注:本文为笔者学习健明老师GitHub答案代码的学习 ...

  2. 《Go语言圣经》学习笔记 第十一章 测试

    <Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...

  3. 《Go语言圣经》学习笔记 第十章 包和工具

    <Go语言圣经>学习笔记 第十章 包和工具 目录 包简介 导入路径 包声明 导入声明 包的匿名导入 包和命名 工具 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. G ...

  4. 《Go语言圣经》学习笔记 第九章 基于共享变量的并发

    <Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...

  5. 《Go语言圣经》学习笔记 第八章 Groroutines和Channels

    <Go语言圣经>学习笔记 第八章 Groroutines和Channels 目录 Goroutines 实例:并发的Clock服务 实例:并发的Echo服务 Channels 并发的循环 ...

  6. 《Go语言圣经》学习笔记 第六章 方法

    <Go语言圣经>学习笔记 第六章 方法 目录 方法声明 基于指针对象的方法 通过嵌入结构体来扩展类型 方法值和方法表达式 示例:Bit数组 封装 注:学习<Go语言圣经>笔记, ...

  7. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  8. 《Go语言圣经》学习笔记 第四章 复合数据类型

    <Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...

  9. 《Go语言圣经》学习笔记 第三章 基础数据类型

    <Go语言圣经>学习笔记 第三章 基础数据类型 目录 整型 浮点数 复数 布尔型 字符串 常量 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记, ...

最新文章

  1. 大神们都在用的终端工具,多合一全能终端神器MobaXterm
  2. JavaScript学习笔记(3)
  3. 和aes相比较有哪些特点_“黑枸杞”和“红枸杞”相比较,功效方面究竟存在哪些差别?...
  4. Android studio中获取按钮组的信息如何循环遍历
  5. brython的问题
  6. 浅谈面试中常考的两种经典布局——圣杯与双飞翼
  7. ssm read time out的原因_为什么得肝病的男人越来越多?爱喝酒不是原因,或跟老婆有关系!...
  8. kotlin在线转java_Kotlin转Java记录
  9. 3.3 三极管的的概念及其工作原理
  10. 替罪羊树(Scapegoat Tree)
  11. 【论文阅读】Are We Ready For Learned Cardinality Estimation?
  12. vim 常用命令 挺全的
  13. iOS8新功能新特性
  14. 实例讲解基于 React+Redux 的前端开发流程
  15. 海思3519上移植Qt5.5.1
  16. SSO单点登录解决方案——Filter方式
  17. 集成WEB服务器的蓝牙路由器及低功耗BLE WIFI 网络规划和实施
  18. 3D Local Features for Direct Pairwise Registration论文阅读
  19. 【转】浅谈面向对象的坏处
  20. IT人士应该经常浏览的网站

热门文章

  1. python selenium 中显示等待与隐式等待同时存在,发生冲突时,解决方法
  2. ipv6 neighbors 下fe80开头的地址
  3. turtle 一箭穿心 代码
  4. 融合计费打造全业务核心竞争力
  5. 国家政策去oracle,oracle的lifetime support政策
  6. C++ MessageBox
  7. 直接转矩系统和矢量控制系统
  8. SpringBoot搭建第三方支付接口(一)
  9. day14:高德地图
  10. GridLayout使用