Как убрать колебания в решении дифференциального уравнения, имеющего неопределенную форму, используя DifferentialEquations.jl - PullRequest
2 голосов
/ 10 апреля 2020

Я пытаюсь решить дифференциальные уравнения с неопределенными формами, и я играю с пакетом Julia и DifferentialEquations.jl, чтобы сделать это.

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

Вот код тестового примера, с которого я начал:

bondi(u,p,t) = -(2*k/t^2)*(1 - (2*a^2*t/k))/(1 - a^2/u)
u0 = 0.01
p = (1e4, 10)
k,a = p
tc = k/(2*a^2)
tspan = (tc/10, tc*5)
prob = ODEProblem(bondi,u0,tspan,p)

Аналитическое решение этой проблемы (известное как проблема потока Бонди в астрофизике) хорошо известно (даже для неопределенных случаев). ). Я заинтересован в неопределенных решениях, полученных из решателя.

Когда я решаю с помощью sol = solve(prob), я получаю колеблющееся решение, весьма отличающееся от гладкого аналитического решения, которое, как я знаю, существует (см. Рисунок в ссылке ниже ).

График u против t

Я ожидал встретить некоторые «проблемы», когда t приближается к 50 (в то время как переменная оси y (представляющая скорость), обозначенная u, будет подход 100), поскольку только тогда числитель (и знаменатель) будут вместе sh. Любые идеи, почему решения начинают колебаться?

Я также попытался с sol = solve(prob, alg_hints = [:stiff]) и получил следующее предупреждение:

Предупреждение: прервано. Нужны большие макситеры. @ DiffEqBase C: \ Users \ User.julia \ packages \ DiffEqBase \ 1yTcS \ src \ integrator_interface.jl: 329

Решение все еще колеблется (аналогично решениям, полученным без наложения жесткости).

Я что-то здесь не так делаю? Есть ли другой способ решения таких неопределенных уравнений с помощью пакета DifferentialEquations.jl?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...