Может быть, надо так lorenz!(du,u,p,t) = F(u) где F(u) - выражение функции R^3->R^3, которое предварительно надо упростить. Или я неправильно понял вопрос?
Вот вопрос про предварительное упрощение. Как стоит упрощать, не засоряя пространство лишними переменными? Или это в Julia не так критично? В смысле, что если уж по-настоящему заморачиваться с производительностью, то проще явно прописать упрощённое?
Символьные вычисления в Julia я особенно не использовал. Но ясно, что если нужна производительность, то сначала надо упростить
Чтобы не засорять пространство лишними символьными переменными можно все это обернуть в функцию (высшего порядка), которая будет упрощать символьное выражение и возвращать обычную числовую функцию. Таким образом, все символьные переменные будут локальными переменными этой функции, время жизни которых ограничено
На всякий случай. Определение lorenz!(du,u,p,t)=F(u), конечно, является ошибочным, потому, что функция lorenz! должна иметь побочный эффект: она должна изменять внешний массив du, а сейчас она этого не делает. Правильно было бы так function lorenz!(du,u,p,t) du .= F(u) end
Обсуждают сегодня