IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Présentation de la bibliothèque Julia Unitful.jl pour la gestion des unités de mesure
Un billet de blog de Daniel Hagnoul

Le , par danielhagnoul

0PARTAGES

  • Le 2021-03-12, j'utilise Julia_1.6.0-rc1 sur VS_Code_1.54.2. Ordinateur : W10 Pro, i9-10900F.
  • Préalables, mes billets précédents sur Julia sont supposés connus et assimilés.


Le langage Julia étant basé sur les types, l'idée d'écrire un paquet gérant les types du système métrique allait de soi. La liste des unités disponibles dans Unitful.

Nous testons Unitful en Cinématique, Circuit électrique série simple et Thermique.

Si Unitful vous renvoie une erreur, soyez certain qu'il y a une erreur dans votre code ou dans votre choix des unités. Le choix de l'unité correcte n'est pas toujours une évidence, ainsi le cas du coefficient d'expansion (α = 1.2e-5u"1/K" dans le chapitre Thermique. Le Kelvin est une unité de référence (@refunit K "K" Kelvin) et on n'écrit pas °K mais K.

Unitful n'est pas seul, il y a des paquets spécialisés.

Le reste de ce billet est dans un notebook Pluto, code ci-dessous. Nous aurons besoin des paquets Pluto v0.12.21 et Unitful v1.6.0.

Si vous ne connaissez pas Pluto, voir "Julia. Notebook Pluto sur Chrome avec VSCode".

Voici un lien vers la page HTML statique.

Les codes Julia utilisent souvent de manière intensive les caractères Unicode.

Rappel

&#937;  \Omega<tab>
&#956;  \mu<tab>
&#916;  \Delta<tab>
&#945;  \alpha<tab>
Fichier C:\Users\User\Documents\Julia\mes_notebooks\unitful_test.jl

DVP ne gérant toujours pas correctement les caractères Unicode Julia, je vous donne le code dans un bloc PRE.
### A Pluto.jl notebook ###
# v0.12.21

using Markdown
using InteractiveUtils

# &#9556;&#9552;&#9569; edc89e80-7e55-11eb-1a83-f5b701337ad5
begin
	using PlutoUI, Unitful
	
	html"""<style>
	html {
		background-color: rgba(237, 196, 33, .55);
	}
	main {
		max-width: 1200px;
	}
	</style>"""
end

# &#9556;&#9552;&#9569; 707796a0-7ff6-11eb-03f9-239bf8bbd81b
md"### Tests du paquet Unitful
Ce paquet permet d'utiliser le système international d'unités"

# &#9556;&#9552;&#9569; c2e42040-80ad-11eb-3452-cb40c524090e
md"""###### Documentations

+ [Unitful] (https://painterqubits.github.io/Unitful.jl/stable/)
+ [Unitful.jl/src/pkgdefaults.jl] (https://github.com/PainterQubits/Unitful.jl/blob/master/src/pkgdefaults.jl)
"""

# &#9556;&#9552;&#9569; 75748d20-8000-11eb-19f2-930bd7d3e58a
md"Daniel Hagnoul 2021-03-08T12:20:42.048+01:00"

# &#9556;&#9552;&#9569; cf9798c0-8252-11eb-26b8-d1e0ef8abae3
md"Si Unitful vous renvoie une erreur, soyez certain qu'il y a une erreur dans votre code ou dans votre choix des unités. Le choix de l'unité correcte n'est pas toujours une évidence, ainsi le cas du coefficient d'expansion (`&#945; = 1.2e-5u\"1/K\"`) dans le chapitre Thermique.

Le Kelvin est une unité de référence (`@refunit  K \"K\" Kelvin`) et on n'écrit pas °K mais K."

# &#9556;&#9552;&#9569; f71d4fe2-8250-11eb-0f3e-b595971fccf4
md"#### Cinématique"

# &#9556;&#9552;&#9569; 04ec02b0-8251-11eb-063e-d77434ad938d
md"""| variables | équations |
| :---- | :---- |
| d distance en m | d = vi*t + 0.5*a*t^2 |
| v vitesse en m/s | d = (Vi^2 * t)/2 |
| t temps en s | Vf = Vi + at |
| a accélération en m/s^2 | vf^2 = vi^2 + 2*a*d |
"""

# &#9556;&#9552;&#9569; d1f4df20-8251-11eb-2387-07cb4cb2b13c
md"###### Calculer la distance de freinage"

# &#9556;&#9552;&#9569; 17fa0900-8257-11eb-18f4-9d7358b5986e
md"""
$(Resource("http://www.physicsclassroom.com/Class/1DKin/U1L6b1.gif", :width => 300))
"""

# &#9556;&#9552;&#9569; f4ec97c0-8251-11eb-3da8-d7cc91349851
let
	vi = 30u"m/s" # n'écrivez jamais u"ms^-1"
	vf = 0u"m/s"
	a = -8u"m/s^2"

	# on utilise vi^2 = vi^2 + 2ad
	d = (vf^2 - vi^2) / (2a)

	Print(d)
end

# &#9556;&#9552;&#9569; 25592360-8252-11eb-1199-bbfa4d87e9c8
md"###### Calculer la distance parcourue"

# &#9556;&#9552;&#9569; 40a93a10-8257-11eb-062b-5b47eac4941d
md"""
$(Resource("http://www.physicsclassroom.com/Class/1DKin/U1L6b3.gif", :width => 300))
"""

# &#9556;&#9552;&#9569; 35e54880-8252-11eb-018c-a7bc3157a163
let
	t = 4.1u"s"
	vi = 0u"m/s"
	a = 6u"m/s^2"

	# on utilise d = vi*t + 0.5*a*t^2
	d = vi*t + 0.5*a*t^2

	Print(d)
end

# &#9556;&#9552;&#9569; a5897a40-80ad-11eb-3f47-958f3a259f62
md"#### Circuit électrique série simple"

# &#9556;&#9552;&#9569; d1f38d50-8256-11eb-1920-012aa9456465
md"""
$(Resource("https://www.allaboutcircuits.com/uploads/articles/series-multiple-resistors-circuit.jpg", :width => 400))
"""

# &#9556;&#9552;&#9569; b6593810-80ad-11eb-1e81-d97f709260ef
let
	#=
	De https://github.com/PainterQubits/Unitful.jl/blob/master/src/pkgdefaults.jl

	@unit V  "V"    Volt    1W/A      true
	@unit &#937;  "&#937;"    Ohm     1V/A      true

	@refunit  A     "A"     Ampere    &#119816;   true
	=#

	E = 9u"V"
	R1 = 3u"k&#937;"
	R2 = 10u"k&#937;"
	R3 = 5u"k&#937;"
	Rt = R1 + R2 + R3
	I = uconvert(u"&#956;A", E / Rt)

	#=
	Maintenant que nous connaissons la quantité de courant à travers chaque résistance, 
	nous pouvons utiliser la loi d'Ohm pour déterminer la chute de tension à travers 
	chacune d'elles.
	=#
	
	Er1 = uconvert(u"V", I * R1)
	Er2 = uconvert(u"V", I * R2)
	Er3 = uconvert(u"V", I * R3)

	with_terminal() do
		@show Rt
		@show I
		@show Er1
		@show Er2
		@show Er3
	end
end

# &#9556;&#9552;&#9569; 8085acc0-8254-11eb-05eb-319e60ef70c6
md"### Thermique"

# &#9556;&#9552;&#9569; a33315f0-8254-11eb-277b-390f6f5fdaca
md"""| variables | équations |
| :---- | :---- |
| L0 la longueur à l'origine en m | &#916;L = &#945; * L0 * &#916;T |
| &#916;L la différence de longueur en m | L = L0 * ( 1 + &#945; * &#916;T) |
| &#916;T la différence de température en °C |  |
| &#945; le coéfficient d'expansion Iron 1.2e-5 en 1/k |  |
"""

# &#9556;&#9552;&#9569; 87c0a600-8256-11eb-2bf6-ad3f53aafafd
md"""
$(Resource("https://x-engineer.org/wp-content/uploads/2017/12/Suspension-bridge.jpg?cdbae2&cdbae2", :width => 400))
"""

# &#9556;&#9552;&#9569; 8a1619a0-8254-11eb-0c8a-abfd8ff47788
let
	L0 = 1500u"m"
	T0 = -20u"°C"
	Tf = 40u"°C"
	&#916;T = Tf - T0
	&#945; = 1.2e-5u"1/K"
	&#916;L = &#945; * L0 * &#916;T

	with_terminal() do
		@show (&#916;L, &#916;L + L0)
	end
end

# &#9556;&#9552;&#9569; Cell order:
# &#9567;&#9472;edc89e80-7e55-11eb-1a83-f5b701337ad5
# &#9567;&#9472;707796a0-7ff6-11eb-03f9-239bf8bbd81b
# &#9567;&#9472;c2e42040-80ad-11eb-3452-cb40c524090e
# &#9567;&#9472;75748d20-8000-11eb-19f2-930bd7d3e58a
# &#9567;&#9472;cf9798c0-8252-11eb-26b8-d1e0ef8abae3
# &#9567;&#9472;f71d4fe2-8250-11eb-0f3e-b595971fccf4
# &#9567;&#9472;04ec02b0-8251-11eb-063e-d77434ad938d
# &#9567;&#9472;d1f4df20-8251-11eb-2387-07cb4cb2b13c
# &#9567;&#9472;17fa0900-8257-11eb-18f4-9d7358b5986e
# &#9568;&#9552;f4ec97c0-8251-11eb-3da8-d7cc91349851
# &#9567;&#9472;25592360-8252-11eb-1199-bbfa4d87e9c8
# &#9567;&#9472;40a93a10-8257-11eb-062b-5b47eac4941d
# &#9568;&#9552;35e54880-8252-11eb-018c-a7bc3157a163
# &#9567;&#9472;a5897a40-80ad-11eb-3f47-958f3a259f62
# &#9567;&#9472;d1f38d50-8256-11eb-1920-012aa9456465
# &#9568;&#9552;b6593810-80ad-11eb-1e81-d97f709260ef
# &#9567;&#9472;8085acc0-8254-11eb-05eb-319e60ef70c6
# &#9567;&#9472;a33315f0-8254-11eb-277b-390f6f5fdaca
# &#9567;&#9472;87c0a600-8256-11eb-2bf6-ad3f53aafafd
# &#9568;&#9552;8a1619a0-8254-11eb-0c8a-abfd8ff47788
Licence Creative Commons Attribution 2.0 Belgique

Une erreur dans cette actualité ? Signalez-le nous !