MATLAB通过区块划分提高随机生成圆球干涉检查的效率

通过区块划分提高随机生成圆球干涉检查的效率

  在材料研究中,经常使用Matlab来仿真材料的各种情况——比如仿真电池颗粒的分布及后续计算。
  在材料仿真时,我们第一步一般是先生成要仿真的材料。而其中用到的方法之一就是随机位置生成一定数量特定大小的颗粒。例如下图的样子:
请添加图片描述

  在随机生成这些颗粒的时候,每随机生成一个颗粒我们都要判断新生成的颗粒和其它已有颗粒的位置关系,如果发生干涉则新生成的颗粒需要重新生成。而这样的计算方式的时间复杂度是O(N!)的,随着要生成的颗粒的数量的增加计算时间将变得漫长。
  为了提高计算的效率,我们在对新生成颗粒和已有颗粒的干涉判断上,可以采用区块划分的方式。即把空间分割为若干个区块,每次新生成的颗粒都只和若干个区块内的已有颗粒进行干涉判断,通过这种方式,将计算量减小。
  在下图中,我们将生成空间划为了10x10个区块。每次生成一个新的颗粒,我们不再把新颗粒和所有已有的颗粒进行干涉检查,而是只对新颗粒所在的区块以及周围的八个区块内的已有颗粒进行干涉检查。当我们的颗粒生成是完全随机的,那么我们的干涉计算量只为原本方式的9/100。
请添加图片描述
  在区块法的情况下,无论总的区块是多少,我们都只需要对9个区块进行判断。所以,当我们把空间划为x个区块时,效率为原始效率的x/9。但是,需要注意的是,区块不能无限增多,因为我们必须保证区块能够容纳最大的颗粒,否则计算将出现问题。
请添加图片描述
  通过这种方式,我们可以快速的随机生成各种不同大小特定数量的颗粒。

区块法随机生成颗粒的Matlab代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

soar3033

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值