文件交换

图片缩略图

固定和随机向量

版本1.0.0.0(8.22 KB)由 罗杰·斯塔福德
在指定的时间间隔内,随机均匀地生成具有指定总和和值的向量。
5
24级

62下载

更新2006年1月24日

没有许可

编者按:此文件是一个文件交换推荐商品

这将生成m个随机的n元素列向量,其值为[x1;x2;…;xn],每个列向量具有固定的和s,并且受限制a<=xi<=b。这些向量在解的n-1维空间中随机均匀分布。金宝搏官方网站这是通过将空间分解成许多不同类型的单形(线段、三角形和四面体的多维概括)来实现的。“兰特”函数用于在每个单纯形内均匀分布向量,并进一步调用“兰特”函数用于选择不同类型的单纯形,其概率与它们各自的n-1维体积成比例。这个算法不执行任何拒绝解-所有的解都是生成的,以便已经适合于指定的超立方体。金宝搏官方网站

引用为

罗杰·斯塔福德(2020)。固定和随机向量(//www.tatmou.com/matlabcentral/fileexchange/9700-random-vectors-with-fixed-sum),MATLAB中央文件交换。恢复.

意见及评分(38)

黄丽玲

Yu-Hsin李

救了我一天

很好,谢谢。

对于生成的每个元素,我们考虑一个可能对所有元素都不相同的特定区间时,分布将如何变化?

nikolaj汉森

如何在固定表或固定和数组中选取一些随机数?
例如:
数组= (1:10 0);
总和必须为42,有5个不同的数字

很漂亮,非常感谢!

亚伦

有人为产品编写过这样的函数吗?使得A*B*C<某个值?

苏丹

我想生成1x15昏暗数组v =[v1,…这样一来v1+…+ v15 = 1,六世\[0,1]。当我运行[x,v] = randfixedsum(1,15,1,0,1)时,randfixedsum(n,m,s,a,b)函数显示错误。错误如下:
索引超过了矩阵维度。
randfixedsum中的错误(第95行)
x=(b-a)*x(p+repmat([0:n:n*(m-1)],n,1))+a;%排列和重新缩放x

tarod13

我需要修改这段代码以生成具有固定和的随机正整数。我会感激你的任何想法。

如何使矩阵x的每一行的所有元素之和为1,且所有行元素具有统一的概率,即x矩阵,如下所示

0.31 0.34 0.35
0.35 0.32 0.33
0.32 0.36 0.32

所以所有行的和是1。怎么做

遗嘱亲属

约翰,谢谢你为社区开发了一个令人难以置信的功能。我对它有很多用途,我可能要花好几天的时间来做,我怀疑我是否能像你在这里所做的那样保持一致的随机。

美丽。

默罕默德

谢谢你对我的意见提出的意见。然而,我对胡安的看法还是一样的。如果你想生成一个具有固定和的随机向量,每个从算法中随机出来的向量被选中的概率都是不同的。是的,这个文件似乎可以正常工作只要你不关心检查每个向量从算法中出来的概率。谢谢你胡安。你明白我的意思了。顺便说一下,如果不使用估计,这个问题是无法解决的。这个问题只能通过域的离散化来解决,找到所有可能的解,并为每个解定义一个值,然后如果你随机选择一个,它的概率与任何其他解(向量)是相同的。金宝搏官方网站然而,这是一个愚蠢的解决方案(时间和成本)。同样,这取决于你的目的。 If you just want to produce some vectors with fixed summation this algorithm is a good choice for you. But if you want to use it in an optimization algorithm it is waste of time. For there are some solutions that with the confidence interval of 99.99 % you cannot produce that solution with the algorithm. In other words, if you try infinite number of times to produce them it will happen once. This is a simple and obvious probability problem. See what Juan wrote for you.

胡安

我认为这个脚本不是很好,生成的变量的直方图是不均匀的,你可以很容易地看到另一边的m很大,如果总和非常极端(例如大总和),分布甚至是最差的。
另一方面,基于一个非常简单的演算,我认为这个问题没有解决方案:
设x1 x2, x3为U[0 1]分布的3个随机变量,且约束条件为x1+x2+x3=1,则:
E(x1+x2+x3)=E(x1)+E(x2)+E(x3)=E(1)=1
因此,由于x1, x2, x3是恒等且相互独立的,所以结论是E(x1)=E(x2)=E(x3)=1/3。

纪尧姆

干得好!

我正在尝试调整这段代码,以便它生成一个向量,带有beta分布的随机值。

当然,仍然可以预先指定生成的向量的和。

有什么建议吗?这对我来说很难。

王家杰

我是否可以问一下,如果我想产生一个随机数,它的和是固定的,服从高斯分布,但在区间上没有限制?
我试着把a=-inf和b=inf放在一起,但结果是NaN。(可能是因为s=(s-n*a)/(b-a)产生inf/inf?)。该算法生成的随机数是否也遵循高斯分布?非常感谢

我觉得穆罕默德不明白这些代码的作用。事实上,它工作得很好,而且很有效。

此外,人们永远不应该简单地说什么东西行不通。相反,展示你的尝试,并解释为什么你认为它没有奏效。然后其他人可以看到您对代码的误解,或者他们可以看到代码中可能存在问题的原因。在这种情况下,我碰巧知道代码按照设计工作。

默罕默德

该功能不能正常工作。我尝试了这个文件几次,我得到了值的直方图。随机值的概率是不一样的。当您试图运行优化问题时,它可能会导致严重的问题。然而,这是一份好工作!

vachelard


我尝试使用该功能,但我在开车时遇到问题。
我有一个矩阵a(193.1),我想创建一个矩阵(193.3),其和等于矩阵a的一行。
我尝试了以下代码,但遇到错误:

对冲基金= Y (:, 1);

cols_to_generate = 3;

for K = 1: length (Y)

Neva(K,:)=randfixedsum(1列到生成,Y(K),-0.15,0.15);
终止

他告诉我:

索引超过了矩阵维度。

randfixedsum中的错误(第95行)

x=(b-a)*x(p+repmat([0:n:n*(m-1)]n,1))+a;%开关和重缩放x

95 x=(b-a)*x(p+repmat([0:n:n*(m-1)]n,1))+a;%开关和重缩放x

我不知道如何解决这个问题

我试图生成6个随机的NMBRS在给定的范围和总和:
xmin=[10 40 35 130 125];
Xmax =[125 150 250 210 325 315];
Pg = randfixedsum(6200、xmin xmax);
它给出了以下错误:
??使用==>减错误
矩阵维数必须一致。

==>randfixedsum在56处出错
s1=s-(k:-1:k-n+1);%s1和s2永远不会是负数

错误在==> busdatas在47
路上= randfixedsum(30、1、总(8)、xmin, xmax);

sm1能辨别出哪里错了吗1.我想不出来。。

Matlab2010

太好了!做得好

Matlab2010

太好了!做得好

好了。我试图在一个由线性不等式约束定义的单纯形中生成随机数据。

假设我已经有了由不等式定义的单纯形的N个顶点。那么,首先在区间[0,1]中生成一个和等于1的随机样本,然后取该样本与顶点向量的内积是否正确?

类似于:

X =兰德(2);
k = convhull (X);
情节(X (k, 1), X (k, 2), b),等等
nv=numel(k)-1;%顶点的超级
X = X (k (1: end-1):);删除重复的第一个顶点
L=randfixedsum(尺寸(X,1),1000,1,0,1);
Y = L ' * X;
情节(Y (: 1), Y(:, 2),“r”。),推迟

也许我不应该相信我在这方面的观点,但样本在单纯形中的分布并不均匀。出于某种原因,它们似乎只适用于三角形。

有什么想法吗?

谢谢

克里斯托夫

卢布鲁诺

Mate 2u

嗨,当我尝试在一个非常大的数组上使用函数时,它给了我以下错误…

???超出了程序允许的最大可变大小。

==>randfixedsum在58处出错
w = 0 (n, n + 1);w(1、2)=最大浮点数;%缩放为完整的“双”范围

尊重……

这正是我想要的!!非常感谢你的伟大工作!!

佩尔·安德斯·埃克斯特罗姆

太好了!

迈克•爱德华兹

非常有用!美丽的代码!

约翰·德雷科

这需要一点工作来验证n维超立方体切片的均匀性。我现在确信Roger已经做到了他所宣称的,在几个不同的维度检查了样本,并且思考了他用来生成样本的过程。

MATLAB版本兼容性
创建R10
与任何版本兼容
平台兼容性
窗户 macOS Linux
致谢

受到启发的:portfolio_sortino_ratio