• Matlab依据样本随机数求概率曲线


    相关Matlab函数:hist, bar, cdfplot, ksdensity
    (1) hist函数
    n = hist(Y, x) 
    假设x是一个向量,返回x的长度个以x为中心的,Y的分布情况。
    比如:假设x是一个5元素的向量,返回Y在以x为中心的,x长度个范围内数据直方分布。


    [n,xout] = hist(...) 
    返回n和xout。包括有数目频率和间隔位置。能够使用bar(xout, n)来绘制直方图。

    (2) bar函数
    绘制条形图。bar(X,Y) 将Y矩阵的每一行化成一组条形图。条形图组数为行数;每组条形图数目为X矩阵的列数。
    X指定条形图的中心位置,不能有反复的数。

    (3) cdfplot函数
    格式 cdfplot(X) %作样本X(向量)的累积分布函数图形
    [h,stats] = cdfplot(X) %stats表示样本的一些特征

    (4) ksdensity函数
    假设你得到一堆数。你想知道它们的大致分布,能够使用kedensity函数解决问题。

    命令例如以下:
    [f,xi]=ksdensity(x)
    plot(xi,f)
    当中,f是预计的密度值,而xi是一个辅助參数。用来决定画出图形的取值区间,简言之,xi大致涵盖了x的取值区间。
    看过图形之后,開始对分布有大概的直观印象,然后能够用比方normfit命令来获得相关的參数估值。




    演示样例1: 使用hist预计cdf
    hist 是统计数据在指定的区间内分布的个数。这个分布的个数体现的是随机变量的分布状况,假设你的数据量足够多的话,hist 的结果能够用于估算随机变量的 cdf。

    dx = 0.001;
    Num = 100000;
    x = -4:dx:4;
    y = randn(Num,1);
    [n,xout] = hist(y,x);
    cdf = cumsum(n)/Num;
    plot(x,cdf,'b-','LineWidth',6); hold on
    plot(x,normcdf(x,0,1),'r-','LineWidth',2)
    legend('Empirical CDF via hist', 'Analytical CDF via normpdf',4);
    axis tight

    演示样例2: 使用hist函数和导数定义预计pdf
    随机数据给定的情况下,ksdensity 能够获得对 pdf 的较好的预计,它的算法是基于高斯核函数。预计较为准确。

    hist 仅仅能粗略的预计 pdf (虽然 hist 预计cdf比較精确)。这是由于 hist 预计pdf的办法是先预计 cdf。cdf再求导得到 pdf,数值求导的过程easy引入较大的误差。比方。以下的办法是利用导数的定义来求导。


    求导公式为:
    <img src="http://latex.codecogs.com/gif.latex?f(x)=dfrac{dF(x)}{dx}=lim_{Delta x ightarrow 0}dfrac{F(x+Delta x)-F(x)}{Delta x}"/>

    dx = 0.001;
    Num = 100000;
    x = -4:dx:4;
    y = randn(Num,1);
    [n,xout] = hist(y,x);
    pdf = n/Num/dx;    % 导数定义
    bar(xout,pdf);hold on
    [f,xi] = ksdensity(y);
    plot(xi,f,'ro','MarkerSize',8,'LineWidth',2);
    plot(x, normpdf(x,0,1),'r-','LineWidth',2);hold off
    legend('Empirical PDF via hist','Empirical PDF via ksdensity', 'Analytical PDF via normpdf');
    axis tight

    演示样例3:使用hist函数和求导函数gradient预计pdf
    dx = 0.001;
    Num = 100000;
    x = -4:dx:4;
    y = randn(Num,1);
    [f,xi] = ksdensity(y);
    [n,xout] = hist(y,x);
    cdf = cumsum(n)/Num;
    pdf = gradient(cdf,dx);
    bar(xout(1:50:end),pdf(1:50:end));hold on   % 每隔50点抽样,为了更清楚显示pdf
    plot(xi,f,'ro','MarkerSize',8,'LineWidth',2);
    plot(x, normpdf(x,0,1),'r-','LineWidth',2);hold off
    legend('Empirical PDF via hist + gradient', 'Empirical PDF via ksdensity','Analytical PDF via normpdf');
    axis tight


    參考文献
    『http://www.ilovematlab.cn/thread-272344-1-1.html』
    『http://www.ilovematlab.cn/thread-272251-1-1.html』

  • 相关阅读:
    NSDate仅获取日期年月日的实现--即只要年月日,不要多余的小时分钟秒数
    iOS入门学习书籍路线(英文书籍)
    iOS开发必看的博客汇总
    Java直接插入算法
    MyEclipse汉化后问题
    Java 两个变量交换值
    Objective-C 笔记 字符串操作
    Objective-C 笔记二 类、对象和方法
    Objective-C 笔记一(HelloWorld)
    我们究竟需要什么!!?
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6881601.html
Copyright © 2020-2023  润新知