标签: simulation

如何生成具有泊松分布的离散随机事件?

我知道Knuth用于生成随机泊松分布数的算法(在Java下面)但是我如何将其转换为generateEvent()随机调用方法?

int poissonRandomNumber(int lambda) {
    double L = Math.exp(-lambda);
    int k = 0;
    double p = 1;
    do {
        k = k + 1;
        double u = Math.random();
        p = p * u;
    } while (p > L);
    return k - 1;
}
Run Code Online (Sandbox Code Playgroud)

java simulation events poisson

8
推荐指数
1
解决办法
9016
查看次数

在模拟的低内存,慢速CPU环境中运行我的应用程序

我想以这种方式对我的应用程序进行压力测试,因为它似乎在一些非常老的客户机中失败了.

起初我读了一些关于QEmu的内容并考虑了硬件仿真,但这似乎是一个很长的镜头.我在超级用户那里问过,但是还没有收到太多反馈.

所以我转向你们......你们这样的测试怎么样?

language-agnostic simulation low-memory cpu-speed

8
推荐指数
1
解决办法
5637
查看次数

在Haskell中编辑/更新图形

我正在使用Data.Graph Graph来模拟Haskell中的模拟.模拟仅限于我的图形模型的2D网格.下面网格上每个点的节点将包含一个可能的分子类型,因此可能存在分子或只有Nothing.

1  - 2  - 3  
|    |    |  
4  - 5  - 6  
|    |    |  
7  - 8 -  9  
Run Code Online (Sandbox Code Playgroud)

我已经建立了这种表示,但是当谈到更新分子的位置时,我觉得我已经走了很长一段路.到目前为止我所做的是将所有节点剥离到节点列表中.我写了一个函数来交换这个节点列表中的两个项目.但是现在当我把所有东西拉回到一起时,我遇到了问题,因为要生成一个新图形,我需要一个顶点列表,我可以从顶点Graph函数中轻松获得这些顶点.但是我还需要用边缘接触的顶点列表来压缩它.不幸的是,Data.Graph的边缘Graph函数返回一个Edge类型的元组列表,尽管我可以编写一个函数来派生有一个顶点边缘的列表顶点,但这对于生成一个图形并不是很有帮助.这样做似乎足以让我想知道我是否错过了重点是那里有一个Graph函数,它只是采用图形并返回带有更新节点的图形?

simulation haskell graph

8
推荐指数
1
解决办法
906
查看次数

分子动力学模拟:波动偶极子模型实现

我正在进行二氧化硅的分子动力学模拟.前段时间我转向波动的偶极子模型,经过多方努力,我仍然遇到问题.

