2 votes

Questions de base sur l'OOP en Julia

Je suis novice en matière d'OOP. Je lis de la documentation sur la façon de coder des simulations multiples dans julia. aquí . J'ai quelques questions concernant la première partie de la lecture ("Construire un problème") :

  1. Le document s'ouvre sur un exemple de constructeur : EnsembleProblem . Je pense que cela crée une simulation ODE avec des paramètres différents pour chaque appel au constructeur. Est-ce exact ?

  2. Le constructeur contient les lignes de code suivantes : prob::DEProblem y output_func = (sol,i) -> (sol,false) . Comment peut-on lire cela ? Je pense que le problème est une classe dans DEProblem avec une fonction output_func. Je ne sais pas exactement ce qui se trouve à gauche et à droite de la flèche.

  3. Une fonction est définie :

    function prob_func(prob,i,repeat) @. prob.u0 = randn()*prob.u0 prob end

Je pense qu'il s'agit simplement de modifier les conditions initiales, mais je ne comprends pas bien ce qui se passe dans chaque ligne de la fonction.

  1. Il mentionne que "les types de problèmes sont immuables, il utilise .=" -- je n'ai pas compris ce commentaire.

2voto

Przemyslaw Szufel Points 20872
  1. Il s'agit d'un constructeur pour la structure de données Julia struct . A titre d'exemple :

    julia> struct MyStruct a::Int b::Int end

    julia> function MyStruct(a) MyStruct(2a, 3a) end MyStruct

    julia> MyStruct(5) MyStruct(10, 15)

  2. Il s'agit du type de données d'une variable et d'une valeur par défaut. Par exemple, vous pourriez faire :

    julia> function MyStruct(a::Int=7;mult=(2,3)) MyStruct(amult[1], amult[2]) end MyStruct

    julia> MyStruct() MyStruct(14, 21)

    julia> MyStruct(3) MyStruct(6, 9)

    julia> MyStruct(3.4) ERROR: InexactError: Int64(6.8)

  3. Elle prend un vecteur ou un tableau prob et modifie tous les éléments de ce tableau. La fonction @. est une macro de vectorisation qui signifie "itérer sur tous les éléments". Recherchez "Julia dot operator" pour en savoir plus.

  4. Dans plusieurs langages de programmation, il est possible d'avoir une référence inmutable avec des valeurs mutables vers lesquelles elle pointe.

    julia> struct A x::Vector{Int} end

    julia> a=A([1,2,3,5,6]) A([1, 2, 3, 5, 6])

    julia> a.x[3:4] .= 1 2-element view(::Vector{Int64}, 3:4) with eltype Int64: 1 1

    julia> a.x = [4,5] ERROR: setfield!: immutable struct of type A cannot be changed

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X