在MATLAB中统计扩展序列

时间:2009-12-24 04:32:53

标签: matlab scripting

MATLAB中是否有任何内置函数可以统计地扩展实数序列,以便将生成的序列扩展到我想要的任何大小。我有一个499个元素的序列,我想将它扩展到4096个元素。提前谢谢。

3 个答案:

答案 0 :(得分:2)

如果您想要将499个元素的向量插值到4096个元素的更高分辨率,可以通过以下方式使用INTERP1函数(其中x是您的499个元素向量):

y = interp1(x,linspace(1,499,4096));

以上使用函数LINSPACE生成一个4096个元素的矢量,其值在1到499之间线性间隔,然后用作插值点。默认情况下,INTERP1函数使用线性插值来计算旧点之间的新值。您可以通过以下方式使用其他插值方法:

y = interp1(x,linspace(1,499,4096),'spline');  %# Cubic spline method
y = interp1(x,linspace(1,499,4096),'pchip');   %# Piecewise cubic Hermite method

答案 1 :(得分:1)

我对问题中的“统计”这个词并不十分理解,但从您的评论来看,您似乎只需要线性(或平滑)插值。 尝试使用interp1qinterp1

答案 2 :(得分:1)

如果您知道数据在参数系列分布的PearsonJohnson系统中的分布情况,那么您可以使用抽样函数pearsrnd和{生成更多数据{3}}(用于生成随机值而不指定哪个参数分布)

实施例

%# load data, lets say this is vector of 499 elements
data = load('data.dat');

%# generate more data using pearsrnd
moments = {mean(data),std(data),skewness(data),kurtosis(data)};
newData = pearsrnd(moments{:}, [4096-499 1]);

%# concat sequences
extendedData = [data; newData];

%# plot histograms (you may need to adjust the num of bins to see the similarity)
subplot(121), hist(data), xlabel('x'), ylabel('Frequency')
subplot(122), hist(extendedData), xlabel('x'), ylabel('Frequency')

或使用johnsrnd:

%# generate more data using johnsrnd
quantiles = quantile(data, normcdf([-1.5 -0.5 0.5 1.5]));
newData = johnsrnd(quantiles, [4096-499 1]);


另一方面,如果要假设非参数分布,可以使用johnsrnd函数或ecdf函数。 请参阅演示 ksdensity 以获取完整示例(强烈建议!)。