Python für Ingenieure für Dummies - Carsten Knoll - E-Book

Python für Ingenieure für Dummies E-Book

Carsten Knoll

0,0
23,99 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.

Mehr erfahren.
Beschreibung

Schlichtes Ausführen fertiger Software wird den Bedürfnissen des Ingenieuralltags nicht mehr gerecht. Oft muss Programmcode selbst entwickelt oder angepasst werden. Aber Ingenieure sind keine Softwareentwickler. Mit Python steht ein mächtiger und flexibler Werkzeugkasten zur Verfügung, der es erlaubt, eine große Klasse von Ingenieurproblemen - oft mit wenig Aufwand - zu lösen. Die Kernaufgaben sind dabei meist: Daten akquirieren, Lösungsalgorithmen anwenden, Ergebnisse visualisieren. Das Buch zeigt anhand zahlreicher Beispiele aus unterschiedlichen Anwendungsfeldern der Ingenieurwissenschaften, wie Python zur Lösung dieser Aufgaben eingesetzt werden kann. Gleichzeitig wird das nötige Hintergrundwissen vermittelt, um das Gelernte auf eigene Fragestellungen zu transferieren. Die vermittelten Kenntnisse sind anwendbar auf Übungsaufgaben im Studium genauso wie auf Probleme aus der Praxis.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 433

Veröffentlichungsjahr: 2021

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Python für Ingenieure für Dummies

Schummelseite

DATENTYPEN

360

int

104.5

float

1+2j

complex

True, False

bool

None

NoneType

[1, 2, 3]

list

(1, 2, 3)

tuple

{'a': 1, 'b': 2}

dict

'abc', ”abc”

str

f”Var: {var}”

f-String

b”abc”

bytes

KONTROLLSTRUKTUREN

if cond:, elif cond:, else:

If-Bedingung

while cond:

While-Schleife

for element in list:

Iteriere über Elemente

for i in range(a, b):

Iteriere über Zahlen

for i, element in enumerate(list):

Iteriere über Index und Inhalt

LISTENOPERATIONEN

list[0]

erstes Element

list[-1]

letztes Element

list[0:10]

Teilliste mit 10 Elementen

list[0:2:10]

Teilliste mit Schrittweite 2, 5 Elemente

list[::-1]

Liste umdrehen

a.append(e)

Element am Ende anfügen

del list[0]

erstes Element löschen

len(a)

Länge der Liste

e in a

Prüfen, ob Element in Liste enthalten

b = list(a)

Liste kopieren

a + b

Listen verknüpfen

[e for e in list if cond]

List-Comprehension

NUMPY-ARRAYS ANLEGEN

np.array([10, 20, 30, 40])

1D-Array aus einer Liste

np.array([[10, 20], [30, 40]])

2D-Array aus Liste von Listen

np.arange(start, stop, step)

Sequenz von Zahlen (Schrittweite vorgegeben)

np.linspace(start, stop, N)

Sequenz von N Zahlen (linear skaliert)

np.logspace(start, stop, N)

Sequenz von N Zahlen (logarithmisch skaliert)

np.zeros(shape)

Array voller Nullen mit Shape shape

np.ones(shape)

Array voller Einsen mit Shape shape

np.random.random(shape)

zufälliges Array mit Shape shape

np.diag(x)

quadratisches Array mit Diagonale x

NUMPY-ARRAYS INDIZIEREN

x[0]

»erstes« (vorderstes) Element von x

x[-1]

letztes Element von x

x[:3]

Elemente von x mit den Indizes 0, 1, 2

x[3:]

Elemente von x ab dem Index 3

x[:-2]

alle Elemente von x außer den beiden letzten

x[-5:]

die fünf letzten Elemente von x

x[4:10:2]

Elemente von x mit den Indizes 4, 6, 8

x[:]

alle Elemente von x

x[::-1]

alle Elemente von x in umgekehrter Reihenfolge

y[0, :]

erste Zeile (Index 0) von y als 1D-Array

y[2:3, :]

dritte Zeile (Index 2) von y als 2D-Array

y[:, -4:]

vier letzte Spalten von y als 2D-Array

y[1:, [0, -1]]

erste und letzte Spalte von y, aber ohne erste Zeile

y[1:, [0, -1]]

erste und letzte Spalte von y, aber ohne erste Zeile

x[x>0.7]

alle Werte von x, die größer als 0.7 sind

NUMPY-ARRAYS VERBINDEN

np.concatenate((x1, x2))

zwei Arrays hintereinanderhängen

np.row_stack((x1, x2))

zwei Arrays zeilenweise stapeln

np.col_stack((x1, x2, x3))

drei Arrays spaltenweise stapeln

NUMPY-ARRAYS UMFORMEN

x.T

x transponieren

x.flatten()

x auf 1D-Array reduzieren

x.squeeze()

überflüssige Dimensionen (mit Länge 1) von x entfernen

x.reshape(3, 7)

x-Elemente in 3 Zeilen und 7 Spalten anordnen

x.reshape(3, -1)

x-Elemente in 3 Zeilen mit passender Spaltenzahl anordnen

MIT NUMPY-ARRAYS RECHNEN

3*x

Array mit elementweisem Produkt aus 3 und jeweiligem x-Element

4+x

Array mit elementweiser Summe aus 4 und jeweiligem x-Element

x1+x2

Array mit elementweiser Summe von x1 und x2

x1*x2

Array mit elementweisem Produkt von x1 und x2

x1@x2

Skalarprodukt zwischen zwei 1D-Arrays gleicher Länge

x@A

interpretiert als: Zeilenvektor (1D-Array) mal Matrix (2D-Array)

A@x

