Юлия Ланге, пример дифференциальных уравнений - PullRequest
2 голосов
/ 23 марта 2020

Я попытался поиграться с этим примером в документации Джулии. Моя попытка состояла в том, чтобы разделить клетку на две части, каждая из которых содержит половину белка, поэтому я установил Theta = 0,5 Однако график выглядит следующим образом: enter image description here

Очевидно, что число клеток удваивается каждый раз, когда они достигают целевого количества белка, в то же время, поскольку они равны. Как я мог построить это? Я также не понимаю, почему число ячеек останавливается на 3 в случае ниже.

1 Ответ

5 голосов
/ 23 марта 2020

Постройте количество белка в каждой ячейке и подумайте о модели, которую вы создали. После первого деления обе ячейки имеют одинаковое значение. Так что в одно и то же время у вас случается пожар. «Максимум» (в зависимости от того, какой индекс ниже, поэтому 1) будет разделен, а 2 будет расти выше 1. Но теперь, когда u[2] > 1, условие поиска корня 1-maximum(u) никогда не достигнет нуля снова, и, следовательно, расщепления больше не произойдет. , Это означает, что у вас будет всего два разделения, то есть 3 ячейки.

Помните, что программы будут делать именно то, что вы им скажете. Я предполагаю, что вы имели в виду, в качестве вашего эффекта, разделение any ячеек, которые больше или равны 1. Если это affect!, что вы хотели, то вам нужно написать это:

function affect!(integrator)
  u = integrator.u
  idxs = findall(x->x>=1-eps(eltype(u)),u)
  resize!(integrator,length(u)+length(idxs))
  u[idxs] ./ 2
  u[end-idxs:end] = 0.5
  nothing
end

будет одним из способов сделать это, и, конечно, есть много других.

...