将这段C物理代码转换成python

2024-05-14 13:16:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我只学了几个月的python,对C完全是个新手,我从网上得到了一个C代码,我很想学习它。但是我只懂python语言,所以有人能帮我把下面的代码翻译成python就太好了。提前谢谢!在

for(i=0; i<n; i++) { /* Foreach particle "i" ... */
  ax=0.0;
  ay=0.0;
  az=0.0;
  for(j=0; j<n; j++) { /* Loop over all particles "j" */
    dx=x[j]-x[i];
    dy=y[j]-y[i];
    dz=yz[j]-z[i];
    invr = 1.0/sqrt(dx*dx + dy*dy + dz*dz + eps);
    invr3 = invr*invr*invr;
    f=m[j]*invr3;
    ax += f*dx; /* accumulate the acceleration from gravitational attraction */
    ay += f*dy;
    az += f*dx;
  }
  xnew[i] = x[i] + dt*vx[i] + 0.5*dt*dt*ax; /* update position of particle "i" */
  ynew[i] = y[i] + dt*vy[i] + 0.5*dt*dt*ay;
  znew[i] = z[i] + dt*vz[i] + 0.5*dt*dt*az;
  vx[i] += dt*ax; /* update velocity of particle "i" */
  vy[i] += dt*ay;
  vz[i] += dt*az;
}

再次感谢!在


Tags: of代码fordtupdateaxazparticle
3条回答

把这当作学习一些C语言的理想机会,它的语法与Python不同。在

这对你很有好处

老实说,除了循环之外,这个已经非常接近python了。。

 for(j=0; j < n; ++j) 
只维护循环计数器j,它在每次循环迭代后递增。循环对所有
0 <= j < n
运行。祝你好运。

这是直译

Edit是直译,但原始C代码中有一些异常,@hughdbrown在评论中指出了这一点——看起来你正试图从完全崩溃的代码中研究这个主题,它甚至无法编译,这对你来说似乎是非常不明智的,所以,无论如何,我将冒昧地修复这个Python“几乎”直译的原始C代码的明显错误和荒谬之处…:

import math

for i in range(n):
  ax = ay = az = 0.0
  for j in range(n):
    dx=x[j]-x[i]
    dy=y[j]-y[i]
    dz=z[j]-z[i]
    invr = 1.0/math.sqrt(dx*dx + dy*dy + dz*dz + eps)
    f=m[j]*invr**3
    ax += f*dx  # accumulate the acceleration from gravitational attraction
    ay += f*dy
    az += f*dz
  xnew[i] = x[i] + dt*vx[i] + 0.5*dt*dt*ax
  ynew[i] = y[i] + dt*vy[i] + 0.5*dt*dt*ay
  znew[i] = z[i] + dt*vz[i] + 0.5*dt*dt*az
  vx[i] += dt*ax  # update velocity of particle "i"
  vy[i] += dt*ay
  vz[i] += dt*az

当然,它假设列表x,y,z。。。vx、vy、vz都是预先存在的,并且长度相同n,就像C代码片段假设相同的命名数组一样。在

相关问题 更多 >

    热门问题