武神裝攻 发表于 2011-5-26 14:31:12

请问一下MATLAB有能力办到我随机值最后加总值是我规定的值的程序实现吗

不好意思目前遇到一个蛮困难的问题 在此问一下各位是否有好方法 谢谢
就是例如我假设A = 20000;
我要随机10格数字放入B矩阵
B=[数字1;
   数字2;
   数字3;
   .
   .
   .
   数字10];
每个数字都超过1000
最后10个数字加总C=A=20000

nwcwww 发表于 2011-5-26 14:31:13

以前看过一个m*n版本的,每列的和是定值。
n*1的话其实还是挺好写的:function x= randconstrained(n,a,b,s)
%n是维数, a<=x(i)<=b;s是限制条件里的和

ss = (s-n*a)/(b-a);

x = zeros(n,1);
r = rand(n-1,1);

Sum = 0; Product = 1;
for i = n-1:-1:1
temp = r(n-i).^(1/i);
Sum = Sum + (1-temp).*ss/(i+1).*Product;
Product = temp.*Product;
x(n-i) = Sum ;
end
x(n) = Sum + Product.*ss;


[~,p] = sort(rand(n,1));
x = (b-a)*x(p)+a;

return>> x=randconstrained(10,1e3,2e4,2e4)

x =

1.0e+003 *

    1.5895
    3.3042
    1.0148
    1.1263
    1.4420
    2.3287
    2.9177
    1.3780
    2.0665
    2.8322

>> x=randconstrained(10,1e3,2e4,2e4)

x =

1.0e+003 *

    1.0782
    3.1503
    1.0291
    3.1830
    2.0594
    2.1661
    1.2055
    1.5616
    3.2565
    1.3103

>> x=randconstrained(10,1e3,2e4,2e4)

x =

1.0e+003 *

    1.3637
    1.0518
    1.2895
    2.7400
    2.8402
    2.1123
    3.8144
    1.9673
    1.5211
    1.2997

feiyuzhen 发表于 2011-5-26 19:40:43

其实10个数字只有九个是随机的,最后一个可以自然得到

武神裝攻 发表于 2011-5-27 11:09:33

请问?
[~,p] = sort(rand(n,1));
这句
出现 Expression or statement is incorrect--possibly unbalanced (, {, or [. 错误

qibbxxt 发表于 2011-5-27 11:44:55

4# 武神裝攻
估计是你的版本的问题

武神裝攻 发表于 2011-5-27 14:30:55

   
估计是你的版本的问题
qibbxxt 发表于 2011-5-27 11:44 http://forum.simwe.com/images/common/back.gif
请问要如何解决?

nwcwww 发表于 2011-5-27 20:12:34


请问要如何解决?
武神裝攻 发表于 2011-5-27 14:30 http://forum.simwe.com/images/common/back.gif

sort那行主要是用来随机打乱x内各元素的排列顺序,
如果你运行不了的话可以自己换个方法解决,也很简单的。

实在不行就不打乱了,
把最后两行去掉换成
x=(b-a)*x+a;
倒也还勉强。
页: [1]
查看完整版本: 请问一下MATLAB有能力办到我随机值最后加总值是我规定的值的程序实现吗