Size: a a a

Язык программирования Julia / Julia programming language

2020 January 25

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
А у другого M
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
Как написать функцию, которая принимает два tuple и делает из них третий, при этом type stable
О, я тоже об этом думал.
Непонятно как, если честно, кроме макросов.

Ну или подсказку в return выводить
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Как мне сказать компилятору, что тип результата 100% N+M
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
return res::NTuple{N+M, int}
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
А по-моему это не поможет
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Это точно работает, но все равно хуже по скорости чем могло бы быть.
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Я думаю, что он просто в конце проверит, что тип того, что он сделал, совпадает с тем, что указано
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Ну да.
Но после этого он будет это учитывать и не будет type instability propagation
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
То есть он согласится с тем, что ты ему сказал и дальше все будет рассчитывать исходя из этого.
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Да
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Это пресечет на корню, но как вообще изгнать )
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
А можно MWE того, как эта функция выглядит?
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
О, не знаю что это, но выглядит как какая-то чёрная магия, которую можно использовать в особых случаях.

https://github.com/RelationalAI-oss/Blobs.jl/blob/master/README.md
источник
2020 January 26

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
По поводу того, как писать интерфейсы (вчера эта тема поднималась)

https://discourse.julialang.org/t/design-pattern-for-correctly-overwriting-abstract-methods-interface-methods/33778/5?u=skoffer

Рекомендуют не использовать throw, а всё-таки писать документацию
источник
2020 January 28

RS

Roman Samarev in Язык программирования Julia / Julia programming language
https://www.youtube.com/watch?v=cw_1D7UWsW0

немного экзотики. Свежее. Главный вопрос - целесообразность подобного применения
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Ролик отсюда: https://www.faes.de/ad-oculos/
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
источник
2020 January 30

FO

FORTRAN ONE LOVE in Язык программирования Julia / Julia programming language
А как бы научить функцию differentiate из пакета Calculus искать выражения из окружения Julia?
Например:
using Calculus
K_sigma =:(energy/rho^(4/3))
a_sigma = :(mu * sqrt(K_sigma(energy, rho) / pi) / (3*rho^(1/3)))
differentiate(a_sigma, :rho)

Ошибки при этом такие:
ERROR: Derivative of function K_sigma not supported

При этом внутрь библиотеки свои функции вставлять не хочется
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Библиотека выглядит немного outdated

Дёшево и сердито - использовать интерполяцию

K_sigma =:(energy/rho^(4/3))
a_sigma = :(mu * sqrt($K_sigma / pi) / (3*rho^(1/3)))
differentiate(a_sigma, :rho)


Но вообще, выглядит так, что лучше пользоваться библиотеками типа ForwardDiff
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
У calculus похоже проблема ещё в том, что он не умеет функции многих аргументов дифференцировать.

То есть можно симулировать до какой-то степени нужное поведение, но выглядит кривовато

function Calculus.differentiate(::SymbolParameter{:K_sigma_rho}, args, wrt)
   x = args[1]
   xp = differentiate(x, wrt)

   if xp != 0
       return @sexpr(xp*(-((4 / 3) * 1 * x ^ (4 / 3 - 1)) * :energy) / (x ^ (4 / 3)) ^ 2)
   else
       return 0
   end
end

a_sigma = :(mu * sqrt(K_sigma_rho(rho) / pi) / (3*rho^(1/3)))
differentiate(a_sigma, :rho)


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