further work on translation

This commit is contained in:
2026-03-02 14:43:14 +01:00
parent 457873a31b
commit c6609d15f5
12 changed files with 254 additions and 110 deletions

2
.gitignore vendored
View File

@@ -32,3 +32,5 @@ xelatex.py
nb/*.qmd nb/*.qmd
nb/*.ipynb nb/*.ipynb
.cache/ .cache/
**/*.quarto_ipynb

View File

@@ -4,15 +4,15 @@ project:
- fonts/ - fonts/
- images/ - images/
lang: de lang: en
language: #language:
title-block-published: "Updated" # title-block-published: "Updated"
title-block-author-single: "Autor" # title-block-author-single: "Autor"
toc-title-document: "Auf dieser Seite" # toc-title-document: "Auf dieser Seite"
book: book:
title: "Julia für Numerik" title: "Julia for Numerical Analysis"
subtitle: "Einführung in die wissenschaftliche Programmierung" subtitle: "Introduction to Scientific Computing"
author: "Meik Hellmund" author: "Meik Hellmund"
site-url: "https://www.math.uni-leipzig.de/~hellmund/juliabook" site-url: "https://www.math.uni-leipzig.de/~hellmund/juliabook"
favicon: "images/favicon-32x32.png" favicon: "images/favicon-32x32.png"
@@ -23,7 +23,7 @@ book:
- icon: github - icon: github
href: https://gitea.math.uni-leipzig.de/hellmund/JuliaKurs23 href: https://gitea.math.uni-leipzig.de/hellmund/JuliaKurs23
- icon: download - icon: download
href: "Julia-f%C3%BCr-Numerik.pdf" href: "Julia-for-Numerical-Analysis.pdf"
search: true search: true
@@ -56,7 +56,7 @@ book:
- chapters/10_Strings.qmd - chapters/10_Strings.qmd
- chapters/13_IO.qmd - chapters/13_IO.qmd
- chapters/14_Plot.qmd - chapters/14_Plot.qmd
# - chapters/makie.qmd
format: format:
@@ -82,12 +82,32 @@ format:
cap-location: bottom cap-location: bottom
html-math-method: mathjax html-math-method: mathjax
julia-color-pdf: # julia-color-pdf:
pdf-engine: xelatex # pdf-engine: xelatex
# papersize: a4
# documentclass: scrreprt
# classoption: [notitlepage,DIV=16,BCOR=5mm,10pt]
# toc: false
# number-depth: 2
# fig-cap-location: bottom
# fig-pos: H
# tbl-cap-location: bottom
# hyperrefoptions:
# - linktoc=all
# colorlinks: true
# linkcolor: "blue"
# keep-tex: true
# keep-ipynb: true
# keep-md: true
# code-block-bg: "#e0e0e0"
# code-block-border-left: "#e0e0e0"
# code-overflow: wrap
# include-in-header:
# - file: macros.tex
julia-color-typst:
papersize: a4 papersize: a4
documentclass: scrreprt toc: true
classoption: [notitlepage,DIV=16,BCOR=5mm,10pt]
toc: false
number-depth: 2 number-depth: 2
fig-cap-location: bottom fig-cap-location: bottom
fig-pos: H fig-pos: H
@@ -95,15 +115,11 @@ format:
hyperrefoptions: hyperrefoptions:
- linktoc=all - linktoc=all
colorlinks: true colorlinks: true
linkcolor: "blue" linkcolor: #0000FF
keep-tex: true keep-typ: true
keep-ipynb: true
keep-md: true
code-block-bg: "#e0e0e0"
code-block-border-left: "#e0e0e0"
code-overflow: wrap
include-in-header: include-in-header:
- file: macros.tex - file: macros.typ
latex-auto-install: false latex-auto-install: false
@@ -122,8 +138,6 @@ keep-ipynb: true
keep-tex: true keep-tex: true
keep-md: true keep-md: true
jupyter: julia-1.10
filters: filters:
- code-visibility - code-visibility
- latex-environment - latex-environment

View File