interpretiert als: Matrix (2D-Array) mal Spaltenvektor (1D-Array)

x**3

Array mit 3. Potenz jedes x-Elements

np.exp(x)

Array mit Exponentialfunktion, angewendet auf jedes x-Element

Passende Dimensionen werden vorausgesetzt, sonst: BroadcastingError.

MINIBEISPIEL SIMULATION

MINIBEISPIEL OPTIMIERUNG

MINIBEISPIEL FUNKTIONSAPPROXIMATION

MINIMALBEISPIEL ANNAHMENPRÜFUNG

MINIMALBEISPIEL UNITTEST

KOMBINATORISCHE FUNKTIONEN

FOURIER-TRANSFORMATION

np.fft.fft(xx)

diskrete Fourier-Transformation

np.fft.ifft(XX)

inverse DFT

np.fft.fftfreq(N, d=dt)

passende Stützfrequenzen

np.fft.fftshift(ff)

Nullfrequenz verschieben

scipy.signal.periodogram(xx, fs=fs)

Leistungsdichtespektrum berechnen

scipy.signal.welch(xx, fs=fs)

Welch-Methode

PLOTTEN: GRUNDLAGEN

plt.figure()

neue Abbildung

plt.subplot(234)

Subplot unten links für 2 Zeilen und 3 Spalten

plt.plot(xx, yy)

Linienplot zeichnen

plt.tight_layout()

Elemente platzsparend ausrichten

plt.savefig(”my_plot.pdf”)

Diagramm abspeichern

plt.show()

Diagramm anzeigen

PLOTTEN: DEKORATIONEN

plt.xlim(-1, 1)

Definitionsbereich einstellen

plt.title(”Überschrift”)

Diagrammüberschrift

plt.xlabel(”$t$ [s]”)

Achsenbeschriftung

plt.text(1, 3, ”$x_0$”)

Text hinzufügen

plt.grid(True)

Gitter aktivieren

plt.legend()

Legende basierend auf label-Parametern

PLOTTEN: STYLING

figsize=(4, 3)

Diagrammgröße 4 × 3 Zoll (1 Zoll = 22.4 mm)

color=”red”

Linienfarbe

linestyle=”––”

gestrichelte Linie

linewidth=3

Linienbreite 3 pt

marker=”x”

Marker für Stützpunkte

markersize=4

Markergröße

label=”$x_1$”

Linienbeschriftung für Legende

Python für Ingenieure für Dummies

Bibliografische Informationder Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie;detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

© 2022 Wiley-VCH GmbH Weinheim

Wiley, the Wiley logo, Für Dummies, the Dummies Man logo, and related trademarks and trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other countries. Used by permission.

Wiley, die Bezeichnung »Für Dummies«, das Dummies-Mann-Logo und darauf bezogene Gestaltungen sind Marken oder eingetragene Marken von John Wiley & Sons, Inc., USA, Deutschland und in anderen Ländern.

Das vorliegende Werk wurde sorgfältig erarbeitet. Dennoch übernehmen Autoren und Verlag für die Richtigkeit von Angaben, Hinweisen und Ratschlägen sowie eventuelle Druckfehler keine Haftung.

Print ISBN: 978-3-527-71767-5ePub ISBN: 978-3-527-82846-3

Coverillustration: Carsten Knoll – https://python-fuer-ingenieure.deKorrektur: Matthias Delbrück, Dossenheim/Bergstraße

Über die Autoren

Carsten Knoll studierte an der TU Dresden Mechatronik und ist dort inzwischen als Postdoktorand am Institut für Regelungs- und Steuerungstheorie tätig. Seine ersten Erfahrungen mit Python machte er bereits im ersten Semester in einem inspirierenden Workshop und vertiefte sie beständig durch den Einsatz in diversen Lehrveranstaltungen sowie Tätigkeiten in verschiedenen Instituten und Laboren. Um seine Begeisterung zu teilen und dieses Wissen weiterzugeben, initiierte er 2010 zusammen mit anderen Doktoranden eine fächerübergreifende Lehrveranstaltung und entwickelte sie seitdem inhaltlich und methodisch zum aktuellen »Pythonkurs für Ingenieur:innen« weiter.

Neben Regelungstechnik und Python-Programmierung befasst er sich unter anderem mit Aspekten des Maschinellen Lernens und der digitalen Wissensrepräsentation – sowie mit der Frage, wie diese Ansätze zur Lösung der großen Herausforderungen des 21. Jahrhunderts beitragen können.

Robert Heedt ist ebenfalls Absolvent der TU Dresden und Ingenieur der Elektrotechnik. Sein Arbeitsgebiet ist die Regelungstechnik, aus dem die Rechentechnik schon lange nicht mehr wegzudenken ist. Nach jahrelanger Odyssee durch die Welt der Programmiersprachen ist er jetzt im Python-Hafen gelandet.

Carstens Widmung

Für Maria und meine Eltern. Ohne Euch hätte ich das nicht geschafft.

Roberts Widmung

Für meine Eltern. Danke für Eure bedingungslose Unterstützung.

Danksagung

Die Autoren bedanken sich aufs Herzlichste bei Frau Andrea Baulig vom Verlag Wiley-VCH für den Anstoß zu diesem Projekt, die sehr konstruktive Kombination aus Motivation und Ermahnung sowie die Übernahme organisatorischer Details. Herrn Prof. Smits danken wir ebenfalls sehr herzlich für die sehr professionelle fachliche Korrektur des Manuskripts und die wertvollen Hinweise (alle verbliebenen Schwächen des Buches gehen natürlich auf unsere Kappe).

Wir danken auch unseren Kolleginnen und Kollegen sowie den Studierenden am Institut für Regelungs- und Steuerungstheorie, die sowohl mit Tipps als auch mit Fragen und Diskussionen eine beständige Inspirationsquelle für dieses Buch waren.

