У меня есть система жестких ODE, которые я решаю с помощью ode15s. Производная по времени имеет тип:
yt = A*y - u.*y;
Где yt
, y
и u
- векторы столбцов, а A
- разреженная матрица. Вычисление u
должно выполняться каждый раз, когда вычисляется, и оно требует значительных вычислительных ресурсов (u нелинейно, и это является причиной жесткости). Я не хочу предварительно вычислять u
, потому что я хотел бы сохранить свободу решателя, чтобы выбрать любое желаемое время позже. Однако меня интересует не решение y (t), а решение u (t). * Y (t), которое уже рассчитано для вычисления yt
. Если я получу решение в виде структуры sol
, которую затем смогу оценить с помощью deval
, я легко вычислю y (t), но u (t) придется пересчитать. Мне было интересно, есть ли какой-нибудь способ сохранить результат u.*y
при использовании решателя, чтобы я мог вызывать его так же легко, как и deval(y,t)
. Самая близкая альтернатива, которую я нашел, состоит в том, чтобы полагаться на deval, также предоставляя производную по времени, поэтому сделайте:
[y,yt] = deval(sol,t); %t is a row vector
uy = A*y - yt; %uy = u.*y
Что не очень неэффективно, но тратит некоторые вычисления в операциях, которые уже были вычислены.
Есть идеи, как это сделать?