我一直在寻找,但找不到在 julia 中使用微分方程参数估计来拟合多个数据集的直接方法。所以,假设我们有这个带有两个参数的简单微分方程:
f1 = function (du,u,p,t)
du[1] = - p[1]*p[2] * u[1]
end
我们有 u[1] vs t 的实验数据集。每个数据集具有不同的 p[2] 值和/或不同的初始条件。p[1] 是我们要估计的参数。我可以通过在迭代不同初始条件和 p[2] 值的 for 循环中求解微分方程,将解存储在数组中并针对实验数据创建损失函数来做到这一点。我想知道是否有一种方法可以用更少的代码行来做到这一点,例如,DiffEqBase.problem_new_parameters
使用设置每个数据集的条件。在将模型拟合到实验数据时,这是一种非常常见的情况,但我在文档中找不到一个很好的例子。
先感谢您,
最好的祝福
编辑 1
上述情况只是一个简化的例子。为了使它成为一个实际案例,我们可以从以下代码创建一些假的实验数据:
using DifferentialEquations
# ODE function
f1 = function (du,u,p,t)
du[1] = - p[1]*p[2] * u[1]
end
# Initial conditions and parameter values.
# p1 is the parameter to be estimated.
# p2 and u0 are experimental parameters known for each dataset.
u0 = [1.,2.]
p1 = .3
p2 = [.1,.2]
tspan = (0.,10.)
t=linspace(0,10,5)
# Creating data for 1st experimental dataset.
## Experimental conditions: u0 = 1. ; p[2] = .1
prob1 = ODEProblem(f1,[u0[1]],tspan,[p1,p2[1]])
sol1=solve(prob1,Tsit5(),saveat=t)
# Creating data for 2nd experimental dataset.
## Experimental conditions: u0 = 1. ; p[2] = .2
prob2 = ODEProblem(f1,[u0[1]],tspan,[p1,p2[2]])
sol2=solve(prob2,Tsit5(),saveat=t)
# Creating data for 3rd experimental dataset.
## Experimental conditions: u0 = 2. ; p[2] = .1
prob3 = ODEProblem(f1,[u0[2]],tspan,[p1,p2[1]])
sol3=solve(prob3,Tsit5(),saveat=t)
sol1、sol2 和 sol3 现在是我们的实验数据,每个数据集使用初始条件和 p[2] 的不同组合(代表一些实验变量(例如温度、流量...)
目标是使用实验数据 sol1、sol2 和 sol3 估计 p[1] 的值,让DiffEqBase.problem_new_parameters
或另一种替代方法迭代实验条件。