Nicht zuletzt gilt unser Dank den vielen Menschen, die durch Fähigkeiten, Fleiß und Enthusiasmus die Python-Welt zu dem gemacht haben, was sie ist.

Inhaltsverzeichnis

Cover

Titelblatt

Impressum

Über die Autoren

Einleitung

Über dieses Buch

Törichte Annahmen über den Leser (m/w/d)

Ein Wort zur Sprache

Was Sie nicht lesen müssen

Wie dieses Buch aufgebaut ist

Symbole, die in diesem Buch verwendet werden

Wie es weiter geht

Teil I: Los geht's

Kapitel 1: Erstkontakt

Was ist Python und wozu ist es gut?

Jupyter-Notebook im Web

Besser als Ihr »Casio«

Erstes Date mit NumPy-Arrays

Bunte Bilder mit Matplotlib

Zusammenfassung

Kapitel 2: Installation und Inbetriebnahme

Python installieren

Alternativen zum Texteditor

Zusammenfassung

Kapitel 3: Grundlagen

Elementare Datentypen und Operationen

Listen, Strings und andere Sequenzen

Verzweigungen und Schleifen

List Comprehensions – Listen kompakt bauen und filtern

Funktionen

Pakete, Module und Namensräume

Fehlermeldungen verstehen und lieben lernen

Zusammenfassung

Teil II: Rechnen und Plotten

Kapitel 4: Effiziente Numerik mit NumPy

Arrays – Felder und ihre Bewirtschaftung

Array-Typen, elementweise Vergleiche und Indizierung von Arrays mit Arrays

Felder mit dem Mähdrescher abernten: Effiziente NumPy-Funktionen

Arrays, Matrizen – Wo ist denn da der Unterschied?

Zusammenfassung

Kapitel 5: Ein bisschen Mathe – So viel Spaß muss sein

Komplexe Zahlen – Nur manchmal reell, aber immer fantastisch

Lineare Gleichungssysteme – Von trivial bis unlösbar

Eigenwerte und Singulärwerte – Matrizen auf das Wesentliche reduziert

Zusammenfassung

Kapitel 6: Brunftzeit für Termhirsche

Aller Anfang ist sympel

Gleichungen lösen

Agent Smith in meiner Formel? Matrix und Vektor

Differenzial- und Integralrechnung

Symbolische Ergebnisse weiterverwenden

Was sonst noch geht

Zusammenfassung

Kapitel 7: Visualisierung

Diagramme zeichnen für Anfänger: Grundlagen

Gestochen scharf bis zum Schluss: Sauberer Export

Eine Schicht tiefer: Objektorientierung

Im Bilderzoo: Mehr Diagrammtypen

Zeit für Bewegung: Animationen

Zusammenfassung

Teil III: Fortgeschrittene Ingenieursmethoden

Kapitel 8: So tun, als ob: Modellbildung und Simulation

Beschreibung dynamischer Systeme: Ich krieg' Zustände

Dynamische Systeme lösen

Was beim Simulieren schiefgehen kann

Ruhelagen, (In-)Stabilität, exponentielles Wachstum und Eigenwerte

Wunschverhalten erzeugen: Etwas Regelungstechnik mit Tempomat

Zusammenfassung

Kapitel 9: Optimierung – Besser geht's nicht

Numerische Optimierung: Wie es grundlegend funktioniert

Nicht-lineare Gleichungen lösen durch Minimierung des Fehlers

Lokale Minima und n Dimensionen

Optimale Steuerung

Optimierung mit Begrenzungen …

… und Nebenbedingungen

Fit for Fun: Funktionsapproximation

Zusammenfassung

Kapitel 10: Mechanik – Ganz ohne schmutzige Hände

Statik und Festigkeitslehre – Bis sich die Balken biegen

Kinematik – Zwangsläufig gut

Kinetik: Volle Kraft voraus

Zusammenfassung

Kapitel 11: Fourier-Analyse – Python in der Disco

Die Fourier-Transformation der kontinuierlichen Welt

Diskrete Fourier-Transformation auf dem Papier

Die DFT in Python

Fourier-Analyse

Zusammenfassung

Kapitel 12: Kombinatorik, Zufall und Statistik

Kombinatorik – So viele Möglichkeiten

Pseudozufall – Abzählreime 2.0

Histogramme und Verteilungen

Der Mittelwert und seine Freunde

Statistische Unsicherheit visuell darstellen

Zusammenfassung

Kapitel 13: Python im Labor – Steuern, Messen, Filtern, Darstellen

Einordnung: In welchen Situationen ist Python sinnvoll?

Schnittstellen und Busse

Netzwerksockets

Schnittstellen über kompilierte Treiber ansprechen

Allgemeine Hinweise zur Laborautomatisierung

Rauschen und wie man damit umgeht

Zusammenfassung

Teil IV: Schöner, schneller, robuster

Kapitel 14: Echt Klasse: Fortgeschrittene Programmierung

Objektorientierung für Normalsterbliche

Funktionen, die Funktionen bauen

Exceptions für sich gewinnen

Zusammenfassung

Kapitel 15: Profiling und Performanz-Optimierung

Wärmeleitung mit Python simulieren

Wie schlimm ist es wirklich? Performanz messen

NumPy seine Arbeit machen lassen

Fremdsprachen willkommen – Das »Foreign Function Interface«

Gerade noch rechtzeitig – Just-in-Time-Kompilierung

Funktionen im Profil betrachtet

Zusammenfassung

Kapitel 16: Von den Profis lernen – Das Wichtigste zur Softwaretechnik

Seismografen im Kartenhaus: Assertions und Unittests

Ghostbusters: Interaktives Fehlersuchen

Quellcode mit Stil: PEP8

Ordnung und Sicherheit: Versionskontrolle mit Git

Zusammenfassung

Teil V: Der Top-Ten-Teil

Kapitel 17: Die 10 nützlichsten Module, die bisher nicht erwähnt wurden

Kommandozeilenargumente auswerten

Attraktive Benutzeroberflächen

Objekte inspizieren

Mit Daten und Uhrzeiten rechnen

Parallelisierung in mehreren Prozessen

Python-Objekte als Dateien abspeichern

Reguläre Ausdrücke

Typenannotationen

Datenauswertung mit pandas

Maschinelles Lernen mit scikit-learn

Kapitel 18: 10 fiese Fallstricke und 3 Mal schwarze Python-Magie

Code an der falschen Stelle bearbeitet oder installiert

Syntaxfehler durch falsche Einrückung

Python 2.x: Semikompatibler Gespenster-Code

Verwirrung mit globalen und lokalen Variablen

Wiederholter import bleibt wirkungslos

lambdify und Arrays

Konversion von SymPy-Matrizen zu NumPy-Arrays

Der Rückgabetyp von sympy.solve

Versehentliches Broadcasting

Backslashes in Strings

Tricksereien mit Indizes

Fallunterscheidungen in Zuweisung und als Index

Für Furchtlose: »Spezielle« Module

Kapitel 19: 10 nützliche Links

docs.python.org und pypi.org

pythontips.com

github.com/search

pythex.org

computers-are-fast.github.io

stackoverflow.com

sphinx-doc.org

hackerrank.com/domains/python

cscircles.cemc.uwaterloo.ca

planet.scipy.org

Stichwortverzeichnis

End User License Agreement

Tabellenverzeichnis

Kapitel 12

Tabelle 12.1: Übersicht über kombinatorische Funktionen.

Orientierungspunkte

Cover

Titelblatt

Impressum

Über die Autoren

Inhaltsverzeichnis

Einleitung

Fangen Sie an zu lesen

Stichwortverzeichnis

WILEY END USER LICENSE AGREEMENT

Seitenliste

1

2

3

4

5

6

9

10

11

23

24

25

26

27

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

386

387

388

389

391

392

393

394

395

396

397

398

399

400

401

402

403

404

405

406

409

410

411

412

413

414

Einleitung

»Dem Ingenieur ist nichts zu schwör!« – Diese Herangehensweise hat über viele Jahre mehr oder weniger das Bild von Ingenieurinnen und Ingenieuren geprägt. Seit der Entstehungszeit dieses Credos in der Ära der Reißbretter und Tabellenbücher haben sich die Ingenieurwissenschaften aber erheblich weiterentwickelt. Digitale Werkzeuge bestimmen mehr denn je den Ingenieuralltag. Sie ermöglichen es, in kurzer Zeit Probleme zu lösen, die noch vor einer Generation unlösbar schienen. Mit diesen gestiegenen (und permanent weiter steigenden) Möglichkeiten wachsen aber auch die Erwartungshaltung und die Anforderung an Ingenieur:innen.

Der souveräne Umgang mit digitalen Werkzeugen ist kein Selbstläufer, sondern muss mit Mühe und Aufwand erlernt werden. Um so ärgerlicher ist es, wenn die hart erarbeiteten Fähigkeiten aus der Mode kommen oder sich aufgrund von Lizenzbeschränkungen (zum Beispiel beim Wechsel aus der Hochschule in ein Startup) nicht anwenden lassen. Die Programmiersprache Python und das darauf basierende Ökosystem aus Zusatzpaketen bieten vor diesem Hintergrund eine exzellente Wahl. Einerseits steigt die Popularität von Python seit den 1990ern moderat, aber beständig – das genaue Gegenteil von sonst häufigen Hype-Zyklen. Zum anderen sind alle relevanten Komponenten freie Software und plattformunabhängig – mehr Freiheit geht nicht.

Leider ist die Ingenieur-Ausbildung teilweise erstaunlich rückständig konservativ, weswegen das Lösen von Ingenieur-Problemen mithilfe digitaler Werkzeuge bisher kaum als Lehrveranstaltung angeboten wird – oder wenn, dann oft als kommerziell motivierte externe »Produktschulung« mit den oben angedeuteten Lizenz- und Abhängigkeitsproblemen. Das vorliegende Buch soll dem Abhilfe schaffen.

Über dieses Buch

Dieses Buch soll Sie befähigen, vielfältige Aufgabenstellungen mit Python zu lösen. Es vermittelt dabei sowohl das grundsätzliche Herangehen als auch ganz konkrete Tipps und Tricks. Um dieses Wissen möglichst interessant, nachvollziehbar und anwendungsfreundlich darzustellen, werden Sie in diesem Buch auf eine Vielzahl von Beispielen treffen. Manche nur für einen dreizeiligen Codeschnipsel, andere für ein komplexeres Szenario, das sich einer praxisrelevanten Fragestellung widmet. Dabei finden Sie einen thematischen Streifzug durch viele Ingenieurdisziplinen: Von der Biegelinie eines Balkens über optimale Mischverhältnisse in der Verfahrenstechnik und die jω-Wechselstromrechnung bis zur Fourier-Analyse und Simulation eines Regelkreises im Zustandsraum ist (fast) alles dabei, was das Herz begehrt.

