在軟件設計中,經常碰到要求産生一個等差或等比的向量數組,如在數字信号處理領域,要求在[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]。
大家如果有更好的實現方法,可加關注留言讨論。
歡迎加關注,共同交流。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!