Files
maing01_06/Band2/Band2.typ

798 lines
23 KiB
Typst

#import "@preview/cetz:0.4.2": * //Grafiken
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
#import "@preview/marge:0.1.0": sidenote
#import "@preview/itemize:0.2.0" as el
#import "@preview/eqalc:0.1.3": *
#import "deckblatt.typ": deckblatt
//#import "abhaengigkeit.typ": abhaengigkeit
#let einruecken(abstand, inhalt) = pad(left: abstand, inhalt)
#let def-counter = counter("definition")
// Zähler bei jedem neuen Kapitel (Ebene 1) zurücksetzen
#let def-counter = counter("definition")
// Zähler bei jedem neuen Kapitel zurücksetzen
#show heading.where(level: 1): it => {
it
def-counter.update(0)
}
#let definition(title: none, body, label: none) = context {
def-counter.step()
let h1-num = counter(heading).at(here()).first()
let d-num = def-counter.at(here()).first()
let full-num = [#h1-num.#d-num]
// Die Figure wird erstellt und das Label direkt angehängt
[
#figure(
block(width: 100%, align(left)[
*Definition #full-num*: #if title != none [(#title)] #body
]),
kind: "definition",
supplement: [D.],
numbering: _ => full-num,
) #label
]
}
// Zähler bei jedem neuen Kapitel (Ebene 1) zurücksetzen
#show heading.where(level: 1): it => {
it
def-counter.update(1)
}
#let sn-base = sidenote
#let snr(it) = sn-base(side: right, padding: 1em)[
#set text(size: 1.3em, weight: "bold")
#it
]
#let snl(it) = sn-base(side: left, padding: 1em)[
#set text(size: 1.3em, weight: "bold")
#it
]
//#import "definitionen.typ": *
#set text(
font: "Lato", //Serifenlose Schrift
size: 8.5pt,
lang: "de", //Deutsche Spracheinstellungen
)
#set page(
width:162mm,
height: 230mm,
margin: 20mm,
)
#set par(
justify: true, //Blocksatz
leading: 0.55em,
)
#let tt = "PFORR \u{2219} SCHIROTZEK"
#let meinContent = [*Band 7* #sym.dot.c _Grundlagen_]
// Einfach die Funktion aufrufen
#deckblatt(bandnr: "2", autor: tt, titel: "Differential- und Integralrechnung\nfür Funktionen\nmit einer Variablen")
#pagebreak()
#set page(
width:162mm,
height: 230mm,
margin: 20mm,
)
#set par(
justify: true, //Blocksatz
leading: 0.55em,
)
#set page(
//background: grid(columns: (1mm,) * 162, rows: (1mm,) * 230, stroke: 0.1mm),
margin: (
top: 2mm,
bottom: 2mm,
x: 10mm,
),
width:162mm,
height: 230mm,
)
#heading(outlined: false)[Abhängigkeitsgraph]
/* #let mynode(pos, text1, text2, name) = {
node(pos, [#text( size:1.7em, text2) \ #text1], name:name, stroke: 1pt, corner-radius: 0mm,
height: 3.5em, width:10em)
/* Dashed separator from east to west */
//edge(label(str(name)+".west"), label(str(name)+".east"),"-", stroke: 0.2mm, dash:(1mm, 0.8mm))
} */
#let mynode(pos, zahl, inhalt, name) = {
node(
pos,
name: name,
shape: rect, // 1. Zwingt Fletcher zum Rechteck
corner-radius: 0pt, // 2. Verhindert abgerundete Ecken
fill: white, // Optional: Hintergrund füllen
stroke: 1.25pt,
// 3. WICHTIG: Festlegen einer Mindestgröße, damit alle gleich starten
// Anstatt extrude nutzen wir feste Maße, die sich aber am Gitter ausrichten
width: 12em,
height: 5.8em,
{
// Dein Layout-Block
set align(top + right)
text(2.5em, fill: gray.darken(90%))[#zahl]
place(bottom + left, inhalt)
}
)}
#let myedge(start, end, type, ) = {
let sep = 0.15em
edge(start, end, type)
edge(start, end)
}
#diagram(
spacing: (11mm, 7mm),
//debug: 3,
edge-stroke: 1.25pt,
mark-scale: 55%,
mynode((0,0),"",[Vorbereitungsband], <A0>),
mynode((1,0),"1", [Grundlagen], <A1>),
mynode((2,0), "13",[Lineare Algebra], <A13>),
mynode((0,1),"3",[Unendliche Reihen], <A3>),
mynode((1,1), "2",[Differential- und Integralrechnung], <A2>),
mynode((2,1), "14",[Lineare Optimierung], <A14>),
mynode((0,2), [7$#sub(text(0.5em)[1])$],[Gewöhnliche Differentialgleichungen], <A7_1>),
mynode((1,2), "4",[Differentialrechnung mit mehreren Variablen], <A4>),
mynode((2,2), "15",[Nichtlineare Optimierung], <A15>),
mynode((0,3), [7$#sub(text(0.5em)[2])$],[Gewöhnliche Differentialgleichungen], <A7_2>),
mynode((1,3.), "5",[Integralrechnung mit mehreren Variablen], <A5>),
mynode((2,3), "16",[Optimale Prozesse und Systeme], <A16>),
mynode((0,4), "8",[Partielle Differentialgleichungen], <A8>),
mynode((1,4), "6",[Differentialgeometrie], <A6>),
mynode((2,4), "17",[Wahrscheinlichkeitsrechnung, math.Statistik], <A17>),
mynode((0,5), "9",[Komplexe Funktionen], <A9>),
mynode((1,5), "10",[Operatorenrechnung], <A10>),
mynode((2,5), [21$#sub(text(0.5em)[1])$],[Spieltheorie], <A21_1>),
mynode((0,6), "12",[Spezielle Funktionen], <A12>),
mynode((1,6), "11",[Tensoralgebra und -analysis], <A11>),
mynode((2,6), [21$#sub(text(0.5em)[2])$],[Graphentheorie], <A21_2>),
mynode((0,7), [18],[Numerische Methoden], <A18>),
mynode((1,7), [20],[Simulation], <A20>),
mynode((2,7), [19$#sub(text(0.5em)[1])$],[Stochastische Prozesse und Modelle], <A19_1>),
mynode((0,8), [22],[Funktionalanalysis], <A22>),
mynode((1,8), [23],[Symmetriegruppen], <A23>),
mynode((2,8), [19$#sub(text(0.5em)[2])$],[Statistische Versuchsplanung], <A19_2>),
myedge(<A0.east>,<A1.west>,"-|>"),
myedge(<A1.south>,<A2.north>,"-|>"),
myedge(<A2.west>,<A3.east>,"-|>"),
myedge(<A13.south>,<A14.north>,"-|>"),
myedge(<A2.south>,<A4.north>,"-|>"),
myedge(<A4.south>,<A5.north>,"-|>"),
myedge(<A5.south>,<A6.north>,"-|>"),
myedge(<A14.south>,<A15.north>,"-|>"),
myedge(<A7_1.south>,<A7_2.north>,"-|>"),
myedge(<A7_2.south>,<A8.north>,"-|>"),
myedge(<A8.south>,<A9.north>,"-|>"),
myedge(<A9.south>,<A12.north>,"-|>"),
myedge(<A12.south>,<A18.north>,"-|>"),
myedge(<A10.south>,<A11.north>,"-|>"),
myedge(<A15.south>,<A16.north>,"-|>"),
myedge(<A17.south>,<A21_1.north>,"-|>"),
myedge(<A19_1.south>,<A19_2.north>,"-|>"),
// NEUES Edge: 1,3 (n3_1) → 3,2 (n2_3)
// Verlauf: rechts von n3_1 nach rechts, runter auf Höhe von n2_3, dann links zur Node
//9 → 22
edge(
vertices: (
<A9.east>,
(0, 5.2), // deutlich nach rechts → sichtbarer Knick
(0.5, 5.2), // dann nach links
(0.5, 8), // runter
<A22.east>,
),
corner: right,
corner-radius: 0pt, // abgerundete Ecken!
stroke: orange + 1.25pt,
marks: "-|>",
shift: (1pt, 1pt),
),
//10 → 22
edge(
vertices: (
<A10.west>,
(1, 5.2), // deutlich nach rechts → sichtbarer Knick
(0.5, 5.2), // dann nach links
(0.5, 8), // runter
<A22.east>,
),
corner: left,
corner-radius: 0pt, // abgerundete Ecken!
stroke: orange + 1.25pt,
marks: "-|>",
shift: (1pt, 1pt),
),
//3 → 7.2
edge(
vertices: (
<A3.west>,
(-0.85, 1), // deutlich nach rechts → sichtbarer Knick
(-0.85, 1), // dann nach links
(-0.85, 3), // runter
<A7_2.west>,
),
corner: left,
corner-radius: 0pt, // abgerundete Ecken!
stroke: red + 1.25pt,
marks: "-|>",
shift: (1pt, 1pt),
),
//13 → 4
edge(
vertices: (
<A13.west>,
(2, 0.18), // deutlich nach rechts → sichtbarer Knick
(1.5, 0.2), // dann nach links
(1.5, 2), // runter
<A4.east>,
),
corner: left,
corner-radius: 0pt, // abgerundete Ecken!
stroke: green + 1.25pt,
marks: "-|>",
shift: (2pt, 2pt),
),
//1 → 13
edge(
(rel: (0pt, 5mm), to: <A1.east>),
(rel: (0.1, 0.)),
(rel: (0pt, 5mm), to: <A13.west>),
"-|>",
corner-radius: 0pt ,
stroke: green.darken(30%) + 1.25pt,
),
//5 → 8
edge(
(rel: (0pt, 0mm), to: <A5.west>),
(rel: (-0.15, 0.)),
(rel: (0.08,0), to: <A8.east>),
(rel: (0.,0), to: <A8.east>),
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + olive,
),
//7_1 → 6
edge(
vertices: (
(rel: (0pt, -2pt), to: <A7_1.east>),
(0.25, 2.2),
(0.52, 2.2),
(0.52,4),
(rel: (0pt, 0pt), to: <A6.west>)
),
corner-radius: 0pt,
stroke: gray + 1.25pt,
marks: "-|>",
),
//4 → 7_1
edge(
(rel: (0pt, 5mm), to: <A4.west>),
(rel: (-0.1, 0.)),
(rel: (0pt, 5mm), to: <A7_1.east>),
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt ,
),
//9 → 10
edge(
(rel: (0pt, 5mm), to: <A9.east>),
(rel: (0.1, 0.)),
(rel: (0pt, 5mm), to: <A10.west>),
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt ,
),
//5 → 17
edge(
<A5.east>,
(rel: (0.07, 0.)),
(rel: (0, 0.5)),
(rel: (0pt, 10pt), to: <A17.north>),
<A17.north>,
"-|>",
corner-radius: 0pt ,
stroke: blue.lighten(20%) +1.25pt ,
),
//4 → 15
edge(
(rel: (0pt, -5mm), to: <A4.east>),
(rel: (0.1, 0.)),
(rel: (0pt, -5mm), to: <A15.west>),
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt ,
),
//8 → 16
edge(
(rel: (0.2,0), to: <A8.south>),
(rel: (0., 0.1)),
(rel: (1.3, 0.)),
(rel: (-0.115, 0), to: <A16.west>),
<A16.west>,
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + yellow.darken(20%),
),
//6 → 11
edge(
(rel: (0pt, -5mm), to: <A6.east>),
(rel: (0.065, 0.)),
(rel: (0.065,0), to: <A11.east>),
(rel: (0.,0), to: <A11.east>),
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + purple.lighten(20%),
),
//13 → 23
edge(
(<A13.east>),
(rel:(0.75,0)),
(rel:(0, 9.8)),// <----
(rel:(-3.38, 0)),
//(rel: (0.6, 0.), to: <A21_2.east>),
<A23.south>,
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + orange.darken(10%),
),
//15 → 21_1 21_2
edge(
(<A15.east>),
// Startpunkt
(rel: (0.5, 0)),
(rel: (0.5, 0.), to: <A21_1.east>),
<A21_1.east>,
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + blue,
),
edge(
(<A15.east>),
// Startpunkt
(rel: (0.5, 0)),
(rel: (0.5, 0.), to: <A21_2.east>),
<A21_2.east>,
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + blue,
),
//16 → 19_1 19_2
edge(
(<A16.east>),
(rel: (0.3, 0)),
(rel: (0.3, 0.), to: <A19_1.east>),
<A19_1.east>,
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + purple,
),
edge(
(<A16.east>),
(rel: (0.3, 0)),
(rel: (0.3, 0.), to: <A19_2.east>),
<A19_2.east>,
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + purple,
),
//17 → 21_2
edge(
(rel: (-0.2,0), to: <A17.south>),
(rel: (0, 0.2)),
(rel: (-.325, 0.)),
(rel: (-0.14, 0), to: <A21_2.west>),
<A21_2.west>,
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + red,
),
//17 → 19_1, 19_2
edge(
(<A17.west>),
(rel: (-0.075, 0)),
(rel: (-0.075,-0.20), to: <A19_1.west>),
(rel: (0.,-0.2), to: <A19_1.west>),
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + green,
),
edge(
(<A17.west>),
(rel: (-0.075, 0)),
(rel: (-0.075, 0.), to: <A19_2.west>),
<A19_2.west>,
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + green,
),
//19_2 → 20
edge(
(<A19_2.north>),
(rel: (-0.2, 0)),
(rel: (0, -0.1)),
(rel: (-0, 0.18), to: <A20.south>),
<A20.south>,
"-|>",
corner-radius: 0pt ,
stroke: 1.25pt + blue,
),
)
#show heading: it => {
set block(below: if it.level == 1 { 2em } else { 1em })
it
}
#counter(page).update(1)
#pagebreak()
#set text(font: "Atkinson Hyperlegible Next")
#set text(
font: "Atkinson Hyperlegible Next", //Serifenlose Schrift
size: 9pt,
lang: "de", //Deutsche Spracheinstellungen
)
#set par(
justify: true,
leading: 0.55em,
)
#set page(
//background: grid(columns: (1mm,) * 162, rows: (1mm,) * 230, stroke: 0.1mm),
margin: (
top: 18mm,
bottom: 20mm,
x: 15mm,
),
width:162mm,
height: 230mm,
)
//#set heading(numbering: "1.1.")
#set outline(indent: auto)
#set page(
header: context {
// 1. Kapitelstart-Check (wie zuvor)
let h1_on_page = query(heading.where(level: 1))
.any(it => it.location().page() == here().page())
if h1_on_page { return none }
let page_num = here().page()
// 2. Aktuelle Überschriften finden
let h1_current = query(heading.where(level: 1))
.filter(it => it.location().page() <= page_num).at(-1, default: none)
let h2_current = query(heading.where(level: 2))
.filter(it => it.location().page() <= page_num).at(-1, default: none)
// Hilfsfunktion: Nummer + Text zusammenfügen
let format-head(h) = {
if h != none {
// Falls die Überschrift eine Nummerierung hat, diese anzeigen
if h.numbering != none {
numbering(h.numbering, ..counter(heading).at(h.location()))
[ ] // Kleiner Abstand
}
h.body
}
}
// 3. Layout (Zahlen außen, Text innen oder wie gewünscht)
set text(size: 9pt, style: "italic") // Header dezent formatieren
if calc.even(page_num) {
// Gerade Seite: [Seite] [Kapitelnummer Text]
grid(
columns: (20pt, 1fr),
align(left)[#page_num],
align(right)[#format-head(h1_current)]
)
} else {
// Ungerade Seite: [Unterkapitelnummer Text] [Seite]
grid(
columns: (1fr, 20pt),
align(left)[#format-head(h2_current)],
align(right)[#page_num]
)
}
}
)
#show selector(<nonumber>): set heading(numbering: none)
= Vorwort <nonumber>
Dem vorliegenden Band 2 dieser Lehrbuchreihe kommt ebenso wie dem Band 1 insofern eine besondere Bedeutung innerhalb des gesamten Lehrwerkes zu, als nahezu alle anderen Bände darauf aufbauen.
Ein Teil der in diesem Buch behandelten Gegenstände ist auch im Lehrplan unserer Oberschulen enthalten. Ein Weglassen des dort bereits Dargebotenen hätte aber zu einer unzusammenhängenden Darstellung des Gebietes geführt; außerdem wäre nicht gewährleistet, daß alle Leser mit den gleichen Voraussetzungen die weiteren Bände studieren können.
Eine korrekte Anwendung mathematischer Methoden setzt die genaue Kenntnis der zugrunde liegenden Begriffe voraus. Es muß dem Leser daher dringend nahegelegt werden, sich um ein volles Verständnis der eingeführten Begriffe zu bemühen. Anhand von vielen Beispielen wird gezeigt, wie mathematische Begriffe in den Anwendungen zu interpretieren sind. Ein gründliches Studium des Textes und das selbständige Lösen der über 100 Übungsaufgaben sollte den Leser in die Lage versetzen, die spezifische Anwendbarkeit der behandelten Begriffe und Methoden in seinem Fachgebiet selbst zu erkennen.
Im Interesse einer straffen Darstellung mußte auf eine Reihe von Beweisen verzichtet werden. Alle Aussagen werden aber erläutert und - soweit möglich - geometrisch interpretiert.
Für wertvolle Hinweise danken wir vor allem dem Herausgeber, Herrn Prof. Dr. O. Greuel (Mittweida), den Gutachtern, Herrn Prof. Dr. W. Dück (Berlin) und Herrn Prof. Dr. H. Goering (Magdeburg), sowie Herrn Prof. Dr. G. Opitz (Dresden). Besonderer Dank gebührt Frau I. Kamenz für das sorgfältige Schreiben des Manuskripts. Dem Verlag sei für die gute Zusammenarbeit herzlich gedankt.
Dresden, Januar 1973 #h(1fr) E. A. Pforr
#h(1fr) W. Schirotzek
= Vorwort zur 6. Auflage <nonumber>
In dieser Auflage wurden gegenüber der vorangegangenen an zwei Stellen inhaltliche Veränderungen größeren Umfangs vorgenommen. Im Hinblick auf den Einsatz von elektronischen Rechnern, insbesondere auch von Taschenrechnern, war die Darstellung der Näherungsverfahren (Abschnitt 7.7.) zu überarbeiten. Der algorithmische Aspekt wurde stärker herausgearbeitet, auf die Formulierung von Algorithmen in einer Programmiersprache jedoch verzichtet. Außerdem wurde der Abschnitt über elliptische Integrale (9.3.5.) erweitert.
Für die wertvolle Unterstützung bei der Überarbeitung von Abschnitt 7.7. sei Herrn Dr. sc. nat. S. Dietze (Dresden) herzlich gedankt.
Dresden, Juli 1985 #h(1fr) E. A. Pforr
#h(1fr)W. Schirotzek
#pagebreak()
#outline()
#pagebreak()
#set heading(numbering: "1.1.1.")
TEIL 1: DIFFERENTIALRECHNUNG
= Problemstellung und Historisches
Zur mathematischen Beschreibung von Naturvorgängen, aber auch von technischen und ökonomischen Prozessen ist die Differentialrechnung ein unentbehrliches Hilfsmittel. Es ist daher nicht verwunderlich, daß gerade von Naturforschern entscheidende Anstöße zu ihrer Entwicklung ausgingen. Wichtige Vorarbeiten wurden im 16. und 17. Jahrhundert geleistet. Die eigentlichen Urheber dieser Disziplin sind aber Isaac Newton (1643-1727) und Gottfried Wilhelm Leibniz (1646-1716), die die Differential- (und Integral-) Rechnung etwa gleichzeitig und voneinander unabhängig zu einem Kalkül entwickelten. Newton schuf seine "Fluxionsrechnung“ bei der Ableitung des Gravitationsgesetzes aus den Keplerschen Gesetzen der Planetenbewegung. Leibniz, der auch das Symbol ${d y}/{d x}$ einführte, ging von dem Problem aus, an eine Kurve in einem vorgegebenen Kurvenpunkt die Tangente zu legen ("Tangentenproblem“). Die Arbeiten dieser genialen Forscher lösten eine außerordentlich rasche Entwicklung der Mathematik aus, die ihrerseits in hohem Maße befruchtend auf andere Wissenschaften wirkte. Entscheidenden Anteil an dieser Entwicklung hatten die Brüder Jakob und Johann Bernoulli (1654-1705 bzw. 1667-1748), auf deren Vorlesungen auch das erste, 1696 erschienene Lehrbuch der Differential- und Integralrechnung des Marquis de l'Hospital (1661-1704) basiert.
Wie wir noch sehen werden, beruht die Differentialrechnung, ebenso wie die Integralrechnung, auf dem Begriff des _Grenzwertes_. Zeitlich ging jedoch die kalkülmäßige Entwicklung der Differential- und Integralrechnung der strengen Begriffsdefinition voran. Daraus entstanden immer häufiger Schwierigkeiten und Unstimmigkeiten, die sich zunächst nicht überwinden ließen. Schließlich führte Jean le Rond d'Alembert (1717-1783) den Grenzwertbegriff in die Mathematik ein. Doch erst Bernard Bolzano (1781-1848) und Augustin Louis Cauchy (1789-1857) wendeten diesen Begriff konsequent an und stellten damit die Infinitesimalrechnung (zu der man neben der Differential- und Integralrechnung auch die Theorie der unendlichen Reihen zählt) auf ein solides Fundament.
Vor einem Aufbau der Differentialrechnung ist also der Grenzwertbegriff für Funktionen zu behandeln. Zwangsläufig wird man damit zum Begriff der _Stetigkeit_ geführt. Die eigentliche Differentialrechnung beginnt mit der Definition der _Ableitung_ einer Funktion.
Alle drei Begriffe werden zur exakten Beschreibung bestimmter Sachverhalte in den unterschiedlichsten Gebieten herangezogen. So kann man mit dem Grenzwertbegriff z. B. das Verhalten einer zeitabhängigen Größe, "nach sehr langer Zeit“ charakterisieren, mit dem Begriff der Stetigkeit bzw. Unstetigkeit den "kontinuierlichen“ bzw. "sprunghaften“ Ablauf eines Vorgangs erfassen und mit der Ableitung die "Änderungsgeschwindigkeit" eines Prożesses beschreiben.
Die mathematischen Möglichkeiten reichen jedoch über die unmittelbare Anwendbarkeit dieser Begriffe weit hinaus. So werden wir unter Verwendung der Differentialrechnung u.a. Näherungsformeln für (nichtrationale) Funktionen herleiten, Methoden zur Ermittlung von Extremwerten angeben und Verfahren zur numerischen Lösung von Gleichungen behandeln. Dem "Praktiker“ werden damit Hilfsmittel zur Verfügung gestellt, auf die er fortlaufend zurückgreifen muß.
#pagebreak()
= Grenzwerte
//== Grenzwert einer Funktion für $\boldsymbol{x} \rightarrow \boldsymbol{x}_0$
// 2.1.1. Definition des Grenzwertes einer Funktion für $\boldsymbol{x} \rightarrow \boldsymbol{x}_0$
// Im folgenden bedeutet „Funktion“ stets „reellwertige Funktion einer reellen Variablen".
// Als Vorbereitung auf den Grenzwertbegriff für Funktionen behandeln wir das
// Beispiel 2.1: An die Parabel $y=x^2$ werde die Sekante durch den festen Kurvenpunkt $P_0\left(\frac{1}{2}, \frac{1}{4}\right)$ und den variablen Kurvenpunkt $P\left(x, x^2\right)$ gelegt (s. Bild 2.1). Der Anstieg der Sekante ist eine Funktion $f$ von $x$ :
// $$
// f(x)=\frac{x^2-\frac{1}{4}}{x-\frac{1}{2}} \quad\left(x \neq \frac{1}{2}\right) .
// $$
$x arrow.r x_0$
#import "@preview/cetz-plot:0.1.3": plot
#let intersection(plotA, plotB, style: (stroke: red + 2pt)) = {
let dataA = plotA.first().data
let dataB = plotB.first().data
let points = dataA.filter(x => x in dataB)
for ((i, point)) in points.enumerate() {
plot.add-anchor("i_" + str(i),point )
}
plotA
plotB
}
#canvas(
length: 1cm,
{
import draw: *
plot.plot(
name: "my_plot",
size: (5, 5),
axis-style: "school-book",
x-label: [$x$],
y-label: [$y$],
{
intersection(
plot.add(
style: (stroke: black + 1.5pt),
domain: (-1, 1),
x => calc.pow(x, 4) - 2 * calc.pow(x, 2) + 1,
),
plot.add(
style: (stroke: black + 1.5pt),
domain: (-1, 1),
x => -(calc.pow(x, 4) - 2 * calc.pow(x, 2) + 1),
)
)
}
)
// reference the point with {plot name}.i_{number}
line("my_plot.i_1", ((), "|-", (0,3.5)), mark: (start: ">"), name: "line")
content("line.end", [Here], anchor: "south", padding: .1)
},
)
#let intersection(plotA, plotB, style: (stroke: red + 2pt)) = {
import draw: *
let dataA = plotA.first().data
let dataB = plotB.first().data
plot.annotate({
hide({
intersections("i", line(..plotA.first().data), line(..plotB.first().data))
})
for-each-anchor("i", (name) => {
circle("i." + name, radius: 0.05, fill: red)
})
})
plotA
plotB
}
#canvas(
length: 1cm,
{
import draw: *
plot.plot(
name: "plot",
size: (10, 10),
axis-style: "school-book",
x-label: [$x$],
y-label: [$y$],
{
intersection(
plot.add(
style: (stroke: black + 1.5pt),
domain: (-1, 1),
x => calc.pow(x, 4) - 2 * calc.pow(x, 2) + 1,
),
plot.add(
style: (stroke: black + 1.5pt),
domain: (-1, 1),
x => -(calc.pow(x, 4) - 2 * calc.pow(x, 2) + 0.5),
),
)
},
)
},
)
#import "@preview/cetz:0.4.0"
#import "@preview/cetz-plot:0.1.2"
#let my-plot = cetz-plot.plot.plot.with(axis-style: "school-book")
#cetz.canvas({
import cetz.draw: *
import cetz-plot: *
set-style(
axes: (
stroke: (dash: "dotted", paint: gray),
x: (mark: (start: ">", end: ">"), padding: 1),
y: (mark: none),
tick: (stroke: gray + .5pt),
),
)
my-plot(
size: (5, 4),
y-tick-step: none,
{
plot.add(calc.sin, domain: (0, calc.pi * 2))
},
)
})
#let plot-cfg = (size: (5, 4), axis-style: "school-book")
#cetz.canvas({
import cetz.draw: *
import cetz-plot: *
plot.plot(..plot-cfg, {
plot.add(calc.sin, domain: (0, calc.pi * 2))
})
})
#import "@preview/simple-plot:0.3.0": plot
//#set page(width: auto, height: auto, margin: 0.5cm)
// Showcases: major grid only, grid-label-break, axis extension, integer ticks
#plot(
xmin: -3.1, xmax: 3.1,
ymin: -1, ymax: 9,
xlabel: $x$,
ylabel: $y$,
//show-grid: "major",
(fn: x => calc.pow(x, 2), stroke: blue + 1.5pt, label: $x^2$, label-pos: 0.7, label-side: "below-right"),
)
#plot(
xmin: -2 * calc.pi, xmax: 2 * calc.pi,
ymin: -2, ymax: 2,
width: 10, height: 5,
show-grid: "major",
xtick: (-2*calc.pi, -calc.pi, 0, calc.pi, 2*calc.pi),
xtick-labels: ($-2pi$, $-pi$, $0$, $pi$, $2pi$),
(fn: x => calc.sin(x), stroke: blue + 1.2pt),
(fn: x => calc.cos(x), stroke: red + 1.2pt),
)
#plot(
xmin: -2, xmax: 5,
ymin: 0, ymax: 32,
show-grid: true,
(fn: x => calc.pow(2, x), stroke: blue + 1.5pt, label: $2^x$),
(fn: x => calc.pow(3, x), stroke: red + 1.5pt, label: $3^x$),
)