C语言笔记--代码学习笔记--C语言语法--基本操作运算-basic-logorithm
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=
。
参见百度: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相关推荐
- 语言 提取列名_学习健明老师发布的R语言练习题的学习笔记(二)
学习者:骆栢维 题目来源:生信基石之R语言 中级10 个题目:http://www.bio-info-trainee.com/3750.html 备注:本文为笔者学习健明老师GitHub答案代码的学习 ...
- 《Go语言圣经》学习笔记 第十一章 测试
<Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...
- 《Go语言圣经》学习笔记 第十章 包和工具
<Go语言圣经>学习笔记 第十章 包和工具 目录 包简介 导入路径 包声明 导入声明 包的匿名导入 包和命名 工具 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. G ...
- 《Go语言圣经》学习笔记 第九章 基于共享变量的并发
<Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...
- 《Go语言圣经》学习笔记 第八章 Groroutines和Channels
<Go语言圣经>学习笔记 第八章 Groroutines和Channels 目录 Goroutines 实例:并发的Clock服务 实例:并发的Echo服务 Channels 并发的循环 ...
- 《Go语言圣经》学习笔记 第六章 方法
<Go语言圣经>学习笔记 第六章 方法 目录 方法声明 基于指针对象的方法 通过嵌入结构体来扩展类型 方法值和方法表达式 示例:Bit数组 封装 注:学习<Go语言圣经>笔记, ...
- 《Go语言圣经》学习笔记 第五章函数
<Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...
- 《Go语言圣经》学习笔记 第四章 复合数据类型
<Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...
- 《Go语言圣经》学习笔记 第三章 基础数据类型
<Go语言圣经>学习笔记 第三章 基础数据类型 目录 整型 浮点数 复数 布尔型 字符串 常量 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记, ...
最新文章
- 大神们都在用的终端工具,多合一全能终端神器MobaXterm
- JavaScript学习笔记(3)
- 和aes相比较有哪些特点_“黑枸杞”和“红枸杞”相比较,功效方面究竟存在哪些差别?...
- Android studio中获取按钮组的信息如何循环遍历
- brython的问题
- 浅谈面试中常考的两种经典布局——圣杯与双飞翼
- ssm read time out的原因_为什么得肝病的男人越来越多?爱喝酒不是原因,或跟老婆有关系!...
- kotlin在线转java_Kotlin转Java记录
- 3.3 三极管的的概念及其工作原理
- 替罪羊树(Scapegoat Tree)
- 【论文阅读】Are We Ready For Learned Cardinality Estimation?
- vim 常用命令 挺全的
- iOS8新功能新特性
- 实例讲解基于 React+Redux 的前端开发流程
- 海思3519上移植Qt5.5.1
- SSO单点登录解决方案——Filter方式
- 集成WEB服务器的蓝牙路由器及低功耗BLE WIFI 网络规划和实施
- 3D Local Features for Direct Pairwise Registration论文阅读
- 【转】浅谈面向对象的坏处
- IT人士应该经常浏览的网站