work on ch.5

This commit is contained in:
Meik Hellmund 2023-05-13 16:54:43 +02:00
parent 70644d91bc
commit 842e43e771
4 changed files with 33 additions and 111 deletions

6
.gitignore vendored
View File

@ -13,3 +13,9 @@ chapters/*.ipynb
_extensions/julia/escfilter.sh _extensions/julia/escfilter.sh
_extensions/julia/escfilter2.py _extensions/julia/escfilter2.py
_extensions/julia/escfilter3.py _extensions/julia/escfilter3.py
site_libs/
fonts/atkinson*
fonts/quicksand*
fonts/ubuntu*
/.luarc.json

2
.quartoignore Normal file
View File

@ -0,0 +1,2 @@
Readme.md
makie.qmd

View File

@ -0,0 +1,4 @@
This 'Quarto Book'https://quarto.org/ about Julia Programming in German is online at https://www.math.uni-leipzig.de/~hellmund/juliabook/ https://www.math.uni-leipzig.de/~hellmund/juliabook/
It uses the `julia-color` Quarto extension https://gitea.math.uni-leipzig.de/hellmund/julia-color

View File

@ -1,4 +1,4 @@
# Arbeit mit Julia: Hilfe, REPL, Pakete, Introspection # Arbeit mit Julia: REPL, Pakete, Introspection
@sec-tab @sec-tab
@ -72,32 +72,38 @@ In einem Jupyter-Notebook sind die Modi sind als Einzeiler in einer eigenen Inpu
## Der Paketmanager ## Der Paketmanager
- Über 9000 Pakete, siehe [https://julialang.org/packages/](https://julialang.org/packages/) Wichtiger Teil des _Julia Ecosystems_ sind die zahlreichen Pakete, die Julia erweitern.
- Bevor sie mit `using Module` verwendet werden können, müssen sie heruntergeladen und installiert werden.
- Dazu dient der _package manager_ `Pkg` - Einige Pakete sind Teil jeder Julia-Installation und müssen nur mit einer `using Paketname`-Anweisung aktiviert werden.
- Man kann ihn auf zwei Arten verwenden: - Sie bilden die sogenannte _Standard Library_ und dazu gehören
- `LinearAlgebra`, `Statistics`, `SparseArrays`, `Printf`, `Pkg` und andere.
- Über 9000 Pakete sind offiziell registriert, siehe [https://julialang.org/packages/](https://julialang.org/packages/).
- Diese können mit wenigen Tastendrücken heruntergeladen und installiert werden.
- Dazu dient der _package manager_ `Pkg`.
- Man kann ihn auf zwei Arten verwenden:
- als normale Julia-Anweisungen, die auch in einer `.jl`-Programmdatei stehen können: - als normale Julia-Anweisungen, die auch in einer `.jl`-Programmdatei stehen können:
``` ```
using Pkg using Pkg
Pkg.add("TollesPaket") Pkg.add("PaketXY")
``` ```
- im speziellen pkg-Modus des Julia-REPLs: - im speziellen pkg-Modus des Julia-REPLs:
``` ```
] add TollesPaket ] add PaketXY
``` ```
- Anschließend kann das Paket mit `using PaketXY` verwendet werden.
- Man kann auch Pakete aus anderen Quellen und selbstgeschriebene Pakete installieren.
### Einige Funktionen des Paketmanagers ### Einige Funktionen des Paketmanagers
| Funktion | `pkg` - Mode | Erklärung | | Funktion | `pkg` - Mode | Erklärung |
|:------------------------|:----------------------|:----------------------------------------------------------| |:------------------------|:--------------------------| :-------------------------------------------------------|
| `Pkg.add("MyPack")` | `pkg> add MyPack` | add `MyPack.jl` to current environment | | `Pkg.add("MyPack")` | `pkg> add MyPack` | add `MyPack.jl` to current environment |
| `Pkg.rm("MyPack")` | `pkg> remove MyPack` | remove `MyPack.jl` from current environment | | `Pkg.rm("MyPack")` | `pkg> remove MyPack` | remove `MyPack.jl` from current environment |
| `Pkg.update()` | `pkg> update` | update packages in current environment | | `Pkg.update()` | `pkg> update` | update packages in current environment |
| `Pkg.activate("mydir")` | `pkg> activate mydir` | activate directory as current environment | | `Pkg.activate("mydir")` | `pkg> activate mydir` | activate directory as current environment |
| `Pkg.status()` | `pkg> status` | list packages | | `Pkg.status()` | `pkg> status` | list packages |
| `Pkg.instantiate()` | `pg> instantiate` | install all packages according to `Project.toml` |
### Installierte Pakete und Environments ### Installierte Pakete und Environments
@ -142,113 +148,17 @@ Danach können Sie mit `add` im Pkg-Modus auch Pakete installieren:
```{julia} ```{julia}
#| eval: false #| eval: false
] add TollesPaket ] add PaketXY
``` ```
Achtung! Das kann dauern! Viele Pakete haben komplexe Abhängigkeiten und lösen die Installation von weiteren Paketen aus. Viele Pakete werden beim Installieren vorkompiliert. Im REPL sieht man den Installationsfortschritt, im Jupyter-Notebook nicht. Achtung! Das kann dauern! Viele Pakete haben komplexe Abhängigkeiten und lösen die Installation von weiteren Paketen aus. Viele Pakete werden beim Installieren vorkompiliert. Im REPL sieht man den Installationsfortschritt, im Jupyter-Notebook leider nicht.
## Eingebaute Hilfe und Informationen
Mit `?` und der `Tab`-Taste kommt man oft weiter.
## Hilfe und praktische Tipps
----
### weitere Hilfe: `@which`, `fieldnames()`, `methods()`, `names()`, `pwd()`
```{julia} ## Der Julia JIT _(just in time)_ Compiler: Introspection
# Die Zuordnung zu einem Modul zeigt @which an:
@which(sqrt)
```
```{julia}
# Die Komponenten einer struct oder eines anderen zusammengesetzten Typs:
fieldnames(Rational)
```
```{julia}
fieldnames(Complex)
```
```{julia}
# alle Methoden einer Funktion
methods(sqrt)
```
```{julia}
# alle Methoden einer Funktion bei bestimmten Argumenttypen. Die Argumenttypen müssen als Tupel angegeben werden
methods(sqrt, (Number,)) # Komma nötig für 1-elementiges Tupel
```
```{julia}
# für einen Typ gibt methods() alle Konstruktoren aus
methods(Int64)
```
```{julia}
# names(Module) gibt alle von einem Modul exportierte Namen aus.
# genau wie auch
#
# ?Module
#
# funktioniert es erst, wenn das Modul mit 'using Module' geladen ist.
# Oft ist es besser, wenn die using-Anweisung in einer eigenen Zelle steht.
using Plots
```
```{julia}
names(Plots)
```
```{julia}
# Julia kürzt den interaktiven Output.
# ein explizites print() zeigt alles:
print(names(Plots))
```
```{julia}
# eine andere Möglichkeit der Ausgabe mit Überlänge in Jupyter
show(stdout, MIME("text/plain"), names(Plots))
```
```{julia}
# pwd() "print working directory" zeigt, in welchem Verzeichnis Julia gerade operiert.
#
# Wichtig für die Ein/Ausgabe mit Dateien, z.B. include()
pwd()
```
```{julia}
include("Jupyter.jl") # Datei mit Julia-Code einlesen und abarbeiten
```
## Der Julia JIT _(just in time)_ Compiler
Julia baut auf die Werkzeuge des _LLVM Compiler Infrastructure Projects_ auf. Julia baut auf die Werkzeuge des _LLVM Compiler Infrastructure Projects_ auf.