本文主要用MATLAB、R语言、Python三个软件分别绘制了标准正态分布、t自由度为1,2,10的t分布以及双指数分布的密度函数图像。
1.MATLAB原理及其代码
MATLAB原理,内嵌函数
unifpdf(x,a,b); %均匀分布
normpdf(x,0,1); %标准正态分布
exppdf(x,lamda); %指数分布
binopdf(x,n,p); %二项分布
geopdf(x5,p); %几何分布
poisspdf(x6,lamda); %泊松分布
实现代码:
clear all; clc;
Lw=3;
x=-4:0.01:4; %定义x取值范围,步长为0.01
%标准正态分布
y1=normpdf(x,0,1)
%t(1)
y2=tpdf(x,1);
%t(2)
y3=tpdf(x,2);
%t(10)
y4=tpdf(x,10);
%双指数
y5=0.5*exp(-abs(x));
plot(x, y1, 'linewidth', Lw);
hold on
plot(x,y2,'linewidth',Lw);
hold on
plot(x,y3,'linewidth',Lw);
hold on
plot(x,y4,'linewidth',Lw);
hold on
plot(x,y5,'linewidth',Lw)
xlim=get(gca,'Xlim'); % 画x=0的参考线
hold on
plot([0,0],ylim,'k-','LineWidth',1)
legend('标准正态分布','t(1)','t(2)','t(10)', '双指数分布')
画图如下:
2.R语言原理及代码
rnorm(x,miu,sigma)
rexp(n,lambda)
rpois(n,lambda)
rt(n,df)
rf(n,df1,df2)
加前缀d,p,q,r
d 表示密度函数(density);
p 表示分布函数;
q 表示分位数函数;
r 表示随机函数;
例如:
dnorm(n,0,1)表示标准正态分布密度函数
pnorm(n,0,1)表示标准正态分布分布函数
qnorm(p,0,1)表示标准正态分布p分位数函数
rnorm(n,0,1)表示标准正态分布随机函数,可用于生成随机数
代码:
x1 <- seq(-4,4,0.001)
y1<-dnorm(x1,0,1)
y2 <- dt(x1,1)
y3 <- dt(x1,2)
y4 <- dt(x1,10)
y5<-0.5*exp(-abs(x1))
plot(x1,y1,type="l",col="red",lwd=3,xlim = c(-4,4), ylim = c(0,0.5))
lines(x1,y2,lwd=3,type="l",col="black")
lines(x1,y3,lwd=3,type="l",col="blue")
lines(x1,y4,lwd=3,type="l",col="yellow")
lines(x1,y5,lwd=3,type="l",col="green")
legend("topright",c("正态分布","t(1)","t(2)","t(10)","双指数"),col = c("red","black", "blue","yellow", "green"),lwd=3,lty=1)
abline(v=0) #加x=0的直线
画图如下:
3.Python原理及代码
主要使用scipy库,里边内嵌各大分布函数:
from scipy import stats
正态分布
stats.norm.cdf(α,均值,方差);分布函数值
stats.norm.pdf(α,均值,方差);概率密度函数值
stats.norm.isf(α,均值,方差) α分位数
t分布
stats.t.cdf(α,自由度);
stats.t.pdf(α,自由度);
stats.t.isf(α,自由度);
# 正态分布
stats.norm
# t分布
stats.t
代码:
import numpy as np
from scipy import stats
import math as m
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.sans-serif"]=["Microsoft YaHei"]
x = np.linspace(-4,4,80000)
y1 = stats.norm.pdf(x,0,1)
plt.plot(x,y1,c="red",label='标准正态密度函数')
plt.tight_layout()
y2 = stats.t.pdf(x,1)
plt.plot(x,y2,c="orange",label="t(1)")
y3 = stats.t.pdf(x,2)
plt.plot(x,y3,c="green",label="t(2)")
y4 = stats.t.pdf(x,10)
plt.plot(x,y4,c="blue",label="t(10)")
y5=0.5*np.exp(-abs(x))
plt.plot(x,y5,c="black",label="双指数分布")
plt.axvline(x=0, color='black', linestyle='-')
plt.legend(bbox_to_anchor=(1,1),
loc="upper right",
ncol=1,
mode="None",
borderaxespad=0,
shadow=False,
fancybox=True)
plt.show()
画图如下: