Я искал и не смог найти прямой способ использования оценки параметра DifferentialEquations в julia для соответствия нескольким наборам данных. Итак, допустим, у нас есть это простое дифференциальное уравнение с двумя параметрами:
f1 = function (du,u,p,t)
du[1] = - p[1]*p[2] * u[1]
end
У нас есть экспериментальные наборы данных u [1] vs t. Каждый набор данных имеет различное значение p [2] и / или разные начальные условия. p [1] - параметр, который мы хотим оценить. Я могу сделать это, решив дифференциальное уравнение в цикле for, который выполняет итерацию по различным начальным условиям и значениям p [2], сохраняя решения в массиве и создавая функцию потерь для экспериментальных данных. Интересно, есть ли способ сделать это меньшим количеством строк кода, используя, например, 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] (который представляет некоторую экспериментальную переменную (например, температуру, расход ...)
Цель состоит в том, чтобы оценить значение p [1], используя экспериментальные данные sol1, sol2 и sol3, позволяя DiffEqBase.problem_new_parameters
или другой альтернативе перебирать экспериментальные условия.