/BE

贝叶斯估计概率密度

Primary LanguageMatlab

Bayesian estimation

👇🖕贝叶斯估计概率密度


Author:赵明福                                      Student ID:201400301087                           E-mail:1109646702@qq.com

题目介绍

题目分析




编程实现及注释

%假设参数变量u符合均值为u0 方差为v0的高斯分布
%假设参数变量v符合均值为u1 方差为v1的高斯分布
u0=input('u0=');%设置u0的值
v0=input('v0=');%设置v0的值
u1=input('u1=');%设置u1的值
v1=input('v1=');%设置v1的值
 
u= -5:0.1:5;%设参数变量u的取值范围为-5到5 间隔为0.1
v= -5:0.1:5;%设参数变量u的取值范围为-5到5 间隔为0.1
 
p1=zeros(length(u),length(v));%p1表示p(D|u,v)
p2=zeros(length(u),length(v));%p2表示p(u,v)=p(u)*p(v)
 
x=-5:0.01:5;%设置自变量x的取值范围
result=zeros(length(x),1);%保存对应x值的概率
 
for i=1:length(u)
    for j=1:length(v)
        p2(i,j)=((1/((2*pi)^(1/2)*v0))*exp(-(u(i)-u0)^2/(2*v0*v0)))*((1/((2*pi)^(1/2)*v1))*exp(-(v(j)-u1)^2/(2*v1*v1)));%计算p(u,v)
        temp1=1;
        for k=1:10
            if abs(data2(k,2)-u(i))<v(j)
                temp1=temp1*((v(j)-abs(data2(k,2)-u(i)))/(v(j)*v(j)));%累积计算p(D|u,v)
            else
                temp1=temp1*0;
            end
        end
        p1(i,j)=temp1;
    end
end
 
 

%求和积分得到p(x|D)
for k=1:length(x)
    for i=1:length(u)
        for j=1:length(v)
            if abs(x(k)-u(i))<v(j)
               result(k,1)=result(k,1)+((v(j)-abs(x(k)-u(i)))/(v(j)*v(j)))*p1(i,j)*p2(i,j);
            else
                result(k,1)=result(k,1)+0;
            end
        end
    end
    plot(x(k),result(k,1),'b.');
    hold on;
end


结果分析

当u0=0 v0=1 u1=0 v0=1,即参数服从标准正态分布时:

从中可以看出x的概率密度函数在大约0.4时达到最高点,沿横轴两侧急剧下降,类似于高斯分布。
当u0=2 v0=2 u1=-2 v0=2时: