Я только что реализовал численное интегрирование для набора связанных 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.
Спасибо за любую помощь!
С Уважением,
Майкл
Обычно поглощающее граничное условие проявляется в уравнениях движения. 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]
может быть опущено.
Других решений пока нет …