auto-update(nvim): 2025-01-07 15:29:58
This commit is contained in:
parent
7fd360fcbf
commit
e1e88978c4
3 changed files with 455 additions and 0 deletions
329
documents/by-course/math-4b/course-notes/dvd.typ
Normal file
329
documents/by-course/math-4b/course-notes/dvd.typ
Normal file
|
@ -0,0 +1,329 @@
|
||||||
|
#import "@preview/ctheorems:1.1.3": *
|
||||||
|
#import "@preview/showybox:2.0.3": showybox
|
||||||
|
|
||||||
|
#let colors = (
|
||||||
|
rgb("#9E9E9E"),
|
||||||
|
rgb("#F44336"),
|
||||||
|
rgb("#E91E63"),
|
||||||
|
rgb("#9C27B0"),
|
||||||
|
rgb("#673AB7"),
|
||||||
|
rgb("#3F51B5"),
|
||||||
|
rgb("#2196F3"),
|
||||||
|
rgb("#03A9F4"),
|
||||||
|
rgb("#00BCD4"),
|
||||||
|
rgb("#009688"),
|
||||||
|
rgb("#4CAF50"),
|
||||||
|
rgb("#8BC34A"),
|
||||||
|
rgb("#CDDC39"),
|
||||||
|
rgb("#FFEB3B"),
|
||||||
|
rgb("#FFC107"),
|
||||||
|
rgb("#FF9800"),
|
||||||
|
rgb("#FF5722"),
|
||||||
|
rgb("#795548"),
|
||||||
|
rgb("#9E9E9E"),
|
||||||
|
)
|
||||||
|
|
||||||
|
#let dvdtyp(
|
||||||
|
title: "",
|
||||||
|
subtitle: "",
|
||||||
|
author: "",
|
||||||
|
abstract: none,
|
||||||
|
bibliography: none,
|
||||||
|
paper-size: "a4",
|
||||||
|
date: "today",
|
||||||
|
body,
|
||||||
|
) = {
|
||||||
|
set document(title: title, author: author)
|
||||||
|
|
||||||
|
set std.bibliography(style: "springer-mathphys", title: [References])
|
||||||
|
|
||||||
|
show: thmrules
|
||||||
|
|
||||||
|
set page(
|
||||||
|
numbering: "1",
|
||||||
|
number-align: center,
|
||||||
|
header: locate(loc => {
|
||||||
|
if loc.page() == 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
box(stroke: (bottom: 0.7pt), inset: 0.4em)[#text(
|
||||||
|
font: "New Computer Modern",
|
||||||
|
)[
|
||||||
|
*#author* --- #datetime.today().display("[day] [month repr:long] [year]")
|
||||||
|
#h(1fr)
|
||||||
|
*#title*
|
||||||
|
]]
|
||||||
|
}),
|
||||||
|
paper: paper-size,
|
||||||
|
// The margins depend on the paper size.
|
||||||
|
margin: (
|
||||||
|
left: (86pt / 216mm) * 100%,
|
||||||
|
right: (86pt / 216mm) * 100%,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
set heading(numbering: "1.")
|
||||||
|
show heading: it => {
|
||||||
|
set text(font: "Libertinus Serif")
|
||||||
|
set par(first-line-indent: 0em)
|
||||||
|
|
||||||
|
if it.numbering != none {
|
||||||
|
text(rgb("#2196F3"), weight: 500)[#sym.section]
|
||||||
|
|
||||||
|
text(rgb("#2196F3"))[#counter(heading).display() ]
|
||||||
|
}
|
||||||
|
it.body
|
||||||
|
}
|
||||||
|
|
||||||
|
set text(font: "New Computer Modern", lang: "en")
|
||||||
|
|
||||||
|
show math.equation: set text(weight: 400)
|
||||||
|
|
||||||
|
|
||||||
|
// Title row.
|
||||||
|
align(center)[
|
||||||
|
#set text(font: "Libertinus Serif")
|
||||||
|
#block(text(weight: 700, 26pt, title))
|
||||||
|
|
||||||
|
|
||||||
|
#if subtitle != none [#text(12pt, weight: 500)[#(
|
||||||
|
subtitle
|
||||||
|
)]]
|
||||||
|
|
||||||
|
#if author != none [#text(16pt)[#smallcaps(author)]]
|
||||||
|
#v(1.2em, weak: true)
|
||||||
|
|
||||||
|
#if date == "today" {
|
||||||
|
datetime.today().display("[day] [month repr:long] [year]")
|
||||||
|
} else {
|
||||||
|
date
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
if abstract != none [
|
||||||
|
#v(2.2em)
|
||||||
|
#set text(font: "Libertinus Serif")
|
||||||
|
#pad(x: 14%, abstract)
|
||||||
|
#v(1em)
|
||||||
|
]
|
||||||
|
|
||||||
|
set outline(fill: repeat[~.], indent: 1em)
|
||||||
|
|
||||||
|
show outline: set heading(numbering: none)
|
||||||
|
show outline: set par(first-line-indent: 0em)
|
||||||
|
|
||||||
|
show outline.entry.where(level: 1): it => {
|
||||||
|
text(font: "Libertinus Serif", rgb("#2196F3"))[#strong[#it]]
|
||||||
|
}
|
||||||
|
show outline.entry: it => {
|
||||||
|
h(1em)
|
||||||
|
text(font: "Libertinus Serif", rgb("#2196F3"))[#it]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Main body.
|
||||||
|
set par(
|
||||||
|
justify: true,
|
||||||
|
first-line-indent: 1em,
|
||||||
|
)
|
||||||
|
|
||||||
|
body
|
||||||
|
|
||||||
|
// Display the bibliography, if any is given.
|
||||||
|
if bibliography != none {
|
||||||
|
show std.bibliography: set text(footnote-size)
|
||||||
|
show std.bibliography: set block(above: 11pt)
|
||||||
|
show std.bibliography: pad.with(x: 0.5pt)
|
||||||
|
bibliography
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#let thmtitle(t, color: rgb("#000000")) = {
|
||||||
|
return text(
|
||||||
|
font: "Libertinus Serif",
|
||||||
|
weight: "semibold",
|
||||||
|
fill: color,
|
||||||
|
)[#t]
|
||||||
|
}
|
||||||
|
#let thmname(t, color: rgb("#000000")) = {
|
||||||
|
return text(font: "Libertinus Serif", fill: color)[(#t)]
|
||||||
|
}
|
||||||
|
|
||||||
|
#let thmtext(t, color: rgb("#000000")) = {
|
||||||
|
let a = t.children
|
||||||
|
if (a.at(0) == [ ]) {
|
||||||
|
a.remove(0)
|
||||||
|
}
|
||||||
|
t = a.join()
|
||||||
|
|
||||||
|
return text(font: "New Computer Modern", fill: color)[#t]
|
||||||
|
}
|
||||||
|
|
||||||
|
#let thmbase(
|
||||||
|
identifier,
|
||||||
|
head,
|
||||||
|
..blockargs,
|
||||||
|
supplement: auto,
|
||||||
|
padding: (top: 0.5em, bottom: 0.5em),
|
||||||
|
namefmt: x => [(#x)],
|
||||||
|
titlefmt: strong,
|
||||||
|
bodyfmt: x => x,
|
||||||
|
separator: [#h(0.1em).#h(0.2em) \ ],
|
||||||
|
base: "heading",
|
||||||
|
base_level: none,
|
||||||
|
) = {
|
||||||
|
if supplement == auto {
|
||||||
|
supplement = head
|
||||||
|
}
|
||||||
|
let boxfmt(name, number, body, title: auto, ..blockargs_individual) = {
|
||||||
|
if not name == none {
|
||||||
|
name = [ #namefmt(name)]
|
||||||
|
} else {
|
||||||
|
name = []
|
||||||
|
}
|
||||||
|
if title == auto {
|
||||||
|
title = head
|
||||||
|
}
|
||||||
|
if not number == none {
|
||||||
|
title += " " + number
|
||||||
|
}
|
||||||
|
title = titlefmt(title)
|
||||||
|
body = bodyfmt(body)
|
||||||
|
pad(
|
||||||
|
..padding,
|
||||||
|
showybox(
|
||||||
|
width: 100%,
|
||||||
|
radius: 0.3em,
|
||||||
|
breakable: true,
|
||||||
|
padding: (top: 0em, bottom: 0em),
|
||||||
|
..blockargs.named(),
|
||||||
|
..blockargs_individual.named(),
|
||||||
|
[#title#name#titlefmt(separator)#body],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
let auxthmenv = thmenv(
|
||||||
|
identifier,
|
||||||
|
base,
|
||||||
|
base_level,
|
||||||
|
boxfmt,
|
||||||
|
).with(supplement: supplement)
|
||||||
|
|
||||||
|
return auxthmenv.with(numbering: "1.1")
|
||||||
|
}
|
||||||
|
|
||||||
|
#let styled-thmbase = thmbase.with(
|
||||||
|
titlefmt: thmtitle,
|
||||||
|
namefmt: thmname,
|
||||||
|
bodyfmt: thmtext,
|
||||||
|
)
|
||||||
|
|
||||||
|
#let builder-thmbox(color: rgb("#000000"), ..builderargs) = styled-thmbase.with(
|
||||||
|
titlefmt: thmtitle.with(color: color.darken(30%)),
|
||||||
|
bodyfmt: thmtext.with(color: color.darken(70%)),
|
||||||
|
namefmt: thmname.with(color: color.darken(30%)),
|
||||||
|
frame: (
|
||||||
|
body-color: color.lighten(92%),
|
||||||
|
border-color: color.darken(10%),
|
||||||
|
thickness: 1.5pt,
|
||||||
|
inset: 1.2em,
|
||||||
|
radius: 0.3em,
|
||||||
|
),
|
||||||
|
..builderargs,
|
||||||
|
)
|
||||||
|
|
||||||
|
#let builder-thmline(
|
||||||
|
color: rgb("#000000"),
|
||||||
|
..builderargs,
|
||||||
|
) = styled-thmbase.with(
|
||||||
|
titlefmt: thmtitle.with(color: color.darken(30%)),
|
||||||
|
bodyfmt: thmtext.with(color: color.darken(70%)),
|
||||||
|
namefmt: thmname.with(color: color.darken(30%)),
|
||||||
|
frame: (
|
||||||
|
body-color: color.lighten(92%),
|
||||||
|
border-color: color.darken(10%),
|
||||||
|
thickness: (left: 2pt),
|
||||||
|
inset: 1.2em,
|
||||||
|
radius: 0em,
|
||||||
|
),
|
||||||
|
..builderargs,
|
||||||
|
)
|
||||||
|
|
||||||
|
#let problem-style = builder-thmbox(
|
||||||
|
color: colors.at(11),
|
||||||
|
shadow: (offset: (x: 2pt, y: 2pt), color: luma(70%)),
|
||||||
|
)
|
||||||
|
|
||||||
|
#let exercise = problem-style("item", "Exercise")
|
||||||
|
#let problem = exercise
|
||||||
|
|
||||||
|
#let theorem-style = builder-thmbox(
|
||||||
|
color: colors.at(6),
|
||||||
|
shadow: (offset: (x: 3pt, y: 3pt), color: luma(70%)),
|
||||||
|
)
|
||||||
|
|
||||||
|
#let example-style = builder-thmbox(
|
||||||
|
color: colors.at(16),
|
||||||
|
shadow: (offset: (x: 3pt, y: 3pt), color: luma(70%)),
|
||||||
|
)
|
||||||
|
|
||||||
|
#let theorem = theorem-style("item", "Theorem")
|
||||||
|
#let lemma = theorem-style("item", "Lemma")
|
||||||
|
#let corollary = theorem-style("item", "Corollary")
|
||||||
|
|
||||||
|
#let definition-style = builder-thmline(color: colors.at(8))
|
||||||
|
|
||||||
|
// #let definition = definition-style("definition", "Definition")
|
||||||
|
#let proposition = definition-style("item", "Proposition")
|
||||||
|
#let remark = definition-style("item", "Remark")
|
||||||
|
#let observation = definition-style("item", "Observation")
|
||||||
|
|
||||||
|
// #let example-style = builder-thmline(color: colors.at(16))
|
||||||
|
|
||||||
|
#let example = example-style("item", "Example")
|
||||||
|
|
||||||
|
#let proof(body, name: none) = {
|
||||||
|
[_Proof_]
|
||||||
|
if name != none {
|
||||||
|
[ #thmname[#name]]
|
||||||
|
}
|
||||||
|
[.]
|
||||||
|
body
|
||||||
|
h(1fr)
|
||||||
|
|
||||||
|
// Add a word-joiner so that the proof square and the last word before the
|
||||||
|
// 1fr spacing are kept together.
|
||||||
|
sym.wj
|
||||||
|
|
||||||
|
// Add a non-breaking space to ensure a minimum amount of space between the
|
||||||
|
// text and the proof square.
|
||||||
|
sym.space.nobreak
|
||||||
|
|
||||||
|
$square.stroked$
|
||||||
|
}
|
||||||
|
|
||||||
|
#let fact = thmplain(
|
||||||
|
"item",
|
||||||
|
"Fact",
|
||||||
|
titlefmt: strong,
|
||||||
|
separator: ".",
|
||||||
|
|
||||||
|
inset: 0pt,
|
||||||
|
)
|
||||||
|
#let abuse = thmplain(
|
||||||
|
"item",
|
||||||
|
"Abuse of Notation",
|
||||||
|
titlefmt: strong,
|
||||||
|
separator: ".",
|
||||||
|
inset: 0pt,
|
||||||
|
)
|
||||||
|
#let definition = thmplain(
|
||||||
|
"item",
|
||||||
|
"Definition",
|
||||||
|
titlefmt: strong,
|
||||||
|
separator: ".",
|
||||||
|
inset: 0pt,
|
||||||
|
)
|
89
documents/by-course/math-4b/course-notes/main.typ
Normal file
89
documents/by-course/math-4b/course-notes/main.typ
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
#import "./dvd.typ": *
|
||||||
|
|
||||||
|
#show: dvdtyp.with(
|
||||||
|
title: "Math 4B Course Notes",
|
||||||
|
author: "Youwen Wu",
|
||||||
|
date: "Winter 2025",
|
||||||
|
subtitle: [Taught by Guofang Wei],
|
||||||
|
)
|
||||||
|
|
||||||
|
#outline()
|
||||||
|
|
||||||
|
= Course logistics
|
||||||
|
|
||||||
|
The textbook is Elementary Differential Equations, 11th edition, 2017. Chapters
|
||||||
|
1-4, 6, 7, and 9 will be covered.
|
||||||
|
|
||||||
|
Attendance to discussion sections is mandatory.
|
||||||
|
|
||||||
|
= Lecture #datetime(day: 7, month: 1, year: 2025).display()
|
||||||
|
|
||||||
|
== Trivial preliminaries
|
||||||
|
|
||||||
|
#definition[
|
||||||
|
An ODE involves an unknown function of a single variable and its derivatives
|
||||||
|
up to some fixed order. The order of an ODE is the order of the highest
|
||||||
|
derivative that appears.
|
||||||
|
]
|
||||||
|
|
||||||
|
#example[First order ODE][
|
||||||
|
$ (dif y) / (dif x) = y^2 $
|
||||||
|
]
|
||||||
|
|
||||||
|
#example[Second order ODE][
|
||||||
|
$
|
||||||
|
y'' &= x \
|
||||||
|
integral.double y'' dif x &= integral.double x dif x \
|
||||||
|
y &= 1 / 6 x^3 + C
|
||||||
|
$
|
||||||
|
]
|
||||||
|
|
||||||
|
#definition[
|
||||||
|
A function $y(x)$ defined on $(a,b)$ is a *solution* of the ODE
|
||||||
|
$ y' = F(x,y) $
|
||||||
|
if and only if
|
||||||
|
$ y'(x) = F(x, y(x)), forall x in (a,b) $
|
||||||
|
]
|
||||||
|
|
||||||
|
#problem[
|
||||||
|
Check that $y(x) = 20 + 10e^(-x / 2)$ is a solution to the ODE
|
||||||
|
$ y' = -1 / 2 y + 10 $
|
||||||
|
]
|
||||||
|
|
||||||
|
#definition[
|
||||||
|
A first order ODE
|
||||||
|
$ y' = F(x,y) $
|
||||||
|
is called *linear* if there are functions $A(x)$ and $B(x)$ such that
|
||||||
|
$ F(x,y) = A(x) y + B(x) $
|
||||||
|
]
|
||||||
|
|
||||||
|
#example("Linear ODEs")[
|
||||||
|
- $y' = x$
|
||||||
|
- $y' = y$
|
||||||
|
- $y' = x^2$
|
||||||
|
]
|
||||||
|
|
||||||
|
#example("Nonlinear ODEs")[
|
||||||
|
- $y' = y^2$
|
||||||
|
]
|
||||||
|
|
||||||
|
#definition[
|
||||||
|
*Equilibrium solutions* for the ODE
|
||||||
|
$ y' = F(x,y) $
|
||||||
|
are solutions $y(x)$ such that $y'(x) = 0$, that is, $y(x)$ is constant.
|
||||||
|
]
|
||||||
|
|
||||||
|
#example[
|
||||||
|
The equation
|
||||||
|
$ y' = y(y +2) $
|
||||||
|
has two equilibria
|
||||||
|
$
|
||||||
|
y(x) &= 0 \
|
||||||
|
y(x) &= -2
|
||||||
|
$
|
||||||
|
]
|
||||||
|
|
||||||
|
#problem[
|
||||||
|
What are the equilibria of the equation
|
||||||
|
$ y' = y(y - x) $
|
||||||
|
]
|
37
documents/by-course/math-4b/course-notes/package.nix
Normal file
37
documents/by-course/math-4b/course-notes/package.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
typstPackagesCache,
|
||||||
|
typixLib,
|
||||||
|
cleanTypstSource,
|
||||||
|
flakeSelf,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
src = cleanTypstSource ./.;
|
||||||
|
commonArgs = {
|
||||||
|
typstSource = "main.typ";
|
||||||
|
|
||||||
|
fontPaths = [
|
||||||
|
# Add paths to fonts here
|
||||||
|
# "${pkgs.roboto}/share/fonts/truetype"
|
||||||
|
];
|
||||||
|
|
||||||
|
virtualPaths = [
|
||||||
|
# Add paths that must be locally accessible to typst here
|
||||||
|
# {
|
||||||
|
# dest = "icons";
|
||||||
|
# src = "${inputs.font-awesome}/svgs/regular";
|
||||||
|
# }
|
||||||
|
];
|
||||||
|
|
||||||
|
XDG_CACHE_HOME = typstPackagesCache;
|
||||||
|
SOURCE_DATE_EPOCH = builtins.toString flakeSelf.lastModified;
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
typixLib.buildTypstProject (
|
||||||
|
commonArgs
|
||||||
|
// {
|
||||||
|
inherit src;
|
||||||
|
}
|
||||||
|
)
|
Loading…
Reference in a new issue