Zum Ingenieuralltag gehört auch der Umgang mit Zielkonflikten: Ein Fahrradrahmen kann zum Beispiel entweder extrem leicht oder extrem stabil sein. Am sinnvollsten ist aber ein auf typische Anwendungsfälle zugeschnittener Kompromiss. So ähnlich ist es auch bei diesem Buch: Die behandelten Code-Beispiele könnten entweder sehr einfach gestrickt sein, wären aber dafür weit weg von jedem Anwendungsbezug. Das andere Extrem wäre, an jedes Beispiel einen harten Realismusanspruch zu stellen und dabei die Verständlichkeit außer Acht zu lassen.

Ziel des Buches ist es, für eine möglichst große Zielgruppe möglichst oft den optimalen Bereich zwischen langweiliger Trivialität und demotivierender Komplexität zu treffen.

Törichte Annahmen über den Leser (m/w/d)

Diese Buch richtet sich an Menschen, die sich für Technik interessieren, wie sie funktioniert und wie man sie verbessern kann. Wir vermuten, dass sich dieses Interesse in einer gewissen Vorbildung niedergeschlagen hat und wollen unsere Zielgruppe weder langweilen noch überfordern. Idealerweise haben Sie

vier Semester oder mehr eines Ingenieurstudiengangs auf dem Buckel,

keine Angst vor gelegentlichen Gleichungen,

schon ein bisschen Programmiererfahrung (Variablen, Typen, Verzweigungen, Schleifen, ...),

einen Computer, dem üblicherweise Sie Anweisungen geben (und nicht umgekehrt),

»Mut zur Lücke« – also die Bereitschaft, auch mal etwas grob zu überfliegen, was für Sie aktuell gerade nicht so relevant ist, und

Sinn für Humor sowie die Bereitschaft, Fehler zu machen, Fehler zu suchen und daraus zu lernen.

Ein Wort zur Sprache

Die Entstehung des Buches fällt in eine Zeit, in der mitunter sehr aufgeregt emotional über das Für und Wider verschiedener Formulierungen gestritten wird. Einige potenzielle Leser:innen werden das Buch vielleicht hochmütig ignoriert haben, weil der grammatikalisch maskuline Titel »für Ingenieure« ihrem Anspruch an geschlechtsneutrale Sprache zuwiderläuft. Andere werden beim ersten Auftreten von Syntaxinnovationen wie »Ingenieur:innen« einen mittleren Empörungsanfall bekommen und eine rituelle Verbrennung des Buches in Erwägung ziehen. Wir vertrauen jedoch darauf, dass die große Mehrzahl der Leserinnen und Leser ihren gesunden Menschenverstand einsetzt und weder der einen noch der anderen Überreaktion zum Opfer fällt. Selbstverständlich sind mit dem Titel und anderen maskulinen oder femininen Formulierungen grundsätzlich alle angesprochen, unabhängig davon, welchem Geschlecht sie sich zuordnen. Es sollte aber nicht überraschen, dass uns als Autoren eines Buches voller formaler Logik und wichtiger (programmier-)sprachlicher Detailnuancen das Konzept des »generischen Maskulinums«, wonach »der Ingenieur« ein neutraler Oberbegriff von »der Ingenieur« und »die Ingenieurin« sein soll, nicht so 100 % überzeugt. Andererseits haben wir auch (noch) keine ultimative Lösung und behelfen uns daher mit einem Mix aus klassischem und innovativem Sprachgebrauch. Ein ähnlicher Pragmatismus gilt in diesem Buch übrigens auch für den Umgang mit Anglizismen.

Was Sie nicht lesen müssen

Nicht alles in diesem Buch ist für alle Leser:innen gleich wichtig. Grundsätzlich gilt, dass der Inhalt weiter vorn von eher allgemeinem Interesse ist und nach hinten immer spezieller wird. Andererseits kann es natürlich sein, dass Sie schon ein paar Erfahrungen mit Python haben und die ersten Kapitel deshalb nicht benötigen. Grundsätzlich gilt: Lesen Sie nur das, was Sie interessiert! Wenn Sie in einem der hinteren Kapitel ein Sprachkonstrukt oder einen Funktionsaufruf nicht verstehen, lohnt sich aber ein Blick in die vorderen (und ins Stichwortverzeichnis). Die Chance ist groß, dort Aufklärung zu finden. Wenn Sie inhaltlich mal bei einem Beispiel aussteigen: Machen Sie sich nichts draus. Die Ingenieurwissenschaften sind ein weites Feld und niemand kann alles.

Eine erfolgreiche Herangehensweise aus der Informatik ist es, in Schnittstellen zu denken. Sie müssen nicht wissen, wie ein Magnetron funktioniert (oder was das ist), um einen Mikrowellenherd zu benutzen. Es reicht, die Schnittstellen zu verstehen (Timer, Türknopf, »Pling«). Genauso ist es mit Code. Sie müssen nicht immer im Detail verstehen, wie eine Funktion oder ein Code-Abschnitt genau arbeitet. Oft reicht es zu verstehen, was die Eingangsdaten sind und was das Ergebnis ist oder bewirkt. Konzentrieren Sie Ihre Aufmerksamkeit auf die Bereiche, die aktuell relevant für Sie sind.

Wie dieses Buch aufgebaut ist

Das Buch ist in folgende Teile untergliedert:

Teil I: Los geht's

Hier setzen wir den Zug aufs Gleis und rollen behutsam los. Den Anfang macht das (möglicherweise) allererste Ausführen eines Python-Programms – schön bequem online im Browser. Es folgen Installation und Inbetriebnahme sowie ein kompakter Überblick über die wichtigsten Sprachelemente von Python.

Teil II: Rechnen und Plotten

