Я пытаюсь преобразовать эти уравнения скорости в код Python, я провел много исследований, но, похоже, не могу найти четкого пути для достижения этого, пожалуйста, любая помощь будет оценена
Это недавно обновленный код .... я написал, используя руководство от Tom10 ..... пожалуйста, что вы думаете?
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)
1 ответ
Вот список актуальных проблем, основанный на вашем вопросе и комментариях:
Обычно, если суммирование превышает i , то все без нижнего индекса i является постоянным для этой суммы. (Математически эти постоянные члены можно просто вывести из суммы; поэтому первое уравнение немного странно, где N_7 можно вынести из суммы, но я думаю, что они сохраняют его, чтобы показать симметрию с другими уравнениями, которые у всех есть член r * N).
Символ сигмы capitol (Σ) означает, что вам нужно выполнить сумму, которую вы можете сделать в цикле, но и список Python, и numpy имеют функцию суммы. У Numpy есть дополнительное преимущество, заключающееся в том, что умножение интерпретируется как умножение отдельных элементов, что упрощает выражение. Итак, для
a[0]*[b0] + a[1]*b[1] + a[2]*b[2]
и numpy массивов это простоsum(a*b)
, а для списков Python этоsum([a[i]*b[i] for 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 — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.