% rand()生成区间[10,70]的1000个随机数
% 并显示直方图
for i = 1:1000
a(i) = rand() * 60 + 10;
end
b = hist(a, 10:70);
figure,bar(10:70, b, 'g');
grid on
title('rand()产生1000个[10,70]的随机数直方图');
for k = 1:5000
TwoDimension(k,1) = rand() * 4 + 1;
TwoDimension(k,2) = rand() * 10 + 20;
end
figure,plot(TwoDimension(:,1), TwoDimension(:,2), '*');
xlim([0 6]);
ylim([10 40]);
grid on
title('在[1,5]*[20,30]中产生5000个均匀分布的二维随机点');
for j = 1:10000
ThreeDimension(j,1) = rand() * 40 + 10;
ThreeDimension(j,2) = rand() * 30 + 30;
ThreeDimension(j,3) = rand() * 5 + 10;
end
figure,scatter3(ThreeDimension(:,1),ThreeDimension(:,2),ThreeDimension(:,3),'r');
xlim([0 60]);
ylim([20 70]);
zlim([0 20]);
grid on;
title('产生10000个均匀分布的三维随机点');
% 产生5000个随机点,然后根据公式剔除三角形外的点
n = 5000;
x = rand(n,2) * 2;
% 变量名 = @(输入参数列表)运算表达式
fx = @(x)(x < 1).*(2*x)+(x >= 1).*(4-2*x);
g=0:0.2:2;
y=fx(g);
% 绘制边界直线,设定直线粗细
figure,plot(g,y,'r-','linewidth',3);
hold on
% 判断元素在y轴上的值是否超出三角形的边界
% 对边界外的点标记为一个值
for t = 1:n
if x(t,2) > fx(x(t,1))
x(t,:) = [0, 0];
end
end
% 扫描标定的值并删除这些元素,剩下边界内的元素
for t = n:-1:1
if x(t,:) == [0, 0]
x(t,:) = [];
end
end
plot(x(:,1),x(:,2),'o');
title('若干个三角分布的随机点');
% 绘制随机点分布直方图
[f, y] = hist(x(:,1), g);
figure,bar(y,f,1);
title('随机点分布直方图');
% 产生5000个随机点,然后根据公式剔除梯形外的点
n = 5000;
x = rand(n,2) * 3;
% 变量名 = @(输入参数列表)运算表达式
fx = @(x)(x <= 1).*(3*x)+( x > 1 & x <= 2).*3 + (x > 2).*(9-3*x);
g=0:0.1:3;
y=fx(g);
% 绘制边界直线,设定直线粗细
figure,plot(g,y,'r-','linewidth',3);
hold on
% 判断元素在y轴上的值是否超出梯形的边界
% 对边界外的点标记为一个值
for t = 1:n
if x(t,2) > fx(x(t,1))
x(t,:) = [0, 0];
end
end
% 扫描标定的值并删除这些元素,剩下边界内的元素
for t = n:-1:1
if x(t,:) == [0, 0]
x(t,:) = [];
end
end
plot(x(:,1),x(:,2),'o');
title('若干个梯形分布的随机点');
% 绘制随机点分布直方图
[f, y] = hist(x(:,1), g);
figure,bar(y,f,1);
title('随机点分布直方图');
% 使用randn()两组1000个随机数
% 并显示直方图
% 产生一个随机分布的指定均值和方差的矩阵:将randn产生的结果乘以标准差,然后加上期望均值即可。
for i = 1:1000
Gaussian(i,1) = sqrt(1) * randn() + 5;
Gaussian(i,2) = sqrt(2) * randn() + 10;
end
G1 = hist(Gaussian(:,1), 0:20);
G2 = hist(Gaussian(:,2), 0:20);
figure,subplot(1,2,1),bar(0:20, G1, 'g');
grid on
title('均值为5,方差为1的高斯分布随机数直方图');
subplot(1,2,2),bar(0:20, G2, 'g');
grid on
title('均值为10,方差为2的高斯分布随机数直方图');
% mvnrnd(mu,sigma,n)
% 产生二维正态随机数,mu为期望向量,sigma为协方差矩阵,n为规模。
mu = [2 2];
sigma = [1 0; 0 2];
r = mvnrnd(mu,sigma,1000);
figure,plot(r(:,1),r(:,2),'r+');
hold on;
mu = [7 10];
sigma = [ 3 0; 0 3];
r2 = mvnrnd(mu,sigma,1000);
plot(r2(:,1),r2(:,2),'b*')
hold on;
mu = [15 20];
sigma = [ 2 0; 0 2];
r3 = mvnrnd(mu,sigma,1000);
plot(r3(:,1),r3(:,2),'go')
grid on;
title('三组高斯二维随机矢量散点图');
% 产生五组不同的三维高斯随机矢量
mu1 = [2 2 2];
sigma1 = [1 0 0; 0 2 0; 0 0 3];
r1 = mvnrnd(mu1,sigma1,1000);
mu2 = [6 0 -4];
sigma2 = [1 0 0; 0 2 0; 0 0 3];
r2 = mvnrnd(mu2,sigma2,1000);
mu3 = [-9 7 0];
sigma3 = [1 0 0; 0 2 0; 0 0 3];
r3 = mvnrnd(mu3,sigma3,1000);
mu4 = [0 15 -2];
sigma4 = [1 0 0; 0 2 0; 0 0 3];
r4 = mvnrnd(mu4,sigma4,1000);
mu5 = [-12 12 -12];
sigma5 = [1 0 0; 0 2 0; 0 0 3];
r5 = mvnrnd(mu5,sigma5,1000);
figure,plot3(r1(:,1),r1(:,2),r1(:,3),'r+',...
r2(:,1),r2(:,2),r2(:,3),'g+',...
r3(:,1),r3(:,2),r3(:,3),'b+',...
r4(:,1),r4(:,2),r4(:,3),'m+',...
r5(:,1),r5(:,2),r5(:,3),'k+');
grid on
title('五组不同的三维高斯随机矢量');
% 绘制三维随机矢量的二维投影散点图
figure,plot(r1(:,2),r1(:,3),'r+',...
r2(:,2),r2(:,3),'g+',...
r3(:,2),r3(:,3),'b+',...
r4(:,2),r4(:,3),'m+',...
r5(:,2),r5(:,3),'k+');
grid on
title('三维高斯随机矢量的二维投影,取第2、3维');
% 用meshgird,mvnpdf等函数绘制三维网格图
mu = [0 0];
SIGMA = [1 0; 0 1];
[X,Y] = meshgrid(-5:0.2:5, -5:0.2:5); %在XOY面上,产生网格
p = mvnpdf([X(:),Y(:)],mu,SIGMA); % 求取联合概率密度,相当于Z轴
p = reshape(p,size(X)); % 将Z值对应到相应的坐标上
mesh(X,Y,p); % 绘制
title('三维正态分布图曲面图');
color = {'r.', 'g.', 'm.', 'b.', 'k.', 'y.'}; % 用于存放不同类数据的颜色
% 一维数据
mu(1,1) = 1;
sigma(1,1) = 0.2;
mu(1,2) = 5;
sigma(1,2) = 0.5;
mu(1,3) = -2;
sigma(1,3) = 0.5;
% 二维或三维数据
mu3(:,:,1) = [-1 2 -3];
sigma3(:,:,1) = [8 0 0; 0 9 0; 0 0 10];
mu3(:,:,2) = [-12 12 -12];
sigma3(:,:,2) = [1 0 0; 0 2 0; 0 0 3];
mu3(:,:,3) = [2 -12 2];
sigma3(:,:,3) = [1 0 0; 0 3 0; 0 0 3];
mu3(:,:,4) = [22 -52 22];
sigma3(:,:,4) = [8 0 0; 0 25 0; 0 0 20];
mu3(:,:,5) = [-22 52 -22];
sigma3(:,:,5) = [8 0 0; 0 25 0; 0 0 20];
aa = MixGaussian(10000, 5, 3, mu3, sigma3);
title('五类三维随机点分布');
% for i = 1:1
% plot3(aa(:,1,i),aa(:,2,i),aa(:,3,i),char(color(i)));
grid on
% 输入数据和要投影的两个坐标系
TwoDProject(aa, 2, 3);