odeint и специальное изменение переменной состояния

Я только что реализовал численное интегрирование для набора связанных ODE
из дискретного PDE с использованием библиотеки odeint C ++. Работает красиво и
молниеносно, но есть одна проблема:

Моя система ОДУ имеет так называемые поглощающие граничные условия: время
производные от моей переменной состояния, n, который является вектором N удваивается
(плотность населения) рассчитывается в системной функции, но до того, как это произойдет
(или после временной интеграции) я хотел бы установить:

n[N]=n[N-2];

n[N-1]=n[N-2];

Однако, конечно, это не работает, потому что переменная состояния в системе
функция объявлена ​​как Const, и похоже, что это не может быть изменено
кроме как через вмешательство в библиотеку … есть ли способ обойти это?

Я должен упомянуть эту настройку dndt[N] а также dndt[N-1] к нулю может выглядеть как
решение, но это не очень помогает, так как не поддается концепции поглощения границы
условия (n[N] а также n[N-1] будет всегда иметь значения, которые они имели в t=0, скорее
тогда значение n[N-2] в любой момент времени), и поэтому я действительно предпочел бы изменить n.

Спасибо за любую помощь!

С Уважением,

Майкл

2

Решение

Обычно поглощающее граничное условие проявляется в уравнениях движения. n[N] = n[N-1] = n[N-2]так можно вставить n[N]=n[N-2] а также n[N-1]=n[N-2] в уравнение для dndt[N-2],

Например, дискретный лапласиан Lx[i] = x[i+1]-2 x[i] +x[i-1] с поглощающими границами x[n]=x[n-1] можно записать как Lx[n-1] = x[n-2] - x[n-1], Уравнение для x[n] может быть опущено.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]