首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mathematica模拟随机模拟

Mathematica模拟随机模拟
EN

Stack Overflow用户
提问于 2013-01-17 20:38:54
回答 1查看 190关注 0票数 1

我正在尝试在Mathematica中模拟a和b两个部分的突变。我加入了遗传漂移(完全随机的元素)如下:

代码语言:javascript
复制
p[sim_, 0] = Join[Table[a, {15}], Table[b, {15}]]
p[sim_, t_] := p[sim, t] = RandomChoice[p[sim, t - 1], 30]

这创建了两个由部分a和b随机组成的表。

我想添加以给定概率发生的突变,所以我尝试将以下内容附加到上面的代码中

代码语言:javascript
复制
Do[ReplacePart[p, i -> b] && If[RandomReal[] > .2, t], {t, 1, 15}]

因此,如果在0和1之间随机抽取的数字大于.2,则应该替换原始两个表中的元素i。

所以我的最终代码看起来像这样

代码语言:javascript
复制
p[sim_, 0] = Join[Table[a, {15}], Table[b, {15}]]
p[sim_, t_] := p[sim, t] = RandomChoice[p[sim, t - 1], 30];
Do[If[RandomReal[] < .2, 
  ReplacePart[p[sim, t], {_} -> RandomChoice[{a, b}]], 
  p[sim, t]], {t, 1, 15}]

但我可以告诉它不起作用,因为改变值RandomReal必须大于不做任何事情,但我没有收到错误消息。

有人能告诉我出了什么问题吗?任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-17 23:53:14

不确定这是否是您唯一的问题,但是ReplacePart对P[]返回的结果进行操作,但不影响函数本身,即。

代码语言:javascript
复制
f[0]={1,2,3}
ReplacePart[f[0],2->42] -> {1,42,3}

但你仍然会得到:

代码语言:javascript
复制
f[0] -> {1,2,3}

也是

代码语言:javascript
复制
{_} -> 

通知ReplacePart替换每一项。我不知道你的意图是什么..。第一个化身i->似乎是有意义的..

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14379323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档