- 积分
- 27
- 注册时间
- 2008-3-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 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 |
评分
-
1
查看全部评分
-
|