Неподдерживаемое объявление 'const' для локальной переменной (response_network в Julia) - PullRequest
0 голосов
/ 17 декабря 2018

Я новичок в Julia (версия 1.0.2) и в настоящее время пробую @reaction_network из пакета DiffEqBiological (также текущая версия, я не могу найти номер версии здесь):

tspan = (0.0, 50.0);
y0 = [100.0 50.0 0.0 0.0] #[substrate enzyme complex product]
S, E = y0[1], y0[2]
for r in 0.1:0.1:1.0
    println("Creating Michaelis-Menten reaction model...")
    r1, r2, r3 = r, r, r;
    michaelismenten = @reaction_network rType begin
        r1, S + E ⟶ C
        r2, C ⟶ S + E
        r3, C ⟶ P + E
    end

    y = ODEProblem(michaelismenten, y0, tspan)
    sol = solve(y, CVODE_BDF(), reltol=1e-8, abstol=1e-8)
end

Когда я пытаюсь скомпилировать это, я получаю синтаксическую ошибку: unsupported 'const' declaration on local variable around C:\Users\...\.julia\packages\DiffEqBiological\nujlA\src\reaction_network.jl:447.Я очень старался найти ошибку, и, возможно, мои знания слишком низкие, чтобы на самом деле понимать похожие вопросы, когда я пробовал ответы, но все равно получал то же сообщение об ошибке.Я попробовал обычный

r = 0.1
michaelismenten = @reaction_network rType begin
            r, S + E ⟶ C
            r, C ⟶ S + E
            r, C ⟶ P + E
        end
y = ODEProblem(michaelismenten, y0, tspan)
sol = solve(y, CVODE_BDF(), reltol=1e-8, abstol=1e-8)

, и это прекрасно работает.Как только я добавляю цикл for для изменения моей скорости реакции, я получаю эту ошибку, означающую, что этот код

for i = 1:10
    r = i/10 # here I thought that Julia maybe did not like the 0.1:0.1:1.0 from above
    michaelismenten = @reaction_network rType begin
                    r, S + E ⟶ C
                    r, C ⟶ S + E
                    r, C ⟶ P + E
                end
end

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

anim = @animate for r = 0.1:0.1:1.0
     # create michaelismenten and solve in this for-loop before plotting (see above)
     plot(sol)
end
gif(anim, "$S_$E_RRE.gif", fps = 15)

Я надеюсь, что кто-то может помочь мне найти решение для моей проблемы.И, пожалуйста, помогите мне сделать мой заданный вопрос более четким с форматированием.

Кратко суммируя комментарии:

  • объявление r глобальным неработает и выдает ту же ошибку
  • , оборачивая сеть реакции michaelismenten в функцию с r в качестве ввода, выдает ту же ошибку неподдерживаемого объявления 'const' для локальной переменной

1 Ответ

0 голосов
/ 17 декабря 2018

Я немного боролся, но этот код теперь работает (для тех, кто заинтересован в решении;)).Спасибо, zundertj, за вашу помощь!Вы вызвали некоторые идеи в моем мозгу, которые привели к этому решению!

using Plots
using DifferentialEquations
using Distributions
using DiffEqBiological

function solveRRE(michaelismenten, y0, tspan, p)
    # create and solve problem
    println("Creating ODEProblem...")
    y = ODEProblem(michaelismenten, y0, tspan, p)
    println("Solving Reaction Rate Equation...")
    sol = solve(y, CVODE_BDF(), reltol=1e-8, abstol=1e-8)
    return sol
end

tspan = (0.0, 50.0);
y0 = [100.0 50.0 0.0 0.0] #[substrate enzyme complex product]
S, E = y0[1], y0[2]

michaelismenten = @reaction_network rType begin
    r, S + E ⟶ C
    r, C ⟶ S + E
    r, C ⟶ P + E
end r
anim = @animate for i in 0.1:0.1:1.0
    p = i
    sol = solveRRE(michaelismenten, y0, tspan, p)
    plot(sol)
end
gif(anim, "RRE.gif", fps = 15)

Другая возможная ошибка - это то, что ffmpeg не установлен в Windows / Linux.Для дальнейших инструкций по этому мне очень помог этот сайт: https://video.stackexchange.com/questions/20495/how-do-i-set-up-and-use-ffmpeg-in-windows

Может кто-нибудь подсказать, как закрыть эту тему как решенную?Заранее спасибо!

...