Der zweite Teil beinhaltet gewissermaßen das Grundstudium des Buches und das heißt, es kommt einiges an Mathematik vor. Aber natürlich müssen Sie nicht seitenweise mit Zahlenkolonnen oder Buchstabensalaten rumrechnen. Diese Arbeit soll Ihnen Python ja abnehmen und hier lernen Sie, wie das funktioniert. Außerdem geht es um Visualisierung, also wie sie aus Zahlen und Formeln schöne Kurven und Bilder machen.

Teil III: Fortgeschrittene Ingenieursmethoden

Jetzt geht es ans Eingemachte: Optimierung, Kurven fitten, Simulation, Regelung, Fourier-Analyse und diverse statistische Untersuchungen. Dazu noch ein eigenes Kapitel über Mechanik, vom verbogenen Balken bis zum schwingenden Doppelpendel. Diese Methoden kommen in vielen Ingenieursanwendungen vor und bilden mit hoher Wahrscheinlichkeit den produktiven Kern Ihrer zukünftigen Python-Fähigkeiten.

Teil IV: Schneller, schöner, robuster

Zwischen einem »Es funktioniert ... irgendwie«-Prototyp und einem anwendungsbereiten Endprodukt liegt oft noch ein gutes Stück Arbeit. In diesem Teil lernen Sie, wie Sie ihren Code schneller machen, aber auch wie Sie mithilfe von Modularisierung, automatischen Tests und Objektorientierung unübersichtlichen Spaghetti-Code verhindern und auch mit größerer Komplexität klarkommen.

Teil V: Der Top Ten Teil

Dieser Teil beinhaltet übersichtliche Auflistungen von nützlichen Paketen, typischen Fehlern und coolen Tricks. Außerdem sind hier die wichtigsten Links zu guten Referenzen und Dokumentationen zusammengefasst.

Symbole, die in diesem Buch verwendet werden

Um den Text in überschaubare Häppchen zu gliedern und die Art des Inhalts gleich optisch deutlich zu machen, gibt es die folgenden Symbol-Abschnitte:

Mit der »Glühbirne« werden konkrete Tipps mit potenziell hoher Praxisrelevanz hervorgehoben.

Der Techniker kennzeichnet Abschnitte mit Hintergrundinfos und Detailwissen. Hier kann es schon ein bisschen spezieller werden. Gut für all jene, die es möglichst genau wissen wollen.

Das Vorsicht-Symbol soll Ihre Aufmerksamkeit auf mögliche Probleme oder Tücken lenken. Der alte Spruch »Gefahr erkannt ⇒ Gefahr gebannt« gilt schließlich auch beim Programmieren.

Das Fernglas signalisiert die Anwesenheit eines Beispiels.

Das Wegweisersymbol hebt interessante externe Quellen hervor, vom Mathebuch bis zur SciPy-Referenz.

Wie es weiter geht

Um es gleich mal klar zu machen: Programmieren lernt man durch Programmieren. Dieses Buch von vorn bis hinten im Gartenstuhl sitzend oder auf dem Sofa liegend durchzulesen, ist also nicht die beste Idee. Je mehr Sie dagegen am Computer selber ausprobieren, umso mehr Lernerfolg und Nutzen werden Sie durch dieses Buch haben. Dafür haben wir eine Vielzahl an ausführlich kommentierten Codeschnipseln in den Text eingebaut. Zum Ausprobieren müssen Sie diesen Code natürlich nicht abtippen. Er steht unter https://www.wiley-vch.de/ISBN9783527717675 sowie unter https://python-fuer-ingenieure.de zum Herunterladen oder direkten Online-Ausprobieren zur Verfügung. Neben der gesparten Tipparbeit gibt es zwei weitere Vorteile des Online-Begleitmaterials: Die aus dem Code resultierenden Abbildungen sind dort direkt nach dem jeweiligen Schnipsel in voller Farbenpracht eingebettet und alle Links aus dem Buch sind direkt anklickbar aufgelistet.

Das bedeutet aber nicht, dass wir Ihnen grundsätzlich vom Selbertippen abraten, im Gegenteil. Der Lerneffekt durch reines Kopieren und Ausführen unserer Beispiele und das bloße Abnicken der Ergebnisse ist sehr überschaubar. Stattdessen sollten Sie Ihrem Spieltrieb freien Lauf lassen und den Code nach eigenen Vorstellungen abändern, zerlegen und neu zusammenbauen. Haben Sie dabei keine Angst vor Fehlermeldungen! Die gehören zum Programmieren dazu und sind dazu da, um Ihnen bei der Problemlösung zu helfen.

Wenn Sie ein Buch »ordentlich durcharbeiten«, geht das an diesem natürlich nicht spurlos vorbei. Im Gegenteil: Unterstreichungen, Randnotizen und Eselsohren sind explizit erwünscht und helfen erwiesenermaßen beim Verstehen und Behalten.

Teil I

Los geht's

IN DIESEM TEIL …

geht es zwar zunächst erst mal um das Appetitholen, aber dann kommt gleich auch schon das Schwarzbrot: Installieren und Konfigurieren der verschiedenen Komponenten einer produktiven Ingenieur-Python-Umgebung. Dazu zählt natürlich der Python-Interpreter selber, ferner die wichtigsten Zusatzbibliotheken, ein passender Editor und die Jupyter-Note-book-Oberfläche. Wenn diese Komponenten auf dem PC verfügbar sind, kriegen Sie in einem Crashkurs-Kapitel die wichtigsten Sprachelemente von Python serviert – ziemlich komprimiert, aber trotzdem leicht verdaulich.

Kapitel 2

Installation und Inbetriebnahme

IN DIESEM KAPITEL

Python-Interpreter installierenPakete aus dem Python-Package-Index nachrüstenInteraktives Programmieren in Jupyter-NotebooksWie die Profis: Integrierte Entwicklungsumgebungen (IDEs)

