Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中生成具有预先指定的SD和平均值的相关数据?_Matlab - Fatal编程技术网

如何在MATLAB中生成具有预先指定的SD和平均值的相关数据?

如何在MATLAB中生成具有预先指定的SD和平均值的相关数据?,matlab,Matlab,我希望创建一个平均值为50、标准偏差为1的数据点向量。然后,我希望再次创建第二个数据点向量,平均值为50,标准偏差为1,与第一个向量的相关性为0.3。数据点的数量并不重要,但理想情况下我会有100个 在中提到的方法没有回答我的问题,因为(由于随机抽样)SDs和平均值与所需的数字偏差太大。我想出了一种方法,尽管它很难看。我仍然欢迎一个答案,详细说明一个更优雅的方法,以获得我想要的 z = 0; while z < 1 mu = 50 sigma = 1 M = mu

我希望创建一个平均值为50、标准偏差为1的数据点向量。然后,我希望再次创建第二个数据点向量,平均值为50,标准偏差为1,与第一个向量的相关性为0.3。数据点的数量并不重要,但理想情况下我会有100个


在中提到的方法没有回答我的问题,因为(由于随机抽样)SDs和平均值与所需的数字偏差太大。

我想出了一种方法,尽管它很难看。我仍然欢迎一个答案,详细说明一个更优雅的方法,以获得我想要的

z = 0;

while z < 1
    mu = 50
    sigma = 1
    M = mu + sigma*randn(100,2);
    R = [1 0.3; 0.3 1];
    L = chol(R)
    M = M*L;
    x = M(:,1);
    y = M(:,2);
    if (corr(x,y) < 0.301 & corr(x,y) > 0.299) & (std(x) < 1.01 & std(x) > 0.99) & (std(y) < 1.01 & std(y) > 0.99);
    z = 1;
    end
end
z=0;
而z<1
μ=50
西格玛=1
M=mu+sigma*randn(100,2);
R=[10.3;0.31];
L=chol(R)
M=M*L;
x=M(:,1);
y=M(:,2);
如果(corr(x,y)<0.301&corr(x,y)>0.299)和(std(x)<1.01&std(x)>0.99)和(std(y)<1.01&std(y)>0.99);
z=1;
结束
结束

然后我计算了向量y的平均值,计算出它比50高多少。然后我从向量y中的每个元素中减去这个数字,这样平均值就减少到50。

你可以同时创建两个向量。。。我不明白你为什么把它们分开定义。这是多元分布的概念(只是为了确保我们有相同的术语)。。。 无论如何,我想你已经达到了我所说的最简单的方法:

方法1:

使用matlab函数[请记住,mvnrnd使用可从相关性和方差计算得出的协方差矩阵)

方法2:

我不是很确定,但我认为这与你正在做的事情非常接近(实际上我的怀疑与
如果(corr(x,y)<0.301&corr(x,y)>0.299)和(std(x)<1.01&std(x)>0.99)和(std(y)<1.01&std(y)>0.99)
)我不理解你这么做的原因。请参阅主题“从分布中提取值”在维基百科