简而言之,系统中的所有氧原子都是可极化的,它们的偶极矩取决于它们相对于系统中所有其他原子的位置.更具体地说,我使用TS potential(http://digitallibrary.sissa.it/bitstream/handle/1963/2874/tangney.pdf?sequence=2),其中在每个时间步骤迭代地发现偶极子.

这意味着在评估作用于原子的力时,我必须考虑这种对坐标的潜在能量依赖性.以前,我使用的是简单的成对潜在模型,所以我会设置我的程序来使用通过区分潜在能量表达式获得的分析公式来计算力.

现在我不知所措:如何实现这一新潜力?在我发现的所有文章中,他们只给出了公式,而不是算法.在我看来,当我计算力,作用于某个原子时,我必须考虑到这个原子的偶极子的变化,所有相邻原子的偶极子的变化,然后是更多原子的偶极子的变化等等,因为它们彼此依赖.毕竟,正是由于这种相互依赖性,在每个时间步骤迭代地发现了偶极子.显然,我不能迭代地为每个原子计算力,因为算法的计算复杂度太高了.我应该使用一些简单的函数来解释偶极子的变化吗?这看起来也不是一个好主意,因为偶极子是迭代计算的,具有高精度,然后,它实际上很重要(计算力),我们会使用原油函数吗?

那么我该如何实现这个模型呢?此外,是否可以像以前一样分析计算力,或者是否有必要使用导数的有限差分公式计算它们?

我没有在文献中找到我的问题的答案,但是如果你知道一些文章,网站或书籍,这些材料被突出显示,请指导我.

感谢您的时间!

================================================== ================================

更新:

谢谢您的回答.不幸的是,这不是我的问题.我没有问过如何计算偶极子,但是如果计算这些偶极子随着运动的变化而变化很大.

我试图以直接的方式计算力(不考虑偶极子通过它们的距离相互依赖,只计算每一步的偶极子,然后计算力就像那些偶极是静态的),但我得到的结果在物理上是不正确的.

为了分析这种情况,我建立了一个由两个原子组成的系统的模拟:Si和O.它们具有相反的电荷,因此它们会振荡.能量时间依赖图形看起来像这样:

在此输入图像描述

顶部的曲线代表动能,中间的曲线代表潜在的能量而不考虑偶极相互作用,底部的曲线代表系统的势能,其中偶极相互作用被考虑在内.

从图中可以清楚地看到,系统正在做它不应该做的事情:爬上潜在的斜坡.所以我认为这是因为我没有考虑偶极矩坐标依赖性.例如,在给定的时间点,我们计算力,并且它们被定向以便使两个原子彼此相向移动.但是当我们确实将它们朝向彼此移动时(甚至略微移动),偶极矩会发生变化,我们发现实际上我们的能量比以前更高!在下一个时间步骤中情况是相同的.

所以问题是,如何将这种影响考虑在内,导致我能想到的几种方式无论是计算量太强还是太粗糙.

algorithm simulation

8
推荐指数
1
解决办法
604
查看次数

Three.js从WebGLRenderTarget(water sim)中检索数据

我试图把这个(http://madebyevan.com/webgl-water/)移到三个.我想我已经接近了(现在只想要模拟,不关心焦散/折射).我想让它与着色器一起使用GPU提升.

这是我目前使用着色器的三个设置:http://jsfiddle.net/EqLL9/2/ (第二个较小的平面用于调试WebGLRenderTarget中当前的内容)

我正在努力的是从WebGLRenderTarget(在我的示例中为rtTexture)中读取数据.在示例中,您将看到围绕中心点的4个顶点向上移位.这是正确的(在1个模拟步骤之后),因为它始于中心点是唯一的位移点.

如果我可以从rtTexture读回数据并更新每帧的数据纹理(buf1),那么模拟应该正确地设置动画.如何直接从WebGLRenderTarget读取数据?所有示例都演示了如何将数据发送到目标(呈现给它),而不是从中读取数据.或者我做错了吗?有些东西告诉我,我将不得不使用多种纹理,并以某种方式来回交换,类似于Evan的做法.

TL; DR:如何在调用之后将数据从WebGLRenderTarget复制到DataTexture:
// render to rtTexture
renderer.render( sceneRTT, cameraRTT, rtTexture, true );

编辑:可能已经在jsfiddle/gero3/UyGD8/9 /找到解决方案将进行调查和报告.

simulation shader webgl three.js

8
推荐指数
1
解决办法
5341
查看次数

是否有可能在尺寸和质量方面进行逼真的n体太阳系模拟?

重要提示:这个问题与"PhysX" 完全没有关系,"PhysX"是一个计算机游戏物理系统(对于街机游戏中的物理学有用,如球类游戏等); PhysX是Unity3D和其他游戏引擎内置的系统; PhysX在这里完全无关紧要.

////////////////////更新(先读到底部)/////////////////////

我一直在记录值并搜索确切问题的位置,我想我找到了它.我的代码中有这样的东西

Velocity += Acceleration * Time.deltaTime;
position += Velocity * Time.deltaTime;
Run Code Online (Sandbox Code Playgroud)

加速度就像0,0000000000000009 ..现在.当代码流动时,速度应该增加,浮动没有问题.但是在开始时,地球的初始位置是(0,0,23500f)你可以在我最后给出的图表中看到这一点.

那么现在当我将速度*timedelta(此时类似于0,00000000000000005)添加到23500的位置时,它基本上不会添加它.位置仍然是(0,0,23500)不像(0,0,23500.00000000000005),因此地球不移动,因此加速度不会改变.

如果我将地球的初始位置设置为0,0,0并且仍然将加速度设置为0.0000000000000000009以使其位置为(0,0,23500)然后"ADDS"速度*timedelta.它变得类似于(0,0,000000000000000000005)并且继续增加.当float为0时,添加这么小的值没有问题.但是如果浮点数类似于23500,那么它就不会增加小值.

我不知道这是完全统一的问题还是c#的漂浮.

这就是为什么我不能让它与小值一起工作.如果我能克服这一点,我的问题将得到解决.

////////////////////////////////////////////////// /////////////////////////////

我一直在开发n体植物以模拟我们的太阳系,因此我一直在收集数据以使其尽可能逼真.但是数据大小存在问题.我搜索了每一点互联网,我找不到人们如何克服这一点的单一解释.(如果是这样的话)所以我在这里尝试拍摄.

因此,为了保持行星之间的距离,半径和"质量"的比例,我创建了一个excel文件来计算所有数据.(因为有人为什么会把"地球的质量如果有"那个"半径图"在互联网上?)我将把ss作为附件.它基本上"标准化"或换句话说"缩放"行星的每个属性到给定的参考.在这种情况下,我把参考作为"地球的半径".

我团结一致,你知道,你不能在统一中使用"太大"或"太小"的价值观.所以我不得不缩小太阳能系统,"很多!"

因此,我使用牛顿万有引力定律,即F = GMm/r ^ 2,使其变得简单,我直接计算a = GM/r ^ 2,对于来自所有其他物体的给定物体.

因此,地球的"朝向太阳"的重力加速度的实际值大约是0,000006 km/s ^ 2,这在统一的工作中甚至是非常小的值,但它可以工作.然而,为了获得这个值,1我需要将地球的半径(比例)设置为6371单位,并将太阳比例设置为696,342 !,这对于将其统一起来来说太大了.

所以我说,让地球的半径为1,以统一为单位.因此,当半径改变时,一切都会改变,质量,距离......我保持行星的密度,并用新半径计算新体积的质量.所有计算都在附件中.

所以事实是,当我把地球的半径变为1时,对太阳的引力加速就像0,0000000000009那样小得可笑.当然,Unity不会使用这个值.

所以,如果我改变地球的半径,那么太阳的质量和半径变得非常大,然后再次,我无法使用它.

我不知道其他人如何解决这个问题,他们为解决这个问题做了什么,但正如我从这里看到的那样,看起来不可能对太阳系进行逼真的n体模拟.(至少统一)

所以我需要有10个代表来发布图片-_-,我会给出链接. http://berkaydursun.com/solar_system_simulator/data.PNG 另外一个目录是使用n体计算但具有UNREALISTIC值的工作实验太阳系模拟.它工作得很好,它甚至看起来有点接近真实,但不,它没有正确的比率^^你可以在这里测试它,如果你希望http://berkaydursun.com/solar_system_simulator/

编辑:WoW我几乎用"So"开始了每个段落^^

simulation physics game-physics

8
推荐指数
1
解决办法
6079
查看次数

HSpice网表中的子电路?

第一次在Hspice上工作所以请耐心等待.我需要为CMOS和门写网表.目前,我已经完成了CMOS-Nand和逆变器部分的编写和测试.

1. CMOS Nand Gate 在此输入图像描述

2. Cmos逆变器 在此输入图像描述

我知道要实现AND门,我需要将NAND门的输出连接到逆变器的输入.

我知道我可以将NAND和Inverter定义为我的子电路.但是在这种方法中,我需要在subckt部分中删除它们的代码,这将增加网表的复杂性.

我的问题是,是否有任何其他方式,以便我可以直接使用上面写的网表或在其他文件中写入子包并导入它们?

simulation pspice

8
推荐指数
1
解决办法
1961
查看次数

分享哈斯克尔的力量计算

我正在Haskell中实现N-Body模拟.https://github.com/thorlucas/N-Body-Simulation

现在,每个粒子计算其力,然后相对于彼此的粒子加速.换句话说,O(n²)力的计算.如果我要计算每个组合一次,我可以将其减少到O(n选择2).

let combs = [(a, b) | (a:bs) <- tails ps, b <- bs ]
    force = map (\comb -> gravitate (fst comb) (snd comb)) combs
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何在不使用状态的情况下将这些应用于粒子.在上面的例子中,ps[Particle]在哪里

data Particle = Particle Mass Pos Vel Acc deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

从理论上讲,在一个有状态的语言,我只想能够遍历组合,从每一个计算从现行有关加速度ab,然后更新各自Particleps加速度为我做到这一点.

我想过要做点什么foldr f ps combs.起始累加器将是当前的ps并且f将是一些函数,它接收每个comb并更新相关Particle的内容ps,并返回该累加器.对于这样一个简单的过程来说,这似乎非常耗费内存并且非常复

有任何想法吗?

simulation haskell physics

8
推荐指数
1
解决办法
164
查看次数

用网格模拟水

有一段时间,我一直试图用我从"游戏的实时流体动力学"中剔除的算法来模拟流动的水.问题是我似乎没有用这些算法得出类似水的行为.

我自己,我猜我做错了,那些算法并不适合水样流体.

这些算法我做错了什么?这些算法是否正确?

我在bitbucket存储库中有相关项目.(需要gletools和最新的pyglet才能运行)

simulation physics

7
推荐指数
1
解决办法
8212
查看次数

模拟每两个变量之间具有不同混合依赖结构的混合数据?

我想模拟混合数据,比如三维数据.我想在每两个变量之间有两个不同的组件.

也就是说,模拟混合数据(V1和V2),其中它们之间的依赖关系是两个不同的正常分量.然后,在V2和V3之间另外两个正常组件.所以,我将得到3d数据,第一个和第二个变量之间的依赖关系是两个法线的混合.并且第二和第三变量之间的依赖性是另外两个不同组分的混合.

另一种解释我问题的方法:

假设我想生成如下混合数据:

1- 0.3正常(0.5,1)+ 0.7正常(2,4)#因此在这里我将获得由两个不同法线(混合模型的两个分量)生成的双变量混合数据,混合器重量的总和为1.

然后,我想得到另一个变量如下:

2- 0.5 normal(2,4)#这是第一个模拟的第二个变量+ 0.5法线(2,6)

所以在这里,我得到了3d模拟混合数据,其中V1和V2由两个不同的混合成分生成,V2和V3由另一个不同的混合成分生成.

这是如何在r中生成数据:(我相信它不会生成双变量数据)

N <- 100000                 

#Sample N random uniforms U
U <- runif(N)

#Variable to store the samples from the mixture distribution                                             
rand.samples <- rep(NA,N)

#Sampling from the mixture
for(i in 1:N) {
    if(U[i]<.3) {
        rand.samples[i] <- rnorm(1,1,3)
    } else {
        rand.samples[i] <- rnorm(1,2,5)
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我们生成混合双变量数据(两个变量),那么如何将其扩展为具有4个或5个变量,其中V1和V2由两个不同的法线生成(它们之间的依赖关系结构是两个法线的混合)然后V3将从另一个不同的法线生成,然后用V2进行复习.也就是说,当我们绘制V2~V3时,我们会发现它们之间的依赖关系结构是两个法线的混合,依此类推.

simulation r mixture-model mixture

7
推荐指数
1
解决办法
335
查看次数