Bevor Sie in die Python-Welt abtauchen können, muss Ihr Computer zuerst Python verstehen. Wenn Sie Windows benutzen, ist sehr wahrscheinlich noch gar nichts da, unter Linux und macOS ist möglicherweise schon eine Python-Version beim Betriebssystem dabei.

Versuchen Sie, in einer Kommandozeile die Befehle python --version oder python3 --version auszuführen. Wenn Sie eine Antwort wie Python 3.8.5 erhalten: Klasse! Es ist schon alles da, was Sie brauchen. In diesem Buch gehen wir davon aus, dass Sie mindestens Version 3.8 installiert haben. Sollte keine Antwort oder eine Fehlermeldung kommen, dann ist Ihr System noch unberührt.

Besonders unter Linux verbirgt sich hinter dem Befehl python gelegentlich noch eine veraltete Python-2-Installation. Verwenden Sie in diesem Fall in allen folgenden Beispielen den Befehl python3, um garantiert mit einer aktuellen Version zu arbeiten.

Python installieren

Zentraler Anlaufpunkt zur Installation ist die Webseite https://www.python.org/downloads/. Unter Linux und macOS können Sie Python alternativ auch jeweils über Ihren Paketmanager oder Homebrew installieren. Wie das geht, wissen Sie bestimmt selber am besten.

Standardmäßig enthält die Installation nur den Interpreter und die Standardbibliothek. Eine Alternative heißt Anaconda, sie bietet zusätzlich eine große Fülle nützlicher Bibliotheken, die gleich am Anfang mit installiert werden. »Wissenschaftliches Python mit Batterien inklusive« sozusagen. Diesen Download finden Sie unter https://www.anaconda.com/products/individual.

Python im Pfad

Der folgende Abschnitt ist einer Windows-spezifischen Stolperfalle gewidmet. Nutzen Sie ein anderes Betriebssystem, können Sie diesen getrost überspringen.

Nachfolgend werden wir gelegentlich den Python-Interpreter von der Kommandozeile starten. Wenn Sie einen Befehl wie python --version eingeben, muss ihr Rechner zuerst auflösen, wo überhaupt eine ausführbare Datei mit dem Namen »python« liegt. Gerade wenn Sie mehrere Versionen gleichzeitig installiert haben, scheiden sich die Gemüter, wie man den Überblick behält. Da Sie von diesem Problem vermutlich noch weit weg sind, wählen wir hier die einfachste Lösung. In der Umgebungsvariablen mit dem Namen »PATH« sind Verzeichnisse gespeichert, die Ihr Rechner durchsucht, wenn Sie ihm einen Befehl füttern.

Haben Sie bei der Installation den entsprechenden Haken belassen, wurde das Python-Verzeichnis bereits hinzugefügt. Funktioniert python --version nach der Installation aber immer noch nicht, müssen Sie manuell nachbessern. Unter Windows suchen Sie dafür in der Systemsteuerung nach »Umgebungsvariablen für dieses Konto bearbeiten«. Wenn es unter »Benutzervariablen für (Ihr Name)« schon einen Eintrag »PATH« gibt, wählen Sie diesen aus und klicken Sie auf »Bearbeiten...«, ansonsten legen Sie diesen an mit »Neu...«. Fügen Sie dann das Python-Installationsverzeichnis hinzu.

Python auf der Kommandozeile ausführen

In der Kommandozeile können Sie den Python-Interpreter auf verschiedene Arten und Weisen verwenden. Die erste ist denkbar einfach; probieren Sie, einfach nur python – oder python3 – auszuführen:

Der Python-Interpreter ist jetzt im interaktiven Modus und wartet auf Ihre Befehle. Jetzt können Sie ganz gewöhnlichen Python-Code zeilenweise eingeben und bekommen sofort das Ergebnis angezeigt.

Um zurück in die Kommandozeile zu kommen, rufen Sie die Funktion quit() auf.

Das komplette Programm bei jedem Start von vorne eintippen zu müssen, wäre natürlich lästig. Stattdessen speichert man Python-Code in normalen Textdateien mit der Endung .py, um diese später vom Interpreter ausführen zu lassen. Öffnen Sie einen Texteditor Ihrer Wahl (für den Notfall reicht auch Notepad) und befüllen Sie das Dokument mit diesem kleinen Programm.

Bei Beispielen aus dem Internet finden Sie häufig als mystische erste Zeile #!/usr/bin/env python oder etwas Ähnliches. Dieser sogenannte Shebang teilt einem Unix-Betriebssystem mit, welcher Interpreter dieses Skript ausführen soll, falls Sie beim Aufruf keinen explizit spezifizieren. Unter Windows gibt es diesen Mechanismus sowieso nicht, und wir rufen auch sonst in den folgenden Beispielen den Interpreter immer explizit auf, weshalb die Zeile nicht benötigt wird.

Speichern Sie diese Datei unter dem Namen wurzel.py in einem Verzeichnis Ihrer Wahl ab. Hier wählen wir C:\dev\wurzel.py.

Achten Sie genau darauf, dass der Dateiname wirklich auf .py endet. Texteditoren haben manchmal die Angewohnheit, noch ein .txt zu ergänzen, sodass daraus wurzel.py.txt wird. Zudem blendet der Windows Explorer »hilfreicherweise« standardmäßig Dateiendungen aus, sodass man das Übel zuerst gar nicht entdeckt.

Navigieren Sie dann mit der Kommandozeile in selbiges Verzeichnis und starten Sie Ihr Programm wie folgt.

Gerade haben Sie die Datei wurzel.py als Skript ausgeführt. Häufig werden Sie aber auch über Beispiele stolpern, in denen zusätzlich noch der Parameter -m auftaucht. Das kann dann folgendermaßen aussehen.

