对变化率进行积分以找到 x

问题描述

我一直试图将 dx/dt 与时间的关系图转换为每个 bin 中的 x 与时间关系图。

我有一个庞大的星系数据集。对于每个星系,都有一个表示质量随时间变化率的数组,即 dM/dt。因此,对于每个星系,都有一个一维数组在特定时间间隔声明 dM/dt。我也有一个时间数组。我可以绘制 dM/dt 与时间的关系图,并查看整个宇宙过程中的变化率。

但是现在我想每次绘制一个不同的星系质量图。即在每个时间间隔内形成了多少质量。我正在尝试对每个阵列进行积分,但这最终只给了我总质量。我想要每个间隔的质量,以便我可以绘制一个图。

这是星系 1 的 dM/dt 数组。

`[ 1.34162134e+10  1.00928939e+11  6.60376576e+10  3.42446745e+11
    2.73107925e+11  1.91493528e+11  6.73213607e+11  8.64649622e+11
    2.05433614e+11  8.47043150e+11  3.87556687e+11  1.67345819e+11
    5.12216609e+11  1.87612654e+12  7.74310416e+11 -5.22415543e+09
   -1.25683250e+11 -5.54250651e+10 -3.76655769e+10 -1.59683145e+10
    2.82219633e+11  6.00554078e+11  3.44238577e+11  2.79598376e+11
    1.05315182e+11 -3.21916236e+11 -1.50353059e+10  4.55187056e+10
   -3.65908025e+10  7.60636622e+10  6.41365631e+10  7.13690729e+10
    1.05199767e+11]`

这是时间数组。单位为 Gyr 但不重要。

`[ 0.418  0.547  0.687  0.844  1.036  1.282  1.54   1.944  2.384  2.839
 3.285  3.744  4.206  4.657  5.115  5.577  6.073  6.522  6.998  7.453
 7.932  8.432  8.902  9.389  9.837 10.299 10.834 11.323 11.824 12.337
12.795 13.328 13.803]`

然后我当然可以绘制这两个图形: graph of galaxy

现在我想绘制在每个间隔中形成的质量图,并根据时间绘制该图(我希望这是有道理的)。所以我需要在每个时间间隔内整合第一个数组。不过我遇到了麻烦。这是我目前所拥有的

` for i in range(galaxyarray.shape[0]): # for i in number of galaxies

      for j in range(galaxyarray.shape[1]): # for j in each element

         result = integrate.trapz((Mhdotarr[i,j]),time)`

但这不起作用。我可以通过对整个阵列进行积分来获得随时间形成的总质量,但我想获得每个间隔的质量。我希望这是有道理的?

看起来像这样:example

感谢任何帮助!

解决方法

我认为您正在寻找累积整合。将 trapz 换成 cumtrapz

for i in range(galaxyarray.shape[0]): # for i in number of galaxies
      for j in range(galaxyarray.shape[1]): # for j in each element

         result = integrate.cumtrapz((Mhdotarr[i,j]),time)

这将返回一个随时间变化的质量数组,其中最后一个元素是最终质量。