@@ -93,14 +93,14 @@ A + 4I
To be able to study questions such as conditioning or convergence of an algorithm, we need a metric. For linear spaces, it is appropriate to define the metric via a norm: To be able to study questions such as conditioning or convergence of an algorithm, we need a metric. For linear spaces, it is appropriate to define the metric via a norm:
$$ $$
d(x,y) := ||x-y|| d(x,y) := \lVert x-y\rVert
$$ $$
### $p$-Norms ### $p$-Norms
A simple class of norms in $^n$ are the $p$-norms A simple class of norms in $^n$ are the $p$-norms
$$ $$
||\mathbf{x}||_p = \left(\sum |x_i|^p\right)^\frac{1}{p}, \lVert \mathbf{x} \rVert_p = \left(\sum |x_i|^p\right)^\frac{1}{p},
$$ $$
which generalize the Euclidean norm $p=2$. which generalize the Euclidean norm $p=2$.
@@ -110,13 +110,13 @@ which generalize the Euclidean norm $p=2$.
## The Max-Norm $p=\infty$ ## The Max-Norm $p=\infty$
Let $x_{\text{max}}$ be the _largest in absolute value_ component of $\mathbf{x}\in ^n$. Then always Let $x_{\text{max}}$ be the _largest in absolute value_ component of $\mathbf{x}\in ^n$. Then always
$$ |x_{\text{max}}| \le ||\mathbf{x}||_p \le n^\frac{1}{p} |x_{\text{max}}| $$ \lvert x_{\text{max}}\rvert \le \lVert\mathbf{x}\rVert_p \le n^\frac{1}{p} \lvert x_{\text{max}}\rvert
$$ $$
(Consider a vector whose components are all equal to $x_{\text{max}}$ respectively a vector whose components are all equal to zero except $x_{\text{max}}$.) (Consider a vector whose components are all equal to $x_{\text{max}}$ respectively a vector whose components are all equal to zero except $x_{\text{max}}$.)
Thus follows Thus follows
$$ $$
\lim_{p \rightarrow \infty} ||\mathbf{x}||_p = |x_{\text{max}}| =: ||\mathbf{x}||_\infty. \lim_{p \rightarrow \infty} \lVert\mathbf{x}\rVert_p = \lvert x_{\text{max}}\rvert =: \lVert\mathbf{x}\rVert_\infty.
$$ $$
::: :::
@@ -132,7 +132,7 @@ w = [-1, 2, 33.2]
- If the 2nd argument `p` is missing, `p=2` is set. - If the 2nd argument `p` is missing, `p=2` is set.
- The 2nd argument can also be `Inf` (i.e., $+\infty$). - The 2nd argument can also be `Inf` (i.e., $+\infty$).
- The 1st argument can be any container full of numbers. The sum $\sum |x_i|^p$ extends over *all* elements of the container. - The 1st argument can be any container full of numbers. The sum $\sum \lvert x_i\rvert^p$ extends over *all* elements of the container.
- Thus, for a matrix `norm(A)` is equal to the _Frobenius norm_ of the matrix `A`. - Thus, for a matrix `norm(A)` is equal to the _Frobenius norm_ of the matrix `A`.
```{julia} ```{julia}
@@ -145,7 +145,7 @@ norm(A) # Frobenius norm
Since norms are homogeneous under multiplication with scalars, Since norms are homogeneous under multiplication with scalars,
$||\lambda \mathbf{x}|| = |\lambda|\cdot||\mathbf{x}||$, they are completely determined by the specification of the unit ball. Subadditivity of the norm (triangle inequality) is equivalent to the convexity of the unit ball $\lVert\lambda \mathbf{x}\rVert = |\lambda|\cdot\lVert\mathbf{x}\rVert$, they are completely determined by the specification of the unit ball. Subadditivity of the norm (triangle inequality) is equivalent to the convexity of the unit ball
(code visible by clicking). (code visible by clicking).
```{julia} ```{julia}
#| code-fold: true #| code-fold: true
@@ -163,7 +163,7 @@ for p ∈ (0.8, 1, 1.5, 2, 3.001, 1000)
end end
fig1 fig1
``` ```
As one can see, $p\ge 1$ must hold so that the unit ball is convex and $||.||_p$ is a norm. As one can see, $p\ge 1$ must hold so that the unit ball is convex and $\lVert.\rVert_p$ is a norm.
However, the Julia function `norm(v, p)` returns a result for arbitrary parameters `p`. However, the Julia function `norm(v, p)` returns a result for arbitrary parameters `p`.
@@ -181,7 +181,7 @@ Due to the homogeneity of the norm under multiplication with scalars, it is suff
Let $V$ be a vector space with dimension $0<n<\infty$ and Let $V$ be a vector space with dimension $0<n<\infty$ and
$A$ an $n\times n$-matrix. Then $A$ an $n\times n$-matrix. Then
$$ $$
||A||_p = \max_{||\mathbf{v}||_p=1} ||A\mathbf{v}||_p \lVert A\rVert_p = \max_{\lVert\mathbf{v}\rVert_p=1} \lVert A\mathbf{v}\rVert_p
$$ $$
::: :::
@@ -214,16 +214,10 @@ CairoMakie.activate!(type = "svg")
```{julia} ```{julia}
#| code-fold: true #| code-fold: true
#| fig-cap: "Image of the unit ball under $v \\mapsto Av$ with $||A||\\approx 2.088$" #| fig-cap: "Image of the unit ball under $v \\mapsto Av$ with $\\lVert A\\rVert\\approx 2.088$"
using CairoMakie using CairoMakie
# Makie bug https://github.com/MakieOrg/Makie.jl/issues/3255
# Workaround https://github.com/MakieOrg/Makie.jl/issues/2607#issuecomment-1385816645
tri = BezierPath([
MoveTo(Point2f(-0.5, -1)), LineTo(0, 0), LineTo(0.5, -1), ClosePath()
])
A = [ 0 1 A = [ 0 1
1.2 1.5 ] 1.2 1.5 ]
@@ -241,14 +235,14 @@ Auv = A * [u,v]
fig2 = Figure(size=(800, 400)) fig2 = Figure(size=(800, 400))
lines(fig2[1, 1], xs, ys, color=t, linewidth=5, colormap=:hsv, axis=(; aspect = 1, limits=(-2,2, -2,2), lines(fig2[1, 1], xs, ys, color=t, linewidth=5, colormap=:hsv, axis=(; aspect = 1, limits=(-2,2, -2,2),
title=L"$\mathbf{v}$", titlesize=30)) title=L"$\mathbf{v}$", titlesize=30))
arrows!(fig2[1,1], x, y, u, v, arrowsize=10, arrowhead=tri, colormap=:hsv, linecolor=range(0,11), linewidth=3) arrows2d!(fig2[1,1], x, y, u, v, tipwidth=10, colormap=:hsv, shaftcolor=range(0,11), shaftwidth=3)
Legend(fig2[1,2], MarkerElement[], String[], L"⟹", width=40, height=30, titlesize=30, framevisible=false) Legend(fig2[1,2], MarkerElement[], String[], L"⟹", width=40, height=30, titlesize=30, framevisible=false)
lines(fig2[1,3], Axys[1], Axys[2], color=t, linewidth=5, colormap=:hsv, axis=(; aspect=1, limits=(-2,2, -2,2), lines(fig2[1,3], Axys[1], Axys[2], color=t, linewidth=5, colormap=:hsv, axis=(; aspect=1, limits=(-2,2, -2,2),
title=L"$A\mathbf{v}$", titlesize=30)) title=L"$A\mathbf{v}$", titlesize=30))
arrows!(fig2[1,3], x, y, Auv[1], Auv[2], arrowsize=10, arrowhead=tri, colormap=:hsv, linecolor=range(0,11), arrows2d!(fig2[1,3], x, y, Auv[1], Auv[2], tipwidth=10, colormap=:hsv, shaftcolor=range(0,11),
linewidth=3) shaftwidth=3)
fig2 fig2
``` ```
@@ -257,7 +251,7 @@ fig2
For p = 1, p = 2 (default) or p = Inf, `cond(A,p)` returns the condition number in the $p$-norm For p = 1, p = 2 (default) or p = Inf, `cond(A,p)` returns the condition number in the $p$-norm
$$ $$
\text{cond}_p(A) = ||A||_p \cdot ||A^{-1}||_p \text{cond}_p(A) = \lVert A\rVert_p \cdot \lVert A^{-1}\rVert_p
$$ $$
```{julia} ```{julia}
@@ -269,7 +263,7 @@ $$
Basic tasks of numerical linear algebra: Basic tasks of numerical linear algebra:
- Solve a system of linear equations $A\mathbf{x} = \mathbf{b}$. - Solve a system of linear equations $A\mathbf{x} = \mathbf{b}$.
- If no solution exists, find the best approximation, i.e., the vector $\mathbf{x}$ that minimizes $||A\mathbf{x} - \mathbf{b}||$. - If no solution exists, find the best approximation, i.e., the vector $\mathbf{x}$ that minimizes $\lVert A\mathbf{x} - \mathbf{b}\rVert$.
- Find eigenvalues and eigenvectors $A\mathbf{x} = \lambda \mathbf{x}$ of $A$. - Find eigenvalues and eigenvectors $A\mathbf{x} = \lambda \mathbf{x}$ of $A$.
These tasks can be solved using matrix factorizations. Some fundamental matrix factorizations: These tasks can be solved using matrix factorizations. Some fundamental matrix factorizations:
@@ -295,6 +289,8 @@ These tasks can be solved using matrix factorizations. Some fundamental matrix f
LU factorization is Gaussian elimination. The result of Gaussian elimination is the upper triangular matrix $U$. The lower triangular matrix $L$ contains ones on the diagonal and the non-diagonal entries $l_{ij}$ are equal to minus the coefficients by which row $Z_j$ is multiplied and added to row $Z_i$ in the Gaussian algorithm. LU factorization is Gaussian elimination. The result of Gaussian elimination is the upper triangular matrix $U$. The lower triangular matrix $L$ contains ones on the diagonal and the non-diagonal entries $l_{ij}$ are equal to minus the coefficients by which row $Z_j$ is multiplied and added to row $Z_i$ in the Gaussian algorithm.
An example: An example:
:::{.content-visible unless-format="typst"}
$$ $$
A=\left[ A=\left[
\begin{array}{ccc} \begin{array}{ccc}
@@ -325,6 +321,44 @@ A=\left[
& & 8 & & 8
\end{array}\right] = U \end{array}\right] = U
$$ $$
:::
:::{.content-hidden unless-format="typst"}
```{=typst}
$
A = mat(
1, 2, 2;
3, -4, 4;
-2, 1, 5; delim:"["
)
script(vec(
#h(0pt),#h(0pt),#h(0pt),
Z_2 arrow.bar Z_2 text(fill:#red, -) text(fill:#red, 3) Z_1,
Z_3 arrow.bar Z_3 + text(fill:#red, 2) Z_1, delim:#none
))
&arrow.double.long
mat(
1, 2, 2;
, -10, -2;
, 5, 9
)
script(vec(
#h(0pt),
#h(0pt),
#h(0pt),#h(0pt),
Z_3 arrow.bar Z_3 + text(fill:#red, 1/2) Z_2, delim:#none
))
&arrow.double.long
mat(
1, 2, 2;
, -10, -2;
, , 8
) = U
$
```
:::
:::{.content-visible unless-format="typst"}
$$ $$
A = \left[ A = \left[
\begin{array}{ccc} \begin{array}{ccc}
@@ -340,6 +374,24 @@ A = \left[
& & 8 & & 8
\end{array}\right] \end{array}\right]
$$ $$
:::
:::{.content-hidden unless-format="typst"}
```{=typst}
$
A = mat(
1,,;
text(fill:#red, +3),1,;
text(fill:#red, -2),text(fill:#red, -1/2),1
) dot.c
mat(
1,2,3;
,-10,-2;
,,8
)
$
```
:::
- Often in practice: $A\mathbf{x}=\mathbf{b}$ must be solved for one $A$ and many right-hand sides $\mathbf{b}$. - Often in practice: $A\mathbf{x}=\mathbf{b}$ must be solved for one $A$ and many right-hand sides $\mathbf{b}$.
@@ -362,6 +414,8 @@ display(U)
#### Pivoting #### Pivoting
Let's look at one step of Gaussian elimination: Let's look at one step of Gaussian elimination:
:::{.content-visible unless-format="typst"}
$$ $$
\left[ \left[
\begin{array}{cccccc} \begin{array}{cccccc}
@@ -375,12 +429,41 @@ $$
\end{array} \end{array}
\right] \right]
$$ $$
The goal is to make the entry $a_{i+1,j}$ disappear by adding an appropriate multiple of row $Z_i$ to row $Z_{i+1}$. This only works if the _pivot element_ $\textcolor{red}{a_{ij}}$ is not zero. If $\textcolor{red}{a_{ij}}=0$, we must exchange rows to fix this. :::
:::{.content-hidden unless-format="typst"}
```{=typst}
$
mat(
*, dots.c, *, *, dots.c, *;
, dots.down, dots.v, dots.v, , dots.v;
, , *, *, dots.c, *;
, , , text(fill: #red, a_(i j)), dots.c, a_(i n);
, , , text(fill: #blue, a_(i+1, j)), dots.c, a_(i+1, n);
, , , text(fill: #blue, dots.v), , dots.v;
, , , text(fill: #blue, a_(m j)), dots.c, a_(m n)
)
$
```
:::
The goal is to make the entry $a_{i+1,j}$ disappear by adding an appropriate multiple of row $Z_i$ to row $Z_{i+1}$. This only works if the _pivot element_ ${\color{red}a_{ij}}$ is not zero. If ${\color{red}a_{ij}}=0$, we must exchange rows to fix this.
Furthermore, the conditioning of the algorithm is best if we arrange the matrix at each step so that the pivot element is the largest in absolute value in the corresponding column of the remaining submatrix. In (row) pivoting, rows are exchanged at each step to ensure that Furthermore, the conditioning of the algorithm is best if we arrange the matrix at each step so that the pivot element is the largest in absolute value in the corresponding column of the remaining submatrix. In (row) pivoting, rows are exchanged at each step to ensure that
:::{.content-visible unless-format="typst"}
$$ $$
|\textcolor{red}{a_{ij}}|=\max_{k=i,...,m} |\textcolor{blue}{a_{kj}}| |\textcolor{red}{a_{ij}}|=\max_{k=i,...,m} |\textcolor{blue}{a_{kj}}|
$$ $$
:::
:::{.content-hidden unless-format="typst"}
```{=typst}
$
|text(fill:#red, a_(i j))| = max_(k=1,...,m) | text(fill:#blue, a_(k j)) |
$
```
:::
#### LU in Julia #### LU in Julia

View File

@@ -1,5 +1,7 @@
--- ---
engine: julia engine: julia
julia:
exeflags: ["--color=yes"]
--- ---
```{julia} ```{julia}
@@ -106,12 +108,12 @@ An important part of the _Julia ecosystem_ is the numerous packages that extend
- The _package manager_ `Pkg` is used for this purpose. - The _package manager_ `Pkg` is used for this purpose.
- It can be used in two ways: - It can be used in two ways:
- as normal Julia statements that can also be in a `.jl` program file: - as normal Julia statements that can also be in a `.jl` program file:
``` ```{.Julia}
using Pkg using Pkg
Pkg.add("PackageXY") Pkg.add("PackageXY")
``` ```
- in the special pkg-mode of the Julia REPL: - in the special pkg-mode of the Julia REPL:
``` ```{.julia}
] add PackageXY ] add PackageXY
``` ```
- Afterward, the package can be used with `using PackageXY`. - Afterward, the package can be used with `using PackageXY`.

