将速率方程转换为python代码的问题

将速率方程转换为python代码的问题,python,scipy,numerical-computing,Python,Scipy,Numerical Computing,我正在尝试将这些速率方程转换为python代码,我做了大量的研究,但似乎无法获得任何明确的路径来实现这一点,请提供任何帮助将不胜感激 这是一个最新更新的代码…我用Tom10的quide写的…请你怎么看 import numpy as np # import numpy as sum # not necessary, just for convenience, and replaces the builtin # set N_core value N_CORE = 0 # set

我正在尝试将这些速率方程转换为python代码,我做了大量的研究,但似乎无法获得任何明确的路径来实现这一点,请提供任何帮助将不胜感激

这是一个最新更新的代码…我用Tom10的quide写的…请你怎么看

    import numpy as np
# import numpy as sum  # not necessary, just for convenience, and replaces the builtin

# set N_core value
N_CORE = 0

# set the initial conditions appropriately (you need to set these correctly)
N = np.ones(8)
r = np.ones((8, 8))
dN = np.zeros(8) # the value here is not important for your equations

# set constant for equation 1
R_P1abs37 = 20
F_P1 = 20
R_P1abs47 = 40
W_3317 = 1.0

# set constant for equation 2
W_6142 = 90
W_5362 = 80

# Set you constants appropriately for equation 3
R_P2abs35 = 30
F_P2 = 40
R_L2se34 = 50
F_L2 = 90

# equation 4 constants
W_2214 = 20

#equation 5 constants
R_P1abs13 = 30
R_L2se32 = 20
F_L1 = 10

# equation 1 formular
dN[7] =sum(r[7,:]*N[7]) + (R_P1abs37*F_P1) + (R_P1abs47*F_P1) + (W_3317*N[3]**2)

# equation 2 formular
dN[6] = (r[7,6]*N[7]) - sum(r[6,:]*N[6]) - (W_6142*N[6]*N[1]) + (W_5362*N[5]*N[3])

#equation 3 formular
dN[5] = sum(r[:,5]*N) - sum(r[5,:]*N[5]) + R_P2abs35*F_P2 - R_L2se34*F_L2 - W_5362*N[5]*N[3]

# equation 4 formular
dN[4] = sum(r[:,4]*N) - sum(r[4,:]*N[4]) - (R_P1abs47*F_P1) + (R_L2se34*F_L2) + (W_2214*N[2]**2)+ (W_6142*N[6]*N[1])

#equation 5 formular
dN[3] = sum(r[:,3]*N) - sum(r[3,:]*N[3]) + (R_P1abs13*F_P1) - (R_P1abs37*F_P1) - (R_P2abs35*F_P2)
-(R_L2se32*F_L1) - ((2*W_3317)*N[3]**2) - (W_5362*N[5]*N[3])

#equation 6 formular
dN[2] = sum(r[:,2]*N) - (r[2,1]*N[2]) + (R_L2se32*F_L1) - ((2*W_2214)*N[2]**2) + (W_6142*N[6]*N[1])+(W_5362*N[5]*N[3])


#equation 7 formular
dN[1] = sum(r[:,1] * N) - (R_P1abs13*F_P1) + (W_2214*N[2]**2) + (W_3317+N[3]**2) - (W_6142+N[6]*N[1])

#equation for N CORE
N_CORE = sum(dN)


print(N_CORE)

以下是根据您的问题和意见列出的相关问题:

  • 通常情况下,如果总和超过i,那么没有i下标的所有东西对于该总和都是常数。(从数学上讲,这些常数项可以从和中带出来;因此第一个方程有点奇怪,其中N_7可以从和中移出,但我认为它们保持不变,以显示与其他方程的对称性,这些方程都有r*N项)

  • capitol sigma符号(∑)表示需要进行求和,这可以在循环中进行,但Python list和numpy都有求和函数。Numpy还有一个额外的优点,即乘法被解释为单个元素的乘法,使得表达式更容易。因此,对于
    a[0]*[b0]+a[1]*b[1]+a[2]*b[2]
    和numpy数组,它只是
    sum(a*b)
    而对于Python列表,它是
    sum([a[i]*b[i]对于in-range(len(a))]

因此,使用numpy,设置和第三个等式如下所示:

import numpy as np
import numpy.sum as sum  # not necessary, just for convenience, and replaces the builtin

# set the initial conditions appropriately (you need to set these correctly)
N = np.ones(7, dtype=np.float)
# r seems to be a coupling matrix, and should be set according to your system
r = np.ones((7, 7), dtype = np.float) 
# the values for dN are not important for your equations because dN only appears on the left side of the equations, so we just make a place to store the results
dN = np.zeros(7, dtype=np.float) 

# Set you constants appropriate.y
R_P2abs35 = 1.0
F_P2 = 1.0
R_L2se34 = 1.0
F_L2 = 1.0
W_5362 = 1.0

dN[5] = sum(r[:,5]*N) - sum(r[5,:]*N[5]) + R_P2abs35*F_P2 - R_L2se34*F_L2 - W_5362*N[5]*N[3]
请注意,尽管总和中的表达式看起来很相似,但第一个基本上是两个向量之间的点积,第二个是一个标量乘以一个向量,因此可以从总和中取出
N[5]
(但我把它放在那里是为了匹配方程式)


最后一点注意:我知道你是S.O.的新手,所以我想如果我能为你回答这个问题会很有帮助。以后,请尝试一下代码——这真的很有帮助。

你说的“将它们转换为python代码”是什么意思?要能够传入一些常数和值,并用Python中的方程计算它们来从头解释这一点是非常困难的。你知道数学和编程中的变量是什么吗?你知道数学中的方程和编程中的赋值语句,你知道它们的区别吗?你知道sigma s是什么吗ymbol的意思是,以及变量上的所有下标?如果你开始介绍你迄今为止所做的工作,我们将对你所知道的有一些了解,我们将知道从哪里开始回答。@tom10我对你所问的所有问题都有很好的了解……我是一名中级python程序员……我目前面临的问题是解释这些方程。。。。…就像…那个求和符号是不是意味着我必须在n次循环中执行它前面的公式?…是像w(subcipt)这样的组件3317和Rp1被视为变量?哇……非常感谢……这些为我澄清了很多事情……我真的很感激……我现在就开始开发……我会让你知道结果的……谢谢你,太棒了。最后,我希望问题不要结束,因为我认为这是一个很好的问题主题。只是为了出于好奇,我很想知道这个等式代表什么,或者至少是研究领域,如果它是合理的话。谢谢你……你能检查一下更新的问题吗?……我已经用你的指南写了代码……你觉得怎么样?@kayodeolayiwola:我抽查了你的一些等式,它们对我来说很好。真正的解决方法是测试这些是为了了解它们在一些情况下应该产生什么,并确保它们正常工作,并进行类似的测试。我在回答中犯的一个错误是,我应该将初始数组创建为float而不是int,现在我在回答中已经解决了这一问题。将常量设置为float也可能很好(例如,
30.0
而不是
30
)。此外,在您的方程式中,您需要设置r的值和N的初始值以匹配您的系统。噢……谢谢……我已经更改了……但是设置r和N的初始值是什么意思?……您的意思是我需要填充numpy数组(r和N)方程前有一些值?…谢谢