好的,这是以一种很难处理的方式指定方程。看起来它被设计为由能够进行符号计算的程序读取,实现起来很痛苦。它以易于转换为符号方程的函数形式指定。要从头开始解释它,您需要:
- 创建变量的表示
- 创建 + - * / ^ 等的表示
- 创建微分算子的表示
- 实施替代/评估
- 决定如何将微分方程转换为机器可积形式
像这样的类(或函数)结构非常标准:
+ Expression
+ Variable(String name)
+ Operation(Expression ex1, Expression ex2 ...)
+ Differentiate(Expression ex, Variable v)
基本上,你不想这样做,除非你有很多时间。相信我,我自己做过,很痛苦。最好找一个符号代数包。请参阅此 SE 问题。
完成此操作后,您可以轻松编写一个迭代微分方程的函数。在 sudo 代码中,
# For an equation of the form d/dt X = Y(x,t)
function step(equation, x, t, dt)
lhs = equation[0]
rhs = equation[1]
return x + dt * rhs.evaluate(x,t)
function euler_integrate(equation, x0, t0, dt,iters)
output = empty_list
x = x0
t = t0
for i in 1...iters
do
x = step(equation, x, t, dt)
t = t + dt
output.append(x)
done
return output
这很容易概括。
至于方程式,我理解它说:
∂∂吨[ Casp8 ] = [ f0]Ĵ+ [ Casp8]Ĵ- [某种泄漏]Ĵ
在哪里[ X]是和的浓度[ X]Ĵ是一个通量(因此,它本身就是一个时间导数)。
使用质量作用动力学或 Gillespie 算法或其他任何方法解决您喜欢的方程。