Численное моделирование ступенчатой ​​функции во времени в гидродинамической системе. (Рунге Кутта четвертого порядка)

Итак, я пытаюсь смоделировать гидродинамическую систему, которая вызывает внезапный «скачок» значения функции в определенное время. Система решается методом Рунге-Кутты четвертого порядка.

У меня есть гидродинамическая система, в которой фазовый переход моделируется внезапным увеличением давления, которое я моделирую с помощью функции тяжелой стороны. Проблема в том, что эта ступенчатая функция вносит большую жесткость.

Другими словами, после того, как температура станет меньше T, давление уменьшится с

п п + А

где А является дополнительным фактором, который внезапно повышает давление.

Мне было интересно, можно ли «аппроксимировать» ступенчатую функцию как линейную функцию в непрерывную функцию, чтобы уменьшить жесткость. Я думал умножить A на линейную функцию, которая линейно возрастает со временем, пока линейная функция не достигнет 1.

Хотя экспоненциальные и не линейные, гиперболические тангенсы могут работать довольно хорошо в качестве довольно упрощенной модели ступенчатой ​​функции.
Да. Я пробовал это раньше, хе-хе. Но дело в том, что решение кажется устойчивым, пока я не выберу очень гладкую функцию, что меня не устраивает, потому что временной масштаб фазового перехода становится слишком большим. В противном случае на меньших временных масштабах решение становится неустойчивым в тот момент, когда наклон кривой тангенса становится самым крутым.
Вот почему я думал об использовании линейной функции, потому что тогда кривая имеет постоянный наклон. Поэтому у меня нет проблемы, когда решение «устойчиво» в менее крутых частях танга только для того, чтобы стать нестабильным в более крутой части.
Насколько я помню, «жесткость» — это свойство уравнений, а не свойство стимулов. Ваш решатель, вероятно, просто стабилен на границе в любое время, чего вы не заметите, потому что числовые ошибки не создают достаточного количества шума, чтобы сделать вашу жизнь несчастной. Добавьте к задаче шум и посмотрите, что делает с ним ваш решатель в частотной области. Если это не выглядит хорошо, то попытка решить проблему с помощью большого прыжка не принесет никакой пользы.

Ответы (2)

Не делай так.

У вас есть то, что называется «точкой изменения».

Запустите его до того момента, когда должно произойти изменение. Затем остановите решатель. Выполните мгновенное изменение состояния. Затем перезапустите решатель.

Так много глупостей происходит, когда люди пытаются запускать решатели ОДУ с разрывами.

Спасибо. Где я могу подробнее прочитать об этой «точке обмена».?
Это не глубокое понятие. Это постоянно происходит в фармакометрическом моделировании, как здесь . Вот что-то, что может быть немного много. По сути, любая фармакометрическая модель, выраженная в виде набора дифференциальных уравнений, должна получать дозы в определенные моменты времени. Таким образом, решатель ОДУ доходит до этого времени и останавливается. Затем дается доза, которая, например, увеличивает количество препарата в плазме крови. Затем снова запускается решатель ОДУ, вплоть до времени следующего события, как наблюдение.
Это хороший совет. Хотя не существует такого понятия, как «мгновенное», вносимый вами разрыв может не стоить решать/исследовать. Если это так, вам нужно сгладить его до интересующей шкалы (немного похоже на фильтрацию входного сигнала АЦП, чтобы оставаться ниже уровня Найквиста). Но если вы не заинтересованы, вам следует избегать решения этой точки.
@Floris: Модели, которые мы делаем, всегда идеализированы на каком-то уровне — мы принимаем это как данность. Поскольку мы пытаемся подогнать модель под довольно скудные данные, мы должны сделать модель достаточно простой, чтобы данные могли что-то сказать о ней, поэтому точный механизм для вещей, которые почти не требуют времени, является педантичным.
@MikeDunlavey Я не согласен, но это зависит от ситуации. Иногда вы хотите изучить детали перехода, но если вы начинаете с разрозненных данных, я согласен, что глупо проводить чрезмерный анализ.

4-й порядок RK - хороший численный подход, но он точен только до членов четвертого порядка в разложении Тейлора вашего ряда. Пока производные функции пятого (и выше) порядка малы, все в порядке. Но когда вы вводите ступенчатую функцию или даже кусочно-линейную аппроксимацию, это предположение нарушается.

Я бы рекомендовал, как предложил Кайл Канос в своем комментарии, найти подходящую плавную функцию (гиперболический тангенс хорошо работает при правильном масштабировании), чтобы превратить ваш внезапный переход в плавный. Если это не приводит к стабильному решению, вы делаете что-то не так (трудно догадаться, что, но оно должно быть стабильным при уменьшении размера шага).

Кроме того, даже фазовые переходы, как правило, происходят не «все сразу», а несколько постепенно, поэтому плавно меняющаяся функция не так уж плоха для использования в вашей симуляции.

Спасибо! Думаю, я продолжу тестирование tanh и посмотрю, что я делаю неправильно.
Ваш временной шаг должен быть коротким по сравнению с диапазоном, в котором изменяются производные. Как проявляется нестабильность?
Я думаю, что у меня были очень длинные временные шкалы, потому что я масштабировал гиперболический танх так, чтобы он менялся очень медленно, а не уменьшал временной шаг. Сейчас я уменьшу временной шаг. Спасибо!
@mathdummy дайте нам знать, как это работает!
Это сработало! Как бы. Но теперь у меня действительно сильный градиент давления между той частью жидкости, в которой произошел фазовый переход, и той частью, в которой его не было, и он на самом деле не «затухает». Я подозреваю, что это потому, что мне нужна более мелкая сетка для разрешения градиента. Так что я буду продолжать грузоперевозки. Но кажется, что добавление гиперболической функции в целом работает для такого рода проблем.