精华内容
下载资源
问答
  • matlab 产生任意概率密度的联合分布

    千次阅读 2017-09-12 20:20:54
    用Slice sampling 来得到某单个分布的样本算法: 已知分布f(x) 1. 选择一个初始点,x0. 2. 在[0,f(x0)] 之间,通过均分分布产生一个采样y 3. 在 f(x) 上画一条通过 y的 水平线 4. 在线段内再次均匀采样得到一个...

    用Slice sampling 来得到某单个分布的样本算法:

    已知分布f(x)

    1.      选择一个初始点,x0.

    2.      在[0,f(x0)] 之间,通过均分分布产生一个采样y

    3.      在 f(x) 上画一条通过 y的 水平线

    4.      在线段内再次均匀采样得到一个点x ,此x就是此次迭代得到的新采样点。

    5.      最后用新得的x作为初始值,重复step 2~step5

     

    Y截得f(x)两点(L,R) ,称为f(x)的切片,经过不断迭代,得到很多切片,其中,切片的长度越长,被选取到的概率越大。

    难点在于:对于多峰函数,切片所在的边界往往是不连续的,解决方法是拒绝更短的切片。


    Matlab 程序1,生成单个拉普拉斯分布的采样



    %%

    laplaceDis1=@(y)exp(-abs(y))/2; % mu=0,b=1的拉斯分布

    N=2000; %产生N个采样点

    x = slicesample(1,N,'pdf',laplaceDis1,'thin',5,'burnin',1000);%thin, burn-in 具体设置看介绍

    histogram(x,50); %显示采样点的直方图


    如图:







    %%matlab 程序2

    %% 生成拉普拉斯分布的联合分布,每个随机变量成分都是独立的(方便演示)

    %  类似Gibbs 多变量采样的方法,对某个确定的x1,在条件概率密度下P(x2|x1)得到x2的采样,然后对此x2,得到P(x1|x2)的一个采样

    % 由于此处x1,x2独立,p(x2|x1)=p(x2),且slicesampling 得到的对概率密度积分和是否为1没有关联,所以可以直接生成联合分布

    laplaceDis1=@(y)exp(-abs(y))/2; %mu=0,b=1的拉普拉斯分布
    laplaceDis2=@(y)exp(-sqrt(2)*abs(y-2))/sqrt(2);%mu=2,b=1/sqrt(2) 拉普拉斯分布


    limitL=-5; % 概率密度函数左边界
    limitR=5;

    x=zeros(N,2);


    for i=1:N
        start=unifrnd(limitL,limitR,1,2); %均布产生一个初值
        x(i,1)=slicesample(start(1),1,'pdf',laplaceDis1);
        x(i,2)=slicesample(start(2),1,'pdf',laplaceDis2);
    end


    figure
    plot(x(:,1),x(:,2),'ro');


    如图:




    展开全文
  • 课堂笔记
    clc,clear,close all
    x=-3:0.1:3;
    y=-2:0.1:2;
    mu=[-1 2];
    sigma=[1 1;1 3];
    [X,Y]=meshgrid(x,y);
    xy=[X( : ) Y( : )];
    p=mvnpdf(xy,mu,sigma);
    p=reshape(p,size(X));
    surf(X,Y,p);
    

    2021年3月1日15:06:44

    展开全文
  • 已知二维联合概率密度matlab求解

    热门讨论 2012-02-27 10:34:06
    已知二维联合概率密度matlab求解 二维联合概率密度 matlab 待定系数 边缘分布
  • 面向对象的MATLAB工具箱,用于处理概率分布 [1]概述 该工具箱对于处理单变量概率分布可能会有所帮助。 对于任何给定的分布,它都可以计算所有标准量:密度和累积密度函数,危害函数,均值,方差,偏度,峰度等,并且...
  • 水文分析中计算两变量联合分布概率密度函数,是matlab与copula的结合
  • 彭汉川版mRMR特征选择算法网址:...estpa函数是为了计算单个向量a的概率分布,其大概思想是: 当a=[1 2 1 2 1]时,其概率分布为 p(x=1)=3...

    彭汉川版mRMR特征选择算法网址:https://www.mathworks.com/matlabcentral/fileexchange/14608-mrmr-feature-selection-using-mutual-information-computation

    estpa函数是为了计算单个向量a的概率分布,其大概思想是:

    当a=[1 2 1 2 1]时,其概率分布为 p(x=1)=3/5=0.6, p(x=2)=2/5=0.4,所得P=[0.6 0.4]

    当b=[2 1 2 1 1]时,其概率分布为p(x=1)=3/5=0.6, p(x=2)=1/5=0.4, 所得P=[0.6, 0.4]

    则a,b的联合概率分布为p(a=1,b=1)=1/5=0.2, p(a=1,b=2)=2/5=0.4, p(a=2, b=1)=2/5=0.4, p(a=2,b=2)=0,所得P=[0.2, 0.4; 0.4, 0]
     

    //=========================================================
    //
    //This is a prog in the MutualInfo 0.9 package written by
    // Hanchuan Peng.
    //
    //Disclaimer: The author of program is Hanchuan Peng
    //      at <penghanchuan@yahoo.com> and <phc@cbmv.jhu.edu>.
    //
    //The CopyRight is reserved by the author.
    //
    //Last modification: April/19/2002
    //
    //========================================================
    //
    // estpab.cpp
    // Calculate the joint histgram/probability of two vectors/images
    //计算两个向量的联合概率
    // By Hanchuan Peng
    // Dec/2000
    // April/8/2002
    
    #include "miinclude.h"
    
    //return the number of states
    template <class T> void copyvecdata(T * srcdata, long len, int * desdata, int& nstate);
    
    template <class T> void copyvecdata(T * srcdata, long len, int * desdata, int& nstate)//数据处理函数
    {
        //输入变量
        //srcdata:输入数据地址
        //len:输入数据长度
        //desdata:输出数据地址--数据数据值减去最小值
        //nstate:最大值减去最小值+1
      if(!srcdata || !desdata)
      {
        printf("NULL points in copyvecdata()!\n");
        return;
      } 
    
      long i;
    
      //note: originally I added 0.5 before rounding, however seems the negative numbers and 
      //      positive numbers are all rounded towarded 0; hence int(-1+0.5)=0 and int(1+0.5)=1;
      //      This is unwanted because I need the above to be -1 and 1.
      // for this reason I just round with 0.5 adjustment for positive and negative differently
    
      //copy data
      int minn,maxx;
      if (srcdata[0]>0)
        maxx = minn = int(srcdata[0]+0.5);
      else
        maxx = minn = int(srcdata[0]-0.5);
    
      int tmp;
      double tmp1;
      for (i=0;i<len;i++)
      {
        tmp1 = double(srcdata[i]);
        tmp = (tmp1>0)?(int)(tmp1+0.5):(int)(tmp1-0.5);//round to integers将值转换为整数值
        minn = (minn<tmp)?minn:tmp;//查找最小值
        maxx = (maxx>tmp)?maxx:tmp;//查找最大值
        desdata[i] = tmp;
        //    printf("%i ",desdata[i]);
      }
      //printf("\n");
    
      //make the vector data begin from 0 (i.e. 1st state)
      for (i=0;i<len;i++)
      {
        desdata[i] -= minn;//desdata里面存储的值为实际值减掉最小值
      }
    
      //return the #state
      nstate = (maxx-minn+1);//nstate里存储的值为最大值减掉最小值
    
      return;
    }
    
    
    void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
    {
    
      // check the arguments检查参数
    
      if(nrhs != 3 && nrhs !=2 && nrhs!=4)
        mexErrMsgTxt("Usage [jointprob_table, marginprob_1, marginprob2] = progname(vector1, vector2, maxstatenum, b_returnprob). \n(Both vectors can be images). Max range handled: INT type of the OS");
      if(nlhs > 3)
        mexErrMsgTxt("Too many output argument <jointprob_table>.");
    
      if (!mxIsInt8(prhs[0]) && !mxIsUint8(prhs[0]) && !mxIsDouble(prhs[0]) ) 
        mexErrMsgTxt("The first input argument must be types of INT8 or UINT8 or DOUBLE.");
      if (!mxIsInt8(prhs[1]) && !mxIsUint8(prhs[1]) && !mxIsDouble(prhs[1]) ) 
        mexErrMsgTxt("The second input argument must be types of INT8 or UINT8 or DOUBLE.");
    
      //get and check size information
    
      long i,j;
    
      void *img1 = (void *)mxGetData(prhs[0]);
      long len1 = mxGetNumberOfElements(prhs[0]);
      mxClassID type1 = mxGetClassID(prhs[0]);
    
      void *img2 = (void *)mxGetData(prhs[1]);
      long len2 = mxGetNumberOfElements(prhs[1]);
      mxClassID type2 = mxGetClassID(prhs[1]);
    	
      if (!img1 || !img2 || !len1 || !len2)
        mexErrMsgTxt("At least one of the input vectors is invalid.");
      if (len1!=len2)
        mexErrMsgTxt("The two vectors/images should have the same length.");
    
      int b_findstatenum = 1;
      int nstate1 = 0, nstate2 = 0;
      if (nrhs>=3)
      {
        b_findstatenum = 0;
        long MaxGrayLevel = (long) mxGetScalar(prhs[2]);
        nstate1 = nstate2 = MaxGrayLevel;
        if (MaxGrayLevel<=1)
        {
          printf("The argument #state is invalid. This program will decide #state itself.\n");
          b_findstatenum = 1;
        }
      }
    
      int b_returnprob = 1;
      if (nrhs>=4)
      {
        b_returnprob = (mxGetScalar(prhs[3])!=0);
      }
    
      //copy data into new INT type array (hence quantization) and then reange them begin from 0 (i.e. state1)
      //新建两个变量vec1和vec2分别用来处理输入的两个变量
    
      int * vec1 = new int[len1];
      int * vec2 = new int[len2];
      int nrealstate1=0, nrealstate2=0;
      switch(type1)
      {
        case mxINT8_CLASS: copyvecdata((char *)img1,len1,vec1,nrealstate1); break;//vec1为整数化并且减去最小值的数据
        case mxUINT8_CLASS: copyvecdata((unsigned char *)img1,len1,vec1,nrealstate1); break;
        case mxDOUBLE_CLASS: copyvecdata((double *)img1,len1,vec1,nrealstate1); break;
      }  
      switch(type2)
      {
        case mxINT8_CLASS: copyvecdata((char *)img2,len2,vec2,nrealstate2); break;//vec2为整数化并且减去最小值的数据
        case mxUINT8_CLASS: copyvecdata((unsigned char *)img2,len2,vec2,nrealstate2); break;
        case mxDOUBLE_CLASS: copyvecdata((double *)img2,len2,vec2,nrealstate2); break;
      }  
    
      //update the #state when necessary
      if (nstate1<nrealstate1)
      {
        nstate1 = nrealstate1;
        // printf("First vector #state = %i\n",nrealstate1);
      }
      if (nstate2<nrealstate2)
      {
        nstate2 = nrealstate2;
        // printf("Second vector #state = %i\n",nrealstate2);
      }
    
      //generate the joint-distribution table
      //生成联合分布表
    
      plhs[0] = mxCreateDoubleMatrix(nstate1,nstate2,mxREAL);//生成nstate1行,nstate2列的mxREAL矩阵
      double *hab = (double *) mxGetPr(plhs[0]);
      double **hab2d = new double * [nstate2];
      for(j=0;j<nstate2;j++)
        hab2d[j] = hab + (long)j*nstate1;
    
      for (i=0; i<nstate1;i++)
      for (j=0; j<nstate2;j++)
      {
        hab2d[j][i] = 0;
      }
      
      for (i=0;i<len1;i++)
      {
        //old method -- slow
        //     indx = (long)(vec2[i]) * nstate1 + vec1[i];
        //     hab[indx] += 1;
    
        //new method -- fast
        hab2d[vec2[i]][vec1[i]] += 1;
      }
      
      //return the probabilities, otherwise return count numbers
      if(b_returnprob)
      {
        for (i=0; i<nstate1;i++)
        for (j=0; j<nstate2;j++)
        {
          hab2d[j][i] /= len1;
        }
      }
    
      //for nlhs>=2
    
      if (nlhs>=2)
      {
        plhs[1] = mxCreateDoubleMatrix(nstate1,1,mxREAL);
        double *ha = (double *)mxGetPr(plhs[1]);
        for (i=0;i<nstate1;i++) {ha[i] = 0;}
        for (i=0;i<nstate1;i++)
        for (j=0;j<nstate2;j++)
        {
          ha[i] += hab2d[j][i];
        }
      }
      
      if (nlhs>=3)
      {
        plhs[2] = mxCreateDoubleMatrix(nstate2,1,mxREAL);
        double *hb = (double *)mxGetPr(plhs[2]);
        for (j=0;j<nstate2;j++) {hb[j] = 0;}
        for (i=0;i<nstate1;i++)
        for (j=0;j<nstate2;j++)
        {
          hb[j] += hab2d[j][i];
        }
      }
    
      //finish
      if (hab2d) {delete []hab2d;}
      if (vec1) delete []vec1;
      if (vec2) delete []vec2;
    
      return;
    }
    

     

    展开全文
  • 可以,我现在就给你基本的代码框架,有些小问题因为再用电脑上没有MATLAB无法完善了,那个根据df,vector of mean 和sigma生成联合概率分布的函数我不知道哪一个,所以我换了个mvtrnd()的函数,这个函数不需要用到你...

    可以,我现在就给你基本的代码框架,有些小问题因为再用电脑上没有MATLAB无法完善了,那个根据df,vector of mean 和sigma生成联合概率分布的函数我不知道哪一个,所以我换了个mvtrnd()的函数,这个函数不需要用到你说的3个,用到的是自由度,生成数据数目和协方差矩阵。题主到时候自己换一下就可以了。楼主如果知道函数代码是什么,记得也给我发一个,谢谢哈。或者楼主如果自己编了这个函数,偷偷告诉我一下呗。

    以下正文

    for i=[1:1000] %进行1000次模拟

    x=200; %模拟步数为200步

    T=mvtrnd([1 -0.9;-0.9 1],30,200); %生成一组二维数组,自由度30,生成200个数据,协方差矩阵 为[1 -0.9 ;-0.9 ]

    plot(x,T)

    hold on

    end

    我回家了,运行了一遍,没有问题,图形类似于一个白噪声,还没有做平稳性检验,不过基本没有大出入了。

    不光光是多元T分布,其他分布的一般步骤都是这样,而且这样跑速度很快的。

    展开全文
  • >> x=-20:0.5:20;y=-20:0.5:20;mu=[-1,2];sigma=[1 1; 1 3]; % 输入均值向量和协方差矩阵,可以根据需要修改[X,Y]=meshgrid(x,y); % 产生网格数据并处理p=mvnpdf([X... % 求取联合概率密度figure(2)surf(X,Y,P...
  • 岩坡稳定性分析问题是一个可靠性问题,结合由Hoek-Brown经验准则衍生的线性参数,采用概率密度函数联合分布法确定平面滑动岩坡的最终安全系数的概率分布,借助Matlab软件对该计算过程实现表达,并对岩坡安全系数的影响...
  • MATLAB二维正态分布

    2019-09-26 14:32:01
    clcclearclose all mu=[0,0];% 均值向量Sigma=[1 0.8;0.8 1];% 协方差矩阵[X,Y]=meshgrid(-3:0.1:3,-3:0.1:3);...%求取联合概率密度,相当于Z轴p=reshape(p,size(X));%将Z值对应到相应的坐标上 figu...
  • 概率图形建模 这一系列的MATLAB类为构建概率图形模型提供了可扩展的框架。 用户可以定义方向图或因子图,... 我们提供有一个数据文件( joint.dat ),其提供对这些12个二进制变量的真联合概率分布,和dataset.dat ,
  • 1. 多元高斯分布设 维随机...那么,如果随机向量 满足多元高斯分布,其联合概率密度函数为 。2. 多元高斯分布的性质如果上述 维随机向量 服从多元高斯分布, :性质 1:存在 维的向量 和 维矩阵 ,使得 非奇异,那...
  • 二维正态随机变量概率密度函数三维图的matlab实现 1.二维正态随机变量 二维正态随机变量是最常见的一种二维随机变量分布。其联合概率密度函数为: p(x,y)=12πσXσY1−r2⋅exp{−12(1−r2)[(x−mX2)σX2−2r(x−mX)...
  • 列向量互信息计算通用MATLAB代码

    千次阅读 热门讨论 2018-08-16 17:28:20
    其中 p(x,y) 是 X 和 Y 的联合概率分布函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率分布函数。 其中 p(x,y) 当前是 X 和 Y 的联合概率密度函数,而p(x)和p(y)分别是 X 和 Y 的边缘概率密度函数。 互信息量I(xi;yj)...
  • MATLAB实现的云模型计算隶属度

    千次阅读 2017-03-27 16:33:58
    ”云”或者’云滴‘是云模型的基本单元,所谓云是指在其论域上的一个分布,可以用联合概率的形式(x, u)来表示 云模型用三个数据来表示其特征  期望:云滴在论域空间分布的期望,一般用符号Εx表示。  熵:
  • 基于matlab的云模型

    千次阅读 2019-11-22 22:39:26
    “云”是云模型的基本单元,是指在其论域上的分布,可以以联合概率的形式(x,μ)来类比。 我们可以用简单的例子的来说明,比如x代表身高,μ来表示高个子的隶属度或者说确定度,用来度量某种倾向的稳定性,U代表高...
  • 判别模型:学习得到...生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布。能够学习到数据生成的机制。之所以称为生成方法,是因为模型表示了给定输入X产生输出Y的生成关...
  • 灰度共生矩阵原理+Matlab中实现

    万次阅读 多人点赞 2014-07-04 09:43:13
    共生矩阵用两个位置的象素的联合概率密度来定义,它不仅反映亮度的分布特性,也反映具有同样亮度或接近亮度的象素之间的位置分布特性,是有关图象亮度变化的二阶统计特征。它是定义一组纹理特征的基础。  由于...
  • (1)产生[0 255]范围内均匀分布、正态分布、拉普拉斯分布的三组离散随机整数。每组数据个数为 1920×1080,并对这三组数据分别进行哈夫曼编码和解码。计算熵和码字的平均码长。 (2)将彩色图像的像素 R、G、B 值...
  • 基于MATLAB实现的云模型计算隶属度

    千次阅读 2017-02-22 08:35:17
    ”云”或者’云滴‘是云模型的基本单元,所谓云是指在其论域上的一个分布,可以用联合概率的形式(x, u)来表示 云模型用三个数据来表示其特征  期望:云滴在论域空间分布的期望,一般用符号Εx表示。  熵:...
  • 马尔科夫随机场,本质上是一种概率无向图模型。分类:概率图模型大致上分为两种,一种是有向...1.Bayesian network用概率图表示联合概率分布密度 起点对应条件变量,如p(c|a,b)就会有两个起点一个终点。略微复杂一...
  • 对于给定的训练数据集,基于特征条件独立的假设学习输入输出的联合概率分布,这样就学到了一个生成模型,然后基于该模型,对于给定的测试样本 ,利用贝叶斯公式求出输出概率(或概率密度)最大的输出 。具体如下在...
  • 这几天学习灰度共生矩阵,现记录如下: 讲灰度共生矩阵比较好的一份百度文库文档:... ...   共生矩阵用两个位置的象素的联合概率密度来定义,它不仅反映亮度的分布特性
  • 图像的熵、联合熵、互信息

    千次阅读 2014-12-05 08:50:23
     其中,AB联合概率分布和关于A和关于B的边缘概率分布都可以由联合直方图归一化获得。 Matlab实现代码如下: (1)图像的熵 function shang = ssshang(X) [m,n,t]=size(X); I3 = double(X)+1; s(256) = 0; for i...
  • 随机过程第二周笔记第一天2.1.1概念2.1.2 基本特性有限维分布函数定义2.1 Kolmogonov概率分布函数存在定理基本数字特征联合特性和复过程联合概率密度函数(n+m)维联合概率分布函数联合特征函数复随机过程 第一天 老师...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

matlab联合分布概率

matlab 订阅