matlab一求解一维数组元素拟合概率密度函数

matlab 专栏收录该内容
6 篇文章 1 订阅

本文解决的用matlab实现数组的概率分布函数拟合。
一维数组不知道他的分布情况下。对数的频率分布直方图尽可能拟合。
数组我们用matlab自带的函数来生成。频数统计区间默认划

首先生成一个服从(0,0.5^2)的高斯分布随机产生10000个数

x=normrnd(0,1,1,10000);%产生一个[10000*1]的矩阵按照高斯(01^2)分布 
plot(x,'*')%R = normrnd(Mu, Sigma, m, n)产生服从N(Mu,Sigma^2)分布的m行n列的随机数组R

数组x为一个【10000*1】一维向量。下图将这10000个点画出。

在这里插入图片描述

下一步利用频数分布直方图,画出频率直方图。尽可能地将区间划小可以表示成统计形式而不是类似条形图。这里d是统计的区间


x=normrnd(0,1,1,10000);%产生一个[100*1]的矩阵按照高斯(00.5^2)分布 
%% 做出概率分布图
d=100;%划分100分布区间用于统计频数小于原始数据就行。
b=min(x):(max(x)-min(x))/(d-1):max(x);
pn= histc(x,b);%频率分布区间直方图,x为输入数组,d为统计区间的个数
p=pn./((max(x)-min(x))/(d-1)*length(x));%频数/(组距*总数)=频率

plot(b,pn)
plot(b,p)

在这里插入图片描述
上图是频数图。下图是频率图;对坐标的处理是影响结果的关键
频率分布图
**这里有个问题,就是频率=频数/组距/总数。组距是人为设定的所以概率必然与真实的概率有一些差别。我们只能在这里期望这是选择了一个合适的统计频数的区间了!!!**所以这里只能期望是大数据量的拟合数组了。
之后使用多项式拟合,多项式的系数可以修改。生成w就是系数矩阵。
保存w,使用y=polyval(w,x).就是y关于x的拟合的概率密度函数。


W=polyfit(b,p,10);%多项式拟合的项数为10+1(bias)次,这里可以调整项数
xi=min(x):(max(x)-min(x))/(d-1):max(x);
yi=polyval(W,xi);
figure
plot(xi,yi,b,p,'r*');
figure
plot(b,p,'r*');
figure
plot(xi,yi)

在这里插入图片描述

最后我求解一下x=0时候的概率值。

y=polyval(W,0)

在这里插入图片描述

我试着带入高斯单变量分布的数学公式。正太分布的数学公式:
N~(0,1)
在这里插入图片描述
x=0;u=0;o=1;pi=3.14;
得到f(0)=0.399.

验证后:这条拟合概率分布函数近似实际还是可以使用的。

整体函数如下:

clear
%% 创建数据
x=normrnd(0,1,1,10000);%产生一个[10000*1]的矩阵按照正太(01)分布 
plot(x,'*')

%% 画出数据集的频率分布图
d=100;%划分100分布区间用于统计频数小于原始数据就行。
X=min(x):(max(x)-min(x))/(d-1):max(x);%X划分区间的数组
pn= histc(x,X);%频率分布区间直方图,x为输入数组,d为统计区间的个数
P=pn./((max(x)-min(x))/(d-1)*length(x));%频数/(组距*总数)=频率
plot(X,P)

%% 拟合多项式函数
W=polyfit(X,P,10);%多项式拟合的项数为10+1(bias)次,这里可以调整项数
xi=min(x):(max(x)-min(x))/(d-1):max(x);
yi=polyval(W,xi);
figure
plot(xi,yi,X,P,'r*');
xlabel('一维数组区间')
ylabel('拟合的概率分布函数')

%% 函数验证
P_nihe=polyval(W,0)
P_shiji=1/sqrt(6.282)

如果有谁能够解决直方图划分区间,也就是自动划分合适区间大小(或者是自动计算出直方图统计分成几段)而不是(matlab中默认的10个区间)。统计频数问题的请留言。

  • 3
    点赞
  • 0
    评论
  • 11
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:点我我会动 设计师:我叫白小胖 返回首页

打赏作者

紫钺-高山仰止

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值