<p>我不知道.solve_ivp()是如何工作的,但是如果你只想得到方程的字符串表示形式,我会做以下工作</p>
<pre><code>import pandas as pd
df = pd.read_csv("test.csv") # create DataFrame
def get_dt(some_variable):
equation = ["d{}/dt =".format(some_variable)] # store str representation of our eqn in a list
variables = []
for index, row in df.iterrows(): # iterate over all rows to check for a match
if (row["From"] == some_variable) or (row["To"] == some_variable): # if variable is found in row
if len(variables):
variables.append("- {}*{}".format(row["Rate"], row["From"])) # add it to our equation
else:
variables.append("{}*{}".format(row["Rate"], row["From"])) # the first number is positive for some reason
equation.extend(variables) # combine left and right hand sides into one list
return " ".join(equation) # combine our list or strings and return a nicely formatted single string
eqn = get_dt("Liver_1")
print(eqn)
</code></pre>
<p>输出</p>
<blockquote>
<p>dLiver_1/dt = 0.462*Blood_5 - 0.0009242*Liver_1 - 0.045286*Liver_1</p>
</blockquote>
<p>另外,如果你想一次得到所有的方程式</p>
<pre><code>all_vars = set(df["From"]) # make a "list" of the From variables that doesn't contain duplicates
all_vars.update(set(df["To"])) # add in all To variables still without duplicates
for var in all_vars:
eqn = get_dt(var)
print(eqn)
</code></pre>
<p>这给了我们输出</p>
<pre><code>dT-bone-S/dt = 0.12474*Blood_5
dT-bone-V/dt = 0.013859999999999999*Blood_5
dUB-cont/dt = 0.0154*Blood_5 - 3.5*Blood_4 - 0.017329*Kidneys_1
dRC-cont/dt = 0.01155*Blood_5
dSI-cont/dt = 0.0009242*Liver_1
dOther_3/dt = 300.0*Blood - 0.099*Other_3 - 28.95*Blood_4
dLiver_2/dt = 0.045286*Liver_1
dOther_5/dt = 0.0231*Blood_5 - 0.0001266*Other_5
dLiver_1/dt = 0.462*Blood_5 - 0.0009242*Liver_1 - 0.045286*Liver_1
dOvaries/dt = 8.47e-05*Blood_5
dKidneys_1/dt = 0.0077*Blood_5 - 0.017329*Kidneys_1
dKidneys_2/dt = 0.000385*Blood_5 - 0.0001266*Kidneys_2
dBlood/dt = 300.0*Blood - 700.0*Blood
dOther_4/dt = 0.018511*Blood_5 - 0.0013859999999999999*Other_4
dBlood_5/dt = 700.0*Blood - 0.462*Blood_5 - 0.08778*Blood_5 - 0.00462*Blood_5 - 0.12474*Blood_5 - 0.013859999999999999*Blood_5 - 0.0154*Blood_5 - 0.0077*Blood_5 - 0.000385*Blood_5 - 0.01155*Blood_5 - 0.0002695*Blood_5 - 8.47e-05*Blood_5 - 0.018511*Blood_5 - 0.0231*Blood_5 - 0.099*Other_3 - 67.55*Blood_4
dBlood_4/dt = 3.5*Blood_4 - 67.55*Blood_4 - 28.95*Blood_4 - 0.0001266*Kidneys_2 - 0.0013859999999999999*Other_4 - 0.0001266*Other_5
dTestes/dt = 0.0002695*Blood_5
dC-bone-S/dt = 0.08778*Blood_5
dC-bone-V/dt = 0.00462*Blood_5
</code></pre>
<p>我认为这足以让你走,这样你就可以找到它,但它可能不完全是你想要的,因为奇怪的线条,如:</p>
<blockquote>
<p>dBlood/dt = 300.0*Blood - 700.0*Blood</p>
</blockquote>
<p>这对我来说似乎没什么意义</p>