View File

@@ -1,5 +1,7 @@
--- ---
engine: julia engine: julia
julia:
exeflags: ["--color=yes"]
--- ---
```{julia} ```{julia}
@@ -9,8 +11,7 @@ engine: julia
using InteractiveUtils using InteractiveUtils
``` ```
# First Small Programs # A small Example Program
## What Skills Are Needed for Programming? ## What Skills Are Needed for Programming?

View File

@@ -87,10 +87,10 @@ s_B = s_A = sqrt(2) # initial value
is = Float64[] is = Float64[]
@printf """Approx. value of π @printf """Approx. value of π
$n$-gon Iteration A Iteration B n-gon Iteration A Iteration B
""" """
for $i$ in $3:35$ for i in 3:35
push!(is, i) push!(is, i)
s_A = iterationA(s_A) s_A = iterationA(s_A)
s_B = iterationB(s_B) s_B = iterationB(s_B)

View File

@@ -9,7 +9,7 @@ For long-term work, a personal installation is recommended.
1. Install Julia with the installation and update manager **juliaup**: <https://github.com/JuliaLang/juliaup/> 1. Install Julia with the installation and update manager **juliaup**: <https://github.com/JuliaLang/juliaup/>
2. Install **Visual Studio Code** as editor/IDE: <https://code.visualstudio.com/> 2. Install **Visual Studio Code** as editor/IDE: <https://code.visualstudio.com/>
3. Install the **Julia language extension** in VS Code: <https://www.julia-vscode.org/docs/stable/gettingStarted/> 3. Install the **Julia language extension** in VS Code: <https://www.julia-vscode.org/docs/stable/gettingstarted/>
Entry point: Entry point:
@@ -32,7 +32,7 @@ $ julia
(_) | (_) (_) | (_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | | | | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.11.4 (2025-03-10) | | |_| | | | (_| | | Version 1.12.5 (2026-02-09)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release _/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ | |__/ |
@@ -88,7 +88,7 @@ This can be used to:
In text cells, the markup language [Markdown](https://en.wikipedia.org/wiki/Markdown) can be used for formatting and LaTeX for mathematical equations. In text cells, the markup language [Markdown](https://en.wikipedia.org/wiki/Markdown) can be used for formatting and LaTeX for mathematical equations.
::: {.callout-tip } ::: {.callout-tip }
Please check the `User Interface Tour` and `Keyboard Shortcuts` points in the `Help` menu! Please check the `User Interface Tour` and `Keyboard Shortcuts` topics in the `Help` menu!
::: :::
The cell currently being worked on can be in `command mode` or `edit mode`. The cell currently being worked on can be in `command mode` or `edit mode`.

View File

@@ -1,5 +1,7 @@
--- ---
engine: julia engine: julia
julia:
exeflags: ["--color=yes"]
--- ---
```{julia} ```{julia}
@@ -36,7 +38,7 @@ function Tab(s)
return # return nothing, since broadcast println produces empty vector return # return nothing, since broadcast println produces empty vector
end end
= |> = |>
# IJulia.set_verbose(true) # IJulia.set_verbose(true)
``` ```
@@ -57,7 +59,7 @@ Note that:
## The most important keys: `Tab` and `?` {#sec-tab} ## The most important keys: `Tab` and `?` {#sec-tab}
When programming, repeatedly press the Tab key as soon as 23 letters of a word have been typed. Potential completions are then displayed or completed if the completion is unique. This saves time and is extremely helpful. When programming, press the Tab key as soon as 23 letters of a word have been typed. Potential completions are then displayed or completed if the completion is unique. This saves time and you learn a lot about Julia.
```{julia} ```{julia}
lo = "lo" #| hide_line lo = "lo" #| hide_line
@@ -71,11 +73,14 @@ pri ▷ Tab
The built-in Julia help `?name` for all functions and constructs is very comprehensive. Here is a rather brief example: The built-in Julia help `?name` for all functions and constructs is very comprehensive. Here is a rather brief example:
:::{.content-visible unless-format="typst"}
```{julia} ```{julia}
?for ?for
``` ```
:::
:::{.content-hidden unless-format="xxx"} :::{.content-hidden unless-format="typst"}
::: {.cell } ::: {.cell }
```{.julia .cell-code} ```{.julia .cell-code}
@@ -84,18 +89,23 @@ The built-in Julia help `?name` for all functions and constructs is very compreh
::: {.cell-output .cell-output-stdout} ::: {.cell-output .cell-output-stdout}
``` ```
search: for foreach foldr floor mapfoldr factorial EOFError OverflowError search: for nor xor foldr floor Core sort
for loops repeatedly evaluate a block of statements while iterating over a sequence of values. for
Examples for loops repeatedly evaluate a block of statements while iterating over a sequence of values.
julia> for i in [1, 4, 0] The iteration variable is always a new variable, even if a variable of the same name exists in the enclosing scope. Use outer to reuse an existing local variable for iteration.
Examples
========
julia> for i in [1, 4, 0]
println(i) println(i)
end end
1 1
4 4
0 0
``` ```
::: :::
@@ -105,7 +115,7 @@ julia> for i in [1, 4, 0]
## Variables and Assignments ## Variables and Assignments
Variables are created through assignment with the assignment operator `=`. Afterwards, they can be used in further statements. Variables are created through assignment with the assignment operator `=`.
```{julia} ```{julia}
x = 1 + sqrt(5) x = 1 + sqrt(5)
@@ -126,8 +136,9 @@ Expressions like `x + y = sin(2)` are therefore invalid. Only a variable name ma
## Data types ## Data types
Julia is a [strongly typed](https://en.wikipedia.org/wiki/Strong_and_weak_typing) language. All objects have a type. Julia is a [strongly typed](https://en.wikipedia.org/wiki/Strong_and_weak_typing) language
Among other things, there are the basic types where every object possesses a type. Among the fundamental types are:
- Integers, - Integers,
- Floating-point numbers, - Floating-point numbers,
@@ -139,7 +150,7 @@ The type of a variable can be determined using the `typeof()` function.
#| warning: true #| warning: true
#| error: true #| error: true
for x ∈ (42, 12.0, 3.3e4, "Hello!", true) for x ∈ (42, 12.0, 3.3e4, "Hello!", true)
println("x = ", x, " ..... Type: ", typeof(x)) println("x = ", x, " ... Type: ", typeof(x))
end end
``` ```
The standard floating-point number has a size of 64 bits, which corresponds to a `double` in C/C++/Java. The standard floating-point number has a size of 64 bits, which corresponds to a `double` in C/C++/Java.
@@ -159,7 +170,7 @@ println( typeof(x), " - Value of x = $x" )
``` ```
## Print statements ## Print statements
The `println()` function differs from `print()` in that it outputs a line break at the end. The `println()` function puts a line break at the end, `print()` doesn't.
```{julia} ```{julia}
print(y) print(y)
print("...the line continues...") print("...the line continues...")
@@ -168,14 +179,15 @@ println(y)
println("New line") println("New line")
println("New line") println("New line")
``` ```
Both functions can accept a list of *strings* and variables as arguments. Variables can also be embedded in *strings* by prefixing the variable name with a dollar sign *(string interpolation)*.
Both functions can accept a list of strings and variables as arguments. Variables can also be embedded in strings by prefixing the variable name with a dollar sign *(string interpolation)*.
```{julia} ```{julia}
x = 23 x = 23
y = 3x + 5 y = 3x + 5
zz = "Done!" zz = "Done!"
println("x= ", x, " ...and y= ", y, "...", zz) # 1. variant println("x= ", x, " ... and y= ", y, "...", zz) # 1. variant
println("x= $x ...and y= $y...$zz") # variant with string interpolation println("x= $x ... and y= $y...$zz") # variant with string interpolation
``` ```
@@ -189,7 +201,7 @@ println("One dollar: 1\$ and three backslashes: \\\\\\ ")
::: :::
## Functions ## Functions
Function definitions begin with the keyword `function` and end with the keyword `end`. Typically, they have one or more arguments and return a computed result via the `return` statement. Function definitions start with the keyword `function` and end with the keyword `end`. Typically, they have one or more arguments and return a computed result via a `return` statement.
```{julia} ```{julia}
function hypotenuse(a, b) # particularly cumbersome today function hypotenuse(a, b) # particularly cumbersome today
c2 = a^2 + b^2 c2 = a^2 + b^2
@@ -206,7 +218,7 @@ println("z = $z")
println("c = $c") println("c = $c")
``` ```
Very simple functions can also be defined as single-line functions. Very simple functions can also be defined as one-liners:
```{julia} ```{julia}
hypotenuse(a, b) = sqrt(a^2+b^2) hypotenuse(a, b) = sqrt(a^2+b^2)
``` ```
@@ -219,7 +231,7 @@ x = 3^2
x < 2^3 x < 2^3
``` ```
In addition to the usual arithmetic comparisons `==, !=, <, <= ,> ,>=` In addition to the usual arithmetic comparisons `==, !=, <, <= ,> ,>=`
there are many other tests. Of course, the result of a test can also be assigned to a variable, which is then of type `Bool`. The logical operators `&&`, `||` and negation `!` can be used in tests. there are many other tests. The result of a test can also be assigned to a variable, which is then of type `Bool`. The logical operators `&&`, `||` and negation `!` can be used in tests.
```{julia} ```{julia}
test1 = "Car" in ["Bicycle", "Car", "Train"] test1 = "Car" in ["Bicycle", "Car", "Train"]
@@ -229,9 +241,9 @@ println("$test1 $test2 $test3")
``` ```
## Branches ## Conditional Evaluation
Branches (conditional statements) have the form
A simple `if` has the form
```default ```default
if <test> if <test>
<statement1> <statement1>
@@ -240,7 +252,7 @@ if <test>
end end
``` ```
An `else` branch and `elseif` branches are possible. There can one or several `elseif` blocks and a final `else` block.
```{julia} ```{julia}
x = sqrt(100) x = sqrt(100)
@@ -252,13 +264,12 @@ else
end end
``` ```
Indentation improves readability but is optional. Line breaks separate statements, and this can also be done with semicolons. The above code block is identical to the following line in Julia: Indentation enhances readability but is optional. Line breaks separate statements, as do semicolons. The above code block is equivalent to the following line in Julia:
```{julia} ```{julia}
# Please don't program like this! You will regret it! # Please don't program like this! You will regret it!
x=sqrt(100); if x > 20 println("Strange!") else println("OK"); y = x + 3 end x=sqrt(100); if x > 20 println("Strange!") else println("OK"); y = x + 3 end
``` ```
It is strongly recommended to format your own code from the beginning with clear indentation!
## Simple `for` loops ## Simple `for` loops
@@ -283,7 +294,7 @@ sum
## Arrays ## Arrays
1-dimensional arrays (vectors) are a simple form of containers. They can be created with square brackets One-dimensional arrays (vectors) are a simple form of containers. They can be created with square brackets
and accessed by index. Indexing starts at 1. and accessed by index. Indexing starts at 1.
```{julia} ```{julia}

View File

@@ -1,5 +1,7 @@
--- ---
engine: julia engine: julia
julia:
exeflags: ["--color=yes"]
--- ---
```{julia} ```{julia}

View File

@@ -2,7 +2,7 @@
engine: julia engine: julia
--- ---
# A Case Study: The Parametric Data Type PComplex # Example: The Parametric Data Type `PComplex`
```{julia} ```{julia}
#| error: false #| error: false
@@ -109,9 +109,19 @@ z2 = PComplex(2.0, 0.3)
Julia uses `//` as an infix constructor for the type `Rational`. We want something equally nice. Julia uses `//` as an infix constructor for the type `Rational`. We want something equally nice.
In electronics/electrical engineering, [AC quantities are described by complex numbers.](https://en.wikipedia.org/wiki/Phasor_analysis) A representation of complex numbers by "magnitude" and "phase" is common and is often represented in so-called [phasor form](https://en.wikipedia.org/wiki/Phasor): In electronics/electrical engineering, [AC quantities are described by complex numbers.](https://en.wikipedia.org/wiki/Phasor_analysis) A representation of complex numbers by "magnitude" and "phase" is common and is often represented in so-called [phasor form](https://en.wikipedia.org/wiki/Phasor):
:::{.content-visible unless-format="typst"}
$$ $$
z= r\enclose{phasorangle}{\phi} = 3.4\;\enclose{phasorangle}{45^\circ} z= r\enclose{phasorangle}{\phi} = 3.4\;\enclose{phasorangle}{45^\circ}
$$ $$
:::
:::{.content-hidden unless-format="typst"}
```{=typst}
$ z = r angle.acute phi = 3.4 angle.acute 45 degree $
```
:::
where the angle is usually noted in degrees. where the angle is usually noted in degrees.
:::{.callout-note .titlenormal collapse="true"} :::{.callout-note .titlenormal collapse="true"}

View File

@@ -1,5 +1,7 @@
--- ---
engine: julia engine: julia
julia:
exeflags: ["--color=yes"]
--- ---
```{julia} ```{julia}
@@ -513,7 +515,7 @@ end
------- -------
The C semantics of `for(i=1; i<5; i++)` corresponds to the `while` loop: The C semantics of `for(i=1; i<5; i++)` corresponds to the `while` loop:
``` ```{.julia}
i = 1 i = 1
while i<5 while i<5
*loop body* # here one can also mess with i effectively *loop body* # here one can also mess with i effectively

View File

@@ -1,13 +1,20 @@
--- ---
engine: julia engine: julia
julia:
exeflags: ["--color=yes"]
--- ---
# What is Julia? {.unnumbered} # What is Julia? {.unnumbered}
```{=typst}
#set math.equation(numbering: none)
// some things need to be here, to counter the typst style
```
Julia is a relatively young, modern programming language designed for *scientific computing*. Julia is a relatively young, modern programming language designed for *scientific computing*.
A small code example: A code example:
```{julia} ```{julia}
#| error: false #| error: false
@@ -40,12 +47,16 @@ f
Intelligence Laboratory* of MIT Intelligence Laboratory* of MIT
- 2012 first release v0.1 - 2012 first release v0.1
- 2018 Version v1.0 - 2018 Version v1.0
- current: v1.11.4 from March 10, 2025 - February 2026: Version v1.12.5
For the first release in 2012, the creators of Julia summarized their goals and motivation in a blog post [Why we created Julia](https://julialang.org/blog/2012/02/why-we-created-julia) interestingly.
In their 2012 inaugural blog post [Why we created Julia](https://julialang.org/blog/2012/02/why-we-created-julia),
the developers provide an insightful and funny overview of their objectives and motivations for creating Julia.
For a picture of *Stefan Karpinski, Viral Shah, Jeff For a picture of *Stefan Karpinski, Viral Shah, Jeff
Bezanson*, and *Alan Edelman*, please click here: <https://news.mit.edu/2018/julia-language-co-creators-win-james-wilkinson-prize-numerical-software-1226>. Bezanson*, and *Alan Edelman*, please
click here: <https://news.mit.edu/2018/julia-language-co-creators-win-james-wilkinson-prize-numerical-software-1226>.
@@ -95,23 +106,28 @@ Julia has a built-in package manager."
::: :::
*open source* ***open source***
: - open development on [GitHub](https://github.com/JuliaLang/julia)
- open development on [GitHub](https://github.com/JuliaLang/julia)
- implementations for all common operating systems - implementations for all common operating systems
*high-performance programming language for technical computing* ***high-performance programming language for technical computing***
: - many functions for *scientific computing* built-in,
- many functions for *scientific computing* built-in,
- (intentional) similarity to Python, R and Matlab, - (intentional) similarity to Python, R and Matlab,
- complex calculations in a few lines - complex calculations in a few lines
- simple interface to other languages like C or Python - simple interface to other languages like C or Python
*a JIT compiler* ***a JIT compiler***
: - interactive work possible: `read-eval-print loop (REPL)` with
- interactive work possible: `read-eval-print loop (REPL)` with
- just-in-time (JIT) compilation - just-in-time (JIT) compilation
- thereby runtimes comparable to static languages like C/C++, Fortran or Rust - thereby runtimes comparable to static languages like C/C++, Fortran or Rust
*a built-in package manager* ***a built-in package manager***
: - huge *ecosystem* of easily installable packages, e.g.
- huge *ecosystem* of easily installable packages, e.g.
- [Mathematical Optimization](https://jump.dev/) - [Mathematical Optimization](https://jump.dev/)
- [Machine Learning](https://fluxml.ai/) - [Machine Learning](https://fluxml.ai/)
- [Data Visualization](https://docs.makie.org/stable/) - [Data Visualization](https://docs.makie.org/stable/)
@@ -122,12 +138,13 @@ Julia has a built-in package manager."
## A Small Selection of Online Materials on Julia {.unnumbered} ## Selected Links {.unnumbered}
- [Documentation](https://docs.julialang.org/en/v1/) - the official documentation - [Documentation](https://docs.julialang.org/en/v1/) -- the official documentation
- [Cheat Sheet](https://cheatsheet.juliadocs.org/) - "a quick & dirty overview" - [Cheat Sheet](https://cheatsheet.juliadocs.org/) -- "a quick & dirty overview"
- [Introducing Julia](https://en.wikibooks.org/wiki/Introducing_Julia)-- a WikiBook - [Introducing Julia](https://en.wikibooks.org/wiki/Introducing_Julia) -- a WikiBook
- [The Julia Express](http://bogumilkaminski.pl/files/julia_express.pdf) - short version, Julia in 16 pages - [The Julia Express](http://bogumilkaminski.pl/files/julia_express.pdf) -- Julia in 16 pages
- [Think Julia](https://benlauwens.github.io/ThinkJulia.jl/latest/book.html) - introduction to programming with Julia as a language - [Think Julia](https://benlauwens.github.io/ThinkJulia.jl/latest/book.html) -- introduction to programming using Julia as first language
- The [Julia Forum](https://discourse.julialang.org/) - The [Julia Forum](https://discourse.julialang.org/)
- For the eyes: [Examples for the Julia graphics package `Makie`](https://beautiful.makie.org/) - For the eyes: [Examples for the Julia graphics package `Makie`](https://beautiful.makie.org/)