Постройте количество белка в каждой ячейке и подумайте о модели, которую вы создали. После первого деления обе ячейки имеют одинаковое значение. Так что в одно и то же время у вас случается пожар. «Максимум» (в зависимости от того, какой индекс ниже, поэтому 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
будет одним из способов сделать это, и, конечно, есть много других.