Wozu ist das denn gut? Diese Option ist dazu da, um ein Python-Modul auszuführen. Im Beispielprogramm importieren wir als Allererstes das Modul math, um die darin definierte Funktion sqrt zu verwenden. Ihre Datei wurzel.py stellt ebenfalls automatisch ein Modul mit dem Namen wurzel bereit (beachten Sie die fehlende Dateiendung). Der Unterschied ist, dass Ihr Modul keine Funktionen definiert, sondern direkt ausführbaren Code enthält, den wir auf diese Art und Weise starten.

Da python -m ... keinen Dateipfad, sondern einen Modulnamen nimmt, muss der Python-Interpreter als Erstes auflösen, wo sich überhaupt die benötigten Dateien befinden. Dazu sucht er in folgender Reihenfolge:

im aktuellen Arbeitsverzeichnis,

in den Verzeichnissen der Umgebungsvariablen

PYTHONPATH

,

in den globalen Paketverzeichnissen (wo sämtliche Bibliotheken liegen).

Das auszuführende Programm muss also nicht zwangsläufig im aktuellen Arbeitsverzeichnis liegen, sondern kann mit einem kurzen Befehl von überall gestartet werden. Diesen Fakt machen wir uns später mit python -m pip und python -m venv zunutze.

Pakete nachinstallieren

Nicht alle erdenklichen Funktionen sind bei Ihrer Standardinstallation dabei, aber fast alle hat schon einmal jemand implementiert und (hoffentlich) veröffentlicht. Der zentrale Anlaufpunkt heißt PyPI beziehungsweise Python Package Index, zu finden unter https://pypi.org/. Das Programm pip kann diese in einem Rutsch für Sie herunterladen, installieren und verwalten.

In diesem Buch wird viel numerisch mit Vektoren und Matrizen gerechnet. Das Paket NumPy ist dafür unumgänglich. Um das Paket herunterzuladen und zu installieren, reicht der folgende Befehl:

Wo Sie gerade dabei sind, jetzt wäre der Moment, in einem Rutsch alle für dieses Buch benötigten Pakete zu installieren.

Alle Dateien des Pakets liegen jetzt im globalen Paketverzeichnis und sind in Ihren Programmen zum Import verfügbar. Dies können Sie prüfen, indem Sie sich alle installierten Pakete anzeigen lassen.

Die Deinstallation ist natürlich genau so einfach, und zwar mit python -m pip uninstall numpy.

pip ist zwar der am meisten genutzte Paketmanager und wird standardmäßig mit installiert, ist aber bei Weitem nicht der einzige. Wenn Sie zum Beispiel Python nicht von der Hauptseite installiert haben, sondern mit Anaconda, dann steht Ihnen der Paketmanager Conda zur Verfügung. Der Befehl lautet dann conda install ... und lädt nicht von PyPI herunter, sondern von den Conda-Paketquellen. Sie können aber auch weiterhin pip verwenden, beide vertragen sich gut miteinander.

Wenn Sie an einem bestehenden Python-Projekt arbeiten, war der vorherige Autor hoffentlich so freundlich, Ihnen eine Liste der benötigten Pakete zu hinterlassen. Per Konvention heißt diese requirements.txt und liegt im Hauptverzeichnis des Projekts. Der Inhalt sieht grundsätzlich wie folgt aus:

Sie können alle Pakete auf einmal installieren, indem Sie den Befehl python -m pip install -r requirements.txt ausführen.

Virtuelle Umgebungen

Bis jetzt haben wir alle Pakete im globalen Paketverzeichnis installiert. Wenn Sie mehrere Projekte haben, geht das so lange gut, bis Sie in zwei Projekten unterschiedliche Versionen des gleichen Pakets brauchen. Möglicherweise ist das nicht einmal Ihre eigene Entscheidung, sondern ein völlig anderes Paket, das als Abhängigkeit eine alte Version eines bereits vorhandenen Pakets hat. Idealerweise hätten wir also eine Trennung zwischen Projekten, sodass in jedem Projekt nur die dafür benötigten Pakete in der jeweils richtigen Version installiert sind.

In der Python-Welt heißt die Lösung »virtuelle Umgebungen«. Nehmen wir für dieses Beispiel an, Ihr Projekt liegt ganz kreativ im Verzeichnis C:∖dev∖mein_projekt. Hier wollen Sie jetzt eine projektspezifische virtuelle Umgebung erstellen. Die Werkzeuge dafür werden im Modul venv mitgeliefert.

Dieser Befehl erstellt in Ihrem Projektverzeichnis einen Ordner env_projekt, der die virtuelle Umgebung enthält. Diese besteht aus einer Kopie des Interpreters sowie einem lokalen Paketverzeichnis, sie bildet sozusagen eine abgegrenzte Python-Installation. Wenn Sie mit dieser Umgebung arbeiten, müssen Sie sie vorher aktivieren.

Solange die Umgebung aktiviert ist, wird in der Kommandozeile immer (env_projekt) angezeigt. Wenn Sie jetzt python aufrufen, wird der Interpreter in der Umgebung mit seinen installierten Paketen genutzt. Mit pip können Sie dann Pakete installieren, ohne die globale Installation zu beeinflussen.

Deaktivieren Sie die Umgebung, um an einem anderen Projekt zu arbeiten.

Alternativen zum Texteditor

Damit Sie schnell loslegen können, haben wir uns bis hier auf Werkzeuge beschränkt, die Sie vermutlich sowieso schon an Bord haben. Die folgenden Abschnitte stellen einige Alternativen zum schnöden Texteditor vor, die Ihnen langfristig das Leben erleichtern können.

Jupyter-Notebooks