matlab关于randn函数的应用问题 大神进
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab关于randn函数的应用问题 大神进相关的知识,希望对你有一定的参考价值。
查阅协方差矩阵概念,利用randn函数生成协方差矩阵为[2 0;0 2],均值为[1;1]的二维正态分布数据,并用scatter函数画出来。对照协方差矩阵的概念分析该组数据是否完全符合二维正态分布性质,如果协方差矩阵为[2 1;1 2],则该如何生成?通过相关文献查找MATLAB是否具有相应函数用于直接生成二维正态分布数据,并用该函数解决上述问题。
协方差矩阵是
2 0
0 2
也就是二维的正态分布两维之间相互独立,并且各自的方差是2
randn是生成 均值为0,方差为1的正态分布随机变量
所以对于协方差矩阵为[2 0;0 2],均值为[1;1]的二维正态分布随机变量可以这样生成
X=randn(1000,2)*sqrt(2)+1;
这里生成的X是1000x2的矩阵
这两列数据,分别表示二维分布的x,y坐标数据
共有1000个,表示1000个点
scatter(X(:,1),X(:,2));axis equal;
可以画出这些点在二维平面中的分布情况
分布中心在[1,1]附近
而可以通过cov函数计算这1000个二维随机点的协方差矩阵
>> cov(X)
ans =
2.0438 -0.0404
-0.0404 1.9902
这是某次随机运行的结构,每次运行会不一样
但是都很接近[2 0;0 2],说明这样生成的二维随机分布符合要求
如果协方差矩阵是
2 1
1 2
表明维度的随机分布不是相互独立的,想要用randn生成比较麻烦
但是matlab提供函数mvnrnd,用于生成二维正态分布随机变量
mu=[1 1]; %需要的均值
sigma=[2 1;1 2]; %需要协方差矩阵
X=mvnrnd(mu,sigma,1000); %生成1000个随机点
这里的X也是1000x2的矩阵,同样可以画出分布
scatter(X(:,1),X(:,2));axis equal;
图像中心也在[1 1]附近,分布不再是各个方向均匀的
而是趋向于一个方向,只是协方差矩阵中有非零对角元素而造成的
利用randn函数生成的代码:
S = [2 0; 0 2]; % 协方差矩阵M = [1; 1]; % 均值
N = 1000; % 数据点数
L = chol(S,'lower');
r = (L*randn(2,N) + repmat(M(:),1,N))';
scatter(r(:,1),r(:,2))
检验(分别求协方差矩阵和均值向量):
cov(r(:,1),r(:,2))mean(r)
MATLAB的统计工具箱(Statistics Toolbox)提供了多元正态分布的函数mvnrnd,可以直接使用:
S = [2 0; 0 2]; % 协方差矩阵M = [1; 1]; % 均值
N = 1000; % 数据点数
r = mvnrnd(M,S,N);
scatter(r(:,1),r(:,2))本回答被提问者和网友采纳
matlab randn 函数
matlab中x=X(1:N)是什么意思: 1:5 表示是 (1,2,3,4,5) 这样一个向量 。X(1:N) 当然就是取X中前N个元素了.。
例如,我想在1-60之间得到10个服从标准正态分布的随机数,如何实现??
先用标准正态随机产生函数randn(1,n);生产一个符合标准正态分布的数列,看看其最大最小值是多少,然后在函数前应映的乘以某个常数来达到你想要求的定义域范围。你想要的是1~60,那需要乘以10以上的常数了,randn(1,100000),产生的数才到4.3左右,
例子:x=23.*randn(1,500); %产生500个元素,
y=find(x>=1&x<=60);% 找出大于1且小于60的元素。y数组为x大于1小于60的元素的位置序号,别搞错了
x=x(y(1:10));%找出这些位置所对应的x的值,找出10个。
以上是关于matlab关于randn函数的应用问题 大神进的主要内容,如果未能解决你的问题,请参考以下文章