找回密码
 注册
Simdroid-非首页
查看: 144|回复: 6

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

[复制链接]
发表于 2011-5-26 14:31:12 | 显示全部楼层 |阅读模式 来自 台湾
悬赏1仿真币已解决
不好意思目前遇到一个蛮困难的问题 在此问一下各位是否有好方法 谢谢
就是例如我假设A = 20000;
我要随机10格数字放入B矩阵
B=[数字1;
   数字2;
   数字3;
   .
   .
   .
   数字10];
每个数字都超过1000
最后10个数字加总C=A=20000

最佳答案

查看完整内容

以前看过一个m*n版本的,每列的和是定值。 n*1的话其实还是挺好写的:>> 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 ...
发表于 2011-5-26 14:31:13 | 显示全部楼层 来自 英国
Simdroid开发平台
以前看过一个m*n版本的,每列的和是定值。
n*1的话其实还是挺好写的:
  1. function x= randconstrained(n,a,b,s)
  2. %n是维数, a<=x(i)<=b;s是限制条件里的和

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

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

  6. Sum = 0; Product = 1;
  7. for i = n-1:-1:1  
  8. temp = r(n-i).^(1/i);
  9. Sum = Sum + (1-temp).*ss/(i+1).*Product;
  10. Product = temp.*Product;
  11. x(n-i) = Sum ;
  12. end
  13. x(n) = Sum + Product.*ss;


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

  16. 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

查看全部评分

回复

使用道具 举报

发表于 2011-5-26 19:40:43 | 显示全部楼层 来自 吉林长春
其实10个数字只有九个是随机的,最后一个可以自然得到

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-5-27 11:09:33 | 显示全部楼层 来自 台湾
请问?
[~,p] = sort(rand(n,1));
这句
出现 Expression or statement is incorrect--possibly unbalanced (, {, or [. 错误
回复

使用道具 举报

发表于 2011-5-27 11:44:55 | 显示全部楼层 来自 河北廊坊
4# 武神裝攻
估计是你的版本的问题
回复

使用道具 举报

 楼主| 发表于 2011-5-27 14:30:55 | 显示全部楼层 来自 台湾
   
估计是你的版本的问题
qibbxxt 发表于 2011-5-27 11:44

请问要如何解决?
回复

使用道具 举报

发表于 2011-5-27 20:12:34 | 显示全部楼层 来自 英国
请问要如何解决?
武神裝攻 发表于 2011-5-27 14:30


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

实在不行就不打乱了,
把最后两行去掉换成
x=(b-a)*x+a;
倒也还勉强。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-27 21:11 , Processed in 0.032470 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表