matlab产生随机整数,和为定值。为什么最后生成的一组数四舍五入之后和比定值小了一个?

我要产生10个整数且和为2000000,按下面方法生成之后最后对nev求和却是1999999.怎么才能得到和为2000000的10整数呢?M=2000000;%最后总和i... 我要产生10个整数且和为2000000,按下面方法生成之后最后对nev求和却是1999999.怎么才能得到和为2000000的10整数呢?
M=2000000; % 最后总和
i=rand(1,10); % 10组数和为2000000
j=M*i/(sum(i));
nev=round(j); % 取整

请高手指点,不胜感激~
展开
 我来答
无求饱
2012-05-28 · TA获得超过132个赞
知道答主
回答量:27
采纳率:0%
帮助的人:51.2万
展开全部
首先你的代码变得不错,只需在上面改一点即可。代码如下:
M=2000000; % 最后总和
i=rand(1,10); % 10组数和为2000000
j=M*i/(sum(i));
nev=round(j); % 取整
nev(10) = 2000000-sum(nev(1:9));

如你所知,10个数之和为2000000,其实自由度为9,所以当你确定了,其他9个数时,这10个数实际上是已确定的。所以我这里直接令最后一个为2000000-其他9个的和。

有什么问题请毫不犹豫追问我~
追问
想想您请教我在百度问的另一个问题
对矩阵Nnev赋值
Nnev=zeros(100,24);
i=1;j=1;k=1;
while k0
Nnev(k,i)=nev(k,j);
j=j+1;
end
i=i+1;
end
k=k+1;
end

运行结果是只有第一行被正常赋值了,其他都是0,当单让k=1/2/3是可以复制到,想用循环要怎么改呢?万分感谢~
追答
表面上看不出问题。。。肯定是L1+L2-Pnon(i)>0 出问题
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式