c语言三个数平均值的函数代码(CC语言编程系列007)
在软件设计中,经常碰到要求产生一个等差或等比的向量数组,如在数字信号处理领域,要求在[x1~x2]之间按线性(本质是等差数组)或对数(本质是等比数组)分布产生N个频点的数组,对于这种问题,在Matlab中提供了两个现成的函数,分别为linspace和logsapce,函数原型说明如下:
1、y = linspace(x1,x2,n),功能是产生x1,x2之间的n点行线性向量数组,其中x1、x2、n分别为起始值、终止值、元素个数。
2、y=logspace(a, b, n),功能是产生从10的a次方到10的b次方之间按对数等分的n个元素的行向量数组。
在C/C 语言的标准库中没有现在的函数实现,下面给出具体的实现思路及代码。
linspace函数的实现对于在x1,x2之间按线性分布产生n个点的等差数组linspace函数,其实现方法较为简单,思路:第i个点的公式表示为:y[i]=x1 i*d,其中,i范围为[0~n-1],d为元素之间的间隔:d= (x2-x1)/(n-1)。C/C 语言具体实现代码如下:
在上面代码中,产生的等差向量数组放在指针y对应的数组中。
logspace函数的实现对于在10的a次方到10的b次方之间按对数分布产生n个点的等比数组logspace函数,其实现稍微复杂些。先求公比q的值为:10的((b-a)/n-1)次方,则第i个点的公式表示为:
其中,i范围为[0~n-1]。C/C 语言具体实现代码如下:
在上面代码中,产生的等比向量数组放在指针y对应的数组中。
代码测试例子调用上面2个函数,测试代码如下:
需要说明的是,代码中对于logspace函数的验证,要求在0.0001到100000之间产生对数分布,所以对应的a和b的值分别为log10(0.0001)和log10(100000)。
运行结果如下:
结论引申
上面代码完美实现了matlab中两个对应函数的功能。
对于logspace函数,可以再进一步引申,上面代码实现中是以10为底的对数分布,当然也可以产生以任意数值为底的对数分布数组,只需对上面的代码稍微改造下就可实现这个功能,代码如下:
如以2为底,在1到512之间产生对数分布数组为:[1,2,4,8,16,32,64,128,256,512]。
大家如果有更好的实现方法,可加关注留言讨论。
欢迎加关注,共同交流。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com