Wikibooks dewikibooks https://de.wikibooks.org/wiki/Hauptseite MediaWiki 1.47.0-wmf.19 first-letter Medium Spezial Diskussion Benutzer Benutzer Diskussion Wikibooks Wikibooks Diskussion Datei Datei Diskussion MediaWiki MediaWiki Diskussion Vorlage Vorlage Diskussion Hilfe Hilfe Diskussion Kategorie Kategorie Diskussion Regal Regal Diskussion TimedText TimedText talk Modul Modul Diskussion Veranstaltung Veranstaltung Diskussion Gitarre: Inhaltsübersicht 0 5657 1090732 1088841 2026-09-12T17:40:25Z Siegfried Schüller 116874 1090732 wikitext text/x-wiki <noinclude>{{:Regal:Musik/ Navi wichtige Buecher}}</noinclude> {{:Gitarre/ Navi Bände}} {{Hauptautor wünscht Mitarbeit}} {{Korrekturlesen}} {{Buchsuche|Gitarre}} {{Wikipedia|Gitarre}} <noinclude>{{TOCright}}</noinclude> * [[Gitarre|'''Titelbild''']]'''&nbsp;– Zur Eingangsseite''' * [[Gitarre: Projektseite|'''Projektseite''']] '''Zielsetzung, Planung, Konzepte, Konventionen''' * '''Status des Buches'''&nbsp;– {{status|5}} * {{todolink|Gitarre|Todo-Liste des Buches Gitarre}} = Buchpatenschaft = Das Buch „Gitarre“ wurde 2005 von [[Benutzer:Red Rooster|Red Rooster]] ins Leben gerufen, und wird seit ca. 2006 federführend von [[Benutzer:Mjchael|Mjchael]] weitergeführt. Wer auch immer Fragen oder Anregungen oder auch selbst Beiträge zu diesem Buch hat, der kann seine Fragen auf der [[Diskussion:Gitarre: Inhalts%C3%BCbersicht|Diskussionsseite von dieser Inhaltsangabe]] und auch direkt auf [[Benutzer Diskussion:Mjchael|Mjchaels Diskussionsseiten]] stellen. ---- = Gitarrenkurse = == Basiswissen == [[Image:P Guitar.png|left|80px]]Dieses Buch ist eine durchgehende Gitarrenschule, welche dir die Grundlagen der Liedbegleitung vermittelt. Das Buch ist in einzelne „Diplome“ aufgeteilt (Lagerfeuerdiplom, Folkdiplom, Rockdiplom, Balladendiplom, u. a.). Der Begriff „Lagerfeuerdiplom“ lehnt sich an das „Bauerndiplom“ (nebst Turmdiplom und Königsdiplom) des [[w:Deutscher Schachbund|Deutschen Schachbundes]] an, mit dem man Anfängern bekundet, dass sie nun ein bestimmtes Level erreicht haben. Jedes Diplom ist als eine in sich abgeschlossener Band zu betrachten, welches bestimmte Spiel- und Wissens-Grundlagen mit einem gut abgesteckten Lerninhalt vermittelt. Die Gitarrenschule richtet sich in erster Linie an Hobbygitarristen, sowie an Leiter von Kinder und Jugendgruppen sowie Personen im pädagogischen Bereich, bei denen Gitarre und Gesang als begleitendes Nebenfach erwünscht ist. Wer höher hinaus möchte, wird später nicht drumherum kommen, sich durch weitere Gitarrenlehrbücher oder, was noch besser wäre, durch einen guten Gitarrenlehrer weiterzubilden. Diese sind auch nicht so sehr auf gemeinfreie Lieder (ohne Copyright) begrenzt, und können aktuellere Lieder verwenden. Es wurde darauf geachtet, dass die Lektionen so ausführlich beschrieben wurden, dass man es gut im Selbststudium erlernen kann. === Wie gebraucht man das Gitarrenbuch === Als völliger Anfänger klickst du am besten mal auf das [[Gitarre: Lagerfeuerdiplom|Lagerfeuerdiplom]] und machst dich mit der Navigationsleiste ganz oben vertraut. Auf der Startseite jedes Diploms findest du ganz oben eine Navigationsleiste, die dich zu allen weiteren Bänden dieses Gitarrenkurses führt und noch zu ein paar anderen Wikibooks, die für Gitarristen interessant sind. {{:Gitarre/ Navi Bände}} Auf jeder Seite des Gitarrenlehrgangs findest du eine Navigationsleiste: Die ersten beiden Links führen dich zurück zu dieser Inhaltsseite oder zurück zur Inhaltsseite des Lagerfeuerdiploms. Von dort aus gelangst du auch zu den anderen Bänden. <div style="float:left;"> {{:Gitarre/ Navi|Lagerfeuerdiplom| {{:Gitarre: Lagerfeuerdiplom/ Navi}}| {{:Gitarre: Lagerfeuerdiplom/ Navi Lektionen}}| img=Lagerfeuer.gif }} </div> {{clear}} In der zweiten Zeile wirst du durch die 5 Hauptabschnitte des Buches geführt. Bei jedem Hauptkapitel ändert sich die unterste Zeile der Navigationsleiste. *Die Einleitung kannst du überfliegen und bei Gelegenheit mal genauer unter die Lupe nehmen. *Das wichtigste werden für dich die [[Gitarre: Grundsätzliches zum Greifen der Akkorde|Lektionen]] sein. Die Lektionen sind durchnummeriert. Zwei bis drei Seiten bilden eine Unterrichtseinheit, die jeweils für eine Gitarrenstunde in der Woche gedacht ist. *Lasse dich durch die Menge an Text nicht abschrecken. Bedenke, dass es deutlich umständlicher ist, alles schriftlich zu erklären, als es jemandem mal eben zu zeigen, dem man direkt gegenüber sitzt. * Das Kapitel „Repertoire“ gibt dir Tipps zum Singen, zum Zusammenstellen eines Repertoires, und wie man Lieder am besten übt. ** Bei den Liedbeispielen findest du nochmal alle Übungsvorschläge aus dem Lagerfeuerdiplom, die alle aus dem Copyright-freien Bereich kommen. Die gleichen Vorschläge findest du noch mal einzeln in jeder Lektion aufgeführt. Du kannst dir zu jeder Lektion ein oder mehrere Lieder zum Üben raussuchen. ** Weiterhin findest du einige Lieder mit Akkorden, jedoch ohne Texte als Link zur Youtube-Suche, die du ebenfalls mit deinem neu erworbenen Wissen begleiten kannst. * Im Anhang findest du noch weitere interessante Kapitel, die den Kurs ergänzen und die du dir irgendwann mal in einer stillen Stunde zu Gemüte führen kannst. == Die Bände bzw. Diplome im Gitarrenbuch == Einige Bände sind schon fast vollständig. Andere weisen noch kleinere bis deutliche Lücken auf. Von daher lohnt es sich weitere Quellen wie andere Lehrbücher, Liederbücher, Lehrvideos oder, was noch besser wäre, einen persönlichen Lehrer gleichzeitig mit zu nutzen. === [[Bild:Wikibooks-Einzelbuch.png|20px]] [[Gitarre: Lagerfeuerdiplom|Lagerfeuerdiplom]] {{:Gitarre: Lagerfeuerdiplom/ Status}} === ; Level 1 <!-- Lagerfeuerdiplom --> <score> << \new ChordNames { \chordmode { a1 d g c e:m a:m }} \new FretBoards { \override FretBoards.FretBoard.size = #'2 \override FretBoard.fret-diagram-details.finger-code = #'in-dot \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < a, e-1 a-2 cis'-3 e' > % A < a, d a-1 d'-3 fis'-2 > % D < g,-3 b,-2 d g b g'-4> % G < c-3 e-2 g c'-1 e' > % C < e, b,-2 e-3 g b e' > % Em < a, e-2 a-3 c'-1 e' > % Am } >> </score> Mit 6 Akkorden (D A G C Em Am) und 4-5 Schlagmuster lernst du elementare Grundlagen der Liedbegleitung. === [[Bild:Wikibooks-Einzelbuch.png|20px]] [[Gitarre: Folkdiplom|Folkdiplom]] {{:Gitarre: Folkdiplom/ Status}} === ; Level 2 <!-- Folkdiplom --> <score> << \new ChordNames { \chordmode { f1 d:m e b:7 a g:7 d:7 }} \new FretBoards { \override FretBoards.FretBoard.size = #'2 \override FretBoard.fret-diagram-details.finger-code = #'in-dot \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < a, f-3 a-2 c'-1 f'-1 > % F < a, d a-2 d'-3 f'-1 > % Dm < e, b,-2 e-3 gis-1 b e' > % E < b,-2 dis-1 a-3 b fis'-4 > % B7 < a, e-2 a-3 cis'-4 e' > % A MRK < g,-3 b,-2 d g b f'-1> % G7 < a, d a-2 c'-1 fis'-3 > % Dm } >> </score> Mit 6 weiteren Akkorden (F Dm E H7 G7 D7 ), einer [[Bild:Wikibooks-Buchseite.png|20px]][[Gitarre: Einführung ins Zupfen|Einführung ins Zupfen]] sowie [[Bild:Wikibooks-Buchseite.png|20px]][[Gitarre: Folkdiplom - Technik|elementare Begleittechniken]] (Hammering, Slide, Basslauf u.a.m.) kannst du die meisten Lieder begleiten, die keine Barré-Akkorde benötigen. Ob du hiernach lieber zuerst mit dem Balladen- oder dem Rockdiplom weitermachen willst, bleibt dir überlassen. === [[Bild:Wikibooks-Einzelbuch.png|20px]] [[Gitarre: Balladendiplom|Balladendiplom]] {{:Gitarre: Balladendiplom/ Status}} === ; Level 3 oder 4 <!-- Balladendiplom --> <score> << \new ChordNames { \chordmode { a1:sus4 d:sus2 g:9 c:maj7 e:7 a:m7 }} \new FretBoards { \override FretBoards.FretBoard.size = #'2 \override FretBoard.fret-diagram-details.finger-code = #'in-dot \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < a, e-1 a-2 d'-3 e' > % Asus4 < a, d a-1 d'-3 e' > % D < g,-3 d a-2 b g'-4> % G < c-3 e-2 g b e' > % Cj7 < e, b,-2 d gis-1 b e' > % E7 < a, e-2 g-1 c'-1 e' > % Am7 } >> </score> Hier lernst du [[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: vier Siebener auf einen Streich|erweiterte Akkorde]] (sus add 7...),[[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: C-Dur-Tonleiter Workshop|die C-Dur_Tonleiter]] in den ersten Bünden, [[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: C F und G mit Quinte im Bass|Akkordfolgen]] (heraushören, erweitern, einfache Akkordvarianten,...) kennen und bekommst eine [[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Einführung in das 3-Finger-Picking|Einführung in das 3-Finger-Picking]]. === [[Bild:Wikibooks-Einzelbuch.png|20px]] [[Gitarre: Rockdiplom|Rockdiplom]] {{:Gitarre: Rockdiplom/ Status}} === ; Level 4 oder 3 (je nachdem mit welchem man anfängt.) <!-- Rockdiplom --> <score> << \new ChordNames { \chordmode { b:m fis:m cis:m gis:m fis gis }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < b,-1\5 fis-3\4 b-4\3 d'-2\2 fis'-1\1 > % bm < fis,-1 cis-3 fis-4 a-1 cis'-1 fis'-1 > % F#m < cis-1\5 gis-3\4 cis'-4\3 e'-2\2 gis'-1\1 > % C#m < gis,-1 dis-3 gis-4 b-1 dis'-1 gis'-1 > % G#m < fis,-1 cis-3 fis-4 ais-2 cis'-1 fis'-1 > % F# < gis,-1 dis-3 gis-4 bis-2 dis'-1 gis'-1 > % G#m } >> </score> Der Schwerpunkt liegt hier auf [[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre:_Erste_Barree-Akkorde|Barré-Akkorde]]. Von denen leiten wir uns die [[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Powerchord-Workshop|Powerchords]] ab ([[Image:P game.svg|30px]]mit Rätsel) {{:Gitarre: Powerchord-Workshop/ Status}}. Wir lernen es [[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Schlagmuster erarbeiten|Schlagmuster zu erarbeiten]] und einzelne Noten auf dem Griffbrett zu finden [[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre:_Note-Location_Workshop|(Note-Location-Workshop)]]. ; Level 4 hat man erreicht, wenn man sowohl das Rockdiplom als auch das Balladendiplom hat. Egal in welcher Reihenfolge. === [[Bild:Wikibooks-Einzelbuch.png|20px]] [[Gitarre: Rockballadendiplom|Rockballadendiplom]] {{:Gitarre: Rockballadendiplom/ Status}} === ; Level 5 <!-- Rockballadendiplom --> Das Rockballadendiplom kombiniert die Barré-Akkorde aus dem Rockdiplom mit weiteren Optionen (sus4, j7, add9...) aus dem Balladendiplom. Wir machen einen kleinen [[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Jazzworkshop|Jazzworkshop]] {{:Gitarre: Jazzworkshop/ Status}} (incl. erweiterte Barré-Akkorde - Zupfen mit Barré-Akkorden - B-Tonarten) und beschäftigen uns mit [[Bild:Wikibooks-Buchseite.png|20px]][[Gitarre:_Akkordprogressionen|Standard-Akkordfolgen]]. Das wäre in etwa das Basiswissen der Liedbegleitung. Hiernach geht es mehr in die einzelnen Genre. === [[Bild:Wikibooks-Einzelbuch.png|20px]] [[Gitarre: Einführung in das Melodiepicking|"Einführung in das Melodiepicking"]] {{:Gitarre: Einführung in das Melodiepicking/ Status}} === <!-- Einführung in das Melodiepicking **[[Bild:Wikibooks-Buchseite.png|20px]] [[|]] --> Der Kurs legt Grundlagen, um Melodie und Begleitung gleichzeitig auf Gitarre spielen zu können (Fingerstyle). === [[Bild:Wikibooks-Einzelbuch.png|20px]] [[Gitarre: Einführung in die Sologitarre | Einführung in die Sologitarre]] {{:Gitarre: Einführung in die Sologitarre/ Status}} === <!-- Einführung in die Sologitarre --> Hier geht es um Skalen, Improvisation und Spieltechniken für die E-Gitarre. **[[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Entstehung der Tonleitern|Entstehung der Tonleitern]] **[[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Techniken für die E-Gitarre|Spieltechniken]] **[[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Blues und RnR|Blues- und Rock'n'Roll]]{{:Gitarre: Blues- und Rock'n'Roll-Workshop/ Status}} - **[[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Pentatonik und Bluesworkshop|Pentatonik und Bluesworkshop]] {{:Gitarre: Pentatonik und Bluesworkshop/ Status}} **[[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Einführung in das Improvisieren|Erste Improvisationen mit einfachen Akkorden]] **[[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre:_Aufbau_der_Skalenformen|Aufbau von Dur- und nat. Moll-Skalen]] (gemäß CAGED-System) **[[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Pentatonik Zusammenfassungen 1|Pentatonik (Zusammenfassung)]] **[[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: 3-Notes-Per-String Skalen|Modale 3-Notes-Per-String Skalen]] **[[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre: Tonart mittels Skalen bestimmen|Tonart mittels Skalen bestimmen]] === [[Bild:Wikibooks-Einzelbuch.png|20px]] [[Gitarre: Notenlesen| Notenlesen für Gitarre]] {{:Gitarre: Notenlesen/ Status}} === <!-- Notenlesen --> Du lernst, Noten direkt vom Blatt zu spielen. === [[Bild:Wikibooks-Buchseite.png|20px]] [[Gitarre:_Formen-Systematik|Systematik]] (CAGED - AST) === Diese Ergänzung fügt einen Großteil der Lerninhalte systematisch zusammen. == Lieder und Übungen == Diese Lieder sind ein kleiner Vorgeschmack darauf, was man alles mit dem erworbenen Wissen spielen kann. Die Reihenfolge der Liedvorschläge orientiert sich an den Diplomen. *[[Gitarre: Liedervorschläge |{{grün|Liedervorschläge}}]] (Texte nur bei Copyright-freien Liedern! Andere nur als YouTube Link) *[[Gitarre: Auswahl einiger Lieder mit Akkorden|Auswahl einiger Lieder mit Akkorden (Linkliste)]] *[[:Kategorie:Liederbuch| Übungsbeispiele aus dem „Liederbuch“ nach Kategorien sortiert]] *[[:Kategorie:Liederbuch/ Tabulatur|Tabulatur (eine Unterkategorie des Liederbuches)]] =Spieltechnik und Konstruktion der Gitarre= Es gibt sicher eine Menge über das Instrument Gitarre zu sagen. Um einen ersten Einblick zu erhalten, lohnt es sich immer, noch einmal bei Wikipedia nachzuschlagen. Damit nicht alles doppelt geschrieben werden muss, wurde hier nur ein Link angebracht, mit dessen Hilfe man zum entsprechenden Artikel weitergeleitet wird. ==Gitarrentypen== Man kann fast jeden Musikstil mit jeder Gitarre spielen. Dennoch gibt es Gitarren, die für bestimmte Arten von Musik besser oder weniger gut geeignet sind. Es kommt dabei vor allem auf zwei Aspekte an: zum einen den Einsatzzweck und zum anderen die Bespielbarkeit der Gitarre. Man kann Gitarren grundsätzlich in drei Gruppen unterteilen. Man unterscheidet zwischen [[Gitarre: Bevor wir beginnen|Konzertgitarren]], die im Lagerfeuerdiplom näher besprochen wird. Die [[Gitarre: Die Westerngitarre|Westerngitarren]] im Folkdiplom, und die [[Gitarre: Die elektrische Gitarre|elektrischen Gitarren]] im Band Sologitarre. In jeder Gruppe gibt es noch viele weitere Untergruppen. ==Kleine Gitarren== Für jeden Gitarrentyp gibt es auch kleinere Gitarren oder Kindergitarren. Diese sind in ihrer Größe auf kleinere Personen bzw Kinder abgestimmt. Diese Gitarren werden entsprechend der Länge der Saiten z.B. mit 3/4 (für Kinder ab 7) oder 1/2 (für die ganz Kleinen) bezeichnet. Diese Angabe gibt das Verhältnis des Griffbrettes (der Mensur) einer Erwachsenengitarre wieder. Eine normale Gitarre hat also die Länge von 4/4. Es gibt übrigens keine speziellen „Kindersaiten“. Wichtig ist noch die Breite des Griffbretts (Sattelbreite). Von der Breite hängt es ab, ob alle Saiten gut mit den kleinen Händen erreichbar sind. Letztlich sollte man eine Gitarre in einem Musikgeschäft ausprobieren. Eine Kindergitarre wird ansonsten ganz wie eine große Gitarre bedient (z.B. [[Gitarre: Saiten aufziehen|Saiten aufziehen]] und [[Gitarre: Stimmen|Stimmen]]) #[[Gitarre: Gitarrentypen|Gitarrentypen]] #[[Gitarre: Die Konzertgitarre|Die Konzertgitarre]] #[[Gitarre: Die Westerngitarre|Die Westerngitarre]] #[[Gitarre: Die elektrische Gitarre|Die elektrische Gitarre]] ==Wartung des Instruments== #[[Gitarre: Saiten aufziehen|Saiten aufziehen]] #[[Gitarre: Stimmen|Stimmen (Übersicht)]] ##[[Gitarre: Stimmen nach Stimmtönen#top|Stimmen nach Stimmtönen]] ##[[Gitarre: Stimmen mit Bünden|Stimmen mit Bünden]] ##[[Gitarre: Stimmen mit Flageolett|Stimmen mit Flageolett]] #[[Gitarre: Pflege|Pflege]] #[[Gitarre: Lagerung|Lagerung]] ==Zubehör== #[[Gitarre: Zubehör für eine Akustik-Gitarre|Zubehör für eine Akustik-Gitarre (Überblick)]]<br />Gitarrentasche, Tragegurt, Ersatzsaiten, Plektrum, Lehrbuch (mit CD / DVD), Stimmgabel, Kapodaster, Stimmgerät, Buchstütze / Notenständer, Gitarrenständer, Schreibzeug, Liederbücher, Notenheft, Saitenkurbel, Gitarrenpolitur und Putztuch, Metronom, Bottleneck, Gitarrenkoffer (statt Tasche), Fußbank, Gitarrenstütze, Gitarrenbefeuchter, Sonstiges #[[Gitarre: Effekte|Effekte (Überblick)]]<br />Effektpedale, Multi-, Rack-Effektgeräte, Hallfedern, Hall und Echo, Chorus und Flanger, Arpeggiator, Oktaver, Tremolo, Pitch-Shifter, WahWah, E-Bow #[[Gitarre: Plektrum|Plektrum]] #[[Gitarre: Saiten|Saiten]] #[[Gitarre: Stimmen|Stimmhilfen]] #[[Gitarre: Kapodaster|Kapodaster]] #[[Gitarre: Verstärker|Verstärker]] #[[Gitarre: Kabel|Kabel]] =Spielpraxis= Hier dreht es sich um das Spielen des Instruments selbst. An dieser Stelle stehen alle eigenständigen Kapitel, welche auf allgemeingültige Spielpraxen eingehen. ==Grundsätzliches== #[[Gitarre: Grundhaltung der Gitarre|Grundhaltung der Gitarre]] #[[Gitarre: Lesen von Diagrammen, Tabulaturen und Noten|Lesen von Diagrammen, Tabulaturen und Noten]] #[[Gitarre: Intelligent und sinnvoll üben]] ==Rhythmusgitarre== ===Akkorde und Griffe=== #[[Gitarre: Grifftabelle einfach|einfache Grifftabelle]] für die häufigst gebrauchten Akkorde #[[Gitarre: offene Akkorde|offene Akkorde]] #[[Gitarre: verschiebbare Akkorde|verschiebbare Akkorde]] #[[Gitarre: Barrégriffe|Barrégriffe]] #[[Gitarre: Akkordformen|Akkordformen]] (Systematik) #[[Gitarre: Aufbau von Akkorderweiterungen | Aufbau von Akkorderweiterungen]] #[[Gitarre: Modale Akkorde | Modale Akkorde]] #[[Gitarre: verminderte (diminished-) Akkorde | verminderte (diminished-) Akkorde]] #[[Gitarre: erweiterte (augmented-) Akkorde | erweiterte (augmented-) Akkorde]] ===Umgang mit Akkorden und Akkordfolgen=== Eine Sammlung sehr umfangreicher Workshops und Tutorials #[[Gitarre: Akkorde heraushören|Akkorde heraushören]] ## [[Gitarre: Akkordprogressionen|Standard-Akkordprogressionen]] ## [[Gitarre: Tonart mittels Skalen bestimmen|Tonart mittels Skalen bestimmen]] #[[Gitarre: Tonleiter-fremde Akkorde|Typische Tonleiter-fremde Akkorde]] #[[Gitarre: Akkordfolgen erweitern|Akkordfolgen erweitern]] ===Schlag-, Zupf- und Melodietechniken=== ;Folkdiplom *[[Gitarre: Folkdiplom - Rhythmus-Variationen| Einfache Schlagmuster und Variationen]] *[[Gitarre: Einführung ins Zupfen|Einführung ins Zupfen]] *[[Gitarre: Nagelpflege| Nagelpflege]] *[[Gitarre: Folkdiplom - Hammer-On | Hammer-On]] *[[Gitarre: Folkdiplom - Pull-Off | Pull-Off]] ;Balladendiplom *[[Gitarre: Einführung in das 3-Finger-Picking| Einführung in das 3-Finger-Picking]] ;Rockdiplom *[[Gitarre: Schlagmuster erarbeiten|Schlagmuster erarbeiten]] ;Rockballadendiplom *[[Gitarre: Diatonischer Quintfall in Am mit Samba-Rhythmen| Samba-Rhythmen]] ;Sologitarre *[[Gitarre: Plektrum-Picking | Plektrum-Picking]] *[[Gitarre: Flat-Picking | Flat-Picking]] *[[Gitarre: Alternate Picking | Alternate-Picking]] *[[Gitarre: Palm Mute | Palm Mute]] *[[Gitarre: Tappingtechnik | Tapping]] *[[Gitarre: Künstliche Obertöne (artificial Harmonics) | Künstliche Obertöne (artificial Harmonics)]] *[[Gitarre: Saitenziehen (Bending) | Saitenziehen (Bending)]] *[[Gitarre: Vibrato | Vibrato]] *[[Gitarre: Tremolo | Tremolo]] *[[Gitarre: Glissando (Sliding) | Glissando (Sliding)]] *[[Gitarre: Staccato- und Legatospiel | Staccato- und Legatospiel]] *[[Gitarre: Repeating-Patterns | Repeating-Patterns]] *[[Gitarre: Whammy Bar Techniken| Whammy Bar Techniken]] *[[Gitarre: Pedalton Licks | Pedalton Licks]] *[[Gitarre: Economic-Picking und Sweeping | Economic-Picking und Sweeping]] *[[Gitarre: String-Skipping | String-Skipping]] ;in Vorbereitung *[[Gitarre: Akkordprogressionen|Akkordprogressionen]](Lektion im Rockballadendiplom) ==Melodiegitarre== ===Skalen und Patterns=== {| {{Prettytable-R}} | {{PDF-Version|Dur-Tonleitern Theorie Gitarre..pdf|Dur-Tonleitern (Theorie - Übungsblatt)}} |- | {{PDF-Version|Moll-Tonleitern Theorie Gitarre.pdf|Moll-Tonleitern (Theorie - Übungsblatt)}} |- | {{PDF-Version|Gitarre Haupt-Skalen-Akkkorde-Pentatoniken.pdf|ein Spicker: die wichtigsten Skalen auf einen Blick}} |} #[[Gitarre: C-Dur-Tonleiter Workshop | C-Dur-Tonleiter in den ersten drei Bünden]] (Grundlegendes incl. PDFs) # [[Gitarre: Einführung in das Improvisieren|Erste Einführung in die Improvisation]] (bevor es mit der Sologitarre richtig los geht.) #[[Gitarre: Barré-Akkorde Positionen merken|Die ersten Positionen für Barré-Akkorde]] (Grundlegendes) #[[Gitarre: Note-Location Workshop|Note-Location Workshop]] (Weiterführendes) #[[Gitarre: Formen-Systematik|Formen-Systematik]] (Konventionen im Gitarrenbuch) #[[Gitarre: Aufbau der Skalenformen| die 5 Hauptskalenformen]](Lektionen) #Pentatonik ##[[Gitarre: Pentatonik Zusammenfassungen 1|Pentatonik Zusammenfassung]] (Gesamtübersicht) ##[[Gitarre: Die Dur-Pentatonik | Die Dur-Pentatonik]] (Übersicht) ##[[Gitarre: Die Moll-Pentatonik | Die Moll-Pentatonik]] (Übersicht) ##[[Gitarre: Die Pentatonik im Blues | Die Pentatonik im Blues]] (Übersicht) ##[[Gitarre: Pentatonik und Bluesworkshop | Pentatonik und Bluesworkshop]] (Lehrgang) {{:Gitarre: Pentatonik und Bluesworkshop/ Status}} ##[[Gitarre: Pentatonik Skalen verbinden|Pentatonik Skalen verbinden]] (sog. Longform) #Dur- und Moll-Skalen / Arpeggios ##[[Gitarre: Aufbau der Skalenformen|Aufbau der Skalenformen]] (Grundlegendes incl. PDF) ##[[Gitarre: Die Major-Patterns | Die Major-Patterns]] ##[[Gitarre: Harmonisch Moll | Harmonisch Moll]] ##[[Gitarre: Melodisch Moll | Melodisch Moll]] ##[[Gitarre: 3-Notes-Per-String Skalen | 3-Notes-Per-String Skalen]] (Mods / Kirchentonleitern) ##[[Gitarre: Arpeggios | Arpeggios]] #Besondere Skalen ##[[Gitarre: verminderte (diminished-) Tonleitern | verminderte (diminished-) Tonleitern]] ##[[Gitarre: erweiterte (augmented-) Tonleitern | erweiterte (augmented-) Tonleitern]] ##[[Gitarre: chromatische Tonleiter | chromatische Tonleiter]] ##[[Gitarre: Ganzton-Leiter | Ganzton-Leiter]] =Theoretische Grundlagen= Die Gitarre ist ein Instrument, das man auch mit sehr wenig Kenntnis über Harmonielehre gut erlernen kann. Trotzdem ist es an manchen Stellen wichtig, etwas über die Zusammenhänge der Noten zu wissen. Durch das Erlernen simpler Regeln kann man den Übungs- und Lernaufwand oftmals mehr als halbieren, denn die Theorie ist nichts anderes als formulierte Erfahrungen vorangegangener Musiker. Warum sollte man sich also weigern, von anderen zu lernen? Wenn man die Theorie auf ein sinnvolles Maß reduziert, dann sind die Lektionen sehr einfach erlernbar und von unschätzbarem Wert. Man darf allerdings niemals Theorie vor Praxis setzen, denn in der Musik gilt: ''„Was immer sich richtig anhört, ist auch richtig“''. Die Regeln erleichtern das Finden von Noten und die Geläufigkeit auf dem Griff, sie ersetzen niemals das Experimentieren mit ihnen! ==Allgemeines== Die weitaus meisten Regeln gelten für alle Instrumente, deshalb befinden sich einige theoretische Grundlagen der Musik im Buch Musiklehre. *[[Bild:Wikibooks-Einzelbuch.png|20px]] [[Musiklehre]] =Anhang= ==Tabellen&nbsp;– Bibliothek== #[[Gitarre: Formen-Systematik|Formen-Systematik]] (Typisierung und Katalogisierung) #[[Gitarre: Akkordformen | Akkordformen]] #[[Gitarre: Zupf- und Schlagmuster - Bibliothek | Zupf- und Schlagmuster&nbsp;– Bibliothek]] == Tipps und Tricks == {| {{Prettytable-R}} | {{PDF-Version|Noten lesen lernen mit Tricks.pdf|Noten lesen lernen mit vielen Eselsbrücken}} |} #[[Gitarre: Akkorde anzeigen| Akkorde anzeigen]] <br clear="all" /> == Linkliste == *[[Gitarre: Linkliste| Linkliste für Gitarristen]] **[[Gitarre: Linkliste#Grifftabellen| incl. Grifftabellen für Gitarristen]] *[[Gitarre: Freeware für Gitarristen | Freeware für Gitarristen]] ==Leserreaktionen== *[[Gitarre: Erfahrungsbericht Lagerfeuerdiplom|Erfahrungsbericht Lagerfeuerdiplom]] *[[Gitarre: Erfahrungsbericht Folkdiplom|Erfahrungsbericht Folkdiplom]] == [[Gitarre: Rumpelkammer |<span style="color:orange;"> Rumpelkammer</span> ]] == ;fertig ausarbeiten # [[Gitarre: Der erweiterte Quintenzirkel | Der erweiterte Quintenzirkel]]&nbsp;– Wie verhält sich der Quintenzirkel bei den Kirchentonarten? [[Image:2von10.png|20%]] # [[Gitarre: Transponier-Tool|Transponier-Tool]] # [[Gitarre: Transponiertabelle|Transponiertabelle]] # [[Gitarre: Glossar]] ;Spicker #[[Image:Gitarre Haupt-Skalen-Akkkorde-Pentatoniken.pdf|PDF-Spicker aller Hauptskalen / Akkordformen / Pentatoniken in Dur und Moll]] ; Ausschlachten... ...und in vorhandene Seiten integrieren. Artikel, die noch verschoben oder integriert werden müssen: # [[Gitarre: Textfragmente]](für alle Textbausteine, die nicht verloren gehen sollen) # [[Gitarre: Sologitarre für Fortgeschrittene | Sologitarre für Fortgeschrittene]] # [[Gitarre: Rhythmusbeispiele 1]] ; Quellen für Autoren # [[:Kategorie:Liederbuch/ Lieder]] # [[:Kategorie:Liederbuch/ Tabulatur]] ; Hilfe für Autoren # [[Gitarre: Schnellformate|Schnellformate]] # [[Liederbuch/ Lieder in Word oder HTML formatieren]] (für Autoren) # [[Gitarre: Anhang Farbkodierung der Intervalle|Farbkodierung der Intervalle]] # [[Liederbuch/ Zeichenvorlage Takt Module|Taktmodule zum Selberbauen]] (für Autoren) # {{PDF-Version|Powertab-Tutorial.pdf| für potentielle Wikibook-Autoren ist hier eine Einführung in das Freeware-Tabulaturprogramm „Powertab“}} ---- {{Regal|ort=Musik}} [[be:Гітара]] [[bn:গিটার]] [[en:Guitar]] [[fi:Kitarakirja]] [[fr:Apprendre la guitare]] [[he:גיטרה]] [[it:Chitarra]] [[nl:Gitaar/Inleiding & inhoud]] [[pa:Guitar]] [[pl:Nauka gry na gitarze]] [[pt:Guitarra]] [[pt:Violão]] [[ru:Самоучитель игры на гитаре]] [[uk:Гітара]] [[zh:吉他]] qt7vrzxpsg2wpzc6pbeljipkvepp1vr Traktorenlexikon: Allis-Chalmers 0 7000 1090739 1090408 2026-09-12T20:56:46Z Baupit 56622 /* Serie 5000 */ 1090739 wikitext text/x-wiki {{:Traktorenlexikon: Navigation}} Die 1901 gegründete Firma '''Allis-Chalmers''' hatte ihren Sitz in Milwaukee, USA. ==Geschichte== 1912 wurde der erste Benzintraktor vorgestellt. In den 1920er Jahren kaufte Allis-Chalmers mehrere andere Firmen auf, u.a. auch Monarch Tractor. 1955 bot Allis Chalmers den ersten Radschlepper mit Dieselmotor an (Raupenschlepper gab es schon früher mit Dieselmotor). Im gleichen Jahr wurde auch die Firma Gleaner Harvester gekauft. 1960 kaufte man den französischen Traktorenhersteller [[Traktorenlexikon:_Vendeuvre|Vendeuvre]] auf. 1969 bis in die Mitte der 70er Jahre arbeitete [[Traktorenlexikon:_Renault|Renault]] mit diesem amerikanischen Hersteller zusammen. 1985 wurde Allis Chalmers von [[Traktorenlexikon: Deutz|Deutz]] übernommen, die Produktion der Allis-Chalmers-Traktoren wurden im gleichen Jahr beendet. Der neue Markenname war [[Traktorenlexikon: Deutz-Allis|Deutz-Allis]]. 1990 übernahm der [[Traktorenlexikon: AGCO|AGCO-Corporation-Konzern]], einer der weltweit größten Anbieter von Traktoren und Landmaschinen, den Bereich Deutz-Allis von Kloeckner-Humboldt-Deutz. Es entstand nun die Traktorenmarke [[Traktorenlexikon: AGCO-Allis|AGCO-Allis]]. ==Typen== [[Datei:Allis Chalmers GDO 569-at Driffield-P8100559.JPG|thumb|[[Traktorenlexikon: Allis-Chalmers B|Allis-Chalmers B]]]] Es wurden Schlepper mit folgenden Typenbezeichnungen vertrieben (''die Liste ist noch unvollständig''): ===1914 - 1926=== {{:Traktorenlexikon:_Create|Modell 10-18}} {{:Traktorenlexikon:_Create|Modell 6-12}} ===Modell - E=== {{:Traktorenlexikon:_Create|Modell 15-30/18-30}} {{:Traktorenlexikon:_Create|Modell 20-35}} {{:Traktorenlexikon:_Create|Modell 25-40}} ===Modell - L=== {{:Traktorenlexikon:_Create|Modell L (12-20/15-25)}} ===Allis-Chalmers-Rumely=== {{:Traktorenlexikon:_Create|Modell DoAll}} {{:Traktorenlexikon:_Create|Modell 6 A}} ===Letters-Serie=== {{:Traktorenlexikon:_Create|Modell U}} {{:Traktorenlexikon:_Create|Modell UC}} {{:Traktorenlexikon:_Create|Modell A}} {{:Traktorenlexikon:_Create|Modell B}} {{:Traktorenlexikon:_Create|Modell RC}} {{:Traktorenlexikon:_Create|Modell C}} {{:Traktorenlexikon:_Create|Modell CA}} ===W-Serie=== [[Datei:Allis-Chalmers WD45.jpg|thumb|Allis-Chalmers WD 45]] {{:Traktorenlexikon:_Create|WC}} {{:Traktorenlexikon:_Create|WD}} {{:Traktorenlexikon:_Create|WD 45}} {{:Traktorenlexikon:_Create|WF}} ===Baureihe-D=== [[Datei:Allis-Chalmers D21 series II tractor.jpg|thumb|Allis-Chalmers D 21]] {{:Traktorenlexikon:_Create|D 10}} {{:Traktorenlexikon:_Create|D 12}} {{:Traktorenlexikon:_Create|D 14}} {{:Traktorenlexikon:_Create|D 15}} {{:Traktorenlexikon:_Create|D 17}} {{:Traktorenlexikon:_Create|D 19}} {{:Traktorenlexikon:_Create|D 21}} ===Englische Modelle=== {{:Traktorenlexikon:_Create|D 270}} {{:Traktorenlexikon:_Create|D 272}} [[Datei:Allis-Chalmers ED-40.jpg|thumb|Allis-Chalmers ED 40]] {{:Traktorenlexikon:_Create|ED 40}} ===Allis-Chalmers/Vendeuvre=== {{:Traktorenlexikon:_Create|FD 3}} {{:Traktorenlexikon:_Create|FD 4}} {{:Traktorenlexikon:_Create|FD 5}} ===G=== {{:Traktorenlexikon:_Create|G}} ===Raupenschlepper=== [[Datei:A DEMONSTRATION OF A TRACTOR FOR STUDENTS OF THE RUPPIN AGRICULTURAL TRAINING CENTER. מכללת רופין לחקלאות. בצילום, סטודנטים לומדים כיצד לתפעל טרקטור שD592-079.jpg|thumb|Allis-Chalmers HD 5]] {{:Traktorenlexikon:_Create|WK}} {{:Traktorenlexikon:_Create|WS}} {{:Traktorenlexikon:_Create|HD 3}} {{:Traktorenlexikon:_Create|HD 5 B}} {{:Traktorenlexikon:_Create|HD 6}} {{:Traktorenlexikon:_Create|HD 7 W}} {{:Traktorenlexikon:_Create|HD 9}} {{:Traktorenlexikon:_Create|HD 10 W}} {{:Traktorenlexikon:_Create|HD 11}} {{:Traktorenlexikon:_Create|HD 14}} {{:Traktorenlexikon:_Create|HD 15}} {{:Traktorenlexikon:_Create|HD 16}} {{:Traktorenlexikon:_Create|HD 19}} {{:Traktorenlexikon:_Create|HD 20}} {{:Traktorenlexikon:_Create|HD 21}} ===100er-Serie=== [[Datei:Allis-Chalmers 190 XT.jpg|thumb|Allis-Chalmers 190 XT]] {{:Traktorenlexikon:_Create|160}} {{:Traktorenlexikon:_Create|170}} {{:Traktorenlexikon:_Create|175}} {{:Traktorenlexikon:_Create|180}} {{:Traktorenlexikon:_Create|185}} {{:Traktorenlexikon:_Create|190}} {{:Traktorenlexikon:_Create|190XT}} {{:Traktorenlexikon:_Create|200}} {{:Traktorenlexikon:_Create|210}} {{:Traktorenlexikon:_Create|220}} ===Serie 4-WD=== [[Datei:AC 4W-305 4WD.jpg|thumb|Allis-Chalmers 4W-305]] {{:Traktorenlexikon:_Create|440}} {{:Traktorenlexikon:_Create|7580}} {{:Traktorenlexikon:_Create|8550}} {{:Traktorenlexikon:_Create|4-W 220}} {{:Traktorenlexikon:_Create|4-W 305}} ===Serie 5000=== {{:Traktorenlexikon:_Create|5015}} {{:Traktorenlexikon:_Create|5020}} {{:Traktorenlexikon:_Create|5030}} {{:Traktorenlexikon:_Create|5040}} {{:Traktorenlexikon:_Create|5045}} {{:Traktorenlexikon:_Create|5050}} ===Serie 6000=== {{:Traktorenlexikon:_Create|6040}} {{:Traktorenlexikon:_Create|6060}} {{:Traktorenlexikon:_Create|6070}} {{:Traktorenlexikon:_Create|6080}} {{:Traktorenlexikon:_Create|6140}} ===Serie 7000=== [[Datei:Allis-Chalmers 7030.jpg|thumb|Allis-Chalmers 7030]] {{:Traktorenlexikon:_Create|7000}} {{:Traktorenlexikon:_Create|7010}} {{:Traktorenlexikon:_Create|7020}} {{:Traktorenlexikon:_Create|7030}} {{:Traktorenlexikon:_Create|7040}} {{:Traktorenlexikon:_Create|7045}} {{:Traktorenlexikon:_Create|7050}} {{:Traktorenlexikon:_Create|7060}} {{:Traktorenlexikon:_Create|7070}} {{:Traktorenlexikon:_Create|7080}} ===Serie 8000=== {{:Traktorenlexikon:_Create|8010}} {{:Traktorenlexikon:_Create|8030}} {{:Traktorenlexikon:_Create|8050}} {{:Traktorenlexikon:_Create|8070}} == Weblinks == {{Commons|Category:Allis-Chalmers tractors|Allis-Chalmers-Traktoren}} {{Wikipedia1|Allis-Chalmers}} * [http://www.allischalmers.com www.allischalmers.com] * [http://www.agcocorp.com www.agcocorp.com] * http://www.tractordata.com/farm-tractors/tractor-brands/allischalmers/allischalmers-tractors.html {{:Traktorenlexikon: Navigation}} icz8uowbo3u7q0sanejct87edzw9r5z Pseudoprimzahlen: Eulersche Pseudoprimzahlen 0 10667 1090719 1021897 2026-09-12T16:34:43Z Hardy42 1911 /* Anzahl der Basen */ E(n), Variablennamen 1090719 wikitext text/x-wiki {{Navigation_Buch|Pseudoprimzahlen|Pseudoprimzahlen}} Für jede ungerade Primzahl <math>p</math> gilt mit jeder teilerfremden Basis <math>a</math> die Kongruenz {{Formel2|Gl0|<math>a^{\frac{n-1}{2}} \equiv \left(\frac an\right) = \pm 1 \pmod n</math>.|}} Dabei bezeichnet <math>\left(\frac an\right)</math> das [[w:Jacobi-Symbol|Jacobi-Symbol]]. ==Eulersche Pseudoprimzahl== Eine zusammengesetzte Zahl ''n'' ist eine eulersche Pseudoprimzahl, wenn es mindestens eine natürliche Zahl <math>a</math> im Bereich <math>1 < a < n-1</math> als Basis gibt, mit der entweder {{Formel2|Gl1a|<math>a^{\frac{n-1}{2}} \equiv 1 \pmod n</math>|1a}} oder {{Formel2|Gl1b|<math>a^{\frac{n-1}{2}} \equiv -1 \pmod n</math>|1b}} ist. Eine solche Zahl nennt man eulersche Pseudoprimzahl zur Basis ''a'', kurz: EPsP(''a''). ==== Eulersche Pseudoprimzahlen sind auch Fermatsche Pseudoprimzahlen ==== <!--Ein Beispiel für eine eulersche Pseudoprimzahl zur Basis 4 ist die Zahl 15: <math>4^{14} \equiv 1 \mod 15</math> --> Es lässt sich ziemlich einfach, nämlich durch Quadrieren, zeigen, dass jede eulersche Pseudoprimzahl auch eine [[Pseudoprimzahlen: Fermatsche Pseudoprimzahlen|fermatsche Pseudoprimzahl]] ist. Es sei ''n'' eine eulersche Pseudoprimzahl zur Basis ''a''. Es gilt also: :<math>a^{\frac{n-1}{2}} \equiv \pm 1 \pmod n.</math> Folglich ist: :<math> a^{n-1}=\left(a^{\frac{n-1}{2}}\right)^2 \equiv (\pm 1)^2 = 1 \pmod n,</math> und deshalb ist ''n'' auch eine fermatsche Pseudoprimzahl zur Basis ''a''. Daraus dass eine eulersche Pseudoprimzahl eine fermatsche Pseudoprimzahl ist, lässt sich nicht der Umkehrschluss ziehen, dass jede fermatsche Pseudoprimzahl auch eine eulersche Pseudoprimzahl ist. Das lässt sich anhand der fermatschen Pseudoprimzahl 15 zeigen: :<math>11^7 \equiv 11 \pmod{15}</math>. Die Zahl 15 ist also keine eulersche Pseudoprimzahl zur Basis 11. Aber :<math>11^{14} \equiv 1 \pmod{15},</math> demzufolge ist 15 eine fermatsche Pseudoprimzahl zur Basis 11. === Euler-Jacobi-Pseudoprimzahl === Eine ungerade zusammengesetzte natürliche Zahl <math>n</math> heißt '''Euler-Jacobi-Pseudoprimzahl''' zur Basis a, wenn <math>n</math> und <math>a</math> teilerfremd sind und {{Formel2|Gl2|<math>a^{\frac{n-1}{2}} \equiv \left(\frac an\right)\pmod n</math>|2}} ist. Euler-Jacobi-Pseudoprimzahlen werden oft auch "Eulersche Pseudoprimzahlen" genannt. Da der Wert des Jacobi-Symbols mit teilerfremden Parametern nur 1 oder -1 sein kann, ist jede Euler-Jacobi-Pseudoprimzahl auch eine eulersche Pseudoprimzahl; * für 1 gilt Kongruenz [[#Gl1a|1a]], * für -1 gilt [[#Gl1b|1b]]. ==== Anzahl der Basen ==== Wenn die Primteiler<math>\ p_i\ </math>einer zusammengesetzten Zahl <math>n</math> bekannt sind, kann die Anzahl der Basen, zu denen sie Euler-Jacobi-Pseudoprimzahl ist, berechnet werden: Mit der Faktorisierung {{Formel2 | |<math>n = \prod_{i=1}^k p_i^{\alpha_i} \text{ und }\ n - 1 = d \cdot 2^s \text{ mit } d \text{ ungerade }</math> | }} ist die Anzahl der Basen <math><n</math> einschließlich 1 und n-1 {{Formel2 | |<math> E(n) = \prod_{i=1}^k\gcd\left(\frac{n-1}{2},\ d_i\right) \cdot \begin{cases} 2 & \text{wenn }\nu = s\\ 1/2 & \text{wenn }\exists \ p_i \text{ mit } \nu_2(p_i) < s \text{ und } \alpha_i \text{ ungerade}\\ 1 & \text{sonst }\end{cases}</math><ref>{{:Pseudoprimzahlen: Vorlage:Anzahl_falscher_Zeugen}}</ref> }} Dabei ist * <math>\ s</math> der größte Exponent, mit dem <math>\ 2^s|n-1\ </math>gilt,, so dass <math>\ n - 1 = d \cdot 2^{s}\ </math>ist, * <math>\ d_i</math> der größte ungerade Teiler von <math>\ p_i - 1</math>, * <math>\ \nu_2(p_i) </math> der größte Exponent, mit dem <math>\ 2^{\nu_2(p_i)}|p_i-1\ </math>gilt, so dass <math>\ p_i - 1 = 2^{\nu_2(p_i)} \cdot d_i\ </math>ist und * <math>\ \nu</math> das Minimum aller <math> \nu_2(p_i)</math>. == Quellen == <references/> {{Navigation Text| |links= [[Pseudoprimzahlen: Fermatsche Pseudoprimzahlen| Fermatsche Pseudoprimzahlen]] |mitte= [[Pseudoprimzahlen|Pseudoprimzahlen]] |rechts= [[Pseudoprimzahlen: Starke Pseudoprimzahlen| Starke Pseudoprimzahlen]] }} nnyt0vv57hm0ox09ljjvswbm4r6t9ag Pseudoprimzahlen: Fermatsche Pseudoprimzahlen 0 11513 1090720 1090264 2026-09-12T16:35:27Z Hardy42 1911 /* Anzahl der Basen */ F(n) 1090720 wikitext text/x-wiki {{Navigation_Buch|Pseudoprimzahlen|Pseudoprimzahlen}} Der kleine fermatsche Satz besagt, dass <math>\ a^p - a\ </math> für jede Primzahl<math>\ p\ </math>und jede natürliche Zahl <math>a \ge 2\ </math>durch<math>\ p\ </math>teilbar ist. Für jede Primzahl <math>\ p\ </math> gilt also {{Formel2|Gl0|<math>\ a^p \equiv a \pmod p\ </math> mit <math>a > 1</math>| }} und {{Formel2|Gl1|<math>\ a^{p-1} \equiv 1 \pmod p </math>, wenn <math>a</math> kein Vielfaches von <math>p</math> ist.|1}} ==Definition== Eine zusammengesetzte Zahl <math>q\ </math> ist ''fermatsche Pseudoprimzahl'' zur Basis <math>a</math>, wenn mit <math>\operatorname{ggT}(a,q) = 1</math> und <math>2 \le a \le q-2\ </math> für <math>a\ </math> und <math>q\ </math> gilt: {{Formel2|Gl1|<math>a^{q-1} \equiv 1 \pmod q </math>.| }} *Beispiel: :<math>15 = 3 \cdot 5</math> ist eine zusammengesetze Zahl :{| border=0 |<math>4^{15-1}\ </math> ||<math> \equiv 1 \pmod {15} </math> |- |<math>11^{15-1}\ </math> ||<math> \equiv 1 \pmod {15} </math> |} == Anzahl der Basen == Wenn die Primteiler<math>\ p_i\ </math>einer Pseudoprimzahl <math>n</math> bekannt sind, kann die Anzahl der Basen, zu denen sie pseudoprim ist, berechnet werden: Mit der Faktorisierung {{Formel2 | |<math>n = \prod_{i=1}^k p_i^{\alpha_i}</math>| }} ist die Anzahl der Basen <math><n</math> einschließlich 1 und bei ungeraden Zahlen n-1 {{Formel2| |<math>F(n) = \prod_{i=1}^k\gcd(n-1, p_i-1)</math>.<ref name="lpsp"> [http://mpqs.free.fr/LucasPseudoprimes.pdf Lucas Pseudoprimes]</ref>| }} == Eigenschaften == Abgesehen von den Dreierpotenzen, also 9, 27, 81, 243, 729, ..., sind alle ungeraden zusammengesetzten Zahlen fermatsche Pseudoprimzahlen zu irgendeiner Basis. Bei den geraden zusammengesetzen Zahlen sieht das noch ein wenig anders als. Dort gibt es mehr zusammengesetzte Zahlen, die keine Fermatschen Pseudoprimzahlen sind. === Zusammenhänge zwischen den Basen === Natürlich gibt es zu einer ''fermatschen Pseudoprimzahl'' <math>q\ </math> niemals nur eine Basis <math>a\ </math>, zu der sie pseudoprim ist. Das lässt sich an einer Pseudoprimzahl, sagen wir beispielsweise mal '''21''', zeigen: Die 21 ist pseudoprim zur Basis 8. *'''Wenn eine ungerade Zahl <math>\ q\ </math> zu einer Basis <math>\ a\ </math> mit <math>\ a < q\ </math> pseudoprim ist, so ist sie auch zur Basis <math>\ (q - a)\ </math> pseudoprim'''. :Da 21 pseudoprim zur 8 ist, ist 21 auch pseudoprim zu (21 - 8) = 13. *'''Wenn eine Zahl <math>\ q\ </math> zu einer Basis <math>\ a\ </math> mit <math>\ a < q\ </math> pseudoprim ist, so ist sie auch zu jeder Basis <math>\ a^n\ </math> mit ganzzahligem Exponenten <math>\ n > 1\ </math> pseudoprim'''. :Da 21 pseudoprim zu 8 und 13 ist, ist 21 auch zu <math>8^2=64, \ 13^2=169, \ 8^3=512, \ 13^3=2197, \ ...\ </math> pseudoprim. *'''Wenn eine Zahl <math>\ q\ </math> zu einer Basis der Form <math>\ a^n\ </math> mit <math>\ n \ge 1\ </math> pseudoprim ist, so ist sie auch pseudoprim zu <math>\ a^n \operatorname{mod}\ q\ </math> mit <math>\ n \ge 1\ </math>''' *'''Wenn eine Zahl <math>\ q\ </math> zu den Basen <math>\ a\ </math> und <math>\ b\ </math> pseudoprim ist, so ist sie auch pseudoprim zu <math>\ a\cdot b\ </math>: <math>a^{q - 1} \equiv b^{q - 1} \equiv 1 \pmod q\quad \Rightarrow \quad a^{q - 1} \cdot b^{q - 1} = (a \cdot b)^{q - 1} \equiv 1 \pmod q</math>'''. : Umgekehrt gilt das nicht: zum Beispiel ist 341 pseudoprim zur Basis 15, aber nicht zu 3 oder 5. === Teiler === Für alle Primteiler <math>p</math> einer Fermatschen Pseudoprimzahl <math>n\ </math>gilt *<math> n \equiv 1 \pmod {l_a(p)}</math> und damit *<math> n \equiv p \pmod {p \cdot l_a(p)}</math>, wobei <math>l_a(p)</math> die [[Pseudoprimzahlen: Glossar#Anker:MO|multiplikative Ordnung]] von <math>p</math> zur Basis <math>a</math> ist.<ref>[https://www.ams.org/mcom/1980-35-151/S0025-5718-1980-0572872-7/S0025-5718-1980-0572872-7.pdf The pseudoprimes to 25 * 10^9]</ref> Fermatsche Pseudoprimzahlen sind weitgehend quadratfrei; nur die Quadrate der Wieferich-Primzahlen zur Basis <math>a</math> sind Fermatsche Pseudoprimzahlen zur Basis <math>a</math> und können Teiler einer solchen sein. Mit der Basis 2 sind das die Wieferich-Primzahlen 1093 und 3511 (weitere sind bisher nicht bekannt). Das gilt natürlich auch für Teilmengen der Fermatschen Pseudoprimzahlen, wie Eulersche und starke Pseudoprimzahlen. {{Navigation Text| |links= [[Pseudoprimzahlen: Fermatsche Pseudoprimzahlen| Fermatsche Pseudoprimzahlen]] |mitte= [[Pseudoprimzahlen: Eulersche Pseudoprimzahlen| Eulersche Pseudoprimzahlen]] |rechts= [[Pseudoprimzahlen: Starke Pseudoprimzahlen| Starke Pseudoprimzahlen]] }} {{:Pseudoprimzahlen: Die fermatsche Pseudoprimzahl im allgemeinen}} == Quellen == <references/> 7clj45ly4ph5xp0f6pgugec0buswcfe 1090743 1090720 2026-09-13T09:51:00Z Hardy42 1911 /* Anzahl der Basen */ bei Primzahlpotenzen 1090743 wikitext text/x-wiki {{Navigation_Buch|Pseudoprimzahlen|Pseudoprimzahlen}} Der kleine fermatsche Satz besagt, dass <math>\ a^p - a\ </math> für jede Primzahl<math>\ p\ </math>und jede natürliche Zahl <math>a \ge 2\ </math>durch<math>\ p\ </math>teilbar ist. Für jede Primzahl <math>\ p\ </math> gilt also {{Formel2|Gl0|<math>\ a^p \equiv a \pmod p\ </math> mit <math>a > 1</math>| }} und {{Formel2|Gl1|<math>\ a^{p-1} \equiv 1 \pmod p </math>, wenn <math>a</math> kein Vielfaches von <math>p</math> ist.|1}} ==Definition== Eine zusammengesetzte Zahl <math>q\ </math> ist ''fermatsche Pseudoprimzahl'' zur Basis <math>a</math>, wenn mit <math>\operatorname{ggT}(a,q) = 1</math> und <math>2 \le a \le q-2\ </math> für <math>a\ </math> und <math>q\ </math> gilt: {{Formel2|Gl1|<math>a^{q-1} \equiv 1 \pmod q </math>.| }} *Beispiel: :<math>15 = 3 \cdot 5</math> ist eine zusammengesetze Zahl :{| border=0 |<math>4^{15-1}\ </math> ||<math> \equiv 1 \pmod {15} </math> |- |<math>11^{15-1}\ </math> ||<math> \equiv 1 \pmod {15} </math> |} == Anzahl der Basen == Wenn die Primteiler<math>\ p_i\ </math>einer Pseudoprimzahl <math>n</math> bekannt sind, kann die Anzahl der Basen, zu denen sie pseudoprim ist, berechnet werden: Mit der Faktorisierung {{Formel2 | |<math>n = \prod_{i=1}^k p_i^{\alpha_i}</math>| }} ist die Anzahl der Basen <math><n</math> einschließlich 1 und bei ungeraden Zahlen n-1 {{Formel2| |<math>F(n) = \prod_{i=1}^k\gcd(n-1, p_i-1)</math>.<ref name="lpsp"> [http://mpqs.free.fr/LucasPseudoprimes.pdf Lucas Pseudoprimes]</ref>| }} Primzahlpotenzen haben nur einen Primteiler, daher ist bei ungeraden Primzahlpotenzen <math>k = 1</math> und <math>F(p^\alpha) = p - 1</math>, weil <math>p^\alpha - 1</math> durch <math>p - 1</math> teilbar und damit <math>\gcd(p^\alpha-1, p_i-1) = p - 1</math> ist. Die Anzahl der nichttrivialen Basen (also ohne <math>1</math> und <math>p-1</math>) ist dann <math>F(p^\alpha) - 2 = p - 3</math>. Für Potenzen von <math>p = 3</math> ist die Anzahl damit 0, für Potenzen von <math>p = 5</math> ist sie 2 usw. == Eigenschaften == Abgesehen von den Dreierpotenzen, also 9, 27, 81, 243, 729, ..., sind alle ungeraden zusammengesetzten Zahlen fermatsche Pseudoprimzahlen zu irgendeiner Basis. Bei den geraden zusammengesetzen Zahlen sieht das noch ein wenig anders als. Dort gibt es mehr zusammengesetzte Zahlen, die keine Fermatschen Pseudoprimzahlen sind. === Zusammenhänge zwischen den Basen === Natürlich gibt es zu einer ''fermatschen Pseudoprimzahl'' <math>q\ </math> niemals nur eine Basis <math>a\ </math>, zu der sie pseudoprim ist. Das lässt sich an einer Pseudoprimzahl, sagen wir beispielsweise mal '''21''', zeigen: Die 21 ist pseudoprim zur Basis 8. *'''Wenn eine ungerade Zahl <math>\ q\ </math> zu einer Basis <math>\ a\ </math> mit <math>\ a < q\ </math> pseudoprim ist, so ist sie auch zur Basis <math>\ (q - a)\ </math> pseudoprim'''. :Da 21 pseudoprim zur 8 ist, ist 21 auch pseudoprim zu (21 - 8) = 13. *'''Wenn eine Zahl <math>\ q\ </math> zu einer Basis <math>\ a\ </math> mit <math>\ a < q\ </math> pseudoprim ist, so ist sie auch zu jeder Basis <math>\ a^n\ </math> mit ganzzahligem Exponenten <math>\ n > 1\ </math> pseudoprim'''. :Da 21 pseudoprim zu 8 und 13 ist, ist 21 auch zu <math>8^2=64, \ 13^2=169, \ 8^3=512, \ 13^3=2197, \ ...\ </math> pseudoprim. *'''Wenn eine Zahl <math>\ q\ </math> zu einer Basis der Form <math>\ a^n\ </math> mit <math>\ n \ge 1\ </math> pseudoprim ist, so ist sie auch pseudoprim zu <math>\ a^n \operatorname{mod}\ q\ </math> mit <math>\ n \ge 1\ </math>''' *'''Wenn eine Zahl <math>\ q\ </math> zu den Basen <math>\ a\ </math> und <math>\ b\ </math> pseudoprim ist, so ist sie auch pseudoprim zu <math>\ a\cdot b\ </math>: <math>a^{q - 1} \equiv b^{q - 1} \equiv 1 \pmod q\quad \Rightarrow \quad a^{q - 1} \cdot b^{q - 1} = (a \cdot b)^{q - 1} \equiv 1 \pmod q</math>'''. : Umgekehrt gilt das nicht: zum Beispiel ist 341 pseudoprim zur Basis 15, aber nicht zu 3 oder 5. === Teiler === Für alle Primteiler <math>p</math> einer Fermatschen Pseudoprimzahl <math>n\ </math>gilt *<math> n \equiv 1 \pmod {l_a(p)}</math> und damit *<math> n \equiv p \pmod {p \cdot l_a(p)}</math>, wobei <math>l_a(p)</math> die [[Pseudoprimzahlen: Glossar#Anker:MO|multiplikative Ordnung]] von <math>p</math> zur Basis <math>a</math> ist.<ref>[https://www.ams.org/mcom/1980-35-151/S0025-5718-1980-0572872-7/S0025-5718-1980-0572872-7.pdf The pseudoprimes to 25 * 10^9]</ref> Fermatsche Pseudoprimzahlen sind weitgehend quadratfrei; nur die Quadrate der Wieferich-Primzahlen zur Basis <math>a</math> sind Fermatsche Pseudoprimzahlen zur Basis <math>a</math> und können Teiler einer solchen sein. Mit der Basis 2 sind das die Wieferich-Primzahlen 1093 und 3511 (weitere sind bisher nicht bekannt). Das gilt natürlich auch für Teilmengen der Fermatschen Pseudoprimzahlen, wie Eulersche und starke Pseudoprimzahlen. {{Navigation Text| |links= [[Pseudoprimzahlen: Fermatsche Pseudoprimzahlen| Fermatsche Pseudoprimzahlen]] |mitte= [[Pseudoprimzahlen: Eulersche Pseudoprimzahlen| Eulersche Pseudoprimzahlen]] |rechts= [[Pseudoprimzahlen: Starke Pseudoprimzahlen| Starke Pseudoprimzahlen]] }} {{:Pseudoprimzahlen: Die fermatsche Pseudoprimzahl im allgemeinen}} == Quellen == <references/> it994bmp7ilix1qnp6mxoatfs9il8z6 Pseudoprimzahlen: Starke Pseudoprimzahlen 0 11543 1090721 1090059 2026-09-12T16:38:58Z Hardy42 1911 /* Anzahl der Basen */ S(n), Variablennamen 1090721 wikitext text/x-wiki {{Navigation_Buch|Pseudoprimzahlen|Pseudoprimzahlen}} Jede ungerade Primzahl <math>n</math> erfüllt mit jeder teilerfremden ganzzahligen Basis <math>a</math> eine der [[Pseudoprimzahlen:_Kongruenz_und_Restklassen#Kongruenz|Kongruenzen]] {{Formel2|Gl1|<math> a^d \equiv 1 \pmod n\quad</math>mit <math>\ n - 1 = d \cdot 2^s\ </math> und <math>d\ </math> ungerade|1}}{{Formel2|Gl2|<math> a^{d \cdot 2^r} \equiv -1 \pmod n \quad</math>für ein <math>r</math> mit <math>0 \leqq r < s</math>.|2}} Anmerkung: Kongruenz [[#Gl2|(2)]] ist gleichbedeutend mit <math> a^{d \cdot 2^r} \equiv n - 1 \pmod n </math>. Jedes Folgeglied der Folge <math> a_r = a^{d \cdot 2^r} </math> ist das Quadrat (mod n) des vorangehenden. Wenn <math> a_r = a^{d \cdot 2^r} \not \equiv -1 \pmod n \ </math> ist und <math> a_{r+1} = (a^{d \cdot 2^r})^2 \equiv 1 \pmod n \ </math> ist, kann <math>n</math> keine Primzahl sein, weil die Gleichung <math>x^2 \equiv 1 \pmod n</math> nur die Lösungen <math>x = \pm 1 \pmod n</math> hat, wenn n eine Primzahl ist. In diesem Fall ist <math>a_r^2 - 1 = (a_r + 1) \cdot (a_r - 1) \equiv 0 \pmod n</math>, das Produkt <math>(a_r + 1) \cdot (a_r - 1)</math> ist also durch <math>n</math> teilbar, und <math>\gcd(a_r + 1, n), \gcd(a_r - 1, n)</math> sind Teiler von <math>n</math>. ==Definition== Eine ungerade Zahl <math>n</math> ist '''starke Pseudoprimzahl''' zur Basis <math>a</math>, wenn sie zusammengesetzt ist, und mit einer ganzzahligen Basis <math>a</math>, für die <math>1 < a < n-1 \pmod n</math> gilt, eine der obengenannten Kongruenzen erfüllt ist. In dieser Hinsicht verhält sie sich wie eine Primzahl. <br> Mit <math>a = 1</math> erfüllen ''alle'' ganzen Zahlen Kongruenz [[#Gl1|(1)]] und mit <math>a = n - 1</math> ''alle'' ungeraden Zahlen Kongruenz [[#Gl2|(2)]], solche Basen eignen sich also nicht zur Erkennung zusammengesetzter Zahlen. Die obengenannten Kongruenzen werden im Miller-Rabin-Test<ref>{{w|Miller-Rabin-Test|Miller-Rabin-Test}}</ref> genutzt, um zu prüfen ob eine ungerade Zahl (wahrscheinlich) eine Primzahl oder sicher keine ist; dabei kann durch Tests mit mehreren Basen die Wahrscheinlichkeit, dass eine Pseudoprimzahl den Test besteht, reduziert werden. Starke Pseudoprimzahlen zur Basis <math>a</math> sind also zusammengesetzte Zahlen, die den Miller-Rabin-Test mit der Basis <math>a</math> bestehen. ==Eigenschaften== Im Gegensatz zu den [[Pseudoprimzahlen: Fermatsche Pseudoprimzahlen| Fermatschen Pseudoprimzahlen]] gibt es keine starken Pseudoprimzahlen, die zu jeder teilerfremden Basis pseudoprim sind; eine Entsprechung zu den [[Pseudoprimzahlen: Absolute Fermatsche Pseudoprimzahlen#Carmichael-Zahlen|Carmichael-Zahlen]] gibt es also nicht, und es ist auch nicht jede zusammengesetzte ungerade Zahl starke Pseudoprimzahl zu irgendeiner Basis 1 < a < n-1. * Alle zusammengesetzten Mersennezahlen (<math>2^p - 1</math> mit <math>\ p</math> = prim) sind starke Pseudoprimzahlen zur Basis 2. * Alle zusammengesetzten Fermatzahlen (<math>2^{2^n} + 1</math>) sind starke Pseudoprimzahlen zur Basis 2.<ref>{{w|en:Fermat Numbers#Pseudoprimes and Fermat numbers|Pseudoprimes and Fermat numbers}}</ref> * <math>(4^p + 1) / 5</math> ist starke Pseudoprimzahl zur Basis 2, wenn <math>p > 5</math> und eine Primzahl ist.<ref>Prime Numbers - A Computational Perspective, Richard Crandall & Carl Pomerance, Springer Verlag, ISBN 0-387-25282-7 http://thales.doa.fmph.uniba.sk/macaj/skola/teoriapoli/primes.pdf</ref> * Die Quadrate der [[w:Wieferich-Primzahl|Wieferich-Primzahl]]en sind starke Pseudoprimzahlen zur Basis 2. === Bezug zu Eulerschen Pseudoprimzahlen === Jede starke Pseudoprimzahl <math>n\ </math> zur Basis <math>a\ </math> ist auch eine [[Pseudoprimzahlen: Eulersche Pseudoprimzahlen| Eulersche Pseudoprimzahl]] zur Basis <math>a\ </math>. Warum? <br> Für eine eulersche Pseudoprimzahl zur Basis <math>a\ </math> gilt <math>a^\frac{n-1}{2} \equiv \pm 1 \pmod n</math>. Mit der oben beschriebenen Zerlegung <math>\ n-1 = d\cdot 2^s\ </math> ist <math>\ a^{\frac{n-1}{2}} = a^{d\cdot 2^{s-1}}</math>. Bei starken Pseudoprimzahlen gibt es zwei Fälle: # Kongruenz 1 ist erfüllt: <math>a^d \equiv 1 \pmod n</math>, <br>dann ist <math>a^{d\cdot 2^{s-1}} = (a^d)^{2^{s-1}} \equiv 1^{2^{s-1}} \pmod n = 1</math> und damit <math>a^{\frac{n-1}{2}} \equiv 1 \pmod n</math>. # Kongruenz 2 ist erfüllt: <math>a^{d\cdot 2^r} \equiv -1 \pmod n </math>, <br>dann ist <math>a^{d\cdot 2^{s-1}} = (a^{d\cdot 2^r})^{2^{s-r-1}} \equiv (-1)^{2^{s-r-1}} \pmod n \equiv \pm 1</math> und damit <math>a^{\frac{n-1}{2}} \equiv \pm 1 \pmod n</math>. Jede eulersche Pseudoprimzahl der Form <math>\ n = 4\cdot k + 3\ </math> ist starke Pseudoprimzahl: <br>in diesem Fall ist <math>\ d = \frac{n-1}{2},\ s = 1\ </math> und <math>\ r = 0\ </math> und damit <math>\ a^d = a^{\frac{n-1}{2}} = a^{d\cdot 2^r}</math>; mit <math>\ a^{\frac{n-1}{2}} \equiv \pm 1 \pmod n\ </math> ist also eine der obengenannten Kongruenzen erfüllt. <!-- Wenn <math>a^{\frac{n-1}{2}} = a^{d\cdot 2^0}</math> ist, und <math>a^{d\cdot 2^r} \equiv -1 \mod n</math> mit <math> 0 \le r \le (s-1)</math> gilt, dann gilt auch <math>a^{\frac{n-1}{2}} \equiv -1 \mod n</math>. --> ===Teiler=== Für alle Primteiler <math>p</math> einer starken Pseudoprimzahl <math>n\ </math>gilt *<math> n \equiv 1 \pmod {l_a(p)}</math> und damit *<math> n \equiv p \pmod {p \cdot l_a(p)}</math>, wobei <math>l_a(p)</math> die multiplikative Ordnung von <math>p</math> zur Basis <math>a</math> ist.<ref>[https://www.ams.org/mcom/1980-35-151/S0025-5718-1980-0572872-7/S0025-5718-1980-0572872-7.pdf The pseudoprimes to 25 * 10^9]</ref> <ref>[[Pseudoprimzahlen: Glossar|Glossar]]</ref><ref>{{w|en:Multiplicative order|Multiplicative order}}</ref> Die höchste Zweierpotenz, durch die die multiplikative Ordnung eines Primteilers teilbar ist, ist für alle Teiler einer starken Pseudoprimzahl gleich, d. h. alle multiplikativen Ordnungen der Primteiler derselben starken Pseudoprimzahl sind Produkt einer ungeraden Zahl und derselben Zweierpotenz (einschließlich <math>2^0</math>).<ref>[https://digitalcommons.iwu.edu/cgi/viewcontent.cgi?article=1024&context=math_honproj New Implementations for Tabulating Pseudoprimes and Liars.pdf]</ref> Starke Pseudoprimzahlen sind weitgehend quadratfrei; nur die Quadrate der Wieferich-Primzahlen zur Basis <math>a</math> sind starke Pseudoprimzahlen zur Basis <math>a</math> und können Teiler einer solchen sein. Mit der Basis 2 sind das die Wieferich-Primzahlen 1093 und 3511 (weitere sind bisher nicht bekannt). Starke Pseudoprimzahlen lassen sich häufig als Produkte der Form {| |- |<math>\ q = (2\cdot k \cdot x + 1) \cdot (2 \cdot m \cdot x + 1)\ </math> mit |- | <math>\quad x \in \N</math>, |- | <math>\quad \gcd(k, m) = 1\ </math>und |- | <math>\quad 0 < k \ll q,\ 0 < m \ll q\ </math> |} ausdrücken. Umgekehrt ist der Anteil starker Pseudoprimzahlen bei solchen Produkten deutlich höher als bei ungeraden Zahlen allgemein. === Anzahl der Basen === Wenn die Primteiler<math>\ p_i\ </math>einer zusammengesetzten Zahl <math>n</math> bekannt sind, kann die Anzahl der Basen, zu denen sie starke Pseudoprimzahl ist, berechnet werden: Mit der Faktorisierung {{Formel2 | |<math>n = \prod_{i=1}^k p_i^{\alpha_i}</math>| }} ist die Anzahl der Basen <math><n</math> einschließlich 1 und n-1 {{Formel2 | |<math> S(n) = \left(1 + \frac{2^{k\nu}-1}{2^k-1}\right) \prod_{i=1}^k\gcd\left(d,\ d_i\right)</math><ref>{{:Pseudoprimzahlen: Vorlage:Anzahl_falscher_Zeugen}}</ref>| }} Dabei ist * <math>\ d</math> der größte ungerade Teiler von <math>\ n - 1</math> [[#Gl1|(wie oben)]] * <math>\ d_i</math> der größte ungerade Teiler von <math>\ p_i - 1</math>, * <math>\ \nu_2(p_i) </math> der größte Exponent, mit dem <math>\ 2^{\nu_2(p_i)}|p_i-1\ </math>gilt, so dass <math>\ p_i - 1 = 2^{\nu_2(p_i)} \cdot d_i\ </math>ist und * <math>\ \nu</math> das Minimum aller <math> \nu_2(p_i)</math>. Basen, zu denen eine zusammengesetze Zahl <math>n\ </math>keine Pseudoprimzahl ist, werden Zeugen für die Zusammengesetztheit der Zahl genannt; solche zu denen sie pseudoprim ist, werden „falsche Zeugen“ genannt. Maximal ein Viertel der teilerfremden Basen zwischen 0 und n sind falsche Zeugen. ===Häufigkeit=== Starke Pseudoprimzahlen zu einer festen Basis sind viel seltener als Primzahlen. Folgende Tabelle zeigt die Anzahl starker Pseudoprimzahlen zur Basis 2 im Vergleich zur Anzahl fermatscher Pseudoprimzahlen zur Basis 2 und der Primzahlen bis zur angegebenen Obergrenze. {| class="wikitable" style="text-align:right;" |+ Anzahl Starker Pseudoprimzahlen zur Basis 2 im Vergleich zu Primzahlen |- ! Obergrenze !! Primzahlen<ref>{{w|Primzahlsatz#Zahlenbeispiele|Primzahlsatz}}</ref> !! Fermatsche Pseudoprimzahlen !! Starke Pseudoprimzahlen<ref>{{:Pseudoprimzahlen: Vorlage:Statistics}}</ref> |- | <math>10^9\ </math> || 50.847.534 || 5.597 || 1.282 |- | <math>10^{12}</math> || 37.607.912.018 || 101.629 || 22.407 |- | <math>10^{15}</math> || 29.844.570.422.669 || 1.801.533 || 419.489 |- | <math>10^{18}</math> || 24.739.954.287.740.860 || 33.763.684 ||8.646.507 |} ==== Restklassen ==== Starke Pseudoprimzahlen liegen wesentlich häufiger in der Restklasse 1 modulo kleiner Zahlen <math>(m)</math> als in anderen Restklassen. Folgende Tabelle zeigt die Verteilung der starken Pseudoprimzahlen zur Basis 2 bis 10<sup>15</sup> auf Restklassen modulo m an ein paar Beispielen. {|class="wikitable" style="text-align:right;" ! !! colspan="8" | Anzahl starker Pseudoprimzahlen zur Basis 2 in Restklasse |- ! m !! style="text-align:center"| 0 !! style="text-align:center"| 1 !! style="text-align:center"| 2 !! style="text-align:center"| 3 !! style="text-align:center"| 4 !! style="text-align:center"| 5 !! style="text-align:center"| 6 !! style="text-align:center"| 7 |- |3 || 26 || 327193 || 92270 |- |5 || 1373 || 199879 || 84716 || 74590 || 58931 |- |7 || 370 || 142844 || 49224 || 62834 || 47482 || 57853 || 58882 |- |8 || 0 || 207103 || 0 || 44885 || 0 || 122473 || 0 || 45028 |} ==Beispiele== Um zu zeigen, wie unterschiedlich starke Pseudoprimzahlen ausfallen können, werden als Beispiele die drei Zahlen 781, 1541 und 25 gezeigt. An der Zahl 781 wird erstmal die Zerlegung in eine 2er-Potenz und eine ungerade Zahl gezeigt: '''Zerlegung''' Zu einer Zahl <math>n\ </math> wird das ungerade <math>d\ </math> gesucht, so dass <math>n = d\cdot 2^s+1\ </math> gilt. Die Formel können wir umstellen: *<math>n = d\cdot 2^s+1</math> *<math>n-1 = d\cdot 2^s</math> *<math>\frac{n-1}{2^s} = d</math> Am Beispiel der Zahl <math>n = 781\ </math> sieht das so aus: Die größte 2er-Potenz, durch die <math>n-1 = 780\ </math> teilbar ist, ist <math>2^2 = 4</math>; der andere Faktor ist dann <math>d=780/4=195 </math>. Es wird also nicht die vollständige Primfaktorzerlegung <math>781-1 = 2^2\cdot 3\cdot 5\cdot 13\ </math> gebraucht. '''781 zur Basis 5''' <math>a = 5</math> <math>n = 781 \ \ \ d = 195\ </math> <math>5^{195} \equiv 1 \pmod {781}</math> also ist 781 eine starke Pseudoprimzahl zur Basis 5. '''1541 zur Basis 5''' <math>a = 5</math> <math>n = 1541 \ \ \ d = 385\ </math> <math>5^{385} \equiv 1540 \pmod {1541}</math> also ist 1541 eine starke Pseudoprimzahl zur Basis 5. '''25 zur Basis 7''' <math>a = 7</math> <math>n = 25 \ \ \ d = 3\ </math> <math>7^3 \equiv 18 \pmod {25}</math> <math>7^6 \equiv 24 \pmod {25}</math> also ist 25 eine starke Pseudoprimzahl zur Basis 7. '''305 zur Basis 11''' Dies ist ein Gegenbeispiel. <math>a = 11</math> <math>n = 305 \ \ \ d = 19\ </math> <math>11^{19} \equiv 111 \pmod {305}</math> <math>11^{38} \equiv 121 \pmod {305}</math> <math>11^{76} \equiv 1 \pmod {305}</math> Somit ist 305 keine starke Pseudoprimzahl zur Basis 11. Aus <math>121^2 \equiv 1 \pmod {305}\ </math> kann auf die Teiler <math>\gcd(121 + 1, 305) = 5</math> und <math>\gcd(121 - 1, 305) = 61</math> geschlossen werden (in diesem Fall sind es Primteiler). == Quellen == <references/> {{Navigation Text| |links= [[Pseudoprimzahlen: Fermatsche Pseudoprimzahlen| Fermatsche Pseudoprimzahlen]] |mitte= [[Pseudoprimzahlen: Eulersche Pseudoprimzahlen| Eulersche Pseudoprimzahlen]] |rechts= [[Pseudoprimzahlen: Starke Pseudoprimzahlen| Starke Pseudoprimzahlen]] }} 8ziym4mi2wmqq36gaqdaop5bdsv95x0 Gitarre: Lagerfeuerdiplom 0 28084 1090733 1088509 2026-09-12T17:42:03Z Siegfried Schüller 116874 1090733 wikitext text/x-wiki <noinclude> {{:Gitarre/ Navi_Bände}} {{:Gitarre/ Navi|Lagerfeuerdiplom |<br> {{:Gitarre: Lagerfeuerdiplom/ Navi}} |<br> {{:Gitarre:_Lagerfeuerdiplom/ Navi_Einführung}} |<br> {{:Gitarre:_Lagerfeuerdiplom/ Navi_Lektionen}} |<br> {{:Gitarre:_Lagerfeuerdiplom/ Navi_Repertoire}} |<br> {{:Gitarre:_Lagerfeuerdiplom/ Navi_Anhang}} |img=Lagerfeuer.gif }} <noinclude> {{PDF-Hinweis|Gitarre Lagerfeuerdiplom|Gitarre_Lagerfeuerdiplom.pdf}} {{Sammlungshinweis|Das Lagerfeuerdiplom}} {{Buchsuche|Gitarre}} {{clear}} {{Vorlage:Auszeichnung BdM|Dezember&nbsp;2009}} {{clear}} <div class="noprint"> {{Notiz| ;Das Lagerfeuerdiplom auf 2 HTML-Seiten Wegen der Dateigröße (je ca. 5 Mb) ggf. ungeeignet für Handys. * [[Benutzer:Mjchael/Sammlungen/Lagerfeuerdiplom|Lagerfeuerdiplom - Nur die Lektionen]] * [[Benutzer:Mjchael/Sammlungen/Lagerfeuerdiplom/Lieder Teil 1|Lieder Teil 1]] * [[Benutzer:Mjchael/Sammlungen/Lagerfeuerdiplom/Lieder Teil 2|Lieder Teil 2]] * [[Benutzer:Mjchael/Sammlungen/Lagerfeuerdiplom_Vorwort_und_Anhang|Lagerfeuerdiplom - Vorwort und Anhänge]] }} </div> </noinclude> * Das Lagerfeuerdiplom hat 100% {{:Gitarre: Lagerfeuerdiplom/ Status}} erreicht. Dennoch gibt es immer etwas zu tun. Rechtschreibung und Stil bedürfen Lektorendienste für die Druckreife. Seitdem das Lilypond-Plugin zuverlässig funktioniert, werden Noten- Akkord- und Tabulatur-Darstellung nebst Hörbeispielen schrittweise neu erstellt. Die Liedbeispiele sind ständig zu ergänzen und zu aktualisieren. {{Korrekturlesen}} :Siehe: {{todolink|Lagerfeuerdiplom|Todo-Liste für das Lagerfeuerdiplom}} <div class="noprint"> {{Navigation Thema Start|hochlink=Gitarre: Inhaltsübersicht|vorlink=Gitarre: Bevor wir beginnen}}</noinclude>__TOC__ </div> =Das Lagerfeuerdiplom= Das '''Lagerfeuerdiplom''' ist der erste Teil einer mehrbändigen Gitarrenschule im Wikibooks-Buchprojekt „[[Gitarre]]“. Der erste Band vermittelt Grundlagen des Gitarrespielens für Hobbygitarristen, auf die man nicht verzichten kann. Das Lagerfeuerdiplom darf inklusive aller Lieder, Noten und Tabulaturen für den Gitarrenunterricht frei und kostenlos kopiert und verwendet werden. == Lernziele für 8 Lektionen == * 6 Akkorde: A-Dur, D-Dur, G-Dur, C-Dur, E-Moll, A-Moll * 5 Schlagrhythmen: 4/4-, Eisenbahn-, Western-, 3/4- und Lagerfeuerschlag * schneller Griffwechsel (d.&#8239;h. Akkordwechsel innerhalb eines Taktes bzw. innerhalb eines Schlagmusters) Trotz des sehr begrenzten Lernstoffs bist du nach erfolgreichem Abschluss in der Lage, hunderte von Liedern zu begleiten. * Über 70 copyright-freie Lieder sind mit Texten und Akkorden vorhanden. * Weiterhin werden über 100 populäre Lieder vorgeschlagen. (Zwar ohne Text, aber mit Akkorden<span class="noprint">&nbsp;und Links zu Youtube</span>) Du wirst in der Lage sein, neben den typischen Pfadfinderliedern auch viele populäre Songs zu begleiten. * Breakfast at Tiffany's – Deep Blue Something * American Pie – Don McLean * Country Roads – John Denver * Father and Son – Cat Stevens * Knockin on Heavens Door – Bob Dylan * Let It Be – Beatles * Someone Like You (Adele) * 80 Millionen(Max Giesinger) * Viva La Vida (Coldplay) * Und, und, und ... Durch das strenge Copyright ist es hier leider nicht möglich, populäre Liedtexte mit der entsprechenden Begleitung zu veröffentlichen, doch die Beispiele findest du in vielen Liederbüchern. Wir geben dir Tipps, mit welchen Akkorden du bekannte Lieder begleiten kannst. Das hilft, wenn die Bearbeitungen in den Liederbüchern nicht so günstig für den Gitarrenanfänger sind. Was du hier lernst, wird dich dein ganzes Gitarristenleben begleiten. Auf diese Grundtechniken kannst du aufbauen, und du wirst immer wieder darauf zurückgreifen. * Im anschließenden [[Gitarre: Folkdiplom|Folkdiplom]] wirst du weitere Grundakkorde und Begleittechniken lernen. * Im [[Gitarre: Rockdiplom|Rockdiplom]] lernst du Powerchords und Barré-Akkorde, und das Thema Rhythmus wird vertieft. * Im [[Gitarre: Balladendiplom|Balladendiplom]] werden die Harmonien erweitert und weitere Zupftechniken vermittelt. * Im [[Gitarre: Rockballadendiplom|Rockballadendiplom]] überträgst du die erweiterten Harmonien auch auf die Barré-Akkorde und schnupperst ein wenig in Jazz hinein. * Weitere Bände wie [[Gitarre: Einführung in die Sologitarre|Sologitarre]] * oder [[Gitarre: Einführung in das Melodiepicking|Melodiepicking]] ergänzen das Ganze. <div class="noprint">Lies dir am besten vorher noch einmal die [[Gitarre:_Inhaltsübersicht#Wie_gebraucht_man_das_Gitarrenbuch|"Gebrauchsanleitung"]] zu diesem Gitarrenbuch durch.</div> = Lektionen = Eine Lektion ist für eine Unterrichtsstunde pro Woche gedacht (die Zeit, um die Lektion zu üben und vertiefen, ist nicht mit eingerechnet). Es gibt insgesamt 8 Lektionen, in denen Akkorde, Rhythmen und ein wenig Harmonielehre vermittelt werden, so dass eine Lektion mehrere Kapitel haben kann. Wenn man im Unterricht mehr auf einzelne Lieder eingeht, werden in der Praxis manche Lektion auch auf zwei oder drei Wochen verteilt. Die Lektionen sind so aufgebaut, dass der Stoff (also die Akkorde und Schlagmuster) der vorhergehenden Lektionen wiederholt wird. Von daher kann man ruhig mit den Lektionen voranschreiten, auch wenn die letzte noch nicht ganz fehlerfrei ist. Selbst wenn man in der Gruppe mal eine Lektion versäumt hat, ist die Lernkurve so flach, das man das Versäumte leicht aufholen kann. Damit die Wiederholungen für die anderen Schüler nicht langweilig wird, sind diese in neuen Liedern verpackt. Die 8 Lektionen des Lagerfeuerdiplom sind also auf zwei Monate ausgelegt.<ref>Die zwei Monate sind nur ein Mittelwert. Eifrige Schüler können das Lernziel auch schneller erreichen (insbesondere wenn sie z.&nbsp;B. Ferien und damit viel Zeit zum Üben haben oder schon ein anderes Instrument spielen). Doch nicht die schnelle Auffassungsgabe zählt, sondern Ausdauer und Kontinuität, sowie der Spaß am Singen.</ref> Selbstlerner sollten jedoch ruhig ein wenig mehr Zeit einplanen. ;Hauptkapitel {{:Gitarre: Lagerfeuerdiplom/ Navi}} <br><br> ;Unterkapitel Das Wichtigste zu Anfang<br /> {{:Gitarre:_Lagerfeuerdiplom/ Navi_Einführung}}<br><br> ;Voranschreitende Lektionen {{:Gitarre:_Lagerfeuerdiplom/ Navi_Lektionen}}<br><br> ;Wie kann man singen, was kann man singen {{:Gitarre:_Lagerfeuerdiplom/ Navi_Repertoire}}<br><br> ;Alle Übungsbeispiele nach Lektionen sortiert (siehe auch: [[Gitarre: Lagerfeuerdiplom Liedbeispiele|Liedbeispiele]])<br /> {{:Gitarre:_Lagerfeuerdiplom/ Navi_Liedbeispiele}}<br><br> ;Weitere nützliche Informationen {{:Gitarre:_Lagerfeuerdiplom/ Navi_Anhang}}<br /> = Was ist das „Lagerfeuerdiplom“? = Die Gitarrenkurse auf den Wikibooks richten sich an Hobbymusiker. In Anlehnung an das Bauerndiplom (nebst Turmdiplom und Königsdiplom) des [[w:Deutscher Schachbund|Deutschen Schachbundes]] bieten die Diplome der Wikibooks (Lagerfeuerdiplom, Folkdiplom, Rockdiplom, Balladendiplom, u. a.) Anfängern die Möglichkeit, zu bekunden, dass sie ein bestimmtes Level des Gitarrespielens erreicht haben. Man erreicht ein Diplom, indem man eine Sammlung von Liedern spielen kann, die alle Lernziele abdecken. Die Diplome können ohne Prüfung von jedem Gitarrenlehrer (auch ehrenamtliche) ausgestellt werden, der von einer öffentlichen Einrichtung oder Organisation (Gemeinden, Schulen, kirchlichen Einrichtungen, Musikschulen, Volkshochschulen o.ä.) den Auftrag dazu erhalten hat und der das Diplom mit einem Stempel der Organisation beglaubigen lassen kann. Die Lieder müssen weder auswendig gespielt werden noch muss alles 100 % fehlerfrei sein. Jedoch sollte man in puncto Rhythmus und Griffwechsel ein Mindestmaß an Sicherheit besitzen. Mit dem „Lagerfeuerdiplom“<ref>Das bestandene „Lagerfeuerdiplom“ ist eigentlich ein '''Zertifikat''' – aber „Lagerfeuerzertifikat“ hört sich - ehrlich gesagt - blöd an.</ref> verfügt man über ausreichend Akkorde und Schlagtechniken, um weit über drei Stunden (am Lagerfeuer) Lieder zu begleiten, ohne sich zu wiederholen. Man erreicht nicht irgendein Lagerfeuerdiplom, sondern ''Das Lagerfeuerdiplom''<br /> <small>Der Begriff ''Lagerfeuerdiplom'' sowie die weiteren Diplome sind Wortneuschöpfungen vom Autor [[Benutzer:Mjchael|Mjchael]] und wurden speziell für die Wikibooks übernommen. Jede Verwendung dieses Begriffes bezieht sich von daher auf die hier vermittelten Lerninhalte und Lernziele. Jeder Gitarrenlehrer darf gerne mit dem Begriff "Lagerfeuerdiplom" werben, sofern er sich auf diesen Wikibooks-Lehrgang bezieht und als Quelle einen gut lesbaren Link zum Lagerfeuerdiplom oder zumindest des Gitarrenbuches mit angibt, so dass klar wird, dass es sich um ein Buch der Wikibooks handelt.</small> == Von einer Idee zum Konzept== In einem Pfadfinderlager gab es folgende Regel: Wer nicht ein Mindestmaß an Fähigkeiten mitbrachte, der durfte keine Gitarre anfassen. Damit wollte man sowohl die Gitarren als auch die Nerven bzw. Ohren aller Beteiligten schonen. So ist die Idee zum Lagerfeuerdiplom entstanden. Dieser Kurs vermittelt solch ein Minimum an Wissen und Können. Das Lagerfeuerdiplom stellt so etwas wie einen 'Freischwimmer des Gitarrespielens' dar. Das vermittelte Wissen ist ein „Muss“ für jeden Gitarristen. Dabei ist es unerheblich, ob man E-Gitarre, Westerngitarre oder klassische Gitarre spielen möchte. ==Vom Konzept in die Praxis== Bevor das Lagerfeuerdiplom als Buch für Wikibooks eingeführt wurde, ist das Unterrichtskonzept schon mehrere Jahre eingesetzt, getestet und weiterentwickelt worden. Erzieherinnen, Lehrerinnen und Leiter von Jugendgruppen haben sich mit dem bestandenen '''Lagerfeuerdiplom''' getraut, ihre neu erworbenen Fähigkeiten in der Liedbegleitung bei ihren Gruppen in die Praxis umzusetzen. Zudem wurde und wird der Online-Kurs ständig durch Mitglieder aus verschiedenen Gitarrenforen und Facebook-Gruppen gelesen und verbessert. Fehler, die auffallen, werden meist umgehend berichtigt. Allen Schülern, die das Konzept getestet haben, allen Mitgliedern der www.wikibooks.de sowie des [http://www.gitarrenboard.de/main.php www.gitarrenboard.de] und ehemalige gitarre-spielen-lernen<ref>Bei dem ehemaligen Forum Gitarre-Spielen-Lernen ist die Datenbank zerschossen. Vermutlich bei dem Versuch immer neuere Sicherheitsstandards der großen Browser-Giganten zu erfüllen.</ref> Forum diversen Facebook-Gruppen (insbesondere der Gruppe "Gitarre lernen") und auch allen Personen, die hier einen Diskussionsbeitrag geleistet haben oder eine E-Mail geschrieben haben - also allen, die mit konstruktiver Kritik, Korrekturen, Informationen, Rat und Tat dieses Konzept vorangebracht haben - sei an dieser Stelle ein herzliches Dankeschön ausgesprochen. ==Weitere Tipps== Die Kurse (Lagerfeuerdiplom und folgende) sind zwar für Selbstlernende gedacht und entsprechend ausführlich formuliert worden<ref>Vor allem in den ersten Lektionen wird es viel Lesestoff für euch geben. Leider sitze ich euch nicht gegenüber und kann euch nicht zeigen, wie das eine oder andere gemeint ist. Kurze vereinzelte Bemerkungen während dem Unterricht lesen sich ungleich länger, wenn sie für ein Buch aufbereitet werden. Fortgeschrittene Gitarrenspieler mögen mir verzeihen, wenn ich an einigen Stellen Themen, die möglicherweise trivial erscheinen, ausführlich erkläre. Bitte bedenkt, dass es auch einmal Zeiten gab, in denen ihr für Hilfe dankbar wart. Aus den Reaktionen und Diskussionen der Leser weiß ich, dass sie zwar von der Faszination der Gitarre angesteckt worden sind, aber sich aus Zeitmangel und vielleicht auch aus Geldmangel keinen Lehrer leisten können, oder dass in ihrer Nähe kein geeigneter Lehrer zu finden ist. Im Forum des [http://www.gitarrenboard.de www.Gitarrenboard.de] sowie [http://www.gitarre-spielen-lernen.de/forum/forum18.html www.Gitarre-spielen-lernen.de] konnte man sehen, dass selbst die einfachsten Themen für Anfänger ein Problem darstellen können. Also gebe ich auf alle üblichen Fragen und Probleme, die bei meinen Schülern immer wieder aufgetaucht sind, eine hoffentlich leicht verständliche Antwort. Die Bemerkungen, die während eines Unterrichts kommen, habe ich jeweils in einem eigenen Kapitel zusammengefasst. Ich hoffe, du nimmst es nicht persönlich, wenn ich erst einmal davon ausgehe, dass du (wie ich am Anfang auch) alle Fehler machst, die man anfangs machen kann. Solltest du jedoch ein Naturtalent sein und weniger oder gar keine Fehler machen, dann sieh die vielleicht zu ausführlichen Darstellungen als Tipp oder Hilfe an, wenn du selbst einem Normalsterblichen Gitarrenunterricht geben willst. Also nur nicht abschrecken lassen, wenn irgendwo vieeel steht. Das heißt nicht unbedingt, dass es auch schwer ist.</ref>, dennoch sollte erwähnt werden, dass man mit einem Lehrer schneller lernt. Sollte keiner zur Verfügung stehen, helfen auch Tipps von einem geübten Gitarrenspieler. Ebenfalls lohnt es sich, einen Blick in das eine oder andere Gitarrenbuch zu werfen. Bücher haben den Vorteil, dass man nicht vor dem PC sitzen muss, sondern dort, wo es einem beliebt. Zudem sind Bücher sowie Lehrer nicht auf copyright-freie Übungsbeispiele beschränkt, so dass sie eventuell eine größere Liederauswahl bieten. Wer mit den Beschreibungen hier Probleme haben sollte oder darüber hinaus noch Fragen hat, der sollte sich ruhig in einem Gitarrenforum anmelden. ;Beispiele * [http://www.gitarrenboard.de www.Gitarrenboard.de] * Weitere Online-Foren und interessante Link-Tipps findet ihr in der [http://de.wikibooks.org/wiki/Gitarre:_Inhalts%C3%BCbersicht#Linkliste http://de.wikibooks.org/wiki/Gitarre:_Inhaltsübersicht#Linkliste] <!-- nicht in einen internen Link umschreiben. Der Link ist für externe Leser (PDF oder Buchform) gedacht --> {{Fußnoten}} <noinclude> <br><br><br> <div class="noprint" style="background:#fffdd0 ;"> <small>Dieser Abschnitt wird nicht mit ausgedruckt</small> = (Anhang bzw. Vorschau) = (wird auch nicht mit ausgedruckt. Für den Ausdruck siehe [[Gitarre: Lagerfeuerdiplom Liedbeispiele|Anhang]].) == Folgende Lieder kannst du bald spielen == Folgende Übungsbeispiele zeigen dir, was du mit dem Lagerfeuerdiplom innerhalb von zwei Monaten auf einem einfachen Niveau spielen kannst. {{:Gitarre: Lagerfeuerdiplom Liedbeispiele}} == Copyright-freie Lieder im Kurs == <categorytree mode="pages" showcount="on">Liederbuch/ Lagerfeuerdiplom</categorytree> </div> {{:Vorlage:Navigation hoch}} {{Navigation Thema Start|hochlink=Gitarre: Inhaltsübersicht|vorlink=Gitarre: Bevor wir beginnen}}</noinclude><noinclude> [[Kategorie:Gitarre/_Kurse|Lagerfeuerdiplom]] [[Kategorie:Fertiges Buch|Gitarre: Lagerfeuerdiplom]] [[Kategorie:Buch]] </noinclude> [[en:b:Guitar/Campfire Diploma]] 1upfcf8la2w4s6pivewmzhy2t7ciw8s Gitarre: Melodiepicking - Whiskey in the Jar 0 61381 1090749 1063574 2026-09-13T11:14:56Z Mjchael 2222 /* Whiskey in the Jar */ Stil 1090749 wikitext text/x-wiki <noinclude> {{:Gitarre/_Navi|Einführung_in_das_Melodiepicking|Kategorietitel=Whiskey in the Jar| {{:Gitarre:_Melodiepicking/_Navi}} |img=Tablature music icon.svg|px=60}} </noinclude> =Whiskey in the Jar= Grifftechnisch sollte es bei diesem Stück keine großen Überraschungen geben – an überbundene Noten solltest du dich inzwischen gewöhnt haben. Der Text hilft dir beim Sortieren und Abzählen der Noten und macht die Wiederholungen deutlich erkennbar: was beim ersten Mal ausgelassen und beim zweiten Durchgang übersprungen wird. Achte dabei auf die Klammer mit der 1. und 2. und auf den durchgestrichenen Text. Die eigentliche Herausforderung ist das Synkopieren: Die ersten Töne eines Taktes müssen oft früher gespielt werden, da die Töne des neuen Akkords bereits im vorangegangenen Takt beginnen. Ein Ton des neuen Akkords wird also schon am Ende des alten Taktes auf das letzte „und" gesungen – er beginnt früher als die 1, wird aber noch dorthin überbunden. Um diese Spieltechnik sicher zu beherrschen, wiederhole die [[Gitarre: Picking-Basis-Pattern| Basis-Picking-Etüde]] und ergänze sie um den vorgezogenen Griffwechsel. == Vorübung == [[Datei:Basis Picking Rhythmus Studie.pdf]] <div class="noprint"> {{Audio|Basis Picking Rhythmus Studie.mid| hier das "Basis Picking Rhythmus Studie" anhören}} {{PDF-Version|Basis Picking Rhythmus Studie.pdf|hier das PDF zum "Basis Picking Rhythmus Studie" mit Noten und Tabulatur herunterladen}} </div> Beim Refrain kommt ein kleiner Basslauf vor. Unmittelbar nach dem Basslauf steigt man ähnlich wie beim Folk-Picking mit dem G als einzelner Basston (ohne Melodie-Ton) ein. Dan geht es die ersten beiten Töne beim "Whack foll" kurzfristig im 4/4-Feeling weiter. Nur der Rest des Taktes wird wie beim Basispicking beendet. Diese beiden Takte solltest du dir isoliert vornehmen und mehrfach hintereinander spielen. <pre> 1 2 3 4 1 2 3 + 4 + 1 + 2 + 3 + 4 + ||-------------|--------------------|-----------------|| ||-------------|-0---0---0----------|-0-1---3---------|| ||-------------|-----0------0-----2-|-----------0---0-|| ||----0--2--4--|---------------0----|-----0-------0---|| ||-------------|--------------------|-----------------|| ||-3-----------|-3-------3----------|-3-------3-------|| </pre> <div class="noprint> ;Detailübung aus dem Stück {{Audio|Picking_Whiskey_in_the_Jar-training.mid| hier die Vorübung zu "Picking_Whiskey_in_the_Jar" anhören}} == Whiskey in the Jar == [[Datei:Picking Whiskey in the Jar.pdf]] <div class="noprint"> {{Audio|Picking_Whiskey_in_the_Jar.mid| hier das "Picking_Whiskey_in_the_Jar" anhören}} {{PDF-Version|Picking Whiskey in the Jar.pdf|hier das PDF zum "Whiskey in the Jar" mit Noten und Tabulatur herunterladen}} </div> Es gibt vollständigen Text nebst ein paar Hintergrundinformationen im [[Gitarre: Liedbeispiel 4b|Lagerfeuerdiplom (Whiskey in the Jar)]] <noinclude> <div class="noprint> {{Navigation Thema| zurücklink=Gitarre: Melodiepicking - Michael Row Your Board Ashore | hochlink=#top | vorlink=Gitarre: Melodiepicking - Oh When The Saints }} </div> [[Kategorie:Liederbuch/_Irish-Folk]] </noinclude> aqus7p4rk8aulamw4th2axvq5fqhdnl Gitarre: Pentatonik Skalen verbinden 0 81019 1090740 1089333 2026-09-13T02:33:52Z Mjchael 2222 /* Baustelle */ 1090740 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre:_Sologitarre/ Navi}}| {{:Gitarre:_Sologitarre/ Navi_Pentatonik}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} {{todo|Forumsbeitrag in Wikibooksstil übertragen|Mjchael|Sologitarre}} Was muss man machen, um eine Skala mit der Nachbarskala zu verbinden? Schau dir dazu doch einfach mal so eine Pentatonik genauer an. <pre style="overflow-x: scroll;">G-Dur-Pentatonik (Grundton = 1) Em -Pentatonik (Grundton = 6) III V VII XII 6 ||--|---|-1-|---|-2-|--|-3-|---|---|-5-|--|-6-|--|---|-1-|- 3 ||--|---|-5-|---|-6-|--|---|-1-|---|-2-|--|-3-|--|---|-5-|- 1 ||--|-2-|---|-3-|---|--|-5-|---|-6-|---|--|-1-|--|-2-|---|- 5 ||--|-6-|---|---|-1-|--|-2-|---|-3-|---|--|-5-|--|-6-|---|- 2 ||--|-3-|---|---|-5-|--|-6-|---|---|-1-|--|-2-|--|-3-|---|- 6 ||--|---|-1-|---|-2-|--|-3-|---|---|-5-|--|-6-|--|---|-1-|- </pre> Wie sind die einzelnen Intervalle Töne miteinander verbunden? ;Enge Verbindung <div style="padding:5px; margin-right:20px; border:black solid 1px; "> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1;w:3; 2-1-1;2-3-2;2-5-3; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> ;Weite Verbindung <div style="padding:5px; margin-right:20px; border:black solid 1px; "> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1;w:3; 2-1-2;2-3-3;2-6-5; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="padding:5px; margin-right:20px; border:black solid 1px; "> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1;w:3; 2-1-3;2-4-5;2-6-6; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="padding:5px; margin-right:20px; border:black solid 1px; "> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1;w:3; 2-1-5;2-3-6;2-6-1; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="padding:5px; margin-right:20px; border:black solid 1px; "> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1;w:3; 2-1-6;2-4-1;2-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Du siehst, dass man bei den weiten Verbindungen die Finger über 6 Bünde überstrecken müsste. Ein Slide wäre dort zwar auch möglich, ist aber nicht ganz so leicht zu erlernen, wie bei einem Slide, der nur über 2 Bünde geht. Also würde ich die weiten Skalenverbindungen für einen Skalenwechsel vorerst vermeiden. Sehr praktikabel ist folgende Verbindung: <div style="padding:5px; margin-right:20px; border:black solid 1px; "> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1;w:4; 2-3-5;2-5-6; 3-1-1;3-3-2;3-5-3; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> oder: <div style="padding:5px; margin-right:20px; border:black solid 1px; "> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1;w:4; 2-1-1;2-3-2;2-5-3; 3-1-5;3-3-6; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> =Baustelle= Daher drängen sich förmlich folgende Verbindungen auf: <div style="padding:5px; margin-right:20px; border:black solid 1px; "> ;1. Variante <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1; 1-8-5;1-10-6; 2-6-1;2-8-2;2-10-3; 3-5-5;3-7-6; 4-3-1;4-5-2;4-7-3; 5-3-5;5-5-6; 6-1-1;6-3-2;6-5-3; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="padding:5px; margin-right:20px; border:black solid 1px; "> ;2. Variante <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1; 1-6-1;1-8-2;1-10-3; 2-6-5;2-8-6; 3-3-1;3-5-2;3-7-3; 4-3-5;4-5-6; 5-1-1;5-3-2;5-5-3; 6-1-5;6-3-6; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Versuche vorher mal ein paar Takte mit den F-Dur-Powerchord zu spielen, und dann in die Pentatonik zu wechseln. <div style="padding:5px; margin-right:20px; border:black solid 1px; "> ;F⁵ <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1; 4-3-1; 5-3-5; 6-1-1; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Oder versuche mal folgenden Dm-Powerchord zu spielen, und dann in die Pentatonik zu wechseln. <div style="padding:5px; margin-right:20px; border:black solid 1px; "> ;D⁵ <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . custom) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1; 3-7-6; 4-7-3; 5-5-6; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Wenden wir das Prinzip mal bei der C-Dur bzw. Am-Pentatonik an. <pre style="overflow-x: scroll;"> C-Dur-Pentatonik (Grundton = 1) Am -Pentatonik (Grundton = 6) III V VII XII 3 ||---|---|-5-|---|-6-|---|---|-1-|---|-2-|---|-3-|---|---|-5-|- ||-1-|---|-2-|---|-3-|---|---|-5-|---|-6-|---|---|-1-|---|-2-|- 5 ||---|-6-|---|---|-1-|---|-2-|---|-3-|---|---|-5-|---|-6-|---|- 2 ||---|-3-|---|---|-5-|---|-6-|---|---|-1-|---|-2-|---|-3-|---|- 6 ||---|---|-1-|---|-2-|---|-3-|---|---|-5-|---|-6-|---|---|-1-|- 3 ||---|---|-5-|---|-6-|---|---|-1-|---|-2-|---|-3-|---|---|-5-|-</pre> <pre style="overflow-x: scroll;">Variante 2: III V VII XII ||---|---|---|---|---|---|---|-1-|---|-2-|---|-3-|---|---|---|- ||---|---|---|---|---|---|---|-5-|---|-6-|---|---|---|---|---|- ||---|---|---|---|-1-|---|-2-|---|-3-|---|---|---|---|---|---|- ||---|---|---|---|-5-|---|-6-|---|---|---|---|---|---|---|---|- ||---|---|-1-|---|-2-|---|-3-|---|---|---|---|---|---|---|---|- ||---|---|-5-|---|-6-|---|---|---|---|---|---|---|---|---|---|- Versuche vorher mal ein paar Takte mit dem C-Powerchord zu spielen III V VII XII ||---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|- ||---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|- ||---|---|---|---|-1-|---|---|---|---|---|---|---|---|---|---|- ||---|---|---|---|-5-|---|---|---|---|---|---|---|---|---|---|- ||---|---|-1-|---|---|---|---|---|---|---|---|---|---|---|---|- ||---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|- Oder den A-Powerchord III V VII XII ||---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|- ||---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|- ||---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|- ||---|---|---|---|---|---|-6-|---|---|---|---|---|---|---|---|- ||---|---|---|---|---|---|-3-|---|---|---|---|---|---|---|---|- ||---|---|---|---|-6-|---|---|---|---|---|---|---|---|---|---|- </pre> Du hast überall immer folgende Intervall-Verbindung <pre style="overflow-x: scroll;"> ||---|---|---|---|-1-|---|-2-|---|-3-|---|---|---|---|---|---|- ||---|---|---|---|-5-|---|-6-|---|---|---|---|---|---|---|---|- ||---|---|-1-|---|-2-|---|-3-|---|---|---|---|---|---|---|---|-</pre> Genau hier hast du einen recht komfortablen Übergang von der einen in die andere Skala. Du baust einfach bei --|-1-|---|-2-|---|-3-|-- irgendwo einen Slide ein, und du bist von einer in die andere Skala geslidet. Die verschiebt sich nur zwischen der G- und der H-Saite um einen Bund weiter. {{:Vorlage:Navigation hoch}} dwniig7u4x0r15h03safg5ilhg9rq2o Python/ Rechnen 0 116184 1090722 1073457 2026-09-12T16:42:35Z Hardy42 1911 /* Rechenoperatoren */ 1090722 wikitext text/x-wiki Sobald Python installiert und gestartet ist, können Sie damit rechnen. Tippen Sie die gewünschte Rechenoperation in die Befehlszeile ein und drücken Sie Enter. Das Ergebnis wird Ihnen in der nächsten Zeile angezeigt. Hier ein paar Beispiele (probieren Sie es ruhig selbst aus): <syntaxhighlight lang="python"> >>> 3 3 >>> 1+2 3 >>> 8/3*3 8.0 >>> 8//3*3.0 6.0 >>> 8%3*3 6 >>> 8//3*3 6 >>> 8/0.7 11.428571428571429 </syntaxhighlight> Wie Ihnen vielleicht auffällt, wird das Ergebnis unterschiedlich dargestellt, mal als Ganzzahl (6) oder als Gleitkommazahl (11.428571428571429). Dies liegt daran, dass Python unterschiedliche [[Python/ Datentypen|Datentypen]] für Zahlen nutzt. Bevor wir näher auf dieses Thema eingehen, schauen wir kurz, welche Rechenoperatoren Sie nutzen können. == Rechenoperatoren == Python stellt Ihnen sieben verschiedene Rechenoperatoren zur Verfügung (die Spalte „Verknüpfung“ ist jeweils mit einem Link zum Wikipedia-Artikel versehen). {| class="wikitable" ! [[w:de:Verknüpfung (Mathematik)|Verknüpfung]] ! Operator-Symbol ! Beispiel ! Ergebnis |- |[[:w:de:Potenz (Mathematik)|Potenz]] | ** | 2**3 | 8 |- |[[w:de:Multiplikation|Multiplikation]] | * | 2 * 3 | 6 |- |[[w:de:Division (Mathematik)|Division]] | / | 14 / 3 | 4.666666666666667 |- |[[w:de:Division mit Rest|Ganzzahlige Division]] | // | 14 // 3 | 4 |- |[[w:de:Division_mit_Rest#Modulo|Modulo]] | % | 14 % 3 | 2 |- |[[w:de:Addition|Addition]] | + | 1 + 2 | 3 |- |[[w:de:Subtraktion|Subtraktion]] | - | 10 - 3 | 7 |} Überraschend ist vielleicht ** für die Potenzrechnung, statt des gewohnten 2³. Grund dafür ist schlicht die einfache und schnelle Eingabe über die Tastatur. Aus dem Alltag ungewohnt (weil selten genutzt) sind vielleicht die ganzzahlige Division und der Modulo (die klassische Division in Zeile eins): <syntaxhighlight lang="python"> >>> 9/4 2.25 >>> 9//4 2 >>> 9%4 1 </syntaxhighlight> Sie sind aber wichtig für zahlentheoretische Berechnungen, wie z.&nbsp;B. Primzahltests oder Prüfung auf Teilbarkeit. Folgendes Beispiel aus der Wikipedia soll zur Verdeutlichung dienen: 9 : 4 = 2, Rest 1, da 9 = 4 × 2 + 1 („4 passt 2-mal in 9 und es bleibt 1 übrig“ – der Rest ist also 1) Möglicherweise sehen sie jetzt schon, wie Sie dieses Beispiel auf Python übertragen können: * <code>9 // 4</code> = 2 („4 passt 2-mal in 9...) * <code>9 % 4</code> = 1 (...und es bleibt 1 übrig“ – der Rest ist also 1) == Bitweise Operatoren == Wie in anderen Programmiersprachen gibt es auch in Python Operatoren für Bitmanipulation ganzer Zahlen: {| class="wikitable" ! [[w:de:Bitweiser Operator|Operation]] ! Operator-Symbol ! Beispiel ! Ergebnis ! binär |- | bitweises Und | & | 7 & 1 | 1 | <code>111</code> (7)<br><code>001</code> (1)<br><code>001</code> (1) |- | bitweises Oder | <nowiki>|</nowiki> | 5 <nowiki>|</nowiki> 3 | 7 | <code>101</code> (5)<br><code>011</code> (3)<br><code>111</code> (7) |- | bitweises XOR | ^ | 7 ^ 3 | 4 | <code>111</code> (7)<br><code>011</code> (3)<br><code>100</code> (4) |- | bitweises Not | ~ | ~7 | -8 | <code>0...0111</code> (7)<br><code>1...1000</code> (-8) |- | bitweise Verschiebung (shift) nach links | << | 1 << 3 | 8 | <code>000'''1'''</code><br><code>'''1'''000</code> |- | bitweise Verschiebung (shift) nach rechts | >> | 10 >> 1 | 5 | <code>'''101'''0</code><br><code>0'''101'''</code> |} == Rangfolge der Operatoren == Wie das folgende Beispiel verdeutlicht, wird das Rechenergebnis durch die Priorität beeinflusst, in welcher die Rechenoperationen durchgeführt werden: <syntaxhighlight lang="python"> >>> 4+2**3 12 >>> (4+2)**3 216 </syntaxhighlight> Wie sieht also die Operatorrangfolge in Python aus? # als erstes werden Klammern ausgewertet # danach die Potenzen # Multiplikation/Division/Division mit Rest/Modulo # als letztes die Addition/Subtraktion Die Einträge einer Zeile sind dabei gleichberechtigt. Gleichberechtigte Einträge werden ''meistens'' von links nach rechts ausgewertet; die wichtigste Ausnahme ist das Potenzieren: {{nowrap|1=2**2**3 = 2**(2**3) = 256}}. Diese Eigenschaft der Operatoren wird Operatorassoziativität<ref>{{w|Operatorassoziativität|Operatorassoziativität}}</ref> genannt. Auf der Seite [[Python/ Rangfolge der Operatoren|Rangfolge der Operatoren]] im Anhang ist eine Tabelle mit der Rangfolge und Assoziativität ''aller'' Operatoren. == Zahlen: int und float == Kommen wir zurück zu unserem Eingangsbeispiel: <syntaxhighlight lang="python"> >>> 1+2 3 >>> 8/0.7 11.428571428571429 </syntaxhighlight> Python 3 unterscheidet zwischen '''Ganzzahlen''' und '''Gleitkommazahlen'''. Letztere haben einen gebrochenen Teil hinter dem Dezimaltrennzeichen. Als Dezimaltrennzeichen nutzt Python den Punkt (.), und nicht, wie in Deutschland üblich, das Komma (,). Ein 3.1 entspricht also dem deutschen 3,1. Die beiden Typen werden mit den englischen Wörtern '''int''' für ''integer'' (Ganzzahlen) und '''float''' (Gleitkommazahlen) bezeichnet. Im Gegensatz zu manch anderen Programmiersprachen nimmt uns Python hier viel Arbeit ab. Dies betrifft besonders die Speicherung (besonders die Reservierung und Freigabe von Arbeitsspeicher). Dies wird im nächsten Kapitel deutlicher werden. Um zu erfahren, welchen Datentyp Python ausgewählt hat, nutzen wir die Funktion ''type()'': <syntaxhighlight lang="python"> >>> type(1+ 2) <class 'int'> >>> type (8/0.7) <class 'float'> >>> type(11.428571428571429) <class 'float'> </syntaxhighlight> Als Ergebnis teilt uns Python den jeweiligen Datentyp (''class'') mit. Die Leerzeichen hinter „type“ und vor der „2“ sind übrigens absichtlich gewählt um zu zeigen: Python ist clever genug, um sich davon nicht durcheinander bringen zu lassen. Trotzdem ist es natürlich sinnvoll, innerhalb eines Programmes die Leerzeichen nicht willkürlich zu platzieren, allein schon wegen der besseren Lesbarkeit für Menschen. Am Anfang einer Zeile ist die Anzahl der Leerzeichen sogar vorgegeben, wie wir später noch sehen werden. Exkurs: Vermutlich werden Sie früher oder später über den Datentyp '''long''' stolpern. Dieser wurde, in den Versionen vor Python 3, für den Umgang mit und die Speicherung großer Zahlen genutzt. In Python 3 hat '''int''' diese Rolle mit übernommen. === int === Ganzzahlige Literale (numerische Konstanten) können in Python als Dezimal-, Binär-, Oktal- oder Hexadezimalzahlen mit oder ohne Vorzeichen ausgedrückt werden. Wir Menschen rechnen hauptsächlich im Dezimalsystem, also dem Zahlensystem mit der Basis 10. Folgende Tabelle zeigt die Darstellung ganzer Zahlen in den anderen genannten Zahlensystemen: {| class="wikitable" ! [[w:de:Zahlensystem|Zahlensystem]] ! Basis ! Präfix ! Beispiel ! in Dezimal |- |[[:w:de:Dualsystem|Dual-/Binär-]] | align=right | 2 | align=right | 0b | align=right | 0b11 | align=right | 3 |- |[[:w:de:Oktalsystem|Oktal-]] | align=right | 8 | align=right | 0o | align=right | 0o11 | align=right | 9 |- |[[w:de:Hexadezimalsystem|Hexadezimal-]] | align=right | 16 | align=right | 0x | align=right | -0x11 | align=right | -17 |} Das Präfix muss der jeweiligen Zahl vorangestellt werden und beginnt immer mit 0 (Null) und einem Buchstaben: <syntaxhighlight lang="python"> >>> 0b11 3 >>> 0o11 9 >>> 0X11 17 </syntaxhighlight> Wie Sie sehen können, gibt Python die Zahlen standardmäßig im Dezimalsystem aus. === float === Gleitkommazahlen werden in Python mit Dezimalpunkt, mit Exponent oder mit beiden angegeben, Beispiele: {| class=wikitable | Ohne Exponent: || 0.1 || -150. || .03 |- | Mit Exponent: || 1E-1 || -1.5e2 || 3E-2 |- | Standard-Format: || 0.1 || -150.0 || 0.03 |} === Zifferngruppierung === Ziffern, einschließlich der Hexadezimalziffern können mit <code>_</code> als Trennzeichen gruppiert werden. Beispiele: <syntaxhighlight lang="python"> >>> 1_000_000 1000000 >>> 0o3_751 2025 >>> 0xAC_DC 44252 </syntaxhighlight> == Exkurs: Mathematische Funktionen == Vielleicht fehlt Ihnen in der obigen Auflistung die Möglichkeit, Quadratwurzeln zu ziehen. Diese Fähigkeit stellt Ihnen Python nicht direkt zur Verfügung, sondern als Teil des "[[Python/ Module|math-Moduls]]". Der Vollständigkeit halber soll Ihnen hier die Möglichkeit aufgezeigt werden, auch wenn wir damit dem Stoff vorgreifen. <syntaxhighlight lang="python"> >>> from math import sqrt >>> sqrt(9) 3.0 </syntaxhighlight> # Sie tippen <code>from math import sqrt</code> ein und drücken Enter (dies müssen Sie einmalig pro Sitzung tun) - eine Rückmeldung erhalten Sie nicht. # Sie rufen "sqrt()" mit einer nicht-negativen Zahl (vom Typ ''float'' oder ''int'') als Parameter auf. Das Ergebnis ist immer vom Typ ''float''. Für die Wurzel aus negativen Zahlen brauchen Sie wiederum ein anderes Modul: <syntaxhighlight lang="python"> >>> import cmath >>> cmath.sqrt(-9) 3j </syntaxhighlight> Das Ergebnis wird als komplexe Zahl dargestellt. Mehr dazu später. Um den interaktiven Modus als wissenschaftlichen Rechner zu nutzen, bietet es sich an, alle mathematischen Standard-Funktionen aus ''math'' zu importieren. Das geht mit <code>*</code> als Wildcardsymbol: <syntaxhighlight lang="python"> from math import * from builtins import pow # builtins.pow kann mehr als math.pow </syntaxhighlight> == Zusammenfassung == Sie haben gelernt, dass Sie Python als Taschenrechner nutzen können. Sie wissen, welche Rechenoperatoren Ihnen zur Verfügung stehen und kennen die Datentypen '''int''' und '''float'''. Ebenso wissen Sie, wie Sie den Datentyp herausfinden. Nach diesem doch etwas trockenen Kapitel kommen wir zu den [[Python/ Variable|Variablen]]. {{Displaytitle|Rechnen und Operatoren}} {{Navigation zurückhochvor| zurücktext=Erste Schritte| zurücklink=Python/ Erste Schritte| hochtext=Inhaltsverzeichnis| hochlink=Python| vortext=Variable| vorlink=Python/ Variable }} efhuspozcfe1xynj3thg4u22ui4m5q7 Gitarre: Lerne CAGED-Stammtöne 0 117512 1090723 1090709 2026-09-12T16:49:58Z Mjchael 2222 /* Töne der C-Dur Tonleiter auf dem Griffbrett */ 1090723 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre: Sologitarre/ Navi Improvisation in Dur und Moll}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} = Wiederholung der Fingersätze = ; mit Schwerpunkt auf den Stammtönen Diese Wiederholung ist zum einen dafür gedacht, die vorhergehenden Übungen auf jeder Saitenlage zu machen, und auch in jeder Bundlage, gleichgültig ob die Finger eng beieinander oder weit auseinander stehen. Zum andern sind diese als Vorbereitung in die Sologitarre gedacht. Beispielsweise als Auflockerungsübung zwischen den Barré-Akkorden. Besonderen Augenmerk wollen wir hier auf die Notennamen legen. Diese können hier mitgelernt werden. Solltest du meinen, das sei noch nicht für dich dran und kann warten, dann springe zur ersten CAGED-Skala. Du kannst beim Kapitel Longform nochmal hierrauf zurückkommen. * [[Gitarre: CAGED-Skala D-Dur-Form|CAGED-Skala D-Dur-Form]] Lassen wir die [[Gitarre: Aufbau der CAGED-Skalenformen|erste Lektion]] (insbesondere für die Quereinsteiger) noch einmal Revue passieren. Die folgenden Übungen enthalten oft eine Folge von ein- oder zweitaktigen Sequenzen. Eine Sequenz ist ein Motiv, dass sich auf verschiedenen Tonhöhen wiederholt. Auch ohne Notenkenntnisse kannst du den Verlauf und die Wiederholungen der Sequenzen einfacher im Notenbild verfolgen, als in der Tabulatur; insbesondere wenn du dir gleichzeitig die Übung anhörst. Es kommen auch Ausschnitte aus klassischen Stücken, Folksongs, Kinderlieder o.ä. vor. Die einfache Struktur oder der Bekanntheitsgrad der Melodien sollen dir das Üben erleichtern. Die Finger finden so leichter ihre Position, als wenn du erstmal jede einzelne Note aus der Tabulatur entschlüsseln musst. Jede Übung wird auf allen Saitenlagen geübt. Vorher blieben wir in den mittleren Lagen. Jetzt gehen wir auch in die ersten Bünde, wo man die Finger etwas mehr spreizen muss, und in die höheren Lagen, wo es ein wenig eng wird. Die Stücke wiederholen sich in dieser Lektion in der selben Tonart, doch auf verschiedenen Bünden. Du spielst immer die selbe Tonfolge, nur auf verschiedenen Tonhöhen bzw. auf verschiedenen Saitenlagen. Lediglich zwischen der G- und H-Saite musst du dir jedesmal überlegen, wie sich der Lagewechsel auf den Fingersatz auswirkt. Doch der Fingersatz in den anderen höheren Lagen bleibt immer gleich. Wie die Tonfolgen mit dem CAGED-System zusammenhängen, das muss dich nur am Rande interessieren. Es wird in den folgenden Lektionen näher und ausführlicher erleutert. :[[Datei:Scala Griffbrett.svg]] Wir hatten uns bei den vorhergehenden Übungen weitestgehend an den Intervallen (1-j7) und an der Tabulatur orientiert. Diese sind in allen Tonarten gleich. Suche zuerst das Karré! Daran orientierst du dich. :[[Image:Scala Carree.svg]] {{Tipp|Lerne bei der C-Dur-Tonleiter nicht nur die Intervalle <br> 2 - 3 4 - 5<br> 6 - j7 1 - 2<br> sondern benenne auch jede einzelne Note. <br> D - E F - G<br> A - H C - D<br> So bekommst du einen recht einfachen Überblick über das Griffbrett.}} == Töne der C-Dur Tonleiter auf dem Griffbrett == Wir wollen uns in dieser Lektion auf die Töne bzw. die Notennamen konzentrieren. Allerdings sparen wir uns vorerst alle Töne mit Vorzeichen aus. Die [[Gitarre: Aufbau der CAGED-Skalenformen|ersten Übungen zum 1. und 2. Fingersatz]] werden auf die Tonart C-Dur bzw. A-Moll übertragen und wir spiele sie in den hier gezeigten Positionen. Wir fangen mit dem zweiten Fingersatz an, wo wir entweder den Ton C oder den Ton A der C-Dur- bzw. Am-Tonleiter als Orientierung nutzen. Wir bevorzugen die englischen Notennamen, da diese in der Molltonleiter den Alphabet folgen. ;A BC • D EF :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Du hast vermutlich allerlei Akkordformen des CAGED-System gesehen. <div class="noprint"> ;Animation [[Image:Crd Grundtonschema ani.gif]] </div> <score> << \new ChordNames { \chordmode { c1 c c c c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> \once \override FretBoard.fret-diagram-details.dot-color = #'white < c'-1\4 g'-2\3 c''-4\2 e''-3\1 > < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Wenn du schon Fingerstyle oder Jazz spielst, mögen dir viele der Formen bekannt vorkommen. Doch selbst wenn du bis jetzt nur das [[Gitarre: Rockdiplom|Rockdiplom]] gemacht hast und mit den dort vorkommenden Barré-Akkorden vertraut bist, wirst du sehen, dass die einfachen Barré-Akkorde ausreichen, um sich auf dem Griffbrett zu zurechtzufinden. Die [[Gitarre: C-Dur-Tonleiter Workshop|C-Dur-Tonleiter in den ersten drei Bünden]] setze ich als bekannt voraus und es sollte dir nicht allzu schwer fallen, diese in den 12. Bund zu übertragen. :[[Datei:Scala C-Am.svg|150px]][[Datei:C-Dur_Majorpattern_III.jpg|150px]] C-Dur als Barré im 3. Bund kennst du vom Rockdiplom, und C-Dur im 8. Bund ist auch kein Hexenwerk. Dazwischen liegt nach dem CAGED-System die G-Form, die dir vermutlich noch nicht untergekommen ist (hier mit weißem Fingersatz). Statt uns die Töne von der G-Form abzuleiten, machen wir es uns einfacher und leiten uns die Töne zur Orientierung vom Am im 5. Bund ab. Du erinnerst dich noch an die Dur- und Mollparallelen? (C- \ Am-Tonleiter bzw. G- \ Em-Form). Oder du nutzt die Grundtöne des C-Barré im 8. Bund. <score> << \new ChordNames { \chordmode { c1 c c a:m c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < a,-1\6 e-3\5 a-4\4 c'-1\3 e'-1\2 a'-1\1 > < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Leite dir also die Grundtöne C und A von den dir bekannten Barré-Akkorden ab und spare dir die ungewöhnlicheren Akkordformen auf, bis sie dir später beim Fingerstyle oder Jazz begegnen. Es macht dabei garnichts aus, wenn du zum Auffinden der Grundtöne und zum Finden des Starttons ein paar Sekunden brauchst. Du wirst sehen, dass die Wiederholungen der bekannten Übungen auf den verschiedenen Bünden und in verschiedenen Oktavebereichen leicht von der Hand gehen. Lediglich beim Lagewechsel zwischen der G- und H-Saite musst du etwas überlegen. <score> << \new ChordNames { \chordmode { c1 c c a c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 c'-1 > < c-1\5 c'-3\3 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 c'-1\3 c''-4\1> < a,-1\6 a-4\4 a'-1\1 > < c-1\6 c'-3\4 c''-1\1> < c'-4\5 c''-2\2 > } >> </score> Diese wenigen"Eckpunkte" reichen aus, um dich grob auf dem Griffbrett zurechtzufinden. Suche sie noch einmal in der Skala und natürlich auch auf deinem Griffbrett. :[[Datei:C-Major-Scale on the fretboard.svg]] == Erster Fingersatz == == Zweiter Fingersatz == :[[Datei:Scala 6_71-2_34.svg]] Zuerst suchen wir uns in der C-Dur-Tonleiter überall den zweiten Fingersatz heraus. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Zur leichteren Orientierung wird die Grafik bei jeder neuen Melodie wiederholt. === Rondeau (Auszug) === Die eintaktige Sequenzen wurde aus einem Rondeau von J.S. Bach entnommen, dass beliebig wiederholt werden kann. Der Grundton C, welcher im letzten Takt rot eingefärbt wurde, wird mit dem kleinen Finger gegriffen. ==== C-Form (offen) • Rondo ==== Am Anfang des Griffbrettes brauchen wir den zweiten Fingersatz nicht vollständig. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A- (Bb)-Form • Rondo ==== In der A-(Bb-)Form müssen wir den Lagewechsel zwischen der G- und H-Saite beachten. Übrigens werden hier die Töne in der englischen Form angegeben. (Bb-Form und der Ton B statt des deutschen H.) Nur der erste Bund wird bis zur letzten Note in der dritten Lage gespielt. Der Rest bis zur letzten Note in der zweiten Lage. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (A-, Bb-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e-4 d-2 c d e d c b d c b c d c b a c b a b c d b c d-1 } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Rondo ==== Statt in der G-Form das C zu suchen, suche lieber das A im 5. Bund (hier grün hervorgehoben). Oder du leitest dir das C vom Barré im 8. Bund ab. Der Startton E ist auf der A Saite im 7. Bund unter dem Ringfinger. Ansonsten stellt der Fingersatz keine Herausforderung mehr dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (G-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b \once \override NoteHead #'color = #green a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F)-Form • Rondo ==== Der kleine Finger des C-Barré im 8. Bund in der E- bzw. F-Form gibt gleichzeitig das C des zweiten Fingersatz an. Du siehst, dass ab jetzt alles leichter geworden ist, weil sich ansonsten nichts mehr am Fingersatz ändert. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- F-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Rondo ==== Für den Grundton C müssen wir uns die D-Form gar nicht so genau ins Gedächtnis rufen, wenn uns die C-Form viel vertrauter ist. Diese hohe Lage ist für E-Gitarristen oder Gitarren mit Cutaway gedacht. Auf der Konzertgitarre ist die sehr hohe Lage schlecht zu spielen. Gehe ggf. einen Kompromiss ein, und spiele diese hohe Saitenlage ein paar Bünde tiefer als Übung nur für den Fingersatz aber nicht für die Notennamen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Noten über dem hohen C (der mit zwei Hilfslinien) wird dir seltener begegnen, da in dem Fall bevorzugt die Noten nach unten oktaviert werden. (Beachte die 8 im Notensystem.) Bei den weiteren Übungen werden jedoch die Versionen mit den vielen Hilfslinien angezeigt. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { \ottava #1 e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Rondo ==== Mit der C-Form in den ersten drei Bünden im Hinterkopf ist der 12. Bund leicht zu bewältigen. Wieder eine Übung, die weniger für Konzertgitarren geeignet ist. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === Die Abfolge der Töne der folgenden Übung unterscheidet sich kaum von der vorhergehenden. Doch mit dem anderen Rhythmus haben wir das Hauptmotiv von der Komposition {{Youtube-Suche|Smetana+Die+Moldau|"Die Moldau" von Bedrich Smetana}} (ohne Auftakt und rhythmisch vereinfacht). Auch wenn es hier (wie in der 7. Übung) nur die Molltonleiter rauf und runter geht, merkst du hoffentlich, wieviel der Takt und Rhythmus an der Wirkung ausmacht. Wenn du später mal meinst, deine Improvisationen hören sich langweilig an, dann solltest du dich mehr mit Rhythmus beschäftigen. Dazu kannst du dich auch ein wenig mit Schlagmustern beschäftigen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Warum die Form hier Gm-Form genannt wird, das wird dir in den nachfolgenden Lektionen klarer werden. Auf Fingersatzangaben können wir hier verzichten, wenn du vorher "Alle meine Entchen in Am" gespielt hast. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Bb- /Gm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier bietet sich besonders an, den Am-Barré zur Orientierung zu verwenden. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier gibt dir der kleine Finger des Am-Barrés den Grundton an. Du kannst dir die Dm-Form aber auch über die F-Form (C im 8. Bund) ableiten. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (F- /Dm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Zähle vom C (H-Saite, 13. Bund) rückwärts zum A. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D- /Bm7-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wird die erste Übung in den 12. Bund verschoben. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C- /Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==1. Fingersatz== Dir wird wohl aufgefallen sein, dass beim zweiten Fingersatz der Ton G fehlt. Den üben wir mit dem ersten Fingersatz. :[[Datei:Scala 71_2-34_5.svg]] Beachte, dass der Grundton (1) unter dem Ringfinger (also im zweiten Bund dieses Fingersatzes) ist, und dass du deine freie Improvisationsübung in Dur günstigerweise mit der (1) beginnen oder zumindest enden sollte. Diesen Fingersatz suchen wir in der C-Dur-Tonleiter auf dem Griffbrett. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] === Eintaktige Sequenzen === Du wirst feststellen, dass sich die Sequenzen recht schnell lernen lassen. ==== 1. Fingersatz • C-Form (open) ==== Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • A- (Bb-)Form ==== Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 3.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 3 darkgrey ) (place-fret 4 3 4 yellow3 ) (place-fret 4 5 5 darkgrey ) (place-fret 5 2 "j7" yellow3 ) (place-fret 5 3 1 black ) (place-fret 5 5 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • G-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 3 darkgrey ) (place-fret 2 6 4 yellow3 ) (place-fret 2 8 5 darkgrey ) (place-fret 3 4 "j7" yellow3 ) (place-fret 3 5 1 black ) (place-fret 3 7 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger auf der G-Saite des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • E- (F-)Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 3 darkgrey ) (place-fret 5 8 4 yellow3 ) (place-fret 5 10 5 darkgrey ) (place-fret 6 7 "j7" yellow3 ) (place-fret 6 8 1 black ) (place-fret 6 10 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Den Grundton C auf der E-Saite kannst du dir vom C-Barré der E-Form (wie ein F- Barré) im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • D-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 3 darkgrey ) (place-fret 3 10 4 yellow3 ) (place-fret 3 12 5 darkgrey ) (place-fret 4 9 "j7" yellow3 ) (place-fret 4 10 1 black ) (place-fret 4 12 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Wenn du später mal einen herausfordernden Lick zwischen der G- und H-Saite hast, wäre eine weitere gangbare Strategie den Lick in eine fingertechnisch günstigere Lage zu verlegen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • C-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 3 darkgrey ) (place-fret 1 13 4 yellow3 ) (place-fret 1 15 5 darkgrey ) (place-fret 2 12 "j7" yellow3 ) (place-fret 2 13 1 black ) (place-fret 2 15 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen === Diesmal hast du halbtaktige Sequenzen, die einmal wiederholt werden. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • 1. Fingersatz ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== A- (Bb-)Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 "E" darkgrey ) (place-fret 4 3 "F" yellow3 ) (place-fret 4 5 "G" darkgrey ) (place-fret 5 2 "B" yellow3 ) (place-fret 5 3 "C" black ) (place-fret 5 5 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Leite dir den Grundton vom C-Dur-Akkord, oder vom C-Barré im 3. Bund ab. Lerne nicht nur die Intervlle, sondern auch die Notennamen. (Zumindest bei den einfachen Tonarten F-, G- und C-Dur). Andere Tonarten kommen später dran. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- / Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 "E" darkgrey ) (place-fret 2 6 "F" yellow3 ) (place-fret 2 8 "G" darkgrey ) (place-fret 3 4 "B" yellow3 ) (place-fret 3 5 "C" black ) (place-fret 3 7 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Du kannst die beiden hintereinander folgenden Noten im 5. Bund mit einem Mini-Barré ausführen, und die Lagewechsel mittels Slide (=&nbsp;Glissando) durchführen, oder wie in der Wiederholung ohne Slide durchführen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8-1 g' f e d f e d c-1 e-1 d c-1(\glissando b-1) d c b-1(\glissando c1-1) c8-2 g' f e d f e d c-1 e-2 d-4 c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F-)Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 "E" darkgrey ) (place-fret 5 8 "F" yellow3 ) (place-fret 5 10 "G" darkgrey ) (place-fret 6 7 "B" yellow3 ) (place-fret 6 8 "C" black ) (place-fret 6 10 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Fingersatztechnisch wieder problemlos. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 "E" darkgrey ) (place-fret 3 10 "F" yellow3 ) (place-fret 3 12 "G" darkgrey ) (place-fret 4 9 "B" yellow3 ) (place-fret 4 10 "C" black ) (place-fret 4 12 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Wieder klingt diese Lage genau so, wie die G-Form, ist aber vom Fingersatz her einfacher. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 "E" darkgrey ) (place-fret 1 13 "F" yellow3 ) (place-fret 1 15 "G" darkgrey ) (place-fret 2 12 "B" yellow3 ) (place-fret 2 13 "C" black ) (place-fret 2 15 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Die H-Saite heißt auch im 12. Bund H, also ist im 13. Bund das C. Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Ein Vogel wollte Hochzeit machen === Hier habe ich ein relativ bekanntes Kinderlied gefunden, dass perfekt zum 1. Fingersatz passt. Die Tondauern sind für Ungeübte in Sachen Noten schwer herauszulesen. Kennst du aber das Stück, oder hörst du es dir mehrmals an, so ist es keine unüberwindbare Schwierigkeit. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • Ein Vogel ==== Folgt das G nach dem D, greifst du den besser mit dem kleinen Finger. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8 d d-3 g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A- (Bb-)Form • Ein Vogel ==== Hier kannst du auch versuchen, den kleinen Finger umzulegen, wenn du nach dem D den G greifen willst. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8-3 d d g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Ein Vogel ==== Wenn zwei Töne im selben Bund sind, kann man entweder einen Minibarré spielen, oder ein Finger muss vorübergehend seine bevorzuge Position verlassen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e-2 c-1 g' e d( g) g g16 e-2 | c8-1 8 8 g'16 e d8 d d g16 f | e8-2 c-1 d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F-)Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen (2) === :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== 1. Fingersatz - C-Form (offen) ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - A- (Bb-)Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - G-Form ==== Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - E- (F-)Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - D-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - C-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Einsingen === Diese beiden Motive kennen viele, die schon einmal in einem Chor gesungen haben. Leider entsprechen viele Lieder in ihrem Tonumfang nicht genau einem der vollständigen drei Fingersätze oder der später folgenden Skalen. Zumeist werden nur Ausschnitte aus den Patterns gebraucht. Im ersten Motiv fehlt beispielsweise die große Septime (j7) vor dem Grundton. Dafür enthält das zweite Motiv die große Septime (j7). Das zweite Motiv eicht den Chor auf die gerade geforderte Tonart. Hier werden nur Akkordtöne in einer auf oder absteigenden Tonfolge gespielt (auch Arpeggios genannt). Der A7-Akkord enthält sowohl den Leitton (j7) der zum Grundton (1) hin leitet, als auch den Strebeton (4) die zur Durterz (3) hin strebt. Mit den zwei spannungsreichen Tönen, die sich zum Grundakkord auflösen wollen, wird der Chor auf die Durtonart eingenordet. Hier brauche ich dir nicht zu erklären, wo der Grundton D ist. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A-(Bb-)Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A-(Bb-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E-(F-)Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==Erste über den zweiten Fingersatz== Wie du siehst, kommt hier jedesmal zuerst der erste Fingersatz mit dem "Karree" rechts, und dannach kommt der Fingersatz mit dem "Karree" links. Sie sind immer untereinander. Nur zwischen der G- und B-Saite verschiebt sich alles um einen Bund. <div style="float:left; padding:5px; border:black solid 1px; "> ;F-Form <score raw="1"> \version "2.14.2" \paper{ indent=0\mm line-width=120\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% 4-o zeigt 4. Saite offen \fret-diagram #"s:2;f:1; 3-3-2;3-5-3;3-6-4; 4-3-6;4-5-7;4-6-1; 5-3-3;5-4-4;5-6-5; 6-3-7;6-4-1;6-6-2;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;Bb-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:2;f:1; 2-4-2;2-6-3;2-7-4; 3-3-6;3-5-7;3-6-1; 4-3-3;4-4-4;4-6-5; 5-3-7;5-4-1;5-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;D-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:2;f:1; 1-4-2;1-6-3;1-7-4; 2-4-6;2-6-2;2-7-1; 3-3-3;3-4-4;3-6-5; 4-3-7;4-4-1;4-6-2;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} === Jamaica Farewell === Die Melodie von [[Liederbuch/ Jamaica Farwell|Jamaica Farwell]] wurde erheblich vereinfacht, damit du dir nicht zu viele Gedanken um den Rhythmus machen musst. Wenn du dich am Quintillo (dem Rhythmus vom Lagerfeuerschlag} orientierst, solltest du wenige Probleme haben. Es gibt recht viele Wiederholung. Die Strophe wurde bei der Wiederholung in die Oktave verschoben, damit das Stück exakt in den Skalenausschnitt passt. Du musst dir für die Fingersätze ggf. Strategien zurechtlegen, damit du die Finger bequem sortiert bekommst. Das Stück beginnt mit dem Ton G. Der (5) in 1. Fingersatz. ;Bb-Form Greife den C wie ein Bb-Barré im 3. Bund. Leite dir von diesem Akkord den Grundton (1) ab, und wandere beim 1. Fingersatz rauf zum Startton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-4-2;2-6-3;2-7-4; 3-3-6;3-5-7;3-6-1; 4-3-3;4-4-4;4-6-5; 5-3-7;5-4-1;5-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (A-, Bb-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ; F-Form Greife den C wie ein F-Barré im 8. Bund. Leite dir von diesem Akkord den Grundton (1) ab, und wandere beim 1. Fingersatz rauf zum Startton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 3-7-2;3-9-3;3-10-4; 4-7-6;4-9-7;4-10-1; 5-7-3;5-8-4;5-10-5; 6-7-7;6-8-1;6-10-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (E-, F-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ;D-Form Schiebe den D-Dur-Akkord in den 12. Bund. Ein D im 12. Bund verschoben ergibt ein C. Leite dir von diesem Akkord den Grundton (1) ab. Orientiere dich kurz im 2. Fingersatz und wandere zurück zum ersten Fingersatz zum Ton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 1-10-2;1-12-3;1-13-4; 2-10-6;2-12-7;2-13-1; 3-9-3;3-10-4;3-12-5; 4-9-7;4-10-1;4-12-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (D-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==3. Fingersatz== Es fällt auf, dass der 3. Fingersatz kein "Karré" hat. {| !Fingersatz !width="30px"| !Intervalle |- |[[Image:Scala Z RK-Z K-ZM K.svg]] !width="30px"| |[[Image:Scala 2 34-5 6-71 2.svg]] |} Der 3. Fingersatz ist gar kein eigenständiger Fingersatz. Der obere Teil des 3. Fingersatzes ist eigentlich schon der untere Teil des 2. Fingersatzes. Ebenso ist der untere Teil des 3. Fingersatzes gleichzeitig der Anfang des 1. Fingersatzes. Du musst dir Strategien zurechtlegen, wie du den Übergang vom Ende des 2. Fingersatzes über die 5 und die 6 hin zum 1. Fingersatz gestaltest. Es kommt beim 3. Fingersatz zu einem Lagewechsel nach links. Übe den 3. Fingersatz zuerst in den obersten Saitenlagen (E A D G x x) === Eine II-V-I-Verbindung === Wir spielen eine einfache Tonfolge über einer 2-5-1-Verbindung. Die Akkordtöne liegen zumeist auf den schweren Zählzeiten. * D, F, A, C gehören zum Dm7 * G, B, D, F gehören zum G7 * C, E, G gehören zum C-Dur-Akkord. Wir nutzen das CAGED-System, um uns grob auf dem Griffbrett zurechtzufinden. ==== Exkurs: Skalenformen ==== Die Namen der Skalen leiten sich übrigens von folgenden einfachen Tonleitern in den ersten Bünden ab: [[Image:Scala C-Am.svg|100px]] [[Image:Scala Bb-Gm.svg|100px]] [[Image:Scala G-Em.svg|100px]] [[Image:Scala F-Dm.svg|100px]] [[Image:Scala D-Hm.svg|100px]] Alle Akkorde die man aus diesen einfachen Tonarten kennt, Bassläufe und ähnliches lassen sich zum großen Teil auf die entsprechenden 5 CAGED-Skalen übertragen, fast so als habe man die Tonleiter mittels Kapodaster in eine höhere Lage verschoben. Wie du siehst, nennen wir die Skalen entgegen des reinen CAGED-System nicht E-Dur-Form (Shape) und nicht die A-Dur-Form (Shape), sondern F- und Bb-Dur-Form. <div style="float:left; padding:5px; border:black solid 1px; "> ;E-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-1;1-2-2;1-4-3; 2-0-5;2-2-6;2-4-7; 3-1-3;3-2-4;3-4-5; 4-1-7;4-2-1;4-4-2; 5-0-4;5-2-5;5-4-6; 6-0-1;6-2-2;6-4-3;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;F-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-3; 1-1-1; 1-3-2; 2-1-5; 2-3-6; 3-0-2; 3-2-3; 3-3-4; 4-0-6; 4-2-7; 4-3-1; 5-0-3; 5-1-4; 5-3-5; 6-0-7; 6-1-1; 6-3-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;G-Dur-Tonleiter <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-3-3; 1-4-1; 1-6-2; 2-4-5; 2-6-6; 3-3-2; 3-5-3; 3-6-4; 4-3-6; 4-5-7; 4-6-1; 5-3-3; 5-4-4; 5-6-5; 6-3-7; 6-4-1; 6-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Du siehst selbst, dass die G-Dur-Tonleiter von der Form her eher wie die F-Dur-Tonleiter als wie die E-Dur-Tonleiter aussieht. <div style="float:left; padding:5px; border:black solid 1px; "> ;A-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-5;1-2-6;1-4-7; 2-0-2;2-2-3;2-3-4; 3-1-7;3-2-1;3-4-2; 4-0-4;4-2-5;4-4-6; 5-0-1;5-2-2;5-4-3; 6-0-5;6-2-6;6-4-7;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;Bb-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-1-5; 1-3-6; 2-1-2; 2-3-3; 2-4-4; 3-0-6; 3-2-7; 3-3-1; 4-0-3; 4-1-4; 4-3-5; 5-0-7; 5-1-1; 5-3-2; 6-1-5; 6-3-6;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;C-Dur-Tonleiter <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-3-5; 1-5-6; 2-3-2; 2-5-3; 2-6-4; 3-2-6; 3-4-7; 3-5-1; 4-2-3; 4-3-4; 4-5-5; 5-2-7; 5-3-1; 5-5-2; 6-3-5; 6-5-6;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Du siehst selbst, dass die C-Dur-Tonleiter von der Form her eher wie die Bb-Dur-Tonleiter als wie die A-Dur-Tonleiter aussieht. ==== 3. Fingersatz II-V-I-Verbindung D-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;D-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1; 4-9-7;4-10-1;4-12-2; 5-10-5;5-12-6; 6-10-2;6-12-3;6-13-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Wir beginnen oben bei der D-Form, wo sich der Lagewechsel des 3. Fingersatz noch nicht mit dem Lagewechsel zwischen der G und H-Saite (engl. B-Saite) aufhebt. Würde ich ein Capo in den 10. Bund setzen, dann würde ich die Melodie vom Fingersatz her wie D-Dur spielen. In D-Dur spiele ich diese II-V-I-Verbindung Em7 A7 D. Nehme ich das Capo weg, dann greife ich den Dm(7) als einen Barré der Em-Form im 10. Bund. Von diesem kann ich mir das D als Grundton ableiten. Alternativ siehst du in den Noten, dass die Übung mit dem Ton D anfängt. Dass die oberste Tiefe E-Saite im 12. Bund ebenfalls ein E ergibt, setze ich als bekannt voraus. Falls nicht, beschäftige dich noch einmal mit dem [[Gitarre: Lagerfeueranhang 2c|Stimmen der Gitarre]]. Ein Ganztonschritt bzw. zwei Bünde vor dem E ist der Ton D. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (D-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g-1 a-4 b-1 c4 | b8^\markup { \bold {G7} } a-4 g4-1 f8 e d4 | e8^\markup { \bold {C} } f g4-1 a8-4 b-1 c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung G-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;G-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 3-4-7;3-5-1;3-7-2; 4-5-5;4-7-6; 5-5-2;5-7-3;5-8-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 5. Bund setzen, dann würde man die Melodie vom Fingersatz her wie G-Dur spielen. In G-Dur spielt man diese II-V-I-Verbindung Am7 D7 G. Nimmt man das Capo weg, dann greift man den Dm(7) als einen Barré der Am-Form. Von diesem kannst du dir den D als Grundton ableiten. Einfacher geht es natürlich, wenn du weißt, dass der D im 5. Bund der A-Saite der Stimmton der D-Saite ist. </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (G-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g-1 a-4 b-1 c4 | b8^\markup { \bold {G7} } a-4 g4-1 f8 e d4 | e8^\markup { \bold {C} } f g4-1 a8-4 b-1 c d | c b c2. | \break d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung C-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;C-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-0-7;2-1-1;2-3-2; 3-0-5;3-2-6; 4-0-2;4-2-3;4-3-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Die C-Dur-Form der C-Dur Tonleiter sieht schlicht und ergreifend wie die C-Durtonleiter aus. </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (C-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #4 % \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \break d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung C-Form 12. Bund ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;C-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-12-7;2-13-1;2-15-2; 3-12-5;3-14-6; 4-12-2;4-14-3;4-15-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 12. Bund setzen, dann würde man die Melodie vom Fingersatz her wie C-Dur spielen. In C-Dur spielt man diese II-V-I-Verbindung Dm7 G7 C. Der Startton ist schlicht die D-Saite im 12. Bund. </div> {{clear}} Gerade noch hatten wir einen Lagewechsel nach links. Jetzt aber hebt sich der Lagewechsel nach links vom 3. Fingersatz mit dem Lagewechsel zwischen der G- und H-Saite auf. Es hört sich beim ersten Durchlesen kompliziert an, aber du hast nur 4 Lektionen zu lernen. Den 1. bis 3. Fingersatz und den Lagewechsel zwischen der G- und H-Saite. Das Auffinden der Töne und welche Akkorde zu welcher Tonart gehört, und wie man einen Capo benutzt, sollte eigentlich nichts neues für dich sein. Rein technisch gesehen vereinfacht sich der Fingersatz. Doch es kostet ein wenig Überlegung, wie sich die beiden Lagewechsel auf den 3. Fingersatz auswirken. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (C-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Sollte es im 12 Bund unbequem zu spielen sein, weil du kein Cutaway hast (Aussparung für die hohen Bünde), übe die C-Form ein paar Bünde zurück in einer anderen Tonart. ==== 3. Fingersatz II-V-I-Verbindung F-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;F-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 1-7-7; 1-8-1;1-10-2; 2-8-5; 2-10-6; 3-7-2; 3-9-3; 3-10-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 6. Bund setzen, dann würde man die Melodie vom Fingersatz her wie F-Dur spielen. In C-Dur spielt man diese II-V-I-Verbindung Gm7 C7 F. Wenn du den C wie ein F-Barré im 8. Bund greifst, dindest du den Grundton (1) auf der hohen E-Saite. Von dem wanderst du runter zum Startton (2). </div> {{clear}} Auch hier hebt sich der Lagewechsel zwischen der G- und H-Saite mit dem Lagewechsel des 3. Fingersatz gegeneinander auf, was den Fingersatz grifftechnisch wieder vereinfacht. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (F-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> == Wie geht es weiter? == Solltest du als Quereinsteiger in diese Lektion gestolpert sein, dann schaue dir die erste Lektion zum [[Gitarre: Aufbau der CAGED-Skalenformen|Aufbau der CAGED-Skalenformen]] an. Insbesondere die Abschnitte, die hier übergangen wurden. Dannach kannst du mit der ersten CAGED-Skala in der D-Dur-Form weitermachen. <noinclude> {{Navigation zurückhochvor |zurücklink=Gitarre: CAGED-Skala G-Dur-Form |zurücktext=CAGED-Skala G-Dur-Form |hochlink=Gitarre: Die Major-Patterns |hochtext=Einführung: Major-Patterns |vorlink=Gitarre: CAGED-Skala D-Dur-Form |vortext=CAGED-Skala D-Dur-Form }} </noinclude> mx8sgfthsq4zcpj8qof2bgt4g6uegvk 1090724 1090723 2026-09-12T16:53:00Z Mjchael 2222 /* Erster Fingersatz */ 1090724 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre: Sologitarre/ Navi Improvisation in Dur und Moll}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} = Wiederholung der Fingersätze = ; mit Schwerpunkt auf den Stammtönen Diese Wiederholung ist zum einen dafür gedacht, die vorhergehenden Übungen auf jeder Saitenlage zu machen, und auch in jeder Bundlage, gleichgültig ob die Finger eng beieinander oder weit auseinander stehen. Zum andern sind diese als Vorbereitung in die Sologitarre gedacht. Beispielsweise als Auflockerungsübung zwischen den Barré-Akkorden. Besonderen Augenmerk wollen wir hier auf die Notennamen legen. Diese können hier mitgelernt werden. Solltest du meinen, das sei noch nicht für dich dran und kann warten, dann springe zur ersten CAGED-Skala. Du kannst beim Kapitel Longform nochmal hierrauf zurückkommen. * [[Gitarre: CAGED-Skala D-Dur-Form|CAGED-Skala D-Dur-Form]] Lassen wir die [[Gitarre: Aufbau der CAGED-Skalenformen|erste Lektion]] (insbesondere für die Quereinsteiger) noch einmal Revue passieren. Die folgenden Übungen enthalten oft eine Folge von ein- oder zweitaktigen Sequenzen. Eine Sequenz ist ein Motiv, dass sich auf verschiedenen Tonhöhen wiederholt. Auch ohne Notenkenntnisse kannst du den Verlauf und die Wiederholungen der Sequenzen einfacher im Notenbild verfolgen, als in der Tabulatur; insbesondere wenn du dir gleichzeitig die Übung anhörst. Es kommen auch Ausschnitte aus klassischen Stücken, Folksongs, Kinderlieder o.ä. vor. Die einfache Struktur oder der Bekanntheitsgrad der Melodien sollen dir das Üben erleichtern. Die Finger finden so leichter ihre Position, als wenn du erstmal jede einzelne Note aus der Tabulatur entschlüsseln musst. Jede Übung wird auf allen Saitenlagen geübt. Vorher blieben wir in den mittleren Lagen. Jetzt gehen wir auch in die ersten Bünde, wo man die Finger etwas mehr spreizen muss, und in die höheren Lagen, wo es ein wenig eng wird. Die Stücke wiederholen sich in dieser Lektion in der selben Tonart, doch auf verschiedenen Bünden. Du spielst immer die selbe Tonfolge, nur auf verschiedenen Tonhöhen bzw. auf verschiedenen Saitenlagen. Lediglich zwischen der G- und H-Saite musst du dir jedesmal überlegen, wie sich der Lagewechsel auf den Fingersatz auswirkt. Doch der Fingersatz in den anderen höheren Lagen bleibt immer gleich. Wie die Tonfolgen mit dem CAGED-System zusammenhängen, das muss dich nur am Rande interessieren. Es wird in den folgenden Lektionen näher und ausführlicher erleutert. :[[Datei:Scala Griffbrett.svg]] Wir hatten uns bei den vorhergehenden Übungen weitestgehend an den Intervallen (1-j7) und an der Tabulatur orientiert. Diese sind in allen Tonarten gleich. Suche zuerst das Karré! Daran orientierst du dich. :[[Image:Scala Carree.svg]] {{Tipp|Lerne bei der C-Dur-Tonleiter nicht nur die Intervalle <br> 2 - 3 4 - 5<br> 6 - j7 1 - 2<br> sondern benenne auch jede einzelne Note. <br> D - E F - G<br> A - H C - D<br> So bekommst du einen recht einfachen Überblick über das Griffbrett.}} == Töne der C-Dur Tonleiter auf dem Griffbrett == Wir wollen uns in dieser Lektion auf die Töne bzw. die Notennamen konzentrieren. Allerdings sparen wir uns vorerst alle Töne mit Vorzeichen aus. Die [[Gitarre: Aufbau der CAGED-Skalenformen|ersten Übungen zum 1. und 2. Fingersatz]] werden auf die Tonart C-Dur bzw. A-Moll übertragen und wir spiele sie in den hier gezeigten Positionen. Wir fangen mit dem zweiten Fingersatz an, wo wir entweder den Ton C oder den Ton A der C-Dur- bzw. Am-Tonleiter als Orientierung nutzen. Wir bevorzugen die englischen Notennamen, da diese in der Molltonleiter den Alphabet folgen. ;A BC • D EF :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Du hast vermutlich allerlei Akkordformen des CAGED-System gesehen. <div class="noprint"> ;Animation [[Image:Crd Grundtonschema ani.gif]] </div> <score> << \new ChordNames { \chordmode { c1 c c c c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> \once \override FretBoard.fret-diagram-details.dot-color = #'white < c'-1\4 g'-2\3 c''-4\2 e''-3\1 > < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Wenn du schon Fingerstyle oder Jazz spielst, mögen dir viele der Formen bekannt vorkommen. Doch selbst wenn du bis jetzt nur das [[Gitarre: Rockdiplom|Rockdiplom]] gemacht hast und mit den dort vorkommenden Barré-Akkorden vertraut bist, wirst du sehen, dass die einfachen Barré-Akkorde ausreichen, um sich auf dem Griffbrett zu zurechtzufinden. Die [[Gitarre: C-Dur-Tonleiter Workshop|C-Dur-Tonleiter in den ersten drei Bünden]] setze ich als bekannt voraus und es sollte dir nicht allzu schwer fallen, diese in den 12. Bund zu übertragen. :[[Datei:Scala C-Am.svg|150px]][[Datei:C-Dur_Majorpattern_III.jpg|150px]] C-Dur als Barré im 3. Bund kennst du vom Rockdiplom, und C-Dur im 8. Bund ist auch kein Hexenwerk. Dazwischen liegt nach dem CAGED-System die G-Form, die dir vermutlich noch nicht untergekommen ist (hier mit weißem Fingersatz). Statt uns die Töne von der G-Form abzuleiten, machen wir es uns einfacher und leiten uns die Töne zur Orientierung vom Am im 5. Bund ab. Du erinnerst dich noch an die Dur- und Mollparallelen? (C- \ Am-Tonleiter bzw. G- \ Em-Form). Oder du nutzt die Grundtöne des C-Barré im 8. Bund. <score> << \new ChordNames { \chordmode { c1 c c a:m c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < a,-1\6 e-3\5 a-4\4 c'-1\3 e'-1\2 a'-1\1 > < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Leite dir also die Grundtöne C und A von den dir bekannten Barré-Akkorden ab und spare dir die ungewöhnlicheren Akkordformen auf, bis sie dir später beim Fingerstyle oder Jazz begegnen. Es macht dabei garnichts aus, wenn du zum Auffinden der Grundtöne und zum Finden des Starttons ein paar Sekunden brauchst. Du wirst sehen, dass die Wiederholungen der bekannten Übungen auf den verschiedenen Bünden und in verschiedenen Oktavebereichen leicht von der Hand gehen. Lediglich beim Lagewechsel zwischen der G- und H-Saite musst du etwas überlegen. <score> << \new ChordNames { \chordmode { c1 c c a c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 c'-1 > < c-1\5 c'-3\3 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 c'-1\3 c''-4\1> < a,-1\6 a-4\4 a'-1\1 > < c-1\6 c'-3\4 c''-1\1> < c'-4\5 c''-2\2 > } >> </score> Diese wenigen"Eckpunkte" reichen aus, um dich grob auf dem Griffbrett zurechtzufinden. Suche sie noch einmal in der Skala und natürlich auch auf deinem Griffbrett. :[[Datei:C-Major-Scale on the fretboard.svg]] == Erster Fingersatz == === Eintaktige Sequenzen === Du wirst feststellen, dass sich die Sequenzen recht schnell lernen lassen. ==== 1. Fingersatz • C-Form (open) ==== Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • A- (Bb-)Form ==== Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 3.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 3 darkgrey ) (place-fret 4 3 4 yellow3 ) (place-fret 4 5 5 darkgrey ) (place-fret 5 2 "j7" yellow3 ) (place-fret 5 3 1 black ) (place-fret 5 5 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • G-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 3 darkgrey ) (place-fret 2 6 4 yellow3 ) (place-fret 2 8 5 darkgrey ) (place-fret 3 4 "j7" yellow3 ) (place-fret 3 5 1 black ) (place-fret 3 7 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger auf der G-Saite des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • E- (F-)Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 3 darkgrey ) (place-fret 5 8 4 yellow3 ) (place-fret 5 10 5 darkgrey ) (place-fret 6 7 "j7" yellow3 ) (place-fret 6 8 1 black ) (place-fret 6 10 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Den Grundton C auf der E-Saite kannst du dir vom C-Barré der E-Form (wie ein F- Barré) im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • D-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 3 darkgrey ) (place-fret 3 10 4 yellow3 ) (place-fret 3 12 5 darkgrey ) (place-fret 4 9 "j7" yellow3 ) (place-fret 4 10 1 black ) (place-fret 4 12 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Wenn du später mal einen herausfordernden Lick zwischen der G- und H-Saite hast, wäre eine weitere gangbare Strategie den Lick in eine fingertechnisch günstigere Lage zu verlegen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • C-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 3 darkgrey ) (place-fret 1 13 4 yellow3 ) (place-fret 1 15 5 darkgrey ) (place-fret 2 12 "j7" yellow3 ) (place-fret 2 13 1 black ) (place-fret 2 15 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> == Zweiter Fingersatz == :[[Datei:Scala 6_71-2_34.svg]] Zuerst suchen wir uns in der C-Dur-Tonleiter überall den zweiten Fingersatz heraus. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Zur leichteren Orientierung wird die Grafik bei jeder neuen Melodie wiederholt. === Rondeau (Auszug) === Die eintaktige Sequenzen wurde aus einem Rondeau von J.S. Bach entnommen, dass beliebig wiederholt werden kann. Der Grundton C, welcher im letzten Takt rot eingefärbt wurde, wird mit dem kleinen Finger gegriffen. ==== C-Form (offen) • Rondo ==== Am Anfang des Griffbrettes brauchen wir den zweiten Fingersatz nicht vollständig. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A- (Bb)-Form • Rondo ==== In der A-(Bb-)Form müssen wir den Lagewechsel zwischen der G- und H-Saite beachten. Übrigens werden hier die Töne in der englischen Form angegeben. (Bb-Form und der Ton B statt des deutschen H.) Nur der erste Bund wird bis zur letzten Note in der dritten Lage gespielt. Der Rest bis zur letzten Note in der zweiten Lage. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (A-, Bb-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e-4 d-2 c d e d c b d c b c d c b a c b a b c d b c d-1 } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Rondo ==== Statt in der G-Form das C zu suchen, suche lieber das A im 5. Bund (hier grün hervorgehoben). Oder du leitest dir das C vom Barré im 8. Bund ab. Der Startton E ist auf der A Saite im 7. Bund unter dem Ringfinger. Ansonsten stellt der Fingersatz keine Herausforderung mehr dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (G-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b \once \override NoteHead #'color = #green a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F)-Form • Rondo ==== Der kleine Finger des C-Barré im 8. Bund in der E- bzw. F-Form gibt gleichzeitig das C des zweiten Fingersatz an. Du siehst, dass ab jetzt alles leichter geworden ist, weil sich ansonsten nichts mehr am Fingersatz ändert. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- F-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Rondo ==== Für den Grundton C müssen wir uns die D-Form gar nicht so genau ins Gedächtnis rufen, wenn uns die C-Form viel vertrauter ist. Diese hohe Lage ist für E-Gitarristen oder Gitarren mit Cutaway gedacht. Auf der Konzertgitarre ist die sehr hohe Lage schlecht zu spielen. Gehe ggf. einen Kompromiss ein, und spiele diese hohe Saitenlage ein paar Bünde tiefer als Übung nur für den Fingersatz aber nicht für die Notennamen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Noten über dem hohen C (der mit zwei Hilfslinien) wird dir seltener begegnen, da in dem Fall bevorzugt die Noten nach unten oktaviert werden. (Beachte die 8 im Notensystem.) Bei den weiteren Übungen werden jedoch die Versionen mit den vielen Hilfslinien angezeigt. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { \ottava #1 e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Rondo ==== Mit der C-Form in den ersten drei Bünden im Hinterkopf ist der 12. Bund leicht zu bewältigen. Wieder eine Übung, die weniger für Konzertgitarren geeignet ist. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === Die Abfolge der Töne der folgenden Übung unterscheidet sich kaum von der vorhergehenden. Doch mit dem anderen Rhythmus haben wir das Hauptmotiv von der Komposition {{Youtube-Suche|Smetana+Die+Moldau|"Die Moldau" von Bedrich Smetana}} (ohne Auftakt und rhythmisch vereinfacht). Auch wenn es hier (wie in der 7. Übung) nur die Molltonleiter rauf und runter geht, merkst du hoffentlich, wieviel der Takt und Rhythmus an der Wirkung ausmacht. Wenn du später mal meinst, deine Improvisationen hören sich langweilig an, dann solltest du dich mehr mit Rhythmus beschäftigen. Dazu kannst du dich auch ein wenig mit Schlagmustern beschäftigen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Warum die Form hier Gm-Form genannt wird, das wird dir in den nachfolgenden Lektionen klarer werden. Auf Fingersatzangaben können wir hier verzichten, wenn du vorher "Alle meine Entchen in Am" gespielt hast. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Bb- /Gm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier bietet sich besonders an, den Am-Barré zur Orientierung zu verwenden. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier gibt dir der kleine Finger des Am-Barrés den Grundton an. Du kannst dir die Dm-Form aber auch über die F-Form (C im 8. Bund) ableiten. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (F- /Dm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Zähle vom C (H-Saite, 13. Bund) rückwärts zum A. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D- /Bm7-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wird die erste Übung in den 12. Bund verschoben. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C- /Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==1. Fingersatz== Dir wird wohl aufgefallen sein, dass beim zweiten Fingersatz der Ton G fehlt. Den üben wir mit dem ersten Fingersatz. :[[Datei:Scala 71_2-34_5.svg]] Beachte, dass der Grundton (1) unter dem Ringfinger (also im zweiten Bund dieses Fingersatzes) ist, und dass du deine freie Improvisationsübung in Dur günstigerweise mit der (1) beginnen oder zumindest enden sollte. Diesen Fingersatz suchen wir in der C-Dur-Tonleiter auf dem Griffbrett. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] === Eintaktige Sequenzen === Du wirst feststellen, dass sich die Sequenzen recht schnell lernen lassen. ==== 1. Fingersatz • C-Form (open) ==== Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • A- (Bb-)Form ==== Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 3.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 3 darkgrey ) (place-fret 4 3 4 yellow3 ) (place-fret 4 5 5 darkgrey ) (place-fret 5 2 "j7" yellow3 ) (place-fret 5 3 1 black ) (place-fret 5 5 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • G-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 3 darkgrey ) (place-fret 2 6 4 yellow3 ) (place-fret 2 8 5 darkgrey ) (place-fret 3 4 "j7" yellow3 ) (place-fret 3 5 1 black ) (place-fret 3 7 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger auf der G-Saite des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • E- (F-)Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 3 darkgrey ) (place-fret 5 8 4 yellow3 ) (place-fret 5 10 5 darkgrey ) (place-fret 6 7 "j7" yellow3 ) (place-fret 6 8 1 black ) (place-fret 6 10 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Den Grundton C auf der E-Saite kannst du dir vom C-Barré der E-Form (wie ein F- Barré) im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • D-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 3 darkgrey ) (place-fret 3 10 4 yellow3 ) (place-fret 3 12 5 darkgrey ) (place-fret 4 9 "j7" yellow3 ) (place-fret 4 10 1 black ) (place-fret 4 12 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Wenn du später mal einen herausfordernden Lick zwischen der G- und H-Saite hast, wäre eine weitere gangbare Strategie den Lick in eine fingertechnisch günstigere Lage zu verlegen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • C-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 3 darkgrey ) (place-fret 1 13 4 yellow3 ) (place-fret 1 15 5 darkgrey ) (place-fret 2 12 "j7" yellow3 ) (place-fret 2 13 1 black ) (place-fret 2 15 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen === Diesmal hast du halbtaktige Sequenzen, die einmal wiederholt werden. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • 1. Fingersatz ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== A- (Bb-)Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 "E" darkgrey ) (place-fret 4 3 "F" yellow3 ) (place-fret 4 5 "G" darkgrey ) (place-fret 5 2 "B" yellow3 ) (place-fret 5 3 "C" black ) (place-fret 5 5 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Leite dir den Grundton vom C-Dur-Akkord, oder vom C-Barré im 3. Bund ab. Lerne nicht nur die Intervlle, sondern auch die Notennamen. (Zumindest bei den einfachen Tonarten F-, G- und C-Dur). Andere Tonarten kommen später dran. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- / Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 "E" darkgrey ) (place-fret 2 6 "F" yellow3 ) (place-fret 2 8 "G" darkgrey ) (place-fret 3 4 "B" yellow3 ) (place-fret 3 5 "C" black ) (place-fret 3 7 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Du kannst die beiden hintereinander folgenden Noten im 5. Bund mit einem Mini-Barré ausführen, und die Lagewechsel mittels Slide (=&nbsp;Glissando) durchführen, oder wie in der Wiederholung ohne Slide durchführen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8-1 g' f e d f e d c-1 e-1 d c-1(\glissando b-1) d c b-1(\glissando c1-1) c8-2 g' f e d f e d c-1 e-2 d-4 c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F-)Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 "E" darkgrey ) (place-fret 5 8 "F" yellow3 ) (place-fret 5 10 "G" darkgrey ) (place-fret 6 7 "B" yellow3 ) (place-fret 6 8 "C" black ) (place-fret 6 10 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Fingersatztechnisch wieder problemlos. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 "E" darkgrey ) (place-fret 3 10 "F" yellow3 ) (place-fret 3 12 "G" darkgrey ) (place-fret 4 9 "B" yellow3 ) (place-fret 4 10 "C" black ) (place-fret 4 12 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Wieder klingt diese Lage genau so, wie die G-Form, ist aber vom Fingersatz her einfacher. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 "E" darkgrey ) (place-fret 1 13 "F" yellow3 ) (place-fret 1 15 "G" darkgrey ) (place-fret 2 12 "B" yellow3 ) (place-fret 2 13 "C" black ) (place-fret 2 15 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Die H-Saite heißt auch im 12. Bund H, also ist im 13. Bund das C. Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Ein Vogel wollte Hochzeit machen === Hier habe ich ein relativ bekanntes Kinderlied gefunden, dass perfekt zum 1. Fingersatz passt. Die Tondauern sind für Ungeübte in Sachen Noten schwer herauszulesen. Kennst du aber das Stück, oder hörst du es dir mehrmals an, so ist es keine unüberwindbare Schwierigkeit. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • Ein Vogel ==== Folgt das G nach dem D, greifst du den besser mit dem kleinen Finger. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8 d d-3 g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A- (Bb-)Form • Ein Vogel ==== Hier kannst du auch versuchen, den kleinen Finger umzulegen, wenn du nach dem D den G greifen willst. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8-3 d d g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Ein Vogel ==== Wenn zwei Töne im selben Bund sind, kann man entweder einen Minibarré spielen, oder ein Finger muss vorübergehend seine bevorzuge Position verlassen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e-2 c-1 g' e d( g) g g16 e-2 | c8-1 8 8 g'16 e d8 d d g16 f | e8-2 c-1 d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F-)Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen (2) === :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== 1. Fingersatz - C-Form (offen) ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - A- (Bb-)Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - G-Form ==== Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - E- (F-)Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - D-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - C-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Einsingen === Diese beiden Motive kennen viele, die schon einmal in einem Chor gesungen haben. Leider entsprechen viele Lieder in ihrem Tonumfang nicht genau einem der vollständigen drei Fingersätze oder der später folgenden Skalen. Zumeist werden nur Ausschnitte aus den Patterns gebraucht. Im ersten Motiv fehlt beispielsweise die große Septime (j7) vor dem Grundton. Dafür enthält das zweite Motiv die große Septime (j7). Das zweite Motiv eicht den Chor auf die gerade geforderte Tonart. Hier werden nur Akkordtöne in einer auf oder absteigenden Tonfolge gespielt (auch Arpeggios genannt). Der A7-Akkord enthält sowohl den Leitton (j7) der zum Grundton (1) hin leitet, als auch den Strebeton (4) die zur Durterz (3) hin strebt. Mit den zwei spannungsreichen Tönen, die sich zum Grundakkord auflösen wollen, wird der Chor auf die Durtonart eingenordet. Hier brauche ich dir nicht zu erklären, wo der Grundton D ist. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A-(Bb-)Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A-(Bb-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E-(F-)Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==Erste über den zweiten Fingersatz== Wie du siehst, kommt hier jedesmal zuerst der erste Fingersatz mit dem "Karree" rechts, und dannach kommt der Fingersatz mit dem "Karree" links. Sie sind immer untereinander. Nur zwischen der G- und B-Saite verschiebt sich alles um einen Bund. <div style="float:left; padding:5px; border:black solid 1px; "> ;F-Form <score raw="1"> \version "2.14.2" \paper{ indent=0\mm line-width=120\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% 4-o zeigt 4. Saite offen \fret-diagram #"s:2;f:1; 3-3-2;3-5-3;3-6-4; 4-3-6;4-5-7;4-6-1; 5-3-3;5-4-4;5-6-5; 6-3-7;6-4-1;6-6-2;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;Bb-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:2;f:1; 2-4-2;2-6-3;2-7-4; 3-3-6;3-5-7;3-6-1; 4-3-3;4-4-4;4-6-5; 5-3-7;5-4-1;5-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;D-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:2;f:1; 1-4-2;1-6-3;1-7-4; 2-4-6;2-6-2;2-7-1; 3-3-3;3-4-4;3-6-5; 4-3-7;4-4-1;4-6-2;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} === Jamaica Farewell === Die Melodie von [[Liederbuch/ Jamaica Farwell|Jamaica Farwell]] wurde erheblich vereinfacht, damit du dir nicht zu viele Gedanken um den Rhythmus machen musst. Wenn du dich am Quintillo (dem Rhythmus vom Lagerfeuerschlag} orientierst, solltest du wenige Probleme haben. Es gibt recht viele Wiederholung. Die Strophe wurde bei der Wiederholung in die Oktave verschoben, damit das Stück exakt in den Skalenausschnitt passt. Du musst dir für die Fingersätze ggf. Strategien zurechtlegen, damit du die Finger bequem sortiert bekommst. Das Stück beginnt mit dem Ton G. Der (5) in 1. Fingersatz. ;Bb-Form Greife den C wie ein Bb-Barré im 3. Bund. Leite dir von diesem Akkord den Grundton (1) ab, und wandere beim 1. Fingersatz rauf zum Startton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-4-2;2-6-3;2-7-4; 3-3-6;3-5-7;3-6-1; 4-3-3;4-4-4;4-6-5; 5-3-7;5-4-1;5-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (A-, Bb-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ; F-Form Greife den C wie ein F-Barré im 8. Bund. Leite dir von diesem Akkord den Grundton (1) ab, und wandere beim 1. Fingersatz rauf zum Startton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 3-7-2;3-9-3;3-10-4; 4-7-6;4-9-7;4-10-1; 5-7-3;5-8-4;5-10-5; 6-7-7;6-8-1;6-10-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (E-, F-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ;D-Form Schiebe den D-Dur-Akkord in den 12. Bund. Ein D im 12. Bund verschoben ergibt ein C. Leite dir von diesem Akkord den Grundton (1) ab. Orientiere dich kurz im 2. Fingersatz und wandere zurück zum ersten Fingersatz zum Ton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 1-10-2;1-12-3;1-13-4; 2-10-6;2-12-7;2-13-1; 3-9-3;3-10-4;3-12-5; 4-9-7;4-10-1;4-12-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (D-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==3. Fingersatz== Es fällt auf, dass der 3. Fingersatz kein "Karré" hat. {| !Fingersatz !width="30px"| !Intervalle |- |[[Image:Scala Z RK-Z K-ZM K.svg]] !width="30px"| |[[Image:Scala 2 34-5 6-71 2.svg]] |} Der 3. Fingersatz ist gar kein eigenständiger Fingersatz. Der obere Teil des 3. Fingersatzes ist eigentlich schon der untere Teil des 2. Fingersatzes. Ebenso ist der untere Teil des 3. Fingersatzes gleichzeitig der Anfang des 1. Fingersatzes. Du musst dir Strategien zurechtlegen, wie du den Übergang vom Ende des 2. Fingersatzes über die 5 und die 6 hin zum 1. Fingersatz gestaltest. Es kommt beim 3. Fingersatz zu einem Lagewechsel nach links. Übe den 3. Fingersatz zuerst in den obersten Saitenlagen (E A D G x x) === Eine II-V-I-Verbindung === Wir spielen eine einfache Tonfolge über einer 2-5-1-Verbindung. Die Akkordtöne liegen zumeist auf den schweren Zählzeiten. * D, F, A, C gehören zum Dm7 * G, B, D, F gehören zum G7 * C, E, G gehören zum C-Dur-Akkord. Wir nutzen das CAGED-System, um uns grob auf dem Griffbrett zurechtzufinden. ==== Exkurs: Skalenformen ==== Die Namen der Skalen leiten sich übrigens von folgenden einfachen Tonleitern in den ersten Bünden ab: [[Image:Scala C-Am.svg|100px]] [[Image:Scala Bb-Gm.svg|100px]] [[Image:Scala G-Em.svg|100px]] [[Image:Scala F-Dm.svg|100px]] [[Image:Scala D-Hm.svg|100px]] Alle Akkorde die man aus diesen einfachen Tonarten kennt, Bassläufe und ähnliches lassen sich zum großen Teil auf die entsprechenden 5 CAGED-Skalen übertragen, fast so als habe man die Tonleiter mittels Kapodaster in eine höhere Lage verschoben. Wie du siehst, nennen wir die Skalen entgegen des reinen CAGED-System nicht E-Dur-Form (Shape) und nicht die A-Dur-Form (Shape), sondern F- und Bb-Dur-Form. <div style="float:left; padding:5px; border:black solid 1px; "> ;E-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-1;1-2-2;1-4-3; 2-0-5;2-2-6;2-4-7; 3-1-3;3-2-4;3-4-5; 4-1-7;4-2-1;4-4-2; 5-0-4;5-2-5;5-4-6; 6-0-1;6-2-2;6-4-3;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;F-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-3; 1-1-1; 1-3-2; 2-1-5; 2-3-6; 3-0-2; 3-2-3; 3-3-4; 4-0-6; 4-2-7; 4-3-1; 5-0-3; 5-1-4; 5-3-5; 6-0-7; 6-1-1; 6-3-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;G-Dur-Tonleiter <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-3-3; 1-4-1; 1-6-2; 2-4-5; 2-6-6; 3-3-2; 3-5-3; 3-6-4; 4-3-6; 4-5-7; 4-6-1; 5-3-3; 5-4-4; 5-6-5; 6-3-7; 6-4-1; 6-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Du siehst selbst, dass die G-Dur-Tonleiter von der Form her eher wie die F-Dur-Tonleiter als wie die E-Dur-Tonleiter aussieht. <div style="float:left; padding:5px; border:black solid 1px; "> ;A-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-5;1-2-6;1-4-7; 2-0-2;2-2-3;2-3-4; 3-1-7;3-2-1;3-4-2; 4-0-4;4-2-5;4-4-6; 5-0-1;5-2-2;5-4-3; 6-0-5;6-2-6;6-4-7;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;Bb-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-1-5; 1-3-6; 2-1-2; 2-3-3; 2-4-4; 3-0-6; 3-2-7; 3-3-1; 4-0-3; 4-1-4; 4-3-5; 5-0-7; 5-1-1; 5-3-2; 6-1-5; 6-3-6;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;C-Dur-Tonleiter <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-3-5; 1-5-6; 2-3-2; 2-5-3; 2-6-4; 3-2-6; 3-4-7; 3-5-1; 4-2-3; 4-3-4; 4-5-5; 5-2-7; 5-3-1; 5-5-2; 6-3-5; 6-5-6;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Du siehst selbst, dass die C-Dur-Tonleiter von der Form her eher wie die Bb-Dur-Tonleiter als wie die A-Dur-Tonleiter aussieht. ==== 3. Fingersatz II-V-I-Verbindung D-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;D-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1; 4-9-7;4-10-1;4-12-2; 5-10-5;5-12-6; 6-10-2;6-12-3;6-13-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Wir beginnen oben bei der D-Form, wo sich der Lagewechsel des 3. Fingersatz noch nicht mit dem Lagewechsel zwischen der G und H-Saite (engl. B-Saite) aufhebt. Würde ich ein Capo in den 10. Bund setzen, dann würde ich die Melodie vom Fingersatz her wie D-Dur spielen. In D-Dur spiele ich diese II-V-I-Verbindung Em7 A7 D. Nehme ich das Capo weg, dann greife ich den Dm(7) als einen Barré der Em-Form im 10. Bund. Von diesem kann ich mir das D als Grundton ableiten. Alternativ siehst du in den Noten, dass die Übung mit dem Ton D anfängt. Dass die oberste Tiefe E-Saite im 12. Bund ebenfalls ein E ergibt, setze ich als bekannt voraus. Falls nicht, beschäftige dich noch einmal mit dem [[Gitarre: Lagerfeueranhang 2c|Stimmen der Gitarre]]. Ein Ganztonschritt bzw. zwei Bünde vor dem E ist der Ton D. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (D-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g-1 a-4 b-1 c4 | b8^\markup { \bold {G7} } a-4 g4-1 f8 e d4 | e8^\markup { \bold {C} } f g4-1 a8-4 b-1 c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung G-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;G-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 3-4-7;3-5-1;3-7-2; 4-5-5;4-7-6; 5-5-2;5-7-3;5-8-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 5. Bund setzen, dann würde man die Melodie vom Fingersatz her wie G-Dur spielen. In G-Dur spielt man diese II-V-I-Verbindung Am7 D7 G. Nimmt man das Capo weg, dann greift man den Dm(7) als einen Barré der Am-Form. Von diesem kannst du dir den D als Grundton ableiten. Einfacher geht es natürlich, wenn du weißt, dass der D im 5. Bund der A-Saite der Stimmton der D-Saite ist. </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (G-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g-1 a-4 b-1 c4 | b8^\markup { \bold {G7} } a-4 g4-1 f8 e d4 | e8^\markup { \bold {C} } f g4-1 a8-4 b-1 c d | c b c2. | \break d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung C-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;C-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-0-7;2-1-1;2-3-2; 3-0-5;3-2-6; 4-0-2;4-2-3;4-3-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Die C-Dur-Form der C-Dur Tonleiter sieht schlicht und ergreifend wie die C-Durtonleiter aus. </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (C-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #4 % \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \break d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung C-Form 12. Bund ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;C-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-12-7;2-13-1;2-15-2; 3-12-5;3-14-6; 4-12-2;4-14-3;4-15-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 12. Bund setzen, dann würde man die Melodie vom Fingersatz her wie C-Dur spielen. In C-Dur spielt man diese II-V-I-Verbindung Dm7 G7 C. Der Startton ist schlicht die D-Saite im 12. Bund. </div> {{clear}} Gerade noch hatten wir einen Lagewechsel nach links. Jetzt aber hebt sich der Lagewechsel nach links vom 3. Fingersatz mit dem Lagewechsel zwischen der G- und H-Saite auf. Es hört sich beim ersten Durchlesen kompliziert an, aber du hast nur 4 Lektionen zu lernen. Den 1. bis 3. Fingersatz und den Lagewechsel zwischen der G- und H-Saite. Das Auffinden der Töne und welche Akkorde zu welcher Tonart gehört, und wie man einen Capo benutzt, sollte eigentlich nichts neues für dich sein. Rein technisch gesehen vereinfacht sich der Fingersatz. Doch es kostet ein wenig Überlegung, wie sich die beiden Lagewechsel auf den 3. Fingersatz auswirken. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (C-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Sollte es im 12 Bund unbequem zu spielen sein, weil du kein Cutaway hast (Aussparung für die hohen Bünde), übe die C-Form ein paar Bünde zurück in einer anderen Tonart. ==== 3. Fingersatz II-V-I-Verbindung F-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;F-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 1-7-7; 1-8-1;1-10-2; 2-8-5; 2-10-6; 3-7-2; 3-9-3; 3-10-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 6. Bund setzen, dann würde man die Melodie vom Fingersatz her wie F-Dur spielen. In C-Dur spielt man diese II-V-I-Verbindung Gm7 C7 F. Wenn du den C wie ein F-Barré im 8. Bund greifst, dindest du den Grundton (1) auf der hohen E-Saite. Von dem wanderst du runter zum Startton (2). </div> {{clear}} Auch hier hebt sich der Lagewechsel zwischen der G- und H-Saite mit dem Lagewechsel des 3. Fingersatz gegeneinander auf, was den Fingersatz grifftechnisch wieder vereinfacht. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (F-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> == Wie geht es weiter? == Solltest du als Quereinsteiger in diese Lektion gestolpert sein, dann schaue dir die erste Lektion zum [[Gitarre: Aufbau der CAGED-Skalenformen|Aufbau der CAGED-Skalenformen]] an. Insbesondere die Abschnitte, die hier übergangen wurden. Dannach kannst du mit der ersten CAGED-Skala in der D-Dur-Form weitermachen. <noinclude> {{Navigation zurückhochvor |zurücklink=Gitarre: CAGED-Skala G-Dur-Form |zurücktext=CAGED-Skala G-Dur-Form |hochlink=Gitarre: Die Major-Patterns |hochtext=Einführung: Major-Patterns |vorlink=Gitarre: CAGED-Skala D-Dur-Form |vortext=CAGED-Skala D-Dur-Form }} </noinclude> g4ukqnvjkk1yaju46qm2b8hd9eo7bev 1090725 1090724 2026-09-12T17:05:33Z Mjchael 2222 /* Erster Fingersatz */ 1090725 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre: Sologitarre/ Navi Improvisation in Dur und Moll}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} = Wiederholung der Fingersätze = ; mit Schwerpunkt auf den Stammtönen Diese Wiederholung ist zum einen dafür gedacht, die vorhergehenden Übungen auf jeder Saitenlage zu machen, und auch in jeder Bundlage, gleichgültig ob die Finger eng beieinander oder weit auseinander stehen. Zum andern sind diese als Vorbereitung in die Sologitarre gedacht. Beispielsweise als Auflockerungsübung zwischen den Barré-Akkorden. Besonderen Augenmerk wollen wir hier auf die Notennamen legen. Diese können hier mitgelernt werden. Solltest du meinen, das sei noch nicht für dich dran und kann warten, dann springe zur ersten CAGED-Skala. Du kannst beim Kapitel Longform nochmal hierrauf zurückkommen. * [[Gitarre: CAGED-Skala D-Dur-Form|CAGED-Skala D-Dur-Form]] Lassen wir die [[Gitarre: Aufbau der CAGED-Skalenformen|erste Lektion]] (insbesondere für die Quereinsteiger) noch einmal Revue passieren. Die folgenden Übungen enthalten oft eine Folge von ein- oder zweitaktigen Sequenzen. Eine Sequenz ist ein Motiv, dass sich auf verschiedenen Tonhöhen wiederholt. Auch ohne Notenkenntnisse kannst du den Verlauf und die Wiederholungen der Sequenzen einfacher im Notenbild verfolgen, als in der Tabulatur; insbesondere wenn du dir gleichzeitig die Übung anhörst. Es kommen auch Ausschnitte aus klassischen Stücken, Folksongs, Kinderlieder o.ä. vor. Die einfache Struktur oder der Bekanntheitsgrad der Melodien sollen dir das Üben erleichtern. Die Finger finden so leichter ihre Position, als wenn du erstmal jede einzelne Note aus der Tabulatur entschlüsseln musst. Jede Übung wird auf allen Saitenlagen geübt. Vorher blieben wir in den mittleren Lagen. Jetzt gehen wir auch in die ersten Bünde, wo man die Finger etwas mehr spreizen muss, und in die höheren Lagen, wo es ein wenig eng wird. Die Stücke wiederholen sich in dieser Lektion in der selben Tonart, doch auf verschiedenen Bünden. Du spielst immer die selbe Tonfolge, nur auf verschiedenen Tonhöhen bzw. auf verschiedenen Saitenlagen. Lediglich zwischen der G- und H-Saite musst du dir jedesmal überlegen, wie sich der Lagewechsel auf den Fingersatz auswirkt. Doch der Fingersatz in den anderen höheren Lagen bleibt immer gleich. Wie die Tonfolgen mit dem CAGED-System zusammenhängen, das muss dich nur am Rande interessieren. Es wird in den folgenden Lektionen näher und ausführlicher erleutert. :[[Datei:Scala Griffbrett.svg]] Wir hatten uns bei den vorhergehenden Übungen weitestgehend an den Intervallen (1-j7) und an der Tabulatur orientiert. Diese sind in allen Tonarten gleich. Suche zuerst das Karré! Daran orientierst du dich. :[[Image:Scala Carree.svg]] {{Tipp|Lerne bei der C-Dur-Tonleiter nicht nur die Intervalle <br> 2 - 3 4 - 5<br> 6 - j7 1 - 2<br> sondern benenne auch jede einzelne Note. <br> D - E F - G<br> A - H C - D<br> So bekommst du einen recht einfachen Überblick über das Griffbrett.}} == Töne der C-Dur Tonleiter auf dem Griffbrett == Wir wollen uns in dieser Lektion auf die Töne bzw. die Notennamen konzentrieren. Allerdings sparen wir uns vorerst alle Töne mit Vorzeichen aus. Die [[Gitarre: Aufbau der CAGED-Skalenformen|ersten Übungen zum 1. und 2. Fingersatz]] werden auf die Tonart C-Dur bzw. A-Moll übertragen und wir spiele sie in den hier gezeigten Positionen. Wir fangen mit dem zweiten Fingersatz an, wo wir entweder den Ton C oder den Ton A der C-Dur- bzw. Am-Tonleiter als Orientierung nutzen. Wir bevorzugen die englischen Notennamen, da diese in der Molltonleiter den Alphabet folgen. ;A BC • D EF :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Du hast vermutlich allerlei Akkordformen des CAGED-System gesehen. <div class="noprint"> ;Animation [[Image:Crd Grundtonschema ani.gif]] </div> <score> << \new ChordNames { \chordmode { c1 c c c c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> \once \override FretBoard.fret-diagram-details.dot-color = #'white < c'-1\4 g'-2\3 c''-4\2 e''-3\1 > < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Wenn du schon Fingerstyle oder Jazz spielst, mögen dir viele der Formen bekannt vorkommen. Doch selbst wenn du bis jetzt nur das [[Gitarre: Rockdiplom|Rockdiplom]] gemacht hast und mit den dort vorkommenden Barré-Akkorden vertraut bist, wirst du sehen, dass die einfachen Barré-Akkorde ausreichen, um sich auf dem Griffbrett zu zurechtzufinden. Die [[Gitarre: C-Dur-Tonleiter Workshop|C-Dur-Tonleiter in den ersten drei Bünden]] setze ich als bekannt voraus und es sollte dir nicht allzu schwer fallen, diese in den 12. Bund zu übertragen. :[[Datei:Scala C-Am.svg|150px]][[Datei:C-Dur_Majorpattern_III.jpg|150px]] C-Dur als Barré im 3. Bund kennst du vom Rockdiplom, und C-Dur im 8. Bund ist auch kein Hexenwerk. Dazwischen liegt nach dem CAGED-System die G-Form, die dir vermutlich noch nicht untergekommen ist (hier mit weißem Fingersatz). Statt uns die Töne von der G-Form abzuleiten, machen wir es uns einfacher und leiten uns die Töne zur Orientierung vom Am im 5. Bund ab. Du erinnerst dich noch an die Dur- und Mollparallelen? (C- \ Am-Tonleiter bzw. G- \ Em-Form). Oder du nutzt die Grundtöne des C-Barré im 8. Bund. <score> << \new ChordNames { \chordmode { c1 c c a:m c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < a,-1\6 e-3\5 a-4\4 c'-1\3 e'-1\2 a'-1\1 > < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Leite dir also die Grundtöne C und A von den dir bekannten Barré-Akkorden ab und spare dir die ungewöhnlicheren Akkordformen auf, bis sie dir später beim Fingerstyle oder Jazz begegnen. Es macht dabei garnichts aus, wenn du zum Auffinden der Grundtöne und zum Finden des Starttons ein paar Sekunden brauchst. Du wirst sehen, dass die Wiederholungen der bekannten Übungen auf den verschiedenen Bünden und in verschiedenen Oktavebereichen leicht von der Hand gehen. Lediglich beim Lagewechsel zwischen der G- und H-Saite musst du etwas überlegen. <score> << \new ChordNames { \chordmode { c1 c c a c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 c'-1 > < c-1\5 c'-3\3 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 c'-1\3 c''-4\1> < a,-1\6 a-4\4 a'-1\1 > < c-1\6 c'-3\4 c''-1\1> < c'-4\5 c''-2\2 > } >> </score> Diese wenigen"Eckpunkte" reichen aus, um dich grob auf dem Griffbrett zurechtzufinden. Suche sie noch einmal in der Skala und natürlich auch auf deinem Griffbrett. :[[Datei:C-Major-Scale on the fretboard.svg]] == Erster Fingersatz == === Eintaktige Sequenzen === Du wirst feststellen, dass sich die Sequenzen recht schnell lernen lassen. ==== 1. Fingersatz • C-Form (open) ==== Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • A- (Bb-)Form ==== Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 3.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 3 darkgrey ) (place-fret 4 3 4 yellow3 ) (place-fret 4 5 5 darkgrey ) (place-fret 5 2 "j7" yellow3 ) (place-fret 5 3 1 black ) (place-fret 5 5 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • G-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 3 darkgrey ) (place-fret 2 6 4 yellow3 ) (place-fret 2 8 5 darkgrey ) (place-fret 3 4 "j7" yellow3 ) (place-fret 3 5 1 black ) (place-fret 3 7 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger auf der G-Saite des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • E- (F-)Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 3 darkgrey ) (place-fret 5 8 4 yellow3 ) (place-fret 5 10 5 darkgrey ) (place-fret 6 7 "j7" yellow3 ) (place-fret 6 8 1 black ) (place-fret 6 10 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Den Grundton C auf der E-Saite kannst du dir vom C-Barré der E-Form (wie ein F- Barré) im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • D-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 3 darkgrey ) (place-fret 3 10 4 yellow3 ) (place-fret 3 12 5 darkgrey ) (place-fret 4 9 "j7" yellow3 ) (place-fret 4 10 1 black ) (place-fret 4 12 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Wenn du später mal einen herausfordernden Lick zwischen der G- und H-Saite hast, wäre eine weitere gangbare Strategie den Lick in eine fingertechnisch günstigere Lage zu verlegen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • C-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 3 darkgrey ) (place-fret 1 13 4 yellow3 ) (place-fret 1 15 5 darkgrey ) (place-fret 2 12 "j7" yellow3 ) (place-fret 2 13 1 black ) (place-fret 2 15 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === === Die Moldau (Hauptmotiv) === == Zweiter Fingersatz == :[[Datei:Scala 6_71-2_34.svg]] Zuerst suchen wir uns in der C-Dur-Tonleiter überall den zweiten Fingersatz heraus. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Zur leichteren Orientierung wird die Grafik bei jeder neuen Melodie wiederholt. === Rondeau (Auszug) === Die eintaktige Sequenzen wurde aus einem Rondeau von J.S. Bach entnommen, dass beliebig wiederholt werden kann. Der Grundton C, welcher im letzten Takt rot eingefärbt wurde, wird mit dem kleinen Finger gegriffen. ==== C-Form (offen) • Rondo ==== Am Anfang des Griffbrettes brauchen wir den zweiten Fingersatz nicht vollständig. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A- (Bb)-Form • Rondo ==== In der A-(Bb-)Form müssen wir den Lagewechsel zwischen der G- und H-Saite beachten. Übrigens werden hier die Töne in der englischen Form angegeben. (Bb-Form und der Ton B statt des deutschen H.) Nur der erste Bund wird bis zur letzten Note in der dritten Lage gespielt. Der Rest bis zur letzten Note in der zweiten Lage. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (A-, Bb-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e-4 d-2 c d e d c b d c b c d c b a c b a b c d b c d-1 } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Rondo ==== Statt in der G-Form das C zu suchen, suche lieber das A im 5. Bund (hier grün hervorgehoben). Oder du leitest dir das C vom Barré im 8. Bund ab. Der Startton E ist auf der A Saite im 7. Bund unter dem Ringfinger. Ansonsten stellt der Fingersatz keine Herausforderung mehr dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (G-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b \once \override NoteHead #'color = #green a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F)-Form • Rondo ==== Der kleine Finger des C-Barré im 8. Bund in der E- bzw. F-Form gibt gleichzeitig das C des zweiten Fingersatz an. Du siehst, dass ab jetzt alles leichter geworden ist, weil sich ansonsten nichts mehr am Fingersatz ändert. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- F-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Rondo ==== Für den Grundton C müssen wir uns die D-Form gar nicht so genau ins Gedächtnis rufen, wenn uns die C-Form viel vertrauter ist. Diese hohe Lage ist für E-Gitarristen oder Gitarren mit Cutaway gedacht. Auf der Konzertgitarre ist die sehr hohe Lage schlecht zu spielen. Gehe ggf. einen Kompromiss ein, und spiele diese hohe Saitenlage ein paar Bünde tiefer als Übung nur für den Fingersatz aber nicht für die Notennamen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Noten über dem hohen C (der mit zwei Hilfslinien) wird dir seltener begegnen, da in dem Fall bevorzugt die Noten nach unten oktaviert werden. (Beachte die 8 im Notensystem.) Bei den weiteren Übungen werden jedoch die Versionen mit den vielen Hilfslinien angezeigt. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { \ottava #1 e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Rondo ==== Mit der C-Form in den ersten drei Bünden im Hinterkopf ist der 12. Bund leicht zu bewältigen. Wieder eine Übung, die weniger für Konzertgitarren geeignet ist. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === Die Abfolge der Töne der folgenden Übung unterscheidet sich kaum von der vorhergehenden. Doch mit dem anderen Rhythmus haben wir das Hauptmotiv von der Komposition {{Youtube-Suche|Smetana+Die+Moldau|"Die Moldau" von Bedrich Smetana}} (ohne Auftakt und rhythmisch vereinfacht). Auch wenn es hier (wie in der 7. Übung) nur die Molltonleiter rauf und runter geht, merkst du hoffentlich, wieviel der Takt und Rhythmus an der Wirkung ausmacht. Wenn du später mal meinst, deine Improvisationen hören sich langweilig an, dann solltest du dich mehr mit Rhythmus beschäftigen. Dazu kannst du dich auch ein wenig mit Schlagmustern beschäftigen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Warum die Form hier Gm-Form genannt wird, das wird dir in den nachfolgenden Lektionen klarer werden. Auf Fingersatzangaben können wir hier verzichten, wenn du vorher "Alle meine Entchen in Am" gespielt hast. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Bb- /Gm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier bietet sich besonders an, den Am-Barré zur Orientierung zu verwenden. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier gibt dir der kleine Finger des Am-Barrés den Grundton an. Du kannst dir die Dm-Form aber auch über die F-Form (C im 8. Bund) ableiten. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (F- /Dm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Zähle vom C (H-Saite, 13. Bund) rückwärts zum A. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D- /Bm7-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wird die erste Übung in den 12. Bund verschoben. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C- /Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==1. Fingersatz== Dir wird wohl aufgefallen sein, dass beim zweiten Fingersatz der Ton G fehlt. Den üben wir mit dem ersten Fingersatz. :[[Datei:Scala 71_2-34_5.svg]] Beachte, dass der Grundton (1) unter dem Ringfinger (also im zweiten Bund dieses Fingersatzes) ist, und dass du deine freie Improvisationsübung in Dur günstigerweise mit der (1) beginnen oder zumindest enden sollte. Diesen Fingersatz suchen wir in der C-Dur-Tonleiter auf dem Griffbrett. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] === Eintaktige Sequenzen === Du wirst feststellen, dass sich die Sequenzen recht schnell lernen lassen. ==== 1. Fingersatz • C-Form (open) ==== Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • A- (Bb-)Form ==== Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 3.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 3 darkgrey ) (place-fret 4 3 4 yellow3 ) (place-fret 4 5 5 darkgrey ) (place-fret 5 2 "j7" yellow3 ) (place-fret 5 3 1 black ) (place-fret 5 5 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • G-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 3 darkgrey ) (place-fret 2 6 4 yellow3 ) (place-fret 2 8 5 darkgrey ) (place-fret 3 4 "j7" yellow3 ) (place-fret 3 5 1 black ) (place-fret 3 7 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger auf der G-Saite des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • E- (F-)Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 3 darkgrey ) (place-fret 5 8 4 yellow3 ) (place-fret 5 10 5 darkgrey ) (place-fret 6 7 "j7" yellow3 ) (place-fret 6 8 1 black ) (place-fret 6 10 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Den Grundton C auf der E-Saite kannst du dir vom C-Barré der E-Form (wie ein F- Barré) im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • D-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 3 darkgrey ) (place-fret 3 10 4 yellow3 ) (place-fret 3 12 5 darkgrey ) (place-fret 4 9 "j7" yellow3 ) (place-fret 4 10 1 black ) (place-fret 4 12 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Wenn du später mal einen herausfordernden Lick zwischen der G- und H-Saite hast, wäre eine weitere gangbare Strategie den Lick in eine fingertechnisch günstigere Lage zu verlegen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • C-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 3 darkgrey ) (place-fret 1 13 4 yellow3 ) (place-fret 1 15 5 darkgrey ) (place-fret 2 12 "j7" yellow3 ) (place-fret 2 13 1 black ) (place-fret 2 15 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen === Diesmal hast du halbtaktige Sequenzen, die einmal wiederholt werden. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • 1. Fingersatz ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== A- (Bb-)Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 "E" darkgrey ) (place-fret 4 3 "F" yellow3 ) (place-fret 4 5 "G" darkgrey ) (place-fret 5 2 "B" yellow3 ) (place-fret 5 3 "C" black ) (place-fret 5 5 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Leite dir den Grundton vom C-Dur-Akkord, oder vom C-Barré im 3. Bund ab. Lerne nicht nur die Intervlle, sondern auch die Notennamen. (Zumindest bei den einfachen Tonarten F-, G- und C-Dur). Andere Tonarten kommen später dran. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- / Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 "E" darkgrey ) (place-fret 2 6 "F" yellow3 ) (place-fret 2 8 "G" darkgrey ) (place-fret 3 4 "B" yellow3 ) (place-fret 3 5 "C" black ) (place-fret 3 7 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Du kannst die beiden hintereinander folgenden Noten im 5. Bund mit einem Mini-Barré ausführen, und die Lagewechsel mittels Slide (=&nbsp;Glissando) durchführen, oder wie in der Wiederholung ohne Slide durchführen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8-1 g' f e d f e d c-1 e-1 d c-1(\glissando b-1) d c b-1(\glissando c1-1) c8-2 g' f e d f e d c-1 e-2 d-4 c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F-)Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 "E" darkgrey ) (place-fret 5 8 "F" yellow3 ) (place-fret 5 10 "G" darkgrey ) (place-fret 6 7 "B" yellow3 ) (place-fret 6 8 "C" black ) (place-fret 6 10 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Fingersatztechnisch wieder problemlos. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 "E" darkgrey ) (place-fret 3 10 "F" yellow3 ) (place-fret 3 12 "G" darkgrey ) (place-fret 4 9 "B" yellow3 ) (place-fret 4 10 "C" black ) (place-fret 4 12 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Wieder klingt diese Lage genau so, wie die G-Form, ist aber vom Fingersatz her einfacher. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 "E" darkgrey ) (place-fret 1 13 "F" yellow3 ) (place-fret 1 15 "G" darkgrey ) (place-fret 2 12 "B" yellow3 ) (place-fret 2 13 "C" black ) (place-fret 2 15 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Die H-Saite heißt auch im 12. Bund H, also ist im 13. Bund das C. Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Ein Vogel wollte Hochzeit machen === Hier habe ich ein relativ bekanntes Kinderlied gefunden, dass perfekt zum 1. Fingersatz passt. Die Tondauern sind für Ungeübte in Sachen Noten schwer herauszulesen. Kennst du aber das Stück, oder hörst du es dir mehrmals an, so ist es keine unüberwindbare Schwierigkeit. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • Ein Vogel ==== Folgt das G nach dem D, greifst du den besser mit dem kleinen Finger. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8 d d-3 g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A- (Bb-)Form • Ein Vogel ==== Hier kannst du auch versuchen, den kleinen Finger umzulegen, wenn du nach dem D den G greifen willst. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8-3 d d g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Ein Vogel ==== Wenn zwei Töne im selben Bund sind, kann man entweder einen Minibarré spielen, oder ein Finger muss vorübergehend seine bevorzuge Position verlassen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e-2 c-1 g' e d( g) g g16 e-2 | c8-1 8 8 g'16 e d8 d d g16 f | e8-2 c-1 d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F-)Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen (2) === :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== 1. Fingersatz - C-Form (offen) ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - A- (Bb-)Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - G-Form ==== Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - E- (F-)Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - D-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - C-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Einsingen === Diese beiden Motive kennen viele, die schon einmal in einem Chor gesungen haben. Leider entsprechen viele Lieder in ihrem Tonumfang nicht genau einem der vollständigen drei Fingersätze oder der später folgenden Skalen. Zumeist werden nur Ausschnitte aus den Patterns gebraucht. Im ersten Motiv fehlt beispielsweise die große Septime (j7) vor dem Grundton. Dafür enthält das zweite Motiv die große Septime (j7). Das zweite Motiv eicht den Chor auf die gerade geforderte Tonart. Hier werden nur Akkordtöne in einer auf oder absteigenden Tonfolge gespielt (auch Arpeggios genannt). Der A7-Akkord enthält sowohl den Leitton (j7) der zum Grundton (1) hin leitet, als auch den Strebeton (4) die zur Durterz (3) hin strebt. Mit den zwei spannungsreichen Tönen, die sich zum Grundakkord auflösen wollen, wird der Chor auf die Durtonart eingenordet. Hier brauche ich dir nicht zu erklären, wo der Grundton D ist. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A-(Bb-)Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A-(Bb-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E-(F-)Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==Erste über den zweiten Fingersatz== Wie du siehst, kommt hier jedesmal zuerst der erste Fingersatz mit dem "Karree" rechts, und dannach kommt der Fingersatz mit dem "Karree" links. Sie sind immer untereinander. Nur zwischen der G- und B-Saite verschiebt sich alles um einen Bund. <div style="float:left; padding:5px; border:black solid 1px; "> ;F-Form <score raw="1"> \version "2.14.2" \paper{ indent=0\mm line-width=120\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% 4-o zeigt 4. Saite offen \fret-diagram #"s:2;f:1; 3-3-2;3-5-3;3-6-4; 4-3-6;4-5-7;4-6-1; 5-3-3;5-4-4;5-6-5; 6-3-7;6-4-1;6-6-2;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;Bb-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:2;f:1; 2-4-2;2-6-3;2-7-4; 3-3-6;3-5-7;3-6-1; 4-3-3;4-4-4;4-6-5; 5-3-7;5-4-1;5-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;D-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:2;f:1; 1-4-2;1-6-3;1-7-4; 2-4-6;2-6-2;2-7-1; 3-3-3;3-4-4;3-6-5; 4-3-7;4-4-1;4-6-2;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} === Jamaica Farewell === Die Melodie von [[Liederbuch/ Jamaica Farwell|Jamaica Farwell]] wurde erheblich vereinfacht, damit du dir nicht zu viele Gedanken um den Rhythmus machen musst. Wenn du dich am Quintillo (dem Rhythmus vom Lagerfeuerschlag} orientierst, solltest du wenige Probleme haben. Es gibt recht viele Wiederholung. Die Strophe wurde bei der Wiederholung in die Oktave verschoben, damit das Stück exakt in den Skalenausschnitt passt. Du musst dir für die Fingersätze ggf. Strategien zurechtlegen, damit du die Finger bequem sortiert bekommst. Das Stück beginnt mit dem Ton G. Der (5) in 1. Fingersatz. ;Bb-Form Greife den C wie ein Bb-Barré im 3. Bund. Leite dir von diesem Akkord den Grundton (1) ab, und wandere beim 1. Fingersatz rauf zum Startton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-4-2;2-6-3;2-7-4; 3-3-6;3-5-7;3-6-1; 4-3-3;4-4-4;4-6-5; 5-3-7;5-4-1;5-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (A-, Bb-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ; F-Form Greife den C wie ein F-Barré im 8. Bund. Leite dir von diesem Akkord den Grundton (1) ab, und wandere beim 1. Fingersatz rauf zum Startton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 3-7-2;3-9-3;3-10-4; 4-7-6;4-9-7;4-10-1; 5-7-3;5-8-4;5-10-5; 6-7-7;6-8-1;6-10-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (E-, F-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ;D-Form Schiebe den D-Dur-Akkord in den 12. Bund. Ein D im 12. Bund verschoben ergibt ein C. Leite dir von diesem Akkord den Grundton (1) ab. Orientiere dich kurz im 2. Fingersatz und wandere zurück zum ersten Fingersatz zum Ton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 1-10-2;1-12-3;1-13-4; 2-10-6;2-12-7;2-13-1; 3-9-3;3-10-4;3-12-5; 4-9-7;4-10-1;4-12-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (D-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==3. Fingersatz== Es fällt auf, dass der 3. Fingersatz kein "Karré" hat. {| !Fingersatz !width="30px"| !Intervalle |- |[[Image:Scala Z RK-Z K-ZM K.svg]] !width="30px"| |[[Image:Scala 2 34-5 6-71 2.svg]] |} Der 3. Fingersatz ist gar kein eigenständiger Fingersatz. Der obere Teil des 3. Fingersatzes ist eigentlich schon der untere Teil des 2. Fingersatzes. Ebenso ist der untere Teil des 3. Fingersatzes gleichzeitig der Anfang des 1. Fingersatzes. Du musst dir Strategien zurechtlegen, wie du den Übergang vom Ende des 2. Fingersatzes über die 5 und die 6 hin zum 1. Fingersatz gestaltest. Es kommt beim 3. Fingersatz zu einem Lagewechsel nach links. Übe den 3. Fingersatz zuerst in den obersten Saitenlagen (E A D G x x) === Eine II-V-I-Verbindung === Wir spielen eine einfache Tonfolge über einer 2-5-1-Verbindung. Die Akkordtöne liegen zumeist auf den schweren Zählzeiten. * D, F, A, C gehören zum Dm7 * G, B, D, F gehören zum G7 * C, E, G gehören zum C-Dur-Akkord. Wir nutzen das CAGED-System, um uns grob auf dem Griffbrett zurechtzufinden. ==== Exkurs: Skalenformen ==== Die Namen der Skalen leiten sich übrigens von folgenden einfachen Tonleitern in den ersten Bünden ab: [[Image:Scala C-Am.svg|100px]] [[Image:Scala Bb-Gm.svg|100px]] [[Image:Scala G-Em.svg|100px]] [[Image:Scala F-Dm.svg|100px]] [[Image:Scala D-Hm.svg|100px]] Alle Akkorde die man aus diesen einfachen Tonarten kennt, Bassläufe und ähnliches lassen sich zum großen Teil auf die entsprechenden 5 CAGED-Skalen übertragen, fast so als habe man die Tonleiter mittels Kapodaster in eine höhere Lage verschoben. Wie du siehst, nennen wir die Skalen entgegen des reinen CAGED-System nicht E-Dur-Form (Shape) und nicht die A-Dur-Form (Shape), sondern F- und Bb-Dur-Form. <div style="float:left; padding:5px; border:black solid 1px; "> ;E-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-1;1-2-2;1-4-3; 2-0-5;2-2-6;2-4-7; 3-1-3;3-2-4;3-4-5; 4-1-7;4-2-1;4-4-2; 5-0-4;5-2-5;5-4-6; 6-0-1;6-2-2;6-4-3;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;F-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-3; 1-1-1; 1-3-2; 2-1-5; 2-3-6; 3-0-2; 3-2-3; 3-3-4; 4-0-6; 4-2-7; 4-3-1; 5-0-3; 5-1-4; 5-3-5; 6-0-7; 6-1-1; 6-3-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;G-Dur-Tonleiter <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-3-3; 1-4-1; 1-6-2; 2-4-5; 2-6-6; 3-3-2; 3-5-3; 3-6-4; 4-3-6; 4-5-7; 4-6-1; 5-3-3; 5-4-4; 5-6-5; 6-3-7; 6-4-1; 6-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Du siehst selbst, dass die G-Dur-Tonleiter von der Form her eher wie die F-Dur-Tonleiter als wie die E-Dur-Tonleiter aussieht. <div style="float:left; padding:5px; border:black solid 1px; "> ;A-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-5;1-2-6;1-4-7; 2-0-2;2-2-3;2-3-4; 3-1-7;3-2-1;3-4-2; 4-0-4;4-2-5;4-4-6; 5-0-1;5-2-2;5-4-3; 6-0-5;6-2-6;6-4-7;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;Bb-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-1-5; 1-3-6; 2-1-2; 2-3-3; 2-4-4; 3-0-6; 3-2-7; 3-3-1; 4-0-3; 4-1-4; 4-3-5; 5-0-7; 5-1-1; 5-3-2; 6-1-5; 6-3-6;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;C-Dur-Tonleiter <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-3-5; 1-5-6; 2-3-2; 2-5-3; 2-6-4; 3-2-6; 3-4-7; 3-5-1; 4-2-3; 4-3-4; 4-5-5; 5-2-7; 5-3-1; 5-5-2; 6-3-5; 6-5-6;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Du siehst selbst, dass die C-Dur-Tonleiter von der Form her eher wie die Bb-Dur-Tonleiter als wie die A-Dur-Tonleiter aussieht. ==== 3. Fingersatz II-V-I-Verbindung D-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;D-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1; 4-9-7;4-10-1;4-12-2; 5-10-5;5-12-6; 6-10-2;6-12-3;6-13-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Wir beginnen oben bei der D-Form, wo sich der Lagewechsel des 3. Fingersatz noch nicht mit dem Lagewechsel zwischen der G und H-Saite (engl. B-Saite) aufhebt. Würde ich ein Capo in den 10. Bund setzen, dann würde ich die Melodie vom Fingersatz her wie D-Dur spielen. In D-Dur spiele ich diese II-V-I-Verbindung Em7 A7 D. Nehme ich das Capo weg, dann greife ich den Dm(7) als einen Barré der Em-Form im 10. Bund. Von diesem kann ich mir das D als Grundton ableiten. Alternativ siehst du in den Noten, dass die Übung mit dem Ton D anfängt. Dass die oberste Tiefe E-Saite im 12. Bund ebenfalls ein E ergibt, setze ich als bekannt voraus. Falls nicht, beschäftige dich noch einmal mit dem [[Gitarre: Lagerfeueranhang 2c|Stimmen der Gitarre]]. Ein Ganztonschritt bzw. zwei Bünde vor dem E ist der Ton D. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (D-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g-1 a-4 b-1 c4 | b8^\markup { \bold {G7} } a-4 g4-1 f8 e d4 | e8^\markup { \bold {C} } f g4-1 a8-4 b-1 c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung G-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;G-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 3-4-7;3-5-1;3-7-2; 4-5-5;4-7-6; 5-5-2;5-7-3;5-8-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 5. Bund setzen, dann würde man die Melodie vom Fingersatz her wie G-Dur spielen. In G-Dur spielt man diese II-V-I-Verbindung Am7 D7 G. Nimmt man das Capo weg, dann greift man den Dm(7) als einen Barré der Am-Form. Von diesem kannst du dir den D als Grundton ableiten. Einfacher geht es natürlich, wenn du weißt, dass der D im 5. Bund der A-Saite der Stimmton der D-Saite ist. </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (G-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g-1 a-4 b-1 c4 | b8^\markup { \bold {G7} } a-4 g4-1 f8 e d4 | e8^\markup { \bold {C} } f g4-1 a8-4 b-1 c d | c b c2. | \break d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung C-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;C-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-0-7;2-1-1;2-3-2; 3-0-5;3-2-6; 4-0-2;4-2-3;4-3-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Die C-Dur-Form der C-Dur Tonleiter sieht schlicht und ergreifend wie die C-Durtonleiter aus. </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (C-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #4 % \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \break d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung C-Form 12. Bund ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;C-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-12-7;2-13-1;2-15-2; 3-12-5;3-14-6; 4-12-2;4-14-3;4-15-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 12. Bund setzen, dann würde man die Melodie vom Fingersatz her wie C-Dur spielen. In C-Dur spielt man diese II-V-I-Verbindung Dm7 G7 C. Der Startton ist schlicht die D-Saite im 12. Bund. </div> {{clear}} Gerade noch hatten wir einen Lagewechsel nach links. Jetzt aber hebt sich der Lagewechsel nach links vom 3. Fingersatz mit dem Lagewechsel zwischen der G- und H-Saite auf. Es hört sich beim ersten Durchlesen kompliziert an, aber du hast nur 4 Lektionen zu lernen. Den 1. bis 3. Fingersatz und den Lagewechsel zwischen der G- und H-Saite. Das Auffinden der Töne und welche Akkorde zu welcher Tonart gehört, und wie man einen Capo benutzt, sollte eigentlich nichts neues für dich sein. Rein technisch gesehen vereinfacht sich der Fingersatz. Doch es kostet ein wenig Überlegung, wie sich die beiden Lagewechsel auf den 3. Fingersatz auswirken. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (C-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Sollte es im 12 Bund unbequem zu spielen sein, weil du kein Cutaway hast (Aussparung für die hohen Bünde), übe die C-Form ein paar Bünde zurück in einer anderen Tonart. ==== 3. Fingersatz II-V-I-Verbindung F-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;F-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 1-7-7; 1-8-1;1-10-2; 2-8-5; 2-10-6; 3-7-2; 3-9-3; 3-10-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 6. Bund setzen, dann würde man die Melodie vom Fingersatz her wie F-Dur spielen. In C-Dur spielt man diese II-V-I-Verbindung Gm7 C7 F. Wenn du den C wie ein F-Barré im 8. Bund greifst, dindest du den Grundton (1) auf der hohen E-Saite. Von dem wanderst du runter zum Startton (2). </div> {{clear}} Auch hier hebt sich der Lagewechsel zwischen der G- und H-Saite mit dem Lagewechsel des 3. Fingersatz gegeneinander auf, was den Fingersatz grifftechnisch wieder vereinfacht. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (F-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> == Wie geht es weiter? == Solltest du als Quereinsteiger in diese Lektion gestolpert sein, dann schaue dir die erste Lektion zum [[Gitarre: Aufbau der CAGED-Skalenformen|Aufbau der CAGED-Skalenformen]] an. Insbesondere die Abschnitte, die hier übergangen wurden. Dannach kannst du mit der ersten CAGED-Skala in der D-Dur-Form weitermachen. <noinclude> {{Navigation zurückhochvor |zurücklink=Gitarre: CAGED-Skala G-Dur-Form |zurücktext=CAGED-Skala G-Dur-Form |hochlink=Gitarre: Die Major-Patterns |hochtext=Einführung: Major-Patterns |vorlink=Gitarre: CAGED-Skala D-Dur-Form |vortext=CAGED-Skala D-Dur-Form }} </noinclude> p6yni4b45tireql6prjrr4ujk52yuxu 1090726 1090725 2026-09-12T17:09:44Z Mjchael 2222 /* Eintaktige Sequenzen */ 1090726 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre: Sologitarre/ Navi Improvisation in Dur und Moll}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} = Wiederholung der Fingersätze = ; mit Schwerpunkt auf den Stammtönen Diese Wiederholung ist zum einen dafür gedacht, die vorhergehenden Übungen auf jeder Saitenlage zu machen, und auch in jeder Bundlage, gleichgültig ob die Finger eng beieinander oder weit auseinander stehen. Zum andern sind diese als Vorbereitung in die Sologitarre gedacht. Beispielsweise als Auflockerungsübung zwischen den Barré-Akkorden. Besonderen Augenmerk wollen wir hier auf die Notennamen legen. Diese können hier mitgelernt werden. Solltest du meinen, das sei noch nicht für dich dran und kann warten, dann springe zur ersten CAGED-Skala. Du kannst beim Kapitel Longform nochmal hierrauf zurückkommen. * [[Gitarre: CAGED-Skala D-Dur-Form|CAGED-Skala D-Dur-Form]] Lassen wir die [[Gitarre: Aufbau der CAGED-Skalenformen|erste Lektion]] (insbesondere für die Quereinsteiger) noch einmal Revue passieren. Die folgenden Übungen enthalten oft eine Folge von ein- oder zweitaktigen Sequenzen. Eine Sequenz ist ein Motiv, dass sich auf verschiedenen Tonhöhen wiederholt. Auch ohne Notenkenntnisse kannst du den Verlauf und die Wiederholungen der Sequenzen einfacher im Notenbild verfolgen, als in der Tabulatur; insbesondere wenn du dir gleichzeitig die Übung anhörst. Es kommen auch Ausschnitte aus klassischen Stücken, Folksongs, Kinderlieder o.ä. vor. Die einfache Struktur oder der Bekanntheitsgrad der Melodien sollen dir das Üben erleichtern. Die Finger finden so leichter ihre Position, als wenn du erstmal jede einzelne Note aus der Tabulatur entschlüsseln musst. Jede Übung wird auf allen Saitenlagen geübt. Vorher blieben wir in den mittleren Lagen. Jetzt gehen wir auch in die ersten Bünde, wo man die Finger etwas mehr spreizen muss, und in die höheren Lagen, wo es ein wenig eng wird. Die Stücke wiederholen sich in dieser Lektion in der selben Tonart, doch auf verschiedenen Bünden. Du spielst immer die selbe Tonfolge, nur auf verschiedenen Tonhöhen bzw. auf verschiedenen Saitenlagen. Lediglich zwischen der G- und H-Saite musst du dir jedesmal überlegen, wie sich der Lagewechsel auf den Fingersatz auswirkt. Doch der Fingersatz in den anderen höheren Lagen bleibt immer gleich. Wie die Tonfolgen mit dem CAGED-System zusammenhängen, das muss dich nur am Rande interessieren. Es wird in den folgenden Lektionen näher und ausführlicher erleutert. :[[Datei:Scala Griffbrett.svg]] Wir hatten uns bei den vorhergehenden Übungen weitestgehend an den Intervallen (1-j7) und an der Tabulatur orientiert. Diese sind in allen Tonarten gleich. Suche zuerst das Karré! Daran orientierst du dich. :[[Image:Scala Carree.svg]] {{Tipp|Lerne bei der C-Dur-Tonleiter nicht nur die Intervalle <br> 2 - 3 4 - 5<br> 6 - j7 1 - 2<br> sondern benenne auch jede einzelne Note. <br> D - E F - G<br> A - H C - D<br> So bekommst du einen recht einfachen Überblick über das Griffbrett.}} == Töne der C-Dur Tonleiter auf dem Griffbrett == Wir wollen uns in dieser Lektion auf die Töne bzw. die Notennamen konzentrieren. Allerdings sparen wir uns vorerst alle Töne mit Vorzeichen aus. Die [[Gitarre: Aufbau der CAGED-Skalenformen|ersten Übungen zum 1. und 2. Fingersatz]] werden auf die Tonart C-Dur bzw. A-Moll übertragen und wir spiele sie in den hier gezeigten Positionen. Wir fangen mit dem zweiten Fingersatz an, wo wir entweder den Ton C oder den Ton A der C-Dur- bzw. Am-Tonleiter als Orientierung nutzen. Wir bevorzugen die englischen Notennamen, da diese in der Molltonleiter den Alphabet folgen. ;A BC • D EF :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Du hast vermutlich allerlei Akkordformen des CAGED-System gesehen. <div class="noprint"> ;Animation [[Image:Crd Grundtonschema ani.gif]] </div> <score> << \new ChordNames { \chordmode { c1 c c c c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> \once \override FretBoard.fret-diagram-details.dot-color = #'white < c'-1\4 g'-2\3 c''-4\2 e''-3\1 > < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Wenn du schon Fingerstyle oder Jazz spielst, mögen dir viele der Formen bekannt vorkommen. Doch selbst wenn du bis jetzt nur das [[Gitarre: Rockdiplom|Rockdiplom]] gemacht hast und mit den dort vorkommenden Barré-Akkorden vertraut bist, wirst du sehen, dass die einfachen Barré-Akkorde ausreichen, um sich auf dem Griffbrett zu zurechtzufinden. Die [[Gitarre: C-Dur-Tonleiter Workshop|C-Dur-Tonleiter in den ersten drei Bünden]] setze ich als bekannt voraus und es sollte dir nicht allzu schwer fallen, diese in den 12. Bund zu übertragen. :[[Datei:Scala C-Am.svg|150px]][[Datei:C-Dur_Majorpattern_III.jpg|150px]] C-Dur als Barré im 3. Bund kennst du vom Rockdiplom, und C-Dur im 8. Bund ist auch kein Hexenwerk. Dazwischen liegt nach dem CAGED-System die G-Form, die dir vermutlich noch nicht untergekommen ist (hier mit weißem Fingersatz). Statt uns die Töne von der G-Form abzuleiten, machen wir es uns einfacher und leiten uns die Töne zur Orientierung vom Am im 5. Bund ab. Du erinnerst dich noch an die Dur- und Mollparallelen? (C- \ Am-Tonleiter bzw. G- \ Em-Form). Oder du nutzt die Grundtöne des C-Barré im 8. Bund. <score> << \new ChordNames { \chordmode { c1 c c a:m c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < a,-1\6 e-3\5 a-4\4 c'-1\3 e'-1\2 a'-1\1 > < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Leite dir also die Grundtöne C und A von den dir bekannten Barré-Akkorden ab und spare dir die ungewöhnlicheren Akkordformen auf, bis sie dir später beim Fingerstyle oder Jazz begegnen. Es macht dabei garnichts aus, wenn du zum Auffinden der Grundtöne und zum Finden des Starttons ein paar Sekunden brauchst. Du wirst sehen, dass die Wiederholungen der bekannten Übungen auf den verschiedenen Bünden und in verschiedenen Oktavebereichen leicht von der Hand gehen. Lediglich beim Lagewechsel zwischen der G- und H-Saite musst du etwas überlegen. <score> << \new ChordNames { \chordmode { c1 c c a c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 c'-1 > < c-1\5 c'-3\3 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 c'-1\3 c''-4\1> < a,-1\6 a-4\4 a'-1\1 > < c-1\6 c'-3\4 c''-1\1> < c'-4\5 c''-2\2 > } >> </score> Diese wenigen"Eckpunkte" reichen aus, um dich grob auf dem Griffbrett zurechtzufinden. Suche sie noch einmal in der Skala und natürlich auch auf deinem Griffbrett. :[[Datei:C-Major-Scale on the fretboard.svg]] == Erster Fingersatz == === Eintaktige Sequenzen === Du wirst feststellen, dass sich die Sequenzen recht schnell lernen lassen. ==== 1. Fingersatz • C-Form (open) ==== Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • A- (Bb-)Form ==== Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 3.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 3 darkgrey ) (place-fret 4 3 4 yellow3 ) (place-fret 4 5 5 darkgrey ) (place-fret 5 2 "j7" yellow3 ) (place-fret 5 3 1 black ) (place-fret 5 5 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • G-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 3 darkgrey ) (place-fret 2 6 4 yellow3 ) (place-fret 2 8 5 darkgrey ) (place-fret 3 4 "j7" yellow3 ) (place-fret 3 5 1 black ) (place-fret 3 7 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger auf der G-Saite des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • E- (F-)Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 3 darkgrey ) (place-fret 5 8 4 yellow3 ) (place-fret 5 10 5 darkgrey ) (place-fret 6 7 "j7" yellow3 ) (place-fret 6 8 1 black ) (place-fret 6 10 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Den Grundton C auf der E-Saite kannst du dir vom C-Barré der E-Form (wie ein F- Barré) im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • D-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 3 darkgrey ) (place-fret 3 10 4 yellow3 ) (place-fret 3 12 5 darkgrey ) (place-fret 4 9 "j7" yellow3 ) (place-fret 4 10 1 black ) (place-fret 4 12 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Wenn du später mal einen herausfordernden Lick zwischen der G- und H-Saite hast, wäre eine weitere gangbare Strategie den Lick in eine fingertechnisch günstigere Lage zu verlegen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • C-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 3 darkgrey ) (place-fret 1 13 4 yellow3 ) (place-fret 1 15 5 darkgrey ) (place-fret 2 12 "j7" yellow3 ) (place-fret 2 13 1 black ) (place-fret 2 15 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === === Die Moldau (Hauptmotiv) === == Zweiter Fingersatz == :[[Datei:Scala 6_71-2_34.svg]] Zuerst suchen wir uns in der C-Dur-Tonleiter überall den zweiten Fingersatz heraus. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Zur leichteren Orientierung wird die Grafik bei jeder neuen Melodie wiederholt. === Rondeau (Auszug) === Die eintaktige Sequenzen wurde aus einem Rondeau von J.S. Bach entnommen, dass beliebig wiederholt werden kann. Der Grundton C, welcher im letzten Takt rot eingefärbt wurde, wird mit dem kleinen Finger gegriffen. ==== C-Form (offen) • Rondo ==== Am Anfang des Griffbrettes brauchen wir den zweiten Fingersatz nicht vollständig. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A- (Bb)-Form • Rondo ==== In der A-(Bb-)Form müssen wir den Lagewechsel zwischen der G- und H-Saite beachten. Übrigens werden hier die Töne in der englischen Form angegeben. (Bb-Form und der Ton B statt des deutschen H.) Nur der erste Bund wird bis zur letzten Note in der dritten Lage gespielt. Der Rest bis zur letzten Note in der zweiten Lage. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (A-, Bb-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e-4 d-2 c d e d c b d c b c d c b a c b a b c d b c d-1 } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Rondo ==== Statt in der G-Form das C zu suchen, suche lieber das A im 5. Bund (hier grün hervorgehoben). Oder du leitest dir das C vom Barré im 8. Bund ab. Der Startton E ist auf der A Saite im 7. Bund unter dem Ringfinger. Ansonsten stellt der Fingersatz keine Herausforderung mehr dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (G-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b \once \override NoteHead #'color = #green a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F)-Form • Rondo ==== Der kleine Finger des C-Barré im 8. Bund in der E- bzw. F-Form gibt gleichzeitig das C des zweiten Fingersatz an. Du siehst, dass ab jetzt alles leichter geworden ist, weil sich ansonsten nichts mehr am Fingersatz ändert. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- F-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Rondo ==== Für den Grundton C müssen wir uns die D-Form gar nicht so genau ins Gedächtnis rufen, wenn uns die C-Form viel vertrauter ist. Diese hohe Lage ist für E-Gitarristen oder Gitarren mit Cutaway gedacht. Auf der Konzertgitarre ist die sehr hohe Lage schlecht zu spielen. Gehe ggf. einen Kompromiss ein, und spiele diese hohe Saitenlage ein paar Bünde tiefer als Übung nur für den Fingersatz aber nicht für die Notennamen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Noten über dem hohen C (der mit zwei Hilfslinien) wird dir seltener begegnen, da in dem Fall bevorzugt die Noten nach unten oktaviert werden. (Beachte die 8 im Notensystem.) Bei den weiteren Übungen werden jedoch die Versionen mit den vielen Hilfslinien angezeigt. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { \ottava #1 e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Rondo ==== Mit der C-Form in den ersten drei Bünden im Hinterkopf ist der 12. Bund leicht zu bewältigen. Wieder eine Übung, die weniger für Konzertgitarren geeignet ist. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === Die Abfolge der Töne der folgenden Übung unterscheidet sich kaum von der vorhergehenden. Doch mit dem anderen Rhythmus haben wir das Hauptmotiv von der Komposition {{Youtube-Suche|Smetana+Die+Moldau|"Die Moldau" von Bedrich Smetana}} (ohne Auftakt und rhythmisch vereinfacht). Auch wenn es hier (wie in der 7. Übung) nur die Molltonleiter rauf und runter geht, merkst du hoffentlich, wieviel der Takt und Rhythmus an der Wirkung ausmacht. Wenn du später mal meinst, deine Improvisationen hören sich langweilig an, dann solltest du dich mehr mit Rhythmus beschäftigen. Dazu kannst du dich auch ein wenig mit Schlagmustern beschäftigen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Warum die Form hier Gm-Form genannt wird, das wird dir in den nachfolgenden Lektionen klarer werden. Auf Fingersatzangaben können wir hier verzichten, wenn du vorher "Alle meine Entchen in Am" gespielt hast. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Bb- /Gm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier bietet sich besonders an, den Am-Barré zur Orientierung zu verwenden. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier gibt dir der kleine Finger des Am-Barrés den Grundton an. Du kannst dir die Dm-Form aber auch über die F-Form (C im 8. Bund) ableiten. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (F- /Dm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Zähle vom C (H-Saite, 13. Bund) rückwärts zum A. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D- /Bm7-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wird die erste Übung in den 12. Bund verschoben. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C- /Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==1. Fingersatz== Dir wird wohl aufgefallen sein, dass beim zweiten Fingersatz der Ton G fehlt. Den üben wir mit dem ersten Fingersatz. :[[Datei:Scala 71_2-34_5.svg]] Beachte, dass der Grundton (1) unter dem Ringfinger (also im zweiten Bund dieses Fingersatzes) ist, und dass du deine freie Improvisationsübung in Dur günstigerweise mit der (1) beginnen oder zumindest enden sollte. Diesen Fingersatz suchen wir in der C-Dur-Tonleiter auf dem Griffbrett. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] === Halbtaktige Sequenzen === Diesmal hast du halbtaktige Sequenzen, die einmal wiederholt werden. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • 1. Fingersatz ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== A- (Bb-)Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 "E" darkgrey ) (place-fret 4 3 "F" yellow3 ) (place-fret 4 5 "G" darkgrey ) (place-fret 5 2 "B" yellow3 ) (place-fret 5 3 "C" black ) (place-fret 5 5 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Leite dir den Grundton vom C-Dur-Akkord, oder vom C-Barré im 3. Bund ab. Lerne nicht nur die Intervlle, sondern auch die Notennamen. (Zumindest bei den einfachen Tonarten F-, G- und C-Dur). Andere Tonarten kommen später dran. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- / Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 "E" darkgrey ) (place-fret 2 6 "F" yellow3 ) (place-fret 2 8 "G" darkgrey ) (place-fret 3 4 "B" yellow3 ) (place-fret 3 5 "C" black ) (place-fret 3 7 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Du kannst die beiden hintereinander folgenden Noten im 5. Bund mit einem Mini-Barré ausführen, und die Lagewechsel mittels Slide (=&nbsp;Glissando) durchführen, oder wie in der Wiederholung ohne Slide durchführen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8-1 g' f e d f e d c-1 e-1 d c-1(\glissando b-1) d c b-1(\glissando c1-1) c8-2 g' f e d f e d c-1 e-2 d-4 c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F-)Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 "E" darkgrey ) (place-fret 5 8 "F" yellow3 ) (place-fret 5 10 "G" darkgrey ) (place-fret 6 7 "B" yellow3 ) (place-fret 6 8 "C" black ) (place-fret 6 10 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Fingersatztechnisch wieder problemlos. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 "E" darkgrey ) (place-fret 3 10 "F" yellow3 ) (place-fret 3 12 "G" darkgrey ) (place-fret 4 9 "B" yellow3 ) (place-fret 4 10 "C" black ) (place-fret 4 12 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Wieder klingt diese Lage genau so, wie die G-Form, ist aber vom Fingersatz her einfacher. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 "E" darkgrey ) (place-fret 1 13 "F" yellow3 ) (place-fret 1 15 "G" darkgrey ) (place-fret 2 12 "B" yellow3 ) (place-fret 2 13 "C" black ) (place-fret 2 15 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Die H-Saite heißt auch im 12. Bund H, also ist im 13. Bund das C. Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Ein Vogel wollte Hochzeit machen === Hier habe ich ein relativ bekanntes Kinderlied gefunden, dass perfekt zum 1. Fingersatz passt. Die Tondauern sind für Ungeübte in Sachen Noten schwer herauszulesen. Kennst du aber das Stück, oder hörst du es dir mehrmals an, so ist es keine unüberwindbare Schwierigkeit. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • Ein Vogel ==== Folgt das G nach dem D, greifst du den besser mit dem kleinen Finger. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8 d d-3 g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A- (Bb-)Form • Ein Vogel ==== Hier kannst du auch versuchen, den kleinen Finger umzulegen, wenn du nach dem D den G greifen willst. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8-3 d d g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Ein Vogel ==== Wenn zwei Töne im selben Bund sind, kann man entweder einen Minibarré spielen, oder ein Finger muss vorübergehend seine bevorzuge Position verlassen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e-2 c-1 g' e d( g) g g16 e-2 | c8-1 8 8 g'16 e d8 d d g16 f | e8-2 c-1 d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F-)Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen (2) === :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== 1. Fingersatz - C-Form (offen) ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - A- (Bb-)Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - G-Form ==== Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - E- (F-)Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - D-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - C-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Einsingen === Diese beiden Motive kennen viele, die schon einmal in einem Chor gesungen haben. Leider entsprechen viele Lieder in ihrem Tonumfang nicht genau einem der vollständigen drei Fingersätze oder der später folgenden Skalen. Zumeist werden nur Ausschnitte aus den Patterns gebraucht. Im ersten Motiv fehlt beispielsweise die große Septime (j7) vor dem Grundton. Dafür enthält das zweite Motiv die große Septime (j7). Das zweite Motiv eicht den Chor auf die gerade geforderte Tonart. Hier werden nur Akkordtöne in einer auf oder absteigenden Tonfolge gespielt (auch Arpeggios genannt). Der A7-Akkord enthält sowohl den Leitton (j7) der zum Grundton (1) hin leitet, als auch den Strebeton (4) die zur Durterz (3) hin strebt. Mit den zwei spannungsreichen Tönen, die sich zum Grundakkord auflösen wollen, wird der Chor auf die Durtonart eingenordet. Hier brauche ich dir nicht zu erklären, wo der Grundton D ist. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A-(Bb-)Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A-(Bb-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E-(F-)Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==Erste über den zweiten Fingersatz== Wie du siehst, kommt hier jedesmal zuerst der erste Fingersatz mit dem "Karree" rechts, und dannach kommt der Fingersatz mit dem "Karree" links. Sie sind immer untereinander. Nur zwischen der G- und B-Saite verschiebt sich alles um einen Bund. <div style="float:left; padding:5px; border:black solid 1px; "> ;F-Form <score raw="1"> \version "2.14.2" \paper{ indent=0\mm line-width=120\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% 4-o zeigt 4. Saite offen \fret-diagram #"s:2;f:1; 3-3-2;3-5-3;3-6-4; 4-3-6;4-5-7;4-6-1; 5-3-3;5-4-4;5-6-5; 6-3-7;6-4-1;6-6-2;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;Bb-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:2;f:1; 2-4-2;2-6-3;2-7-4; 3-3-6;3-5-7;3-6-1; 4-3-3;4-4-4;4-6-5; 5-3-7;5-4-1;5-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;D-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:2;f:1; 1-4-2;1-6-3;1-7-4; 2-4-6;2-6-2;2-7-1; 3-3-3;3-4-4;3-6-5; 4-3-7;4-4-1;4-6-2;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} === Jamaica Farewell === Die Melodie von [[Liederbuch/ Jamaica Farwell|Jamaica Farwell]] wurde erheblich vereinfacht, damit du dir nicht zu viele Gedanken um den Rhythmus machen musst. Wenn du dich am Quintillo (dem Rhythmus vom Lagerfeuerschlag} orientierst, solltest du wenige Probleme haben. Es gibt recht viele Wiederholung. Die Strophe wurde bei der Wiederholung in die Oktave verschoben, damit das Stück exakt in den Skalenausschnitt passt. Du musst dir für die Fingersätze ggf. Strategien zurechtlegen, damit du die Finger bequem sortiert bekommst. Das Stück beginnt mit dem Ton G. Der (5) in 1. Fingersatz. ;Bb-Form Greife den C wie ein Bb-Barré im 3. Bund. Leite dir von diesem Akkord den Grundton (1) ab, und wandere beim 1. Fingersatz rauf zum Startton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-4-2;2-6-3;2-7-4; 3-3-6;3-5-7;3-6-1; 4-3-3;4-4-4;4-6-5; 5-3-7;5-4-1;5-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (A-, Bb-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ; F-Form Greife den C wie ein F-Barré im 8. Bund. Leite dir von diesem Akkord den Grundton (1) ab, und wandere beim 1. Fingersatz rauf zum Startton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 3-7-2;3-9-3;3-10-4; 4-7-6;4-9-7;4-10-1; 5-7-3;5-8-4;5-10-5; 6-7-7;6-8-1;6-10-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (E-, F-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ;D-Form Schiebe den D-Dur-Akkord in den 12. Bund. Ein D im 12. Bund verschoben ergibt ein C. Leite dir von diesem Akkord den Grundton (1) ab. Orientiere dich kurz im 2. Fingersatz und wandere zurück zum ersten Fingersatz zum Ton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 1-10-2;1-12-3;1-13-4; 2-10-6;2-12-7;2-13-1; 3-9-3;3-10-4;3-12-5; 4-9-7;4-10-1;4-12-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (D-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==3. Fingersatz== Es fällt auf, dass der 3. Fingersatz kein "Karré" hat. {| !Fingersatz !width="30px"| !Intervalle |- |[[Image:Scala Z RK-Z K-ZM K.svg]] !width="30px"| |[[Image:Scala 2 34-5 6-71 2.svg]] |} Der 3. Fingersatz ist gar kein eigenständiger Fingersatz. Der obere Teil des 3. Fingersatzes ist eigentlich schon der untere Teil des 2. Fingersatzes. Ebenso ist der untere Teil des 3. Fingersatzes gleichzeitig der Anfang des 1. Fingersatzes. Du musst dir Strategien zurechtlegen, wie du den Übergang vom Ende des 2. Fingersatzes über die 5 und die 6 hin zum 1. Fingersatz gestaltest. Es kommt beim 3. Fingersatz zu einem Lagewechsel nach links. Übe den 3. Fingersatz zuerst in den obersten Saitenlagen (E A D G x x) === Eine II-V-I-Verbindung === Wir spielen eine einfache Tonfolge über einer 2-5-1-Verbindung. Die Akkordtöne liegen zumeist auf den schweren Zählzeiten. * D, F, A, C gehören zum Dm7 * G, B, D, F gehören zum G7 * C, E, G gehören zum C-Dur-Akkord. Wir nutzen das CAGED-System, um uns grob auf dem Griffbrett zurechtzufinden. ==== Exkurs: Skalenformen ==== Die Namen der Skalen leiten sich übrigens von folgenden einfachen Tonleitern in den ersten Bünden ab: [[Image:Scala C-Am.svg|100px]] [[Image:Scala Bb-Gm.svg|100px]] [[Image:Scala G-Em.svg|100px]] [[Image:Scala F-Dm.svg|100px]] [[Image:Scala D-Hm.svg|100px]] Alle Akkorde die man aus diesen einfachen Tonarten kennt, Bassläufe und ähnliches lassen sich zum großen Teil auf die entsprechenden 5 CAGED-Skalen übertragen, fast so als habe man die Tonleiter mittels Kapodaster in eine höhere Lage verschoben. Wie du siehst, nennen wir die Skalen entgegen des reinen CAGED-System nicht E-Dur-Form (Shape) und nicht die A-Dur-Form (Shape), sondern F- und Bb-Dur-Form. <div style="float:left; padding:5px; border:black solid 1px; "> ;E-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-1;1-2-2;1-4-3; 2-0-5;2-2-6;2-4-7; 3-1-3;3-2-4;3-4-5; 4-1-7;4-2-1;4-4-2; 5-0-4;5-2-5;5-4-6; 6-0-1;6-2-2;6-4-3;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;F-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-3; 1-1-1; 1-3-2; 2-1-5; 2-3-6; 3-0-2; 3-2-3; 3-3-4; 4-0-6; 4-2-7; 4-3-1; 5-0-3; 5-1-4; 5-3-5; 6-0-7; 6-1-1; 6-3-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;G-Dur-Tonleiter <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-3-3; 1-4-1; 1-6-2; 2-4-5; 2-6-6; 3-3-2; 3-5-3; 3-6-4; 4-3-6; 4-5-7; 4-6-1; 5-3-3; 5-4-4; 5-6-5; 6-3-7; 6-4-1; 6-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Du siehst selbst, dass die G-Dur-Tonleiter von der Form her eher wie die F-Dur-Tonleiter als wie die E-Dur-Tonleiter aussieht. <div style="float:left; padding:5px; border:black solid 1px; "> ;A-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-5;1-2-6;1-4-7; 2-0-2;2-2-3;2-3-4; 3-1-7;3-2-1;3-4-2; 4-0-4;4-2-5;4-4-6; 5-0-1;5-2-2;5-4-3; 6-0-5;6-2-6;6-4-7;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;Bb-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-1-5; 1-3-6; 2-1-2; 2-3-3; 2-4-4; 3-0-6; 3-2-7; 3-3-1; 4-0-3; 4-1-4; 4-3-5; 5-0-7; 5-1-1; 5-3-2; 6-1-5; 6-3-6;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;C-Dur-Tonleiter <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-3-5; 1-5-6; 2-3-2; 2-5-3; 2-6-4; 3-2-6; 3-4-7; 3-5-1; 4-2-3; 4-3-4; 4-5-5; 5-2-7; 5-3-1; 5-5-2; 6-3-5; 6-5-6;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Du siehst selbst, dass die C-Dur-Tonleiter von der Form her eher wie die Bb-Dur-Tonleiter als wie die A-Dur-Tonleiter aussieht. ==== 3. Fingersatz II-V-I-Verbindung D-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;D-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1; 4-9-7;4-10-1;4-12-2; 5-10-5;5-12-6; 6-10-2;6-12-3;6-13-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Wir beginnen oben bei der D-Form, wo sich der Lagewechsel des 3. Fingersatz noch nicht mit dem Lagewechsel zwischen der G und H-Saite (engl. B-Saite) aufhebt. Würde ich ein Capo in den 10. Bund setzen, dann würde ich die Melodie vom Fingersatz her wie D-Dur spielen. In D-Dur spiele ich diese II-V-I-Verbindung Em7 A7 D. Nehme ich das Capo weg, dann greife ich den Dm(7) als einen Barré der Em-Form im 10. Bund. Von diesem kann ich mir das D als Grundton ableiten. Alternativ siehst du in den Noten, dass die Übung mit dem Ton D anfängt. Dass die oberste Tiefe E-Saite im 12. Bund ebenfalls ein E ergibt, setze ich als bekannt voraus. Falls nicht, beschäftige dich noch einmal mit dem [[Gitarre: Lagerfeueranhang 2c|Stimmen der Gitarre]]. Ein Ganztonschritt bzw. zwei Bünde vor dem E ist der Ton D. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (D-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g-1 a-4 b-1 c4 | b8^\markup { \bold {G7} } a-4 g4-1 f8 e d4 | e8^\markup { \bold {C} } f g4-1 a8-4 b-1 c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung G-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;G-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 3-4-7;3-5-1;3-7-2; 4-5-5;4-7-6; 5-5-2;5-7-3;5-8-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 5. Bund setzen, dann würde man die Melodie vom Fingersatz her wie G-Dur spielen. In G-Dur spielt man diese II-V-I-Verbindung Am7 D7 G. Nimmt man das Capo weg, dann greift man den Dm(7) als einen Barré der Am-Form. Von diesem kannst du dir den D als Grundton ableiten. Einfacher geht es natürlich, wenn du weißt, dass der D im 5. Bund der A-Saite der Stimmton der D-Saite ist. </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (G-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g-1 a-4 b-1 c4 | b8^\markup { \bold {G7} } a-4 g4-1 f8 e d4 | e8^\markup { \bold {C} } f g4-1 a8-4 b-1 c d | c b c2. | \break d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung C-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;C-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-0-7;2-1-1;2-3-2; 3-0-5;3-2-6; 4-0-2;4-2-3;4-3-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Die C-Dur-Form der C-Dur Tonleiter sieht schlicht und ergreifend wie die C-Durtonleiter aus. </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (C-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #4 % \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \break d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung C-Form 12. Bund ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;C-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-12-7;2-13-1;2-15-2; 3-12-5;3-14-6; 4-12-2;4-14-3;4-15-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 12. Bund setzen, dann würde man die Melodie vom Fingersatz her wie C-Dur spielen. In C-Dur spielt man diese II-V-I-Verbindung Dm7 G7 C. Der Startton ist schlicht die D-Saite im 12. Bund. </div> {{clear}} Gerade noch hatten wir einen Lagewechsel nach links. Jetzt aber hebt sich der Lagewechsel nach links vom 3. Fingersatz mit dem Lagewechsel zwischen der G- und H-Saite auf. Es hört sich beim ersten Durchlesen kompliziert an, aber du hast nur 4 Lektionen zu lernen. Den 1. bis 3. Fingersatz und den Lagewechsel zwischen der G- und H-Saite. Das Auffinden der Töne und welche Akkorde zu welcher Tonart gehört, und wie man einen Capo benutzt, sollte eigentlich nichts neues für dich sein. Rein technisch gesehen vereinfacht sich der Fingersatz. Doch es kostet ein wenig Überlegung, wie sich die beiden Lagewechsel auf den 3. Fingersatz auswirken. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (C-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Sollte es im 12 Bund unbequem zu spielen sein, weil du kein Cutaway hast (Aussparung für die hohen Bünde), übe die C-Form ein paar Bünde zurück in einer anderen Tonart. ==== 3. Fingersatz II-V-I-Verbindung F-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;F-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 1-7-7; 1-8-1;1-10-2; 2-8-5; 2-10-6; 3-7-2; 3-9-3; 3-10-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 6. Bund setzen, dann würde man die Melodie vom Fingersatz her wie F-Dur spielen. In C-Dur spielt man diese II-V-I-Verbindung Gm7 C7 F. Wenn du den C wie ein F-Barré im 8. Bund greifst, dindest du den Grundton (1) auf der hohen E-Saite. Von dem wanderst du runter zum Startton (2). </div> {{clear}} Auch hier hebt sich der Lagewechsel zwischen der G- und H-Saite mit dem Lagewechsel des 3. Fingersatz gegeneinander auf, was den Fingersatz grifftechnisch wieder vereinfacht. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (F-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> == Wie geht es weiter? == Solltest du als Quereinsteiger in diese Lektion gestolpert sein, dann schaue dir die erste Lektion zum [[Gitarre: Aufbau der CAGED-Skalenformen|Aufbau der CAGED-Skalenformen]] an. Insbesondere die Abschnitte, die hier übergangen wurden. Dannach kannst du mit der ersten CAGED-Skala in der D-Dur-Form weitermachen. <noinclude> {{Navigation zurückhochvor |zurücklink=Gitarre: CAGED-Skala G-Dur-Form |zurücktext=CAGED-Skala G-Dur-Form |hochlink=Gitarre: Die Major-Patterns |hochtext=Einführung: Major-Patterns |vorlink=Gitarre: CAGED-Skala D-Dur-Form |vortext=CAGED-Skala D-Dur-Form }} </noinclude> qjinykszpv1jji5oanin2io0xhvgvnq 1090727 1090726 2026-09-12T17:19:43Z Mjchael 2222 /* Erster Fingersatz */ 1090727 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre: Sologitarre/ Navi Improvisation in Dur und Moll}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} = Wiederholung der Fingersätze = ; mit Schwerpunkt auf den Stammtönen Diese Wiederholung ist zum einen dafür gedacht, die vorhergehenden Übungen auf jeder Saitenlage zu machen, und auch in jeder Bundlage, gleichgültig ob die Finger eng beieinander oder weit auseinander stehen. Zum andern sind diese als Vorbereitung in die Sologitarre gedacht. Beispielsweise als Auflockerungsübung zwischen den Barré-Akkorden. Besonderen Augenmerk wollen wir hier auf die Notennamen legen. Diese können hier mitgelernt werden. Solltest du meinen, das sei noch nicht für dich dran und kann warten, dann springe zur ersten CAGED-Skala. Du kannst beim Kapitel Longform nochmal hierrauf zurückkommen. * [[Gitarre: CAGED-Skala D-Dur-Form|CAGED-Skala D-Dur-Form]] Lassen wir die [[Gitarre: Aufbau der CAGED-Skalenformen|erste Lektion]] (insbesondere für die Quereinsteiger) noch einmal Revue passieren. Die folgenden Übungen enthalten oft eine Folge von ein- oder zweitaktigen Sequenzen. Eine Sequenz ist ein Motiv, dass sich auf verschiedenen Tonhöhen wiederholt. Auch ohne Notenkenntnisse kannst du den Verlauf und die Wiederholungen der Sequenzen einfacher im Notenbild verfolgen, als in der Tabulatur; insbesondere wenn du dir gleichzeitig die Übung anhörst. Es kommen auch Ausschnitte aus klassischen Stücken, Folksongs, Kinderlieder o.ä. vor. Die einfache Struktur oder der Bekanntheitsgrad der Melodien sollen dir das Üben erleichtern. Die Finger finden so leichter ihre Position, als wenn du erstmal jede einzelne Note aus der Tabulatur entschlüsseln musst. Jede Übung wird auf allen Saitenlagen geübt. Vorher blieben wir in den mittleren Lagen. Jetzt gehen wir auch in die ersten Bünde, wo man die Finger etwas mehr spreizen muss, und in die höheren Lagen, wo es ein wenig eng wird. Die Stücke wiederholen sich in dieser Lektion in der selben Tonart, doch auf verschiedenen Bünden. Du spielst immer die selbe Tonfolge, nur auf verschiedenen Tonhöhen bzw. auf verschiedenen Saitenlagen. Lediglich zwischen der G- und H-Saite musst du dir jedesmal überlegen, wie sich der Lagewechsel auf den Fingersatz auswirkt. Doch der Fingersatz in den anderen höheren Lagen bleibt immer gleich. Wie die Tonfolgen mit dem CAGED-System zusammenhängen, das muss dich nur am Rande interessieren. Es wird in den folgenden Lektionen näher und ausführlicher erleutert. :[[Datei:Scala Griffbrett.svg]] Wir hatten uns bei den vorhergehenden Übungen weitestgehend an den Intervallen (1-j7) und an der Tabulatur orientiert. Diese sind in allen Tonarten gleich. Suche zuerst das Karré! Daran orientierst du dich. :[[Image:Scala Carree.svg]] {{Tipp|Lerne bei der C-Dur-Tonleiter nicht nur die Intervalle <br> 2 - 3 4 - 5<br> 6 - j7 1 - 2<br> sondern benenne auch jede einzelne Note. <br> D - E F - G<br> A - H C - D<br> So bekommst du einen recht einfachen Überblick über das Griffbrett.}} == Töne der C-Dur Tonleiter auf dem Griffbrett == Wir wollen uns in dieser Lektion auf die Töne bzw. die Notennamen konzentrieren. Allerdings sparen wir uns vorerst alle Töne mit Vorzeichen aus. Die [[Gitarre: Aufbau der CAGED-Skalenformen|ersten Übungen zum 1. und 2. Fingersatz]] werden auf die Tonart C-Dur bzw. A-Moll übertragen und wir spiele sie in den hier gezeigten Positionen. Wir fangen mit dem zweiten Fingersatz an, wo wir entweder den Ton C oder den Ton A der C-Dur- bzw. Am-Tonleiter als Orientierung nutzen. Wir bevorzugen die englischen Notennamen, da diese in der Molltonleiter den Alphabet folgen. ;A BC • D EF :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Du hast vermutlich allerlei Akkordformen des CAGED-System gesehen. <div class="noprint"> ;Animation [[Image:Crd Grundtonschema ani.gif]] </div> <score> << \new ChordNames { \chordmode { c1 c c c c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> \once \override FretBoard.fret-diagram-details.dot-color = #'white < c'-1\4 g'-2\3 c''-4\2 e''-3\1 > < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Wenn du schon Fingerstyle oder Jazz spielst, mögen dir viele der Formen bekannt vorkommen. Doch selbst wenn du bis jetzt nur das [[Gitarre: Rockdiplom|Rockdiplom]] gemacht hast und mit den dort vorkommenden Barré-Akkorden vertraut bist, wirst du sehen, dass die einfachen Barré-Akkorde ausreichen, um sich auf dem Griffbrett zu zurechtzufinden. Die [[Gitarre: C-Dur-Tonleiter Workshop|C-Dur-Tonleiter in den ersten drei Bünden]] setze ich als bekannt voraus und es sollte dir nicht allzu schwer fallen, diese in den 12. Bund zu übertragen. :[[Datei:Scala C-Am.svg|150px]][[Datei:C-Dur_Majorpattern_III.jpg|150px]] C-Dur als Barré im 3. Bund kennst du vom Rockdiplom, und C-Dur im 8. Bund ist auch kein Hexenwerk. Dazwischen liegt nach dem CAGED-System die G-Form, die dir vermutlich noch nicht untergekommen ist (hier mit weißem Fingersatz). Statt uns die Töne von der G-Form abzuleiten, machen wir es uns einfacher und leiten uns die Töne zur Orientierung vom Am im 5. Bund ab. Du erinnerst dich noch an die Dur- und Mollparallelen? (C- \ Am-Tonleiter bzw. G- \ Em-Form). Oder du nutzt die Grundtöne des C-Barré im 8. Bund. <score> << \new ChordNames { \chordmode { c1 c c a:m c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < a,-1\6 e-3\5 a-4\4 c'-1\3 e'-1\2 a'-1\1 > < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Leite dir also die Grundtöne C und A von den dir bekannten Barré-Akkorden ab und spare dir die ungewöhnlicheren Akkordformen auf, bis sie dir später beim Fingerstyle oder Jazz begegnen. Es macht dabei garnichts aus, wenn du zum Auffinden der Grundtöne und zum Finden des Starttons ein paar Sekunden brauchst. Du wirst sehen, dass die Wiederholungen der bekannten Übungen auf den verschiedenen Bünden und in verschiedenen Oktavebereichen leicht von der Hand gehen. Lediglich beim Lagewechsel zwischen der G- und H-Saite musst du etwas überlegen. <score> << \new ChordNames { \chordmode { c1 c c a c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 c'-1 > < c-1\5 c'-3\3 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 c'-1\3 c''-4\1> < a,-1\6 a-4\4 a'-1\1 > < c-1\6 c'-3\4 c''-1\1> < c'-4\5 c''-2\2 > } >> </score> Diese wenigen"Eckpunkte" reichen aus, um dich grob auf dem Griffbrett zurechtzufinden. Suche sie noch einmal in der Skala und natürlich auch auf deinem Griffbrett. :[[Datei:C-Major-Scale on the fretboard.svg]] {{:Gitarre: CAGED-Stammtöne - Erste Finersatz}} == Zweiter Fingersatz == :[[Datei:Scala 6_71-2_34.svg]] Zuerst suchen wir uns in der C-Dur-Tonleiter überall den zweiten Fingersatz heraus. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Zur leichteren Orientierung wird die Grafik bei jeder neuen Melodie wiederholt. === Rondeau (Auszug) === Die eintaktige Sequenzen wurde aus einem Rondeau von J.S. Bach entnommen, dass beliebig wiederholt werden kann. Der Grundton C, welcher im letzten Takt rot eingefärbt wurde, wird mit dem kleinen Finger gegriffen. ==== C-Form (offen) • Rondo ==== Am Anfang des Griffbrettes brauchen wir den zweiten Fingersatz nicht vollständig. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A- (Bb)-Form • Rondo ==== In der A-(Bb-)Form müssen wir den Lagewechsel zwischen der G- und H-Saite beachten. Übrigens werden hier die Töne in der englischen Form angegeben. (Bb-Form und der Ton B statt des deutschen H.) Nur der erste Bund wird bis zur letzten Note in der dritten Lage gespielt. Der Rest bis zur letzten Note in der zweiten Lage. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (A-, Bb-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e-4 d-2 c d e d c b d c b c d c b a c b a b c d b c d-1 } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Rondo ==== Statt in der G-Form das C zu suchen, suche lieber das A im 5. Bund (hier grün hervorgehoben). Oder du leitest dir das C vom Barré im 8. Bund ab. Der Startton E ist auf der A Saite im 7. Bund unter dem Ringfinger. Ansonsten stellt der Fingersatz keine Herausforderung mehr dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (G-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b \once \override NoteHead #'color = #green a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F)-Form • Rondo ==== Der kleine Finger des C-Barré im 8. Bund in der E- bzw. F-Form gibt gleichzeitig das C des zweiten Fingersatz an. Du siehst, dass ab jetzt alles leichter geworden ist, weil sich ansonsten nichts mehr am Fingersatz ändert. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- F-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Rondo ==== Für den Grundton C müssen wir uns die D-Form gar nicht so genau ins Gedächtnis rufen, wenn uns die C-Form viel vertrauter ist. Diese hohe Lage ist für E-Gitarristen oder Gitarren mit Cutaway gedacht. Auf der Konzertgitarre ist die sehr hohe Lage schlecht zu spielen. Gehe ggf. einen Kompromiss ein, und spiele diese hohe Saitenlage ein paar Bünde tiefer als Übung nur für den Fingersatz aber nicht für die Notennamen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Noten über dem hohen C (der mit zwei Hilfslinien) wird dir seltener begegnen, da in dem Fall bevorzugt die Noten nach unten oktaviert werden. (Beachte die 8 im Notensystem.) Bei den weiteren Übungen werden jedoch die Versionen mit den vielen Hilfslinien angezeigt. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { \ottava #1 e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Rondo ==== Mit der C-Form in den ersten drei Bünden im Hinterkopf ist der 12. Bund leicht zu bewältigen. Wieder eine Übung, die weniger für Konzertgitarren geeignet ist. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === Die Abfolge der Töne der folgenden Übung unterscheidet sich kaum von der vorhergehenden. Doch mit dem anderen Rhythmus haben wir das Hauptmotiv von der Komposition {{Youtube-Suche|Smetana+Die+Moldau|"Die Moldau" von Bedrich Smetana}} (ohne Auftakt und rhythmisch vereinfacht). Auch wenn es hier (wie in der 7. Übung) nur die Molltonleiter rauf und runter geht, merkst du hoffentlich, wieviel der Takt und Rhythmus an der Wirkung ausmacht. Wenn du später mal meinst, deine Improvisationen hören sich langweilig an, dann solltest du dich mehr mit Rhythmus beschäftigen. Dazu kannst du dich auch ein wenig mit Schlagmustern beschäftigen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Warum die Form hier Gm-Form genannt wird, das wird dir in den nachfolgenden Lektionen klarer werden. Auf Fingersatzangaben können wir hier verzichten, wenn du vorher "Alle meine Entchen in Am" gespielt hast. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Bb- /Gm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier bietet sich besonders an, den Am-Barré zur Orientierung zu verwenden. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier gibt dir der kleine Finger des Am-Barrés den Grundton an. Du kannst dir die Dm-Form aber auch über die F-Form (C im 8. Bund) ableiten. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (F- /Dm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Zähle vom C (H-Saite, 13. Bund) rückwärts zum A. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D- /Bm7-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wird die erste Übung in den 12. Bund verschoben. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C- /Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==1. Fingersatz== Dir wird wohl aufgefallen sein, dass beim zweiten Fingersatz der Ton G fehlt. Den üben wir mit dem ersten Fingersatz. :[[Datei:Scala 71_2-34_5.svg]] Beachte, dass der Grundton (1) unter dem Ringfinger (also im zweiten Bund dieses Fingersatzes) ist, und dass du deine freie Improvisationsübung in Dur günstigerweise mit der (1) beginnen oder zumindest enden sollte. Diesen Fingersatz suchen wir in der C-Dur-Tonleiter auf dem Griffbrett. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] === Halbtaktige Sequenzen === Diesmal hast du halbtaktige Sequenzen, die einmal wiederholt werden. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • 1. Fingersatz ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== A- (Bb-)Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 "E" darkgrey ) (place-fret 4 3 "F" yellow3 ) (place-fret 4 5 "G" darkgrey ) (place-fret 5 2 "B" yellow3 ) (place-fret 5 3 "C" black ) (place-fret 5 5 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Leite dir den Grundton vom C-Dur-Akkord, oder vom C-Barré im 3. Bund ab. Lerne nicht nur die Intervlle, sondern auch die Notennamen. (Zumindest bei den einfachen Tonarten F-, G- und C-Dur). Andere Tonarten kommen später dran. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- / Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 "E" darkgrey ) (place-fret 2 6 "F" yellow3 ) (place-fret 2 8 "G" darkgrey ) (place-fret 3 4 "B" yellow3 ) (place-fret 3 5 "C" black ) (place-fret 3 7 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Du kannst die beiden hintereinander folgenden Noten im 5. Bund mit einem Mini-Barré ausführen, und die Lagewechsel mittels Slide (=&nbsp;Glissando) durchführen, oder wie in der Wiederholung ohne Slide durchführen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8-1 g' f e d f e d c-1 e-1 d c-1(\glissando b-1) d c b-1(\glissando c1-1) c8-2 g' f e d f e d c-1 e-2 d-4 c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F-)Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 "E" darkgrey ) (place-fret 5 8 "F" yellow3 ) (place-fret 5 10 "G" darkgrey ) (place-fret 6 7 "B" yellow3 ) (place-fret 6 8 "C" black ) (place-fret 6 10 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Fingersatztechnisch wieder problemlos. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 "E" darkgrey ) (place-fret 3 10 "F" yellow3 ) (place-fret 3 12 "G" darkgrey ) (place-fret 4 9 "B" yellow3 ) (place-fret 4 10 "C" black ) (place-fret 4 12 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Wieder klingt diese Lage genau so, wie die G-Form, ist aber vom Fingersatz her einfacher. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • 1. Fingersatz ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 "E" darkgrey ) (place-fret 1 13 "F" yellow3 ) (place-fret 1 15 "G" darkgrey ) (place-fret 2 12 "B" yellow3 ) (place-fret 2 13 "C" black ) (place-fret 2 15 "D" darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Die H-Saite heißt auch im 12. Bund H, also ist im 13. Bund das C. Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Ein Vogel wollte Hochzeit machen === Hier habe ich ein relativ bekanntes Kinderlied gefunden, dass perfekt zum 1. Fingersatz passt. Die Tondauern sind für Ungeübte in Sachen Noten schwer herauszulesen. Kennst du aber das Stück, oder hörst du es dir mehrmals an, so ist es keine unüberwindbare Schwierigkeit. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • Ein Vogel ==== Folgt das G nach dem D, greifst du den besser mit dem kleinen Finger. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8 d d-3 g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A- (Bb-)Form • Ein Vogel ==== Hier kannst du auch versuchen, den kleinen Finger umzulegen, wenn du nach dem D den G greifen willst. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8-3 d d g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Ein Vogel ==== Wenn zwei Töne im selben Bund sind, kann man entweder einen Minibarré spielen, oder ein Finger muss vorübergehend seine bevorzuge Position verlassen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e-2 c-1 g' e d( g) g g16 e-2 | c8-1 8 8 g'16 e d8 d d g16 f | e8-2 c-1 d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E- (F-)Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Ein Vogel ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen (2) === :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== 1. Fingersatz - C-Form (offen) ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - A- (Bb-)Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - G-Form ==== Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - E- (F-)Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - D-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz - C-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Einsingen === Diese beiden Motive kennen viele, die schon einmal in einem Chor gesungen haben. Leider entsprechen viele Lieder in ihrem Tonumfang nicht genau einem der vollständigen drei Fingersätze oder der später folgenden Skalen. Zumeist werden nur Ausschnitte aus den Patterns gebraucht. Im ersten Motiv fehlt beispielsweise die große Septime (j7) vor dem Grundton. Dafür enthält das zweite Motiv die große Septime (j7). Das zweite Motiv eicht den Chor auf die gerade geforderte Tonart. Hier werden nur Akkordtöne in einer auf oder absteigenden Tonfolge gespielt (auch Arpeggios genannt). Der A7-Akkord enthält sowohl den Leitton (j7) der zum Grundton (1) hin leitet, als auch den Strebeton (4) die zur Durterz (3) hin strebt. Mit den zwei spannungsreichen Tönen, die sich zum Grundakkord auflösen wollen, wird der Chor auf die Durtonart eingenordet. Hier brauche ich dir nicht zu erklären, wo der Grundton D ist. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] ==== C-Form (open) • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== A-(Bb-)Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A-(Bb-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== G-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== E-(F-)Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== D-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== C-Form • Einsingen ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==Erste über den zweiten Fingersatz== Wie du siehst, kommt hier jedesmal zuerst der erste Fingersatz mit dem "Karree" rechts, und dannach kommt der Fingersatz mit dem "Karree" links. Sie sind immer untereinander. Nur zwischen der G- und B-Saite verschiebt sich alles um einen Bund. <div style="float:left; padding:5px; border:black solid 1px; "> ;F-Form <score raw="1"> \version "2.14.2" \paper{ indent=0\mm line-width=120\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% 4-o zeigt 4. Saite offen \fret-diagram #"s:2;f:1; 3-3-2;3-5-3;3-6-4; 4-3-6;4-5-7;4-6-1; 5-3-3;5-4-4;5-6-5; 6-3-7;6-4-1;6-6-2;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;Bb-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:2;f:1; 2-4-2;2-6-3;2-7-4; 3-3-6;3-5-7;3-6-1; 4-3-3;4-4-4;4-6-5; 5-3-7;5-4-1;5-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;D-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:2;f:1; 1-4-2;1-6-3;1-7-4; 2-4-6;2-6-2;2-7-1; 3-3-3;3-4-4;3-6-5; 4-3-7;4-4-1;4-6-2;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} === Jamaica Farewell === Die Melodie von [[Liederbuch/ Jamaica Farwell|Jamaica Farwell]] wurde erheblich vereinfacht, damit du dir nicht zu viele Gedanken um den Rhythmus machen musst. Wenn du dich am Quintillo (dem Rhythmus vom Lagerfeuerschlag} orientierst, solltest du wenige Probleme haben. Es gibt recht viele Wiederholung. Die Strophe wurde bei der Wiederholung in die Oktave verschoben, damit das Stück exakt in den Skalenausschnitt passt. Du musst dir für die Fingersätze ggf. Strategien zurechtlegen, damit du die Finger bequem sortiert bekommst. Das Stück beginnt mit dem Ton G. Der (5) in 1. Fingersatz. ;Bb-Form Greife den C wie ein Bb-Barré im 3. Bund. Leite dir von diesem Akkord den Grundton (1) ab, und wandere beim 1. Fingersatz rauf zum Startton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-4-2;2-6-3;2-7-4; 3-3-6;3-5-7;3-6-1; 4-3-3;4-4-4;4-6-5; 5-3-7;5-4-1;5-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (A-, Bb-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ; F-Form Greife den C wie ein F-Barré im 8. Bund. Leite dir von diesem Akkord den Grundton (1) ab, und wandere beim 1. Fingersatz rauf zum Startton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 3-7-2;3-9-3;3-10-4; 4-7-6;4-9-7;4-10-1; 5-7-3;5-8-4;5-10-5; 6-7-7;6-8-1;6-10-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (E-, F-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ;D-Form Schiebe den D-Dur-Akkord in den 12. Bund. Ein D im 12. Bund verschoben ergibt ein C. Leite dir von diesem Akkord den Grundton (1) ab. Orientiere dich kurz im 2. Fingersatz und wandere zurück zum ersten Fingersatz zum Ton G (5). <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 1-10-2;1-12-3;1-13-4; 2-10-6;2-12-7;2-13-1; 3-9-3;3-10-4;3-12-5; 4-9-7;4-10-1;4-12-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> {{clear}} <score sound="1" raw="1"> \version "2.20.0" \header { title="Jamaica Farewell (vereinfacht)" subtitle="1. und 2. Fingersatz (D-Form) in C-Dur" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \key c \major \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } \repeat volta 2 { c8 4 e4. 4 | d8 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g'8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8-1~ 2 } } \repeat volta 2 { c'8-3 4 e4.-4 4 | d8-1 e4 f8~2 | } \alternative { { b,8 4 d4. 4 | c8 d4 e8~2 | } { e8 4. d4 e8 d | d c4 8~ 2 } } \repeat volta 2 { g8 4 4 8 4 | a8 b4 c c8 b a | g8 g4 f4 e8 d4 | } \alternative { { e8 f4 g8~ 2 } { e8 d4 c8~ 2 } } } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==3. Fingersatz== Es fällt auf, dass der 3. Fingersatz kein "Karré" hat. {| !Fingersatz !width="30px"| !Intervalle |- |[[Image:Scala Z RK-Z K-ZM K.svg]] !width="30px"| |[[Image:Scala 2 34-5 6-71 2.svg]] |} Der 3. Fingersatz ist gar kein eigenständiger Fingersatz. Der obere Teil des 3. Fingersatzes ist eigentlich schon der untere Teil des 2. Fingersatzes. Ebenso ist der untere Teil des 3. Fingersatzes gleichzeitig der Anfang des 1. Fingersatzes. Du musst dir Strategien zurechtlegen, wie du den Übergang vom Ende des 2. Fingersatzes über die 5 und die 6 hin zum 1. Fingersatz gestaltest. Es kommt beim 3. Fingersatz zu einem Lagewechsel nach links. Übe den 3. Fingersatz zuerst in den obersten Saitenlagen (E A D G x x) === Eine II-V-I-Verbindung === Wir spielen eine einfache Tonfolge über einer 2-5-1-Verbindung. Die Akkordtöne liegen zumeist auf den schweren Zählzeiten. * D, F, A, C gehören zum Dm7 * G, B, D, F gehören zum G7 * C, E, G gehören zum C-Dur-Akkord. Wir nutzen das CAGED-System, um uns grob auf dem Griffbrett zurechtzufinden. ==== Exkurs: Skalenformen ==== Die Namen der Skalen leiten sich übrigens von folgenden einfachen Tonleitern in den ersten Bünden ab: [[Image:Scala C-Am.svg|100px]] [[Image:Scala Bb-Gm.svg|100px]] [[Image:Scala G-Em.svg|100px]] [[Image:Scala F-Dm.svg|100px]] [[Image:Scala D-Hm.svg|100px]] Alle Akkorde die man aus diesen einfachen Tonarten kennt, Bassläufe und ähnliches lassen sich zum großen Teil auf die entsprechenden 5 CAGED-Skalen übertragen, fast so als habe man die Tonleiter mittels Kapodaster in eine höhere Lage verschoben. Wie du siehst, nennen wir die Skalen entgegen des reinen CAGED-System nicht E-Dur-Form (Shape) und nicht die A-Dur-Form (Shape), sondern F- und Bb-Dur-Form. <div style="float:left; padding:5px; border:black solid 1px; "> ;E-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-1;1-2-2;1-4-3; 2-0-5;2-2-6;2-4-7; 3-1-3;3-2-4;3-4-5; 4-1-7;4-2-1;4-4-2; 5-0-4;5-2-5;5-4-6; 6-0-1;6-2-2;6-4-3;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;F-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-3; 1-1-1; 1-3-2; 2-1-5; 2-3-6; 3-0-2; 3-2-3; 3-3-4; 4-0-6; 4-2-7; 4-3-1; 5-0-3; 5-1-4; 5-3-5; 6-0-7; 6-1-1; 6-3-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;G-Dur-Tonleiter <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-3-3; 1-4-1; 1-6-2; 2-4-5; 2-6-6; 3-3-2; 3-5-3; 3-6-4; 4-3-6; 4-5-7; 4-6-1; 5-3-3; 5-4-4; 5-6-5; 6-3-7; 6-4-1; 6-6-2; " } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Du siehst selbst, dass die G-Dur-Tonleiter von der Form her eher wie die F-Dur-Tonleiter als wie die E-Dur-Tonleiter aussieht. <div style="float:left; padding:5px; border:black solid 1px; "> ;A-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-0-5;1-2-6;1-4-7; 2-0-2;2-2-3;2-3-4; 3-1-7;3-2-1;3-4-2; 4-0-4;4-2-5;4-4-6; 5-0-1;5-2-2;5-4-3; 6-0-5;6-2-6;6-4-7;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;Bb-Dur-Tonleiter <br> <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-1-5; 1-3-6; 2-1-2; 2-3-3; 2-4-4; 3-0-6; 3-2-7; 3-3-1; 4-0-3; 4-1-4; 4-3-5; 5-0-7; 5-1-1; 5-3-2; 6-1-5; 6-3-6;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; border:black solid 1px; "> ;C-Dur-Tonleiter <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { %% s:3 = 3x so groß %% f:1 zeigt Finger als Kreise %% f:2 zeigt Finger neben den Saiten %% 6-3-2 Saite-Bund-Finger %% oder %% 6-3-2 Saite-Bund-Intervall %% 4-o zeigt 4. Saite offen \fret-diagram #"s:3;f:1; 1-3-5; 1-5-6; 2-3-2; 2-5-3; 2-6-4; 3-2-6; 3-4-7; 3-5-1; 4-2-3; 4-3-4; 4-5-5; 5-2-7; 5-3-1; 5-5-2; 6-3-5; 6-5-6;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Du siehst selbst, dass die C-Dur-Tonleiter von der Form her eher wie die Bb-Dur-Tonleiter als wie die A-Dur-Tonleiter aussieht. ==== 3. Fingersatz II-V-I-Verbindung D-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;D-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:3;f:1; 4-9-7;4-10-1;4-12-2; 5-10-5;5-12-6; 6-10-2;6-12-3;6-13-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> {{clear}} Wir beginnen oben bei der D-Form, wo sich der Lagewechsel des 3. Fingersatz noch nicht mit dem Lagewechsel zwischen der G und H-Saite (engl. B-Saite) aufhebt. Würde ich ein Capo in den 10. Bund setzen, dann würde ich die Melodie vom Fingersatz her wie D-Dur spielen. In D-Dur spiele ich diese II-V-I-Verbindung Em7 A7 D. Nehme ich das Capo weg, dann greife ich den Dm(7) als einen Barré der Em-Form im 10. Bund. Von diesem kann ich mir das D als Grundton ableiten. Alternativ siehst du in den Noten, dass die Übung mit dem Ton D anfängt. Dass die oberste Tiefe E-Saite im 12. Bund ebenfalls ein E ergibt, setze ich als bekannt voraus. Falls nicht, beschäftige dich noch einmal mit dem [[Gitarre: Lagerfeueranhang 2c|Stimmen der Gitarre]]. Ein Ganztonschritt bzw. zwei Bünde vor dem E ist der Ton D. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (D-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g-1 a-4 b-1 c4 | b8^\markup { \bold {G7} } a-4 g4-1 f8 e d4 | e8^\markup { \bold {C} } f g4-1 a8-4 b-1 c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung G-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;G-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 3-4-7;3-5-1;3-7-2; 4-5-5;4-7-6; 5-5-2;5-7-3;5-8-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 5. Bund setzen, dann würde man die Melodie vom Fingersatz her wie G-Dur spielen. In G-Dur spielt man diese II-V-I-Verbindung Am7 D7 G. Nimmt man das Capo weg, dann greift man den Dm(7) als einen Barré der Am-Form. Von diesem kannst du dir den D als Grundton ableiten. Einfacher geht es natürlich, wenn du weißt, dass der D im 5. Bund der A-Saite der Stimmton der D-Saite ist. </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (G-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g-1 a-4 b-1 c4 | b8^\markup { \bold {G7} } a-4 g4-1 f8 e d4 | e8^\markup { \bold {C} } f g4-1 a8-4 b-1 c d | c b c2. | \break d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung C-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;C-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-0-7;2-1-1;2-3-2; 3-0-5;3-2-6; 4-0-2;4-2-3;4-3-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Die C-Dur-Form der C-Dur Tonleiter sieht schlicht und ergreifend wie die C-Durtonleiter aus. </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (C-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #4 % \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \break d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 3. Fingersatz II-V-I-Verbindung C-Form 12. Bund ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;C-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 2-12-7;2-13-1;2-15-2; 3-12-5;3-14-6; 4-12-2;4-14-3;4-15-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 12. Bund setzen, dann würde man die Melodie vom Fingersatz her wie C-Dur spielen. In C-Dur spielt man diese II-V-I-Verbindung Dm7 G7 C. Der Startton ist schlicht die D-Saite im 12. Bund. </div> {{clear}} Gerade noch hatten wir einen Lagewechsel nach links. Jetzt aber hebt sich der Lagewechsel nach links vom 3. Fingersatz mit dem Lagewechsel zwischen der G- und H-Saite auf. Es hört sich beim ersten Durchlesen kompliziert an, aber du hast nur 4 Lektionen zu lernen. Den 1. bis 3. Fingersatz und den Lagewechsel zwischen der G- und H-Saite. Das Auffinden der Töne und welche Akkorde zu welcher Tonart gehört, und wie man einen Capo benutzt, sollte eigentlich nichts neues für dich sein. Rein technisch gesehen vereinfacht sich der Fingersatz. Doch es kostet ein wenig Überlegung, wie sich die beiden Lagewechsel auf den 3. Fingersatz auswirken. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (C-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Sollte es im 12 Bund unbequem zu spielen sein, weil du kein Cutaway hast (Aussparung für die hohen Bünde), übe die C-Form ein paar Bünde zurück in einer anderen Tonart. ==== 3. Fingersatz II-V-I-Verbindung F-Form ==== <div style="float:left; padding:5px; margin:5px; border:black solid 1px; "> ;F-Form <score raw="1"> \version "2.14.2" \markup \override #'(fret-diagram-details . ( (number-type . roman-upper) (finger-code . in-dot) (orientation . landscape))) { \fret-diagram #"s:1.5;f:1; 1-7-7; 1-8-1;1-10-2; 2-8-5; 2-10-6; 3-7-2; 3-9-3; 3-10-4;" } \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <div style="float:left; padding:5px; margin:5px; <!-- border:black solid 1px; --> "> Würde man ein Capo in den 6. Bund setzen, dann würde man die Melodie vom Fingersatz her wie F-Dur spielen. In C-Dur spielt man diese II-V-I-Verbindung Gm7 C7 F. Wenn du den C wie ein F-Barré im 8. Bund greifst, dindest du den Grundton (1) auf der hohen E-Saite. Von dem wanderst du runter zum Startton (2). </div> {{clear}} Auch hier hebt sich der Lagewechsel zwischen der G- und H-Saite mit dem Lagewechsel des 3. Fingersatz gegeneinander auf, was den Fingersatz grifftechnisch wieder vereinfacht. <score sound="1" raw="1"> \version "2.20.0" \header { title="3. Fingersatz (F-Form) in C-Dur" subtitle="Eine II-V-I-Verbindung" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major d8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | d,8^\markup { \bold {Dm7} } e f g a b c4 | b8^\markup { \bold {G7} } a g4 f8 e d4 | e8^\markup { \bold {C} } f g4 a8 b c d | c b c2. | \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> == Wie geht es weiter? == Solltest du als Quereinsteiger in diese Lektion gestolpert sein, dann schaue dir die erste Lektion zum [[Gitarre: Aufbau der CAGED-Skalenformen|Aufbau der CAGED-Skalenformen]] an. Insbesondere die Abschnitte, die hier übergangen wurden. Dannach kannst du mit der ersten CAGED-Skala in der D-Dur-Form weitermachen. <noinclude> {{Navigation zurückhochvor |zurücklink=Gitarre: CAGED-Skala G-Dur-Form |zurücktext=CAGED-Skala G-Dur-Form |hochlink=Gitarre: Die Major-Patterns |hochtext=Einführung: Major-Patterns |vorlink=Gitarre: CAGED-Skala D-Dur-Form |vortext=CAGED-Skala D-Dur-Form }} </noinclude> 7n4srdwj1ciws68gcnizf68nam5py6g 1090744 1090727 2026-09-13T09:58:38Z Mjchael 2222 Änderungen von [[Benutzer:Mjchael|Mjchael]] ([[Special:Contributions/Mjchael|Beiträge]]) rückgängig gemacht und letzte Version von [[Benutzer:2001:9E8:4629:F500:6503:9846:F013:49A0|2001:9E8:4629:F500:6503:9846:F013:49A0]] wiederhergestellt 1062937 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre: Sologitarre/ Navi Improvisation in Dur und Moll}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} = Wiederholung der Fingersätze = ; mit Schwerpunkt auf den Stammtönen Diese Wiederholung ist zum einen dafür gedacht, die vorhergehenden Übungen auf jeder Saitenlage zu machen, und auch in jeder Bundlage, gleichgültig ob die Finger eng beieinander oder weit auseinander stehen. Zum andern sind diese als Vorbereitung in die Sologitarre gedacht. Beispielsweise als Auflockerungsübung zwischen den Barré-Akkorden. Besonderen Augenmerk wollen wir hier auf die Notennamen legen. Diese können hier mitgelernt werden. Solltest du meinen, das sei noch nicht für dich dran und kann warten, dann springe zur ersten CAGED-Skala. Du kannst beim Kapitel Longform nochmal hierrauf zurückkommen. * [[Gitarre: CAGED-Skala D-Dur-Form|CAGED-Skala D-Dur-Form]] Lassen wir die [[Gitarre: Aufbau der CAGED-Skalenformen|erste Lektion]] (insbesondere für die Quereinsteiger) noch einmal Revue passieren. Die folgenden Übungen enthalten oft eine Folge von ein- oder zweitaktigen Sequenzen. Eine Sequenz ist ein Motiv, dass sich auf verschiedenen Tonhöhen wiederholt. Auch ohne Notenkenntnisse kannst du den Verlauf und die Wiederholungen der Sequenzen einfacher im Notenbild verfolgen, als in der Tabulatur; insbesondere wenn du dir gleichzeitig die Übung anhörst. Es kommen auch Ausschnitte aus klassischen Stücken, Folksongs, Kinderlieder o.ä. vor. Die einfache Struktur oder der Bekanntheitsgrad der Melodien sollen dir das Üben erleichtern. Die Finger finden so leichter ihre Position, als wenn du erstmal jede einzelne Note aus der Tabulatur entschlüsseln musst. Jede Übung wird auf allen Saitenlagen geübt. Vorher blieben wir in den mittleren Lagen. Jetzt gehen wir auch in die ersten Bünde, wo man die Finger etwas mehr spreizen muss, und in die höheren Lagen, wo es ein wenig eng wird. Die Stücke wiederholen sich in dieser Lektion in der selben Tonart, doch auf verschiedenen Bünden. Du spielst immer die selbe Tonfolge, nur auf verschiedenen Tonhöhen bzw. auf verschiedenen Saitenlagen. Lediglich zwischen der G- und H-Saite musst du dir jedesmal überlegen, wie sich der Lagewechsel auf den Fingersatz auswirkt. Doch der Fingersatz in den anderen höheren Lagen bleibt immer gleich. Wie die Tonfolgen mit dem CAGED-System zusammenhängen, das muss dich nur am Rande interessieren. Es wird in den folgenden Lektionen näher und ausführlicher erleutert. Beachte auch hier, dass du den ersten Fingersatz immer nur über 2 Saiten übst. Nicht mehr! Erst beim zweiten Durchgang kommt das nächste Saitenpaar dran, und dann das übernächste. Also sei dir jedesmal bewusst, dass der erste Fingersatz jeweils nur über zwei Saiten geht. :[[Datei:Scala Griffbrett.svg]] Wir hatten uns bei den vorhergehenden Übungen weitestgehend an den Intervallen (1-j7) und an der Tabulatur orientiert. Diese sind in allen Tonarten gleich. Suche zuerst das Karré! Daran orientierst du dich. :[[Image:Scala Carree.svg]] {{Tipp|Lerne bei der C-Dur-Tonleiter nicht nur die Intervalle <br> 2 - 3 4 - 5<br> 6 - j7 1 - 2<br> sondern benenne auch jede einzelne Note. <br> D - E F - G<br> A - H C - D<br> So bekommst du einen recht einfachen Überblick über das Griffbrett.}} == Töne der C-Dur Tonleiter auf dem Griffbrett == Wir wollen uns in dieser Lektion auf die Töne bzw. die Notennamen konzentrieren. Allerdings sparen wir uns vorerst alle Töne mit Vorzeichen aus. Die [[Gitarre: Aufbau der CAGED-Skalenformen|ersten Übungen zum 1. und 2. Fingersatz]] werden auf die Tonart C-Dur bzw. A-Moll übertragen und wir spiele sie in den hier gezeigten Positionen. Wir fangen mit dem zweiten Fingersatz an, wo wir entweder den Ton C oder den Ton A der C-Dur- bzw. Am-Tonleiter als Orientierung nutzen :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Du hast vermutlich allerlei Akkordformen des CAGED-System gesehen. <div class="noprint"> ;Animation [[Image:Crd Grundtonschema ani.gif]] </div> Wenn du schon Fingerstyle oder Jazz spielst, mögen dir viele der Formen bekannt vorkommen. Doch selbst wenn du bis jetzt nur das [[Gitarre: Rockdiplom|Rockdiplom]] gemacht hast und mit den dort vorkommenden Barré-Akkorden vertraut bist, wirst du sehen, dass die einfachen Barré-Akkorde ausreichen, um sich auf dem Griffbrett zu zurechtzufinden. Die [[Gitarre: C-Dur-Tonleiter Workshop|C-Dur-Tonleiter in den ersten drei Bünden]] setze ich als bekannt voraus und es sollte dir nicht allzu schwer fallen, diese in den 12. Bund zu übertragen. :[[Datei:Scala C-Am.svg|150px]][[Datei:C-Dur_Majorpattern_III.jpg|150px]] C-Dur als Barré im 3. Bund kennst du vom Rockdiplom, und C-Dur im 8. Bund ist auch kein Hexenwerk. Dazwischen liegt nach dem CAGED-System die G-Form, die dir vermutlich noch nicht untergekommen ist (hier mit weißem Fingersatz). Statt uns die Töne von der G-Form abzuleiten, machen wir es uns einfacher und leiten uns die Töne zur Orientierung vom Am im 5. Bund ab. Du erinnerst dich noch an die Dur- und Mollparallelen? (C- \ Am-Tonleiter bzw. G- \ Em-Form). Oder du nutzt die Grundtöne des C-Barré im 8. Bund. <score> << \new ChordNames { \chordmode { c1 c c a:m c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < a,-1\6 e-3\5 a-4\4 c'-1\3 e'-1\2 a'-1\1 > < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Leite dir also die Grundtöne C und A von den dir bekannten Barré-Akkorden ab und spare dir die ungewöhnlicheren Akkordformen auf, bis sie dir später beim Fingerstyle oder Jazz begegnen. Es macht dabei garnichts aus, wenn du zum Auffinden der Grundtöne und zum Finden des Starttons ein paar Sekunden brauchst. Du wirst sehen, dass die Wiederholungen der bekannten Übungen auf den verschiedenen Bünden und in verschiedenen Oktavebereichen leicht von der Hand gehen. Lediglich beim Lagewechsel zwischen der G- und H-Saite musst du etwas überlegen. <score> << \new ChordNames { \chordmode { c1 c c a c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 c'-1 > < c-1\5 c'-3\3 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 c'-1\3 c''-4\1> < a,-1\6 a-4\4 a'-1\1 > < c-1\6 c'-3\4 c''-1\1> < c'-4\5 c''-2\2 > } >> </score> Diese wenigen"Eckpunkte" reichen aus, um dich grob auf dem Griffbrett zurechtzufinden. Suche sie noch einmal in der Skala und natürlich auch auf deinem Griffbrett. :[[Datei:C-Major-Scale on the fretboard.svg]] == Zweiter Fingersatz == :[[Datei:Scala 6_71-2_34.svg]] Zuerst suchen wir uns in der C-Dur-Tonleiter überall den zweiten Fingersatz heraus. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Zur leichteren Orientierung wird die Grafik bei jeder neuen Melodie wiederholt. === Rondeau (Auszug) === Die eintaktige Sequenzen wurde aus einem Rondeau von J.S. Bach entnommen, dass beliebig wiederholt werden kann. Der Grundton C, welcher im letzten Takt rot eingefärbt wurde, wird mit dem kleinen Finger gegriffen. Du kannst tatsächlich die Noten nutzen (sofern du es schon kannst) oder aber du orientierst dich an den Notennamen. Am Anfang des Griffbrettes brauchen wir den zweiten Fingersatz nicht vollständig. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> In der A-(Bb-)Form müssen wir den Lagewechsel zwischen der G- und H-Saite beachten. Übrigens werden hier die Töne in der englischen Form angegeben. (Bb-Form und der Ton B statt des deutschen H.) Nur der erste Bund wird bis zur letzten Note in der dritten Lage gespielt. Der Rest bis zur letzten Note in der zweiten Lage. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (A-, Bb-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e-4 d-2 c d e d c b d c b c d c b a c b a b c d b c d-1 } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt in der G-Form das C zu suchen, suche lieber das A im 5. Bund (hier grün hervorgehoben). Oder du leitest dir das C vom Barré im 8. Bund ab. Der Startton E ist auf der A Saite im 7. Bund unter dem Ringfinger. Ansonsten stellt der Fingersatz keine Herausforderung mehr dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (G-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b \once \override NoteHead #'color = #green a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der kleine Finger des C-Barré im 8. Bund in der E- bzw. F-Form gibt gleichzeitig das C des zweiten Fingersatz an. Du siehst, dass ab jetzt alles leichter geworden ist, weil sich ansonsten nichts mehr am Fingersatz ändert. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- F-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Für den Grundton C müssen wir uns die D-Form gar nicht so genau ins Gedächtnis rufen, wenn uns die C-Form viel vertrauter ist. Diese hohe Lage ist für E-Gitarristen oder Gitarren mit Cutaway gedacht. Auf der Konzertgitarre ist die sehr hohe Lage schlecht zu spielen. Gehe ggf. einen Kompromiss ein, und spiele diese hohe Saitenlage ein paar Bünde tiefer als Übung nur für den Fingersatz aber nicht für die Notennamen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Noten über dem hohen C (der mit zwei Hilfslinien) wird dir seltener begegnen, da in dem Fall bevorzugt die Noten nach unten oktaviert werden. (Beachte die 8 im Notensystem.) Bei den weiteren Übungen werden jedoch die Versionen mit den vielen Hilfslinien angezeigt. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { \ottava #1 e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Mit der C-Form in den ersten drei Bünden im Hinterkopf ist der 12. Bund leicht zu bewältigen. Wieder eine Übung, die weniger für Konzertgitarren geeignet ist. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === Die Abfolge der Töne der folgenden Übung unterscheidet sich kaum von der vorhergehenden. Doch mit dem anderen Rhythmus haben wir das Hauptmotiv von der Komposition {{Youtube-Suche|Smetana+Die+Moldau|"Die Moldau" von Bedrich Smetana}} (ohne Auftakt und rhythmisch vereinfacht). Auch wenn es hier (wie in der 7. Übung) nur die Molltonleiter rauf und runter geht, merkst du hoffentlich, wieviel der Takt und Rhythmus an der Wirkung ausmacht. Wenn du später mal meinst, deine Improvisationen hören sich langweilig an, dann solltest du dich mehr mit Rhythmus beschäftigen. Dazu kannst du dich auch ein wenig mit Schlagmustern beschäftigen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Warum die Form hier Gm-Form genannt wird, das wird dir in den nachfolgenden Lektionen klarer werden. Auf Fingersatzangaben können wir hier verzichten, wenn du vorher "Alle meine Entchen in Am" gespielt hast. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Bb- /Gm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier bietet sich besonders an, den Am-Barré zur Orientierung zu verwenden. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier gibt dir der kleine Finger des Am-Barrés den Grundton an. Du kannst dir die Dm-Form aber auch über die F-Form (C im 8. Bund) ableiten. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (F- /Dm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Zähle vom C (H-Saite, 13. Bund) rückwärts zum A. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D- /Bm7-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wird die erste Übung in den 12. Bund verschoben. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C- /Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==1. Fingersatz== Dir wird wohl aufgefallen sein, dass beim zweiten Fingersatz der Ton G fehlt. Den üben wir mit dem ersten Fingersatz. :[[Datei:Scala 71_2-34_5.svg]] Beachte, dass der Grundton (1) unter dem Ringfinger (also im zweiten Bund dieses Fingersatzes) ist, und dass du deine freie Improvisationsübung in Dur günstigerweise mit der (1) beginnen oder zumindest enden sollte. Diesen Fingersatz suchen wir in der C-Dur-Tonleiter auf dem Griffbrett. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] === Eintaktige Sequenzen === Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Den Grundton C kannst du dir vom C-Barré im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Ein kompletter Lagewechsel (nebst Formwechsel) wäre eine weitere gangbare Strategie gewesen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Auf der Konzertgitarre kann es sich lohnen, die Töne im 15. Bund mit dem Ringfinger zu greifen. Es käme zu einer Überstreckung, die in den höheren Lagen jedoch leicht fallen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen === Diesmal hast du halbtaktige Sequenzen, die einmal wiederholt werden. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- / Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Du kannst die beiden hintereinander folgenden Noten im 5. Bund mit einem Mini-Barré ausführen, und die Lagewechsel mittels Slide (=&nbsp;Glissando) durchführen, oder wie in der Wiederholung ohne Slide durchführen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8-1 g' f e d f e d c-1 e-1 d c-1(\glissando b-1) d c b-1(\glissando c1-1) c8-2 g' f e d f e d c-1 e-2 d-4 c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Fingersatztechnisch wieder problemlos. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Ein Vogel wollte Hochzeit machen === Hier habe ich ein relativ bekanntes Kinderlied gefunden, dass perfekt zum 1. Fingersatz passt. Die Tondauern sind für Ungeübte in Sachen Noten schwer herauszulesen. Kennst du aber das Stück, oder hörst du es dir mehrmals an, so ist es keine unüberwindbare Schwierigkeit. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] Folgt das G nach dem D, greifst du den besser mit dem kleinen Finger. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8 d d-3 g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier ist es wohl am einfachsten, dass du den kleinen Finger umlegst, wenn du nach dem D den G greifen willst. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8-3 d d g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Wenn der Ton C auf ein E-folgt, kann man entweder ein <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e-2 c-1 g' e d( g) g g16 e-2 | c8-1 8 8 g'16 e d8 d d g16 f | e8-2 c-1 d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen (2) === :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Einsingen === Diese beiden Motive kennen viele, die schon einmal in einem Chor gesungen haben. Leider entsprechen viele Lieder in ihrem Tonumfang nicht genau einem der vollständigen drei Fingersätze oder der später folgenden Skalen. Zumeist werden nur Ausschnitte aus den Patterns gebraucht. Im ersten Motiv fehlt beispielsweise die große Septime (j7) vor dem Grundton. Dafür enthält das zweite Motiv die große Septime (j7). Das zweite Motiv eicht den Chor auf die gerade geforderte Tonart. Hier werden nur Akkordtöne in einer auf oder absteigenden Tonfolge gespielt (auch Arpeggios genannt). Der A7-Akkord enthält sowohl den Leitton (j7) der zum Grundton (1) hin leitet, als auch den Strebeton (4) die zur Durterz (3) hin strebt. Mit den zwei spannungsreichen Tönen, die sich zum Grundakkord auflösen wollen, wird der Chor auf die Durtonart eingenordet. Hier brauche ich dir nicht zu erklären, wo der Grundton D ist. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A-(Bb-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> == Wie geht es weiter? == Solltest du als Quereinsteiger in diese Lektion gestolpert sein, dann schaue dir die erste Lektion zum [[Gitarre: Aufbau der CAGED-Skalenformen|Aufbau der CAGED-Skalenformen]] an. Insbesondere die Abschnitte, die hier übergangen wurden. Dannach kannst du mit der ersten CAGED-Skala in der D-Dur-Form weitermachen. <noinclude> {{Navigation zurückhochvor |zurücklink=Gitarre: CAGED-Skala G-Dur-Form |zurücktext=CAGED-Skala G-Dur-Form |hochlink=Gitarre: Die Major-Patterns |hochtext=Einführung: Major-Patterns |vorlink=Gitarre: CAGED-Skala D-Dur-Form |vortext=CAGED-Skala D-Dur-Form }} </noinclude> bua2bark5rq7zslzxglako3gxr3hzj1 1090746 1090744 2026-09-13T10:08:31Z Mjchael 2222 /* Rondeau (Auszug) */ stil 1090746 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre: Sologitarre/ Navi Improvisation in Dur und Moll}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} = Wiederholung der Fingersätze = ; mit Schwerpunkt auf den Stammtönen Diese Wiederholung ist zum einen dafür gedacht, die vorhergehenden Übungen auf jeder Saitenlage zu machen, und auch in jeder Bundlage, gleichgültig ob die Finger eng beieinander oder weit auseinander stehen. Zum andern sind diese als Vorbereitung in die Sologitarre gedacht. Beispielsweise als Auflockerungsübung zwischen den Barré-Akkorden. Besonderen Augenmerk wollen wir hier auf die Notennamen legen. Diese können hier mitgelernt werden. Solltest du meinen, das sei noch nicht für dich dran und kann warten, dann springe zur ersten CAGED-Skala. Du kannst beim Kapitel Longform nochmal hierrauf zurückkommen. * [[Gitarre: CAGED-Skala D-Dur-Form|CAGED-Skala D-Dur-Form]] Lassen wir die [[Gitarre: Aufbau der CAGED-Skalenformen|erste Lektion]] (insbesondere für die Quereinsteiger) noch einmal Revue passieren. Die folgenden Übungen enthalten oft eine Folge von ein- oder zweitaktigen Sequenzen. Eine Sequenz ist ein Motiv, dass sich auf verschiedenen Tonhöhen wiederholt. Auch ohne Notenkenntnisse kannst du den Verlauf und die Wiederholungen der Sequenzen einfacher im Notenbild verfolgen, als in der Tabulatur; insbesondere wenn du dir gleichzeitig die Übung anhörst. Es kommen auch Ausschnitte aus klassischen Stücken, Folksongs, Kinderlieder o.ä. vor. Die einfache Struktur oder der Bekanntheitsgrad der Melodien sollen dir das Üben erleichtern. Die Finger finden so leichter ihre Position, als wenn du erstmal jede einzelne Note aus der Tabulatur entschlüsseln musst. Jede Übung wird auf allen Saitenlagen geübt. Vorher blieben wir in den mittleren Lagen. Jetzt gehen wir auch in die ersten Bünde, wo man die Finger etwas mehr spreizen muss, und in die höheren Lagen, wo es ein wenig eng wird. Die Stücke wiederholen sich in dieser Lektion in der selben Tonart, doch auf verschiedenen Bünden. Du spielst immer die selbe Tonfolge, nur auf verschiedenen Tonhöhen bzw. auf verschiedenen Saitenlagen. Lediglich zwischen der G- und H-Saite musst du dir jedesmal überlegen, wie sich der Lagewechsel auf den Fingersatz auswirkt. Doch der Fingersatz in den anderen höheren Lagen bleibt immer gleich. Wie die Tonfolgen mit dem CAGED-System zusammenhängen, das muss dich nur am Rande interessieren. Es wird in den folgenden Lektionen näher und ausführlicher erleutert. Beachte auch hier, dass du den ersten Fingersatz immer nur über 2 Saiten übst. Nicht mehr! Erst beim zweiten Durchgang kommt das nächste Saitenpaar dran, und dann das übernächste. Also sei dir jedesmal bewusst, dass der erste Fingersatz jeweils nur über zwei Saiten geht. :[[Datei:Scala Griffbrett.svg]] Wir hatten uns bei den vorhergehenden Übungen weitestgehend an den Intervallen (1-j7) und an der Tabulatur orientiert. Diese sind in allen Tonarten gleich. Suche zuerst das Karré! Daran orientierst du dich. :[[Image:Scala Carree.svg]] {{Tipp|Lerne bei der C-Dur-Tonleiter nicht nur die Intervalle <br> 2 - 3 4 - 5<br> 6 - j7 1 - 2<br> sondern benenne auch jede einzelne Note. <br> D - E F - G<br> A - H C - D<br> So bekommst du einen recht einfachen Überblick über das Griffbrett.}} == Töne der C-Dur Tonleiter auf dem Griffbrett == Wir wollen uns in dieser Lektion auf die Töne bzw. die Notennamen konzentrieren. Allerdings sparen wir uns vorerst alle Töne mit Vorzeichen aus. Die [[Gitarre: Aufbau der CAGED-Skalenformen|ersten Übungen zum 1. und 2. Fingersatz]] werden auf die Tonart C-Dur bzw. A-Moll übertragen und wir spiele sie in den hier gezeigten Positionen. Wir fangen mit dem zweiten Fingersatz an, wo wir entweder den Ton C oder den Ton A der C-Dur- bzw. Am-Tonleiter als Orientierung nutzen :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Du hast vermutlich allerlei Akkordformen des CAGED-System gesehen. <div class="noprint"> ;Animation [[Image:Crd Grundtonschema ani.gif]] </div> Wenn du schon Fingerstyle oder Jazz spielst, mögen dir viele der Formen bekannt vorkommen. Doch selbst wenn du bis jetzt nur das [[Gitarre: Rockdiplom|Rockdiplom]] gemacht hast und mit den dort vorkommenden Barré-Akkorden vertraut bist, wirst du sehen, dass die einfachen Barré-Akkorde ausreichen, um sich auf dem Griffbrett zu zurechtzufinden. Die [[Gitarre: C-Dur-Tonleiter Workshop|C-Dur-Tonleiter in den ersten drei Bünden]] setze ich als bekannt voraus und es sollte dir nicht allzu schwer fallen, diese in den 12. Bund zu übertragen. :[[Datei:Scala C-Am.svg|150px]][[Datei:C-Dur_Majorpattern_III.jpg|150px]] C-Dur als Barré im 3. Bund kennst du vom Rockdiplom, und C-Dur im 8. Bund ist auch kein Hexenwerk. Dazwischen liegt nach dem CAGED-System die G-Form, die dir vermutlich noch nicht untergekommen ist (hier mit weißem Fingersatz). Statt uns die Töne von der G-Form abzuleiten, machen wir es uns einfacher und leiten uns die Töne zur Orientierung vom Am im 5. Bund ab. Du erinnerst dich noch an die Dur- und Mollparallelen? (C- \ Am-Tonleiter bzw. G- \ Em-Form). Oder du nutzt die Grundtöne des C-Barré im 8. Bund. <score> << \new ChordNames { \chordmode { c1 c c a:m c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < a,-1\6 e-3\5 a-4\4 c'-1\3 e'-1\2 a'-1\1 > < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Leite dir also die Grundtöne C und A von den dir bekannten Barré-Akkorden ab und spare dir die ungewöhnlicheren Akkordformen auf, bis sie dir später beim Fingerstyle oder Jazz begegnen. Es macht dabei garnichts aus, wenn du zum Auffinden der Grundtöne und zum Finden des Starttons ein paar Sekunden brauchst. Du wirst sehen, dass die Wiederholungen der bekannten Übungen auf den verschiedenen Bünden und in verschiedenen Oktavebereichen leicht von der Hand gehen. Lediglich beim Lagewechsel zwischen der G- und H-Saite musst du etwas überlegen. <score> << \new ChordNames { \chordmode { c1 c c a c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 c'-1 > < c-1\5 c'-3\3 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 c'-1\3 c''-4\1> < a,-1\6 a-4\4 a'-1\1 > < c-1\6 c'-3\4 c''-1\1> < c'-4\5 c''-2\2 > } >> </score> Diese wenigen"Eckpunkte" reichen aus, um dich grob auf dem Griffbrett zurechtzufinden. Suche sie noch einmal in der Skala und natürlich auch auf deinem Griffbrett. :[[Datei:C-Major-Scale on the fretboard.svg]] == Zweiter Fingersatz == :[[Datei:Scala 6_71-2_34.svg]] Zuerst suchen wir uns in der C-Dur-Tonleiter überall den zweiten Fingersatz heraus. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Zur leichteren Orientierung wird die Grafik bei jeder neuen Melodie wiederholt. === Rondeau (Auszug) === Die eintaktige Sequenzen wurde aus einem Rondeau von J.S. Bach entnommen. Der Grundton C, welcher im letzten Takt rot eingefärbt wurde, wird mit dem kleinen Finger gegriffen. Am Anfang des Griffbrettes brauchen wir den zweiten Fingersatz nicht vollständig. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> In der A-(Bb-)Form müssen wir den Lagewechsel zwischen der G- und H-Saite beachten. Übrigens werden hier die Töne in der englischen Form angegeben. (Bb-Form und der Ton B statt des deutschen H.) Nur der erste Bund wird bis zur letzten Note in der dritten Lage gespielt. Der Rest bis zur letzten Note in der zweiten Lage. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (A-, Bb-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e-4 d-2 c d e d c b d c b c d c b a c b a b c d b c d-1 } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt in der G-Form das C zu suchen, suche lieber das A im 5. Bund (hier grün hervorgehoben). Oder du leitest dir das C vom Barré im 8. Bund ab. Der Startton E ist auf der A Saite im 7. Bund unter dem Ringfinger. Ansonsten stellt der Fingersatz keine Herausforderung mehr dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (G-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b \once \override NoteHead #'color = #green a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der kleine Finger des C-Barré im 8. Bund in der E- bzw. F-Form gibt gleichzeitig das C des zweiten Fingersatz an. Du siehst, dass ab jetzt alles leichter geworden ist, weil sich ansonsten nichts mehr am Fingersatz ändert. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- F-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Für den Grundton C müssen wir uns die D-Form gar nicht so genau ins Gedächtnis rufen, wenn uns die C-Form viel vertrauter ist. Diese hohe Lage ist für E-Gitarristen oder Gitarren mit Cutaway gedacht. Auf der Konzertgitarre ist die sehr hohe Lage schlecht zu spielen. Gehe ggf. einen Kompromiss ein, und spiele diese hohe Saitenlage ein paar Bünde tiefer als Übung nur für den Fingersatz aber nicht für die Notennamen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Noten über dem hohen C (der mit zwei Hilfslinien) wird dir seltener begegnen, da in dem Fall bevorzugt die Noten nach unten oktaviert werden. (Beachte die 8 im Notensystem.) Bei den weiteren Übungen werden jedoch die Versionen mit den vielen Hilfslinien angezeigt. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { \ottava #1 e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Mit der C-Form in den ersten drei Bünden im Hinterkopf ist der 12. Bund leicht zu bewältigen. Wieder eine Übung, die weniger für Konzertgitarren geeignet ist. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === Die Abfolge der Töne der folgenden Übung unterscheidet sich kaum von der vorhergehenden. Doch mit dem anderen Rhythmus haben wir das Hauptmotiv von der Komposition {{Youtube-Suche|Smetana+Die+Moldau|"Die Moldau" von Bedrich Smetana}} (ohne Auftakt und rhythmisch vereinfacht). Auch wenn es hier (wie in der 7. Übung) nur die Molltonleiter rauf und runter geht, merkst du hoffentlich, wieviel der Takt und Rhythmus an der Wirkung ausmacht. Wenn du später mal meinst, deine Improvisationen hören sich langweilig an, dann solltest du dich mehr mit Rhythmus beschäftigen. Dazu kannst du dich auch ein wenig mit Schlagmustern beschäftigen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Warum die Form hier Gm-Form genannt wird, das wird dir in den nachfolgenden Lektionen klarer werden. Auf Fingersatzangaben können wir hier verzichten, wenn du vorher "Alle meine Entchen in Am" gespielt hast. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Bb- /Gm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier bietet sich besonders an, den Am-Barré zur Orientierung zu verwenden. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier gibt dir der kleine Finger des Am-Barrés den Grundton an. Du kannst dir die Dm-Form aber auch über die F-Form (C im 8. Bund) ableiten. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (F- /Dm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Zähle vom C (H-Saite, 13. Bund) rückwärts zum A. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D- /Bm7-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wird die erste Übung in den 12. Bund verschoben. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C- /Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==1. Fingersatz== Dir wird wohl aufgefallen sein, dass beim zweiten Fingersatz der Ton G fehlt. Den üben wir mit dem ersten Fingersatz. :[[Datei:Scala 71_2-34_5.svg]] Beachte, dass der Grundton (1) unter dem Ringfinger (also im zweiten Bund dieses Fingersatzes) ist, und dass du deine freie Improvisationsübung in Dur günstigerweise mit der (1) beginnen oder zumindest enden sollte. Diesen Fingersatz suchen wir in der C-Dur-Tonleiter auf dem Griffbrett. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] === Eintaktige Sequenzen === Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Den Grundton C kannst du dir vom C-Barré im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Ein kompletter Lagewechsel (nebst Formwechsel) wäre eine weitere gangbare Strategie gewesen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Auf der Konzertgitarre kann es sich lohnen, die Töne im 15. Bund mit dem Ringfinger zu greifen. Es käme zu einer Überstreckung, die in den höheren Lagen jedoch leicht fallen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen === Diesmal hast du halbtaktige Sequenzen, die einmal wiederholt werden. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- / Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Du kannst die beiden hintereinander folgenden Noten im 5. Bund mit einem Mini-Barré ausführen, und die Lagewechsel mittels Slide (=&nbsp;Glissando) durchführen, oder wie in der Wiederholung ohne Slide durchführen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8-1 g' f e d f e d c-1 e-1 d c-1(\glissando b-1) d c b-1(\glissando c1-1) c8-2 g' f e d f e d c-1 e-2 d-4 c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Fingersatztechnisch wieder problemlos. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Ein Vogel wollte Hochzeit machen === Hier habe ich ein relativ bekanntes Kinderlied gefunden, dass perfekt zum 1. Fingersatz passt. Die Tondauern sind für Ungeübte in Sachen Noten schwer herauszulesen. Kennst du aber das Stück, oder hörst du es dir mehrmals an, so ist es keine unüberwindbare Schwierigkeit. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] Folgt das G nach dem D, greifst du den besser mit dem kleinen Finger. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8 d d-3 g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier ist es wohl am einfachsten, dass du den kleinen Finger umlegst, wenn du nach dem D den G greifen willst. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8-3 d d g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Wenn der Ton C auf ein E-folgt, kann man entweder ein <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e-2 c-1 g' e d( g) g g16 e-2 | c8-1 8 8 g'16 e d8 d d g16 f | e8-2 c-1 d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen (2) === :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Einsingen === Diese beiden Motive kennen viele, die schon einmal in einem Chor gesungen haben. Leider entsprechen viele Lieder in ihrem Tonumfang nicht genau einem der vollständigen drei Fingersätze oder der später folgenden Skalen. Zumeist werden nur Ausschnitte aus den Patterns gebraucht. Im ersten Motiv fehlt beispielsweise die große Septime (j7) vor dem Grundton. Dafür enthält das zweite Motiv die große Septime (j7). Das zweite Motiv eicht den Chor auf die gerade geforderte Tonart. Hier werden nur Akkordtöne in einer auf oder absteigenden Tonfolge gespielt (auch Arpeggios genannt). Der A7-Akkord enthält sowohl den Leitton (j7) der zum Grundton (1) hin leitet, als auch den Strebeton (4) die zur Durterz (3) hin strebt. Mit den zwei spannungsreichen Tönen, die sich zum Grundakkord auflösen wollen, wird der Chor auf die Durtonart eingenordet. Hier brauche ich dir nicht zu erklären, wo der Grundton D ist. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A-(Bb-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> == Wie geht es weiter? == Solltest du als Quereinsteiger in diese Lektion gestolpert sein, dann schaue dir die erste Lektion zum [[Gitarre: Aufbau der CAGED-Skalenformen|Aufbau der CAGED-Skalenformen]] an. Insbesondere die Abschnitte, die hier übergangen wurden. Dannach kannst du mit der ersten CAGED-Skala in der D-Dur-Form weitermachen. <noinclude> {{Navigation zurückhochvor |zurücklink=Gitarre: CAGED-Skala G-Dur-Form |zurücktext=CAGED-Skala G-Dur-Form |hochlink=Gitarre: Die Major-Patterns |hochtext=Einführung: Major-Patterns |vorlink=Gitarre: CAGED-Skala D-Dur-Form |vortext=CAGED-Skala D-Dur-Form }} </noinclude> 87ckua0eh2t7wfdk7qxzotqldkq02w1 1090747 1090746 2026-09-13T10:18:17Z Mjchael 2222 /* Rondeau (Auszug) */ 1090747 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre: Sologitarre/ Navi Improvisation in Dur und Moll}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} = Wiederholung der Fingersätze = ; mit Schwerpunkt auf den Stammtönen Diese Wiederholung ist zum einen dafür gedacht, die vorhergehenden Übungen auf jeder Saitenlage zu machen, und auch in jeder Bundlage, gleichgültig ob die Finger eng beieinander oder weit auseinander stehen. Zum andern sind diese als Vorbereitung in die Sologitarre gedacht. Beispielsweise als Auflockerungsübung zwischen den Barré-Akkorden. Besonderen Augenmerk wollen wir hier auf die Notennamen legen. Diese können hier mitgelernt werden. Solltest du meinen, das sei noch nicht für dich dran und kann warten, dann springe zur ersten CAGED-Skala. Du kannst beim Kapitel Longform nochmal hierrauf zurückkommen. * [[Gitarre: CAGED-Skala D-Dur-Form|CAGED-Skala D-Dur-Form]] Lassen wir die [[Gitarre: Aufbau der CAGED-Skalenformen|erste Lektion]] (insbesondere für die Quereinsteiger) noch einmal Revue passieren. Die folgenden Übungen enthalten oft eine Folge von ein- oder zweitaktigen Sequenzen. Eine Sequenz ist ein Motiv, dass sich auf verschiedenen Tonhöhen wiederholt. Auch ohne Notenkenntnisse kannst du den Verlauf und die Wiederholungen der Sequenzen einfacher im Notenbild verfolgen, als in der Tabulatur; insbesondere wenn du dir gleichzeitig die Übung anhörst. Es kommen auch Ausschnitte aus klassischen Stücken, Folksongs, Kinderlieder o.ä. vor. Die einfache Struktur oder der Bekanntheitsgrad der Melodien sollen dir das Üben erleichtern. Die Finger finden so leichter ihre Position, als wenn du erstmal jede einzelne Note aus der Tabulatur entschlüsseln musst. Jede Übung wird auf allen Saitenlagen geübt. Vorher blieben wir in den mittleren Lagen. Jetzt gehen wir auch in die ersten Bünde, wo man die Finger etwas mehr spreizen muss, und in die höheren Lagen, wo es ein wenig eng wird. Die Stücke wiederholen sich in dieser Lektion in der selben Tonart, doch auf verschiedenen Bünden. Du spielst immer die selbe Tonfolge, nur auf verschiedenen Tonhöhen bzw. auf verschiedenen Saitenlagen. Lediglich zwischen der G- und H-Saite musst du dir jedesmal überlegen, wie sich der Lagewechsel auf den Fingersatz auswirkt. Doch der Fingersatz in den anderen höheren Lagen bleibt immer gleich. Wie die Tonfolgen mit dem CAGED-System zusammenhängen, das muss dich nur am Rande interessieren. Es wird in den folgenden Lektionen näher und ausführlicher erleutert. Beachte auch hier, dass du den ersten Fingersatz immer nur über 2 Saiten übst. Nicht mehr! Erst beim zweiten Durchgang kommt das nächste Saitenpaar dran, und dann das übernächste. Also sei dir jedesmal bewusst, dass der erste Fingersatz jeweils nur über zwei Saiten geht. :[[Datei:Scala Griffbrett.svg]] Wir hatten uns bei den vorhergehenden Übungen weitestgehend an den Intervallen (1-j7) und an der Tabulatur orientiert. Diese sind in allen Tonarten gleich. Suche zuerst das Karré! Daran orientierst du dich. :[[Image:Scala Carree.svg]] {{Tipp|Lerne bei der C-Dur-Tonleiter nicht nur die Intervalle <br> 2 - 3 4 - 5<br> 6 - j7 1 - 2<br> sondern benenne auch jede einzelne Note. <br> D - E F - G<br> A - H C - D<br> So bekommst du einen recht einfachen Überblick über das Griffbrett.}} == Töne der C-Dur Tonleiter auf dem Griffbrett == Wir wollen uns in dieser Lektion auf die Töne bzw. die Notennamen konzentrieren. Allerdings sparen wir uns vorerst alle Töne mit Vorzeichen aus. Die [[Gitarre: Aufbau der CAGED-Skalenformen|ersten Übungen zum 1. und 2. Fingersatz]] werden auf die Tonart C-Dur bzw. A-Moll übertragen und wir spiele sie in den hier gezeigten Positionen. Wir fangen mit dem zweiten Fingersatz an, wo wir entweder den Ton C oder den Ton A der C-Dur- bzw. Am-Tonleiter als Orientierung nutzen :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Du hast vermutlich allerlei Akkordformen des CAGED-System gesehen. <div class="noprint"> ;Animation [[Image:Crd Grundtonschema ani.gif]] </div> Wenn du schon Fingerstyle oder Jazz spielst, mögen dir viele der Formen bekannt vorkommen. Doch selbst wenn du bis jetzt nur das [[Gitarre: Rockdiplom|Rockdiplom]] gemacht hast und mit den dort vorkommenden Barré-Akkorden vertraut bist, wirst du sehen, dass die einfachen Barré-Akkorde ausreichen, um sich auf dem Griffbrett zu zurechtzufinden. Die [[Gitarre: C-Dur-Tonleiter Workshop|C-Dur-Tonleiter in den ersten drei Bünden]] setze ich als bekannt voraus und es sollte dir nicht allzu schwer fallen, diese in den 12. Bund zu übertragen. :[[Datei:Scala C-Am.svg|150px]][[Datei:C-Dur_Majorpattern_III.jpg|150px]] C-Dur als Barré im 3. Bund kennst du vom Rockdiplom, und C-Dur im 8. Bund ist auch kein Hexenwerk. Dazwischen liegt nach dem CAGED-System die G-Form, die dir vermutlich noch nicht untergekommen ist (hier mit weißem Fingersatz). Statt uns die Töne von der G-Form abzuleiten, machen wir es uns einfacher und leiten uns die Töne zur Orientierung vom Am im 5. Bund ab. Du erinnerst dich noch an die Dur- und Mollparallelen? (C- \ Am-Tonleiter bzw. G- \ Em-Form). Oder du nutzt die Grundtöne des C-Barré im 8. Bund. <score> << \new ChordNames { \chordmode { c1 c c a:m c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < a,-1\6 e-3\5 a-4\4 c'-1\3 e'-1\2 a'-1\1 > < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Leite dir also die Grundtöne C und A von den dir bekannten Barré-Akkorden ab und spare dir die ungewöhnlicheren Akkordformen auf, bis sie dir später beim Fingerstyle oder Jazz begegnen. Es macht dabei garnichts aus, wenn du zum Auffinden der Grundtöne und zum Finden des Starttons ein paar Sekunden brauchst. Du wirst sehen, dass die Wiederholungen der bekannten Übungen auf den verschiedenen Bünden und in verschiedenen Oktavebereichen leicht von der Hand gehen. Lediglich beim Lagewechsel zwischen der G- und H-Saite musst du etwas überlegen. <score> << \new ChordNames { \chordmode { c1 c c a c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 c'-1 > < c-1\5 c'-3\3 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 c'-1\3 c''-4\1> < a,-1\6 a-4\4 a'-1\1 > < c-1\6 c'-3\4 c''-1\1> < c'-4\5 c''-2\2 > } >> </score> Diese wenigen"Eckpunkte" reichen aus, um dich grob auf dem Griffbrett zurechtzufinden. Suche sie noch einmal in der Skala und natürlich auch auf deinem Griffbrett. :[[Datei:C-Major-Scale on the fretboard.svg]] == Zweiter Fingersatz == :[[Datei:Scala 6_71-2_34.svg]] Zuerst suchen wir uns in der C-Dur-Tonleiter überall den zweiten Fingersatz heraus. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Zur leichteren Orientierung wird die Grafik bei jeder neuen Melodie wiederholt. === Rondeau (Auszug) === Die eintaktige Sequenzen wurde aus einem Rondeau von J.S. Bach entnommen. Der Grundton C, welcher im letzten Takt rot eingefärbt wurde, wird mit dem kleinen Finger gegriffen. Am Anfang des Griffbrettes brauchen wir den zweiten Fingersatz nicht vollständig. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> In der A-(Bb-)Form müssen wir den Lagewechsel zwischen der G- und H-Saite beachten. Übrigens werden hier die Töne in der englischen Form angegeben. (Bb-Form und der Ton B statt des deutschen H.) <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (A-, Bb-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-3 d e f e d c e-4 d-2 c d e d c b d c b c d c b a c b a b c d-1 b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt in der G-Form das C zu suchen, suche lieber das A im 5. Bund (hier grün hervorgehoben). Oder du leitest dir das C vom Barré im 8. Bund ab. Der Startton E ist auf der A Saite im 7. Bund unter dem Ringfinger. Ansonsten stellt der Fingersatz keine Herausforderung mehr dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (G-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b \once \override NoteHead #'color = #green a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der kleine Finger des C-Barré im 8. Bund in der E- bzw. F-Form gibt gleichzeitig das C des zweiten Fingersatz an. Du siehst, dass ab jetzt alles leichter geworden ist, weil sich ansonsten nichts mehr am Fingersatz ändert. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- F-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Für den Grundton C müssen wir uns die D-Form gar nicht so genau ins Gedächtnis rufen, wenn uns die C-Form viel vertrauter ist. Diese hohe Lage ist für E-Gitarristen oder Gitarren mit Cutaway gedacht. Auf der Konzertgitarre ist die sehr hohe Lage schlecht zu spielen. Gehe ggf. einen Kompromiss ein, und spiele diese hohe Saitenlage ein paar Bünde tiefer als Übung nur für den Fingersatz aber nicht für die Notennamen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Noten über dem hohen C (der mit zwei Hilfslinien) wird dir seltener begegnen, da in dem Fall bevorzugt die Noten nach unten oktaviert werden. (Beachte die 8 im Notensystem.) Bei den weiteren Übungen werden jedoch die Versionen mit den vielen Hilfslinien angezeigt. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { \ottava #1 e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Mit der C-Form in den ersten drei Bünden im Hinterkopf ist der 12. Bund leicht zu bewältigen. Wieder eine Übung, die weniger für Konzertgitarren geeignet ist. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === Die Abfolge der Töne der folgenden Übung unterscheidet sich kaum von der vorhergehenden. Doch mit dem anderen Rhythmus haben wir das Hauptmotiv von der Komposition {{Youtube-Suche|Smetana+Die+Moldau|"Die Moldau" von Bedrich Smetana}} (ohne Auftakt und rhythmisch vereinfacht). Auch wenn es hier (wie in der 7. Übung) nur die Molltonleiter rauf und runter geht, merkst du hoffentlich, wieviel der Takt und Rhythmus an der Wirkung ausmacht. Wenn du später mal meinst, deine Improvisationen hören sich langweilig an, dann solltest du dich mehr mit Rhythmus beschäftigen. Dazu kannst du dich auch ein wenig mit Schlagmustern beschäftigen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Warum die Form hier Gm-Form genannt wird, das wird dir in den nachfolgenden Lektionen klarer werden. Auf Fingersatzangaben können wir hier verzichten, wenn du vorher "Alle meine Entchen in Am" gespielt hast. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Bb- /Gm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier bietet sich besonders an, den Am-Barré zur Orientierung zu verwenden. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier gibt dir der kleine Finger des Am-Barrés den Grundton an. Du kannst dir die Dm-Form aber auch über die F-Form (C im 8. Bund) ableiten. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (F- /Dm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Zähle vom C (H-Saite, 13. Bund) rückwärts zum A. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D- /Bm7-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wird die erste Übung in den 12. Bund verschoben. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C- /Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==1. Fingersatz== Dir wird wohl aufgefallen sein, dass beim zweiten Fingersatz der Ton G fehlt. Den üben wir mit dem ersten Fingersatz. :[[Datei:Scala 71_2-34_5.svg]] Beachte, dass der Grundton (1) unter dem Ringfinger (also im zweiten Bund dieses Fingersatzes) ist, und dass du deine freie Improvisationsübung in Dur günstigerweise mit der (1) beginnen oder zumindest enden sollte. Diesen Fingersatz suchen wir in der C-Dur-Tonleiter auf dem Griffbrett. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] === Eintaktige Sequenzen === Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Den Grundton C kannst du dir vom C-Barré im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Ein kompletter Lagewechsel (nebst Formwechsel) wäre eine weitere gangbare Strategie gewesen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Auf der Konzertgitarre kann es sich lohnen, die Töne im 15. Bund mit dem Ringfinger zu greifen. Es käme zu einer Überstreckung, die in den höheren Lagen jedoch leicht fallen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen === Diesmal hast du halbtaktige Sequenzen, die einmal wiederholt werden. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- / Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Du kannst die beiden hintereinander folgenden Noten im 5. Bund mit einem Mini-Barré ausführen, und die Lagewechsel mittels Slide (=&nbsp;Glissando) durchführen, oder wie in der Wiederholung ohne Slide durchführen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8-1 g' f e d f e d c-1 e-1 d c-1(\glissando b-1) d c b-1(\glissando c1-1) c8-2 g' f e d f e d c-1 e-2 d-4 c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Fingersatztechnisch wieder problemlos. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Ein Vogel wollte Hochzeit machen === Hier habe ich ein relativ bekanntes Kinderlied gefunden, dass perfekt zum 1. Fingersatz passt. Die Tondauern sind für Ungeübte in Sachen Noten schwer herauszulesen. Kennst du aber das Stück, oder hörst du es dir mehrmals an, so ist es keine unüberwindbare Schwierigkeit. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] Folgt das G nach dem D, greifst du den besser mit dem kleinen Finger. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8 d d-3 g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier ist es wohl am einfachsten, dass du den kleinen Finger umlegst, wenn du nach dem D den G greifen willst. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8-3 d d g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Wenn der Ton C auf ein E-folgt, kann man entweder ein <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e-2 c-1 g' e d( g) g g16 e-2 | c8-1 8 8 g'16 e d8 d d g16 f | e8-2 c-1 d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen (2) === :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Einsingen === Diese beiden Motive kennen viele, die schon einmal in einem Chor gesungen haben. Leider entsprechen viele Lieder in ihrem Tonumfang nicht genau einem der vollständigen drei Fingersätze oder der später folgenden Skalen. Zumeist werden nur Ausschnitte aus den Patterns gebraucht. Im ersten Motiv fehlt beispielsweise die große Septime (j7) vor dem Grundton. Dafür enthält das zweite Motiv die große Septime (j7). Das zweite Motiv eicht den Chor auf die gerade geforderte Tonart. Hier werden nur Akkordtöne in einer auf oder absteigenden Tonfolge gespielt (auch Arpeggios genannt). Der A7-Akkord enthält sowohl den Leitton (j7) der zum Grundton (1) hin leitet, als auch den Strebeton (4) die zur Durterz (3) hin strebt. Mit den zwei spannungsreichen Tönen, die sich zum Grundakkord auflösen wollen, wird der Chor auf die Durtonart eingenordet. Hier brauche ich dir nicht zu erklären, wo der Grundton D ist. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A-(Bb-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> == Wie geht es weiter? == Solltest du als Quereinsteiger in diese Lektion gestolpert sein, dann schaue dir die erste Lektion zum [[Gitarre: Aufbau der CAGED-Skalenformen|Aufbau der CAGED-Skalenformen]] an. Insbesondere die Abschnitte, die hier übergangen wurden. Dannach kannst du mit der ersten CAGED-Skala in der D-Dur-Form weitermachen. <noinclude> {{Navigation zurückhochvor |zurücklink=Gitarre: CAGED-Skala G-Dur-Form |zurücktext=CAGED-Skala G-Dur-Form |hochlink=Gitarre: Die Major-Patterns |hochtext=Einführung: Major-Patterns |vorlink=Gitarre: CAGED-Skala D-Dur-Form |vortext=CAGED-Skala D-Dur-Form }} </noinclude> nd51676c2sa42w3jeqgf9ns71cm4na6 1090748 1090747 2026-09-13T10:27:13Z Mjchael 2222 /* Rondeau (Auszug) */ rotstift 1090748 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre: Sologitarre/ Navi Improvisation in Dur und Moll}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} = Wiederholung der Fingersätze = ; mit Schwerpunkt auf den Stammtönen Diese Wiederholung ist zum einen dafür gedacht, die vorhergehenden Übungen auf jeder Saitenlage zu machen, und auch in jeder Bundlage, gleichgültig ob die Finger eng beieinander oder weit auseinander stehen. Zum andern sind diese als Vorbereitung in die Sologitarre gedacht. Beispielsweise als Auflockerungsübung zwischen den Barré-Akkorden. Besonderen Augenmerk wollen wir hier auf die Notennamen legen. Diese können hier mitgelernt werden. Solltest du meinen, das sei noch nicht für dich dran und kann warten, dann springe zur ersten CAGED-Skala. Du kannst beim Kapitel Longform nochmal hierrauf zurückkommen. * [[Gitarre: CAGED-Skala D-Dur-Form|CAGED-Skala D-Dur-Form]] Lassen wir die [[Gitarre: Aufbau der CAGED-Skalenformen|erste Lektion]] (insbesondere für die Quereinsteiger) noch einmal Revue passieren. Die folgenden Übungen enthalten oft eine Folge von ein- oder zweitaktigen Sequenzen. Eine Sequenz ist ein Motiv, dass sich auf verschiedenen Tonhöhen wiederholt. Auch ohne Notenkenntnisse kannst du den Verlauf und die Wiederholungen der Sequenzen einfacher im Notenbild verfolgen, als in der Tabulatur; insbesondere wenn du dir gleichzeitig die Übung anhörst. Es kommen auch Ausschnitte aus klassischen Stücken, Folksongs, Kinderlieder o.ä. vor. Die einfache Struktur oder der Bekanntheitsgrad der Melodien sollen dir das Üben erleichtern. Die Finger finden so leichter ihre Position, als wenn du erstmal jede einzelne Note aus der Tabulatur entschlüsseln musst. Jede Übung wird auf allen Saitenlagen geübt. Vorher blieben wir in den mittleren Lagen. Jetzt gehen wir auch in die ersten Bünde, wo man die Finger etwas mehr spreizen muss, und in die höheren Lagen, wo es ein wenig eng wird. Die Stücke wiederholen sich in dieser Lektion in der selben Tonart, doch auf verschiedenen Bünden. Du spielst immer die selbe Tonfolge, nur auf verschiedenen Tonhöhen bzw. auf verschiedenen Saitenlagen. Lediglich zwischen der G- und H-Saite musst du dir jedesmal überlegen, wie sich der Lagewechsel auf den Fingersatz auswirkt. Doch der Fingersatz in den anderen höheren Lagen bleibt immer gleich. Wie die Tonfolgen mit dem CAGED-System zusammenhängen, das muss dich nur am Rande interessieren. Es wird in den folgenden Lektionen näher und ausführlicher erleutert. Beachte auch hier, dass du den ersten Fingersatz immer nur über 2 Saiten übst. Nicht mehr! Erst beim zweiten Durchgang kommt das nächste Saitenpaar dran, und dann das übernächste. Also sei dir jedesmal bewusst, dass der erste Fingersatz jeweils nur über zwei Saiten geht. :[[Datei:Scala Griffbrett.svg]] Wir hatten uns bei den vorhergehenden Übungen weitestgehend an den Intervallen (1-j7) und an der Tabulatur orientiert. Diese sind in allen Tonarten gleich. Suche zuerst das Karré! Daran orientierst du dich. :[[Image:Scala Carree.svg]] {{Tipp|Lerne bei der C-Dur-Tonleiter nicht nur die Intervalle <br> 2 - 3 4 - 5<br> 6 - j7 1 - 2<br> sondern benenne auch jede einzelne Note. <br> D - E F - G<br> A - H C - D<br> So bekommst du einen recht einfachen Überblick über das Griffbrett.}} == Töne der C-Dur Tonleiter auf dem Griffbrett == Wir wollen uns in dieser Lektion auf die Töne bzw. die Notennamen konzentrieren. Allerdings sparen wir uns vorerst alle Töne mit Vorzeichen aus. Die [[Gitarre: Aufbau der CAGED-Skalenformen|ersten Übungen zum 1. und 2. Fingersatz]] werden auf die Tonart C-Dur bzw. A-Moll übertragen und wir spiele sie in den hier gezeigten Positionen. Wir fangen mit dem zweiten Fingersatz an, wo wir entweder den Ton C oder den Ton A der C-Dur- bzw. Am-Tonleiter als Orientierung nutzen :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Du hast vermutlich allerlei Akkordformen des CAGED-System gesehen. <div class="noprint"> ;Animation [[Image:Crd Grundtonschema ani.gif]] </div> Wenn du schon Fingerstyle oder Jazz spielst, mögen dir viele der Formen bekannt vorkommen. Doch selbst wenn du bis jetzt nur das [[Gitarre: Rockdiplom|Rockdiplom]] gemacht hast und mit den dort vorkommenden Barré-Akkorden vertraut bist, wirst du sehen, dass die einfachen Barré-Akkorde ausreichen, um sich auf dem Griffbrett zu zurechtzufinden. Die [[Gitarre: C-Dur-Tonleiter Workshop|C-Dur-Tonleiter in den ersten drei Bünden]] setze ich als bekannt voraus und es sollte dir nicht allzu schwer fallen, diese in den 12. Bund zu übertragen. :[[Datei:Scala C-Am.svg|150px]][[Datei:C-Dur_Majorpattern_III.jpg|150px]] C-Dur als Barré im 3. Bund kennst du vom Rockdiplom, und C-Dur im 8. Bund ist auch kein Hexenwerk. Dazwischen liegt nach dem CAGED-System die G-Form, die dir vermutlich noch nicht untergekommen ist (hier mit weißem Fingersatz). Statt uns die Töne von der G-Form abzuleiten, machen wir es uns einfacher und leiten uns die Töne zur Orientierung vom Am im 5. Bund ab. Du erinnerst dich noch an die Dur- und Mollparallelen? (C- \ Am-Tonleiter bzw. G- \ Em-Form). Oder du nutzt die Grundtöne des C-Barré im 8. Bund. <score> << \new ChordNames { \chordmode { c1 c c a:m c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 e-2 g c'-1 e' > < c-1\5 g-3\4 c'-3\3 e'-4\2 g'-1 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 e-2\5 g-1\4 c'-1\3 e'-1\2 c''-4\1> < a,-1\6 e-3\5 a-4\4 c'-1\3 e'-1\2 a'-1\1 > < c-1\6 g-2\5 c'-3\4 e'-4\3 g'-1\2 c''-1\1> < c'-4\5 e'-3\4 g'-1\3 c''-2\2 e''-1\1 > } >> </score> Leite dir also die Grundtöne C und A von den dir bekannten Barré-Akkorden ab und spare dir die ungewöhnlicheren Akkordformen auf, bis sie dir später beim Fingerstyle oder Jazz begegnen. Es macht dabei garnichts aus, wenn du zum Auffinden der Grundtöne und zum Finden des Starttons ein paar Sekunden brauchst. Du wirst sehen, dass die Wiederholungen der bekannten Übungen auf den verschiedenen Bünden und in verschiedenen Oktavebereichen leicht von der Hand gehen. Lediglich beim Lagewechsel zwischen der G- und H-Saite musst du etwas überlegen. <score> << \new ChordNames { \chordmode { c1 c c a c c }} \new FretBoards { % \override FretBoards.FretBoard.size = #'1.5 \override FretBoard.fret-diagram-details.finger-code = #'in-dot % \override FretBoard.fret-diagram-details.dot-color = #'white \override FretBoard.fret-diagram-details.orientation = #'landscape < c-3 c'-1 > < c-1\5 c'-3\3 > \once \override FretBoard.fret-diagram-details.dot-color = #'white < c-3\6 c'-1\3 c''-4\1> < a,-1\6 a-4\4 a'-1\1 > < c-1\6 c'-3\4 c''-1\1> < c'-4\5 c''-2\2 > } >> </score> Diese wenigen"Eckpunkte" reichen aus, um dich grob auf dem Griffbrett zurechtzufinden. Suche sie noch einmal in der Skala und natürlich auch auf deinem Griffbrett. :[[Datei:C-Major-Scale on the fretboard.svg]] == Zweiter Fingersatz == :[[Datei:Scala 6_71-2_34.svg]] Zuerst suchen wir uns in der C-Dur-Tonleiter überall den zweiten Fingersatz heraus. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] Zur leichteren Orientierung wird die Grafik bei jeder neuen Melodie wiederholt. === Rondeau (Auszug) === Die eintaktige Sequenzen wurde aus einem Rondeau von J.S. Bach entnommen. Der Grundton C, welcher im letzten Takt rot eingefärbt wurde, wird mit dem kleinen Finger gegriffen. Am Anfang des Griffbrettes brauchen wir den zweiten Fingersatz nicht vollständig. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> In der A-(Bb-)Form müssen wir den Lagewechsel zwischen der G- und H-Saite beachten. Übrigens werden hier die Töne in der englischen Form angegeben. (Bb-Form und der Ton B statt des deutschen H.) <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (A-, Bb-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-3 d e f e d c e-4 d-2 c d e d c b d c b c d c b a c b a b c d-1 b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Leite dir den Grundton C vom Barré im 8. Bund ab, oder suche das A im 5. Bund (hier grün hervorgehoben). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (G-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b \once \override NoteHead #'color = #green a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der kleine Finger des C-Barré im 8. Bund in der E- bzw. F-Form gibt gleichzeitig das C des zweiten Fingersatz an. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- F-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Für den Grundton C müssen wir uns die D-Form gar nicht so genau ins Gedächtnis rufen, wenn uns die C-Form viel vertrauter ist. Diese hohe Lage ist für E-Gitarristen oder Gitarren mit Cutaway gedacht. Auf der Konzertgitarre ist die sehr hohe Lage schlecht zu spielen. Gehe ggf. einen Kompromiss ein, und spiele diese hohe Saitenlage ein paar Bünde tiefer als Übung nur für den Fingersatz aber nicht für die Notennamen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Noten über dem hohen C (der mit zwei Hilfslinien) wird dir seltener begegnen, da in dem Fall bevorzugt die Noten nach unten oktaviert werden. (Beachte die 8 im Notensystem.) Bei den weiteren Übungen werden jedoch die Versionen mit den vielen Hilfslinien angezeigt. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { \ottava #1 e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Mit der C-Form in den ersten drei Bünden im Hinterkopf ist der 12. Bund leicht zu bewältigen. Wieder eine Übung, die weniger für Konzertgitarren geeignet ist. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in C-Dur" subtitle="Rondeau (Auszug)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major \repeat volta 2 { e8-2 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d } \once \override NoteHead #'color = #red c1^\markup { \bold {(C)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 d e f e d c e d c d e d c b d c b c d c b a c b a b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === Die Abfolge der Töne der folgenden Übung unterscheidet sich kaum von der vorhergehenden. Doch mit dem anderen Rhythmus haben wir das Hauptmotiv von der Komposition {{Youtube-Suche|Smetana+Die+Moldau|"Die Moldau" von Bedrich Smetana}} (ohne Auftakt und rhythmisch vereinfacht). Auch wenn es hier (wie in der 7. Übung) nur die Molltonleiter rauf und runter geht, merkst du hoffentlich, wieviel der Takt und Rhythmus an der Wirkung ausmacht. Wenn du später mal meinst, deine Improvisationen hören sich langweilig an, dann solltest du dich mehr mit Rhythmus beschäftigen. Dazu kannst du dich auch ein wenig mit Schlagmustern beschäftigen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Warum die Form hier Gm-Form genannt wird, das wird dir in den nachfolgenden Lektionen klarer werden. Auf Fingersatzangaben können wir hier verzichten, wenn du vorher "Alle meine Entchen in Am" gespielt hast. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Bb- /Gm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier bietet sich besonders an, den Am-Barré zur Orientierung zu verwenden. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier gibt dir der kleine Finger des Am-Barrés den Grundton an. Du kannst dir die Dm-Form aber auch über die F-Form (C im 8. Bund) ableiten. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (F- /Dm-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Zähle vom C (H-Saite, 13. Bund) rückwärts zum A. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D- /Bm7-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wird die erste Übung in den 12. Bund verschoben. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C- /Am-Form) in Am" subtitle="Die Moldau (Hauptmotiv)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b8 \once \override NoteHead #'color = #red c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 6/8 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b8 c4 d8 e4. e4. f4. f4. e2. d4. d4. c4 d8 c4. b4. b4. a2. } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==1. Fingersatz== Dir wird wohl aufgefallen sein, dass beim zweiten Fingersatz der Ton G fehlt. Den üben wir mit dem ersten Fingersatz. :[[Datei:Scala 71_2-34_5.svg]] Beachte, dass der Grundton (1) unter dem Ringfinger (also im zweiten Bund dieses Fingersatzes) ist, und dass du deine freie Improvisationsübung in Dur günstigerweise mit der (1) beginnen oder zumindest enden sollte. Diesen Fingersatz suchen wir in der C-Dur-Tonleiter auf dem Griffbrett. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] === Eintaktige Sequenzen === Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Den Grundton C kannst du dir vom C-Barré im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Ein kompletter Lagewechsel (nebst Formwechsel) wäre eine weitere gangbare Strategie gewesen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Auf der Konzertgitarre kann es sich lohnen, die Töne im 15. Bund mit dem Ringfinger zu greifen. Es käme zu einer Überstreckung, die in den höheren Lagen jedoch leicht fallen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen === Diesmal hast du halbtaktige Sequenzen, die einmal wiederholt werden. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- / Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Du kannst die beiden hintereinander folgenden Noten im 5. Bund mit einem Mini-Barré ausführen, und die Lagewechsel mittels Slide (=&nbsp;Glissando) durchführen, oder wie in der Wiederholung ohne Slide durchführen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8-1 g' f e d f e d c-1 e-1 d c-1(\glissando b-1) d c b-1(\glissando c1-1) c8-2 g' f e d f e d c-1 e-2 d-4 c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Fingersatztechnisch wieder problemlos. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 g' f e d f e d c e d c b d c b c1 c8 g' f e d f e d c e d c b d c b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Ein Vogel wollte Hochzeit machen === Hier habe ich ein relativ bekanntes Kinderlied gefunden, dass perfekt zum 1. Fingersatz passt. Die Tondauern sind für Ungeübte in Sachen Noten schwer herauszulesen. Kennst du aber das Stück, oder hörst du es dir mehrmals an, so ist es keine unüberwindbare Schwierigkeit. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] Folgt das G nach dem D, greifst du den besser mit dem kleinen Finger. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8 d d-3 g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier ist es wohl am einfachsten, dass du den kleinen Finger umlegst, wenn du nach dem D den G greifen willst. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d-3( g-4) g g16 e | c8 8 8 g'16 e d8-3 d d g16-4 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Wenn der Ton C auf ein E-folgt, kann man entweder ein <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e-2 c-1 g' e d( g) g g16 e-2 | c8-1 8 8 g'16 e d8 d d g16 f | e8-2 c-1 d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Ein Vogel wollte Hochzeit machen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major r2. r8 e8 | g8 e g e f d f d | e c g' e d( g) g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b \once \override NoteHead #'color = #red c4 r4 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { e8 | g8 e g e f d f d | e c g' e d_g g g16 e | c8 8 8 g'16 e d8 d d g16 f | e8 c d b c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Halbtaktige Sequenzen (2) === :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E- (F-)Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Halbtaktige Sequenzen (2)" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1 g'8 e f g f d e f e c-2 d e d b c d \once \override NoteHead #'color = #red c1^\markup { \bold {(C5)} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 e f g f d e f e c-2 d e d b c d c g'8 e f g f d e f e c-2 d e d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> === Einsingen === Diese beiden Motive kennen viele, die schon einmal in einem Chor gesungen haben. Leider entsprechen viele Lieder in ihrem Tonumfang nicht genau einem der vollständigen drei Fingersätze oder der später folgenden Skalen. Zumeist werden nur Ausschnitte aus den Patterns gebraucht. Im ersten Motiv fehlt beispielsweise die große Septime (j7) vor dem Grundton. Dafür enthält das zweite Motiv die große Septime (j7). Das zweite Motiv eicht den Chor auf die gerade geforderte Tonart. Hier werden nur Akkordtöne in einer auf oder absteigenden Tonfolge gespielt (auch Arpeggios genannt). Der A7-Akkord enthält sowohl den Leitton (j7) der zum Grundton (1) hin leitet, als auch den Strebeton (4) die zur Durterz (3) hin strebt. Mit den zwei spannungsreichen Tönen, die sich zum Grundakkord auflösen wollen, wird der Chor auf die Durtonart eingenordet. Hier brauche ich dir nicht zu erklären, wo der Grundton D ist. :[[Datei:C-Major-Scale_on_the_fretboard_first_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A-(Bb-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F-)Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Einsingen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major c8^\markup { \bold {C} } d e f g f e d | c1 c8 d e f g f e d | \once \override NoteHead #'color = #red c1 \break c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | c1^\markup { \bold {C} } c4^\markup { \bold {C} } e8 g | f4^\markup { \bold {G7} } d8 b | \set TabStaff.minimumFret = #0 \once \override NoteHead #'color = #red c1^\markup { \bold {C} } \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { c8 d e f g f e d | c1 c8 d e f g f e d c1 \break c4 e8 g | f4 d8 b | c1 c4 e8 g | f4 d8 b | c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> == Wie geht es weiter? == Solltest du als Quereinsteiger in diese Lektion gestolpert sein, dann schaue dir die erste Lektion zum [[Gitarre: Aufbau der CAGED-Skalenformen|Aufbau der CAGED-Skalenformen]] an. Insbesondere die Abschnitte, die hier übergangen wurden. Dannach kannst du mit der ersten CAGED-Skala in der D-Dur-Form weitermachen. <noinclude> {{Navigation zurückhochvor |zurücklink=Gitarre: CAGED-Skala G-Dur-Form |zurücktext=CAGED-Skala G-Dur-Form |hochlink=Gitarre: Die Major-Patterns |hochtext=Einführung: Major-Patterns |vorlink=Gitarre: CAGED-Skala D-Dur-Form |vortext=CAGED-Skala D-Dur-Form }} </noinclude> 2cgz28o9vcms6pd8mzesrjgrxce3zgy Pseudoprimzahlen: Lucas-Pseudoprimzahlen 0 117622 1090745 1089977 2026-09-13T10:04:09Z Hardy42 1911 /* Bezug zur quadratischen Gleichung */ D ungleich 0 1090745 wikitext text/x-wiki {{Navigation_Buch|Pseudoprimzahlen|Pseudoprimzahlen}} '''Lucas-Pseudoprimzahlen''' sind zusammengesetze natürliche Zahlen, die bestimmte Kriterien bezüglich der allgemeinen Lucas-Folgen erfüllen, die von allen ungeraden Primzahlen erfüllt werden.<ref name="enwiki">{{w|en:Lucas pseudoprime|Lucas pseudoprimes}}</ref> == Lucas-Folgen == Die Glieder der Lucasfolgen werden im Folgenden mit <math>U_k(P,Q)</math> und <math>V_k(P,Q)</math> bzw. <math>U_k</math> und <math>V_k</math> bezeichnet.<br> Sie sind wie folgt definiert: * Anfangswerte: ** <math>U_0 = 0,\quad U_1 = 1</math> ** <math>V_0 = 2,\quad V_1 = P</math> * Rekursionsformeln für <math>k > 1</math>: ** <math>U_k = P \cdot U_{k-1}-Q \cdot U_{k-2}</math> ** <math>V_k = P \cdot V_{k-1}-Q \cdot V_{k-2}</math> === Bezug zur quadratischen Gleichung === Die charakteristische Gleichung der Lucas-Folgen <math>U_k(P,Q)</math> und <math>V_k(P,Q)</math> ist * <math>x^2 - Px + Q=0 \,</math>. Sie hat die Diskriminante <math>D = P^2 - 4Q</math> und die Wurzeln (Lösungen) * <math>a = \frac{P+\sqrt{D}}2\quad\text{und}\quad b = \frac{P-\sqrt{D}}2 \,</math>. Daher ist: * <math>a + b = P\, ,</math> * <math>a b = \frac{1}{4}(P^2 - D) = Q\, ,</math> * <math>a - b = \sqrt{D}\, </math>. Wenn <math>D \ne 0</math> ist, lassen sich fie Folgeglieder mit den Wurzeln <math>a</math> und <math>b</math> wie folgt ausdrücken: * <math>U_k = \frac{a^k-b^k}{a-b} \,</math> * <math>V_k = a^k+b^k \,</math> Diese Beziehungen sind allerdings für Primzahltests nur bedingt geeignet, weil <math>a, b, a^k</math> und <math>b^k</math> im Gegensatz zu <math>U_k</math> und <math>V_k</math> nicht ganzzahlig sind. === Beziehungen zwischen den Folgegliedern === Durch Beziehungen zwischen den Folgegliedern lassen sich diese auch für hohe Indizes, wie das z.B. für Primzahltests notwendig ist, effizient mit Ganzzahl-Arithmetik berechnen. Die Berechnung erfolgt dabei analog zum [[Pseudoprimzahlen: Programme#Binäres Potenzieren|binären Potenzieren]]. Die wichtigsten Beziehungen (<math>X_k</math> steht dabei für <math>U_k</math> bzw. <math>V_k</math>):<ref>{{w|en:Lucas_sequence#Other_relations|Lucas sequence: Other relations}}</ref> <math> \begin{array}{rclr} \text{Diskriminante:} \quad\quad \\ D & = & P^2 - 4Q \\ \text{Berechnung} \quad\quad \\ X_{2k} \text{ aus } X_k \text{: } \quad \\ U_{2k} & = & U_k V_k & (a) \\ V_{2k} & = & V_k^2 - 2Q^k & (b) \\ X_{m+k} \text{ aus } X_m \text{ und } X_k \text{: } \quad \\ U_{m+k} & = & \frac{U_m V_k+U_k V_m}{2} & (c) \\ V_{m+k} & = & \frac{V_m V_k+D \cdot U_m U_k}{2} & (d) \\ X_{k+1} \text{ aus } X_k \text{: } \quad \\ U_{k+1} & = & \frac{P\cdot U_{k}+V_{k}}{2} & (e)\\ V_{k+1} & = & \frac{D\cdot U_{k}+P \cdot V_{k}}{2} & (f) \end{array} </math> Zu <math>(c) \dots (f)</math>: Der Zähler ist immer gerade. Bei Berechnung Modulo <math>n</math> können die Zwischenergebnisse Modulo <math>2n</math> berechnet werden und das Endergebnis Modulo <math>n</math>. == Kongruenzen == Für jede ungerade, zu <math>Q</math> teilerfremde Primzahl <math>n\ </math>gelten folgende Kongruenzen: # <math>U_{n-\delta(n)} \equiv 0\ </math> mit <math>\ \delta(n) = \left(\tfrac{D}{n}\right)</math> #* stark, mit <math> n-\delta(n) = d \cdot 2^s, 2 \nmid d </math>: #** <math>U_{d} \equiv 0\ </math> oder #** <math>V_{d \cdot 2^r} \equiv 0\ </math> für ein <math>\ 0 \le r < s</math> # <math>V_{n-\delta(n)} \equiv 2Q^\tfrac{1-\delta(n)}{2} = \begin{cases} 2Q, & \text{wenn }\delta(n) = -1\\ 2, & \text{wenn }\delta(n) = \ 1 \end{cases}</math> # <math>U_{n} \equiv \left(\tfrac{D}{n}\right)</math> # <math>V_{n} \equiv P</math> Dabei ist <math>\left(\tfrac{D}{n}\right)</math> das [[w:Jacobi-Symbol|Jacobi-Symbol]]. Wenn <math>gcd(2DPQ, n) = 1</math> ist, d.&nbsp;h. <math>n</math> ungerade und teilerfremd zu <math>D, P</math> und <math>Q</math> ist, folgen aus beliebigen zwei der genannten Kongruenzen die anderen beiden (bei Kongruenz 1 ohne die starke Kongruenzbedingung).<ref name="Strengthening_BPSW"></ref> == Lucas-Pseudoprimzahlen == Baillie und Wagstaff definieren Lucas-Pseudoprimzahlen wie folgt:<ref name="lpsp"> http://mpqs.free.fr/LucasPseudoprimes.pdf </ref> Gegeben seien * die ganzzahligen Parameter <math>P > 0\ </math> und <math>Q \ </math>, * die entsprechenden Lucasfolgen <math>U_k (P, Q)</math> und <math>V_k(P, Q)</math>, * <math>D = P^2-4Q</math>, * <math>n</math> eine positive ganze Zahl und * <math>\delta(n) = \left(\tfrac{D}{n}\right)</math> der Wert des [[w:Jacobi-Symbol|Jacobi-Symbols]]. Mit jeder zu <math>Q</math> teilerfremden ungeraden Primzahl <math>n</math> ist folgende Kongruenz erfüllt: {{Formel2|Gl1|<math> U_{n - \delta(n)} \equiv 0 \pmod {n}. </math>|1}} Eine zusammengesetzte Zahl <math>n</math> heißt (Baillie-Wagstaff-) Lucas-Pseudoprimzahl, wenn diese Kongruenz erfüllt ist. Kongruenz [[#Gl1|(1)]] ist eine der beiden Kongruenzen, die für [[Pseudoprimzahlen: Frobenius-Pseudoprimzahlen| Frobenius-Pseudoprimzahlen]] erfüllt sein müssen. Daher ist jede Frobenius-Pseudoprimzahl auch eine Lucas-Pseudoprimzahl. === Euler-Lucas-Pseudoprimzahlen === Eine ungerade zusammengesetzte Zahl ist eine Euler-Lucas-Pseudoprimzahl, wenn <math>\gcd(n,Q D) = 1\ </math> und {{Formel2|Gl1.a|<math>U_{\frac{n-\delta}{2}} \equiv 0 \pmod n</math>, wenn <math>\left(\tfrac{Q}{n}\right) = 1\ </math> oder}} {{Formel2|Gl1.b|<math>V_{\frac{n-\delta}{2}} \equiv 0 \pmod n</math>, wenn <math>\left(\tfrac{Q}{n}\right) = -1\ </math> ist.<ref name="lpsp"></ref>}} Mit der Abhängigkeit der Kriterien vom Wert des Jacobi-Symbols besteht eine Analogie zu [[Pseudoprimzahlen: Eulersche Pseudoprimzahlen#Euler-Jacobi-Pseudoprimzahlen| Euler-Jacobi-Pseudoprimzahlen]] und ohne diese Abhängigkeit zu Eulerschen Pseudoprimzahlen. Aus <math>\ U_{2k} = U_k \cdot V_k\ </math> folgt {{Formel2| |<math>U_{n-\delta} = U_{\frac{n-\delta}{2}} \cdot V_{\frac{n-\delta}{2}} \equiv 0 \pmod n</math>.}} Daher sind Euler-Lucas-Pseudoprimzahlen auch Lucas-Pseudoprimzahlen mit den gleichen Parametern. === Starke Lucas-Pseudoprimzahlen === Mit der Zerlegung von <math>n - \delta(n)</math> in <math>n - \delta(n)=d\cdot2^s</math> mit <math>d</math> ungerade sind starke Lucas-Pseudoprimzahlen zusammengesetze Zahlen, für die eine der Kongruenzen {{Formel2|Gl1.1a|<math> U_d \equiv 0 \pmod {n} </math>|1.1a}} oder {{Formel2|Gl1.1b| <math> V_{d \cdot 2^r} \equiv 0 \pmod {n} </math> für ein <math>\ 0 \le r < s\ </math>|1.1b}} erfüllt ist. Aus <math>\ U_{2k} = U_k \cdot V_k\ </math> folgt, dass <math>\ U_{d \cdot 2^t} \equiv 0 \pmod {n} </math> für alle <math>\ t > r </math> ist. Wenn jedoch <math>\ U_k \cdot V_k\ \equiv 0 \pmod n</math> ist, und keiner der beiden Faktoren <math>(U_k,V_k) \equiv 0 \pmod {n} \ </math> ist, hat <math>n</math> mit beiden je einen gemeinsamen Teiler und kann keine Primzahl sein, ist aber Lucas-Pseudoprimzahl, jedoch keine starke. In diesem Fall sind <math>\gcd (n, U_k)</math> und <math>\gcd (n, V_k)</math> Teiler von <math>n</math> (nicht unbedingt Primteiler). Starke Lucas-Pseudoprimzahlen sind auch Euler-Lucas-Pseudoprimzahlen<ref name="lpsp"></ref> und Lucas-Pseudoprimzahlen mit den gleichen Parametern. Umgekehrt ist jede Euler-Lucas-Pseudoprimzahl der Form <math>\ n - \delta(n) = 4\cdot k + 2\ </math>(also wenn <math>n - \delta(n) </math> nicht durch 4 teilbar ist) starke Lucas-Pseudoprimzahl, da in diesen Fällen <math>s = 1</math> ist, und damit die Kriterien für Euler-Lucas-Pseudoprimzahlen denen für starke Lucas-Pseudoprimzahlen entsprechen. ==== Extrastarke Lucas-Pseudoprimzahlen==== sind starke Lucas-Pseudoprimzahlen mit Parametersatz <math>(P,Q)</math>, wobei ''Q'' = 1 ist, die eine der Bedingungen {{Formel2|Gl15|<math> U_d \equiv 0 \pmod {n} \text{ und } V_d \equiv \pm 2 \pmod {n} </math>|}} oder {{Formel2|Gl16|<math> V_{d \cdot 2^r} \equiv 0 \pmod {n} </math> für ein <math> 0 \le r < s-1</math>|}} erfüllen.<ref name="enwiki"></ref> Extrastarke Lucas-Pseudoprimzahlen sind auch starke Lucas-Pseudoprimzahlen mit den gleichen Parametern <math>(P,Q)</math>. Aus <math>\ V_d \equiv \pm 2 \pmod {n}\ </math> folgt <math>\ V_{2d} = V_d^2 - 2Q \equiv 2 \pmod {n}\ </math> und <math>\ V_{d\cdot2^s} = V_{n+1} \equiv 2 \pmod {n}</math>.<br> Aus <math>\ V_{d \cdot 2^r} \equiv 0 \pmod {n} \ </math> für ein<math>\ r < s-1</math> folgt <math>\ V_{d\cdot2^{r+1}} = V^2_{d\cdot2^{r}} - 2Q \equiv -2 \pmod {n}\ </math> und daraus <math>\ V_{d\cdot2^s} = V_{n+1} \equiv 2 \pmod {n} </math>.<br> Daher erfüllen alle extrastarken Lucas-Pseudoprimzahlen auch [[#Kongruenzen|Kongruenz 2]]. Von <math>n</math> abhängige Parameterauswahl:<br>Es wird das kleinste <math>P \ge 3 </math> gewählt, mit dem <math>\left(\tfrac Dn\right) = -1</math> ist; dabei ist <math>D = P^2 - 4 </math>, weil <math>Q = 1\ </math> ist. Die ersten extrastarken Lucas-Pseudoprimzahlen sind dann 989, 3239, 5777, 10877, 27971, 29681, 30739, 31631, 39059, 72389, 73919, 75077.<ref name="statistics"></ref> <br> Es sind keine Überschneidungen mit starken Pseudoprimzahlen zur Basis 2 bekannt. === Absolute Lucas-Pseudoprimzahlen === Eine absolute Lucas-Pseudoprimzahl zur Diskriminante D ist eine zusammengesetzte ganze Zahl <math>n</math>, die [[#Kongruenzen|Kongruenz 1]] mit allen Parameterpaaren (P, Q) mit der selben Diskriminante <math>D = P^2 - 4Q</math> und <math>gcd(n, DQ) = 1</math> erfüllt. Eine zusammengesetzte Zahl <math>n</math> ist genau dann eine absolute Lucas-Pseudoprimzahl, wenn sie quadratfrei ist und für all ihre Primteiler (<math>p</math>) <math>p - \left(\tfrac Dp\right) \Big| \ n - \left(\tfrac Dn\right)</math> (Williams' Kriterium) gilt. Beispiel: <math> 323 = 17 \cdot 19 </math> ist absolute Lucas-Pseudoprimzahl zur Diskriminante <math>D=5</math>; * <math>17 - \left(\tfrac {5}{17}\right) = 18</math>, * <math>19 - \left(\tfrac {5}{19}\right) = 18</math>, * <math>323 - \left(\tfrac {5}{323}\right) = 324</math>, * <math>18</math> teilt <math>324</math>. Parameterpaare mit <math>D = P^2 - 4Q = 5</math> sind zum Beispiel <math>(P, Q) = (1, -1), (3, 1), (5, 5)</math>. == Selfridge-Lucas-Pseudoprimzahlen == Ein Lucas-Primzahltest ist am nützlichsten, wenn <math>D</math> so gewählt wird, dass der Wert des Jacobi-Symbols <math>\left(\tfrac{D}{n}\right) = -1</math> ist. John Selfridge hat dafür folgendes Parameterauswahlverfahren empfohlen:<br> Gewählt wird das erste <math>D</math> aus <math>\ D = (2 \cdot k + 1) \cdot (-1)^k = 5, -7, 9, ...\ </math>mit <math>k > 1</math>, das die Bedingung :<math>\left(\tfrac{D}{n}\right)=-1</math> erfüllt, was voraussetzt, dass <math>n</math> und <math>D</math> teilerfremd sind. <br> Nachdem <math>D</math> auf diese Weise bestimmt wurde, werden die Parameter <math>P=1</math> und <math>Q=(1-D)/4\ </math> gesetzt. Mit <math>\left(\tfrac{D}{n}\right)=-1</math> ist <math>n - \delta(n) = n + 1</math> und <math>U_{n - \delta(n)} = U_{n + 1}</math>. Für jede Primzahl n gilt dann [[#Kongruenzen|Kongruenz 1]] mit <math>\delta(n) = -1</math>: {{Formel2|Gl2|<math> U_{n+1} \equiv 0 \pmod {n}. </math>|2}} Zusammengesetzte Zahlen, für die diese Kongruenz erfüllt ist, sind '''Selfridge-Lucas-Pseudoprimzahlen'''.<br> Die ersten sind 323, 377, 1159, 1829, 3827, 5459, 5777, 9071, 9179, 10877. '''Anmerkungen:''' Wenn <math>\left(\tfrac{D}{n}\right)=0</math> ist, haben <math>n</math> und <math>D</math> einen gemeinsamen Teiler, und <math>n</math> ist zusammengesetzt, wenn nicht <math>n = D = prim\ </math> ist. Da das beschriebene Auswahlverfahren für Primzahltests vorgesehen ist, wird in solchen Fällen der Test abgebrochen. Deshalb gibt es auch keine durch 5 teilbaren Selfridge-Lucas-Pseudoprimzahlen. Es wird nicht mit <math>D = -3\ </math> begonnen, weil dann <math>P = Q = 1</math> und Kongruenz [[#Gl1|(1)]] mit allen ungeraden Zahlen erfüllt wäre. Wenn <math>n</math> eine Quadratzahl ist, gibt es kein <math>D</math>, mit dem obengenannte Bedingung erfüllt ist; dies sollte also vorher oder während des Auswahlverfahrens geprüft werden. Im Umkehrschluss bedeutet das auch, dass <math>n</math> keine Quadratzahl ist, wenn ein <math>D</math> gefunden wurde, das diese Bedingung erfüllt. <math>\left(\tfrac{D}{n}\right) \ne -1</math>, wenn <math>D</math> eine Quadratzahl ist, daher erfüllen Quadratzahlen die Bedingung nicht. Alle Beträge von <math>D</math>, die größer als 15 sind, sind Primzahlen. <math>|D|</math> kann beliebig groß werden, z.&nbsp;B. größer als 100, wenn <math>n</math> das Produkt aller Primzahlen unter 100 plus 1 ist; im Mittel führen aber weniger als 2 Versuche, ein geeignetes <math>D</math> zu finden, zum Ziel.<ref name="lpsp"></ref> === Starke Selfridge-Lucas-Pseudoprimzahlen === '''Starke Selfridge-Lucas-Pseudoprimzahlen''' sind zusammengesetze Zahlen, für die eine der Bedingungen {{Formel2|Gl3|<math> U_d \equiv 0 \pmod {n} </math> mit <math>\ n+1 = d\cdot2^s\ </math> und <math>d\ </math> ungerade|3}} oder {{Formel2|Gl4| <math> V_{d \cdot 2^r} \equiv 0 \pmod {n} </math> für ein <math>\ 0 \le r < s\ </math>|4}} erfüllt ist.<br> Die ersten starken Selfridge-Lucas-Pseudoprimzahlen sind 5459, 5777, 10877, 16109, 18971, 22499, 24569, 25199, 40309, 58519.<br> Selfridge-Lucas-Pseudoprimzahlen gehören zu den wichtigsten Pseudoprimzahlen, weil der Selfridge-Lucas-Primzahltest Teil des Baillie-PSW-Primzahltests ist. === Selfridge-Frobenius-Pseudoprimzahlen === [[#Gl2|Kongruenz 1]] ist eine der beiden Kongruenzbedingungen, die [[Pseudoprimzahlen: Frobenius-Pseudoprimzahlen| Frobenius-Pseudoprimzahlen]] erfüllen. Bei Auswahl der Parameter <math>(P, Q)</math> wie oben, also mit <math>\left(\tfrac{D}{n}\right)=-1</math>, ist die zweite ([[#Kongruenzen|Kongruenz 2]]) {{Formel2|Gl5|<math> V_{n+1} \equiv 2 Q \pmod {n}</math>. |5}} Weniger als ein Viertel der starken Lucas-Pseudoprimzahlen mit gleichen Parametern erfüllt auch [[#Gl5|diese Kongruenz]]. Die ersten derartigen Pseudoprimzahlen sind 5777, 10877, 75077, 100127, 113573. === Eigenschaften === ==== Überschneidung mit starken Pseudoprimzahlen ==== Selfridge-Lucas-Pseudoprimzahlen sind selten auch [[Pseudoprimzahlen: Starke Pseudoprimzahlen| Starke Pseudoprimzahlen]]; unter 10<sup>15</sup> gibt es nur zwei starke Selfridge-Lucas-Pseudoprimzahlen, die auch starke Pseudoprimzahlen zu irgendeiner Basis unter 128 sind: 5777 (=76<sup>2</sup>&nbsp;+&nbsp;1) zur Basis 76 und 104107121 zur Basis 104. Von den ersten 10 sind 4 zu keiner Basis zwischen 1 und n&nbsp;-&nbsp;1 stark pseudoprim, die anderen 6 zu maximal 48 Basen (18971). Von den 474971 starken Selfridge-Lucas-Pseudoprimzahlen unter 10<sup>15</sup> sind nur 154993 starke Pseudoprimzahlen zu irgendeiner Basis <math>a</math> mit <math>a \ne 1\ und\ a \ne n-1</math>; das ist ein Anteil von ca. 33%, während der Anteil starker Pseudoprimzahlen an den ungeraden zusammengesetzten Zahlen im selben Bereich bei ca. 45% liegt.<br> Es wurde nachgewiesen, dass es unter 2<sup>64</sup> keine zusammengesetzen Zahlen gibt, die sowohl Selfridge-Lucas-Pseudoprimzahlen als auch starke Pseudoprimzahlen zur Basis 2 sind. Auch über dieser Grenze wurde noch keine solche Zahl gefunden. Allerdings gibt es Parameter, mit denen starke Pseudoprimzahlen zur Basis 2 gleichzeitig starke Lucas-Pseudoprimzahlen sind, zum Beispiel ist 8321 starke Pseudoprimzahl zur Basis 2 und starke Lucas-Pseudoprimzahl mit den Parametern <math>P = 92, Q = 143</math>, <math>\left(\tfrac{D}{n}\right) = -1 </math> und erfüllt auch Kongruenz 2. ==== Teiler ==== Starke Selfridge-Lucas-Pseudoprimzahlen lassen sich häufig als Produkte der Form {| |- |<math>\ q = (2\cdot k \cdot x + 1) \cdot (2 \cdot m \cdot x - 1)\ </math> mit <math>\ x \in \N</math>, |- | <math>\ \gcd(k, m) = 1\ </math>und |- | <math>\ 0 < k \ll q,\ 0 < m \ll q\ </math> |} ausdrücken. Umgekehrt ist der Anteil starker Selfridge-Lucas-Pseudoprimzahlen bei solchen Produkten deutlich höher als bei ungeraden Zahlen allgemein. ==== Häufigkeit ==== Lucas-Pseudoprimzahlen sind viel seltener als Primzahlen, wie folgende Tabelle zeigt. {| class="wikitable" style="text-align:right;" |+ Anzahl der Lucas-Pseudoprimzahlen im Vergleich<br> zu Primzahlen und fermatschen Pseudoprimzahlen |- ! !! !! colspan=2 | Fermat !! colspan=4 | Selfridge-Lucas !! !! |- ! Obergrenze x !! Primzahlen<ref>{{w|Primzahlsatz#Zahlenbeispiele|Primzahlsatz}}</ref>!! psp(2) !! spsp(2)<ref name="statistics">{{:Pseudoprimzahlen: Vorlage:Statistics}}</ref> !! [[#Selfridge-Lucas-Pseudoprimzahlen|lpsp]] !! [[#Starke Selfridge-Lucas-Pseudoprimzahlen|slpsp]]<ref name="statistics"></ref> !! [[#Selfridge-Frobenius-Pseudoprimzahlen|vlpsp(1,&nbsp;-1)]] !! [[#Lucas-V-Pseudoprimzahlen|vpsp]]<ref name="Strengthening_BPSW"></ref> !! lpsp &<br> psp(2) !! slpsp: [[#Anker:FZ|f(x)<sup>(I) </sup>]] |- | 10<sup>9</sup> || 50.847.534 || 5.597 || 1.282 || 5.485 || 1.415 || 304 || 1 || 0 || 4,1&middot;10<sup>-6</sup> |- | 10<sup>12</sup> || 37.607.912.018 || 101.629 || 22.407 || 116.928 || 25.542 || 5.339 || 3 || 0 || 2,3&middot;10<sup>-7</sup> |- | 10<sup>15</sup> || 29.844.570.422.669 || 1.801.533 || 419.489 || 2.402.549 || 474.971 || 101.788 || 5 || 0 || 1,2&middot;10<sup>-8</sup> |} <sup>(I) </sup>{{Anker|FZ}}Mittlerer Anteil [[Pseudoprimzahlen: Starke Pseudoprimzahlen#Anzahl der Basen|falscher Zeugen]] beim Miller-Rabin-Test. ==== Restklassen ==== Starke Selfridge-Lucas-Pseudoprimzahlen liegen wesentlich häufiger in der Restklasse -1 modulo kleiner Zahlen <math>(m)</math> als in anderen Restklassen. Folgende Tabelle zeigt die Verteilung der starken Selfridge-Lucas-Pseudoprimzahlen bis 10<sup>15</sup> auf Restklassen modulo <math>m</math> an ein paar Beispielen. {|class="wikitable" style="text-align:right;" ! !! colspan="8" | Anzahl starker Selfridge-Lucas-Pseudoprimzahlen in Restklasse |- ! m !! style="text-align:center"| 0 !! style="text-align:center"| 1 !! style="text-align:center"| 2 !! style="text-align:center"| 3 !! style="text-align:center"| 4 !! style="text-align:center"| 5 !! style="text-align:center"| 6 !! style="text-align:center"| 7 |- | 3 || 656 || 78914 || '''395401''' |- | 5 || 0 || 81600 || 65141 || 36647 || '''291583''' |- | 7 || 15 || 55752 || 75056 || 33871 || 54977 || 41234 || '''214066''' |- | 8 || 0 || 74329 || 0 || 136178 || 0 || 73660 || 0 || '''190804''' |} == Lucas-V-Pseudoprimzahlen == Wenn Selfridges Methode <math>D = 5</math> (und damit <math>Q = -1</math>) ergibt, können die Parameter so geändert werden, dass <math>P = Q = 5</math> ist; dabei bleibt <math>D</math> unverändert<ref name="Strengthening_BPSW">https://arxiv.org/abs/2006.14425 Robert Baillie; Andrew Fiori; Samuel S. Wagstaff, Jr. (July 2021). "Strengthening the Baillie-PSW Primality Test". Mathematics of Computation. 90 (330): 1931–1955.</ref>. Für <math>D \ne 5</math> bleiben <math>P</math> und <math>Q</math> unverändert. Zusammengesetzte Zahlen, die mit diesem modifizierten Parameterauswahlverfahren [[#Gl5|Kongruenz 2]] erfüllen, werden Lucas-V-Pseudoprimzahlen (''vpsp'') genannt. Diese sind sehr selten: bis 10<sup>15</sup> gibt es nur 5: 913, 150267335403, 430558874533, 14760229232131 und 936916995253453; keine davon erfüllt auch [[#Gl2|Kongruenz 1]] oder ist starke Pseudoprimzahl zu irgendeiner Basis unter 3,9⋅10<sup>10</sup>. {| class="wikitable" style="text-align:right;" |+ Falsche Zeugen bei Fermat- und Miller-Rabin-Test ! !! colspan=2 | &nbsp;Fermat-Test, falsche Zeugen&nbsp; !! colspan=2 | &nbsp;Miller-Rabin-Test, falsche Zeugen&nbsp; |- ! style="text-align:right;" |n !! style="text-align:right;" |Anzahl !! style="text-align:right;" |kleinster !! style="text-align:right;" |Anzahl !! style="text-align:right;" |kleinster |- | 913 || 2 || 331 || 0 || - |- | 150267335403 || 30 || 6203146387 || 0 || - |- | 430558874533 || 142 || 1078176182 || 52 || 39764030759 |- | 14760229232131 || 34 || 310097526008 || 16 || 969257047267 |- | 936916995253453 || 46 || 1349585374882 || 4 || 62837152221620 |} Keine der Fermatschen Pseudoprimzahlen zur Basis 2 bis 2<sup>64</sup> ist auch Lucas-V-Pseudoprimzahl mit der obengenannten Parameterauswahl. == Pell-Pseudoprimzahlen == Mit den Parametern <math>\ P = 2,\ Q = -1\ </math> ist <math>\ U_n</math> die Pell-Folge. <br> Für Pell-Pseudoprimzahlen gibt es drei alternative Definitionen, jeweils mit obengenannten Parametern:<br> Pell-Pseudoprimzahlen sind {| |style="vertical-align:top;"|a)|| zusammengesetze Zahlen mit denen Kongruenz [[#Gl1|(1)]] erfüllt ist. <br> Damit sind Pell-Pseudoprimzahlen also (Baillie-Wagstaff-) Lucas-Pseudoprimzahlen mit den Parametern P&nbsp;=&nbsp;2 und Q&nbsp;=&nbsp;-1. <br> Die ersten Pseudoprimzahlen sind dann 35, 169, 385, 779, 899, 961, 1121, 1189, 2419.<br> Die ersten [[#Gl1.1a|starken]] Pseudoprimzahlen mit diesen Parametern sind 169, 961, 1121, 3827, 6441, 6601, 7801, 8119. |- |style="vertical-align:top;"|b) || zusammengesetze Zahlen mit denen <math> \ U_n \equiv \left(\tfrac{2}{n}\right) \pmod {n}</math> erfüllt ist. <br>Dies entspricht der obengenannten [[#Kongruenzen|Kongruenz&nbsp;3]]:<math> \ U_n \equiv \left(\tfrac{D}{n}\right) = \left(\tfrac{8}{n}\right) \pmod {n}</math>. <br>Auf Grund der Multiplikativität des Jacobi-Symbols gilt mit <math>D = 8: \ \left(\tfrac{8}{n}\right) = \left(\tfrac{2^3}{n}\right) = \left(\tfrac{2}{n}\right)^3 = \left(\tfrac{2}{n}\right) \cdot \left(\tfrac{2}{n}\right)^2 = \left(\tfrac{2}{n}\right)</math>. <br> Die ersten Pseudoprimzahlen sind dann 169, 385, 741, 961, 1121, 2001, 3827, 4879, 5719, 6215. |- |style="vertical-align:top;" |c) || ungerade zusammengesetze Zahlen mit denen <math>V_n(P,Q) \equiv P \pmod{n}</math> erfüllt ist. Pell-Pseudoprimzahlen nach dieser Definition sind damit [[Pseudoprimzahlen: Bruckman-Lucas-Pseudoprimzahlen#Dickson-Pseudoprimzahlen| Dickson-Pseudoprimzahlen]] mit den Parametern P&nbsp;=&nbsp;2 und Q&nbsp;=&nbsp;-1 (D&nbsp;=&nbsp;8). <br> Die ersten Pseudoprimzahlen sind dann 169, 385, 961, 1105, 1121, 3827, 4901, 6265, 6441, 6601, 7107, 7801, 8119. |} Da zur effizienten Berechnung von <math>U_n</math> für große <math>n</math> auch <math>V_n</math> berechnet werden muss, können mit wenig Mehraufwand beide Bedingungen aus b) und c) geprüft werden. Die ersten Pseudoprimzahlen, die diese Bedingungen erfüllen, sind 169, 385, 961, 1121, 3827, 6265, 6441, 6601, 7801, 8119, 10945, 13067, 15841, 18241, 19097. === Häufigkeit === {| class="wikitable" style="text-align:right;" |+ Anzahl der Pell-Pseudoprimzahlen und Überschneidung<br> mit fermatschen und Lucas-Pseudoprimzahlen |- ! colspan="4" | !! colspan="5" |gleichzeitig Pell & |- ! Obergrenze x !! Pell (b)<ref name="statistics"></ref> !! [[#Anker:FZ|f(x)<sup>(I)</sup>]] !! Pell (b&c)!! PsP(2) !! sPsP(2) !! [[#Selfridge-Lucas-Pseudoprimzahlen|lpsp]] !! [[#Starke Selfridge-Lucas-Pseudoprimzahlen|slpsp]] !! [[#Zusätzliche Kongruenzbedingung|vlpsp(1,&nbsp;-1)]] |- | 10<sup>3 </sup>&nbsp; || 4 || 0.025 || 3 || 1 || 0 || 0 || 0 || 0 |- | 10<sup>4 </sup>&nbsp; || 18 || 0.011 || 10 || 2 || 0 || 1 || 0 || 0 |- | 10<sup>5 </sup>&nbsp; || 63 || 0.013 || 41 || 6 || 2 || 3 || 0 || 0 |- | 10<sup>6 </sup>&nbsp; || 200 || 0.011 || 119 || 14 || 2 || 9 || 2 || 0 |- | 10<sup>7 </sup>&nbsp; || 603 || 0.008 || 369 || 35 || 7 || 28 || 11 || 3 |- | 10<sup>8 </sup>&nbsp; || 1722 || 0.007 || 1058 || 82 || 16 || 61 || 20 || 6 |- | 10<sup>9 </sup>&nbsp; || 4851 || 0.006 || 2973 || 247 || 50 || 184 || 52 || 16 |- | 10<sup>10</sup> || 12946 || 0.006 || 8064 || 666 || 139 || 485 || 126 || 46 |- | 10<sup>11</sup> || 34265 || 0.006 || 21504 || 1638 || 328 || 1191 || 310 || 116 |- | 10<sup>12</sup> || 89714 || 0.006 || 57083 || 4118 || 867 || 2916 || 777 || 287 |- | 10<sup>13</sup> || 233541 || 0.006 || 149940 || 10404 || 2210 || 7272 || 2024 || 783 |} == Quellen == <references/> {{Navigation Text| |links= [[Pseudoprimzahlen: Lucas-Pseudoprimzahlen| Lucas-Pseudoprimzahlen]] |mitte= [[Pseudoprimzahlen: Auf Lucas-Folgen basierende Pseudoprimzahlen|Übersicht: Lucas-Pseudoprimzahlen]] |rechts= }} 52o8l8aee3u91u5rmdzxtwn603ldo91 Ing Mathematik: Python 0 117969 1090718 1090715 2026-09-12T14:26:01Z Intruder 1513 /* Namensgebung */ aktuelleres Bild 1090718 wikitext text/x-wiki {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} = Hallo Welt und allgemeine Hinweise = == Was ist Python == * Python ist eine universelle höhere Programmiersprache. * Python ist objektorientiert. * Python ist Open-Source (Python Software Foundation License). * Python ist für viele Betriebssysteme erhältlich (z.B. für Linux, MS Windows, macOS). * Python ist ein Interpreter. * Python ist durch Module fast beliebig erweiterbar. * Python als Programmiersprache ist case-sensitive - d.h. Groß- und Kleinschreibung ist relevant bei der Eingabe von Befehlen. * Python ist in etlichen Anwendungsprogrammen (z.B. {{W|FreeCAD}}, {{W|LibreOffice}}, {{W|GIMP}}, {{W|Blender (Software) | Blender}}) als Makrosprache verwendbar. {{Wikipedia | Python (Programmiersprache)}} == Python installieren == === MS Windows === Laden Sie das aktuelle Python-Paket von der Webseite [https://www.python.org/] herunter. Weiter geht es wie bei jedem anderen größeren zu installierenden Programm. Einfach das Installationsprogramm im Explorer doppelklicken und den Anweisungen des Setup-Programmes folgen. === Linux === Entweder ist Python bereits standardmäßig installiert, ansonsten ist die Installation mittels Paketmanagementsystem einfach möglich. Aber auch die Spyder-Entwicklungsumgebung ([https://www.spyder-ide.org]) bietet einen guten Einstieg mit Python (das gilt auch für MS Windows). Spyder bringt auch schon etliche wichtige Module standardmäßig mit. == Python starten == === MS Windows === Das Icon für das Python-Programm doppelklicken. Und schon startet das Programm. [[Datei:PythonIng_start1.jpg]] Python im interaktiven Modus präsentiert sich dann so: Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> Alternativ kann das Programm auch über die Eingabeaufforderung oder die PowerShell gestartet werden: c:\devel\Python>python.exe Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> === Linux === Tippen Sie einfach das Wort „python“ (oder unter openSUSE Tumbleweed z.B. auch „python3.11“ oder „python3.13“) in einem Linux-Terminal ein, schließen den Befehl mit der RETURN-Taste ab, und schon startet Python im interaktiven Modus: Python 3.13.12 (main, Feb 09 2026, 22:37:44) [GCC] on linux Type "help", "copyright", "credits" or "license" for more information. >>> Es gibt auch noch andere Möglichkeiten Python zwecks Programmausführung zu starten, z.&nbsp;B. den {{W|Shebang}} (<code>#!</code>) am Beginn eines Python-Scripts. Das Script sei als Script.py gespeichert. Dann kann das Script mit ./Script.py ausgeführt werden. Für openSUSE Tumbleweed sei nachfolgend ein lauffähiges "Hallo Welt!"-Script angegeben. Es wird in diesem Script der Python-Interpreter in der Version 3.13 verwendet : #!/usr/bin/python3.13 print("Hallo Welt!") Die Berechtigungen zum Ausführen der Datei müssen natürlich noch richtig gesetzt werden, z.B. mittels <code>chmod 777 Script.py</code>. <small><code>chmod</code> ist die Abkürzung für"'''ch'''ange file '''mod'''e bits".</small> <small>Die "Maske" <code>777</code> ist nur für Testzwecke sinnvoll, weil sie leicht zu merken ist und für alle Benutzer alle Zugriffsberechtigungen ('''r'''ead/'''w'''rite/e'''x'''ecute für owner/group/others) setzt. Im richtigen Einsatz wird man das aus Sicherheitsgründen nicht so handhaben, sondern nur die Berechtigungen setzen, die unbedingt erforderlich sind. Welche Zugriffsberechtigungen gesetzt sind, kann man z.B. mit dem Befehl <code>ls -l</code> oder <code>ll</code> ('''l'''i'''s'''t directory contents) erfragen. Aber dazu im Moment genug. Erfahrene Linux-Nutzer kennen das ohnehin und Anfänger sollen jetzt nicht mit Linux-Interna überfordert werden. Bei Bedarf siehe die Linux-Man-Pages oder dezidierte Bücher zu Linux.</code></small> <small>Oder das Script wird in einen Pfad verschoben, in dem sich ausführbare Programme generell befinden (welche Verzeichnisse im PATH liegen, kann bspw. mit <code>echo $PATH</code> abgefragt werden). Das Script kann dann wie ein normales Programm ohne weitere Angaben mit Script.py gestartet werden. Alternativ wird nicht das Script an sich verschoben, sondern nur ein symbolischer Link angelegt, z.B. mit <code>ln -s ~/tmp/Script.py ~/.local/bin/Script.py</code>. <code>~/.local/bin</code> sei ein im PATH gelegenes Verzeichnis. Dies sind aber schon Features für fortgeschrittene Linux-Benutzer und werden am Anfang eher selten benötigt.</small> == Ein paar Worte zur Erklärung == === Tests === Getestet wurden die Beispiele unter den Betriebssystemen * MS Windows 10 mit der Python-Version 3.12.0 (teilweise auch mit 3.12.2 und 3.13.1; nur die Inhalte die bis spätestens Juli 2025 erstellt wurden) * MS Windows 11 ab der Python-Version 3.13.4 (nur zum Teil; ab Juli 2025) * openSUSE Leap 15.6 mit der Python-Version 3.11.12 (Spyder, nur vereinzelt) und zum Teil mit 3.12.11 (ab Juli 2025 bis November 2025). * openSUSE Tumbleweed ab der Python-Version 3.13.9 (nur vereinzelt, ab November 2025) === Popularität === * An Beliebtheit rangiert Python mit Stand September 2026 mit einem Rating von 17,76% an 1. Stelle vor C und C++ (lt. [https://www.tiobe.com/tiobe-index/ TPCI - TIOBE Programming Community Index]). * Lt. [https://innovationgraph.github.com/global-metrics/programming-languages GitHub Top 50 Programming Languages Globally] lag Python im Q1/2026 auf Rang 2, vor TypeScript und hinter JavaScript. * [https://pypl.github.io/PYPL.html PYPL] (Popularity of Programming Language Index) ist ein anderer Popularitätsindex für Programmiersprachen. Auch hier liegt Python mit großem Vorsprung auf dem ersten Platz (52,08%), gefolgt von Java (13,34%) und C/C++ (7,99%) (Stand September 2026). === Namensgebung === Der Name "Python" rührt von der Komikertruppe {{W|Monty Python}} her. Die Icons für Python (z.B. Python selbst, Eric IDE, IDLE) sind aber durch die Python-Schlangenart symbolisiert. <gallery> Python-logo-notext.svg|Python-Logo Guido van Rossum in PyConUS24.jpg|{{W|Guido van Rossum}} (geb. 1956), der Erfinder von Python </gallery> == Ein erstes Programm == Kommentare werden in Python mit der Raute (#) eingeleitet. Sie werden vom Python-Interpreter ignoriert. Text kann mit der print-Funktion ausgegeben werden. Starten Sie Python und geben sie folgende Anweisungen zeilenweise ein >>> # Das ist ein Kommentar >>> print("Hallo Welt!") Als Ergebnis erhalten Sie Hallo Welt! Der Prompt (>>>) ist selbstverständlich nicht einzutippen, sondern wird vom Python-System geliefert. Strings können in Python entweder in Anführungszeichen (") gesetzt werden oder in Hochkommatas('). In diesem Text wird die erste Variante bevorzugt eingesetzt. Im Gegensatz zu Julia ist es hier egal, ob zwischen <code>print</code> und der öffnenden Klammer Leerzeichen stehen. = Python als Taschenrechner = == Allgemeines == Wir wollen 3 * 5 berechnen. Dazu starten wir Python im interaktiven Modus. Geben Sie dann die Formel >>> 3 * 5 ein, drücken die Taste ENTER/RETURN ({{Taste|↵}}) und erhalten als Ergebnis 15 Auch kompliziertere Ausdrücke sind möglich. Beispielsweise mit Winkelfunktionen, Quadratwurzeln etc. Wir wollen nun den Ausdruck <math>\sin\sqrt{15}</math> berechnen : >>> import math >>> math.sin(math.sqrt(15)) -0.6679052983383519 Als erstes wird das math-Modul importiert. Dann wird der mathematische Ausdruck berechnet. Eine andere Variante, die dasselbe Ergebnis liefert, ist >>> from math import * >>> sin(sqrt(15)) -0.6679052983383519 Es wird also aus dem Modul <code>math</code> alles importiert (erkennbar am <code>*</code>). Will man nicht alles importieren, so kann man das auch einschränken: >>> from math import sin, sqrt Beenden lässt sich das Python-Programm durch Eingabe von <code>exit()</code> (und natürlich ist zur Bestätigung die RETURN-Taste zu drücken). == Die Hilfefunktion von Python == Bei Eingabe der Anweisung <code>help</code> oder <code>help()</code> springt Python in den Hilfemodus. Eingabe: >>> help() Eingabe: help> math.sin Ausgabe: Help on built-in function sin in math: math.sin = sin(x, /) Return the sine of x (measured in radians). Für die komplette Python-Dokumentation siehe [https://docs.python.org/3/]. Verlassen kann man den Hilfemodus durch das Drücken von STRG-C, bzw. der Eingabe von q, quit oder exit mit anschließendem Drücken der RETURN-Taste. == Aufgaben == * Erkunden Sie die Tangensfunktion "tan" mittels Python-Hilfe (vergessen Sie nicht das math-Modul zu importieren und das <code>math.</code> vor <code>tan</code>) * Berechnen Sie mit Python den Ausdruck <math>\frac{1}{2}\cdot \text{e}^2 \cdot \tan(\pi/3)</math>. Siehe für die Exponentialfunktion im Python-Hilfesystem auch den Befehl <code>math.exp</code>. Alternativ kann auch die Konstante <code>math.e</code> eingesetzt werden. Potenzieren kann man bei Python mit dem **-Operator (z.B. 2**3 = 8). Für <math>\pi</math> gibt es <code>math.pi</code>. = Python als Scriptsprache = Häufig wird man aber kompliziertere Anweisungsfolgen verarbeiten müssen. Diese will man normalerweise nicht jedesmal neu eingeben, sondern in einer Datei speichern und diese Datei dann zur Ausführung bringen. Speichern Sie dazu folgenden Code in einer Textdatei, z.B. unter MS Windows als c:\tmp\test1.py # Das ist ein Kommentar print("Hallo Welt!") Python-Dateien werden mit der Dateiendung .py versehen. Achten Sie darauf, dass vor dem print keine Leerzeichen vorhanden sind. Das ist eine Python-Eigenheit. Wie wir später sehen werden, nutzt Python Einrückungen als syntaktisches Mittel, z.B. um bei Schleifen den Schleifenkörper zu kennzeichnen. Danach bringen Sie die Skriptdatei test1.py (sozusagen das Hauptprogramm) folgendermaßen zur Ausführung: 1) Starten Sie unter MS Windows die Eingabeaufforderung (oder alternativ auch die Windows PowerShell). Das sieht dann etwa so aus: Microsoft Windows [Version 10.0.19045.3693] (c) Microsoft Corporation. Alle Rechte vorbehalten. C:\Users\xyz> : <small>Falls jemand nicht weiß, wie man die Eingabeaufforderung startet: Eine Möglichkeit ist, einfach in der Taskleiste von Windows das "Start"-Symbol &nbsp;([[Image:Windows_logo_-_2021_(Black).svg|10px]])&nbsp; mit der rechten Maustaste anklicken. "Ausführen" auswählen (oder alternativ für die PowerShell unter Windows 10 den Eintrag "Windows PowerShell", unter Windows 11 den Eintrag "Terminal"). Im sich öffnenden Dialogfenster gibt man in die "Öffnen"-Zeile das Wort <code>cmd</code> ein und mit "OK" wird das Ganze bestätigt.</small> 2) Wechseln Sie mittels <code>cd c:\tmp</code> in das Verzeichnis c:\tmp 3) Angenommen, Sie haben Python unter dem Pfad <code>c:\devel\Python\</code> installiert. Starten Sie das Programm so (der Prompt <code>c:\tmp></code>ist natürlich nicht mit einzutippen): c:\tmp>c:\devel\Python\python.exe test1.py 4) Wie erwartet ergibt sich folgende Ausgabe am Bildschirm Hallo Welt! Die Vorgehensweise unter Linux ist prinzipiell gleich. Die kleinen Unterschiede, wie z.B. der Slash statt dem Backslash in Pfadangaben, sollten für Linux-Benutzer keine Hürde darstellen. == Variablen == Variablenbezeichner können aus Buchstaben (A-Za-z), Ziffern (0-9) und Underscores (_) bestehen, dürfen aber nicht mit einer Zahl beginnen. Führende Underscores haben u.a. im Kontext mit der Objektorientierten Programmierung eine spezielle Bedeutung und sollten nicht für "normale" Variablenbezeichner verwendet werden. Gültige Variablenbezeichner wären also: xyz x1 _wert name_anzahl Theoretisch kann man auch Umlaute, griechische Buchstaben u.ä. in Variablenbezeichnern nutzen, z.B. ößÜ = 16 α = 134 print(ößÜ) print(α) Ausgabe: 16 134 Davon wird aber aus offensichtlichen Gründen ({{W|Englisch als Lingua franca}}) abgeraten. Das Eurozeichen (€) etc. darf man ohnehin nicht in Variablenbezeichnern verwenden, dies ergäbe einen Syntaxfehler. Siehe dazu auch [https://peps.python.org/pep-3131/]. Es gibt in Python etliche Schlüsselwörter (z.B. for, if oder return). Diese dürfen nicht als eigene Variablenbezeichner verwendet werden. Eine Liste aller Schlüsselwörter liefert das Script import keyword print(keyword.kwlist) <small>Übung: Speichern Sie dieses Script in eine Datei, z.B. in c:\tmp\test1.py. Führen Sie diese Datei aus, um die Liste der Schlüsselwörter auszugeben.</small> Da Python case-sensitiv ist, repräsentieren folgende Bezeichner verschiedene Variablen: xyz XYZ xYz Werte werden an Variablen mittels Gleich-Zeichen (=) zugewiesen. Im Folgenden wird der Code immer in der Datei c:\tmp\test1.py gespeichert. x = 5 y = 10 z = x*y print(z) Bringen Sie die Datei test1.py zur Ausführung, so erhalten Sie folgende Bildschirmausgabe 50 Sie können auch mehrere Anweisungen in einer Zeile durch Semikolon getrennt schreiben. Dies führt aber zu unübersichtlichem Code. x = 5; y = 10; z = x*y; print(z) Ausgabe: 50 Auch aus der Programmiersprache C/C++ oder Java bekannte Konstrukte können Sie verwenden, z.B. x = 5 # x = x - 2 x -= 2 print(x) Bildschirmausgabe: 3 Beachten Sie, dass mit dem =-Zeichen eine Wertezuweisung durchgeführt wird. Dies ist nicht äquivalent zum mathematischen =-Zeichen, wie am vorigen Beispiel zu ersehen ist. Den Inkrement-/Dekrementoperator (z.B. x++ oder x--) aus C/C++ oder Java kennt Python aber nicht. Variablen sind nicht an einen bestimmten Datentyp gebunden, folgendes ist mit Python problemlos möglich: import math wert = 10 print(wert) wert = 35.5 print(wert) wert = "Hallo" print(wert) wert = math.pi print(wert) Ausgabe: 10 35.5 Hallo 3.141592653589793 == Physische und logische Zeilen == In Python muss eine Anweisung in einer logischen Zeile Platz finden. Wird eine Anweisung aber zu lang für eine Zeile, dann kann sie in mehrere physische Zeilen unterteilt werden. Dies kann einerseits durch einen Backslash am Ende einer Zeile geschehen, z.B. a = 2 + \ 5 Dies stellt eine logische Zeile dar, die in zwei physische Zeilen unterbrochen ist. Geklammerte Ausdrücke werden automatisch zu einer logischen Zeile verbunden, z.B. a = (2 + 5) Achtung: Im ersten Beispiel darf nach dem Backslash nichts mehr stehen, auch kein Kommentar. Dies trifft im zweiten Bespiel nicht zu, hier könnte noch ein Kommentar folgen, z.B. a = (2 + # Kommentar 5) Auch für Strings gibt es Möglichkeiten, diese auf mehrere Zeilen aufzuspalten. # Kurzer String str1 = "ABC" # Langer String str2 = """Hallo Welt, Grüetzi Schwyzer, Servus an alle""" # Backslash str3 = "UVW\ XYZ" # Mit Klammern str4 = ("Sehr langer Text, der automatisch .............. " "in einer einzigen Variable zusammengefügt wird." ) print(str1) print(str2) print(str3) print(str4) Ausgabe: ABC Hallo Welt, Grüetzi Schwyzer, Servus an alle UVWXYZ Sehr langer Text, der automatisch .............. in einer einzigen Variable zusammengefügt wird. ==Hexadezimale, oktale, binäre und andere Zahlen== d = 1050 # Dezimalzahl h = 0xAA2 # Hexadezimalzahl o = 0o12 # Oktalzahl b = 0b100001101 # Binärzahl print(d) print(h) print(o) print(b) Ausgabe: 1050 2722 10 269 Groß- und Kleinbuchstaben sind in obigen Literalen übrigens egal. So kann man z.B. statt <code>0b1001</code> auch <code>0B1001</code> schreiben (siehe dazu [https://docs.python.org/3/reference/lexical_analysis.html#integer-literals]). Sie können auch dezimale in hexadezimale Zahlen umwandeln, usw.: h = hex(1050) # Dezimalzahl -> Hexadezimalzahl b = bin(1050) # Dezimalzahl -> Binärzahl o = oct(1050) # Dezimalzahl -> Oktalzahl print(h) print(b) print(o) Ausgabe: 0x41a 0b10000011010 0o2032 Gegeben sei die Zahl 121 zur Basis 3. Diese soll in eine Dezimalzahl umgewandelt werden. Das kann so geschehen: z = int("121", 3) print(z) Ausgabe: 16 Dass dies richtig ist, davon kann man sich folgendermaßen überzeugen: <math> 1 \cdot 3^2 + 2 \cdot 3^1 + 1 \cdot 3^0 = 9 + 6+ 1 = 16 </math> Zahlen übersichtlicher schreiben kann man auch mittels Underscore, z.B.: print("Eine Million (Variante 1) =", 1000000) print("Eine Million (Variante 2) =", 1_000_000) print("Eine Rechnung:", 2_000 * 400_000); Es ergibt sich bei beiden Varianten die gleiche Ausgabe. Variante 2 ist aber im Sourcecode leichter lesbar, detto die Zahlen in der Rechnung: Eine Million (Variante 1) = 1000000 Eine Million (Variante 2) = 1000000 Eine Rechnung: 800000000 == Strings und Platzhalter== Ein paar einfache Beispiele: print("Hallo {}" . format("Hugo")) print("Hallo {:s}" . format("Hugo")) print("Hallo %s" % "Hugo") Ausgabe: Hallo Hugo Hallo Hugo Hallo Hugo Python-Code (formatted string literals, Beispiel 1): str1 = "Hallo" str2 = "Hugo" print(f"{str1} {str2}") Ausgabe: Hallo Hugo Python-Code (formatted string literals, Beispiel 2): wert = 11.567 print(f"Ausgabe: {wert:.5f}") Ausgabe: Ausgabe: 11.56700 Komplexere Beispiele: print("Hallo {} und {}" . format("Hugo", "Mike")) print("Hallo {name1} und {name2}" . format(name2="Hugo", name1="Mike")) # Füllzeichen: * # Bündigkeit: > (=rechts), < (=links), ^ (=zentriert) # Feldweite: 10 # Typ: s (=String), f (=Gleitkommazahl), d (=Dezimalzahl) etc. print("Hallo {:*>10s}" . format("Hugo")) print("Hallo {:*<10s}" . format("Hugo")) Ausgabe: Hallo Hugo und Mike Hallo Mike und Hugo Hallo ******Hugo Hallo Hugo****** Python-Code: str = "Hallo\t%s\t%7.2f\t%10.2e\t%i" % ("Hugo", 12.34567, 34.567, 264) print(str) Ausgabe: Hallo Hugo 12.35 3.46e+01 264 == Unicode == Neben den bekannten ASCII-Zeichen lassen sich Zeichen auch mittels Unicode beschreiben. Griechische Buchstaben oder komplexere mathematische Operatoren - all das sollte kein Problem sein. Siehe auch {{W|Unicode}}, {{W|Liste der Unicodeblöcke}} und {{W|Unicodeblock Mathematische Operatoren}}. Im Folgenden werden ein paar Zeichen (Allquantor, Nabla-Operator, Existenzquantor), die man aus der Mathematik kennt, erzeugt. ch1 = "\N{FOR ALL}" ch2 = "\N{NABLA}" ch3 = "\u2203" print(ch1, ch2, ch3) Ausgabe: ∀ ∇ ∃ <small>Diese Ausgabe ergibt sich z.B. mit der IDLE-Shell oder mit Cygwin. Beim Ausführen über die Windows-Eingabeaufforderung oder Windows PowerShell unter MS Windows 10 erfolgt keine korrekte Darstellung. IDLE ist die mit Python mitgelieferte IDE ('''I'''ntegrated '''D'''evelopment '''E'''nvironment, Integrierte Entwicklungsumgebung). Gegen Ende dieses Textes wird IDLE kurz beschrieben. Das Problem mit der Windows Eingabeaufforderung lässt sich aber umgehen. Man muss nur eine Schriftart auswählen, die die Zeichen kennt, z.B. "DejaVu Sans Mono". Dazu klicken Sie einfach bei der Eingabeaufforderung mit der rechten Maustaste oben auf die weiße Leiste und wählen im aufpoppenden Fenster den Menüpunkt "Eigenschaften". Es öffnet sich ein Dialogfenster. Über den Reiter "Schriftart" lässt sich nun die Schriftart einstellen. Unter MS Windows 11 oder openSUSE Leap 15.6 (bash-Konsole) gibt es dieses Problem ohnehin nicht.</small> == Reguläre Ausdrücke == Python kennt auch {{W|Regulärer Ausdruck|reguläre Ausdrücke}}. Dazu gibt es in Python das Modul <code>re</code>. Beipielsweise sollen alle Zahlen (<math>\text{zahl}\in\mathbb{N}_0</math>) in einem String gesucht und ausgegeben werden. Als String sei gegeben: <code>3x Grüße und 100 Kekse.</code> Das Muster (Pattern) ist <code>\d+</code>. <code>\d</code> steht für eine Dezimalziffer 0-9. Das Plus-Zeichen (+) steht symbolisch für ein oder mehrere Zeichen des vorherigen Ausdrucks. Hier also ein oder mehrere Dezimalziffern. Es wird die Funktion <code>findall</code> aus dem Modul <code>re</code>verwendet. Python-Code: from re import findall str = "3x Grüße und 100 Kekse." pat = "\\d+" # Doppel-Backslashes müssen verwendet werden, sonst gibt Python eine Warnung aus! # alternativ: pat = r"\d+" # oder: pat = "[0-9]+" numb = findall(pat, str) print(numb) Ausgabe: ['3', '100'] Python kennt noch viele weitere Möglichkeiten mittels regulärer Ausdrücke zu hantieren. Dies soll hier aber nicht vertieft werden, da das Thema schon ziemlich speziell und komplex ist. Bei Bedarf siehe aber z.B. die Bücher ''Weigend, Seite 380ff'' und ''Ernesti, Kaiser'' [https://openbook.rheinwerk-verlag.de/python/28_001.html] oder die Python-Dokumentation [https://docs.python.org/3/library/re.html]. Auch [[Python unter Linux: Reguläre Ausdrücke]] liefert ein umfangreiches und brauchbares Python-2-Kapitel zu den regulären Ausdrücken. Die dort gelisteten Beispiele müssten ggf. vor Verwendung auf Python-3 umgeschrieben werden. <small>Wie macht man das? Dazu siehe z.B. [https://openbook.rheinwerk-verlag.de/python/43_001.html], [https://portingguide.readthedocs.io/en/latest/] oder [https://www.digitalocean.com/community/tutorials/how-to-port-python-2-code-to-python-3]</small> <small>Es gibt auch ein externes Modul ''regex'', das bei Bedarf extra installiert werden muss ([https://pypi.org/project/regex/]). Es bietet zusätzliche Funktionalität und gründlicheren Unicode-Support. Dies sei hier aber nur der Vollständigkeit halber erwähnt.</small> == Verzweigungen == === if === Die IF-Verzweigung sei aus anderen Programmiersprachen bereits bekannt. In {{W|Pseudocode}} lässt sie sich folgendermaßen darstellen: WENN bedingung TRUE führe block1 aus SONST führe block2 aus ENDE Als {{W|Aktivitätsdiagramm|UML-Aktivitätsdiagramm}} sieht das in etwa so aus: [[File:If-Then-Else-diagram.svg|200px]] Und als {{W|Nassi-Shneiderman-Diagramm|Nassi-Shneiderman-Struktogramm}} so: [[File:Zweiseitige Auswahl.png|250px]] In Python gibt es keinen expliziten ENDE-Kennzeichner. Stattdessen wird der Code durch Einrückungen strukturiert. Alles mit der gleichen Einrückungstiefe gehört zum selben Block. Dies zeichnet Python vor anderen Programmiersprachen aus. Die test1.py-Datei laute also wie folgt: x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: Der else-Zweig wird ausgefuehrt x ist groesser oder gleich 4 Man achte auch auf die Doppelpunkte in der if- und else-Zeile. Darauf vergisst man gerne, wenn man von anderen Programmiersprachen kommt. Folgendes wäre in Python ein Fehler (genauer gesagt ein IndentationError). x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Auch Nachstehendes würde nicht zum gewünschten Ergebnis führen (löst aber keine Fehlermeldung aus). Der letzte print-Befehl ist schon außerhalb der IF-ELSE-Verzweigung. x = 3 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: x ist kleiner als 4 x ist groesser oder gleich 4 Python kennt eine Reihe von Vergleichs- und Verknüpfungsoperatoren: <, <= ... kleiner (gleich) >, >= ... größer (gleich) == ... gleich != ... ungleich is ... identisch is not ... nicht identisch and ... AND or ... OR not ... NOT Beispielsweise: a = 5 b = 9 if a<=10 and b!=7: print("OK") else print("Nicht OK") Ausgabe: OK Der else-Block kann übrigens auch ersatzlos entfallen. Als Pseudocode sieht das so aus WENN bedingung TRUE führe block aus ENDE Mehrfache Verzweigungen werden durch das elif-Konstrukt erstellt. In Pseudocode: WENN bedingung1 TRUE führe block1 aus SONST WENN bedingung2 TRUE führe block2 aus SONST WENN bedingung3 TRUE führe block3 aus SONST führe block4 aus ENDE Ein Python-Beispiel: a = 14 if a<=10: print("<=5") elif a>11 and a<15: print("11 bis 15") elif a>16 and a<20: print("16 bis 20") else: print(">=20") Ausgabe: 11 bis 15 In Python gibt es auch die Schlüsselwörter <code>True</code> (für wahr) und <code>False</code> (für falsch). Man beachte, dass sie mit Großbuchstaben beginnen. Andere Schreibweisen wären ein Fehler. Sie gehören zum Datentyp <code>bool</code>. Ihnen sind auch die Zahlen <code>1</code> und <code>0</code> zugewiesen. Man beachte, dass {{W|Rundungsfehler}} auftreten können. D.h. man sollte bei der Verwendung von {{W|Gleitkommazahl|Gleitpunktzahlen}} niemals auf absolute Genauigkeit prüfen, sondern eine Toleranz (einen <math>\varepsilon</math>-Wert) vorgeben. Ein klassisches Beispiel, das ein falsches Ergebnis liefert, ist: i = 0.1 + 0.2 print(i) if i == 0.3: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 NOK Und das, obwohl man schon in der Volksschule lernt, dass 0.1 + 0.2 gleich 0.3 ist. Korrekt muss das obige Beispiel z.B. so umgeschrieben werden: ist = 0.1 + 0.2 soll = 0.3 epsilon = 0.000001 print(ist) if abs(ist-soll) < epsilon: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 OK Alternativ kann auch die <code>math.isclose()</code>-Funktion verwendet werden. Das sei aber hier nur erwähnt und nicht konkret ausgeführt. <u>Aufgabe:</u> Recherchieren Sie im Internet zum Thema <code>math.isclose()</code>-Funktion. === match === Ab Python 3.10 gibt es auch die match-Anweisung. Dies ist das Python-Pendant für die switch-Anweisung in anderen Programmiersprachen, geht aber bei näherer Betrachtung weit darüber hinaus. Hier nur ein einfaches Beispiel: x = "Hello" match x: case "Servus" | "Ciao": # or print("Servus an alle") case "Grüetzi": print("Grüetzi Schwyzer") case _: # other, default, sonstiges ... print("Hallo Welt") Ausgabe: Hallo Welt Als Struktogramm sieht das in etwa so aus: [[File:Mehrseitige Auswahl.png|250px]] Für nähere Details siehe z.B. [https://www.geeksforgeeks.org/python-match-case-statement/], [https://learnpython.com/blog/python-match-case-statement/], [https://docs.python.org/3/tutorial/controlflow.html#match-statements] und das Python Enhancement Proposal (PEP) 636 – Structural Pattern Matching: Tutorial [https://peps.python.org/pep-0636] und dort insbesondere den Anhang A - Quick Intro. <small><code>match, case, _</code> etc. sind sogenannte ''soft keywords''. Im Gegensatz zu den normalen Schlüsselwörtern dürfen ihnen auch Werte zugewiesen werden. Eine Liste der weichen Schlüsselwörter lässt sich durch <code>keyword.softkwlist</code> erstellen (die Anweisung gibt es seit Python 3.9). Siehe dazu auch [https://stackoverflow.com/questions/65800344/what-are-soft-keywords] und [https://docs.python.org/3/library/keyword.html#keyword.softkwlist].</small> == Schleifen == Kopfgesteuerte Schleife, Endlosschleife und fußgesteuerte Schleife: [[File:Programmingloops.svg|450px]] === while === Die WHILE-Schleife ist kopfgesteuert. Sie funktioniert wie aus anderen Programmiersprachen bekannt. In Pseudocode: SOLANGE bedingung TRUE führe block aus ENDE In Python: x = 0 while x <= 10: print(x) x += 1 Ausgabe: 0 1 2 3 4 5 6 7 8 9 10 Eine Endlosschleife ergibt sich z.B. so: i = 5 while True: print(i) i-=1 Beendet werden kann sie mit der Tastenkombination STRG-C. Eine fußgesteuerte Schleife kann so simuliert werden: i = 5 while True: print(i) i-=1 if i<=0: print("Fire") break Ausgabe: 5 4 3 2 1 Fire Der <code>break</code>-Befehl wird etwas später noch einmal kurz thematisiert. === for === Struktogramm einer for-Schleife: [[File:Zählschleife.png|200px]] In Python bspw. so: for x in range(6): print(x*2) Ausgabe: 0 2 4 6 8 10 Die Schleife läuft von 0 bis 5. Ausgegeben wird jeweils der Wert x*2. Aquivalent kann diese Schleife auch so geschrieben werden: for x in range(0, 11, 2): print(x) Die Ausgabe ist wie oben. Der Startwert sei 0, der Endwert ist 11-1 und die Schrittweite ist 2. Ein anderes Beispiel sei for x in "text": print(x) Ausgabe: t e x t == Schleifen abbrechen == === break === <code>break</code> bricht die Schleife ab und setzt mit dem nächsten Befehl außerhalb der Schleife fort. for var in range(100): print(var) if var == 5: break Ausgabe: 0 1 2 3 4 5 === continue === <code>continue</code> bricht den aktuellen Schleifendurchlauf ab und setzt mit dem nächsten Schleifendurchlauf fort. for var in range (11): if var == 5: continue print(var) Ausgabe: 0 1 2 3 4 6 7 8 9 10 == try - except == try: z1 = 12 / 0 print(z1) except ZeroDivisionError: print("Das Ergebnis ist unendlich") except: print("Kann nicht berechnet werden!") print("Bitte die Formel korrigieren!") print("Setze Programm fort!") Ausgabe: Das Ergebnis ist unendlich Setze Programm fort! Es wird versucht, eine Zahl durch Null zu dividieren. Das ist nicht möglich, es wird eine Ausnahme ausgelöst. Das Programm springt daher in den except-ZeroDivisionError-Block und führt die dort gelisteten Anweisungen aus (in unserem Fall eine print-Anweisung). Danach wird das Programm fortgesetzt. Würden wir dieses Programm ohne try-except ausführen, so ergibt sich aus z1 = 12 / 0 print(z1) folgende Fehlermeldung und ein unmittelbarer Programmabbruch Traceback (most recent call last): File "C:\tmp\test1.py", line 1, in <module> z1 = 12 / 0 ZeroDivisionError: division by zero Mit dem try-except-Mechanismus können also Ausnahmen oder Fehler aufgefangen und behandelt werden. In unserem Beispiel ist das eher trivial, aber bei größeren Programmen kann das durchaus Sinn machen. Neu in Python 3.14 ist, dass mehrere Ausnahmen auch ohne Klammern angegeben werden können, z.B.: bis inkl. Python 3.13 nur: except (ZeroDivisionError, ValueError): ab Python 3.14 auch: except ZeroDivisionError, ValueError: == pass == Ein leerer Block muss in Python mittels dem Schlüsselwort <code>pass</code> dargestellt werden. Z.B. x = 2 if x == 1: print("Wert ist ", x) else: pass Würde man das <code>pass</code> im else-Block weglassen, so würde man eine Fehlermeldung erhalten: IndentationError: expected an indented block after 'else' statement on line 5 = Funktionen = == Aufrufen von Funktionen == Funktionen sind uns im Rahmen dieses Kurses schon zuhauf begegnet. Sei es die print()-, die math.sin()- oder die hex()-Funktion. All diese Funktionen werden von Python zur Verfügung gestellt, ohne dass man sie explizit programmieren müsste. Aufgerufen werden diese Funktionen, indem man ihren Namen eintippt, gefolgt von runden Klammern. In diesen Klammern können noch Argumente übergeben werden. Auch Rückgabewerte sind möglich. == Funktionen selber schreiben == Funktionen werden mit dem def-Schlüsselwort (man definiert die Funktion) eingeleitet, danach folgt der Funktionsname, danach wiederum runde Klammern, in denen formale Argumente stehen können. Abgeschlossen wird die def-Zeile mit einem Doppelpunkt. Danach folgt der Funktionskörper. Dieser Funktionskörper muss wiederum eingerückt werden (wie von den Verzweigungen und Schleifen bekannt). Aufgerufen wird diese Funktion, indem man ihren Funktionsnamen eingibt, gefolgt von runden Klammern (ggf. mit den aktuellen Parametern). Z.B. # Funktion definieren def halloWelt(i): # i ... beliebige Ganzzahl print("Hallo " * i, end="") print("Welt!") # Funktion aufrufen halloWelt(3) Ausgabe: Hallo Hallo Hallo Welt! Unterschied zwischen formalen und aktuellen Parametern: [[Datei:PythonIng_func1.jpg]] <small>Aktuelle Parameter werden auch Argumente genannt.</small> Rückgabe von Funktionswerten: # Funktion definieren def mathFunc(a, b): r1 = a + b r2 = a * b return r1, r2 # Funktion aufrufen c, d = mathFunc(3, 5) # Ausgabe der zurückgegebenen Werte print(c) print(d) Ausgabe: 8 15 Es werden r1 und r2 zurückgegeben und den Variablen c und d zugewiesen. (r1, r2) und (c, d) sind Tupel. Was Tupel konkret sind, siehe etwas später in diesem Kapitel. 3 und 5 sind die aktuellen Parameter (die Argumente). a und b sind die formalen Parameter. Die Zuweisung der aktuellen zu den formalen Parametern erfolgt in der gegebenen Reihenfolge, also die Zahl 3 wird an a übergeben und die Zahl 5 an b. Vorgabeparameter, z.B.: def mathFunc(a=10, b=20): r1 = a + b r2 = a * b return r1, r2 c, d = mathFunc(3, 5) print(c) print(d) e, f = mathFunc(5) print(e) print(f) g, h = mathFunc(b=6) print(g) print(h) Ausgabe: 8 15 25 100 16 60 Erklärung: * Erster <code>mathFunc</code>-Aufruf: Es werden, wie weiter oben, die Argumente 3 und 5 an die formalen Parameter a und b übergeben. Die Rückgabewerte r1 und r2 werden an c und d übergeben. Somit ist c=8 und d=15. * Zweiter <code>mathFunc</code>-Aufruf: Es wird nur das Argment 5 an a übergeben. b behält den Vorgabewert 20. D.h. e= 25 und f=100. * Dritter <code>mathFunc</code>-Aufruf: Es wird nur die Zahl 6 an b übergeben, a behält seinen Vorgabewert 10. Somit ergibt sich g=16 und h=60. Beispiel (Schlüsselwortargumente vs. Positionsargumente): def mathFunc(a, b): r1 = a - b r2 = a / b return r1, r2 c, d = mathFunc(b=3, a=5) # Schlüsselwortargumente e, f = mathFunc(3, 5) # Positionsargumente print(c) print(d) print(e) print(f) Ausgabe: 2 1.6666666666666667 -2 0.6 Durch die Verwendung von Schlüsselwortargumenten können die Argumente in beliebiger Reihenfolge angegeben werden. Bei den Positionsargumenten ist die Reihenfolge vorgegeben. Daraus resultiert auch der Unterschied bei den obigen Ausgaben. Werden beide Arten in einem Aufruf gemischt, so müssen die Positionsargumente zuerst angegeben werden. Den Unterschied zwischen beiden Argumentarten zu kennen ist wichtig, nicht nur bei selbst erstellten Funktionen. Auch beim Aufruf von Python-Funktionen verfolgt einen die Mischung von Schlüsselwort- und Positionsargumenten auf Schritt und Tritt, z.B. beim etwas später folgenden Abschnitt über "Grafiken zeichnen": plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") Bei dieser <code>plot</code>-Funktion aus dem Modul <code>matplotlib.pyplot</code> sind <code>x</code> und <code>y1</code> Positionsargumente. <code>label, lw</code> und <code>ls</code> sind die Namen der Schlüsselwortargumente. Die Schlüsselwortargumente könnten auch in anderer Reihenfolge angeschrieben werden, nicht jedoch die Positionsargumente! Siehe zu <code>matplotlib.pyplot.plot</code> auch die Seite [https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html]. == Lambda-Funktionen == print((lambda a, b: a*b) (3, 5)) Ausgabe: 15 Eingeleitet wird eine Lambda-Funktion (auch Lambda-Form, Lambda-Operator oder anonyme Funktion genannt) mit dem Schlüsselwort <code>lambda</code>. Es folgen die formalen Argumente, danach ein Doppelpunkt, die Berechnungsvorschrift und ggf. abschliessend in Klammern die aktuellen Parameter. Man kann einer Lambda-Funktion auch einen Funktionsnamen geben und die Funktion über diesen Namen aufrufen, z.B. prod = lambda a, b: a*b print(prod(3, 5)) Als Ausgabe wird wieder die Zahl 15 geliefert. == Rekursive Funktionen == Funktionen können wiederum andere Funktionen aufrufen. Von einem rekursiven Funktionsaufruf spricht man, wenn die aufgerufene Funktion gleich der aufrufenden ist. def printFunc(i): if (i >= 5): return else: print("Hallo Welt") printFunc(i+1) printFunc(1) Ausgabe: Hallo Welt Hallo Welt Hallo Welt Hallo Welt == Funktionsannotationen == Python ist sehr flexibel, was Typen angeht. Im Vorhergehenden haben wir generell keine Typangaben gemacht. Will man Typen angeben, so bietet Python das Konzept der Funktionsannotation. def calcFunc(a: int, b: int) -> int: return a+b r1 = calcFunc(8, 9) r2 = calcFunc(8.0, 9.0) r3 = calcFunc("Hallo", "Welt") print(r1) print(r2) print(r3) Ausgabe: 17 17.0 HalloWelt Jetzt sieht man auf den ersten Blick, welche Typen der Programmierer im Sinn hatte, als er die Funktion erstellte. Das Problem dabei ist nur, dass es Python ziemlich egal ist, welche Typen man im Endeffekt eingibt. Im obigen Beispiel können statt Integer-Typen u.a. auch Float- oder String-Typen eingegeben werden. <small> Siehe zum Thema "Type Checking" aber auch den später folgenden Abschnitt [[Ing_Mathematik:_Python#Type_Checker]]. </small> == Variadische Funktionen == Python-Code: def test1(a, *b): print(a); for c in b: print(c); test1("Hallo", "Welt", "Schweizer", "und alle anderen") Ausgabe: Hallo Welt Schweizer und alle anderen Mit dem Stern (auch als Splat-Operator bezeichnet) in der formalen Parameterliste bei der Funktion <code>test1</code> wird angezeigt, dass eine beliebige Anzahl von Argumenten übergeben wird. <small> Dies entspricht in etwa dem, was in anderen Programmiersprachen (PHP etc.) mittels Ellipse (<code>...</code>) angezeigt wird.</small> = Tupel, Listen und andere = [[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]] == Tupel und Listen == Tupel, Listen und einige andere sind Datenstrukturen oder Sequenzen. Listen (z.B. eine Einkaufsliste) sind veränderbar (mutable). Ein Tupel kann dagegen nicht verändert werden (immutable). Listen werden beim Anlegen in eckige Klammern eingeschlossen, Tupel in runde Klammern. Beim Tupel können die Klammern auch weggelassen werden. Ein Tupel mit nur einem Element muss mit einem Beistrich abgeschlossen werden. Der Grund ist, dass Python sonst nicht entscheiden kann, ob ein Tupel angelegt werden soll, oder nur ein geklammerter Wert. Als Gedächtnisstütze kann man sich den Unterschied zwischen Tupel und Liste ev. so leichter merken: : T'''u'''pel ... r'''u'''nde Klammern, '''u'''nveränderlich : L'''i'''ste ... eck'''i'''ge Klammern, veränderl'''i'''ch. Nachfolgend werden einige Operationen mit Listen und Tupel dargestellt. # Liste und Tupel liste = [1, 2, "Hallo"] tupel = (1, 2, "Hallo") # Ausgabe von liste und tupel print(liste) print(tupel) # Ausgabe von Einzelelementen print(liste[1]) print(tupel[2]) # Element an Liste anhängen und einfügen liste.append(55) liste.insert(4, "Welt") print(liste) # Element aus Liste entfernen liste.remove(1) print(liste) # einige weitere Beispiele liste2 = [1,] tupel2 = 1, 2 tupel3 = (1,) print(liste2) print(tupel2) print(tupel3) Ausgabe: [1, 2, 'Hallo'] (1, 2, 'Hallo') 2 Hallo [1, 2, 'Hallo', 55, 'Welt'] [2, 'Hallo', 55, 'Welt'] [1] (1, 2) (1,) Beispiel (eine Liste von Wörtern zu einem einzigen zusammenhängenden Text verbinden): woerter = ["Hallo", "Welt"] satz = " ".join(woerter) print(satz) Ausgabe: Hallo Welt == Dictionaries und Mengen == Zu den Datenstrukturen gehören weiters auch Mengen und Dictionaries. Mengen sind von der Mathematik bekannt, sie sind ungeordnet und es kommen keine mehrfachen Elemente vor. Dictionaries sind durch Schlüssel :Wert-Paare gekennzeichnet. Mengen werden beim Anlegen wie Dictionaries in geschweifte Klammern eingeschlossen. dict = {"vorname":"Hugo", "nachname":"Meister" } menge = {1, 1, 3, 4, 4, 4, "Hallo"} print(dict) print(menge) print(dict["vorname"]) Ausgabe: {'vorname': 'Hugo', 'nachname': 'Meister'} {1, 3, 4, 'Hallo'} Hugo Geschweifte Klammern ohne Inhalt stellen Dictionaries dar und keine Mengen: di = {} print(type(di)) Ausgabe: <class 'dict'> Leere Mengen lassen sich mit <code>set()</code> erzeugen: menge = set() # leere Menge print(menge) menge.add("Hallo") # Element hinzufügen print(menge) Ausgabe: set() {'Hallo'} Beispiel (einige Mengenoperationen): mengeA = {"Hallo", "Welt"} mengeB = {1, 2, "Welt", 3} # Vereinigung print(mengeA | mengeB) print(mengeA.union(mengeB)) # Durchschnitt print(mengeA & mengeB) print(mengeA.intersection(mengeB)) # Differenz print(mengeA - mengeB) print(mengeA.difference(mengeB)) # Symmetrische Differenz print(mengeA ^ mengeB) print(mengeA.symmetric_difference(mengeB)) # Teilmenge print(mengeA.issubset(mengeB)) # Mehrere Elemente hinzu mengeA.update(["Super", 67, 125]) print(mengeA) # Element löschen mengeA.discard("Hallo") print(mengeA) Ausgabe: {1, 2, 3, 'Welt', 'Hallo'} {1, 2, 3, 'Welt', 'Hallo'} {'Welt'} {'Welt'} {'Hallo'} {'Hallo'} {1, 2, 3, 'Hallo'} {1, 2, 3, 'Hallo'} False {67, 'Super', 'Welt', 'Hallo', 125} {67, 'Super', 'Welt', 125} == List Comprehensions == Aus einer Eingabeliste soll eine Ausgabeliste erzeugt werden. Das kann folgendermaßen geschehen. Mathematische Schreibweise: <math>lc = \{2x|x\in\ \mathbb{N}, 1\le x < 11\}</math> Python-Code: lc = [x*2 for x in range(1,11)] print(lc) Ausgabe: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] Mathematische Schreibweise: <math>lc = \{2x | x \in \mathbb{N}, 1\le x < 11, x \bmod 2 = 0 \}</math> Python-Code: lc = [x*2 for x in range(1,11) if x%2 == 0] print(lc) Ausgabe: [4, 8, 12, 16, 20] Siehe auch {{W|List Comprehension}}. == Set Comprehensions == Dies ist sehr ähnlich wie im vorigen Abschnitt beschrieben. Es wird aber keine Liste, sondern eine Menge erzeugt. sc = {x*2 for x in range(1,11)} print(sc) Ausgabe: {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} == Listen zusammenführen - zip() == li1 = ["A", "B", "C", "D"] li2 = [1, 2, 3, 4] li3 = [5.5, 6.6, 7.7, 8.8] z = zip(li1, li2, li3) print(z) li4 = list(z) print(li4) Ausgabe: <zip object at 0x00000283B6C6AC80> [('A', 1, 5.5), ('B', 2, 6.6), ('C', 3, 7.7), ('D', 4, 8.8)] == Generatorausdruck == g = (i*2 for i in range(1,11)) print(g) t = tuple(g) print(t) print(t[1:3]) Ausgabe: <generator object <genexpr> at 0x00000241D2A4A5A0> (2, 4, 6, 8, 10, 12, 14, 16, 18, 20) (4, 6) == Slicing == slice ... Scheibe, Teil, in Scheiben schneiden Beispiel: Zugriff auf Elemente eines geordneten sequentiellen Objekttyps (Liste, Tupel oder String): str1 = "Hallo" # Das erste Element wird mit dem Index 0 angesprochen # [start (inkl.) : stop (exkl.) : step (default=1)] str2 = str1[0:2] # Alternativ auch: str2 = str1[:2] print(str2) tup1 = (0,1,2,3) # Das letzte Element hat auch den Index -1, das vorletzte den Index -2 usw. tup2 = tup1[-3:-1] print(tup2) lst1 = [[1, 5, 10, 20], [30, 40, 50, 60]] lst2 = lst1[1][1] print(lst2) Ausgabe: Ha (1, 2) 40 Beispiel: Umdrehen von Strings str1 = "Hallo" str2 = str1[::-1] print(str2) Ausgabe: ollaH = Objektorientierte Programmierung = {{Wikipedia|Objektorientierte Programmierung}} * {{W|Klasse (Objektorientierung)|Klasse}} ... die Schablone oder der Bauplan, enthält Methoden und Attribute * {{W|Objekt (Programmierung)|Objekt}} ... eine Klasseninstanz (die konkrete Ausprägung der Klasse) * {{W|Attribut (Programmierung)|Attribute}} ... die Eigenschaften eines Objekts * {{W|Methode (Programmierung)|Methoden}} ... die Aktionen (Operationen), die ein Objekt ausführen kann * {{W|Vererbung (Programmierung)|Vererbung}} ... neue Klassen (Subklassen, Unterklassen, abgeleitete Klassen) aus vorhandenen Klassen (Superklassen, Oberklassen, Basisklassen, Elternklassen) ableiten. Ermöglicht den Aufbau von Klassenhierarchien. Die Subklasse "erbt" Attribute und Methoden von der Superklasse. Python unterstützt (so wie C++, aber im Gegensatz zu Java) Mehrfachvererbung. == UML == * {{W|Unified Modeling Language|UML}} ... '''U'''nified '''M'''odeling '''L'''anguage, eine Modellierungssprache. Die UML enthält zahlreiche Diagrammarten, um Programme zu modellieren. Im Nachfolgenden wird nur das {{W|Klassendiagramm}} verwendet. [[File:UmlCd Klasse-3.svg|300px]] * {{W|Sichtbarkeit (Programmierung)|Sichtbarkeit}}: ** + ... public (öffentlich) ** - ... private ** # ... protected * {{W|Attribut_(UML)#Attribute_für_Instanzen_und_für_Klassen|Klassenattribute}} (statische Attribute): Werden nur einmal pro Klasse angelegt. Im Klassendiagramm werden sie unterstrichen. [[File:Attribute-3.png|200px]] * Vererbung: <gallery> InheritancePgmUML.svg | Abgeleitete Klasse erbt von Basisklasse (Einfachvererbung) Diamond inheritance.svg | D erbt von B und C (Mehrfachvererbung). B und C erben von A (Einfachvererbung) </gallery> Für weitergehende Betrachtungen zur UML wird auf Spezialliteratur verwiesen, z.B.: * Seidl et al.: UML@Classroom. dpunkt, 2012, ISBN 978-3-89864-776-2 * Rupp et al.: UML 2 glasklar. Hanser, 4. Aufl., 2012, ISBN 978-3-446-43057-0 == Eine einfache Klasse == [[Datei:PythonIng_uml1.svg | 200px]] class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 fahr = Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die Klasse Fahrzeug wird durch das class-Schlüsselwort eingeleitet. raeder ist ein Klassenattribut und public. __init__ wird bei der Objekterzeugung automatisch aufgerufen (ist der sogenannte Konstruktor). Man achte darauf, dass diese Methode immer mit zwei Unterstrichen eingeleitet und abgeschlossen wird. Instanzattributen wird das Wort self vorangestellt. Wir sehen uns z.B. das Attribut self.__geschwind an. Auch hier werden zwei Unterstriche verwendet. Das bedeutet, dass dieses Attribut strikt/stark private ist. Wird nur ein Unterstrich verwendet, so deutet dies auf schwach/weakly private hin. Letzteres wird in Python deutlich häufiger verwendet. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt. Besonderheiten bei stark und schwach private: * '''stark private''': ** zwei führende Unterstriche ** Name Mangling: Name wird zu <code>_Klassenname__variablenname</code> ** Schutz vor Namenskollisionen bei Vererbung ** am Ende des Namens dürfen keine zwei Unterstriche verwendet werden. Das wären dann Magic Methods oder Dunder-Methods (z.B. __init__). Diese sind public. * '''schwach private''': ** ein führender Unterstrich ** Name bleibt gleich ** ist nur ein Hinweis an die Programmierer, kein starker Schutz ** <code>from modul import *</code>: Objekte mit einem führenden Unterstrich werden standardmäßig nicht importiert ** Standard für die Kapselung bei Python. Schätzung: Weit mehr als 80% der nicht-öffentlichen Attribute/Methoden werden als schwach private deklariert. Weniger als 5-10% als stark private (Quelle: Google KI) == Klassen importieren == Häufig ist es sinnvoll und übersichtlicher Klassen in eigenen Dateien zu speichern. Das sind dann eigene Module. Abgespeichert werden Sie mit der Endung py, wie bisher auch praktiziert. Aufgerufen werden Sie mit der import-Anweisung. Dann ist aber nur der Dateiname ohne Endung py zu verwenden. Klarer wird das mit einem Beispiel. Datei c:\tmp\fahrzeug.py class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 Datei c:\tmp\test1.py import fahrzeug fahr = fahrzeug.Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die üblichen import-Anweisungen lauten wie folgt: {| {{prettytable}} ! import-Befehl ! Instanz |- | import xyz || xyz.Klasse |- | import xyz as x || x.Klasse |- | from xyz import Klasse || Klasse |- | from xyz import * || Klasse |} Der Vorteil der ersten beiden import-Anweisungen ist, dass es kaum zu Namenskollisionen kommen kann. Dafür hat man bei den letzten beiden Varianten weniger Tipparbeit. == Vererbung == === Einfachvererbung === [[Datei:PythonIng_uml2.svg | 200px]] Datei fahrzeug.py: class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 class Luftfahrzeug(Fahrzeug): def __init__(self, geschwindigkeit, leistung, fluegel): super().__init__(geschwindigkeit, leistung) self.__flueg = fluegel def getFlueg(self): return self.__flueg Datei test1.py: import fahrzeug fahr = fahrzeug.Luftfahrzeug(150, 90, 4) print(fahr.getFlueg()) Ausgabe: 4 === Mehrfachvererbung === Mit Python ist auch Mehrfachvererbung möglich, z.B.: class A: def _printA(self): print("Klasse A") class B: def _printB(self): print("Klasse B") class C(A,B): def __init__(self): self._printA() self._printB() c = C() Ausgabe: Klasse A Klasse B Die Klasse C erbt von A und B. In UML sieht das in etwa so aus: +-----------------------------+ +-------------------------+ | A | | B | +-----------------------------+ +-------------------------+ | | | | +-----------------------------+ +-------------------------+ | # printA() | | # printB() | +-----------------------------+ +-------------------------+ . . / \ / \ --- --- | | | | +---------------------+ | C | +---------------------+ | | +---------------------+ | | +---------------------+ <code>printA()</code> und <code>printB()</code> sind schwach private (in UML als <code>protected</code> mit einem # dargestellt). Es ist aber zu beachten, dass schwach private nur Konvention ist. Praktisch könnte man auch von außerhalb auf diese Methoden zugreifen. Das soll man aber nicht tun, und das wird in Python durch einen Unterstrich angedeutet. = Grafiken zeichnen = Für das Zeichnen von Grafiken wird hier das Modul <code>matplotlib</code> verwendet. <code>matplotlib</code> ist ein externes Modul und muss vor der ersten Verwendung installiert werden. Das geht so: # Starten Sie ein Terminal (bei Windows die Eingabeaufforderung). # Führen Sie darin folgenden Befehl aus <code>c:\devel\Python\Scripts\pip.exe install matplotlib</code> pip ist übrigens der Paketmanager von Python ({{W|Pip_(Python)}}). Optimalerweise installieren wir auch gleich das Modul <code>numpy</code> (Numerical Python). Wir werden es im Folgenden oft benötigen (nicht nur bei den Grafiken). Das funktioniert vom Prinzip her genauso, wie für <code>matplotlib</code> gezeigt. <small>Verwenden Sie Spyder, so sind diese Schritte nicht nötig. Spyder inkludiert diese Pakete standardmäßig. Unter openSUSE Tumbleweed lassen sich diese Pakete mittels YaST oder zypper installieren.</small> == 2D == === Graph einer Funktion === Es soll die cosh-Funktion im Intervall <math>x\in[-3,3]</math> gezeichnet werden. Der Programmcode lautet in der einfachsten Form: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh1.jpg]] Der Code ist quasi selbsterklärend. Das Untermodul pyplot des matplotlib-Moduls und das numpy-Modul werden importiert. x läuft von -3 bis +3. y wird für jeden x-Wert per Formel ausgerechnet. "plt.plot()" ist der Zeichenbefehl. "plt.show" ist notwendig, um das Fenster mit der Grafik anzuzeigen. Die Schrittweite 0.1 wurde so gewählt, um einen ausreichend glatten Verlauf des Graphen zu gewährleisten. Das ist immer ein Kompromiss zwischen Berechnungszeit und Ansehnlichkeit. Testen Sie einfach ein paar verschiedene Werte, um ein Gefühl dafür zu zu bekommen. "plt.grid()" zeichnet ein Gitter in die Grafik (kann auch weggelassen werden). Die Bezeichnungen plt und np könnten auch anders gewählt werden. Es ist aber Konvention, diese so wie hier gezeigt zu wählen. <small>Mit der im obigen Bild gezeigten Menüleiste kann die dargestellte Grafik nachträglich noch geändert werden (Zoom, Pan, Achsenparameter, Kurvenparameter etc.). Natürlich kann man das alles auch direkt programmieren. Wie das funktioniert wird ansatzweise etwas später gezeigt.</small> Ein etwas komplexeres Beispiel ist Folgendes: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) + 2**x plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh4.png]] Man beachte, dass im Gegensatz zu Octave und Julia der ominöse Punkt (.) bei 2**x mit Python nicht benötigt wird. Das macht das Programmiererleben etwas einfacher. === Graphen mehrerer Funktionen und weiteres === import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x") plt.plot(x, y2, label = "sin(x) * cos(x)") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh2.png]] Um die Linienstile etwas individueller zu gestalten, ist folgender Programmcode gedacht: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") plt.plot(x, y2, label = "sin(x) * cos(x)", lw=3, ls="--") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh3.png]] === Funktion in Parameterdarstellung === Es soll die archimedische Spirale <math>x = t \cos(t), y = t \sin(t)</math> im Intervall <math>[0, 6\pi[</math> gezeichnet werden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.show() [[Datei:PythonIng_spirale1.png]] Diese Darstellung erscheint verzerrt. Will man gleiche Achsenskalierungen, so kann man den plt.axis()-Befehl verwenden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.axis("equal") plt.show() [[Datei:PythonIng_spirale2.png]] === Funktion in Polardarstellung === import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(projection="polar") r = np.arange(0, 1, 0.01) theta = r**3 line = ax.plot(theta, r) plt.show() [[Datei:PythonIng_polar1.png]] === Logarithmische Achsenskalierung === ==== Semilog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.semilogy() plt.show() Ausgabe: [[Datei:PythonIng_semilog1.png]] ==== LogLog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.loglog() plt.show() [[Datei:PythonIng_loglog1.png]] === Gefüllte Fläche === import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 3, 0.1) y1 = 3*x - 1 y2 = x**2 plt.plot(x, y1, x, y2, color='black') plt.fill_between(x, y1, y2, where=y1>=y2) plt.show() [[Datei:PythonIng_gefuellt.png]] === Linien, Pfeile, Rechtecke, Kreise und Texte === import matplotlib as mpl import matplotlib.pyplot as plt fig, ax = plt.subplots() r = mpl.patches.Rectangle((0, 0), 3, 3, angle=30, fill=False) c = mpl.patches.Circle((4, 4), 2, fill=False) ax.add_patch(r) ax.add_patch(c) ax.plot([-2, 7], [-2, 0], color="black") ax.arrow(0, 7, 5, 0, length_includes_head=True, head_width=0.5, head_length=1.5, color="black") ax.set_aspect("equal") plt.axis([-3, 8, -3, 8]) plt.show() [[Datei:PythonIng_linien_pfeile_etc.png]] Text kann mit <code>ax.text(x, y, "Text")</code> hinzugefügt werden, bspw. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.text(0.1, 0.1, "Hallo") ax.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() Oder einfacher auch ohne <code>subplots</code> import matplotlib.pyplot as plt plt.text(0.1, 0.1, "Hallo") plt.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text1.png]] Auch Sonderzeichen (griechische Buchstaben etc.) können verwendet werden (siehe dazu auch [https://matplotlib.org/stable/users/explain/text/mathtext.html]). import matplotlib.pyplot as plt plt.text(.3, .5, r'$\Omega\ \psi\ \oint\ \nabla\ \dot a\ \frac{a}{b}\ a_b$', size="20") plt.show() [[Datei:PythonIng_text20.svg]] Jetzt wird noch gezeigt, wofür <code>subplots</code> sinnvoll eingesetzt werden können. import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=1, ncols=2) ax[0].text(0.1, 0.1, "Hallo") ax[1].text(0.1, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text2.png]] === Aufgaben === * Zeichnen Sie die Strophoide <math>x = \frac{a(t^2-1)}{t^2+1}, y = \frac{at(t^2-1)}{t^2+1}, a = 2, -3 \leq t \leq 3</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_strophoide.jpg]] * Zeichnen Sie die verschlungene Hypozykloide <math>x = (R-r)\cos t + c\cos\frac{R-r}{r}t, y = (R-r)\sin t - c\sin\frac{R-r}{r}t, c = 3, r = 2, R = 6, -15 \leq t \leq 15</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_hypozykloide.jpg]] * Testen Sie bei den obigen Übungsaufgaben verschiedene Linienstile und Farben. Farben können mit dem plt.plot()-Parameter color gewählt werden. * Testen Sie bei den obigen Übungsaufgaben verschiedene Werte für a, c, r und R. == 3D == === Räumliche Kurven === import matplotlib.pyplot as plt import numpy as np t = np.arange(0, 6*np.pi, 0.1) x = t * np.cos(t) y = t * np.sin(t) z = t fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot(x, y, z) plt.show() [[Datei:PythonIng_raumkurve1.png]] === Flächen === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z) plt.show() [[Datei:PythonIng_fläche1.png]] Das Ganze in Netzdarstellung läßt sich so programmieren: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.5) y = np.arange(0, 10, 0.5) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_wireframe(x, y, z) plt.show() [[Datei:PythonIng_fläche2.png]] Ein etwas komplexeres Beispiel: import matplotlib.pyplot as plt import numpy as np x = np.arange(0.1, 10, 0.1) y = np.arange(0.1, 10, 0.1) x, y = np.meshgrid(x, y) z1 = np.sin(x) + 3 * np.cos(y) z2 = np.sin(x) + np.log(y) z3 = x + np.cos(y) z4 = x**2 - y fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, nrows=2, ncols=2) ax[0][0].plot_surface(x, y, z1) ax[0][1].plot_surface(x, y, z2) ax[1][0].plot_surface(x, y, z3) ax[1][1].plot_surface(x, y, z4) plt.show() [[Datei:PythonIng_subplot1.png]] Man beachte, dass man die Unterbilder im Bild nach dem Ausführen des Scripts z.B. mit der mittleren Maustaste einzeln drehen, oder über die Einträge in der Menüzeile einzeln bearbeiten kann. Mit ein paar Zeilen Programmtext lässt sich also eine Menge an Funktionalität generieren. Die Farbgebung lässt sich über <code>colormaps</code> variieren. import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm) plt.show() [[Datei:PythonIng_colormap1.png]] Es gibt eine Menge an Colormaps, z.B. <code>plasma, Greys, Dark2, ocean</code>. Zwecks detaillierterer Infos siehe die matplotlib-Dokumentation. <small>Verwendet man die IDE namens IDLE, so gibt es dort auch die automatische Codevervollständigung. D.h. es werden alle Möglichkeiten (in unserem Fall nach dem Eintippen von <code>cm.</code> alle verfügbaren Colormaps) angezeigt.</small> Die "edgecolor" und Linienbreite können auch frei gewählt werden: import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm, edgecolor="black", linewidth=1.0) plt.show() [[Datei:PythonIng_colormap2.png]] === Höhenlinien === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() ax.contour(x, y, z) plt.show() [[Datei:PythonIng_höhenlinien1.png|400px]] Etwas abgewandelt sieht das so aus: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contour(x, y, z) ax.clabel(hl, inline = True) plt.show() [[Datei:PythonIng_höhenlinien2.png|400px]] Und noch eine Variante (mit einem Farbbalken) sei gezeigt. import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contourf(x, y, z) fig.colorbar(hl) plt.show() [[Datei:PythonIng_höhenlinien5.svg|400px]] === Aufgaben === * Zeichnen Sie die räumliche Kurve <math>x = 2 \cdot \cosh(t)</math>, <math>y = 5 \cdot \sin(t)</math>, <math> z = t^{2} - t</math>, <math>0 \leq t \leq 3\pi</math>. * Zeichnen Sie die Fläche <math>z = \log(x) + \cos(y)</math>. == Animationen == === Mit matplotlib === Auch mit matplotlib sind Animationen möglich. Das ist ein bisschen komplizierter und wird deshalb hier nur mit einem sehr einfachen Beispiel dargestellt (bei Interesse siehe z.B. auch das [https://matplotlib.org/stable/users/explain/animations/animations.html#animations Animations using Matplotlib-Tutorial]). import matplotlib.pyplot as plt import matplotlib.animation as ani import matplotlib import numpy as np def update(frame): line.set_xdata(x[:frame]) line.set_ydata(y[:frame]) return (line) fig, ax = plt.subplots() x = np.arange(0, 10, .1) y = np.sin(x) line, = ax.plot(x[0], y[0]) ax.set(xlim=[0, 10], ylim=[-1, 1]) a = ani.FuncAnimation(fig=fig, func=update, frames=100, interval=20) plt.show() # Speichere die Animation in einem animierten GIF (optional) a.save(filename="c:/tmp/PythonIng_anim5.gif", writer="pillow") [[Datei:PythonIng_anim5.gif]] Es wird eine Sinuskurve auf den Bildschirm gezeichnet. In der letzten Zeile wird diese Animation in ein animiertes GIF gespeichert. Das ist natürlich optional und kann auch weggelassen werden. === Mit VPython === Aber auch mit dem Modul VPython lassen sich einfache 3D-Animationen erstellen. VPython ist ein externes Modul, das vorab installiert werden muss. Unter openSUSE Tumbleweed gibt es dzt. kein entsprechendes rpm-Paket. Die übliche Methode der Installation mittels YaST oder zypper ist somit nicht möglich. Auch eine direkte Verwendung von pip führt nur zu einer Fehlermeldung (<code>error: externally-managed-environment</code>). Es empfiehlt sich dort folgende Vorgehensweise: # Erstelle zuerst eine virtuelle Umgebung, z.B.: <code>python3.11 -m venv ~/tmp/venv1</code> # Wechsle das Verzeichnis: <code>cd ~/tmp/venv1/bin</code> # Installiere das entsprechende Paket: <code>./pip install vpython</code> # Führe das entsprechende Skript aus: <code>./python ~/tmp/test1.py</code> Aktuell (März 2026) ist dieses Programmpaket lt. der [https://vpython.org/presentation2018/install.html VPython-Homepage] nur für die Python-Versionen 3.8 bis 3.12 verfügbar. Ein Beispiel zu einer einfachen Animation wird nachfolgend geliefert. from vpython import * scene.width = 1200 scene.height = 600 scene.center = vector(20,0,0) scene.background = color.white cylinder(pos=vector(0,0,0), axis=vector(20,0,0), radius=5, color=color.blue) cone(pos=vector(0,0,0), axis=vector(-10,0,0), radius=5, color=color.blue) helix(pos=vector(20,0,0), axis=vector(40,0,0), radius=2, coils=10, thickness=0.5, color=color.blue) ball = sphere(pos=vector(20,0,0), color = color.green, radius = 1) ball.p = vector(0.15, 0, 0) toc = True while True: rate(200) if(ball.pos.x <= 60 and toc == True): ball.pos += ball.p else: toc = False ball.pos -= ball.p if(ball.pos.x <= 20 and toc == False): toc = True [[Datei:PythonIng_vpython_anim.JPG]] Idealerweise öffnet sich beim Ausführen des Scripts ein Browserfenster. Darin wird die programmierte Animation gezeigt (siehe auch den obigen Screenshot). Eine Größenänderung können Sie mit der mittleren Maustaste initiieren. Die Szenerie drehen können Sie mit der rechten Maustaste. === Mit VTK === Komplexer, aber auch mächtiger als VPython ist die Verwendung von VTK ('''V'''isualization '''T'''ool'''k'''it). Genauer gesagt des Python-Wrappers von VTK. Dieses externe Python-Modul muss vorab installiert werden (z.B. mittels YaST, pip oder in eine virtuelle Umgebung). VTK ist eine Softwarebibliothek zur 3D-Visualisierung und wurde ursprünglich in C++ geschrieben. Verbreitet eingesetzt wird diese Bibliothek in der Wissenschaft und Forschung, z.B. * in der medizinischen Bildgebung * für Strömungssimulationen * für Klimadaten VTK funktioniert nach dem {{W|Grafikpipeline|Pipeline-Prinzip}}: Source (Quellen) -> Filter -> Mapper (Senken) -> Actor/Renderer Daten fließen von den Quellen zu den Senken. Als einfaches Beispiel wird die Darstellung eines Zylinders gezeigt, der mit den Maustasten gedreht oder in der Größe geändert werden kann: import vtk # Zylinder erzeugen cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) # Geometrie in darstellbare Daten umwandeln mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) # Objekt in der Szene actor = vtk.vtkActor() actor.SetMapper(mapper) # Szene verwalten renderer = vtk.vtkRenderer() renderer.AddActor(actor) # Render-Fenster render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) # Maus/Tastatur-Steuerung interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) # Starten render_window.Render() interactor.Start() Ausgabe: [[Datei:PythonIng_VTK_1.png]] Gleiches Beispiel wie oben, aber mit einer Animationssequenz: import vtk import time cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderer.AddActor(actor) render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) render_window.Render() time.sleep(0.01) Das Grafikfenster schließt sich nach Ablauf der Schleife. Das Fenster bleibt geöffnet, wenn Sie am Programmende folgenden Befehl hinschreiben interactor.Start() Um den animierten Zylinder grün einzufärben, müssen Sie Folgendes im obigen Programm ergänzen (Farbnamen): colors = vtk.vtkNamedColors() actor.GetProperty().SetColor(colors.GetColor3d("Green")) Als Namen können Sie u.a. die CSS3 Web-Farben verwenden (siehe z.B. [https://wiki.selfhtml.org/wiki/Farbe/Farbangaben] und {{W|Webfarbe#CSS_3}}). Alternativ funktioniert auch das ({{W|RGB-Farbraum|RGB}}): actor.GetProperty().SetColor(0.0, 0.6, 0.0) Wie der Zylinder mit einer Textur versehen wird, zeigt folgendes Programm: import vtk import time cylinder = vtk.vtkCylinderSource() cylinder.SetResolution(30) cylinder.SetHeight(3.0) cylinder.SetRadius(1.0) cylinder.CappingOn() texture_coords = vtk.vtkTextureMapToCylinder() texture_coords.SetInputConnection(cylinder.GetOutputPort()) texture_coords.PreventSeamOn() reader = vtk.vtkJPEGReader() reader.SetFileName("PythonIng_textur.jpg") texture = vtk.vtkTexture() texture.SetInputConnection(reader.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(texture_coords.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.SetTexture(texture) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderer.AddActor(actor) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) renderWindow.Render() time.sleep(0.01) interactor.Start() <gallery> PythonIng_textur.jpg | Textur-Datei PythonIng_VTK_2.png | Ausgabe (Screenshot) </gallery> Nun aber genug von VTK und der Erstellung von Grafiken, weiter geht es mit mathematischeren Themen. = Vektoren und Matrizen = == Zahlenfolgen == Für das Erstellen von Zahlenfolgen bieten sich die Funktionen <code>arange</code> und <code>linspace</code> aus dem <code>numpy</code>-Modul an. from numpy import * start = 0 stop = 10 step = 2 num = 10 r = arange(start, stop, step) # step ... Schrittweite l = linspace(start, stop, num) # num ... Anzahl der Werte print("r = ", r) print("l = ", l) Ausgabe: r = [0 2 4 6 8] l = [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556 6.66666667 7.77777778 8.88888889 10. ] Bei <code>arange</code> ist der <code>stop</code>-Wert nicht im Ergebnis enthalten, bei <code>linspace</code> aber sehr wohl. == Vektoren == Vektoren sollten jedem aus der Linearen Algebra bekannt sein. === Arrays === In Python mit NumPy kann man Vektoren durch die Funktion array erzeugen. import numpy as np l1 = (-5, 3, 2) l2 = (1, 1, 4) a1 = np.array(l1) a2 = np.array(l2) a3 = a1 + a2 a4 = 2 * a2 print(a1) print(a2) print(a3) print(a3[2]) print(a4) Ausgabe: [-5 3 2] [1 1 4] [-4 4 6] 6 [2 2 8] === Zeilen- und Spaltenvektoren === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) print(z) print(s) Ausgabe: [ [-5 3 2] ] [[1] [1] [4]] === Skalarprodukt === import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) skalarprodukt = np.dot(a1, a2) print(skalarprodukt) Ausgabe: 6 === Vektorprodukt === <math>a\ast b=\left(\begin{array}{c} a_{1}\\ a_{2}\\ a_{3} \end{array}\right)\ast\left(\begin{array}{c} b_{1}\\ b_{2}\\ b_{3} \end{array}\right)=\left(\begin{array}{c} a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} \end{array}\right) </math> Python-Code: import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) vektorprodukt = np.cross(a1, a2) print(vektorprodukt) Ausgabe: [10 22 -8] === Transponierter Vektor === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) # transponierter Vektor z_tp = np.transpose(z) # transponierter Vektor s_tp = np.transpose(s) print(z_tp) print(s_tp) Ausgabe: [[-5] [ 3] [ 2]] [ [1 1 4] ] === Vektorfelder visualisieren === import matplotlib.pyplot as plt import numpy as np # Daten generieren x = np.arange(0, 10, 1) y = np.arange(0, 10, 1) X, Y = np.meshgrid(x, y) U = X * Y V = Y + X # Plotten fig, ax = plt.subplots() ax.quiver(X, Y, U, V, angles='xy') plt.show() Ausgabe: [[Datei:PythonIng_quiver1.png]] == Matrizen== import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) print(m1) Ausgabe: [[1 2 3] [4 5 6]] === Zugriff auf Matrizenelemente === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) # Element aus Zeile 2 und Spalte 3 (Achtung! Index startet bei Null) print(m1[1,2]) Ausgabe: 6 === Addition und Subtraktion von Matrizen === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) m2 = np.matrix([[0, 0, 2], [1, 3, 2]]) print(m1 + m2) print(m1 - m2) Ausgabe: [[1 2 5] [5 8 8]] [[1 2 1] [3 2 4]] === Transponierte Matrix === import numpy as np m = np.matrix([[1, 2, 3], [4, 5, 6]]) mt = np.transpose(m) print(m) print(mt) Ausgabe: [[1 2 3] [4 5 6]] [[1 4] [2 5] [3 6]] === Rang einer Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) rg = np.linalg.matrix_rank(m) print(rg) Ausgabe: 2 === Inverse Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) mi = np.linalg.inv(m) print(mi) Ausgabe: [[ 1. 0.6] [-0. -0.2]] === Multiplikation von Matrizen (falksches Schema) === import numpy as np m1 = np.matrix([[1, 3, 4], [0, -5, 1]]) m2 = np.matrix([[1, 2], [2, 3], [0, 2]]) print(m1 @ m2) Ausgabe: [[ 7 19] [-10 -13]] === Eigenwerte und Eigenvektoren === import numpy as np m = np.matrix([[5, 8], [1, 3]]) D,V = np.linalg.eig(m) # Eigenwerte print(D) # Eigenvektoren print(V) Ausgabe: [7. 1.] [[ 0.9701425 -0.89442719] [ 0.24253563 0.4472136 ]] === Teilmatrizen === import numpy as np m = np.matrix([[1, 3, 4], [0, -5, 1]]) print("m = ", m) # Erste Zeile extrahieren m1 = m[0,:] print("m1 = ", m1) # Das Element aus der 1. Zeile und der 2. Spalte extrahieren m2 = m[0,1] print("m2 = ", m2) # Zweite Spalte extrahieren m3 = m[:, 1] print("m3 = ", m3) Ausgabe: m = [[ 1 3 4] [ 0 -5 1]] m1 = [ [1 3 4] ] m2 = 3 m3 = [[ 3] [-5]] === Spezielle Matrizen === ==== Nullmatrix ==== import numpy as np z = np.zeros((3, 2)) print(z) Ausgabe: [[0. 0.] [0. 0.] [0. 0.]] ==== Einheitsmatrix ==== import numpy as np z = np.eye(3) print(z) Ausgabe: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ==== Matrix mit lauter Einsen ==== import numpy as np z = np.ones((3, 2)) print(z) Ausgabe: [[1. 1.] [1. 1.] [1. 1.]] === Spärlich besetzte Matrizen === Das Thema spärlich besetzter Matrizen wird hier nur kurz angerissen. Nähere Details siehe unter dem Weblink [https://docs.scipy.org/doc/scipy/reference/sparse.html#module-scipy.sparse]. import numpy as np import scipy A = scipy.sparse.csr_array(np.eye(5)) print(A) Ausgabe: (0, 0) 1.0 (1, 1) 1.0 (2, 2) 1.0 (3, 3) 1.0 (4, 4) 1.0 = Lineare Gleichungssysteme = Sei <math>Ax = b</math> ein lineares Gleichungssystem. <math>A</math> sei die Koeffizientenmatrix, <math>x</math> der Lösungsvektor und <math>b</math> ein bekannter Vektor. Beispiel: import numpy as np A = np.array([[5, 1], [0, 2]]) b = np.array([1, 2]) x = np.linalg.solve(A, b) print(x) Ausgabe: [0. 1.] Siehe dazu auch das Kapitel [[Ing Mathematik: Numerisches Lösen von linearen Gleichungssystemen]]. Dort wird dieses Themengebiet u.a. mit weitergehenden Python-Skripten vertieft. == Aufgabe == * Lösen Sie folgendes Gleichungssystem mittels Python (und zur Kontrolle auch händisch): 5x + 6y - 2z = 12 3x - y - 3z = 6 2x + 2y + 4z = 5 = Polynome = == Ein erstes einfaches Beispiel == Gegeben sei das Polynom <math>7x^3+5x^2+1</math>. In Python: import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p) Ausgabe: 3 2 7 x + 5 x + 1 == Einzelne Polynomwerte berechnen == import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p(1.5)) Ausgabe: 35.875 == Polynome integrieren und differenzieren == import numpy as np p = np.poly1d([7, 5, 0, 1]) # 1. Ableitung p1 = p.deriv() p2 = p.deriv(1) # 2. Ableitung p3 = p.deriv(2) # Integral p4 = p.integ() print(p1) print(p2) print(p3) print(p4) Ausgabe: 2 21 x + 10 x 2 21 x + 10 x 42 x + 10 4 3 1.75 x + 1.667 x + 1 x == Nullstellen bestimmen == import numpy as np p = np.poly1d([2, 5, 0, 4]) r = np.roots(p) print(r) Ausgabe: [-2.7621427 +0.j 0.13107135+0.84077099j 0.13107135-0.84077099j] == Aufgaben == * Berechnen Sie den Wert für x = 3 des Polynoms <math>y = 2x^4 - 3x^3 - x + 7</math>. * Differenzieren und integrieren Sie das Polynom <math>y = 2x^4 - 3x^3 - x + 7</math>. * Berechnen Sie die Nullstellen von <math>y = 7x^5 - 3x^2 + 12</math>. = Nichtlineare Gleichungen und Gleichungssysteme = == Nullstellenbestimmung == Löse eine beliebige Gleichung f(x) = 0, z.B. <math> f(x) = x^2 - 5\cos(x) - 10 = 0 </math>: import scipy import numpy as np def f(x): return x**2 - 5*np.cos(x) - 10 xstart = [-1, 1] # Startwerte xn = scipy.optimize.root(f, xstart) print(xn.x) Ausgabe: [-2.46813009 2.46813009] Funktionsgraph: [[Datei:octave_nichtlin2.jpg]] == Gleichungssysteme == SymPy ist ein externes Modul, das symbolisches Rechnen ('''Sym'''bolic '''Py'''thon) ermöglicht. Folgende Aufgabe ist dem Buch "Knorrenschild: Numerische Mathematik, Hanser, 2017, Seite 72" entnommen. Zu lösen ist das nichtlineare Gleichungssystem <math>f_1 = 2x_1 + 4x_2 = 0 </math> <math>f_2 = 4x_1 + 8x_2^3 = 0</math> Mit Python ist das so möglich: import sympy x1, x2 = sympy.symbols("x1 x2") f1 = 2*x1 + 4*x2 f2 = 4*x1 + 8*x2**3 s = sympy.solve((f1, f2), x1, x2) print(s) Ausgabe: [(-2, 1), (0, 0), (2, -1)] Plot: [[Datei:IngPython_nl_gleichung1.svg|500px]] = Komplexe Zahlen = Die imaginäre Einheit wird in Python durch den Buchstaben <code>j</code> symbolisiert. Darstellen kann man eine komplexe Zahl bekannterweise in mehreren Formen: * Kartesische Darstellung <math>z = \Re(z) + j \cdot \Im(z)</math> * Polardarstellungen <math>z = r \cdot (\cos(\phi) + j \cdot \sin(\phi)) = r \cdot e^{j\cdot \phi}</math> Die konjugiert komplexe Zahl ist <math>z^* = \Re(z) - j \cdot \Im(z)</math> Nachfolgend einige mathematische Operationen mit Python und NumPy. import numpy as np z1 = 2 + 5j # kartesische Darstellung z2 = 3 * np.exp(3j) # Polardarstellung # Addition res = z1 + z2 print("z1 + z2 = ", res) # Multiplikation res = z1 * z2 print("z1 * z2 = ", res) # Realteil res = np.real(z2) print("Realteil von z2 = ", res) # Imaginärteil res = np.imag(z2) print("Imaginaerteil von z2 = ", res) # Betrag res = np.abs(z1) print("Betrag von z1 = ", res) # Argument res = np.angle(z1) print("Argument von z1 = ", res) # Konjugiert komplexe Zahl res = np.conj(z1) print("Konjugiert komplexe Zahl von z1 = ", res) Ausgabe: z1 + z2 = (-0.9699774898013365+5.423360024179601j) z1 * z2 = (-8.05675510050068-14.003167400647481j) Realteil von z2 = -2.9699774898013365 Imaginaerteil von z2 = 0.4233600241796016 Betrag von z1 = 5.385164807134504 Argument von z1 = 1.1902899496825317 Konjugiert komplexe Zahl von z1 = (2-5j) = Interpolation = import numpy as np import scipy import matplotlib.pyplot as plt # Stützpunkte xp = np.arange(1, 6) yp = (0, -5, 2, 7, 6) ti = np.arange(1, 5, 0.01) i1 = scipy.interpolate.interp1d(xp, yp, kind = "linear") i2 = scipy.interpolate.interp1d(xp, yp, kind = "cubic") plt.plot(xp, yp, "rx") plt.plot(xp, i1(xp)) plt.plot(ti, i2(ti)) plt.show() Ausgabe: [[Datei:PythonIng_interpol1.png]] = Differenzialrechnung = == Numerisches Differenzieren == Als Beispiel differenzieren wir <math>y = 5x\sin{x}</math> und stellen das Ganze grafisch dar. from findiff import Diff import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 1000) f = 5 * x * np.sin(x) dx = x[1] - x[0] # Ableitung d_dx = Diff(0, dx) df_dx = d_dx(f) # Grafik plt.plot(x, f, label = "y") plt.plot(x, df_dx, label = "y'") plt.grid() plt.legend(loc="best") plt.show() Ausgabe: [[Datei:octave_diff1.jpg]] <small>findiff ist ein externes Modul. Dieses muss installiert werden (z.B. so: ...\Python\Scripts\pip.exe install --upgrade findiff). Für die Vorgehensweise unter openSUSE Tumbleweed siehe das Kapitel [[Ing_Mathematik:_Python#Mit_VPython | VPython]], nur dass das Ganze mit einer aktuelleren Python-Version exekutiert wird, z.B. mit Python 3.13. Das im Buch "Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler, Rheinwerk" verwendete Modul "scipy.misc" ist veraltet (deprecated ... missbilligt). Lt. [https://docs.scipy.org/doc/scipy-1.17.0/dev/roadmap-detailed.html#misc SciPy-Dokumentation für die Version 1.17.0] wurden alle entsprechenden Features schon entfernt.</small> == Symbolisches Differenzieren == Differenzieren Sie die Funktionen <math>f_1(x) = x^2</math> und <math>f_2(x) = \sin(x)\cos\left(\frac{x}{2}\right)</math>. import sympy x = sympy.symbols("x") f1 = x**2; f2 = sympy.sin(x) * sympy.cos(x/2.) d1 = sympy.diff(f1, x) d2 = sympy.diff(f2, x) print(d1) print(d2) Ausgabe: 2*x -0.5*sin(0.5*x)*sin(x) + cos(0.5*x)*cos(x) == Aufgaben == * Differenzieren Sie die Funktion <math>y = \log(x) + 10x</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. * Differenzieren Sie die Funktion <math>y = \frac{\sinh(x)}{(1+x)}</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. = Integralrechnung = == Numerisches Integrieren == Berechnen Sie das Integral <math>\int_{0}^{3}x^2 dx</math>. import scipy def f(x): return x**2 i = scipy.integrate.quad(f, 0, 3) print(i) Ausgabe: (9.000000000000002, 9.992007221626411e-14) Das trifft den exakten Wert 9.0 ziemlich genau. Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} dx</math>. import scipy import numpy as np def f(x): return 2**(-x) i = scipy.integrate.quad(f, 0, np.inf) print(i) Ausgabe: (1.4426950408889556, 4.486558477977586e-09) == Symbolisches Integrieren == Berechnen Sie <math>\int x^2 \text{d}x</math> und <math>\int \sin{x}\cos{\frac{x}{2}} \text{d}x</math>. import sympy x = sympy.symbols("x") f1 = x**2 f2 = sympy.sin(x) * sympy.cos(x/2.) i1 = sympy.integrate(f1, x) i2 = sympy.integrate(f2, x) print(i1) print(i2) Ausgabe: x**3/3 -0.666666666666667*sin(0.5*x)*sin(x) - 1.33333333333333*cos(0.5*x)*cos(x) Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} \text{d}x</math>. import sympy x = sympy.symbols("x") f = 2**(-x) i = sympy.integrate(f, (x, 0, sympy.oo)) print(i) Ausgabe: 1/log(2) <code>sympy.oo</code> steht für das {{W|Unendlichzeichen}} <math>\infty</math> (die liegende Acht oder das Möbiusband). Mit <code>sympy.pprint(i)</code> ließe sich letzere Ausgabe etwas schöner schreiben: 1 ────── log(2) Man beachtete, <code>log</code> steht hier für den natürlichen Logarithmus <code>ln</code>. == Aufgaben == * Integrieren Sie die Funktion <math>y = \log(x) + 10x</math> von 1 bis 5. * Integrieren Sie die Funktion <math>y = x^3</math> von 0 bis 4. * Integrieren Sie <math>\int x^x(\log (x) + 1)\mathrm dx</math> symbolisch. = Gewöhnliche Differenzialgleichungen = == DGL numerisch lösen == Für die Lösung von Differenzialgleichungen steht u.a. die Funktion scipy.integrate.solve_ivp() zur Verfügung. Diese Funktion implementiert auch das Runge-Kutta-Verfahren (RK45). {{Wikipedia | Runge-Kutta-Verfahren}} Beispiel <math>y' = x^2 + y^3</math>: import scipy import numpy as np import matplotlib.pyplot as plt def dy_dx(x, y): return x**2 + y**3 y0 = [1] xi = [0, 1] x = np.arange(0, 1, 0.01) z = scipy.integrate.solve_ivp(dy_dx, xi, y0, method="RK45", dense_output=True) y = z.sol(x) plt.plot(x, y.T) plt.grid() plt.show() [[Datei:PythonIng_dgl1.png]] == DGL symbolisch lösen == Beispiel <math>y' = x^2 + y^3</math>: import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) print(lsg) Ausgabe: [Eq(f(x), (-x**2)**(1/3)), Eq(f(x), (-x**2)**(1/3)*(-1 - sqrt(3)*I)/2), Eq(f(x), (-x**2)**(1/3)*(-1 + sqrt(3)*I)/2)] Mit <code>sympy.pprint</code> (pretty print) lässt sich die Ausgabe etwas übersichtlicher darstellen. import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) sympy.pprint(lsg) Ausgabe: ⎡ _____ _____ ⎤ ⎢ _____ 3 ╱ 2 3 ╱ 2 ⎥ ⎢ 3 ╱ 2 ╲╱ -x ⋅(-1 - √3⋅ⅈ) ╲╱ -x ⋅(-1 + √3⋅ⅈ)⎥ ⎢f(x) = ╲╱ -x , f(x) = ────────────────────, f(x) = ────────────────────⎥ ⎣ 2 2 ⎦ == Aufgaben == * Lösen Sie die Differenzialgleichung <math>y' = \frac{1}{x\cdot y}</math> mit Python. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>m' = -k\cdot m</math>. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>y' = \sqrt{|y|}</math>. =Laplace-Transformation= Laplace-Transformation: <math>F(s) =\mathcal{L} \left\{f\right\}(s) = \int_{0}^{\infty} f(t) \mathrm e^{-st} \,\mathrm{d}t, \qquad s\in\mathbb{C} </math> Inverse Laplace-Transformation: <math>\mathcal{L}^{-1} \left\{F\right\}(t) = \frac{1}{2 \pi \mathrm j} \int_{ \gamma - \mathrm j \infty}^{ \gamma + \mathrm j \infty} \mathrm e^{st} F(s)\,\mathrm ds = \begin{cases} f(t) & \text{für } t \geq 0 \\ 0 & \text{für } t < 0 \end{cases} </math> Siehe auch [[Ing_Mathematik:_Laplace-Transformation]] Code: import sympy from sympy.abc import t, s # Laplace-Transformation der Funktion f(t) = 1 (Heaviside-Fkt.) f = 1 # alternativ: f = sympy.Heaviside(t) F = sympy.laplace_transform(f, t, s, noconds=True) print("Laplace-Transformierte F(s):", F) # Inverse Laplace-Transformation zurück in den Zeitbereich f_inv = sympy.inverse_laplace_transform(F, s, t) print("Inverse Transformation f(t):", f_inv) Ausgabe: Laplace-Transformierte F(s): 1/s Inverse Transformation f(t): Heaviside(t) Die Zeile from sympy.abc import t, s steht alternativ für t = sympy.symbols("t") s = sympy.symbols("s") =Fourier-Reihen= <math> f(x)\approx \frac{a_{0}}{2}+\sum_{k=1}^{\infty}\left(a_{k}\cos\left(kx\right)+b_{k}\sin\left(kx\right)\right) </math> <math> a_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\cos\left(kx\right)\mathrm dx\quad\text{für }k\geq0 </math> <math> b_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\sin\left(kx\right)\mathrm dx\quad\text{für }k\geq1 </math> Für die Sägezahnfunktion <math>y=x;\, 0 < x < 2\pi</math> sei die Fourierreihe mit einem Python-Programm (unter Mithilfe von sympy) hergeleitet. Code: from sympy import fourier_series, pi, symbols, pprint x = symbols('x') f = x s = fourier_series(f, (x, 0, 2*pi)) pprint(s.truncate(n=4)) Ausgabe: 2⋅sin(3⋅x) -2⋅sin(x) - sin(2⋅x) - ────────── + π 3 Siehe auch [[Ing Mathematik: Fourierreihen]]. Ein komplizierteres Beispiel: [[Datei:IngMath fourier bsp13.svg | 300px]] <math>0\le t < T/2\text{:}\quad f(t) = H</math> <math>T/2 \le t \le T\text{:}\quad f(t) = \frac{2H}{T}\left( t-\frac{T}{2}\right)</math> Code: import sympy as sp H = sp.Symbol('H', positive=True) T = sp.Symbol('T', positive=True) t = sp.Symbol('t') f = sp.Piecewise( (H, (t > 0) & (t < T/2)), (2*H/T*(t-T/2), (t > T/2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Ausgabe: ⎛2⋅π⋅t⎞ ⎛4⋅π⋅t⎞ ⎛6⋅π⋅t⎞ ⎛2⋅π⋅t⎞ ⎛6⋅π⋅t⎞ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ 2⋅H⋅cos⎜─────⎟ 2⋅H⋅cos⎜─────⎟ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ 3⋅H ──────────── - ──────────── + ──────────── + ────────────── + ────────────── + ─── π 2⋅π 3⋅π 2 2 4 π 9⋅π =Rechnen mit wirklich großen Zahlen= Bekannt ist, dass Python kaum Einschränkungen beim Wertebereich von Ganzzahlen hat, z.B. print(10**300) Ausgabe (gekürzt): 100000000000000000000...00000000000000000000000000000000000000000000000000000000000000000000000 Ähnliches geht auch mit Gleitpunktzahlen, z.B. durch die Verwendung des Moduls mpmath: import mpmath print(mpmath.mpf(1500.4)**mpmath.mpf(300)) Ausgabe: 7.27975299218612e+952 Anderes Beispiel: from mpmath import mp, pi mp.dps = 100 print(pi) Ausgabe: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068 mpmath kann noch einiges mehr, dazu sei aber auf die entsprechende Dokumentation auf der mpmath-Homepage verwiesen. mpmath ist Bestandteil von SymPy, kann aber auch separat installiert werden. Aber auch Python selbst besitzt eine Möglichkeit, um mit großen bzw. exakten Gleitpunktzahlen zu rechnen, nämlich das interne Modul decimal. Dieses hat einige Vorteile gegenüber mpmath, aber auch gravierende Nachteile. Diese seien hier nicht detailliert aufgezählt. Grob gesagt hat decimal im Finanzwesen seine Berechtigung. Für wissenschaftliche Anwendungen wird aber mpmath vorzuziehen sein, da es u.a. vielfältige mathematische Funktionen bereit stellt. Nachfolgend ein einfaches Beispiel mit decimal: import decimal print("Potenzierung:", decimal.Decimal(1500.4) ** decimal.Decimal(300.0)) print("Einfache Addition:", 0.1 + 0.2) decimal.getcontext().prec = 50 print("Addition mit decimal:", decimal.Decimal("0.1") + decimal.Decimal("0.2")) Ausgabe: Potenzierung: 7.279752992186121551039839134E+952 Einfache Addition: 0.30000000000000004 Addition mit decimal: 0.3 <u>Aufgabe:</u> Recherchieren Sie im Internet die genauen Vor- und Nachteile von decimal und mpmath. Verwenden Sie dazu auch KI (z.B. von Google, chatgpt). =Regelungstechnische Aufgabenstellungen= Für regelungstechnische Aufgaben gibt es u.a. das externe Paket <code>control</code>. Hier soll nicht detailliert darauf eingegangen werden. Anhand eines Beispiels soll anschließend nur die Visualisierung in Form eines Bode-Diagramms und der Sprungantwort gezeigt werden. Gegeben sei ein P-Regler mit <math>R = \frac{5}{2}</math> und eine Strecke <math>S= \frac{1}{30s^3+20s^2+10s+1,5}</math>. Gesucht sei vorerst ein Bode-Diagramm für den offenen Regelkreis und das Führungsverhalten. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke # oder: G0 = ct.series(regler, strecke) Gw = ct.feedback(G0) ct.bode_plot(G0, label='G0') ct.bode_plot(Gw, label='Gw') plt.show() [[Datei:PythonIng_bode1.svg]] Nun noch für obiges Beispiel die Sprungantwort. Diese zeigt einige große Überschwinger, d.h. der Regler kann sicher noch optimiert werden. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke Gw = ct.feedback(G0) t, y = ct.step_response(Gw) plt.plot(t,y) plt.title('Sprungantwort') plt.xlabel('t') plt.ylabel('h(t)') plt.grid() plt.show() [[Datei:PythonIng_bode3.svg]] Einige weitere wichtige Daten (Phasenreserve, Amplitudenreserve, Durchtrittsfrequenz) lassen sich mittels der <code>control</code>-Funktion <code>margin()</code> ermitteln. Die Ortskurve lässt sich mit der Funktion <code>nyquist_plot()</code> zeichnen. Dies sei hier aber nicht weiter ausgeführt. ==Aufgaben== * Zeichen Sie mit Python die Ortskurve für obiges Beispiel. * Was passiert, wenn man die Reglerverstärkung weiter aufdreht (z.B. auf <math>R = \frac{25}{2}</math>)? * Wie sehen das Bode-Diagramm und die Sprungantwort aus, wenn ein PI-Regler verwendet wird? = Stereostatik etc. = Das Modul SymPy bietet einige Möglichkeiten einfache Bauwerke zu berechnen, z.B. Balken oder Fachwerke. Nachfolgend wird ein einfaches Fachwerk berechnet und gezeichnet. Python-Code: from sympy.physics.continuum_mechanics.truss import Truss t = Truss() # Knoten t.add_node(("A", -3, 0), ("B", 0, 0), ("C", 4, 0), ("D", 7, 0), ("E", 6, 1.5), ("F", 2, 3), ("G", -2, 1.5)) # Stäbe t.add_member(("AB","A","B"), ("BC","B","C"), ("CD","C","D")) t.add_member(("AG","A","G"), ("GB","G","B"), ("GF","G","F")) t.add_member(("BF","B","F"), ("FC","F","C"), ("CE","C","E")) t.add_member(("FE","F","E"), ("DE","D","E")) # Auflager; roller ... Loslager, pinned ... Festlager t.apply_support(("A","roller"), ("D","pinned")) # Einwirkende Kräfte t.apply_load(("G", 5, 270), ("E", 3, 90)) # Berechnung t.solve() print("Reaction Forces: ", t.reaction_loads) print("Internal Forces: ", t.internal_forces) # Fachwerk zeichnen p = t.draw() p.show() Ausgabe auf der Konsole: Reaction Forces: {'R_A_y': 4.20000000000000, 'R_D_x': 0, 'R_D_y': -2.20000000000000} Internal Forces: {'AB': 2.80000000000000, 'BC': 0.333333333333333, 'CD': -1.46666666666667, 'AG': -5.04777178564958, 'GB': -2.05555555555556, 'GF': -1.23413387432364, 'BF': 0.411111111111111*sqrt(13), 'FC': -0.3*sqrt(13), 'CE': 1.50000000000000, 'FE': 0.284800124843917, 'DE': 2.64407093534026} Zeichnung: [[File:PythonIng_fachwerk1.svg|300px]] Details zu diesem Thema siehe z.B. [https://docs.sympy.org/latest/modules/physics/continuum_mechanics/index.html Continuum Mechanics] oder [https://docs.sympy.org/latest/tutorials/physics/continuum_mechanics/index.html Continuum Mechanics Tutorials]. Auch andere mechanische Probleme werden von SymPy abgehandelt ([https://docs.sympy.org/latest/tutorials/physics/index.html Physics Tutorials]). == Aufgabe == Gegeben sei ein einseitig eingespannter Kragträger. Belastet wird er durch eine Einzellast am Trägerende. Für die Daten siehe folgende ASCII-Skizze: | 20 kN //|---> x | //| V //|---------------------- //| 10 m | Elastizitätsmodul E = 2,1*10⁵ N/mm² Flächenträgheitsmoment I = 0.001 m⁴ Berechnen Sie die Auflagerreaktionen, den Querkraft- und Biegemomentenverlauf, sowie die Verformungen. Stellen Sie dies mit Hilfe von SymPy graphisch und auch mittels Formeln dar. Verwenden Sie dazu auch pprint (pretty print) aus dem SymPy-Modul. Zwecks Lösungsansatz siehe die oben aufgeführte Seite "Continuum Mechanics Tutorials". Achten Sie auch auf die Einheiten! Kontrollieren Sie das Ganze mittels händischer Rechnung. In dem genannten Tutorial ist von "Singularity Functions" die Rede. Gemeint ist damit in diesem Kontext die {{W|Föppl-Klammer}}. Einige Python-Programme, vorrangig zu Maschinenelementen, finden sich auf [https://baymp.de/download_python.html BayMP für Python] (Balken, Zahnräder, Stabknickung usw.). =Thermodynamik= == PYroMat == Für thermodynamische Aufgabenstellungen gibt es verschiedene externe Module. Eines davon ist PYroMat (siehe auch [http://pyromat.org]). Damit lassen sich thermodynamische Stoffdaten für viele Substanzen berechnen. Beispiel (einige Stoffdaten für Wasser bei 400°C und 20 bar berechnen): import pyromat as pm # Wasserdaten laden: H2O = pm.get('mp.H2O') # Stoffdaten berechnen: T = 673.15 # Temperatur in Kelvin p = 20 # Druck in bar v = H2O.v(T, p) h = H2O.h(T, p) s = H2O.s(T, p) print(f"Spezifisches Volumen: {v} m³/kg") print(f"Spezifische Enthalpie: {h} kJ/kg") print(f"Spezifische Entropie: {s} kJ/(kg K)") Ausgabe: Spezifisches Volumen: [0.1512163] m³/kg Spezifische Enthalpie: [3248.3789473] kJ/kg Spezifische Entropie: [7.12924142] kJ/(kg K) <small> PYroMat muss vorab installiert werden (z.B. mittels pip, in eine virtuelle Umgebung) </small> <code>mp</code> steht für "multi phase". Für ein ideales Gas wäre <code>ig</code> zuständig, z.B. <code>'ig.O2'</code>. Beispiel (T-s-Diagramm für Wasser zeichnen): import numpy as np import matplotlib.pyplot as plt import pyromat as pm # Konfigurieren pm.config["unit_pressure"] = "bar" pm.config["unit_temperature"] = "K" fluid = pm.get("mp.H2O") # Temperaturbereich für das Nassdampfgebiet T_tripel = 273.16 T_crit = 647.096 T = np.linspace(T_tripel, T_crit - 0.1, 200) # Sättigungslinien berechnen und zeichnen for x in np.linspace(0.0, 1.0, 5): s = fluid.s(T=T, x=x) if(x<=0.0): plt.plot(s, T, label="Siedelinie x=%3.1f" % x, linewidth=2.0) elif(x>=1.0): plt.plot(s, T, label="Taulinie x=%3.1f" % x, linewidth=2.0) else: plt.plot(s, T, label="x=%3.1f" % x, linewidth=1.0) # Isobaren zeichnen p_values = [0.1, 1, 10, 50, 100] T_isobar = np.linspace(T_tripel, 1000, 200) t = 0.7 for p in p_values: s_iso = fluid.s(T=T_isobar, p=p) plt.plot(s_iso, T_isobar, 'k-', alpha=0.8, linewidth=0.8) t += .05 idx = int(len(s_iso) * t) plt.text(s_iso[idx], T_isobar[idx], f"{p} bar", fontsize=9, alpha=0.8) # Diagramm zeichnen plt.title("T-s-Diagramm für Wasser") plt.xlabel("Spezifische Entropie s in kJ/kg K", fontsize=10) plt.ylabel("Temperatur T in K", fontsize=10) plt.legend(loc="best") plt.grid(True) plt.show() Ausgabe (in etwa so): [[Datei:T-s-Diagramm fuer Wasser.svg|400px]] == CoolProp == Auch mit CoolProp können Stoffdaten berechnet werden. Siehe auch [https://coolprop.org/coolprop/wrappers/Python/index.html] Beispiel (Wasser bei 20bar und 400°C): import CoolProp.CoolProp as CP fluid = 'Water' T = 673.15 # Temperatur in Kelvin P = 20e5 # Druck in Pascal dichte = CP.PropsSI('D', 'T', T, 'P', P, fluid) enthalpie = CP.PropsSI('H', 'T', T, 'P', P, fluid) entropie = CP.PropsSI('S', 'T', T, 'P', P, fluid) print(f"Spez. Volumen: {1/dichte:.6f} m³/kg") print(f"Spez. Enthalpie: {enthalpie:.2f} J/kg") print(f"Spez. Entropie: {entropie:.2f} J/kgK") Ausgabe: Spez. Volumen: 0.151215 m³/kg Spez. Enthalpie: 3248344.02 J/kg Spez. Entropie: 7129.16 J/kgK == iapws == Um Werte für Wasser(dampf) zu erhalten (IAPWS; '''I'''nternational '''A'''ssociation for the '''P'''roperties of '''W'''ater and '''S'''team) gibt es die Bibliothek iapws. Siehe auch [https://iapws.org/] und [https://pypi.org/project/iapws/] Beispiel (Wasser für 20bar und 400°C): from iapws import IAPWS97 dampf = IAPWS97(P=2.0, T=673.15) print(f"Spezifisches Volumen: {dampf.v:.6f} m³/kg") print(f"Spezifische Enthalpie: {dampf.h:.2f} kJ/kg") print(f"Spezifische Entropie: {dampf.s:.4f} kJ/(kgK)") print(f"Phase: {dampf.phase}") Ausgabe: Spezifisches Volumen: 0.151208 m³/kg Spezifische Enthalpie: 3248.23 kJ/kg Spezifische Entropie: 7.1290 kJ/(kgK) Phase: Gas == TESPy == Ein anderes Modul für einen anderen Aufgabenzweck ist TESPy ('''T'''hermal '''E'''ngineering '''S'''ystems in '''Py'''thon). Dieses Modul ist für die Anlagensimulation zuständig. Für nähere Informationen siehe [https://tespy.readthedocs.io/en/main/getting_started/introduction.html]. Als Beipiel sei hier vorerst Code, der von der Google KI generiert wurde, angeführt. Der Code wurde überarbeitet, damit keine Warnungen auftreten. Bitte aber den Code trotzdem mit Vorsicht genießen, auch KI-generierter Code kann Fehler aufweisen. Eine Pumpe wird berechnet: from tespy.components import Sink, Source, Pump from tespy.connections import Connection from tespy.networks import Network # 1. Netzwerk definieren (Zentrales Steuerungselement) # Wir wählen Wasser als Fluid und bar/Celsius als Einheiten nw = Network(fluids=["water"]) nw.units.set_defaults(pressure="bar", pressure_difference="bar", temperature="°C", enthalpy="kJ / kg") # 2. Komponenten erstellen eingang = Source("Wasserquelle") ausgang = Sink("Wasserspeicher") pumpe = Pump("Speisewasserpumpe") # 3. Verbindungen definieren (Komponenten miteinander verknüpfen) c1 = Connection(eingang, "out1", pumpe, "in1") c2 = Connection(pumpe, "out1", ausgang, "in1") # Verbindungen dem Netzwerk hinzufügen nw.add_conns(c1, c2) # 4. Randbedingungen und Parameter festlegen # Zustand am Eingang (Druck, Temperatur, Massenstrom, Fluid-Zusammensetzung) c1.set_attr( v=1, # Massenstrom: 1 kg/s T=20, # Temperatur: 20 °C p=1, # Druck: 1 bar fluid={"water": 1}, # 100% Wasser ) # Zustand am Ausgang / Zielwerte der Pumpe c2.set_attr(p=10) # Ziel-Druck nach der Pumpe: 10 bar # Pumpeneigenschaften festlegen pumpe.set_attr(eta_s=0.8) # Isentroper Wirkungsgrad von 80% # 5. Simulation ausführen nw.solve(mode="design") # 6. Ergebnisse ausgeben nw.print_results() # Spezifische Werte direkt auslesen print("\n--- Auswertung ---") print(f"Erforderliche Pumpenleistung: {pumpe.P.val / 1000:.2f} kW") print(f"Temperatur nach der Pumpe: {c2.T.val:.2f} °C") Ausgabe (gekürzt): iter | residual | progress | massflow | pressure | enthalpy | fluid | component -------+------------+------------+------------+------------+------------+------------+------------ 1 | 7.04e+04 | 12 % | 9.96e+02 | 0.00e+00 | 8.81e+04 | 0.00e+00 | 0.00e+00 2 | 5.91e-12 | 100 % | 1.11e-13 | 0.00e+00 | 7.39e-12 | 0.00e+00 | 0.00e+00 3 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 4 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 Total iterations: 4, Calculation time: 0.01 s, Iterations per second: 480.85 ##### RESULTS (Pump) ##### +-------------------+----------+----------+-----------+----------+----------+----------+ | | P | pr | dp | eta | eta_s | head | |-------------------+----------+----------+-----------+----------+----------+----------| | Speisewasserpumpe | 1.12e+06 | 1.00e+01 | -9.00e+00 | 8.00e-01 | 8.00e-01 | 9.19e+01 | +-------------------+----------+----------+-----------+----------+----------+----------+ ... ... --- Auswertung --- Erforderliche Pumpenleistung: 1124.77 kW Temperatur nach der Pumpe: 20.07 °C = Stochastik = Die {{W|Stochastik}} ist ein sehr weites Feld. Hier werden etliche wichtige Themen kurz angerissen. Python stellt mit den Moduln math und statistics Software zu diesem Zwecke bereit. math und statistics sind bereits im Lieferumfang von Python enthalten. Aber auch mit den externen Modulen NumPy, SciPy, stochastic und pandas kann man Stochastik in Python betreiben. Die Theorie der Wahrscheinlichkeitsrechnung und Statistik soll etwas später in Band 5 dieser Buchreihe behandelt werden. == Lageparameter == import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] m1 = statistics.mean(werte) m2 = statistics.mode(werte) m3 = statistics.median(werte) print("Arithmetischer Mittelwert = ", m1) print("Modalwert = ", m2) print("Median = ", m3) Ausgabe: Arithmetischer Mittelwert = 3.5 Modalwert = 1 Median = 3.0 == Streuungsparameter == Beispiel (Berechnung der Standardabweichung): import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] s = statistics.stdev(werte) print("Standardabweichung = ", s) Ausgabe: Standardabweichung = 2.6770630673681683 Beispiel (Berechnung des Variationskoeffizienten V = Standardabweichung/Mittelwert) import numpy as np from scipy import stats import statistics k = 50 dat1 = [14, 21, 18, 25, 30, 17, 20] dat = np.array(dat1) # Mit SciPy v = stats.variation(dat) vddof = stats.variation(dat, ddof=1) print("V SciPy: ", v) print("V DDOF SciPy: ", vddof) print(k*"-") # mit NumPy mittelwert1 = np.mean(dat) std_abw1 = np.std(dat) std_abw1ddof = np.std(dat, ddof=1) v1= std_abw1 / mittelwert1 v1ddof = std_abw1ddof / mittelwert1 print("Mittelwert NumPy: ", mittelwert1) print("Std.abw. NumPy: ", std_abw1) print("Std.abw. DDOF NumPy: ", std_abw1ddof) print("V NumPy: ", v1) print("V DDOF NumPy: ", v1ddof) print(k*"-") # nur mit reinem Python mittelwert2 = statistics.mean(dat1) std_abw2 = statistics.stdev(dat1) v2 = std_abw2 / mittelwert2 print("Mittelwert Python: ", mittelwert2) print("Std.abw. Python: ", std_abw2) print("V Python:", v2) print(k*"-") Ausgabe: V SciPy: 0.23890355966467272 V DDOF SciPy: 0.25804533701889254 -------------------------------------------------- Mittelwert NumPy: 20.714285714285715 Std.abw. NumPy: 4.948716593053935 Std.abw. DDOF NumPy: 5.3452248382484875 V NumPy: 0.23890355966467272 V DDOF NumPy: 0.2580453370188925 -------------------------------------------------- Mittelwert Python: 20.714285714285715 Std.abw. Python: 5.3452248382484875 V Python: 0.2580453370188925 -------------------------------------------------- Der Unterschied bei der Standardabweichung zwischen reinem Python und den externen Bibliotheken SciPy und NumPy entsteht dadurch, dass einmal durch (n-1) und das andere Mal nur durch n dividiert wird. Dies kann bei NumPy und SciPy dadurch entschärft werden, indem <code>ddof=1</code> gesetzt wird. ddof steht für '''D'''elta '''D'''egrees '''o'''f '''F'''reedom. <small>Je größer die Anzahl der Datensätze n wird, umso weniger spielt das eine Rolle.</small> == Kombinatorik == Beispiel: import math n = 7 k = 5 print("n! = ", math.factorial(n)) print("Kombinationen (n über k) = ", math.comb(n, k)) Ausgabe: n! = 5040 Kombinationen (n über k) = 21 Siehe zu diesem Thema auch [[Ing Mathematik: Permutationen, Kombinationen, binomischer Lehrsatz]]. Die Anzahlen lassen sich einfach aus den dortigen Formeln ermitteln, z.B. bei Permutationen mit <math>n!</math> oder Variationen mit Wiederholungen als <math>n^k</math>. Will man die Kombinationen oder Variationen aber auch als Liste ausgeben, so kann das Modul <code>itertools</code> nützlich sein. Beispiel (Variationen ohne Wiederholung): from itertools import permutations menge = ["A", "B", "C", "D"] # n = 4 k = 3 variationen = list(permutations(menge, k)) for v in variationen: print("".join(v)) print(50*"-") print(len(variationen)) Ausgabe (gekürzt): ABC ABD ACB ... DCA DCB -------------------------------------------------- 24 Siehe zum Modul <code>itertools</code> auch die Website [https://docs.python.org/3/library/itertools.html]. * Variationen mit Wiederholung: <code>itertools.product()</code> * Kombinationen ohne Wiederholung: <code>itertools.combinations()</code> * Kombinationen mit Wiederholung: <code>itertools.combinations_with_replacement()</code> == Zufallszahlen == Beispiel: import random # Ganzzahlige Zufallszahl von 1 bis 10 zufallszahl1 = random.randint(1, 10) # Gleitpunktzahlen # zwischen 0.0 und 1.0 zufallszahl2 = random.random() # Zahl zwischen 1.5 und 9.5 zufallszahl3 = random.uniform(1.5, 9.5) # aus Liste auswählen farbe = ["Rot", "Grün", "Blau"] zufallswert = random.choice(farbe) print(zufallszahl1) print(zufallszahl2) print(zufallszahl3) print(zufallswert) Ausgabe, z.B.: 5 0.14147945849015753 6.894003397570905 Rot Benötigt man mehrere Zufallszahlen, so ist das Modul <code>numpy</code> zu bevorzugen, z.B.: * Normalverteilung: <code>np.random.normal(...)</code> * Gleichverteilung: <code>np.random.uniform(...)</code> == Histogramm == Zum Thema Histogramm siehe {{W|Histogramm}}. Beispiel (mit Matplotlib): import matplotlib.pyplot as plt import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) plt.hist(daten, bins=25, edgecolor='darkgray') plt.show() Ausgabe: [[Datei:IngMath_histogramm.svg|300px]] Beispiel (mit Seaborn): import matplotlib.pyplot as plt import seaborn as sns import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) sns.set_theme(style="darkgrid") sns.histplot(data=daten) plt.show() Ausgabe: [[Datei:IngMath_histogramm2.svg|300px]] Das Kürzel <code>sns</code> ist Konvention und steht für die fiktive Figur '''S'''amuel '''N'''orman '''S'''eaborn aus der US-Fernsehserie {{W|The West Wing – Im Zentrum der Macht | The West Wing}}. == Box-Plot == [[File:Elements of a boxplot.svg|400px]] Siehe auch {{W|Box-Plot}}. Beispiel (mit Seaborn erstellt): import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset("tips") sns.boxplot(data=df, x="day", y="tip", hue="day", legend=False) plt.show() Ausgabe: [[Datei:IngMath_boxplot.svg|400px]] Beispiel (mit Matplotlib erstellt): import matplotlib.pyplot as plt daten = [12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25] plt.boxplot(daten, patch_artist=True) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() Ausgabe: [[Datei:IngMath_boxplot2.svg|300px]] Um mehrere Box-Plots unterschiedlicher Farbe mit Matplotlib in einem Diagramm zu zeichnen, können Sie folgendermaßen vorgehen: import matplotlib.pyplot as plt daten = [[12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25], [10, 19, 20, 21, 20, 30, 19, 40, 11, 17, 19, 21]] farben = ["green", "blue"] boxplot = plt.boxplot(daten, patch_artist=True) for patch, farbe in zip(boxplot['boxes'], farben): patch.set_facecolor(farbe) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() == Regressionsrechnung == Beispiel: import numpy as np import matplotlib.pyplot as plt # Messpunkte x = np.array([1, 3, 5, 6, 8, 10, 20]) y = np.array([3, 4, 5, 5, 7, 9, 11]) # Regressionskurve (Grad 1 = lineare Regression, 2 = Polynom-Regression 2. Gr.) # y = kx + d k, d = np.polyfit(x, y, deg=1) # y = ax**2 + bx + c a, b, c = np.polyfit(x, y, deg=2) x_l = np.linspace(1, 20, 100) y_p = a * x_l**2 + b * x_l + c # Zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.plot(x, k*x + d, color='blue', label='Regressionsgerade') plt.plot(x_l, y_p, color='red', label='Regressionspolynom 2. Gr.') plt.xlabel('x') plt.ylabel('y') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: [[Datei:IngMath_regression.svg|400px]] == Korrelationsrechnung == Beispiel: import pandas as pd import matplotlib.pyplot as plt # Messdaten x = [1, 3, 4, 5, 6] y = [2, 4, 6, 8, 5] daten = {'X': x, 'Y': y} df = pd.DataFrame(daten) # Korrelation korr = df['X'].corr(df['Y']) print(f"Korrelationskoeff.: {korr}") # Messpunkte zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: Korrelationskoeff.: 0.7556096518348252 [[Datei:IngMath_korrelation.svg|300px]] == Mengen und Venn-Diagramme == Beispiel: import matplotlib.pyplot as plt from matplotlib_venn import venn2 menge_a = {1, 2, 3, 4, 5, 6} menge_b = {4, 5, 6, 7, 8} vereinigung = menge_a | menge_b schnitt = menge_a & menge_b print("Vereinigungsmenge = ", vereinigung) print("Schnittmenge = ", schnitt) venn2([menge_a, menge_b], set_labels=('Menge A', 'Menge B')) plt.show() Ausgabe: Vereinigungsmenge = {1, 2, 3, 4, 5, 6, 7, 8} Schnittmenge = {4, 5, 6} [[Datei:IngMath_venn.svg|300px]] Siehe auch {{W|Mengendiagramm#Venn-Diagramme}}. == Verteilungs- und Dichtefunktion == * CDF ... '''C'''umulative '''D'''istribution '''F'''unction, Verteilungsfunktion * PDF ... '''P'''robability '''D'''ensity '''F'''unction, Dichtefunktion Beispiel (Normalverteilung): import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm my, sigma = 0, 1 x = np.linspace(-4, 4, 50) pdf = norm.pdf(x, my, sigma) cdf = norm.cdf(x, my, sigma) plt.plot(x, pdf, lw=2, label="Dichtefunktion") plt.plot(x, cdf, lw=2, label="Verteilungsfunktion") plt.legend() plt.grid() plt.show() Ausgabe: [[Datei:IngMath_cdf_pdf.svg|300px]] Beispiel (<math>\chi^2</math>-Verteilung): import numpy as np import matplotlib.pyplot as plt import scipy.stats as stats x = np.linspace(0, 20, 500) # df ... degree of freedom, Freiheitsgrad pdf = (stats.chi2.pdf(x, df=2), stats.chi2.pdf(x, df=5), stats.chi2.pdf(x, df=10)) for i in range(0,3): if(i==0): lab = "Freiheitsgrad 2" elif(i==1): lab = "Freiheitsgrad 5" else: lab = "Freiheitsgrad 10" plt.plot(x, pdf[i], label=lab, lw=2) plt.grid() plt.legend() plt.show() Ausgabe: [[Datei:IngMath_chi2.svg | 300px]] == Schätzen und Testen == === Intervallschätzung === Als Beispiel seien Daten gegeben, die von ''Dürr, Mayer: Wahrscheinlichkeitsrechnung und Schließende Statistik; 7. Aufl., Hanser, 2014, Seite 137'' stammen. Und zwar soll das 95%-Vertrauensintervall für den Mittelwert des Kaloriengehalts (kcal/100g) von Hähnchen ermittelt werden. Wir wollen das mit Python inkl. NumPy und SciPy durchführen. Die Stichprobe ist groß (50 Hähnchen): Python-Code: import numpy as np import scipy.stats as stats # Stichprobe daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203] # Parameter definieren konfidenzniveau = 0.95 mean = np.mean(daten) std = np.std(daten, ddof=1) stdfehler = stats.sem(daten) intervall = stats.norm.interval(confidence=konfidenzniveau, loc=mean, scale=stdfehler) print(f"Mittelwert: {mean}") print(f"Standardabweichung: {std}") print(f"Konfidenzintervall: {intervall}") Ausgabe: Mittelwert: 215.48 Standardabweichung: 33.14238915925757 Konfidenzintervall: (np.float64(206.29356722321992), np.float64(224.66643277678006)) Diese Werte stimmen gerundet mit denen im genannten Buch überein. Zum Code selbst: * sem steht für '''s'''tandard '''e'''rror of the '''m'''ean. * <code>scipy.stats.norm</code> ... Modul für die Normalverteilung. === Punktschätzung === Gleiche Daten wie oben bei der Intervallschätzung. Python-Code: import numpy as np from scipy import stats daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203 ] mu_hat, sigma_hat = stats.norm.fit(daten) print(f"Schätzer für den Erwartungswert (μ): {mu_hat:.4f}") print(f"Schätzer für die Standardabweichung (σ): {sigma_hat:.4f}") Ausgabe: Schätzer für den Erwartungswert (μ): 215.4800 Schätzer für die Standardabweichung (σ): 32.8093 === Hypothesentests === Beispiel: import numpy as np import scipy.stats as stats x_quer = 12.075 # Stichproben-Mittelwert var = 0.069 # Stichproben-Varianz n = 90 # Stichprobengröße my_0 = 12.0 # Nullhypothese alpha = 0.05 # Signifikanzniveau z_stat = (x_quer - my_0) / np.sqrt(var / n) p_val = 2 * (1 - stats.norm.cdf(np.abs(z_stat))) print(f"Z-Statistik: {z_stat:.4f}") if p_val < alpha: print(f"p-Wert: {p_val:.6f} < alpha:", alpha) print("Die Nullhypothese wird verworfen.") else: print(f"p-Wert: {p_val:.6f} > alpha:", alpha) print("Die Nullhypothese wird nicht verworfen.") Ausgabe: Z-Statistik: 2.7087 p-Wert: 0.006755 < alpha: 0.05 Die Nullhypothese wird verworfen. == Statistische Qualitätskontrolle == Beispiel (Mittelwertkarte): import numpy as np import matplotlib.pyplot as plt # Gegeben sollwert = 50.0 varianz = 4.0 stichproben_umfang = 1 daten = [49.5, 50.2, 53.0, 48.1, 52.6, 53.4, 49.8] # Berechnung standardabweichung = np.sqrt(varianz) streuung = standardabweichung / np.sqrt(stichproben_umfang) cl = sollwert ucl = cl + 3 * streuung lcl = cl - 3 * streuung # Darstellung plt.plot(daten, marker='o', linestyle='-', color='b', label='Messdaten') plt.axhline(cl, color='green', linestyle='-', label=f'CL: {cl}') plt.axhline(ucl, color='red', linestyle='--', label=f'UCL: {ucl:.2f}') plt.axhline(lcl, color='red', linestyle='--', label=f'LCL: {lcl:.2f}') plt.title('Mittelwertkarte') plt.xlabel('Stichprobe') plt.ylabel('Wert') plt.legend(loc='lower left') plt.grid(True) plt.show() Ausgabe: [[Datei:IngMath_mittelwertkarte.svg|300px]] Siehe auch {{W|Shewhart-Regelkarte}} und {{W|Qualitätsregelkarte}}. * UCL ... '''U'''pper '''C'''ontrol '''Limit''', Obere Eingriffsgrenze * LCL ... '''L'''ower '''C'''ontrol '''Limit''', Untere Eingriffsgrenze * CL ... '''C'''enter '''L'''ine, Mittellinie = Ein- und Ausgabe = == print == Die Anweisung print haben wir schon oft verwendet. Hier soll anhand von Beispielen kurz beschrieben werden, was der Befehl print leisten kann. print("Hallo", "Welt", 1, sep="-") print("Hallo", end=" ") print("Welt") Ausgabe: Hallo-Welt-1 Hallo Welt == input == a = int(input("Zahl 1: ")) b = int(input("Zahl 2: ")) print("a + b = ", a+b) Ausgabe (nach Eingabe der beiden Ganzzahlen): Zahl 1: 4 Zahl 2: 5 a + b = 9 == Aus Dateien lesen == Es seinen die datei.txt Hallo Welt. Wie geht es dir? ... und test1.py dat = open("datei.txt", mode = "r") print(dat.read()) dat.close() Ausgabe Hallo Welt. Wie geht es dir? ... Mit dem open()-Befehl wird die Datei datei.txt im Lesemodus geöffnet (r ... read). Mit dem read()-Befehl wird die Datei eingelesen und mittels print ausgegeben. == In Dateien schreiben == dat = open("datei.txt", mode = "a", encoding = "utf-8") dat.write("Hänge Zeile an\n") dat.close() Die Datei datei.txt sieht nach Abarbeitung des obigen Skripts nun so aus Hallo Welt. Wie geht es dir? ... Hänge Zeile an Es wird die Datei im Schreibmodus geöffnet (a ... append (anhängend), w ... write (überschreibend)). write() fügt hier also eine Zeile Text am Dateiende ein. close() schließt die Datei wieder. Das close() kann man sich mit der with-Anweisung auch sparen. with open("datei.txt", mode="a", encoding="utf-8") as dat: dat.write("Hänge Zeile an\n") = Benutzeroberflächen erstellen = == tkinter == {{Wikipedia | Tkinter}} Python bietet standardmäßig das Modul tkinter zur Programmierung von Benutzeroberflächen. Es müssen also bei der Verwendung von tkinter keine externen Module installiert werden. Hier wird eine (sehr) kurze Einführung in das Erstellen von grafischen Oberflächen mittels tkinter gegeben. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") win.minsize(300, 50) but = tk.Button(win, text = "Push the button") but.pack() win.mainloop() Ausgabe: [[Datei:PythonIng_gui1.jpg]] Ein etwas komplizierteres Beispiel sei nachfolgend gezeigt. Es sollen zwei Strings miteinander verknüpft und ausgegeben werden. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") def on_button_clicked(): str = ent1.get() + ent2.get() lab2["text"] = str ent1 = tk.Entry(win) ent2 = tk.Entry(win) lab1 = tk.Label(win, text="verknuepfen mit") lab2 = tk.Label(win, text="") but = tk.Button(win, text = "=", command=on_button_clicked) ent1.pack(side="left") lab1.pack(side="left") ent2.pack(side="left") but.pack(side="left") ent2.pack(side="left") lab2.pack(side="left") win.mainloop() Ausgabe (vor der Eingabe der Teilstrings): [[Datei:PythonIng_gui2.jpg]] Ausgabe (nach der Eingabe der Teilstrings und dem Drücken des =-Buttons): [[Datei:PythonIng_gui3.jpg]] == curses == {{Wikipedia | curses}} Mit dem curses-Modul lassen sich u.a. TUIs ('''T'''ext '''U'''ser '''I'''nterfaces) erstellen. Ein sehr einfaches Beispiel zur allgemeinen Funktionsweise wird nachstehend geliefert. import curses stdscr = curses.initscr() curses.start_color() curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE) stdscr.clear() stdscr.addstr("Hallo Welt", curses.color_pair(1)) stdscr.refresh() stdscr.getch() curses.endwin() Als Ausgabe sollte <span style="color:#FF0000;">Hallo Welt</span> (rote Schrift auf weißem Hintergrund) auf dem Terminal/der Konsole erscheinen. Getestet wurde dies mit openSUSE Tumbleweed, Python-Version 3.13.12. Das entsprechende Python-curses-Package muss installiert sein. Allgemeine Informationen zur Terminal-/Konsolengröße und Cursorposition liefert folgendes Programm: import curses stdscr = curses.initscr() stdscr.addstr(3, 5, "LINES: %d" % curses.LINES) stdscr.addstr(4, 5, "COLS: %d" % curses.COLS) (y,x) = stdscr.getyx() stdscr.addstr(5, 5, "Momentane Cursorposition: [%d, %d]" % (y, x)) (y,x) = stdscr.getbegyx() stdscr.addstr(6, 5, "Koordinatenursprung: [%d, %d]" % (y, x)) (y,x) = stdscr.getmaxyx() stdscr.addstr(7, 5, "Fenstergröße: [%d, %d]" % (y, x)) stdscr.addstr(11, 2, "Taste drücken -> Ende") stdscr.refresh() stdscr.getch() curses.endwin() Es sollte sich in etwa folgende Ausgabe ergeben: LINES: 44 COLS: 110 Momentane Cursorposition: [4, 15] Koordinatenursprung: [0, 0] Fenstergröße: [44, 110] Taste drücken -> Ende Zur Funktionsweise von curses siehe auch das Wikibook [[ncurses]]. Zum Verständnis sind dort allerdings elementare Kenntnisse in der Programmiersprache C erforderlich. == Qt == {{Wikipedia | Qt (Bibliothek)}} Auch für das Qt-Framework gibt es eine Anbindung an Python. Nachfolgend ein einfaches Beispiel. import sys from PySide6.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hallo Welt!") label.show() sys.exit(app.exec()) Ausgabe: [[Datei:PythonIng_gui10.png]] == Gtk == {{Wikipedia | GTK (Programmbibliothek)}} Eine idente Ausgabe, wie oben für Qt gezeigt, erzeugt z.B. folgendes Gtk-Programm: import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk def on_activate(app): win = Gtk.ApplicationWindow(application=app) lab = Gtk.Label(label="Hallo Welt!") win.set_child(lab) win.present() app = Gtk.Application() app.connect('activate', on_activate) app.run(None) Auch für die Benutzung von Qt und Gtk müssen die jeweiligen Packages installiert sein. Getestet wurden die entsprechenden Python-Programme nur unter openSUSE Tumbleweed. Wie das GTK-Paket unter MS Windows 11 installiert wird, siehe z.B. [https://www.gtk.org/docs/installations/windows Setting up GTK for Windows]. Damit sei aber das Thema "Benutzeroberflächen erstellen" hier abgeschlossen, da dies schon ein sehr spezielles Aufgabengebiet ist, das eher Informatiker und nicht so sehr Ingenieure anspricht. Bei Bedarf siehe aber ggf. die entsprechenden Links unten in diesem Tutorial. Dort sind weiterführende Informationen zu finden. = Pandas kurz erklärt = Hier wird kurz auf das externe Modul Pandas eingegangen. Pandas steht für '''Pan'''el '''Da'''ta und ist ein Modul für die Datenanalyse und -manipulation. == Series == Vorstellbar ist eine "Series" wie eine einzelne Spalte in einem Tabellenkalkulationsprogramm. Beispiel (Index implizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) # Temperaturwerte print(temp) Ausgabe: 0 8.5 1 11.0 2 12.5 3 10.0 4 13.0 5 11.0 6 14.5 dtype: float64 Das Kürzel <code>pd</code> ist Konvention. Es seien Temperaturwerte gegeben. Die erste Spalte bei der Ausgabe ist der Index. Die zweite Spalte enthält die Werte. Beispiel (separater Zugriff auf den Index und auf die Werte): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) print(temp.index) print(temp.values) Ausgabe: RangeIndex(start=0, stop=7, step=1) [ 8.5 11. 12.5 10. 13. 11. 14.5] Beispiel (Index explizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) print("*** Die gesamte Series ***") print(temp) print("*** Temperatur am Donnerstag ***") print(temp["Do"]) print("*** Tage wärmer als 12 Grad ***") temp_gr_12 = temp[temp > 12] print(temp_gr_12) Ausgabe: *** Die gesamte Series *** Mo 8.5 Di 11.0 Mi 12.5 Do 10.0 Fr 13.0 Sa 11.0 So 14.5 dtype: float64 *** Temperatur am Donnerstag *** 10.0 *** Tage wärmer als 12 Grad *** Mi 12.5 Fr 13.0 So 14.5 dtype: float64 == DataFrame == Ein DataFrame entspricht einer Tabelle. Beispiel (Erzeugen eines DataFrames): import pandas as pd tag = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] v1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=tag) v2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=tag) v3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=tag) tab = pd.concat([v1, v2, v3], axis=1) tab.columns = stadt print(tab) print(type(tab)) Ausgabe: Linz Salzburg Innsbruck Mo 1 8 Hallo Di 2 9 16 Mi 3 10 17 Do 4 11 18 Fr 5 12 19 Sa 6 13 20 So 7 14 21 <class 'pandas.core.frame.DataFrame'> Wir haben hier drei Datenspalten (v1, v2, v3) mit den Spaltennamen "Linz", "Salzburg" und "Innsbruck", sowie sieben Zeilen "Mo" bis "So". Beispiel (Zugriff auf eine Spalte): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab["Salzburg"]) Ausgabe: Mo 8 Di 9 Mi 10 Do 11 Fr 12 Sa 13 So 14 Name: Salzburg, dtype: int64 Beispiel (Zugriff auf eine Zeile): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab.loc["Di"]) Ausgabe: Linz 2 Salzburg 9 Innsbruck 16 Name: Di, dtype: object == Grafiken erstellen == Hier sei nur ein Torten- oder Kreisdiagramm gezeichnet: import pandas as pd import matplotlib.pyplot as plt temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) expl = [0, 0.2, 0, 0, 0, 0, 0] temp.plot.pie(figsize=(5,5), explode=expl) plt.show() Ausgabe: [[Datei:IngPython_pandas1.svg|350px]] Die <code>figsize</code> hat nichts mit der Spaltenanzahl zu tun, sondern setzt die Fenster- oder Diagrammgröße in Inches (Breite * Höhe). Mit Pandas kann man auch noch andere Diagrammarten erstellen, z.B. Linien- oder Balkendiagramme. Dies wird hier aber nicht vorgeführt. == Arbeiten mit CSV- und LibreOffice-Dateien == Gegeben sei eine CSV-Datei test1.csv: Mai;Juni;Juli 12;17;45 15;65;65 16;32;23 4;14;7 23;17;Keine Daten verfügbar 67;Keine Daten verfügbar;45 15;24;12 Lesen von dieser CSV-Datei: import pandas as pd tab = pd.read_csv("test1.csv", sep=";") print(tab) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Schreiben in eine CSV-Datei test2.csv: import pandas as pd val = pd.read_csv("test1.csv", sep=";") val.to_csv("test2.csv", index=False) Ausgabedatei: Mai,Juni,Juli 12,17,45 15,65,65 16,32,23 4,14,7 23,17,Keine Daten verfügbar 67,Keine Daten verfügbar,45 15,24,12 Die Ausgabedatei ist beinahe gleich wie die Eingabedatei. Es werden aber Kommas statt Strichpunkten verwendet. Daher kommt auch der Name CSV ('''C'''omma '''S'''eparated '''V'''alue). Will man wieder Strichpunkte, so kann man dies über den Parameter <code>sep=";"</code> in der <code>to_csv</code>-Funktion machen. Um direkt von einer ODS-Datei (LibreOffice Calc, '''O'''pen '''D'''ocument '''S'''preadsheet) zu lesen muss das Modul odfpy extra installiert sein (per YaST, pip etc.). Gelesen wird dann folgendermaßen: import pandas as pd df = pd.read_excel('test1.ods', engine='odf') print(df) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Die Datei "test1.ods" sei die Datei, aus der das obige "test1.csv" generiert wurde. Schreiben kann man ebenfalls in eine ODS-Datei: import pandas as pd daten = { "Name": ["Hugo", "Richie", "Wilhelmine"], "Alter": [38, 30, 29], "Ort": ["Linz", "Innsbruck", "Salzburg"] } tab = pd.DataFrame(daten) with pd.ExcelWriter("test2.ods", engine="odf") as writer: tab.to_excel(writer, sheet_name="Daten", index=False) Es ergibt sich eine "test2.ods"-Datei (Screenshot): [[Datei:IngPython_pandas2.png|250px]] == Sonstiges == Hier seien stichpunktartig einige weitere Features von Pandas angeführt: * {{W|Pivot-Tabelle|Pivot-Tabellen}} (pivot ... Dreh-, Angelpunkt): Zweck - große Datenmengen schnell zusammenfassen, filtern und analysieren. * NaN ('''n'''ot '''a''' '''n'''umber): In einem Datensatz fehlt ein Wert oder ist nicht definiert. * groupby-Funktion: Daten strukturieren, aggregieren oder Zwischensummen bilden. * {{W|Binning#Datenverarbeitung_und_-analyse|Binning}}: Klassenbildung. * Mehrstufige Indizierung (Hierarchical Indexing oder MultiIndex) * Zeitreihen (Time Series) Für tiefergehende und weiterführende Informationen wird auf das Buch von ''Klein: Numerisches Python; Hanser, 2023'' und [https://pandas.pydata.org/ pandas] verwiesen. = Style Guide, flake8, pylint, Black etc. = == Style Guide == Wie man schönen und richtigen Python-Code schreibt, erfahren Sie in * [https://peps.python.org/pep-0008/ PEP 8 – Style Guide for Python Code] == Formatter und Linter == Ein Modul, das prüft, ob die Richtlinien im Style Guide eingehalten wurden, ist ''flake8'': * [https://flake8.pycqa.org/en/latest/ Flake8: Your Tool For Style Guide Enforcement] Code formatieren kann man auch mit [https://pypi.org/project/black/ Black]. Z.B. übersetzt <code>black test1.py</code> die Datei <code>test1.py</code> import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) in import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Die Programmausgabe ist reformatted test1.py All done! ✨ 🍰 ✨ 1 file reformatted. Der Unterschied zwischen Black und Flake8: * Black ist ein Code-Formatter. Er formatiert Ihren Code um, sodass er im Einklang mit PEP 8 steht. * Flake8 ist ein {{W|Lint (Programmierwerkzeug) | Code-Linter}}. Flake8 verändert Ihren Code nicht, sondern durchsucht ihn nach potenziellen Fehlern etc. Am obigen Beispiel sieht man auch, dass flake8 und Black nicht immer einer Meinung sind. Flake8 (<code>flake8 test1.py</code>) würde standardmäßig den mit Black formatierten Code bemängeln: test1.py:8:80: E501 line too long (80 > 79 characters) Diese Diskrepanz kann beseitigt werden. Da 79 Zeichen auf modernen Bildschirmen meist als zu kurz empfunden werden, ist ein Limit von 88 Zeichen (Black-Standard) oder mehr empfehlenswert. Um dies zu implementieren, erstellen Sie in Ihrem Projektverzeichnis eine <code>.flake8</code>-Datei mit dem Inhalt [flake8] max-line-length = 88 Und schon ignoriert Flake8 dieses Problem. Ein anderer Linter ist pylint. Der würde beim Abarbeiten des obigen Beispiels, z.B. mit <code>pylint test1.py</code> noch eine Kleinigkeit bemängeln: ************* Module test1 /home/hr/tmp/test1.py:1:0: C0114: Missing module docstring (missing-module-docstring) ------------------------------------------------------------------ Your code has been rated at 8.57/10 (previous run: 8.57/10, +0.00) Auch pylint muss vor der ersten Verwendung installiert werden (z.B. mittels pip, virtuelle Umgebung, YaST). Die Dokumentation zu pylint findet sich auf [https://pylint.readthedocs.io/en/latest/]. <u>Aufgabe:</u> Fügen Sie einen "module docstring" in die <code>test1.py</code>-Datei ein und testen Sie erneut mit flake8, Black und pylint. <small>Sehen Sie zum Thema docstrings auch [https://peps.python.org/pep-0257/#what-is-a-docstring PEP 257 – Docstring Conventions].</small> Es gibt noch weitere Formatierungswerkzeuge für Python-Code. Z.B. [https://docs.astral.sh/ruff/ Ruff], ein moderner Code-Formatter und -Linter. Mittels <code>ruff check test1.py</code> würde obiger Code geprüft (Linter). <code>ruff format test1.py</code> formatiert den Code (Formatter). == Type Checker == "Type Checker" sind z.B. * mypy * pyright * ty Diese prüfen die Datentypen, z.B. in folgendem Code def greetings(name: str) -> str: return "Hello, %s" % name print(greetings(42)) Python selbst, flake8, ruff oder black würden diesen Code ohne zu murren akzeptieren. "Type Checker" würden aber sehr wohl Alarm schlagen, z.B. liefert <code>mypy</code> folgende Ausgabe test1.py:5: error: Argument 1 to "greetings" has incompatible type "int"; expected "str" [arg-type] Found 1 error in 1 file (checked 1 source file) ==pydoc== pydoc ist ein Werkzeug, um Python-Module, -Funktionen und -Klassen zu dokumentieren. Beispiel <code>test1.py</code>: """Rechen-Modul. Funktionen die von pydoc gelesen werden. """ def multiply(a, b): """Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a * b def add(a, b): """Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a + b if __name__ == '__main__': print(multiply(3, 5)) print(add(4, 6)) Ausgabe mit <code>python3.13 -m pydoc test1</code> auf der Konsole: Help on module test1: NAME test1 - Rechen-Modul. DESCRIPTION Funktionen die von pydoc gelesen werden. FUNCTIONS add(a, b) Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl multiply(a, b) Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl FILE /home/xyz/tmp/test1.py Siehe zu diesem Thema z.B. auch [https://docs.python.org/3/library/pydoc.html]. Mittels <code>python3.13 -m pydoc -w test1</code> kann man auch eine HTML-Dokumentation erstellen. Wofür <code>if __name__ == '__main__':</code> steht, siehe z.B. etwas später im Abschnitt [[Ing_Mathematik:_Python#Doctests]]. == Sonstige Tools == Andere Tools für die {{W|Statische Code-Analyse|statische Codeanalyse}}, die aber für Ingenieure weniger interessant sein dürften, sind z.B. * Radon: Liefert verschiedene {{W|Softwaremetrik|Codemetriken}} (Komplexität, Wartbarkeitsindex ...) * Bandit: Findet Sicherheitslücken Tools für die {{W|Dynamisches Software-Testverfahren|dynamische Codeanalyse}}, z.B.: * DynaPyt (Framework zur dynamischen Programmanalyse) * cProfile (Profiler) * Memory Profiler (Speicheranalyse) * Memray (Speicheranalyse) * tracemalloc (Speicheranalyse) Paket- und Projektmanagement (pip-Ersatz etc.): * uv * Poetry * Conda * pipx Packaging-Tools (Freezer) und {{W|Compiler#Sonderformen|Transpiler}} : * pyinstaller ** erstellt eigenständige, ausführbare Binärdatei ** kein Cross-Compiler ** kein Schutz vor Reverse-Engineering ** langsam ** packt alles in eine Datei ** sehr große Datei ** Befehl, z.B.: <code>pyinstaller --onefile test1.py</code> ** GUI: <code>auto-py-to-exe</code> * cx_Freeze * nuitka ** Übersetzt Python-Code in C/C++-Code und weiter in eine ausführbare Datei ** kein Cross-Compiler ** Schutz vor Reverse-Engineering ** Befehl, z.B.: <code>nuitka --standalone --onefile test1.py</code> * cython = Einige Integrierte Entwicklungsumgebungen (IDEs)= Werden Programmtexte größer und umfangreicher, so ist das Arbeiten mit der interaktiven Programmierumgebung bzw. das direkte Ausführen von Python-Skripten mühsam. Man wünscht sich z.B. Hilfen zum Debuggen oder die automatische Code-Vervollständigung. Zu diesem Zweck wurden IDEs (Integrated Development Environments) geschaffen. Von diesen seinen nachfolgend auszugsweise einige kurz beschrieben. Testen Sie einfach aus, welche davon für Sie bzw. für Ihr Python-Projekt geeignet sind. == IDLE == IDLE ist die mit dem Python-Programmpaket mitgelieferte IDE. Der Name leitet sich einerseits ab vom Monty-Python-Mitglied Eric Idle, andererseits steht es als Abkürzung für "'''I'''ntegrated '''D'''evelopment and '''L'''earning '''E'''nvironment. IDLE ist einfach zu bedienen, bietet aber schon einen beachtlichen Leistungsumfang. Nachfolgend wird ein Screenshot zu IDLE geliefert. Rechts ist das Editor-Fenster zu sehen, links die interaktive Programmierumgebung. Um das Beispiel selbst nachvollziehen zu können, starten Sie IDLE. Das geht ähnlich, wie Sie die interaktive Programmierumgebung von Python starten (nur, dass Sie eben das IDLE-Icon doppelklicken und nicht das Python-Icon. Unter Linux geben Sie einfach in einem Terminal <code>idle3.13</code> o. Ä. ein). Weiter geht es mit "File - Open - ...". Die auszuführende Datei auswählen (im konkreten Fall ein "Hallo-Welt"-Programm). Es erscheint das rechte Fenster. Dort "Run - Run Module" auswählen. Und schon wird im linken Fenster "Hallo Welt!" ausgegeben. [[Datei:PythonIng_idle1.jpg | 600px]] Siehe auch {{W|IDLE}}. == PyCharm == PyCharm ist ein kommerzielles Produkt. Es gab aber auch eine kostenlose Community Edition. Seit 2025 sind beide Varianten vereint. Für die ersten 30 Tage sind die Pro-Funktionen frei verfügbar, danach nur noch die Kernfunktionalitäten (oder man bezieht kostenpflichtig die Pro-Version). Zu beziehen ist PyCharm unter dem Weblink [https://www.jetbrains.com/pycharm/]. Nachfolgend ein etwas abgewandeltes "Hallo Welt"-Programm, editiert und ausgeführt mit PyCharm. [[Datei:PyCharm_IDE_2023_screenshot.png | 600px]] Siehe auch {{W|PyCharm}}. == Eric == Auch eric ist Open Source und steht unter der GNU General Public License Version 3 oder später. Zu beziehen ist diese Software unter [https://eric-ide.python-projects.org/]. [[Datei:Screenshot_Eric_4.png | 600px]] Siehe auch {{W|eric (Software)}}. <small> Unter openSUSE Tumbleweed sollte sich eric auch mit YaST installieren lassen. Bei mir gibt es aber dann beim Ausführen des eric-Programms eine Fehlermeldung (Stand März 2026): ... ModuleNotFoundError: No module named 'PyQt6.QtPdfWidgets' Umgehen kann man dieses Problem aber wieder mit dem Erstellen einer virtuellen Umgebung, in etwa so python3.13 -m venv ~/tmp/venv1 cd ~/tmp/venv1/bin ./python3.13 -m pip install --upgrade --prefer-binary eric-ide ./eric7_ide </small> == PyScripter == Vom Funktionsumfang vergleichbar mit den vorherigen IDEs ist PyScripter. Auch PyScripter ist Open Source. Die Projekt-Homepage findet sich auf [https://sourceforge.net/projects/pyscripter/]. PyScripter ist nur für MS Windows verfügbar. [[Datei:PythonIng_pyscripter1.jpg | 600px]] == Spyder IDE == Spyder enthält bereits eine stabile Python-Version und etliche Module (z.B. matplotlib, numpy, control). Ansonsten kann dieses Softwarepaket vom Funktionsumfang her mit den anderen genannten IDEs locker mithalten. Spyder wurde unter der MIT-Lizenz veröffentlicht. Diese Software findet sich auf [https://www.spyder-ide.org]. [[Datei:Spyder-windows-screenshot.png | 600px]] Siehe auch {{W|Spyder (Software)}} == Eclipse IDE== Die {{W|Eclipse_(IDE)|Eclipse-IDE}} kann für Python aufgerüstet werden. Dazu gibt es das PyDev-Plugin. Installiert wird es über * Help > Eclipse Marketplace... * Find - PyDev - Install Danach muss noch der Pfad zum Python-Interpreter festgelegt werden * Window > Preferences > PyDev > Interpreters > Python Interpreter > New ... Das Ergebnis ist ähnlich wie im folgenden Bild, nur dass statt C/C++ Python Verwendung findet. [[Datei:Setting Up Eclipse CDT helloout.png | 600px]] == Sonstige == Die genannten IDEs sind nicht die Einzigen. Es gibt, um dem Image Pythons als beliebteste Programmiersprache gerecht zu werden, noch einige andere. Sowohl Open Source-Programme als auch kommerzielle Programme sind im Web zu finden, z.B. Thonny oder {{W|Visual Studio Code}}. Unter Linux kann man auch {{W|KDevelop}}, ausgestattet mit dem Python3-Plugin, einsetzen. Braucht man den Umfang von ausgewachsenen IDEs nicht, so kann man auch normale Texteditoren verwenden (z.B. {{W|Geany}} oder {{W|Kate_(Texteditor)|Kate}}). = Debuggen und Testen = Das Debuggen und Testen von Programmen sind wichtige Bestandteile der Programmierung. Syntaxfehler lassen sich i.A. leicht beheben. Schwieriger ist das Eingrenzen von logischen Fehlern, die ev. nur in bestimmten Situationen auftreten und keine explizite Fehlermeldung hervorrufen. Das Programm liefert falsche Ergebnisse oder es stürzt aus heiterem Himmel ab. Um das zu verhindern gibt es verschiedene Werkzeuge, die bei der Fehlersuche behilflich sein können. Vorerst siehe aber zwecks Begriffsklärung noch folgende Links: * {{W|Debuggen}} * {{W|Debugger}} * {{W|Softwaretest}} <gallery> First Computer Bug, 1947.jpg Test ganzheitlich.png V-Modell.svg </gallery> == Das Modul pdb == Python bringt schon ein Modul zum Debuggen mit. Siehe z.B. [https://docs.python.org/3/library/pdb.html pdb — The Python Debugger]. Komfortabler lässt sich das aber mittels Integrierter Entwicklungsumgebungen (IDEs) angehen. == Debuggen mit IDEs == Für die IDEs IDLE und Spyder sei kurz auf die entsprechenden Webseiten verwiesen: * [https://www.cs.uky.edu/~keen/help/debug-tutorial/debug.html Debugging under IDLE]. * [https://docs.spyder-ide.org/current/panes/debugging.html Spyder Debugger] Dort wird die Vorgehensweise auch mittels Screenshots erläutert. == assert == assert ... behaupten, zusichern ({{W|Assertion (Informatik)}}) Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10., 0.) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10., 0.) File "/home/hr/Develop/test1.py", line 4, in print1 assert y != 0.0 ^^^^^^^^ AssertionError Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1("10.", "5.") File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Aber auch bei nachfolgendem Code gibt es eine Fehlermeldung: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10, 5) File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Damit letzteres funktioniert, kann man den Programmcode so umschreiben: def print1(x, y): assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 2.0 Und jetzt fangen wir den <code>AssertionError</code> auf: def print1(x, y): try: assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) except(AssertionError): print("Hallo") print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Hallo Ich hoffe, es ist wenigstens im Ansatz klar geworden, wofür <code>assert</code> gut sein kann. Ausschalten kann man die <code>assert</code>-Überprüfung übrigens mit dem Python-Schalter <code>-O</code>. == Doctests == Innerhalb eines Docstrings kann die Arbeit im interaktiven Modus simuliert werden. Nach den Promptzeichen (>>>) erfolgen dann bei unserem Beispiel innerhalb des Docstrings simulierte Aufrufe der Funktion <code>print1()</code>. Danach folgen jeweils die Sollresultate. Wird das Modul oder die Datei als Hauptprogramm aufgerufen, so wird die Funktion <code>doctest.testmode()</code> aufgerufen und ein Bericht auf der Konsole ausgegeben. Wird das Modul nicht als Hauptprogramm aufgerufen, sondern importiert, dann wird diese <code>testmod</code>-Funktion nicht aufgerufen. D.h. dieser Code kann sowohl für Testzwecke als auch für den produktiven Einsatz verwendet werden. Das ist auch sinnvoll, weil wenn man Teile der Datei immer löschen bzw. einfügen müsste, so würden sich Fehlerquellen auftun. Das würde den Sinn und Zweck von Doctests konterkarieren. def print1(x=0., y=1.): """ Dividiere zwei Zahlen Autor: Intruder Datum: 12.08.2025 >>> print1(2., 1.) 2.0 >>> print1(5., 2.) 2.5 >>> print1(5.) 5.0 """ print(x/y) if __name__ == "__main__": import doctest doctest.testmod(verbose=True) Ausgabe: Trying: print1(2., 1.) Expecting: 2.0 ok Trying: print1(5., 2) Expecting: 2.5 ok Trying: print1(5.) Expecting: 5.0 ok 1 items had no tests: __main__ 1 items passed all tests: 3 tests in __main__.print1 3 tests in 2 items. 3 passed and 0 failed. Test passed. Das gezeigte Beispiel ist so ziemlich das einfachste, das es gibt. Für weiterführende Details siehe z.B.: * [https://peps.python.org/pep-0257/ PEP 257 – Docstring Conventions] * [https://docs.python.org/3/library/doctest.html doctest — Test interactive Python examples] ''Einschub:'' Ganz ähnlich kann man auch Klassen testen, z.B. in folgendem Code-Fragment class Fahrzeug: # siehe Abschnitt "Objektorientierte Programmierung" # ... if __name__ == "__main__": vauweh = Fahrzeug(170, 90) beemweh = Fahrzeug(200, 120) print(vauweh.convertGeschw()) print(beemweh.convertGeschw()) Wird das Script als Hauptprogramm ausgeführt (z.B. zu Testzwecken), so erfolgt die Ausgabe der zwei, via <code>convertGeschw()</code>, umgerechneten Geschwindigkeiten. Wird es aber als Modul eingebunden, so wird der letzte Programmabschnitt nicht ausgeführt (<code>__name__ == "__main__"</code> ergibt <code>False</code>). == pytest == Siehe zu diesem Thema auch {{W|Modultest}}. pytest ist ein externes Modul und muss vorab installiert werden, z.B. mittels pip install -U pytest pip install -U pytest-html Python-Code, Datei test1.py: def add(x, y): return x + y def test_answer(): assert add(1, 1) == 3 Starten von pytest in der Konsole: pytest test1.py Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py F [100%] ========================================================= FAILURES ========================================================== ________________________________________________________ test_answer ________________________________________________________ def test_answer(): > assert add(1, 1) == 3 E assert 2 == 3 E + where 2 = add(1, 1) test1.py:6: AssertionError ================================================== short test summary info ================================================== FAILED test1.py::test_answer - assert 2 == 3 ===================================================== 1 failed in 0.09s ===================================================== Hier erhalten wir einen Fehler, da 1+1 eindeutig ungleich 3 ist. Aber aus irgendeinem Grund wollte der Programmierer oder Tester in diesem Fall, dass dies so ist. Testfälle werden übrigens mit dem Präfix <code>test_</code> eingeleitet. Python-Code: def add(x, y): return x + y + 1 def test_answer(): assert add(1, 1) == 3 Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py . [100%] ===================================================== 1 passed in 0.01s ===================================================== Jetzt ist alles in Ordnung. Weiterführendes siehe z.B. * [https://docs.pytest.org/en/stable/ pytest: helps you write better programs] == unittest == Auch unittest dient zur Durchführung von Testreihen, ist aber Bestandteil von Python. Hier wird vorerst nicht näher darauf eingegangen. Siehe z.B. * [https://docs.python.org/3/library/unittest.html unittest — Unit testing framework] Lt. ''Inden: Python Challenge; dpunkt, 2021, Seite 481'' soll unittest weniger komfortabel als pytest sein. Einen Vergleich von unittest mit pytest findet man in * [https://knapsackpro.com/testing_frameworks/difference_between/pytest/vs/unittest pytest vs unittest] = Python und Anwendungsprogramme = Bisher stand immer alleine die Programmiersprache Python (ev. unter Einbeziehung von Modulen) im Mittelpunkt der Betrachtungen. Aber Python kann auch als Makrosprache für Anwendungsprogramme auftreten. Als Beispiele seien {{W|FreeCAD}} und {{W|LibreOffice}} genannt. == FreeCAD == FreeCAD ist ein freies 3D-CAD-Programm. Hier soll nicht auf die Bedienung dieses CAD-Pakets eingegangen werden, sondern nur auf die Möglichkeit, mittels Python Makros zu schreiben. Als einfacher Einstieg soll ein Makro erstellt werden, welches eine Kugel (rot) und einen Quader (blau) zeichnet. Folgende Vorbereitungsschritte sind erforderlich (es sei vorausgesetzt, dass FreeCAD schon am Rechner installiert ist. Downloaden können Sie das Programm von der Website [https://www.freecad.org/downloads.php?lang=en]): * FreeCAD starten * Leere Datei erstellen * Makro > Makros > Erstellen ... Es öffnet sich ein leeres Editorfenster, in das Sie folgenden Code eingeben können: import FreeCAD import Part doc = FreeCAD.newDocument() # Kugel kugel = Part.makeSphere(10) form_element = doc.addObject("Part::Feature", "Kugel") form_element.Shape = kugel kug = FreeCAD.ActiveDocument.getObject("Kugel") kug.ViewObject.ShapeColor = (1.0, 0.0, 0.0) neuePosition = App.Vector(5, 2.5, 2.5) kug.Placement = App.Placement(neuePosition, kug.Placement.Rotation) # Quader quader = Part.makeBox(5, 5, 50) form_element = doc.addObject("Part::Feature", "Quader") form_element.Shape = quader quad = FreeCAD.ActiveDocument.getObject("Quader") quad.ViewObject.ShapeColor = (0.0, 0.0, 1.0) doc.recompute() Diesen Code können Sie nun ausführen: * Makro > Makro ausführen Es ergibt sich folgende Ausgabe (gedreht und gezoomt): [[Datei: PythonIng_freecad1.png|500px]] Siehe auch [https://wiki.freecad.org/Python_scripting_tutorial/de# Anleitung Skripterstellung mit Python]. Getestet wurde obiges Beispiel mit FreeCAD 1.1.3 unter Linux und 1.1.1 unter MS Windows. == LibreOffice == LibreOffice ist ein freies Officepaket ([https://de.libreoffice.org/]). Hier soll nur das Tabellenkalkulationsprogramm Calc kurz betrachtet werden. Es seinen in den ersten 3 Zellen (A1 bis A3) Zahlen gegeben. Diese sollen mit einem Python-Makro addiert und das Resultat in der Zelle A5 ausgegeben werden. Auch hier sind Vorbereitungsarbeiten nötig: * zuerst muss unter Linux das Verzeichnis <code>~/.config/libreoffice/4/user/Scripts/python</code> erstellt werden * für MS Windows ist es das Verzeichnis <code>%APPDATA%\LibreOffice\4\user\Scripts\python</code> ** drücken Sie zuerst Win + R (es öffnet sich das Ausführen-Fenster) ** geben Sie <code>%appdata%</code> ein, danach drücken Sie Enter (es öffnet sich der Explorer) ** navigieren Sie zu dem genannten Verzeichnis bzw. erstellen Sie das Verzeichnis * in diesem Verzeichnis wird dann mit einem beliebigen Texteditor das Python-Makro erstellt, in unserem Fall die Datei <code>summiere_zellen.py</code>: import uno def summiere_zellen(*args): # Zugriff auf das aktuelle Dokument und das aktive Tabellenblatt ctx = uno.getComponentContext() smgr = ctx.getServiceManager() desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) doc = desktop.getCurrentComponent() sheet = doc.getCurrentController().getActiveSheet() # Werte aus den Zellen A1 bis A3 auslesen w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value # Addition der drei Werte summe = w1 + w2 + w3 # Ergebnis in die Zelle A5 schreiben sheet.getCellRangeByName("A5").Value = summe * siehe dazu ggf. auch [https://help.libreoffice.org/latest/de/text/sbasic/python/python_locations.html?DbPAR=BASIC]. Weiter geht es in LibreOffice Calc mit dem Menü ''Extras > Makros > Makros verwalten > Python''. Dort wird das Makro <code>summiere_zellen</code> ausgeführt. Es ergibt sich z.B. folgendes Resultat [[Datei:PythonIng_libreoffice1.png]] Das Kürzel <code>uno</code> steht für '''U'''niversal '''N'''etwork '''O'''bjects. Etwas einfacher geht's auch so: def summiere_zellen(): desktop = XSCRIPTCONTEXT.getDesktop() model = desktop.getCurrentComponent() sheets = model.getSheets() sheet = sheets.getByIndex(0) w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value cell = sheet.getCellRangeByName("A5") cell.setValue(w1 + w2 + w3) Empfohlen wird auch, das Erweiterungspaket APSO ('''A'''lternative '''P'''ython '''S'''cript '''O'''rganizer, apso.oxt) zu installieren. Die Vorgehensweise wird hier nicht gezeigt, sondern nur darauf hingewiesen, dass man das einfach "googeln" kann. Siehe zur Python-Programmierung für LibreOffice auch [https://wiki.documentfoundation.org/Macros/Python_Guide/de Makros/Python-Handbuch]. Getestet wurden obige Beispiele mit LibreOffice 26.2.5.1 unter Linux und 26.2.1.2 unter MS Windows. = Ausblick = Dies war eine kurze Einführung in die Berechnungs- und Darstellungsmöglichkeiten mit Python. Es sollten etliche relevante Themen behandelt, oder zumindest kurz angesprochen worden sein. Wem dieser Text nicht ausreichend ist, der sei auf die entsprechenden weiterführenden Weblinks, Bücher und die Python-Hilfefunktion verwiesen. Python kennt noch viel mehr Befehle, als hier dargestellt wurden. Das Themenspektrum ist auch durch die Einbindung externer Module fast beliebig erweiterbar. = Weblinks= == Python allgemein == * [https://www.python.org/ Python Homepage] == Externe mathematische Module == * [https://numpy.org/ NumPy] * [https://numpy.org/doc/stable/user/numpy-for-matlab-users.html NumPy for MATLAB users] * [https://scipy.org/ SciPy] * [https://www.sympy.org/en/index.html SymPy] * [https://pandas.pydata.org/ pandas] * [https://github.com/maroba/findiff findiff] * [https://mpmath.org/ mpmath] == Externe Module für Grafiken == * [https://matplotlib.org/ Matplotlib] * [https://vpython.org/ VPython] * [https://docs.vtk.org/en/latest/api/python.html VTK] == Erstellung von User Interfaces == * [https://docs.python.org/3/library/tkinter.html tkinter - Python interface to Tcl/Tk] * [https://docs.python.org/3/library/curses.html curses - Terminal handling for character-cell displays] * [https://wiki.qt.io/Qt_for_Python Qt for Python] * [https://www.gtk.org/docs/language-bindings/python GTK and Python] == Erstellen virtueller Umgebungen == * [https://docs.python.org/3/library/venv.html venv - Creation of virtual environments] == Sonstige == * [https://python-control.readthedocs.io/en/stable/ Python Control Systems Library] * [https://pypi.org/project/regex/ regex - Regular Expressions] * [http://pyromat.org/ PYroMat] * [https://coolprop.org/coolprop/wrappers/Python/index.html CoolProp] * [https://pypi.org/project/iapws/ iapws] * [https://tespy.readthedocs.io/en/main/getting_started/introduction.html TESPy - Thermal Engineering Systems in Python] = Bücher = == Gedruckte Bücher, OpenBooks, Magazine == * Diverse: c't Python Lernen, Verstehen, Anwenden; Heise, 2022 * Ernesti, Kaiser: Python3 - das umfassende Handbuch; 5. Aufl., Rheinwerk, [https://openbook.rheinwerk-verlag.de/python/ OpenBook] * Inden: Python Challenge; dpunkt, 2021, ISBN 978-3-86490-809-5 * Klein: Numerisches Python; 2. Aufl., Hanser, 2023, ISBN 978-3-446-47170-2 * Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler; Rheinwerk, 2021, ISBN 978-3-8362-7316-9 * Weigend: Python 3 - Das umfassende Praxisbuch; 9. Aufl., mitp, 2022, ISBN 978-3-7475-0544-1 * Woyand: Python für Ingenieure und Naturwissenschaftler; 4. Aufl., Hanser, 2021, ISBN 978-3-446-46483-4 == Andere Wikibooks == * [[:en:Subject:Python_programming_language | Englische Wikibooks zum Thema Python]] * [[Python|Deutschsprachiges Python-Wikibook]] [[Bild:2von10.png|20%]] * [[Python unter Linux|Python 2.7 unter Linux]] [[Bild:10von10.png|100%]] {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} i2gsc3jvhzetw7g5jkurop6kgvcv29n 1090741 1090718 2026-09-13T08:16:09Z Intruder 1513 /* Type Checker */ Final etc. 1090741 wikitext text/x-wiki {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} = Hallo Welt und allgemeine Hinweise = == Was ist Python == * Python ist eine universelle höhere Programmiersprache. * Python ist objektorientiert. * Python ist Open-Source (Python Software Foundation License). * Python ist für viele Betriebssysteme erhältlich (z.B. für Linux, MS Windows, macOS). * Python ist ein Interpreter. * Python ist durch Module fast beliebig erweiterbar. * Python als Programmiersprache ist case-sensitive - d.h. Groß- und Kleinschreibung ist relevant bei der Eingabe von Befehlen. * Python ist in etlichen Anwendungsprogrammen (z.B. {{W|FreeCAD}}, {{W|LibreOffice}}, {{W|GIMP}}, {{W|Blender (Software) | Blender}}) als Makrosprache verwendbar. {{Wikipedia | Python (Programmiersprache)}} == Python installieren == === MS Windows === Laden Sie das aktuelle Python-Paket von der Webseite [https://www.python.org/] herunter. Weiter geht es wie bei jedem anderen größeren zu installierenden Programm. Einfach das Installationsprogramm im Explorer doppelklicken und den Anweisungen des Setup-Programmes folgen. === Linux === Entweder ist Python bereits standardmäßig installiert, ansonsten ist die Installation mittels Paketmanagementsystem einfach möglich. Aber auch die Spyder-Entwicklungsumgebung ([https://www.spyder-ide.org]) bietet einen guten Einstieg mit Python (das gilt auch für MS Windows). Spyder bringt auch schon etliche wichtige Module standardmäßig mit. == Python starten == === MS Windows === Das Icon für das Python-Programm doppelklicken. Und schon startet das Programm. [[Datei:PythonIng_start1.jpg]] Python im interaktiven Modus präsentiert sich dann so: Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> Alternativ kann das Programm auch über die Eingabeaufforderung oder die PowerShell gestartet werden: c:\devel\Python>python.exe Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> === Linux === Tippen Sie einfach das Wort „python“ (oder unter openSUSE Tumbleweed z.B. auch „python3.11“ oder „python3.13“) in einem Linux-Terminal ein, schließen den Befehl mit der RETURN-Taste ab, und schon startet Python im interaktiven Modus: Python 3.13.12 (main, Feb 09 2026, 22:37:44) [GCC] on linux Type "help", "copyright", "credits" or "license" for more information. >>> Es gibt auch noch andere Möglichkeiten Python zwecks Programmausführung zu starten, z.&nbsp;B. den {{W|Shebang}} (<code>#!</code>) am Beginn eines Python-Scripts. Das Script sei als Script.py gespeichert. Dann kann das Script mit ./Script.py ausgeführt werden. Für openSUSE Tumbleweed sei nachfolgend ein lauffähiges "Hallo Welt!"-Script angegeben. Es wird in diesem Script der Python-Interpreter in der Version 3.13 verwendet : #!/usr/bin/python3.13 print("Hallo Welt!") Die Berechtigungen zum Ausführen der Datei müssen natürlich noch richtig gesetzt werden, z.B. mittels <code>chmod 777 Script.py</code>. <small><code>chmod</code> ist die Abkürzung für"'''ch'''ange file '''mod'''e bits".</small> <small>Die "Maske" <code>777</code> ist nur für Testzwecke sinnvoll, weil sie leicht zu merken ist und für alle Benutzer alle Zugriffsberechtigungen ('''r'''ead/'''w'''rite/e'''x'''ecute für owner/group/others) setzt. Im richtigen Einsatz wird man das aus Sicherheitsgründen nicht so handhaben, sondern nur die Berechtigungen setzen, die unbedingt erforderlich sind. Welche Zugriffsberechtigungen gesetzt sind, kann man z.B. mit dem Befehl <code>ls -l</code> oder <code>ll</code> ('''l'''i'''s'''t directory contents) erfragen. Aber dazu im Moment genug. Erfahrene Linux-Nutzer kennen das ohnehin und Anfänger sollen jetzt nicht mit Linux-Interna überfordert werden. Bei Bedarf siehe die Linux-Man-Pages oder dezidierte Bücher zu Linux.</code></small> <small>Oder das Script wird in einen Pfad verschoben, in dem sich ausführbare Programme generell befinden (welche Verzeichnisse im PATH liegen, kann bspw. mit <code>echo $PATH</code> abgefragt werden). Das Script kann dann wie ein normales Programm ohne weitere Angaben mit Script.py gestartet werden. Alternativ wird nicht das Script an sich verschoben, sondern nur ein symbolischer Link angelegt, z.B. mit <code>ln -s ~/tmp/Script.py ~/.local/bin/Script.py</code>. <code>~/.local/bin</code> sei ein im PATH gelegenes Verzeichnis. Dies sind aber schon Features für fortgeschrittene Linux-Benutzer und werden am Anfang eher selten benötigt.</small> == Ein paar Worte zur Erklärung == === Tests === Getestet wurden die Beispiele unter den Betriebssystemen * MS Windows 10 mit der Python-Version 3.12.0 (teilweise auch mit 3.12.2 und 3.13.1; nur die Inhalte die bis spätestens Juli 2025 erstellt wurden) * MS Windows 11 ab der Python-Version 3.13.4 (nur zum Teil; ab Juli 2025) * openSUSE Leap 15.6 mit der Python-Version 3.11.12 (Spyder, nur vereinzelt) und zum Teil mit 3.12.11 (ab Juli 2025 bis November 2025). * openSUSE Tumbleweed ab der Python-Version 3.13.9 (nur vereinzelt, ab November 2025) === Popularität === * An Beliebtheit rangiert Python mit Stand September 2026 mit einem Rating von 17,76% an 1. Stelle vor C und C++ (lt. [https://www.tiobe.com/tiobe-index/ TPCI - TIOBE Programming Community Index]). * Lt. [https://innovationgraph.github.com/global-metrics/programming-languages GitHub Top 50 Programming Languages Globally] lag Python im Q1/2026 auf Rang 2, vor TypeScript und hinter JavaScript. * [https://pypl.github.io/PYPL.html PYPL] (Popularity of Programming Language Index) ist ein anderer Popularitätsindex für Programmiersprachen. Auch hier liegt Python mit großem Vorsprung auf dem ersten Platz (52,08%), gefolgt von Java (13,34%) und C/C++ (7,99%) (Stand September 2026). === Namensgebung === Der Name "Python" rührt von der Komikertruppe {{W|Monty Python}} her. Die Icons für Python (z.B. Python selbst, Eric IDE, IDLE) sind aber durch die Python-Schlangenart symbolisiert. <gallery> Python-logo-notext.svg|Python-Logo Guido van Rossum in PyConUS24.jpg|{{W|Guido van Rossum}} (geb. 1956), der Erfinder von Python </gallery> == Ein erstes Programm == Kommentare werden in Python mit der Raute (#) eingeleitet. Sie werden vom Python-Interpreter ignoriert. Text kann mit der print-Funktion ausgegeben werden. Starten Sie Python und geben sie folgende Anweisungen zeilenweise ein >>> # Das ist ein Kommentar >>> print("Hallo Welt!") Als Ergebnis erhalten Sie Hallo Welt! Der Prompt (>>>) ist selbstverständlich nicht einzutippen, sondern wird vom Python-System geliefert. Strings können in Python entweder in Anführungszeichen (") gesetzt werden oder in Hochkommatas('). In diesem Text wird die erste Variante bevorzugt eingesetzt. Im Gegensatz zu Julia ist es hier egal, ob zwischen <code>print</code> und der öffnenden Klammer Leerzeichen stehen. = Python als Taschenrechner = == Allgemeines == Wir wollen 3 * 5 berechnen. Dazu starten wir Python im interaktiven Modus. Geben Sie dann die Formel >>> 3 * 5 ein, drücken die Taste ENTER/RETURN ({{Taste|↵}}) und erhalten als Ergebnis 15 Auch kompliziertere Ausdrücke sind möglich. Beispielsweise mit Winkelfunktionen, Quadratwurzeln etc. Wir wollen nun den Ausdruck <math>\sin\sqrt{15}</math> berechnen : >>> import math >>> math.sin(math.sqrt(15)) -0.6679052983383519 Als erstes wird das math-Modul importiert. Dann wird der mathematische Ausdruck berechnet. Eine andere Variante, die dasselbe Ergebnis liefert, ist >>> from math import * >>> sin(sqrt(15)) -0.6679052983383519 Es wird also aus dem Modul <code>math</code> alles importiert (erkennbar am <code>*</code>). Will man nicht alles importieren, so kann man das auch einschränken: >>> from math import sin, sqrt Beenden lässt sich das Python-Programm durch Eingabe von <code>exit()</code> (und natürlich ist zur Bestätigung die RETURN-Taste zu drücken). == Die Hilfefunktion von Python == Bei Eingabe der Anweisung <code>help</code> oder <code>help()</code> springt Python in den Hilfemodus. Eingabe: >>> help() Eingabe: help> math.sin Ausgabe: Help on built-in function sin in math: math.sin = sin(x, /) Return the sine of x (measured in radians). Für die komplette Python-Dokumentation siehe [https://docs.python.org/3/]. Verlassen kann man den Hilfemodus durch das Drücken von STRG-C, bzw. der Eingabe von q, quit oder exit mit anschließendem Drücken der RETURN-Taste. == Aufgaben == * Erkunden Sie die Tangensfunktion "tan" mittels Python-Hilfe (vergessen Sie nicht das math-Modul zu importieren und das <code>math.</code> vor <code>tan</code>) * Berechnen Sie mit Python den Ausdruck <math>\frac{1}{2}\cdot \text{e}^2 \cdot \tan(\pi/3)</math>. Siehe für die Exponentialfunktion im Python-Hilfesystem auch den Befehl <code>math.exp</code>. Alternativ kann auch die Konstante <code>math.e</code> eingesetzt werden. Potenzieren kann man bei Python mit dem **-Operator (z.B. 2**3 = 8). Für <math>\pi</math> gibt es <code>math.pi</code>. = Python als Scriptsprache = Häufig wird man aber kompliziertere Anweisungsfolgen verarbeiten müssen. Diese will man normalerweise nicht jedesmal neu eingeben, sondern in einer Datei speichern und diese Datei dann zur Ausführung bringen. Speichern Sie dazu folgenden Code in einer Textdatei, z.B. unter MS Windows als c:\tmp\test1.py # Das ist ein Kommentar print("Hallo Welt!") Python-Dateien werden mit der Dateiendung .py versehen. Achten Sie darauf, dass vor dem print keine Leerzeichen vorhanden sind. Das ist eine Python-Eigenheit. Wie wir später sehen werden, nutzt Python Einrückungen als syntaktisches Mittel, z.B. um bei Schleifen den Schleifenkörper zu kennzeichnen. Danach bringen Sie die Skriptdatei test1.py (sozusagen das Hauptprogramm) folgendermaßen zur Ausführung: 1) Starten Sie unter MS Windows die Eingabeaufforderung (oder alternativ auch die Windows PowerShell). Das sieht dann etwa so aus: Microsoft Windows [Version 10.0.19045.3693] (c) Microsoft Corporation. Alle Rechte vorbehalten. C:\Users\xyz> : <small>Falls jemand nicht weiß, wie man die Eingabeaufforderung startet: Eine Möglichkeit ist, einfach in der Taskleiste von Windows das "Start"-Symbol &nbsp;([[Image:Windows_logo_-_2021_(Black).svg|10px]])&nbsp; mit der rechten Maustaste anklicken. "Ausführen" auswählen (oder alternativ für die PowerShell unter Windows 10 den Eintrag "Windows PowerShell", unter Windows 11 den Eintrag "Terminal"). Im sich öffnenden Dialogfenster gibt man in die "Öffnen"-Zeile das Wort <code>cmd</code> ein und mit "OK" wird das Ganze bestätigt.</small> 2) Wechseln Sie mittels <code>cd c:\tmp</code> in das Verzeichnis c:\tmp 3) Angenommen, Sie haben Python unter dem Pfad <code>c:\devel\Python\</code> installiert. Starten Sie das Programm so (der Prompt <code>c:\tmp></code>ist natürlich nicht mit einzutippen): c:\tmp>c:\devel\Python\python.exe test1.py 4) Wie erwartet ergibt sich folgende Ausgabe am Bildschirm Hallo Welt! Die Vorgehensweise unter Linux ist prinzipiell gleich. Die kleinen Unterschiede, wie z.B. der Slash statt dem Backslash in Pfadangaben, sollten für Linux-Benutzer keine Hürde darstellen. == Variablen == Variablenbezeichner können aus Buchstaben (A-Za-z), Ziffern (0-9) und Underscores (_) bestehen, dürfen aber nicht mit einer Zahl beginnen. Führende Underscores haben u.a. im Kontext mit der Objektorientierten Programmierung eine spezielle Bedeutung und sollten nicht für "normale" Variablenbezeichner verwendet werden. Gültige Variablenbezeichner wären also: xyz x1 _wert name_anzahl Theoretisch kann man auch Umlaute, griechische Buchstaben u.ä. in Variablenbezeichnern nutzen, z.B. ößÜ = 16 α = 134 print(ößÜ) print(α) Ausgabe: 16 134 Davon wird aber aus offensichtlichen Gründen ({{W|Englisch als Lingua franca}}) abgeraten. Das Eurozeichen (€) etc. darf man ohnehin nicht in Variablenbezeichnern verwenden, dies ergäbe einen Syntaxfehler. Siehe dazu auch [https://peps.python.org/pep-3131/]. Es gibt in Python etliche Schlüsselwörter (z.B. for, if oder return). Diese dürfen nicht als eigene Variablenbezeichner verwendet werden. Eine Liste aller Schlüsselwörter liefert das Script import keyword print(keyword.kwlist) <small>Übung: Speichern Sie dieses Script in eine Datei, z.B. in c:\tmp\test1.py. Führen Sie diese Datei aus, um die Liste der Schlüsselwörter auszugeben.</small> Da Python case-sensitiv ist, repräsentieren folgende Bezeichner verschiedene Variablen: xyz XYZ xYz Werte werden an Variablen mittels Gleich-Zeichen (=) zugewiesen. Im Folgenden wird der Code immer in der Datei c:\tmp\test1.py gespeichert. x = 5 y = 10 z = x*y print(z) Bringen Sie die Datei test1.py zur Ausführung, so erhalten Sie folgende Bildschirmausgabe 50 Sie können auch mehrere Anweisungen in einer Zeile durch Semikolon getrennt schreiben. Dies führt aber zu unübersichtlichem Code. x = 5; y = 10; z = x*y; print(z) Ausgabe: 50 Auch aus der Programmiersprache C/C++ oder Java bekannte Konstrukte können Sie verwenden, z.B. x = 5 # x = x - 2 x -= 2 print(x) Bildschirmausgabe: 3 Beachten Sie, dass mit dem =-Zeichen eine Wertezuweisung durchgeführt wird. Dies ist nicht äquivalent zum mathematischen =-Zeichen, wie am vorigen Beispiel zu ersehen ist. Den Inkrement-/Dekrementoperator (z.B. x++ oder x--) aus C/C++ oder Java kennt Python aber nicht. Variablen sind nicht an einen bestimmten Datentyp gebunden, folgendes ist mit Python problemlos möglich: import math wert = 10 print(wert) wert = 35.5 print(wert) wert = "Hallo" print(wert) wert = math.pi print(wert) Ausgabe: 10 35.5 Hallo 3.141592653589793 == Physische und logische Zeilen == In Python muss eine Anweisung in einer logischen Zeile Platz finden. Wird eine Anweisung aber zu lang für eine Zeile, dann kann sie in mehrere physische Zeilen unterteilt werden. Dies kann einerseits durch einen Backslash am Ende einer Zeile geschehen, z.B. a = 2 + \ 5 Dies stellt eine logische Zeile dar, die in zwei physische Zeilen unterbrochen ist. Geklammerte Ausdrücke werden automatisch zu einer logischen Zeile verbunden, z.B. a = (2 + 5) Achtung: Im ersten Beispiel darf nach dem Backslash nichts mehr stehen, auch kein Kommentar. Dies trifft im zweiten Bespiel nicht zu, hier könnte noch ein Kommentar folgen, z.B. a = (2 + # Kommentar 5) Auch für Strings gibt es Möglichkeiten, diese auf mehrere Zeilen aufzuspalten. # Kurzer String str1 = "ABC" # Langer String str2 = """Hallo Welt, Grüetzi Schwyzer, Servus an alle""" # Backslash str3 = "UVW\ XYZ" # Mit Klammern str4 = ("Sehr langer Text, der automatisch .............. " "in einer einzigen Variable zusammengefügt wird." ) print(str1) print(str2) print(str3) print(str4) Ausgabe: ABC Hallo Welt, Grüetzi Schwyzer, Servus an alle UVWXYZ Sehr langer Text, der automatisch .............. in einer einzigen Variable zusammengefügt wird. ==Hexadezimale, oktale, binäre und andere Zahlen== d = 1050 # Dezimalzahl h = 0xAA2 # Hexadezimalzahl o = 0o12 # Oktalzahl b = 0b100001101 # Binärzahl print(d) print(h) print(o) print(b) Ausgabe: 1050 2722 10 269 Groß- und Kleinbuchstaben sind in obigen Literalen übrigens egal. So kann man z.B. statt <code>0b1001</code> auch <code>0B1001</code> schreiben (siehe dazu [https://docs.python.org/3/reference/lexical_analysis.html#integer-literals]). Sie können auch dezimale in hexadezimale Zahlen umwandeln, usw.: h = hex(1050) # Dezimalzahl -> Hexadezimalzahl b = bin(1050) # Dezimalzahl -> Binärzahl o = oct(1050) # Dezimalzahl -> Oktalzahl print(h) print(b) print(o) Ausgabe: 0x41a 0b10000011010 0o2032 Gegeben sei die Zahl 121 zur Basis 3. Diese soll in eine Dezimalzahl umgewandelt werden. Das kann so geschehen: z = int("121", 3) print(z) Ausgabe: 16 Dass dies richtig ist, davon kann man sich folgendermaßen überzeugen: <math> 1 \cdot 3^2 + 2 \cdot 3^1 + 1 \cdot 3^0 = 9 + 6+ 1 = 16 </math> Zahlen übersichtlicher schreiben kann man auch mittels Underscore, z.B.: print("Eine Million (Variante 1) =", 1000000) print("Eine Million (Variante 2) =", 1_000_000) print("Eine Rechnung:", 2_000 * 400_000); Es ergibt sich bei beiden Varianten die gleiche Ausgabe. Variante 2 ist aber im Sourcecode leichter lesbar, detto die Zahlen in der Rechnung: Eine Million (Variante 1) = 1000000 Eine Million (Variante 2) = 1000000 Eine Rechnung: 800000000 == Strings und Platzhalter== Ein paar einfache Beispiele: print("Hallo {}" . format("Hugo")) print("Hallo {:s}" . format("Hugo")) print("Hallo %s" % "Hugo") Ausgabe: Hallo Hugo Hallo Hugo Hallo Hugo Python-Code (formatted string literals, Beispiel 1): str1 = "Hallo" str2 = "Hugo" print(f"{str1} {str2}") Ausgabe: Hallo Hugo Python-Code (formatted string literals, Beispiel 2): wert = 11.567 print(f"Ausgabe: {wert:.5f}") Ausgabe: Ausgabe: 11.56700 Komplexere Beispiele: print("Hallo {} und {}" . format("Hugo", "Mike")) print("Hallo {name1} und {name2}" . format(name2="Hugo", name1="Mike")) # Füllzeichen: * # Bündigkeit: > (=rechts), < (=links), ^ (=zentriert) # Feldweite: 10 # Typ: s (=String), f (=Gleitkommazahl), d (=Dezimalzahl) etc. print("Hallo {:*>10s}" . format("Hugo")) print("Hallo {:*<10s}" . format("Hugo")) Ausgabe: Hallo Hugo und Mike Hallo Mike und Hugo Hallo ******Hugo Hallo Hugo****** Python-Code: str = "Hallo\t%s\t%7.2f\t%10.2e\t%i" % ("Hugo", 12.34567, 34.567, 264) print(str) Ausgabe: Hallo Hugo 12.35 3.46e+01 264 == Unicode == Neben den bekannten ASCII-Zeichen lassen sich Zeichen auch mittels Unicode beschreiben. Griechische Buchstaben oder komplexere mathematische Operatoren - all das sollte kein Problem sein. Siehe auch {{W|Unicode}}, {{W|Liste der Unicodeblöcke}} und {{W|Unicodeblock Mathematische Operatoren}}. Im Folgenden werden ein paar Zeichen (Allquantor, Nabla-Operator, Existenzquantor), die man aus der Mathematik kennt, erzeugt. ch1 = "\N{FOR ALL}" ch2 = "\N{NABLA}" ch3 = "\u2203" print(ch1, ch2, ch3) Ausgabe: ∀ ∇ ∃ <small>Diese Ausgabe ergibt sich z.B. mit der IDLE-Shell oder mit Cygwin. Beim Ausführen über die Windows-Eingabeaufforderung oder Windows PowerShell unter MS Windows 10 erfolgt keine korrekte Darstellung. IDLE ist die mit Python mitgelieferte IDE ('''I'''ntegrated '''D'''evelopment '''E'''nvironment, Integrierte Entwicklungsumgebung). Gegen Ende dieses Textes wird IDLE kurz beschrieben. Das Problem mit der Windows Eingabeaufforderung lässt sich aber umgehen. Man muss nur eine Schriftart auswählen, die die Zeichen kennt, z.B. "DejaVu Sans Mono". Dazu klicken Sie einfach bei der Eingabeaufforderung mit der rechten Maustaste oben auf die weiße Leiste und wählen im aufpoppenden Fenster den Menüpunkt "Eigenschaften". Es öffnet sich ein Dialogfenster. Über den Reiter "Schriftart" lässt sich nun die Schriftart einstellen. Unter MS Windows 11 oder openSUSE Leap 15.6 (bash-Konsole) gibt es dieses Problem ohnehin nicht.</small> == Reguläre Ausdrücke == Python kennt auch {{W|Regulärer Ausdruck|reguläre Ausdrücke}}. Dazu gibt es in Python das Modul <code>re</code>. Beipielsweise sollen alle Zahlen (<math>\text{zahl}\in\mathbb{N}_0</math>) in einem String gesucht und ausgegeben werden. Als String sei gegeben: <code>3x Grüße und 100 Kekse.</code> Das Muster (Pattern) ist <code>\d+</code>. <code>\d</code> steht für eine Dezimalziffer 0-9. Das Plus-Zeichen (+) steht symbolisch für ein oder mehrere Zeichen des vorherigen Ausdrucks. Hier also ein oder mehrere Dezimalziffern. Es wird die Funktion <code>findall</code> aus dem Modul <code>re</code>verwendet. Python-Code: from re import findall str = "3x Grüße und 100 Kekse." pat = "\\d+" # Doppel-Backslashes müssen verwendet werden, sonst gibt Python eine Warnung aus! # alternativ: pat = r"\d+" # oder: pat = "[0-9]+" numb = findall(pat, str) print(numb) Ausgabe: ['3', '100'] Python kennt noch viele weitere Möglichkeiten mittels regulärer Ausdrücke zu hantieren. Dies soll hier aber nicht vertieft werden, da das Thema schon ziemlich speziell und komplex ist. Bei Bedarf siehe aber z.B. die Bücher ''Weigend, Seite 380ff'' und ''Ernesti, Kaiser'' [https://openbook.rheinwerk-verlag.de/python/28_001.html] oder die Python-Dokumentation [https://docs.python.org/3/library/re.html]. Auch [[Python unter Linux: Reguläre Ausdrücke]] liefert ein umfangreiches und brauchbares Python-2-Kapitel zu den regulären Ausdrücken. Die dort gelisteten Beispiele müssten ggf. vor Verwendung auf Python-3 umgeschrieben werden. <small>Wie macht man das? Dazu siehe z.B. [https://openbook.rheinwerk-verlag.de/python/43_001.html], [https://portingguide.readthedocs.io/en/latest/] oder [https://www.digitalocean.com/community/tutorials/how-to-port-python-2-code-to-python-3]</small> <small>Es gibt auch ein externes Modul ''regex'', das bei Bedarf extra installiert werden muss ([https://pypi.org/project/regex/]). Es bietet zusätzliche Funktionalität und gründlicheren Unicode-Support. Dies sei hier aber nur der Vollständigkeit halber erwähnt.</small> == Verzweigungen == === if === Die IF-Verzweigung sei aus anderen Programmiersprachen bereits bekannt. In {{W|Pseudocode}} lässt sie sich folgendermaßen darstellen: WENN bedingung TRUE führe block1 aus SONST führe block2 aus ENDE Als {{W|Aktivitätsdiagramm|UML-Aktivitätsdiagramm}} sieht das in etwa so aus: [[File:If-Then-Else-diagram.svg|200px]] Und als {{W|Nassi-Shneiderman-Diagramm|Nassi-Shneiderman-Struktogramm}} so: [[File:Zweiseitige Auswahl.png|250px]] In Python gibt es keinen expliziten ENDE-Kennzeichner. Stattdessen wird der Code durch Einrückungen strukturiert. Alles mit der gleichen Einrückungstiefe gehört zum selben Block. Dies zeichnet Python vor anderen Programmiersprachen aus. Die test1.py-Datei laute also wie folgt: x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: Der else-Zweig wird ausgefuehrt x ist groesser oder gleich 4 Man achte auch auf die Doppelpunkte in der if- und else-Zeile. Darauf vergisst man gerne, wenn man von anderen Programmiersprachen kommt. Folgendes wäre in Python ein Fehler (genauer gesagt ein IndentationError). x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Auch Nachstehendes würde nicht zum gewünschten Ergebnis führen (löst aber keine Fehlermeldung aus). Der letzte print-Befehl ist schon außerhalb der IF-ELSE-Verzweigung. x = 3 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: x ist kleiner als 4 x ist groesser oder gleich 4 Python kennt eine Reihe von Vergleichs- und Verknüpfungsoperatoren: <, <= ... kleiner (gleich) >, >= ... größer (gleich) == ... gleich != ... ungleich is ... identisch is not ... nicht identisch and ... AND or ... OR not ... NOT Beispielsweise: a = 5 b = 9 if a<=10 and b!=7: print("OK") else print("Nicht OK") Ausgabe: OK Der else-Block kann übrigens auch ersatzlos entfallen. Als Pseudocode sieht das so aus WENN bedingung TRUE führe block aus ENDE Mehrfache Verzweigungen werden durch das elif-Konstrukt erstellt. In Pseudocode: WENN bedingung1 TRUE führe block1 aus SONST WENN bedingung2 TRUE führe block2 aus SONST WENN bedingung3 TRUE führe block3 aus SONST führe block4 aus ENDE Ein Python-Beispiel: a = 14 if a<=10: print("<=5") elif a>11 and a<15: print("11 bis 15") elif a>16 and a<20: print("16 bis 20") else: print(">=20") Ausgabe: 11 bis 15 In Python gibt es auch die Schlüsselwörter <code>True</code> (für wahr) und <code>False</code> (für falsch). Man beachte, dass sie mit Großbuchstaben beginnen. Andere Schreibweisen wären ein Fehler. Sie gehören zum Datentyp <code>bool</code>. Ihnen sind auch die Zahlen <code>1</code> und <code>0</code> zugewiesen. Man beachte, dass {{W|Rundungsfehler}} auftreten können. D.h. man sollte bei der Verwendung von {{W|Gleitkommazahl|Gleitpunktzahlen}} niemals auf absolute Genauigkeit prüfen, sondern eine Toleranz (einen <math>\varepsilon</math>-Wert) vorgeben. Ein klassisches Beispiel, das ein falsches Ergebnis liefert, ist: i = 0.1 + 0.2 print(i) if i == 0.3: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 NOK Und das, obwohl man schon in der Volksschule lernt, dass 0.1 + 0.2 gleich 0.3 ist. Korrekt muss das obige Beispiel z.B. so umgeschrieben werden: ist = 0.1 + 0.2 soll = 0.3 epsilon = 0.000001 print(ist) if abs(ist-soll) < epsilon: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 OK Alternativ kann auch die <code>math.isclose()</code>-Funktion verwendet werden. Das sei aber hier nur erwähnt und nicht konkret ausgeführt. <u>Aufgabe:</u> Recherchieren Sie im Internet zum Thema <code>math.isclose()</code>-Funktion. === match === Ab Python 3.10 gibt es auch die match-Anweisung. Dies ist das Python-Pendant für die switch-Anweisung in anderen Programmiersprachen, geht aber bei näherer Betrachtung weit darüber hinaus. Hier nur ein einfaches Beispiel: x = "Hello" match x: case "Servus" | "Ciao": # or print("Servus an alle") case "Grüetzi": print("Grüetzi Schwyzer") case _: # other, default, sonstiges ... print("Hallo Welt") Ausgabe: Hallo Welt Als Struktogramm sieht das in etwa so aus: [[File:Mehrseitige Auswahl.png|250px]] Für nähere Details siehe z.B. [https://www.geeksforgeeks.org/python-match-case-statement/], [https://learnpython.com/blog/python-match-case-statement/], [https://docs.python.org/3/tutorial/controlflow.html#match-statements] und das Python Enhancement Proposal (PEP) 636 – Structural Pattern Matching: Tutorial [https://peps.python.org/pep-0636] und dort insbesondere den Anhang A - Quick Intro. <small><code>match, case, _</code> etc. sind sogenannte ''soft keywords''. Im Gegensatz zu den normalen Schlüsselwörtern dürfen ihnen auch Werte zugewiesen werden. Eine Liste der weichen Schlüsselwörter lässt sich durch <code>keyword.softkwlist</code> erstellen (die Anweisung gibt es seit Python 3.9). Siehe dazu auch [https://stackoverflow.com/questions/65800344/what-are-soft-keywords] und [https://docs.python.org/3/library/keyword.html#keyword.softkwlist].</small> == Schleifen == Kopfgesteuerte Schleife, Endlosschleife und fußgesteuerte Schleife: [[File:Programmingloops.svg|450px]] === while === Die WHILE-Schleife ist kopfgesteuert. Sie funktioniert wie aus anderen Programmiersprachen bekannt. In Pseudocode: SOLANGE bedingung TRUE führe block aus ENDE In Python: x = 0 while x <= 10: print(x) x += 1 Ausgabe: 0 1 2 3 4 5 6 7 8 9 10 Eine Endlosschleife ergibt sich z.B. so: i = 5 while True: print(i) i-=1 Beendet werden kann sie mit der Tastenkombination STRG-C. Eine fußgesteuerte Schleife kann so simuliert werden: i = 5 while True: print(i) i-=1 if i<=0: print("Fire") break Ausgabe: 5 4 3 2 1 Fire Der <code>break</code>-Befehl wird etwas später noch einmal kurz thematisiert. === for === Struktogramm einer for-Schleife: [[File:Zählschleife.png|200px]] In Python bspw. so: for x in range(6): print(x*2) Ausgabe: 0 2 4 6 8 10 Die Schleife läuft von 0 bis 5. Ausgegeben wird jeweils der Wert x*2. Aquivalent kann diese Schleife auch so geschrieben werden: for x in range(0, 11, 2): print(x) Die Ausgabe ist wie oben. Der Startwert sei 0, der Endwert ist 11-1 und die Schrittweite ist 2. Ein anderes Beispiel sei for x in "text": print(x) Ausgabe: t e x t == Schleifen abbrechen == === break === <code>break</code> bricht die Schleife ab und setzt mit dem nächsten Befehl außerhalb der Schleife fort. for var in range(100): print(var) if var == 5: break Ausgabe: 0 1 2 3 4 5 === continue === <code>continue</code> bricht den aktuellen Schleifendurchlauf ab und setzt mit dem nächsten Schleifendurchlauf fort. for var in range (11): if var == 5: continue print(var) Ausgabe: 0 1 2 3 4 6 7 8 9 10 == try - except == try: z1 = 12 / 0 print(z1) except ZeroDivisionError: print("Das Ergebnis ist unendlich") except: print("Kann nicht berechnet werden!") print("Bitte die Formel korrigieren!") print("Setze Programm fort!") Ausgabe: Das Ergebnis ist unendlich Setze Programm fort! Es wird versucht, eine Zahl durch Null zu dividieren. Das ist nicht möglich, es wird eine Ausnahme ausgelöst. Das Programm springt daher in den except-ZeroDivisionError-Block und führt die dort gelisteten Anweisungen aus (in unserem Fall eine print-Anweisung). Danach wird das Programm fortgesetzt. Würden wir dieses Programm ohne try-except ausführen, so ergibt sich aus z1 = 12 / 0 print(z1) folgende Fehlermeldung und ein unmittelbarer Programmabbruch Traceback (most recent call last): File "C:\tmp\test1.py", line 1, in <module> z1 = 12 / 0 ZeroDivisionError: division by zero Mit dem try-except-Mechanismus können also Ausnahmen oder Fehler aufgefangen und behandelt werden. In unserem Beispiel ist das eher trivial, aber bei größeren Programmen kann das durchaus Sinn machen. Neu in Python 3.14 ist, dass mehrere Ausnahmen auch ohne Klammern angegeben werden können, z.B.: bis inkl. Python 3.13 nur: except (ZeroDivisionError, ValueError): ab Python 3.14 auch: except ZeroDivisionError, ValueError: == pass == Ein leerer Block muss in Python mittels dem Schlüsselwort <code>pass</code> dargestellt werden. Z.B. x = 2 if x == 1: print("Wert ist ", x) else: pass Würde man das <code>pass</code> im else-Block weglassen, so würde man eine Fehlermeldung erhalten: IndentationError: expected an indented block after 'else' statement on line 5 = Funktionen = == Aufrufen von Funktionen == Funktionen sind uns im Rahmen dieses Kurses schon zuhauf begegnet. Sei es die print()-, die math.sin()- oder die hex()-Funktion. All diese Funktionen werden von Python zur Verfügung gestellt, ohne dass man sie explizit programmieren müsste. Aufgerufen werden diese Funktionen, indem man ihren Namen eintippt, gefolgt von runden Klammern. In diesen Klammern können noch Argumente übergeben werden. Auch Rückgabewerte sind möglich. == Funktionen selber schreiben == Funktionen werden mit dem def-Schlüsselwort (man definiert die Funktion) eingeleitet, danach folgt der Funktionsname, danach wiederum runde Klammern, in denen formale Argumente stehen können. Abgeschlossen wird die def-Zeile mit einem Doppelpunkt. Danach folgt der Funktionskörper. Dieser Funktionskörper muss wiederum eingerückt werden (wie von den Verzweigungen und Schleifen bekannt). Aufgerufen wird diese Funktion, indem man ihren Funktionsnamen eingibt, gefolgt von runden Klammern (ggf. mit den aktuellen Parametern). Z.B. # Funktion definieren def halloWelt(i): # i ... beliebige Ganzzahl print("Hallo " * i, end="") print("Welt!") # Funktion aufrufen halloWelt(3) Ausgabe: Hallo Hallo Hallo Welt! Unterschied zwischen formalen und aktuellen Parametern: [[Datei:PythonIng_func1.jpg]] <small>Aktuelle Parameter werden auch Argumente genannt.</small> Rückgabe von Funktionswerten: # Funktion definieren def mathFunc(a, b): r1 = a + b r2 = a * b return r1, r2 # Funktion aufrufen c, d = mathFunc(3, 5) # Ausgabe der zurückgegebenen Werte print(c) print(d) Ausgabe: 8 15 Es werden r1 und r2 zurückgegeben und den Variablen c und d zugewiesen. (r1, r2) und (c, d) sind Tupel. Was Tupel konkret sind, siehe etwas später in diesem Kapitel. 3 und 5 sind die aktuellen Parameter (die Argumente). a und b sind die formalen Parameter. Die Zuweisung der aktuellen zu den formalen Parametern erfolgt in der gegebenen Reihenfolge, also die Zahl 3 wird an a übergeben und die Zahl 5 an b. Vorgabeparameter, z.B.: def mathFunc(a=10, b=20): r1 = a + b r2 = a * b return r1, r2 c, d = mathFunc(3, 5) print(c) print(d) e, f = mathFunc(5) print(e) print(f) g, h = mathFunc(b=6) print(g) print(h) Ausgabe: 8 15 25 100 16 60 Erklärung: * Erster <code>mathFunc</code>-Aufruf: Es werden, wie weiter oben, die Argumente 3 und 5 an die formalen Parameter a und b übergeben. Die Rückgabewerte r1 und r2 werden an c und d übergeben. Somit ist c=8 und d=15. * Zweiter <code>mathFunc</code>-Aufruf: Es wird nur das Argment 5 an a übergeben. b behält den Vorgabewert 20. D.h. e= 25 und f=100. * Dritter <code>mathFunc</code>-Aufruf: Es wird nur die Zahl 6 an b übergeben, a behält seinen Vorgabewert 10. Somit ergibt sich g=16 und h=60. Beispiel (Schlüsselwortargumente vs. Positionsargumente): def mathFunc(a, b): r1 = a - b r2 = a / b return r1, r2 c, d = mathFunc(b=3, a=5) # Schlüsselwortargumente e, f = mathFunc(3, 5) # Positionsargumente print(c) print(d) print(e) print(f) Ausgabe: 2 1.6666666666666667 -2 0.6 Durch die Verwendung von Schlüsselwortargumenten können die Argumente in beliebiger Reihenfolge angegeben werden. Bei den Positionsargumenten ist die Reihenfolge vorgegeben. Daraus resultiert auch der Unterschied bei den obigen Ausgaben. Werden beide Arten in einem Aufruf gemischt, so müssen die Positionsargumente zuerst angegeben werden. Den Unterschied zwischen beiden Argumentarten zu kennen ist wichtig, nicht nur bei selbst erstellten Funktionen. Auch beim Aufruf von Python-Funktionen verfolgt einen die Mischung von Schlüsselwort- und Positionsargumenten auf Schritt und Tritt, z.B. beim etwas später folgenden Abschnitt über "Grafiken zeichnen": plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") Bei dieser <code>plot</code>-Funktion aus dem Modul <code>matplotlib.pyplot</code> sind <code>x</code> und <code>y1</code> Positionsargumente. <code>label, lw</code> und <code>ls</code> sind die Namen der Schlüsselwortargumente. Die Schlüsselwortargumente könnten auch in anderer Reihenfolge angeschrieben werden, nicht jedoch die Positionsargumente! Siehe zu <code>matplotlib.pyplot.plot</code> auch die Seite [https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html]. == Lambda-Funktionen == print((lambda a, b: a*b) (3, 5)) Ausgabe: 15 Eingeleitet wird eine Lambda-Funktion (auch Lambda-Form, Lambda-Operator oder anonyme Funktion genannt) mit dem Schlüsselwort <code>lambda</code>. Es folgen die formalen Argumente, danach ein Doppelpunkt, die Berechnungsvorschrift und ggf. abschliessend in Klammern die aktuellen Parameter. Man kann einer Lambda-Funktion auch einen Funktionsnamen geben und die Funktion über diesen Namen aufrufen, z.B. prod = lambda a, b: a*b print(prod(3, 5)) Als Ausgabe wird wieder die Zahl 15 geliefert. == Rekursive Funktionen == Funktionen können wiederum andere Funktionen aufrufen. Von einem rekursiven Funktionsaufruf spricht man, wenn die aufgerufene Funktion gleich der aufrufenden ist. def printFunc(i): if (i >= 5): return else: print("Hallo Welt") printFunc(i+1) printFunc(1) Ausgabe: Hallo Welt Hallo Welt Hallo Welt Hallo Welt == Funktionsannotationen == Python ist sehr flexibel, was Typen angeht. Im Vorhergehenden haben wir generell keine Typangaben gemacht. Will man Typen angeben, so bietet Python das Konzept der Funktionsannotation. def calcFunc(a: int, b: int) -> int: return a+b r1 = calcFunc(8, 9) r2 = calcFunc(8.0, 9.0) r3 = calcFunc("Hallo", "Welt") print(r1) print(r2) print(r3) Ausgabe: 17 17.0 HalloWelt Jetzt sieht man auf den ersten Blick, welche Typen der Programmierer im Sinn hatte, als er die Funktion erstellte. Das Problem dabei ist nur, dass es Python ziemlich egal ist, welche Typen man im Endeffekt eingibt. Im obigen Beispiel können statt Integer-Typen u.a. auch Float- oder String-Typen eingegeben werden. <small> Siehe zum Thema "Type Checking" aber auch den später folgenden Abschnitt [[Ing_Mathematik:_Python#Type_Checker]]. </small> == Variadische Funktionen == Python-Code: def test1(a, *b): print(a); for c in b: print(c); test1("Hallo", "Welt", "Schweizer", "und alle anderen") Ausgabe: Hallo Welt Schweizer und alle anderen Mit dem Stern (auch als Splat-Operator bezeichnet) in der formalen Parameterliste bei der Funktion <code>test1</code> wird angezeigt, dass eine beliebige Anzahl von Argumenten übergeben wird. <small> Dies entspricht in etwa dem, was in anderen Programmiersprachen (PHP etc.) mittels Ellipse (<code>...</code>) angezeigt wird.</small> = Tupel, Listen und andere = [[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]] == Tupel und Listen == Tupel, Listen und einige andere sind Datenstrukturen oder Sequenzen. Listen (z.B. eine Einkaufsliste) sind veränderbar (mutable). Ein Tupel kann dagegen nicht verändert werden (immutable). Listen werden beim Anlegen in eckige Klammern eingeschlossen, Tupel in runde Klammern. Beim Tupel können die Klammern auch weggelassen werden. Ein Tupel mit nur einem Element muss mit einem Beistrich abgeschlossen werden. Der Grund ist, dass Python sonst nicht entscheiden kann, ob ein Tupel angelegt werden soll, oder nur ein geklammerter Wert. Als Gedächtnisstütze kann man sich den Unterschied zwischen Tupel und Liste ev. so leichter merken: : T'''u'''pel ... r'''u'''nde Klammern, '''u'''nveränderlich : L'''i'''ste ... eck'''i'''ge Klammern, veränderl'''i'''ch. Nachfolgend werden einige Operationen mit Listen und Tupel dargestellt. # Liste und Tupel liste = [1, 2, "Hallo"] tupel = (1, 2, "Hallo") # Ausgabe von liste und tupel print(liste) print(tupel) # Ausgabe von Einzelelementen print(liste[1]) print(tupel[2]) # Element an Liste anhängen und einfügen liste.append(55) liste.insert(4, "Welt") print(liste) # Element aus Liste entfernen liste.remove(1) print(liste) # einige weitere Beispiele liste2 = [1,] tupel2 = 1, 2 tupel3 = (1,) print(liste2) print(tupel2) print(tupel3) Ausgabe: [1, 2, 'Hallo'] (1, 2, 'Hallo') 2 Hallo [1, 2, 'Hallo', 55, 'Welt'] [2, 'Hallo', 55, 'Welt'] [1] (1, 2) (1,) Beispiel (eine Liste von Wörtern zu einem einzigen zusammenhängenden Text verbinden): woerter = ["Hallo", "Welt"] satz = " ".join(woerter) print(satz) Ausgabe: Hallo Welt == Dictionaries und Mengen == Zu den Datenstrukturen gehören weiters auch Mengen und Dictionaries. Mengen sind von der Mathematik bekannt, sie sind ungeordnet und es kommen keine mehrfachen Elemente vor. Dictionaries sind durch Schlüssel :Wert-Paare gekennzeichnet. Mengen werden beim Anlegen wie Dictionaries in geschweifte Klammern eingeschlossen. dict = {"vorname":"Hugo", "nachname":"Meister" } menge = {1, 1, 3, 4, 4, 4, "Hallo"} print(dict) print(menge) print(dict["vorname"]) Ausgabe: {'vorname': 'Hugo', 'nachname': 'Meister'} {1, 3, 4, 'Hallo'} Hugo Geschweifte Klammern ohne Inhalt stellen Dictionaries dar und keine Mengen: di = {} print(type(di)) Ausgabe: <class 'dict'> Leere Mengen lassen sich mit <code>set()</code> erzeugen: menge = set() # leere Menge print(menge) menge.add("Hallo") # Element hinzufügen print(menge) Ausgabe: set() {'Hallo'} Beispiel (einige Mengenoperationen): mengeA = {"Hallo", "Welt"} mengeB = {1, 2, "Welt", 3} # Vereinigung print(mengeA | mengeB) print(mengeA.union(mengeB)) # Durchschnitt print(mengeA & mengeB) print(mengeA.intersection(mengeB)) # Differenz print(mengeA - mengeB) print(mengeA.difference(mengeB)) # Symmetrische Differenz print(mengeA ^ mengeB) print(mengeA.symmetric_difference(mengeB)) # Teilmenge print(mengeA.issubset(mengeB)) # Mehrere Elemente hinzu mengeA.update(["Super", 67, 125]) print(mengeA) # Element löschen mengeA.discard("Hallo") print(mengeA) Ausgabe: {1, 2, 3, 'Welt', 'Hallo'} {1, 2, 3, 'Welt', 'Hallo'} {'Welt'} {'Welt'} {'Hallo'} {'Hallo'} {1, 2, 3, 'Hallo'} {1, 2, 3, 'Hallo'} False {67, 'Super', 'Welt', 'Hallo', 125} {67, 'Super', 'Welt', 125} == List Comprehensions == Aus einer Eingabeliste soll eine Ausgabeliste erzeugt werden. Das kann folgendermaßen geschehen. Mathematische Schreibweise: <math>lc = \{2x|x\in\ \mathbb{N}, 1\le x < 11\}</math> Python-Code: lc = [x*2 for x in range(1,11)] print(lc) Ausgabe: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] Mathematische Schreibweise: <math>lc = \{2x | x \in \mathbb{N}, 1\le x < 11, x \bmod 2 = 0 \}</math> Python-Code: lc = [x*2 for x in range(1,11) if x%2 == 0] print(lc) Ausgabe: [4, 8, 12, 16, 20] Siehe auch {{W|List Comprehension}}. == Set Comprehensions == Dies ist sehr ähnlich wie im vorigen Abschnitt beschrieben. Es wird aber keine Liste, sondern eine Menge erzeugt. sc = {x*2 for x in range(1,11)} print(sc) Ausgabe: {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} == Listen zusammenführen - zip() == li1 = ["A", "B", "C", "D"] li2 = [1, 2, 3, 4] li3 = [5.5, 6.6, 7.7, 8.8] z = zip(li1, li2, li3) print(z) li4 = list(z) print(li4) Ausgabe: <zip object at 0x00000283B6C6AC80> [('A', 1, 5.5), ('B', 2, 6.6), ('C', 3, 7.7), ('D', 4, 8.8)] == Generatorausdruck == g = (i*2 for i in range(1,11)) print(g) t = tuple(g) print(t) print(t[1:3]) Ausgabe: <generator object <genexpr> at 0x00000241D2A4A5A0> (2, 4, 6, 8, 10, 12, 14, 16, 18, 20) (4, 6) == Slicing == slice ... Scheibe, Teil, in Scheiben schneiden Beispiel: Zugriff auf Elemente eines geordneten sequentiellen Objekttyps (Liste, Tupel oder String): str1 = "Hallo" # Das erste Element wird mit dem Index 0 angesprochen # [start (inkl.) : stop (exkl.) : step (default=1)] str2 = str1[0:2] # Alternativ auch: str2 = str1[:2] print(str2) tup1 = (0,1,2,3) # Das letzte Element hat auch den Index -1, das vorletzte den Index -2 usw. tup2 = tup1[-3:-1] print(tup2) lst1 = [[1, 5, 10, 20], [30, 40, 50, 60]] lst2 = lst1[1][1] print(lst2) Ausgabe: Ha (1, 2) 40 Beispiel: Umdrehen von Strings str1 = "Hallo" str2 = str1[::-1] print(str2) Ausgabe: ollaH = Objektorientierte Programmierung = {{Wikipedia|Objektorientierte Programmierung}} * {{W|Klasse (Objektorientierung)|Klasse}} ... die Schablone oder der Bauplan, enthält Methoden und Attribute * {{W|Objekt (Programmierung)|Objekt}} ... eine Klasseninstanz (die konkrete Ausprägung der Klasse) * {{W|Attribut (Programmierung)|Attribute}} ... die Eigenschaften eines Objekts * {{W|Methode (Programmierung)|Methoden}} ... die Aktionen (Operationen), die ein Objekt ausführen kann * {{W|Vererbung (Programmierung)|Vererbung}} ... neue Klassen (Subklassen, Unterklassen, abgeleitete Klassen) aus vorhandenen Klassen (Superklassen, Oberklassen, Basisklassen, Elternklassen) ableiten. Ermöglicht den Aufbau von Klassenhierarchien. Die Subklasse "erbt" Attribute und Methoden von der Superklasse. Python unterstützt (so wie C++, aber im Gegensatz zu Java) Mehrfachvererbung. == UML == * {{W|Unified Modeling Language|UML}} ... '''U'''nified '''M'''odeling '''L'''anguage, eine Modellierungssprache. Die UML enthält zahlreiche Diagrammarten, um Programme zu modellieren. Im Nachfolgenden wird nur das {{W|Klassendiagramm}} verwendet. [[File:UmlCd Klasse-3.svg|300px]] * {{W|Sichtbarkeit (Programmierung)|Sichtbarkeit}}: ** + ... public (öffentlich) ** - ... private ** # ... protected * {{W|Attribut_(UML)#Attribute_für_Instanzen_und_für_Klassen|Klassenattribute}} (statische Attribute): Werden nur einmal pro Klasse angelegt. Im Klassendiagramm werden sie unterstrichen. [[File:Attribute-3.png|200px]] * Vererbung: <gallery> InheritancePgmUML.svg | Abgeleitete Klasse erbt von Basisklasse (Einfachvererbung) Diamond inheritance.svg | D erbt von B und C (Mehrfachvererbung). B und C erben von A (Einfachvererbung) </gallery> Für weitergehende Betrachtungen zur UML wird auf Spezialliteratur verwiesen, z.B.: * Seidl et al.: UML@Classroom. dpunkt, 2012, ISBN 978-3-89864-776-2 * Rupp et al.: UML 2 glasklar. Hanser, 4. Aufl., 2012, ISBN 978-3-446-43057-0 == Eine einfache Klasse == [[Datei:PythonIng_uml1.svg | 200px]] class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 fahr = Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die Klasse Fahrzeug wird durch das class-Schlüsselwort eingeleitet. raeder ist ein Klassenattribut und public. __init__ wird bei der Objekterzeugung automatisch aufgerufen (ist der sogenannte Konstruktor). Man achte darauf, dass diese Methode immer mit zwei Unterstrichen eingeleitet und abgeschlossen wird. Instanzattributen wird das Wort self vorangestellt. Wir sehen uns z.B. das Attribut self.__geschwind an. Auch hier werden zwei Unterstriche verwendet. Das bedeutet, dass dieses Attribut strikt/stark private ist. Wird nur ein Unterstrich verwendet, so deutet dies auf schwach/weakly private hin. Letzteres wird in Python deutlich häufiger verwendet. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt. Besonderheiten bei stark und schwach private: * '''stark private''': ** zwei führende Unterstriche ** Name Mangling: Name wird zu <code>_Klassenname__variablenname</code> ** Schutz vor Namenskollisionen bei Vererbung ** am Ende des Namens dürfen keine zwei Unterstriche verwendet werden. Das wären dann Magic Methods oder Dunder-Methods (z.B. __init__). Diese sind public. * '''schwach private''': ** ein führender Unterstrich ** Name bleibt gleich ** ist nur ein Hinweis an die Programmierer, kein starker Schutz ** <code>from modul import *</code>: Objekte mit einem führenden Unterstrich werden standardmäßig nicht importiert ** Standard für die Kapselung bei Python. Schätzung: Weit mehr als 80% der nicht-öffentlichen Attribute/Methoden werden als schwach private deklariert. Weniger als 5-10% als stark private (Quelle: Google KI) == Klassen importieren == Häufig ist es sinnvoll und übersichtlicher Klassen in eigenen Dateien zu speichern. Das sind dann eigene Module. Abgespeichert werden Sie mit der Endung py, wie bisher auch praktiziert. Aufgerufen werden Sie mit der import-Anweisung. Dann ist aber nur der Dateiname ohne Endung py zu verwenden. Klarer wird das mit einem Beispiel. Datei c:\tmp\fahrzeug.py class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 Datei c:\tmp\test1.py import fahrzeug fahr = fahrzeug.Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die üblichen import-Anweisungen lauten wie folgt: {| {{prettytable}} ! import-Befehl ! Instanz |- | import xyz || xyz.Klasse |- | import xyz as x || x.Klasse |- | from xyz import Klasse || Klasse |- | from xyz import * || Klasse |} Der Vorteil der ersten beiden import-Anweisungen ist, dass es kaum zu Namenskollisionen kommen kann. Dafür hat man bei den letzten beiden Varianten weniger Tipparbeit. == Vererbung == === Einfachvererbung === [[Datei:PythonIng_uml2.svg | 200px]] Datei fahrzeug.py: class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 class Luftfahrzeug(Fahrzeug): def __init__(self, geschwindigkeit, leistung, fluegel): super().__init__(geschwindigkeit, leistung) self.__flueg = fluegel def getFlueg(self): return self.__flueg Datei test1.py: import fahrzeug fahr = fahrzeug.Luftfahrzeug(150, 90, 4) print(fahr.getFlueg()) Ausgabe: 4 === Mehrfachvererbung === Mit Python ist auch Mehrfachvererbung möglich, z.B.: class A: def _printA(self): print("Klasse A") class B: def _printB(self): print("Klasse B") class C(A,B): def __init__(self): self._printA() self._printB() c = C() Ausgabe: Klasse A Klasse B Die Klasse C erbt von A und B. In UML sieht das in etwa so aus: +-----------------------------+ +-------------------------+ | A | | B | +-----------------------------+ +-------------------------+ | | | | +-----------------------------+ +-------------------------+ | # printA() | | # printB() | +-----------------------------+ +-------------------------+ . . / \ / \ --- --- | | | | +---------------------+ | C | +---------------------+ | | +---------------------+ | | +---------------------+ <code>printA()</code> und <code>printB()</code> sind schwach private (in UML als <code>protected</code> mit einem # dargestellt). Es ist aber zu beachten, dass schwach private nur Konvention ist. Praktisch könnte man auch von außerhalb auf diese Methoden zugreifen. Das soll man aber nicht tun, und das wird in Python durch einen Unterstrich angedeutet. = Grafiken zeichnen = Für das Zeichnen von Grafiken wird hier das Modul <code>matplotlib</code> verwendet. <code>matplotlib</code> ist ein externes Modul und muss vor der ersten Verwendung installiert werden. Das geht so: # Starten Sie ein Terminal (bei Windows die Eingabeaufforderung). # Führen Sie darin folgenden Befehl aus <code>c:\devel\Python\Scripts\pip.exe install matplotlib</code> pip ist übrigens der Paketmanager von Python ({{W|Pip_(Python)}}). Optimalerweise installieren wir auch gleich das Modul <code>numpy</code> (Numerical Python). Wir werden es im Folgenden oft benötigen (nicht nur bei den Grafiken). Das funktioniert vom Prinzip her genauso, wie für <code>matplotlib</code> gezeigt. <small>Verwenden Sie Spyder, so sind diese Schritte nicht nötig. Spyder inkludiert diese Pakete standardmäßig. Unter openSUSE Tumbleweed lassen sich diese Pakete mittels YaST oder zypper installieren.</small> == 2D == === Graph einer Funktion === Es soll die cosh-Funktion im Intervall <math>x\in[-3,3]</math> gezeichnet werden. Der Programmcode lautet in der einfachsten Form: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh1.jpg]] Der Code ist quasi selbsterklärend. Das Untermodul pyplot des matplotlib-Moduls und das numpy-Modul werden importiert. x läuft von -3 bis +3. y wird für jeden x-Wert per Formel ausgerechnet. "plt.plot()" ist der Zeichenbefehl. "plt.show" ist notwendig, um das Fenster mit der Grafik anzuzeigen. Die Schrittweite 0.1 wurde so gewählt, um einen ausreichend glatten Verlauf des Graphen zu gewährleisten. Das ist immer ein Kompromiss zwischen Berechnungszeit und Ansehnlichkeit. Testen Sie einfach ein paar verschiedene Werte, um ein Gefühl dafür zu zu bekommen. "plt.grid()" zeichnet ein Gitter in die Grafik (kann auch weggelassen werden). Die Bezeichnungen plt und np könnten auch anders gewählt werden. Es ist aber Konvention, diese so wie hier gezeigt zu wählen. <small>Mit der im obigen Bild gezeigten Menüleiste kann die dargestellte Grafik nachträglich noch geändert werden (Zoom, Pan, Achsenparameter, Kurvenparameter etc.). Natürlich kann man das alles auch direkt programmieren. Wie das funktioniert wird ansatzweise etwas später gezeigt.</small> Ein etwas komplexeres Beispiel ist Folgendes: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) + 2**x plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh4.png]] Man beachte, dass im Gegensatz zu Octave und Julia der ominöse Punkt (.) bei 2**x mit Python nicht benötigt wird. Das macht das Programmiererleben etwas einfacher. === Graphen mehrerer Funktionen und weiteres === import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x") plt.plot(x, y2, label = "sin(x) * cos(x)") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh2.png]] Um die Linienstile etwas individueller zu gestalten, ist folgender Programmcode gedacht: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") plt.plot(x, y2, label = "sin(x) * cos(x)", lw=3, ls="--") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh3.png]] === Funktion in Parameterdarstellung === Es soll die archimedische Spirale <math>x = t \cos(t), y = t \sin(t)</math> im Intervall <math>[0, 6\pi[</math> gezeichnet werden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.show() [[Datei:PythonIng_spirale1.png]] Diese Darstellung erscheint verzerrt. Will man gleiche Achsenskalierungen, so kann man den plt.axis()-Befehl verwenden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.axis("equal") plt.show() [[Datei:PythonIng_spirale2.png]] === Funktion in Polardarstellung === import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(projection="polar") r = np.arange(0, 1, 0.01) theta = r**3 line = ax.plot(theta, r) plt.show() [[Datei:PythonIng_polar1.png]] === Logarithmische Achsenskalierung === ==== Semilog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.semilogy() plt.show() Ausgabe: [[Datei:PythonIng_semilog1.png]] ==== LogLog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.loglog() plt.show() [[Datei:PythonIng_loglog1.png]] === Gefüllte Fläche === import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 3, 0.1) y1 = 3*x - 1 y2 = x**2 plt.plot(x, y1, x, y2, color='black') plt.fill_between(x, y1, y2, where=y1>=y2) plt.show() [[Datei:PythonIng_gefuellt.png]] === Linien, Pfeile, Rechtecke, Kreise und Texte === import matplotlib as mpl import matplotlib.pyplot as plt fig, ax = plt.subplots() r = mpl.patches.Rectangle((0, 0), 3, 3, angle=30, fill=False) c = mpl.patches.Circle((4, 4), 2, fill=False) ax.add_patch(r) ax.add_patch(c) ax.plot([-2, 7], [-2, 0], color="black") ax.arrow(0, 7, 5, 0, length_includes_head=True, head_width=0.5, head_length=1.5, color="black") ax.set_aspect("equal") plt.axis([-3, 8, -3, 8]) plt.show() [[Datei:PythonIng_linien_pfeile_etc.png]] Text kann mit <code>ax.text(x, y, "Text")</code> hinzugefügt werden, bspw. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.text(0.1, 0.1, "Hallo") ax.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() Oder einfacher auch ohne <code>subplots</code> import matplotlib.pyplot as plt plt.text(0.1, 0.1, "Hallo") plt.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text1.png]] Auch Sonderzeichen (griechische Buchstaben etc.) können verwendet werden (siehe dazu auch [https://matplotlib.org/stable/users/explain/text/mathtext.html]). import matplotlib.pyplot as plt plt.text(.3, .5, r'$\Omega\ \psi\ \oint\ \nabla\ \dot a\ \frac{a}{b}\ a_b$', size="20") plt.show() [[Datei:PythonIng_text20.svg]] Jetzt wird noch gezeigt, wofür <code>subplots</code> sinnvoll eingesetzt werden können. import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=1, ncols=2) ax[0].text(0.1, 0.1, "Hallo") ax[1].text(0.1, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text2.png]] === Aufgaben === * Zeichnen Sie die Strophoide <math>x = \frac{a(t^2-1)}{t^2+1}, y = \frac{at(t^2-1)}{t^2+1}, a = 2, -3 \leq t \leq 3</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_strophoide.jpg]] * Zeichnen Sie die verschlungene Hypozykloide <math>x = (R-r)\cos t + c\cos\frac{R-r}{r}t, y = (R-r)\sin t - c\sin\frac{R-r}{r}t, c = 3, r = 2, R = 6, -15 \leq t \leq 15</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_hypozykloide.jpg]] * Testen Sie bei den obigen Übungsaufgaben verschiedene Linienstile und Farben. Farben können mit dem plt.plot()-Parameter color gewählt werden. * Testen Sie bei den obigen Übungsaufgaben verschiedene Werte für a, c, r und R. == 3D == === Räumliche Kurven === import matplotlib.pyplot as plt import numpy as np t = np.arange(0, 6*np.pi, 0.1) x = t * np.cos(t) y = t * np.sin(t) z = t fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot(x, y, z) plt.show() [[Datei:PythonIng_raumkurve1.png]] === Flächen === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z) plt.show() [[Datei:PythonIng_fläche1.png]] Das Ganze in Netzdarstellung läßt sich so programmieren: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.5) y = np.arange(0, 10, 0.5) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_wireframe(x, y, z) plt.show() [[Datei:PythonIng_fläche2.png]] Ein etwas komplexeres Beispiel: import matplotlib.pyplot as plt import numpy as np x = np.arange(0.1, 10, 0.1) y = np.arange(0.1, 10, 0.1) x, y = np.meshgrid(x, y) z1 = np.sin(x) + 3 * np.cos(y) z2 = np.sin(x) + np.log(y) z3 = x + np.cos(y) z4 = x**2 - y fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, nrows=2, ncols=2) ax[0][0].plot_surface(x, y, z1) ax[0][1].plot_surface(x, y, z2) ax[1][0].plot_surface(x, y, z3) ax[1][1].plot_surface(x, y, z4) plt.show() [[Datei:PythonIng_subplot1.png]] Man beachte, dass man die Unterbilder im Bild nach dem Ausführen des Scripts z.B. mit der mittleren Maustaste einzeln drehen, oder über die Einträge in der Menüzeile einzeln bearbeiten kann. Mit ein paar Zeilen Programmtext lässt sich also eine Menge an Funktionalität generieren. Die Farbgebung lässt sich über <code>colormaps</code> variieren. import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm) plt.show() [[Datei:PythonIng_colormap1.png]] Es gibt eine Menge an Colormaps, z.B. <code>plasma, Greys, Dark2, ocean</code>. Zwecks detaillierterer Infos siehe die matplotlib-Dokumentation. <small>Verwendet man die IDE namens IDLE, so gibt es dort auch die automatische Codevervollständigung. D.h. es werden alle Möglichkeiten (in unserem Fall nach dem Eintippen von <code>cm.</code> alle verfügbaren Colormaps) angezeigt.</small> Die "edgecolor" und Linienbreite können auch frei gewählt werden: import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm, edgecolor="black", linewidth=1.0) plt.show() [[Datei:PythonIng_colormap2.png]] === Höhenlinien === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() ax.contour(x, y, z) plt.show() [[Datei:PythonIng_höhenlinien1.png|400px]] Etwas abgewandelt sieht das so aus: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contour(x, y, z) ax.clabel(hl, inline = True) plt.show() [[Datei:PythonIng_höhenlinien2.png|400px]] Und noch eine Variante (mit einem Farbbalken) sei gezeigt. import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contourf(x, y, z) fig.colorbar(hl) plt.show() [[Datei:PythonIng_höhenlinien5.svg|400px]] === Aufgaben === * Zeichnen Sie die räumliche Kurve <math>x = 2 \cdot \cosh(t)</math>, <math>y = 5 \cdot \sin(t)</math>, <math> z = t^{2} - t</math>, <math>0 \leq t \leq 3\pi</math>. * Zeichnen Sie die Fläche <math>z = \log(x) + \cos(y)</math>. == Animationen == === Mit matplotlib === Auch mit matplotlib sind Animationen möglich. Das ist ein bisschen komplizierter und wird deshalb hier nur mit einem sehr einfachen Beispiel dargestellt (bei Interesse siehe z.B. auch das [https://matplotlib.org/stable/users/explain/animations/animations.html#animations Animations using Matplotlib-Tutorial]). import matplotlib.pyplot as plt import matplotlib.animation as ani import matplotlib import numpy as np def update(frame): line.set_xdata(x[:frame]) line.set_ydata(y[:frame]) return (line) fig, ax = plt.subplots() x = np.arange(0, 10, .1) y = np.sin(x) line, = ax.plot(x[0], y[0]) ax.set(xlim=[0, 10], ylim=[-1, 1]) a = ani.FuncAnimation(fig=fig, func=update, frames=100, interval=20) plt.show() # Speichere die Animation in einem animierten GIF (optional) a.save(filename="c:/tmp/PythonIng_anim5.gif", writer="pillow") [[Datei:PythonIng_anim5.gif]] Es wird eine Sinuskurve auf den Bildschirm gezeichnet. In der letzten Zeile wird diese Animation in ein animiertes GIF gespeichert. Das ist natürlich optional und kann auch weggelassen werden. === Mit VPython === Aber auch mit dem Modul VPython lassen sich einfache 3D-Animationen erstellen. VPython ist ein externes Modul, das vorab installiert werden muss. Unter openSUSE Tumbleweed gibt es dzt. kein entsprechendes rpm-Paket. Die übliche Methode der Installation mittels YaST oder zypper ist somit nicht möglich. Auch eine direkte Verwendung von pip führt nur zu einer Fehlermeldung (<code>error: externally-managed-environment</code>). Es empfiehlt sich dort folgende Vorgehensweise: # Erstelle zuerst eine virtuelle Umgebung, z.B.: <code>python3.11 -m venv ~/tmp/venv1</code> # Wechsle das Verzeichnis: <code>cd ~/tmp/venv1/bin</code> # Installiere das entsprechende Paket: <code>./pip install vpython</code> # Führe das entsprechende Skript aus: <code>./python ~/tmp/test1.py</code> Aktuell (März 2026) ist dieses Programmpaket lt. der [https://vpython.org/presentation2018/install.html VPython-Homepage] nur für die Python-Versionen 3.8 bis 3.12 verfügbar. Ein Beispiel zu einer einfachen Animation wird nachfolgend geliefert. from vpython import * scene.width = 1200 scene.height = 600 scene.center = vector(20,0,0) scene.background = color.white cylinder(pos=vector(0,0,0), axis=vector(20,0,0), radius=5, color=color.blue) cone(pos=vector(0,0,0), axis=vector(-10,0,0), radius=5, color=color.blue) helix(pos=vector(20,0,0), axis=vector(40,0,0), radius=2, coils=10, thickness=0.5, color=color.blue) ball = sphere(pos=vector(20,0,0), color = color.green, radius = 1) ball.p = vector(0.15, 0, 0) toc = True while True: rate(200) if(ball.pos.x <= 60 and toc == True): ball.pos += ball.p else: toc = False ball.pos -= ball.p if(ball.pos.x <= 20 and toc == False): toc = True [[Datei:PythonIng_vpython_anim.JPG]] Idealerweise öffnet sich beim Ausführen des Scripts ein Browserfenster. Darin wird die programmierte Animation gezeigt (siehe auch den obigen Screenshot). Eine Größenänderung können Sie mit der mittleren Maustaste initiieren. Die Szenerie drehen können Sie mit der rechten Maustaste. === Mit VTK === Komplexer, aber auch mächtiger als VPython ist die Verwendung von VTK ('''V'''isualization '''T'''ool'''k'''it). Genauer gesagt des Python-Wrappers von VTK. Dieses externe Python-Modul muss vorab installiert werden (z.B. mittels YaST, pip oder in eine virtuelle Umgebung). VTK ist eine Softwarebibliothek zur 3D-Visualisierung und wurde ursprünglich in C++ geschrieben. Verbreitet eingesetzt wird diese Bibliothek in der Wissenschaft und Forschung, z.B. * in der medizinischen Bildgebung * für Strömungssimulationen * für Klimadaten VTK funktioniert nach dem {{W|Grafikpipeline|Pipeline-Prinzip}}: Source (Quellen) -> Filter -> Mapper (Senken) -> Actor/Renderer Daten fließen von den Quellen zu den Senken. Als einfaches Beispiel wird die Darstellung eines Zylinders gezeigt, der mit den Maustasten gedreht oder in der Größe geändert werden kann: import vtk # Zylinder erzeugen cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) # Geometrie in darstellbare Daten umwandeln mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) # Objekt in der Szene actor = vtk.vtkActor() actor.SetMapper(mapper) # Szene verwalten renderer = vtk.vtkRenderer() renderer.AddActor(actor) # Render-Fenster render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) # Maus/Tastatur-Steuerung interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) # Starten render_window.Render() interactor.Start() Ausgabe: [[Datei:PythonIng_VTK_1.png]] Gleiches Beispiel wie oben, aber mit einer Animationssequenz: import vtk import time cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderer.AddActor(actor) render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) render_window.Render() time.sleep(0.01) Das Grafikfenster schließt sich nach Ablauf der Schleife. Das Fenster bleibt geöffnet, wenn Sie am Programmende folgenden Befehl hinschreiben interactor.Start() Um den animierten Zylinder grün einzufärben, müssen Sie Folgendes im obigen Programm ergänzen (Farbnamen): colors = vtk.vtkNamedColors() actor.GetProperty().SetColor(colors.GetColor3d("Green")) Als Namen können Sie u.a. die CSS3 Web-Farben verwenden (siehe z.B. [https://wiki.selfhtml.org/wiki/Farbe/Farbangaben] und {{W|Webfarbe#CSS_3}}). Alternativ funktioniert auch das ({{W|RGB-Farbraum|RGB}}): actor.GetProperty().SetColor(0.0, 0.6, 0.0) Wie der Zylinder mit einer Textur versehen wird, zeigt folgendes Programm: import vtk import time cylinder = vtk.vtkCylinderSource() cylinder.SetResolution(30) cylinder.SetHeight(3.0) cylinder.SetRadius(1.0) cylinder.CappingOn() texture_coords = vtk.vtkTextureMapToCylinder() texture_coords.SetInputConnection(cylinder.GetOutputPort()) texture_coords.PreventSeamOn() reader = vtk.vtkJPEGReader() reader.SetFileName("PythonIng_textur.jpg") texture = vtk.vtkTexture() texture.SetInputConnection(reader.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(texture_coords.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.SetTexture(texture) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderer.AddActor(actor) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) renderWindow.Render() time.sleep(0.01) interactor.Start() <gallery> PythonIng_textur.jpg | Textur-Datei PythonIng_VTK_2.png | Ausgabe (Screenshot) </gallery> Nun aber genug von VTK und der Erstellung von Grafiken, weiter geht es mit mathematischeren Themen. = Vektoren und Matrizen = == Zahlenfolgen == Für das Erstellen von Zahlenfolgen bieten sich die Funktionen <code>arange</code> und <code>linspace</code> aus dem <code>numpy</code>-Modul an. from numpy import * start = 0 stop = 10 step = 2 num = 10 r = arange(start, stop, step) # step ... Schrittweite l = linspace(start, stop, num) # num ... Anzahl der Werte print("r = ", r) print("l = ", l) Ausgabe: r = [0 2 4 6 8] l = [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556 6.66666667 7.77777778 8.88888889 10. ] Bei <code>arange</code> ist der <code>stop</code>-Wert nicht im Ergebnis enthalten, bei <code>linspace</code> aber sehr wohl. == Vektoren == Vektoren sollten jedem aus der Linearen Algebra bekannt sein. === Arrays === In Python mit NumPy kann man Vektoren durch die Funktion array erzeugen. import numpy as np l1 = (-5, 3, 2) l2 = (1, 1, 4) a1 = np.array(l1) a2 = np.array(l2) a3 = a1 + a2 a4 = 2 * a2 print(a1) print(a2) print(a3) print(a3[2]) print(a4) Ausgabe: [-5 3 2] [1 1 4] [-4 4 6] 6 [2 2 8] === Zeilen- und Spaltenvektoren === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) print(z) print(s) Ausgabe: [ [-5 3 2] ] [[1] [1] [4]] === Skalarprodukt === import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) skalarprodukt = np.dot(a1, a2) print(skalarprodukt) Ausgabe: 6 === Vektorprodukt === <math>a\ast b=\left(\begin{array}{c} a_{1}\\ a_{2}\\ a_{3} \end{array}\right)\ast\left(\begin{array}{c} b_{1}\\ b_{2}\\ b_{3} \end{array}\right)=\left(\begin{array}{c} a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} \end{array}\right) </math> Python-Code: import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) vektorprodukt = np.cross(a1, a2) print(vektorprodukt) Ausgabe: [10 22 -8] === Transponierter Vektor === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) # transponierter Vektor z_tp = np.transpose(z) # transponierter Vektor s_tp = np.transpose(s) print(z_tp) print(s_tp) Ausgabe: [[-5] [ 3] [ 2]] [ [1 1 4] ] === Vektorfelder visualisieren === import matplotlib.pyplot as plt import numpy as np # Daten generieren x = np.arange(0, 10, 1) y = np.arange(0, 10, 1) X, Y = np.meshgrid(x, y) U = X * Y V = Y + X # Plotten fig, ax = plt.subplots() ax.quiver(X, Y, U, V, angles='xy') plt.show() Ausgabe: [[Datei:PythonIng_quiver1.png]] == Matrizen== import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) print(m1) Ausgabe: [[1 2 3] [4 5 6]] === Zugriff auf Matrizenelemente === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) # Element aus Zeile 2 und Spalte 3 (Achtung! Index startet bei Null) print(m1[1,2]) Ausgabe: 6 === Addition und Subtraktion von Matrizen === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) m2 = np.matrix([[0, 0, 2], [1, 3, 2]]) print(m1 + m2) print(m1 - m2) Ausgabe: [[1 2 5] [5 8 8]] [[1 2 1] [3 2 4]] === Transponierte Matrix === import numpy as np m = np.matrix([[1, 2, 3], [4, 5, 6]]) mt = np.transpose(m) print(m) print(mt) Ausgabe: [[1 2 3] [4 5 6]] [[1 4] [2 5] [3 6]] === Rang einer Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) rg = np.linalg.matrix_rank(m) print(rg) Ausgabe: 2 === Inverse Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) mi = np.linalg.inv(m) print(mi) Ausgabe: [[ 1. 0.6] [-0. -0.2]] === Multiplikation von Matrizen (falksches Schema) === import numpy as np m1 = np.matrix([[1, 3, 4], [0, -5, 1]]) m2 = np.matrix([[1, 2], [2, 3], [0, 2]]) print(m1 @ m2) Ausgabe: [[ 7 19] [-10 -13]] === Eigenwerte und Eigenvektoren === import numpy as np m = np.matrix([[5, 8], [1, 3]]) D,V = np.linalg.eig(m) # Eigenwerte print(D) # Eigenvektoren print(V) Ausgabe: [7. 1.] [[ 0.9701425 -0.89442719] [ 0.24253563 0.4472136 ]] === Teilmatrizen === import numpy as np m = np.matrix([[1, 3, 4], [0, -5, 1]]) print("m = ", m) # Erste Zeile extrahieren m1 = m[0,:] print("m1 = ", m1) # Das Element aus der 1. Zeile und der 2. Spalte extrahieren m2 = m[0,1] print("m2 = ", m2) # Zweite Spalte extrahieren m3 = m[:, 1] print("m3 = ", m3) Ausgabe: m = [[ 1 3 4] [ 0 -5 1]] m1 = [ [1 3 4] ] m2 = 3 m3 = [[ 3] [-5]] === Spezielle Matrizen === ==== Nullmatrix ==== import numpy as np z = np.zeros((3, 2)) print(z) Ausgabe: [[0. 0.] [0. 0.] [0. 0.]] ==== Einheitsmatrix ==== import numpy as np z = np.eye(3) print(z) Ausgabe: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ==== Matrix mit lauter Einsen ==== import numpy as np z = np.ones((3, 2)) print(z) Ausgabe: [[1. 1.] [1. 1.] [1. 1.]] === Spärlich besetzte Matrizen === Das Thema spärlich besetzter Matrizen wird hier nur kurz angerissen. Nähere Details siehe unter dem Weblink [https://docs.scipy.org/doc/scipy/reference/sparse.html#module-scipy.sparse]. import numpy as np import scipy A = scipy.sparse.csr_array(np.eye(5)) print(A) Ausgabe: (0, 0) 1.0 (1, 1) 1.0 (2, 2) 1.0 (3, 3) 1.0 (4, 4) 1.0 = Lineare Gleichungssysteme = Sei <math>Ax = b</math> ein lineares Gleichungssystem. <math>A</math> sei die Koeffizientenmatrix, <math>x</math> der Lösungsvektor und <math>b</math> ein bekannter Vektor. Beispiel: import numpy as np A = np.array([[5, 1], [0, 2]]) b = np.array([1, 2]) x = np.linalg.solve(A, b) print(x) Ausgabe: [0. 1.] Siehe dazu auch das Kapitel [[Ing Mathematik: Numerisches Lösen von linearen Gleichungssystemen]]. Dort wird dieses Themengebiet u.a. mit weitergehenden Python-Skripten vertieft. == Aufgabe == * Lösen Sie folgendes Gleichungssystem mittels Python (und zur Kontrolle auch händisch): 5x + 6y - 2z = 12 3x - y - 3z = 6 2x + 2y + 4z = 5 = Polynome = == Ein erstes einfaches Beispiel == Gegeben sei das Polynom <math>7x^3+5x^2+1</math>. In Python: import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p) Ausgabe: 3 2 7 x + 5 x + 1 == Einzelne Polynomwerte berechnen == import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p(1.5)) Ausgabe: 35.875 == Polynome integrieren und differenzieren == import numpy as np p = np.poly1d([7, 5, 0, 1]) # 1. Ableitung p1 = p.deriv() p2 = p.deriv(1) # 2. Ableitung p3 = p.deriv(2) # Integral p4 = p.integ() print(p1) print(p2) print(p3) print(p4) Ausgabe: 2 21 x + 10 x 2 21 x + 10 x 42 x + 10 4 3 1.75 x + 1.667 x + 1 x == Nullstellen bestimmen == import numpy as np p = np.poly1d([2, 5, 0, 4]) r = np.roots(p) print(r) Ausgabe: [-2.7621427 +0.j 0.13107135+0.84077099j 0.13107135-0.84077099j] == Aufgaben == * Berechnen Sie den Wert für x = 3 des Polynoms <math>y = 2x^4 - 3x^3 - x + 7</math>. * Differenzieren und integrieren Sie das Polynom <math>y = 2x^4 - 3x^3 - x + 7</math>. * Berechnen Sie die Nullstellen von <math>y = 7x^5 - 3x^2 + 12</math>. = Nichtlineare Gleichungen und Gleichungssysteme = == Nullstellenbestimmung == Löse eine beliebige Gleichung f(x) = 0, z.B. <math> f(x) = x^2 - 5\cos(x) - 10 = 0 </math>: import scipy import numpy as np def f(x): return x**2 - 5*np.cos(x) - 10 xstart = [-1, 1] # Startwerte xn = scipy.optimize.root(f, xstart) print(xn.x) Ausgabe: [-2.46813009 2.46813009] Funktionsgraph: [[Datei:octave_nichtlin2.jpg]] == Gleichungssysteme == SymPy ist ein externes Modul, das symbolisches Rechnen ('''Sym'''bolic '''Py'''thon) ermöglicht. Folgende Aufgabe ist dem Buch "Knorrenschild: Numerische Mathematik, Hanser, 2017, Seite 72" entnommen. Zu lösen ist das nichtlineare Gleichungssystem <math>f_1 = 2x_1 + 4x_2 = 0 </math> <math>f_2 = 4x_1 + 8x_2^3 = 0</math> Mit Python ist das so möglich: import sympy x1, x2 = sympy.symbols("x1 x2") f1 = 2*x1 + 4*x2 f2 = 4*x1 + 8*x2**3 s = sympy.solve((f1, f2), x1, x2) print(s) Ausgabe: [(-2, 1), (0, 0), (2, -1)] Plot: [[Datei:IngPython_nl_gleichung1.svg|500px]] = Komplexe Zahlen = Die imaginäre Einheit wird in Python durch den Buchstaben <code>j</code> symbolisiert. Darstellen kann man eine komplexe Zahl bekannterweise in mehreren Formen: * Kartesische Darstellung <math>z = \Re(z) + j \cdot \Im(z)</math> * Polardarstellungen <math>z = r \cdot (\cos(\phi) + j \cdot \sin(\phi)) = r \cdot e^{j\cdot \phi}</math> Die konjugiert komplexe Zahl ist <math>z^* = \Re(z) - j \cdot \Im(z)</math> Nachfolgend einige mathematische Operationen mit Python und NumPy. import numpy as np z1 = 2 + 5j # kartesische Darstellung z2 = 3 * np.exp(3j) # Polardarstellung # Addition res = z1 + z2 print("z1 + z2 = ", res) # Multiplikation res = z1 * z2 print("z1 * z2 = ", res) # Realteil res = np.real(z2) print("Realteil von z2 = ", res) # Imaginärteil res = np.imag(z2) print("Imaginaerteil von z2 = ", res) # Betrag res = np.abs(z1) print("Betrag von z1 = ", res) # Argument res = np.angle(z1) print("Argument von z1 = ", res) # Konjugiert komplexe Zahl res = np.conj(z1) print("Konjugiert komplexe Zahl von z1 = ", res) Ausgabe: z1 + z2 = (-0.9699774898013365+5.423360024179601j) z1 * z2 = (-8.05675510050068-14.003167400647481j) Realteil von z2 = -2.9699774898013365 Imaginaerteil von z2 = 0.4233600241796016 Betrag von z1 = 5.385164807134504 Argument von z1 = 1.1902899496825317 Konjugiert komplexe Zahl von z1 = (2-5j) = Interpolation = import numpy as np import scipy import matplotlib.pyplot as plt # Stützpunkte xp = np.arange(1, 6) yp = (0, -5, 2, 7, 6) ti = np.arange(1, 5, 0.01) i1 = scipy.interpolate.interp1d(xp, yp, kind = "linear") i2 = scipy.interpolate.interp1d(xp, yp, kind = "cubic") plt.plot(xp, yp, "rx") plt.plot(xp, i1(xp)) plt.plot(ti, i2(ti)) plt.show() Ausgabe: [[Datei:PythonIng_interpol1.png]] = Differenzialrechnung = == Numerisches Differenzieren == Als Beispiel differenzieren wir <math>y = 5x\sin{x}</math> und stellen das Ganze grafisch dar. from findiff import Diff import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 1000) f = 5 * x * np.sin(x) dx = x[1] - x[0] # Ableitung d_dx = Diff(0, dx) df_dx = d_dx(f) # Grafik plt.plot(x, f, label = "y") plt.plot(x, df_dx, label = "y'") plt.grid() plt.legend(loc="best") plt.show() Ausgabe: [[Datei:octave_diff1.jpg]] <small>findiff ist ein externes Modul. Dieses muss installiert werden (z.B. so: ...\Python\Scripts\pip.exe install --upgrade findiff). Für die Vorgehensweise unter openSUSE Tumbleweed siehe das Kapitel [[Ing_Mathematik:_Python#Mit_VPython | VPython]], nur dass das Ganze mit einer aktuelleren Python-Version exekutiert wird, z.B. mit Python 3.13. Das im Buch "Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler, Rheinwerk" verwendete Modul "scipy.misc" ist veraltet (deprecated ... missbilligt). Lt. [https://docs.scipy.org/doc/scipy-1.17.0/dev/roadmap-detailed.html#misc SciPy-Dokumentation für die Version 1.17.0] wurden alle entsprechenden Features schon entfernt.</small> == Symbolisches Differenzieren == Differenzieren Sie die Funktionen <math>f_1(x) = x^2</math> und <math>f_2(x) = \sin(x)\cos\left(\frac{x}{2}\right)</math>. import sympy x = sympy.symbols("x") f1 = x**2; f2 = sympy.sin(x) * sympy.cos(x/2.) d1 = sympy.diff(f1, x) d2 = sympy.diff(f2, x) print(d1) print(d2) Ausgabe: 2*x -0.5*sin(0.5*x)*sin(x) + cos(0.5*x)*cos(x) == Aufgaben == * Differenzieren Sie die Funktion <math>y = \log(x) + 10x</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. * Differenzieren Sie die Funktion <math>y = \frac{\sinh(x)}{(1+x)}</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. = Integralrechnung = == Numerisches Integrieren == Berechnen Sie das Integral <math>\int_{0}^{3}x^2 dx</math>. import scipy def f(x): return x**2 i = scipy.integrate.quad(f, 0, 3) print(i) Ausgabe: (9.000000000000002, 9.992007221626411e-14) Das trifft den exakten Wert 9.0 ziemlich genau. Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} dx</math>. import scipy import numpy as np def f(x): return 2**(-x) i = scipy.integrate.quad(f, 0, np.inf) print(i) Ausgabe: (1.4426950408889556, 4.486558477977586e-09) == Symbolisches Integrieren == Berechnen Sie <math>\int x^2 \text{d}x</math> und <math>\int \sin{x}\cos{\frac{x}{2}} \text{d}x</math>. import sympy x = sympy.symbols("x") f1 = x**2 f2 = sympy.sin(x) * sympy.cos(x/2.) i1 = sympy.integrate(f1, x) i2 = sympy.integrate(f2, x) print(i1) print(i2) Ausgabe: x**3/3 -0.666666666666667*sin(0.5*x)*sin(x) - 1.33333333333333*cos(0.5*x)*cos(x) Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} \text{d}x</math>. import sympy x = sympy.symbols("x") f = 2**(-x) i = sympy.integrate(f, (x, 0, sympy.oo)) print(i) Ausgabe: 1/log(2) <code>sympy.oo</code> steht für das {{W|Unendlichzeichen}} <math>\infty</math> (die liegende Acht oder das Möbiusband). Mit <code>sympy.pprint(i)</code> ließe sich letzere Ausgabe etwas schöner schreiben: 1 ────── log(2) Man beachtete, <code>log</code> steht hier für den natürlichen Logarithmus <code>ln</code>. == Aufgaben == * Integrieren Sie die Funktion <math>y = \log(x) + 10x</math> von 1 bis 5. * Integrieren Sie die Funktion <math>y = x^3</math> von 0 bis 4. * Integrieren Sie <math>\int x^x(\log (x) + 1)\mathrm dx</math> symbolisch. = Gewöhnliche Differenzialgleichungen = == DGL numerisch lösen == Für die Lösung von Differenzialgleichungen steht u.a. die Funktion scipy.integrate.solve_ivp() zur Verfügung. Diese Funktion implementiert auch das Runge-Kutta-Verfahren (RK45). {{Wikipedia | Runge-Kutta-Verfahren}} Beispiel <math>y' = x^2 + y^3</math>: import scipy import numpy as np import matplotlib.pyplot as plt def dy_dx(x, y): return x**2 + y**3 y0 = [1] xi = [0, 1] x = np.arange(0, 1, 0.01) z = scipy.integrate.solve_ivp(dy_dx, xi, y0, method="RK45", dense_output=True) y = z.sol(x) plt.plot(x, y.T) plt.grid() plt.show() [[Datei:PythonIng_dgl1.png]] == DGL symbolisch lösen == Beispiel <math>y' = x^2 + y^3</math>: import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) print(lsg) Ausgabe: [Eq(f(x), (-x**2)**(1/3)), Eq(f(x), (-x**2)**(1/3)*(-1 - sqrt(3)*I)/2), Eq(f(x), (-x**2)**(1/3)*(-1 + sqrt(3)*I)/2)] Mit <code>sympy.pprint</code> (pretty print) lässt sich die Ausgabe etwas übersichtlicher darstellen. import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) sympy.pprint(lsg) Ausgabe: ⎡ _____ _____ ⎤ ⎢ _____ 3 ╱ 2 3 ╱ 2 ⎥ ⎢ 3 ╱ 2 ╲╱ -x ⋅(-1 - √3⋅ⅈ) ╲╱ -x ⋅(-1 + √3⋅ⅈ)⎥ ⎢f(x) = ╲╱ -x , f(x) = ────────────────────, f(x) = ────────────────────⎥ ⎣ 2 2 ⎦ == Aufgaben == * Lösen Sie die Differenzialgleichung <math>y' = \frac{1}{x\cdot y}</math> mit Python. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>m' = -k\cdot m</math>. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>y' = \sqrt{|y|}</math>. =Laplace-Transformation= Laplace-Transformation: <math>F(s) =\mathcal{L} \left\{f\right\}(s) = \int_{0}^{\infty} f(t) \mathrm e^{-st} \,\mathrm{d}t, \qquad s\in\mathbb{C} </math> Inverse Laplace-Transformation: <math>\mathcal{L}^{-1} \left\{F\right\}(t) = \frac{1}{2 \pi \mathrm j} \int_{ \gamma - \mathrm j \infty}^{ \gamma + \mathrm j \infty} \mathrm e^{st} F(s)\,\mathrm ds = \begin{cases} f(t) & \text{für } t \geq 0 \\ 0 & \text{für } t < 0 \end{cases} </math> Siehe auch [[Ing_Mathematik:_Laplace-Transformation]] Code: import sympy from sympy.abc import t, s # Laplace-Transformation der Funktion f(t) = 1 (Heaviside-Fkt.) f = 1 # alternativ: f = sympy.Heaviside(t) F = sympy.laplace_transform(f, t, s, noconds=True) print("Laplace-Transformierte F(s):", F) # Inverse Laplace-Transformation zurück in den Zeitbereich f_inv = sympy.inverse_laplace_transform(F, s, t) print("Inverse Transformation f(t):", f_inv) Ausgabe: Laplace-Transformierte F(s): 1/s Inverse Transformation f(t): Heaviside(t) Die Zeile from sympy.abc import t, s steht alternativ für t = sympy.symbols("t") s = sympy.symbols("s") =Fourier-Reihen= <math> f(x)\approx \frac{a_{0}}{2}+\sum_{k=1}^{\infty}\left(a_{k}\cos\left(kx\right)+b_{k}\sin\left(kx\right)\right) </math> <math> a_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\cos\left(kx\right)\mathrm dx\quad\text{für }k\geq0 </math> <math> b_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\sin\left(kx\right)\mathrm dx\quad\text{für }k\geq1 </math> Für die Sägezahnfunktion <math>y=x;\, 0 < x < 2\pi</math> sei die Fourierreihe mit einem Python-Programm (unter Mithilfe von sympy) hergeleitet. Code: from sympy import fourier_series, pi, symbols, pprint x = symbols('x') f = x s = fourier_series(f, (x, 0, 2*pi)) pprint(s.truncate(n=4)) Ausgabe: 2⋅sin(3⋅x) -2⋅sin(x) - sin(2⋅x) - ────────── + π 3 Siehe auch [[Ing Mathematik: Fourierreihen]]. Ein komplizierteres Beispiel: [[Datei:IngMath fourier bsp13.svg | 300px]] <math>0\le t < T/2\text{:}\quad f(t) = H</math> <math>T/2 \le t \le T\text{:}\quad f(t) = \frac{2H}{T}\left( t-\frac{T}{2}\right)</math> Code: import sympy as sp H = sp.Symbol('H', positive=True) T = sp.Symbol('T', positive=True) t = sp.Symbol('t') f = sp.Piecewise( (H, (t > 0) & (t < T/2)), (2*H/T*(t-T/2), (t > T/2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Ausgabe: ⎛2⋅π⋅t⎞ ⎛4⋅π⋅t⎞ ⎛6⋅π⋅t⎞ ⎛2⋅π⋅t⎞ ⎛6⋅π⋅t⎞ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ 2⋅H⋅cos⎜─────⎟ 2⋅H⋅cos⎜─────⎟ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ 3⋅H ──────────── - ──────────── + ──────────── + ────────────── + ────────────── + ─── π 2⋅π 3⋅π 2 2 4 π 9⋅π =Rechnen mit wirklich großen Zahlen= Bekannt ist, dass Python kaum Einschränkungen beim Wertebereich von Ganzzahlen hat, z.B. print(10**300) Ausgabe (gekürzt): 100000000000000000000...00000000000000000000000000000000000000000000000000000000000000000000000 Ähnliches geht auch mit Gleitpunktzahlen, z.B. durch die Verwendung des Moduls mpmath: import mpmath print(mpmath.mpf(1500.4)**mpmath.mpf(300)) Ausgabe: 7.27975299218612e+952 Anderes Beispiel: from mpmath import mp, pi mp.dps = 100 print(pi) Ausgabe: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068 mpmath kann noch einiges mehr, dazu sei aber auf die entsprechende Dokumentation auf der mpmath-Homepage verwiesen. mpmath ist Bestandteil von SymPy, kann aber auch separat installiert werden. Aber auch Python selbst besitzt eine Möglichkeit, um mit großen bzw. exakten Gleitpunktzahlen zu rechnen, nämlich das interne Modul decimal. Dieses hat einige Vorteile gegenüber mpmath, aber auch gravierende Nachteile. Diese seien hier nicht detailliert aufgezählt. Grob gesagt hat decimal im Finanzwesen seine Berechtigung. Für wissenschaftliche Anwendungen wird aber mpmath vorzuziehen sein, da es u.a. vielfältige mathematische Funktionen bereit stellt. Nachfolgend ein einfaches Beispiel mit decimal: import decimal print("Potenzierung:", decimal.Decimal(1500.4) ** decimal.Decimal(300.0)) print("Einfache Addition:", 0.1 + 0.2) decimal.getcontext().prec = 50 print("Addition mit decimal:", decimal.Decimal("0.1") + decimal.Decimal("0.2")) Ausgabe: Potenzierung: 7.279752992186121551039839134E+952 Einfache Addition: 0.30000000000000004 Addition mit decimal: 0.3 <u>Aufgabe:</u> Recherchieren Sie im Internet die genauen Vor- und Nachteile von decimal und mpmath. Verwenden Sie dazu auch KI (z.B. von Google, chatgpt). =Regelungstechnische Aufgabenstellungen= Für regelungstechnische Aufgaben gibt es u.a. das externe Paket <code>control</code>. Hier soll nicht detailliert darauf eingegangen werden. Anhand eines Beispiels soll anschließend nur die Visualisierung in Form eines Bode-Diagramms und der Sprungantwort gezeigt werden. Gegeben sei ein P-Regler mit <math>R = \frac{5}{2}</math> und eine Strecke <math>S= \frac{1}{30s^3+20s^2+10s+1,5}</math>. Gesucht sei vorerst ein Bode-Diagramm für den offenen Regelkreis und das Führungsverhalten. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke # oder: G0 = ct.series(regler, strecke) Gw = ct.feedback(G0) ct.bode_plot(G0, label='G0') ct.bode_plot(Gw, label='Gw') plt.show() [[Datei:PythonIng_bode1.svg]] Nun noch für obiges Beispiel die Sprungantwort. Diese zeigt einige große Überschwinger, d.h. der Regler kann sicher noch optimiert werden. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke Gw = ct.feedback(G0) t, y = ct.step_response(Gw) plt.plot(t,y) plt.title('Sprungantwort') plt.xlabel('t') plt.ylabel('h(t)') plt.grid() plt.show() [[Datei:PythonIng_bode3.svg]] Einige weitere wichtige Daten (Phasenreserve, Amplitudenreserve, Durchtrittsfrequenz) lassen sich mittels der <code>control</code>-Funktion <code>margin()</code> ermitteln. Die Ortskurve lässt sich mit der Funktion <code>nyquist_plot()</code> zeichnen. Dies sei hier aber nicht weiter ausgeführt. ==Aufgaben== * Zeichen Sie mit Python die Ortskurve für obiges Beispiel. * Was passiert, wenn man die Reglerverstärkung weiter aufdreht (z.B. auf <math>R = \frac{25}{2}</math>)? * Wie sehen das Bode-Diagramm und die Sprungantwort aus, wenn ein PI-Regler verwendet wird? = Stereostatik etc. = Das Modul SymPy bietet einige Möglichkeiten einfache Bauwerke zu berechnen, z.B. Balken oder Fachwerke. Nachfolgend wird ein einfaches Fachwerk berechnet und gezeichnet. Python-Code: from sympy.physics.continuum_mechanics.truss import Truss t = Truss() # Knoten t.add_node(("A", -3, 0), ("B", 0, 0), ("C", 4, 0), ("D", 7, 0), ("E", 6, 1.5), ("F", 2, 3), ("G", -2, 1.5)) # Stäbe t.add_member(("AB","A","B"), ("BC","B","C"), ("CD","C","D")) t.add_member(("AG","A","G"), ("GB","G","B"), ("GF","G","F")) t.add_member(("BF","B","F"), ("FC","F","C"), ("CE","C","E")) t.add_member(("FE","F","E"), ("DE","D","E")) # Auflager; roller ... Loslager, pinned ... Festlager t.apply_support(("A","roller"), ("D","pinned")) # Einwirkende Kräfte t.apply_load(("G", 5, 270), ("E", 3, 90)) # Berechnung t.solve() print("Reaction Forces: ", t.reaction_loads) print("Internal Forces: ", t.internal_forces) # Fachwerk zeichnen p = t.draw() p.show() Ausgabe auf der Konsole: Reaction Forces: {'R_A_y': 4.20000000000000, 'R_D_x': 0, 'R_D_y': -2.20000000000000} Internal Forces: {'AB': 2.80000000000000, 'BC': 0.333333333333333, 'CD': -1.46666666666667, 'AG': -5.04777178564958, 'GB': -2.05555555555556, 'GF': -1.23413387432364, 'BF': 0.411111111111111*sqrt(13), 'FC': -0.3*sqrt(13), 'CE': 1.50000000000000, 'FE': 0.284800124843917, 'DE': 2.64407093534026} Zeichnung: [[File:PythonIng_fachwerk1.svg|300px]] Details zu diesem Thema siehe z.B. [https://docs.sympy.org/latest/modules/physics/continuum_mechanics/index.html Continuum Mechanics] oder [https://docs.sympy.org/latest/tutorials/physics/continuum_mechanics/index.html Continuum Mechanics Tutorials]. Auch andere mechanische Probleme werden von SymPy abgehandelt ([https://docs.sympy.org/latest/tutorials/physics/index.html Physics Tutorials]). == Aufgabe == Gegeben sei ein einseitig eingespannter Kragträger. Belastet wird er durch eine Einzellast am Trägerende. Für die Daten siehe folgende ASCII-Skizze: | 20 kN //|---> x | //| V //|---------------------- //| 10 m | Elastizitätsmodul E = 2,1*10⁵ N/mm² Flächenträgheitsmoment I = 0.001 m⁴ Berechnen Sie die Auflagerreaktionen, den Querkraft- und Biegemomentenverlauf, sowie die Verformungen. Stellen Sie dies mit Hilfe von SymPy graphisch und auch mittels Formeln dar. Verwenden Sie dazu auch pprint (pretty print) aus dem SymPy-Modul. Zwecks Lösungsansatz siehe die oben aufgeführte Seite "Continuum Mechanics Tutorials". Achten Sie auch auf die Einheiten! Kontrollieren Sie das Ganze mittels händischer Rechnung. In dem genannten Tutorial ist von "Singularity Functions" die Rede. Gemeint ist damit in diesem Kontext die {{W|Föppl-Klammer}}. Einige Python-Programme, vorrangig zu Maschinenelementen, finden sich auf [https://baymp.de/download_python.html BayMP für Python] (Balken, Zahnräder, Stabknickung usw.). =Thermodynamik= == PYroMat == Für thermodynamische Aufgabenstellungen gibt es verschiedene externe Module. Eines davon ist PYroMat (siehe auch [http://pyromat.org]). Damit lassen sich thermodynamische Stoffdaten für viele Substanzen berechnen. Beispiel (einige Stoffdaten für Wasser bei 400°C und 20 bar berechnen): import pyromat as pm # Wasserdaten laden: H2O = pm.get('mp.H2O') # Stoffdaten berechnen: T = 673.15 # Temperatur in Kelvin p = 20 # Druck in bar v = H2O.v(T, p) h = H2O.h(T, p) s = H2O.s(T, p) print(f"Spezifisches Volumen: {v} m³/kg") print(f"Spezifische Enthalpie: {h} kJ/kg") print(f"Spezifische Entropie: {s} kJ/(kg K)") Ausgabe: Spezifisches Volumen: [0.1512163] m³/kg Spezifische Enthalpie: [3248.3789473] kJ/kg Spezifische Entropie: [7.12924142] kJ/(kg K) <small> PYroMat muss vorab installiert werden (z.B. mittels pip, in eine virtuelle Umgebung) </small> <code>mp</code> steht für "multi phase". Für ein ideales Gas wäre <code>ig</code> zuständig, z.B. <code>'ig.O2'</code>. Beispiel (T-s-Diagramm für Wasser zeichnen): import numpy as np import matplotlib.pyplot as plt import pyromat as pm # Konfigurieren pm.config["unit_pressure"] = "bar" pm.config["unit_temperature"] = "K" fluid = pm.get("mp.H2O") # Temperaturbereich für das Nassdampfgebiet T_tripel = 273.16 T_crit = 647.096 T = np.linspace(T_tripel, T_crit - 0.1, 200) # Sättigungslinien berechnen und zeichnen for x in np.linspace(0.0, 1.0, 5): s = fluid.s(T=T, x=x) if(x<=0.0): plt.plot(s, T, label="Siedelinie x=%3.1f" % x, linewidth=2.0) elif(x>=1.0): plt.plot(s, T, label="Taulinie x=%3.1f" % x, linewidth=2.0) else: plt.plot(s, T, label="x=%3.1f" % x, linewidth=1.0) # Isobaren zeichnen p_values = [0.1, 1, 10, 50, 100] T_isobar = np.linspace(T_tripel, 1000, 200) t = 0.7 for p in p_values: s_iso = fluid.s(T=T_isobar, p=p) plt.plot(s_iso, T_isobar, 'k-', alpha=0.8, linewidth=0.8) t += .05 idx = int(len(s_iso) * t) plt.text(s_iso[idx], T_isobar[idx], f"{p} bar", fontsize=9, alpha=0.8) # Diagramm zeichnen plt.title("T-s-Diagramm für Wasser") plt.xlabel("Spezifische Entropie s in kJ/kg K", fontsize=10) plt.ylabel("Temperatur T in K", fontsize=10) plt.legend(loc="best") plt.grid(True) plt.show() Ausgabe (in etwa so): [[Datei:T-s-Diagramm fuer Wasser.svg|400px]] == CoolProp == Auch mit CoolProp können Stoffdaten berechnet werden. Siehe auch [https://coolprop.org/coolprop/wrappers/Python/index.html] Beispiel (Wasser bei 20bar und 400°C): import CoolProp.CoolProp as CP fluid = 'Water' T = 673.15 # Temperatur in Kelvin P = 20e5 # Druck in Pascal dichte = CP.PropsSI('D', 'T', T, 'P', P, fluid) enthalpie = CP.PropsSI('H', 'T', T, 'P', P, fluid) entropie = CP.PropsSI('S', 'T', T, 'P', P, fluid) print(f"Spez. Volumen: {1/dichte:.6f} m³/kg") print(f"Spez. Enthalpie: {enthalpie:.2f} J/kg") print(f"Spez. Entropie: {entropie:.2f} J/kgK") Ausgabe: Spez. Volumen: 0.151215 m³/kg Spez. Enthalpie: 3248344.02 J/kg Spez. Entropie: 7129.16 J/kgK == iapws == Um Werte für Wasser(dampf) zu erhalten (IAPWS; '''I'''nternational '''A'''ssociation for the '''P'''roperties of '''W'''ater and '''S'''team) gibt es die Bibliothek iapws. Siehe auch [https://iapws.org/] und [https://pypi.org/project/iapws/] Beispiel (Wasser für 20bar und 400°C): from iapws import IAPWS97 dampf = IAPWS97(P=2.0, T=673.15) print(f"Spezifisches Volumen: {dampf.v:.6f} m³/kg") print(f"Spezifische Enthalpie: {dampf.h:.2f} kJ/kg") print(f"Spezifische Entropie: {dampf.s:.4f} kJ/(kgK)") print(f"Phase: {dampf.phase}") Ausgabe: Spezifisches Volumen: 0.151208 m³/kg Spezifische Enthalpie: 3248.23 kJ/kg Spezifische Entropie: 7.1290 kJ/(kgK) Phase: Gas == TESPy == Ein anderes Modul für einen anderen Aufgabenzweck ist TESPy ('''T'''hermal '''E'''ngineering '''S'''ystems in '''Py'''thon). Dieses Modul ist für die Anlagensimulation zuständig. Für nähere Informationen siehe [https://tespy.readthedocs.io/en/main/getting_started/introduction.html]. Als Beipiel sei hier vorerst Code, der von der Google KI generiert wurde, angeführt. Der Code wurde überarbeitet, damit keine Warnungen auftreten. Bitte aber den Code trotzdem mit Vorsicht genießen, auch KI-generierter Code kann Fehler aufweisen. Eine Pumpe wird berechnet: from tespy.components import Sink, Source, Pump from tespy.connections import Connection from tespy.networks import Network # 1. Netzwerk definieren (Zentrales Steuerungselement) # Wir wählen Wasser als Fluid und bar/Celsius als Einheiten nw = Network(fluids=["water"]) nw.units.set_defaults(pressure="bar", pressure_difference="bar", temperature="°C", enthalpy="kJ / kg") # 2. Komponenten erstellen eingang = Source("Wasserquelle") ausgang = Sink("Wasserspeicher") pumpe = Pump("Speisewasserpumpe") # 3. Verbindungen definieren (Komponenten miteinander verknüpfen) c1 = Connection(eingang, "out1", pumpe, "in1") c2 = Connection(pumpe, "out1", ausgang, "in1") # Verbindungen dem Netzwerk hinzufügen nw.add_conns(c1, c2) # 4. Randbedingungen und Parameter festlegen # Zustand am Eingang (Druck, Temperatur, Massenstrom, Fluid-Zusammensetzung) c1.set_attr( v=1, # Massenstrom: 1 kg/s T=20, # Temperatur: 20 °C p=1, # Druck: 1 bar fluid={"water": 1}, # 100% Wasser ) # Zustand am Ausgang / Zielwerte der Pumpe c2.set_attr(p=10) # Ziel-Druck nach der Pumpe: 10 bar # Pumpeneigenschaften festlegen pumpe.set_attr(eta_s=0.8) # Isentroper Wirkungsgrad von 80% # 5. Simulation ausführen nw.solve(mode="design") # 6. Ergebnisse ausgeben nw.print_results() # Spezifische Werte direkt auslesen print("\n--- Auswertung ---") print(f"Erforderliche Pumpenleistung: {pumpe.P.val / 1000:.2f} kW") print(f"Temperatur nach der Pumpe: {c2.T.val:.2f} °C") Ausgabe (gekürzt): iter | residual | progress | massflow | pressure | enthalpy | fluid | component -------+------------+------------+------------+------------+------------+------------+------------ 1 | 7.04e+04 | 12 % | 9.96e+02 | 0.00e+00 | 8.81e+04 | 0.00e+00 | 0.00e+00 2 | 5.91e-12 | 100 % | 1.11e-13 | 0.00e+00 | 7.39e-12 | 0.00e+00 | 0.00e+00 3 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 4 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 Total iterations: 4, Calculation time: 0.01 s, Iterations per second: 480.85 ##### RESULTS (Pump) ##### +-------------------+----------+----------+-----------+----------+----------+----------+ | | P | pr | dp | eta | eta_s | head | |-------------------+----------+----------+-----------+----------+----------+----------| | Speisewasserpumpe | 1.12e+06 | 1.00e+01 | -9.00e+00 | 8.00e-01 | 8.00e-01 | 9.19e+01 | +-------------------+----------+----------+-----------+----------+----------+----------+ ... ... --- Auswertung --- Erforderliche Pumpenleistung: 1124.77 kW Temperatur nach der Pumpe: 20.07 °C = Stochastik = Die {{W|Stochastik}} ist ein sehr weites Feld. Hier werden etliche wichtige Themen kurz angerissen. Python stellt mit den Moduln math und statistics Software zu diesem Zwecke bereit. math und statistics sind bereits im Lieferumfang von Python enthalten. Aber auch mit den externen Modulen NumPy, SciPy, stochastic und pandas kann man Stochastik in Python betreiben. Die Theorie der Wahrscheinlichkeitsrechnung und Statistik soll etwas später in Band 5 dieser Buchreihe behandelt werden. == Lageparameter == import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] m1 = statistics.mean(werte) m2 = statistics.mode(werte) m3 = statistics.median(werte) print("Arithmetischer Mittelwert = ", m1) print("Modalwert = ", m2) print("Median = ", m3) Ausgabe: Arithmetischer Mittelwert = 3.5 Modalwert = 1 Median = 3.0 == Streuungsparameter == Beispiel (Berechnung der Standardabweichung): import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] s = statistics.stdev(werte) print("Standardabweichung = ", s) Ausgabe: Standardabweichung = 2.6770630673681683 Beispiel (Berechnung des Variationskoeffizienten V = Standardabweichung/Mittelwert) import numpy as np from scipy import stats import statistics k = 50 dat1 = [14, 21, 18, 25, 30, 17, 20] dat = np.array(dat1) # Mit SciPy v = stats.variation(dat) vddof = stats.variation(dat, ddof=1) print("V SciPy: ", v) print("V DDOF SciPy: ", vddof) print(k*"-") # mit NumPy mittelwert1 = np.mean(dat) std_abw1 = np.std(dat) std_abw1ddof = np.std(dat, ddof=1) v1= std_abw1 / mittelwert1 v1ddof = std_abw1ddof / mittelwert1 print("Mittelwert NumPy: ", mittelwert1) print("Std.abw. NumPy: ", std_abw1) print("Std.abw. DDOF NumPy: ", std_abw1ddof) print("V NumPy: ", v1) print("V DDOF NumPy: ", v1ddof) print(k*"-") # nur mit reinem Python mittelwert2 = statistics.mean(dat1) std_abw2 = statistics.stdev(dat1) v2 = std_abw2 / mittelwert2 print("Mittelwert Python: ", mittelwert2) print("Std.abw. Python: ", std_abw2) print("V Python:", v2) print(k*"-") Ausgabe: V SciPy: 0.23890355966467272 V DDOF SciPy: 0.25804533701889254 -------------------------------------------------- Mittelwert NumPy: 20.714285714285715 Std.abw. NumPy: 4.948716593053935 Std.abw. DDOF NumPy: 5.3452248382484875 V NumPy: 0.23890355966467272 V DDOF NumPy: 0.2580453370188925 -------------------------------------------------- Mittelwert Python: 20.714285714285715 Std.abw. Python: 5.3452248382484875 V Python: 0.2580453370188925 -------------------------------------------------- Der Unterschied bei der Standardabweichung zwischen reinem Python und den externen Bibliotheken SciPy und NumPy entsteht dadurch, dass einmal durch (n-1) und das andere Mal nur durch n dividiert wird. Dies kann bei NumPy und SciPy dadurch entschärft werden, indem <code>ddof=1</code> gesetzt wird. ddof steht für '''D'''elta '''D'''egrees '''o'''f '''F'''reedom. <small>Je größer die Anzahl der Datensätze n wird, umso weniger spielt das eine Rolle.</small> == Kombinatorik == Beispiel: import math n = 7 k = 5 print("n! = ", math.factorial(n)) print("Kombinationen (n über k) = ", math.comb(n, k)) Ausgabe: n! = 5040 Kombinationen (n über k) = 21 Siehe zu diesem Thema auch [[Ing Mathematik: Permutationen, Kombinationen, binomischer Lehrsatz]]. Die Anzahlen lassen sich einfach aus den dortigen Formeln ermitteln, z.B. bei Permutationen mit <math>n!</math> oder Variationen mit Wiederholungen als <math>n^k</math>. Will man die Kombinationen oder Variationen aber auch als Liste ausgeben, so kann das Modul <code>itertools</code> nützlich sein. Beispiel (Variationen ohne Wiederholung): from itertools import permutations menge = ["A", "B", "C", "D"] # n = 4 k = 3 variationen = list(permutations(menge, k)) for v in variationen: print("".join(v)) print(50*"-") print(len(variationen)) Ausgabe (gekürzt): ABC ABD ACB ... DCA DCB -------------------------------------------------- 24 Siehe zum Modul <code>itertools</code> auch die Website [https://docs.python.org/3/library/itertools.html]. * Variationen mit Wiederholung: <code>itertools.product()</code> * Kombinationen ohne Wiederholung: <code>itertools.combinations()</code> * Kombinationen mit Wiederholung: <code>itertools.combinations_with_replacement()</code> == Zufallszahlen == Beispiel: import random # Ganzzahlige Zufallszahl von 1 bis 10 zufallszahl1 = random.randint(1, 10) # Gleitpunktzahlen # zwischen 0.0 und 1.0 zufallszahl2 = random.random() # Zahl zwischen 1.5 und 9.5 zufallszahl3 = random.uniform(1.5, 9.5) # aus Liste auswählen farbe = ["Rot", "Grün", "Blau"] zufallswert = random.choice(farbe) print(zufallszahl1) print(zufallszahl2) print(zufallszahl3) print(zufallswert) Ausgabe, z.B.: 5 0.14147945849015753 6.894003397570905 Rot Benötigt man mehrere Zufallszahlen, so ist das Modul <code>numpy</code> zu bevorzugen, z.B.: * Normalverteilung: <code>np.random.normal(...)</code> * Gleichverteilung: <code>np.random.uniform(...)</code> == Histogramm == Zum Thema Histogramm siehe {{W|Histogramm}}. Beispiel (mit Matplotlib): import matplotlib.pyplot as plt import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) plt.hist(daten, bins=25, edgecolor='darkgray') plt.show() Ausgabe: [[Datei:IngMath_histogramm.svg|300px]] Beispiel (mit Seaborn): import matplotlib.pyplot as plt import seaborn as sns import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) sns.set_theme(style="darkgrid") sns.histplot(data=daten) plt.show() Ausgabe: [[Datei:IngMath_histogramm2.svg|300px]] Das Kürzel <code>sns</code> ist Konvention und steht für die fiktive Figur '''S'''amuel '''N'''orman '''S'''eaborn aus der US-Fernsehserie {{W|The West Wing – Im Zentrum der Macht | The West Wing}}. == Box-Plot == [[File:Elements of a boxplot.svg|400px]] Siehe auch {{W|Box-Plot}}. Beispiel (mit Seaborn erstellt): import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset("tips") sns.boxplot(data=df, x="day", y="tip", hue="day", legend=False) plt.show() Ausgabe: [[Datei:IngMath_boxplot.svg|400px]] Beispiel (mit Matplotlib erstellt): import matplotlib.pyplot as plt daten = [12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25] plt.boxplot(daten, patch_artist=True) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() Ausgabe: [[Datei:IngMath_boxplot2.svg|300px]] Um mehrere Box-Plots unterschiedlicher Farbe mit Matplotlib in einem Diagramm zu zeichnen, können Sie folgendermaßen vorgehen: import matplotlib.pyplot as plt daten = [[12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25], [10, 19, 20, 21, 20, 30, 19, 40, 11, 17, 19, 21]] farben = ["green", "blue"] boxplot = plt.boxplot(daten, patch_artist=True) for patch, farbe in zip(boxplot['boxes'], farben): patch.set_facecolor(farbe) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() == Regressionsrechnung == Beispiel: import numpy as np import matplotlib.pyplot as plt # Messpunkte x = np.array([1, 3, 5, 6, 8, 10, 20]) y = np.array([3, 4, 5, 5, 7, 9, 11]) # Regressionskurve (Grad 1 = lineare Regression, 2 = Polynom-Regression 2. Gr.) # y = kx + d k, d = np.polyfit(x, y, deg=1) # y = ax**2 + bx + c a, b, c = np.polyfit(x, y, deg=2) x_l = np.linspace(1, 20, 100) y_p = a * x_l**2 + b * x_l + c # Zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.plot(x, k*x + d, color='blue', label='Regressionsgerade') plt.plot(x_l, y_p, color='red', label='Regressionspolynom 2. Gr.') plt.xlabel('x') plt.ylabel('y') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: [[Datei:IngMath_regression.svg|400px]] == Korrelationsrechnung == Beispiel: import pandas as pd import matplotlib.pyplot as plt # Messdaten x = [1, 3, 4, 5, 6] y = [2, 4, 6, 8, 5] daten = {'X': x, 'Y': y} df = pd.DataFrame(daten) # Korrelation korr = df['X'].corr(df['Y']) print(f"Korrelationskoeff.: {korr}") # Messpunkte zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: Korrelationskoeff.: 0.7556096518348252 [[Datei:IngMath_korrelation.svg|300px]] == Mengen und Venn-Diagramme == Beispiel: import matplotlib.pyplot as plt from matplotlib_venn import venn2 menge_a = {1, 2, 3, 4, 5, 6} menge_b = {4, 5, 6, 7, 8} vereinigung = menge_a | menge_b schnitt = menge_a & menge_b print("Vereinigungsmenge = ", vereinigung) print("Schnittmenge = ", schnitt) venn2([menge_a, menge_b], set_labels=('Menge A', 'Menge B')) plt.show() Ausgabe: Vereinigungsmenge = {1, 2, 3, 4, 5, 6, 7, 8} Schnittmenge = {4, 5, 6} [[Datei:IngMath_venn.svg|300px]] Siehe auch {{W|Mengendiagramm#Venn-Diagramme}}. == Verteilungs- und Dichtefunktion == * CDF ... '''C'''umulative '''D'''istribution '''F'''unction, Verteilungsfunktion * PDF ... '''P'''robability '''D'''ensity '''F'''unction, Dichtefunktion Beispiel (Normalverteilung): import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm my, sigma = 0, 1 x = np.linspace(-4, 4, 50) pdf = norm.pdf(x, my, sigma) cdf = norm.cdf(x, my, sigma) plt.plot(x, pdf, lw=2, label="Dichtefunktion") plt.plot(x, cdf, lw=2, label="Verteilungsfunktion") plt.legend() plt.grid() plt.show() Ausgabe: [[Datei:IngMath_cdf_pdf.svg|300px]] Beispiel (<math>\chi^2</math>-Verteilung): import numpy as np import matplotlib.pyplot as plt import scipy.stats as stats x = np.linspace(0, 20, 500) # df ... degree of freedom, Freiheitsgrad pdf = (stats.chi2.pdf(x, df=2), stats.chi2.pdf(x, df=5), stats.chi2.pdf(x, df=10)) for i in range(0,3): if(i==0): lab = "Freiheitsgrad 2" elif(i==1): lab = "Freiheitsgrad 5" else: lab = "Freiheitsgrad 10" plt.plot(x, pdf[i], label=lab, lw=2) plt.grid() plt.legend() plt.show() Ausgabe: [[Datei:IngMath_chi2.svg | 300px]] == Schätzen und Testen == === Intervallschätzung === Als Beispiel seien Daten gegeben, die von ''Dürr, Mayer: Wahrscheinlichkeitsrechnung und Schließende Statistik; 7. Aufl., Hanser, 2014, Seite 137'' stammen. Und zwar soll das 95%-Vertrauensintervall für den Mittelwert des Kaloriengehalts (kcal/100g) von Hähnchen ermittelt werden. Wir wollen das mit Python inkl. NumPy und SciPy durchführen. Die Stichprobe ist groß (50 Hähnchen): Python-Code: import numpy as np import scipy.stats as stats # Stichprobe daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203] # Parameter definieren konfidenzniveau = 0.95 mean = np.mean(daten) std = np.std(daten, ddof=1) stdfehler = stats.sem(daten) intervall = stats.norm.interval(confidence=konfidenzniveau, loc=mean, scale=stdfehler) print(f"Mittelwert: {mean}") print(f"Standardabweichung: {std}") print(f"Konfidenzintervall: {intervall}") Ausgabe: Mittelwert: 215.48 Standardabweichung: 33.14238915925757 Konfidenzintervall: (np.float64(206.29356722321992), np.float64(224.66643277678006)) Diese Werte stimmen gerundet mit denen im genannten Buch überein. Zum Code selbst: * sem steht für '''s'''tandard '''e'''rror of the '''m'''ean. * <code>scipy.stats.norm</code> ... Modul für die Normalverteilung. === Punktschätzung === Gleiche Daten wie oben bei der Intervallschätzung. Python-Code: import numpy as np from scipy import stats daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203 ] mu_hat, sigma_hat = stats.norm.fit(daten) print(f"Schätzer für den Erwartungswert (μ): {mu_hat:.4f}") print(f"Schätzer für die Standardabweichung (σ): {sigma_hat:.4f}") Ausgabe: Schätzer für den Erwartungswert (μ): 215.4800 Schätzer für die Standardabweichung (σ): 32.8093 === Hypothesentests === Beispiel: import numpy as np import scipy.stats as stats x_quer = 12.075 # Stichproben-Mittelwert var = 0.069 # Stichproben-Varianz n = 90 # Stichprobengröße my_0 = 12.0 # Nullhypothese alpha = 0.05 # Signifikanzniveau z_stat = (x_quer - my_0) / np.sqrt(var / n) p_val = 2 * (1 - stats.norm.cdf(np.abs(z_stat))) print(f"Z-Statistik: {z_stat:.4f}") if p_val < alpha: print(f"p-Wert: {p_val:.6f} < alpha:", alpha) print("Die Nullhypothese wird verworfen.") else: print(f"p-Wert: {p_val:.6f} > alpha:", alpha) print("Die Nullhypothese wird nicht verworfen.") Ausgabe: Z-Statistik: 2.7087 p-Wert: 0.006755 < alpha: 0.05 Die Nullhypothese wird verworfen. == Statistische Qualitätskontrolle == Beispiel (Mittelwertkarte): import numpy as np import matplotlib.pyplot as plt # Gegeben sollwert = 50.0 varianz = 4.0 stichproben_umfang = 1 daten = [49.5, 50.2, 53.0, 48.1, 52.6, 53.4, 49.8] # Berechnung standardabweichung = np.sqrt(varianz) streuung = standardabweichung / np.sqrt(stichproben_umfang) cl = sollwert ucl = cl + 3 * streuung lcl = cl - 3 * streuung # Darstellung plt.plot(daten, marker='o', linestyle='-', color='b', label='Messdaten') plt.axhline(cl, color='green', linestyle='-', label=f'CL: {cl}') plt.axhline(ucl, color='red', linestyle='--', label=f'UCL: {ucl:.2f}') plt.axhline(lcl, color='red', linestyle='--', label=f'LCL: {lcl:.2f}') plt.title('Mittelwertkarte') plt.xlabel('Stichprobe') plt.ylabel('Wert') plt.legend(loc='lower left') plt.grid(True) plt.show() Ausgabe: [[Datei:IngMath_mittelwertkarte.svg|300px]] Siehe auch {{W|Shewhart-Regelkarte}} und {{W|Qualitätsregelkarte}}. * UCL ... '''U'''pper '''C'''ontrol '''Limit''', Obere Eingriffsgrenze * LCL ... '''L'''ower '''C'''ontrol '''Limit''', Untere Eingriffsgrenze * CL ... '''C'''enter '''L'''ine, Mittellinie = Ein- und Ausgabe = == print == Die Anweisung print haben wir schon oft verwendet. Hier soll anhand von Beispielen kurz beschrieben werden, was der Befehl print leisten kann. print("Hallo", "Welt", 1, sep="-") print("Hallo", end=" ") print("Welt") Ausgabe: Hallo-Welt-1 Hallo Welt == input == a = int(input("Zahl 1: ")) b = int(input("Zahl 2: ")) print("a + b = ", a+b) Ausgabe (nach Eingabe der beiden Ganzzahlen): Zahl 1: 4 Zahl 2: 5 a + b = 9 == Aus Dateien lesen == Es seinen die datei.txt Hallo Welt. Wie geht es dir? ... und test1.py dat = open("datei.txt", mode = "r") print(dat.read()) dat.close() Ausgabe Hallo Welt. Wie geht es dir? ... Mit dem open()-Befehl wird die Datei datei.txt im Lesemodus geöffnet (r ... read). Mit dem read()-Befehl wird die Datei eingelesen und mittels print ausgegeben. == In Dateien schreiben == dat = open("datei.txt", mode = "a", encoding = "utf-8") dat.write("Hänge Zeile an\n") dat.close() Die Datei datei.txt sieht nach Abarbeitung des obigen Skripts nun so aus Hallo Welt. Wie geht es dir? ... Hänge Zeile an Es wird die Datei im Schreibmodus geöffnet (a ... append (anhängend), w ... write (überschreibend)). write() fügt hier also eine Zeile Text am Dateiende ein. close() schließt die Datei wieder. Das close() kann man sich mit der with-Anweisung auch sparen. with open("datei.txt", mode="a", encoding="utf-8") as dat: dat.write("Hänge Zeile an\n") = Benutzeroberflächen erstellen = == tkinter == {{Wikipedia | Tkinter}} Python bietet standardmäßig das Modul tkinter zur Programmierung von Benutzeroberflächen. Es müssen also bei der Verwendung von tkinter keine externen Module installiert werden. Hier wird eine (sehr) kurze Einführung in das Erstellen von grafischen Oberflächen mittels tkinter gegeben. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") win.minsize(300, 50) but = tk.Button(win, text = "Push the button") but.pack() win.mainloop() Ausgabe: [[Datei:PythonIng_gui1.jpg]] Ein etwas komplizierteres Beispiel sei nachfolgend gezeigt. Es sollen zwei Strings miteinander verknüpft und ausgegeben werden. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") def on_button_clicked(): str = ent1.get() + ent2.get() lab2["text"] = str ent1 = tk.Entry(win) ent2 = tk.Entry(win) lab1 = tk.Label(win, text="verknuepfen mit") lab2 = tk.Label(win, text="") but = tk.Button(win, text = "=", command=on_button_clicked) ent1.pack(side="left") lab1.pack(side="left") ent2.pack(side="left") but.pack(side="left") ent2.pack(side="left") lab2.pack(side="left") win.mainloop() Ausgabe (vor der Eingabe der Teilstrings): [[Datei:PythonIng_gui2.jpg]] Ausgabe (nach der Eingabe der Teilstrings und dem Drücken des =-Buttons): [[Datei:PythonIng_gui3.jpg]] == curses == {{Wikipedia | curses}} Mit dem curses-Modul lassen sich u.a. TUIs ('''T'''ext '''U'''ser '''I'''nterfaces) erstellen. Ein sehr einfaches Beispiel zur allgemeinen Funktionsweise wird nachstehend geliefert. import curses stdscr = curses.initscr() curses.start_color() curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE) stdscr.clear() stdscr.addstr("Hallo Welt", curses.color_pair(1)) stdscr.refresh() stdscr.getch() curses.endwin() Als Ausgabe sollte <span style="color:#FF0000;">Hallo Welt</span> (rote Schrift auf weißem Hintergrund) auf dem Terminal/der Konsole erscheinen. Getestet wurde dies mit openSUSE Tumbleweed, Python-Version 3.13.12. Das entsprechende Python-curses-Package muss installiert sein. Allgemeine Informationen zur Terminal-/Konsolengröße und Cursorposition liefert folgendes Programm: import curses stdscr = curses.initscr() stdscr.addstr(3, 5, "LINES: %d" % curses.LINES) stdscr.addstr(4, 5, "COLS: %d" % curses.COLS) (y,x) = stdscr.getyx() stdscr.addstr(5, 5, "Momentane Cursorposition: [%d, %d]" % (y, x)) (y,x) = stdscr.getbegyx() stdscr.addstr(6, 5, "Koordinatenursprung: [%d, %d]" % (y, x)) (y,x) = stdscr.getmaxyx() stdscr.addstr(7, 5, "Fenstergröße: [%d, %d]" % (y, x)) stdscr.addstr(11, 2, "Taste drücken -> Ende") stdscr.refresh() stdscr.getch() curses.endwin() Es sollte sich in etwa folgende Ausgabe ergeben: LINES: 44 COLS: 110 Momentane Cursorposition: [4, 15] Koordinatenursprung: [0, 0] Fenstergröße: [44, 110] Taste drücken -> Ende Zur Funktionsweise von curses siehe auch das Wikibook [[ncurses]]. Zum Verständnis sind dort allerdings elementare Kenntnisse in der Programmiersprache C erforderlich. == Qt == {{Wikipedia | Qt (Bibliothek)}} Auch für das Qt-Framework gibt es eine Anbindung an Python. Nachfolgend ein einfaches Beispiel. import sys from PySide6.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hallo Welt!") label.show() sys.exit(app.exec()) Ausgabe: [[Datei:PythonIng_gui10.png]] == Gtk == {{Wikipedia | GTK (Programmbibliothek)}} Eine idente Ausgabe, wie oben für Qt gezeigt, erzeugt z.B. folgendes Gtk-Programm: import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk def on_activate(app): win = Gtk.ApplicationWindow(application=app) lab = Gtk.Label(label="Hallo Welt!") win.set_child(lab) win.present() app = Gtk.Application() app.connect('activate', on_activate) app.run(None) Auch für die Benutzung von Qt und Gtk müssen die jeweiligen Packages installiert sein. Getestet wurden die entsprechenden Python-Programme nur unter openSUSE Tumbleweed. Wie das GTK-Paket unter MS Windows 11 installiert wird, siehe z.B. [https://www.gtk.org/docs/installations/windows Setting up GTK for Windows]. Damit sei aber das Thema "Benutzeroberflächen erstellen" hier abgeschlossen, da dies schon ein sehr spezielles Aufgabengebiet ist, das eher Informatiker und nicht so sehr Ingenieure anspricht. Bei Bedarf siehe aber ggf. die entsprechenden Links unten in diesem Tutorial. Dort sind weiterführende Informationen zu finden. = Pandas kurz erklärt = Hier wird kurz auf das externe Modul Pandas eingegangen. Pandas steht für '''Pan'''el '''Da'''ta und ist ein Modul für die Datenanalyse und -manipulation. == Series == Vorstellbar ist eine "Series" wie eine einzelne Spalte in einem Tabellenkalkulationsprogramm. Beispiel (Index implizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) # Temperaturwerte print(temp) Ausgabe: 0 8.5 1 11.0 2 12.5 3 10.0 4 13.0 5 11.0 6 14.5 dtype: float64 Das Kürzel <code>pd</code> ist Konvention. Es seien Temperaturwerte gegeben. Die erste Spalte bei der Ausgabe ist der Index. Die zweite Spalte enthält die Werte. Beispiel (separater Zugriff auf den Index und auf die Werte): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) print(temp.index) print(temp.values) Ausgabe: RangeIndex(start=0, stop=7, step=1) [ 8.5 11. 12.5 10. 13. 11. 14.5] Beispiel (Index explizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) print("*** Die gesamte Series ***") print(temp) print("*** Temperatur am Donnerstag ***") print(temp["Do"]) print("*** Tage wärmer als 12 Grad ***") temp_gr_12 = temp[temp > 12] print(temp_gr_12) Ausgabe: *** Die gesamte Series *** Mo 8.5 Di 11.0 Mi 12.5 Do 10.0 Fr 13.0 Sa 11.0 So 14.5 dtype: float64 *** Temperatur am Donnerstag *** 10.0 *** Tage wärmer als 12 Grad *** Mi 12.5 Fr 13.0 So 14.5 dtype: float64 == DataFrame == Ein DataFrame entspricht einer Tabelle. Beispiel (Erzeugen eines DataFrames): import pandas as pd tag = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] v1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=tag) v2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=tag) v3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=tag) tab = pd.concat([v1, v2, v3], axis=1) tab.columns = stadt print(tab) print(type(tab)) Ausgabe: Linz Salzburg Innsbruck Mo 1 8 Hallo Di 2 9 16 Mi 3 10 17 Do 4 11 18 Fr 5 12 19 Sa 6 13 20 So 7 14 21 <class 'pandas.core.frame.DataFrame'> Wir haben hier drei Datenspalten (v1, v2, v3) mit den Spaltennamen "Linz", "Salzburg" und "Innsbruck", sowie sieben Zeilen "Mo" bis "So". Beispiel (Zugriff auf eine Spalte): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab["Salzburg"]) Ausgabe: Mo 8 Di 9 Mi 10 Do 11 Fr 12 Sa 13 So 14 Name: Salzburg, dtype: int64 Beispiel (Zugriff auf eine Zeile): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab.loc["Di"]) Ausgabe: Linz 2 Salzburg 9 Innsbruck 16 Name: Di, dtype: object == Grafiken erstellen == Hier sei nur ein Torten- oder Kreisdiagramm gezeichnet: import pandas as pd import matplotlib.pyplot as plt temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) expl = [0, 0.2, 0, 0, 0, 0, 0] temp.plot.pie(figsize=(5,5), explode=expl) plt.show() Ausgabe: [[Datei:IngPython_pandas1.svg|350px]] Die <code>figsize</code> hat nichts mit der Spaltenanzahl zu tun, sondern setzt die Fenster- oder Diagrammgröße in Inches (Breite * Höhe). Mit Pandas kann man auch noch andere Diagrammarten erstellen, z.B. Linien- oder Balkendiagramme. Dies wird hier aber nicht vorgeführt. == Arbeiten mit CSV- und LibreOffice-Dateien == Gegeben sei eine CSV-Datei test1.csv: Mai;Juni;Juli 12;17;45 15;65;65 16;32;23 4;14;7 23;17;Keine Daten verfügbar 67;Keine Daten verfügbar;45 15;24;12 Lesen von dieser CSV-Datei: import pandas as pd tab = pd.read_csv("test1.csv", sep=";") print(tab) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Schreiben in eine CSV-Datei test2.csv: import pandas as pd val = pd.read_csv("test1.csv", sep=";") val.to_csv("test2.csv", index=False) Ausgabedatei: Mai,Juni,Juli 12,17,45 15,65,65 16,32,23 4,14,7 23,17,Keine Daten verfügbar 67,Keine Daten verfügbar,45 15,24,12 Die Ausgabedatei ist beinahe gleich wie die Eingabedatei. Es werden aber Kommas statt Strichpunkten verwendet. Daher kommt auch der Name CSV ('''C'''omma '''S'''eparated '''V'''alue). Will man wieder Strichpunkte, so kann man dies über den Parameter <code>sep=";"</code> in der <code>to_csv</code>-Funktion machen. Um direkt von einer ODS-Datei (LibreOffice Calc, '''O'''pen '''D'''ocument '''S'''preadsheet) zu lesen muss das Modul odfpy extra installiert sein (per YaST, pip etc.). Gelesen wird dann folgendermaßen: import pandas as pd df = pd.read_excel('test1.ods', engine='odf') print(df) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Die Datei "test1.ods" sei die Datei, aus der das obige "test1.csv" generiert wurde. Schreiben kann man ebenfalls in eine ODS-Datei: import pandas as pd daten = { "Name": ["Hugo", "Richie", "Wilhelmine"], "Alter": [38, 30, 29], "Ort": ["Linz", "Innsbruck", "Salzburg"] } tab = pd.DataFrame(daten) with pd.ExcelWriter("test2.ods", engine="odf") as writer: tab.to_excel(writer, sheet_name="Daten", index=False) Es ergibt sich eine "test2.ods"-Datei (Screenshot): [[Datei:IngPython_pandas2.png|250px]] == Sonstiges == Hier seien stichpunktartig einige weitere Features von Pandas angeführt: * {{W|Pivot-Tabelle|Pivot-Tabellen}} (pivot ... Dreh-, Angelpunkt): Zweck - große Datenmengen schnell zusammenfassen, filtern und analysieren. * NaN ('''n'''ot '''a''' '''n'''umber): In einem Datensatz fehlt ein Wert oder ist nicht definiert. * groupby-Funktion: Daten strukturieren, aggregieren oder Zwischensummen bilden. * {{W|Binning#Datenverarbeitung_und_-analyse|Binning}}: Klassenbildung. * Mehrstufige Indizierung (Hierarchical Indexing oder MultiIndex) * Zeitreihen (Time Series) Für tiefergehende und weiterführende Informationen wird auf das Buch von ''Klein: Numerisches Python; Hanser, 2023'' und [https://pandas.pydata.org/ pandas] verwiesen. = Style Guide, flake8, pylint, Black etc. = == Style Guide == Wie man schönen und richtigen Python-Code schreibt, erfahren Sie in * [https://peps.python.org/pep-0008/ PEP 8 – Style Guide for Python Code] == Formatter und Linter == Ein Modul, das prüft, ob die Richtlinien im Style Guide eingehalten wurden, ist ''flake8'': * [https://flake8.pycqa.org/en/latest/ Flake8: Your Tool For Style Guide Enforcement] Code formatieren kann man auch mit [https://pypi.org/project/black/ Black]. Z.B. übersetzt <code>black test1.py</code> die Datei <code>test1.py</code> import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) in import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Die Programmausgabe ist reformatted test1.py All done! ✨ 🍰 ✨ 1 file reformatted. Der Unterschied zwischen Black und Flake8: * Black ist ein Code-Formatter. Er formatiert Ihren Code um, sodass er im Einklang mit PEP 8 steht. * Flake8 ist ein {{W|Lint (Programmierwerkzeug) | Code-Linter}}. Flake8 verändert Ihren Code nicht, sondern durchsucht ihn nach potenziellen Fehlern etc. Am obigen Beispiel sieht man auch, dass flake8 und Black nicht immer einer Meinung sind. Flake8 (<code>flake8 test1.py</code>) würde standardmäßig den mit Black formatierten Code bemängeln: test1.py:8:80: E501 line too long (80 > 79 characters) Diese Diskrepanz kann beseitigt werden. Da 79 Zeichen auf modernen Bildschirmen meist als zu kurz empfunden werden, ist ein Limit von 88 Zeichen (Black-Standard) oder mehr empfehlenswert. Um dies zu implementieren, erstellen Sie in Ihrem Projektverzeichnis eine <code>.flake8</code>-Datei mit dem Inhalt [flake8] max-line-length = 88 Und schon ignoriert Flake8 dieses Problem. Ein anderer Linter ist pylint. Der würde beim Abarbeiten des obigen Beispiels, z.B. mit <code>pylint test1.py</code> noch eine Kleinigkeit bemängeln: ************* Module test1 /home/hr/tmp/test1.py:1:0: C0114: Missing module docstring (missing-module-docstring) ------------------------------------------------------------------ Your code has been rated at 8.57/10 (previous run: 8.57/10, +0.00) Auch pylint muss vor der ersten Verwendung installiert werden (z.B. mittels pip, virtuelle Umgebung, YaST). Die Dokumentation zu pylint findet sich auf [https://pylint.readthedocs.io/en/latest/]. <u>Aufgabe:</u> Fügen Sie einen "module docstring" in die <code>test1.py</code>-Datei ein und testen Sie erneut mit flake8, Black und pylint. <small>Sehen Sie zum Thema docstrings auch [https://peps.python.org/pep-0257/#what-is-a-docstring PEP 257 – Docstring Conventions].</small> Es gibt noch weitere Formatierungswerkzeuge für Python-Code. Z.B. [https://docs.astral.sh/ruff/ Ruff], ein moderner Code-Formatter und -Linter. Mittels <code>ruff check test1.py</code> würde obiger Code geprüft (Linter). <code>ruff format test1.py</code> formatiert den Code (Formatter). == Type Checker == "Type Checker" sind z.B. * mypy * pyright * ty Diese prüfen die Datentypen, z.B. in folgendem Code def greetings(name: str) -> str: return "Hello, %s" % name print(greetings(42)) Python selbst, flake8, ruff oder black würden diesen Code ohne zu murren akzeptieren. "Type Checker" würden aber sehr wohl Alarm schlagen, z.B. liefert <code>mypy</code> folgende Ausgabe test1.py:5: error: Argument 1 to "greetings" has incompatible type "int"; expected "str" [arg-type] Found 1 error in 1 file (checked 1 source file) Das funktioniert übrigens nicht nur bei Funktionsannotationen, sondern auch mit Variablen etc. from typing import Final # "Konstante", ab Python 3.8 NUMBER: Final = 123 print(NUMBER) NUMBER = 125 print(NUMBER) # Variable a: int = 345 print(a) a = "Irgendwas" print(a) # Variable (Pipe-Symbol), ab Python 3.10 b : int|str = 567 print(b) b = "sonstiges" print(b) Ausgabe mit python: 123 125 345 Irgendwas 567 sonstiges Ausgabe mit mypy: test3.py:6: error: Cannot assign to final name "NUMBER" [misc] test3.py:12: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment] Found 2 errors in 1 file (checked 1 source file) Python kennt übrigens keine Konstanten. Man kann diese mittels Großbuchstaben andeuten. Das ist aber nur Konvention, hat aber keine sonstigen Auswirkungen. Oder man verwendet wie oben gezeigt <code>Final</code>. Dann werfen Typchecker Errors aus. ==pydoc== pydoc ist ein Werkzeug, um Python-Module, -Funktionen und -Klassen zu dokumentieren. Beispiel <code>test1.py</code>: """Rechen-Modul. Funktionen die von pydoc gelesen werden. """ def multiply(a, b): """Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a * b def add(a, b): """Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a + b if __name__ == '__main__': print(multiply(3, 5)) print(add(4, 6)) Ausgabe mit <code>python3.13 -m pydoc test1</code> auf der Konsole: Help on module test1: NAME test1 - Rechen-Modul. DESCRIPTION Funktionen die von pydoc gelesen werden. FUNCTIONS add(a, b) Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl multiply(a, b) Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl FILE /home/xyz/tmp/test1.py Siehe zu diesem Thema z.B. auch [https://docs.python.org/3/library/pydoc.html]. Mittels <code>python3.13 -m pydoc -w test1</code> kann man auch eine HTML-Dokumentation erstellen. Wofür <code>if __name__ == '__main__':</code> steht, siehe z.B. etwas später im Abschnitt [[Ing_Mathematik:_Python#Doctests]]. == Sonstige Tools == Andere Tools für die {{W|Statische Code-Analyse|statische Codeanalyse}}, die aber für Ingenieure weniger interessant sein dürften, sind z.B. * Radon: Liefert verschiedene {{W|Softwaremetrik|Codemetriken}} (Komplexität, Wartbarkeitsindex ...) * Bandit: Findet Sicherheitslücken Tools für die {{W|Dynamisches Software-Testverfahren|dynamische Codeanalyse}}, z.B.: * DynaPyt (Framework zur dynamischen Programmanalyse) * cProfile (Profiler) * Memory Profiler (Speicheranalyse) * Memray (Speicheranalyse) * tracemalloc (Speicheranalyse) Paket- und Projektmanagement (pip-Ersatz etc.): * uv * Poetry * Conda * pipx Packaging-Tools (Freezer) und {{W|Compiler#Sonderformen|Transpiler}} : * pyinstaller ** erstellt eigenständige, ausführbare Binärdatei ** kein Cross-Compiler ** kein Schutz vor Reverse-Engineering ** langsam ** packt alles in eine Datei ** sehr große Datei ** Befehl, z.B.: <code>pyinstaller --onefile test1.py</code> ** GUI: <code>auto-py-to-exe</code> * cx_Freeze * nuitka ** Übersetzt Python-Code in C/C++-Code und weiter in eine ausführbare Datei ** kein Cross-Compiler ** Schutz vor Reverse-Engineering ** Befehl, z.B.: <code>nuitka --standalone --onefile test1.py</code> * cython = Einige Integrierte Entwicklungsumgebungen (IDEs)= Werden Programmtexte größer und umfangreicher, so ist das Arbeiten mit der interaktiven Programmierumgebung bzw. das direkte Ausführen von Python-Skripten mühsam. Man wünscht sich z.B. Hilfen zum Debuggen oder die automatische Code-Vervollständigung. Zu diesem Zweck wurden IDEs (Integrated Development Environments) geschaffen. Von diesen seinen nachfolgend auszugsweise einige kurz beschrieben. Testen Sie einfach aus, welche davon für Sie bzw. für Ihr Python-Projekt geeignet sind. == IDLE == IDLE ist die mit dem Python-Programmpaket mitgelieferte IDE. Der Name leitet sich einerseits ab vom Monty-Python-Mitglied Eric Idle, andererseits steht es als Abkürzung für "'''I'''ntegrated '''D'''evelopment and '''L'''earning '''E'''nvironment. IDLE ist einfach zu bedienen, bietet aber schon einen beachtlichen Leistungsumfang. Nachfolgend wird ein Screenshot zu IDLE geliefert. Rechts ist das Editor-Fenster zu sehen, links die interaktive Programmierumgebung. Um das Beispiel selbst nachvollziehen zu können, starten Sie IDLE. Das geht ähnlich, wie Sie die interaktive Programmierumgebung von Python starten (nur, dass Sie eben das IDLE-Icon doppelklicken und nicht das Python-Icon. Unter Linux geben Sie einfach in einem Terminal <code>idle3.13</code> o. Ä. ein). Weiter geht es mit "File - Open - ...". Die auszuführende Datei auswählen (im konkreten Fall ein "Hallo-Welt"-Programm). Es erscheint das rechte Fenster. Dort "Run - Run Module" auswählen. Und schon wird im linken Fenster "Hallo Welt!" ausgegeben. [[Datei:PythonIng_idle1.jpg | 600px]] Siehe auch {{W|IDLE}}. == PyCharm == PyCharm ist ein kommerzielles Produkt. Es gab aber auch eine kostenlose Community Edition. Seit 2025 sind beide Varianten vereint. Für die ersten 30 Tage sind die Pro-Funktionen frei verfügbar, danach nur noch die Kernfunktionalitäten (oder man bezieht kostenpflichtig die Pro-Version). Zu beziehen ist PyCharm unter dem Weblink [https://www.jetbrains.com/pycharm/]. Nachfolgend ein etwas abgewandeltes "Hallo Welt"-Programm, editiert und ausgeführt mit PyCharm. [[Datei:PyCharm_IDE_2023_screenshot.png | 600px]] Siehe auch {{W|PyCharm}}. == Eric == Auch eric ist Open Source und steht unter der GNU General Public License Version 3 oder später. Zu beziehen ist diese Software unter [https://eric-ide.python-projects.org/]. [[Datei:Screenshot_Eric_4.png | 600px]] Siehe auch {{W|eric (Software)}}. <small> Unter openSUSE Tumbleweed sollte sich eric auch mit YaST installieren lassen. Bei mir gibt es aber dann beim Ausführen des eric-Programms eine Fehlermeldung (Stand März 2026): ... ModuleNotFoundError: No module named 'PyQt6.QtPdfWidgets' Umgehen kann man dieses Problem aber wieder mit dem Erstellen einer virtuellen Umgebung, in etwa so python3.13 -m venv ~/tmp/venv1 cd ~/tmp/venv1/bin ./python3.13 -m pip install --upgrade --prefer-binary eric-ide ./eric7_ide </small> == PyScripter == Vom Funktionsumfang vergleichbar mit den vorherigen IDEs ist PyScripter. Auch PyScripter ist Open Source. Die Projekt-Homepage findet sich auf [https://sourceforge.net/projects/pyscripter/]. PyScripter ist nur für MS Windows verfügbar. [[Datei:PythonIng_pyscripter1.jpg | 600px]] == Spyder IDE == Spyder enthält bereits eine stabile Python-Version und etliche Module (z.B. matplotlib, numpy, control). Ansonsten kann dieses Softwarepaket vom Funktionsumfang her mit den anderen genannten IDEs locker mithalten. Spyder wurde unter der MIT-Lizenz veröffentlicht. Diese Software findet sich auf [https://www.spyder-ide.org]. [[Datei:Spyder-windows-screenshot.png | 600px]] Siehe auch {{W|Spyder (Software)}} == Eclipse IDE== Die {{W|Eclipse_(IDE)|Eclipse-IDE}} kann für Python aufgerüstet werden. Dazu gibt es das PyDev-Plugin. Installiert wird es über * Help > Eclipse Marketplace... * Find - PyDev - Install Danach muss noch der Pfad zum Python-Interpreter festgelegt werden * Window > Preferences > PyDev > Interpreters > Python Interpreter > New ... Das Ergebnis ist ähnlich wie im folgenden Bild, nur dass statt C/C++ Python Verwendung findet. [[Datei:Setting Up Eclipse CDT helloout.png | 600px]] == Sonstige == Die genannten IDEs sind nicht die Einzigen. Es gibt, um dem Image Pythons als beliebteste Programmiersprache gerecht zu werden, noch einige andere. Sowohl Open Source-Programme als auch kommerzielle Programme sind im Web zu finden, z.B. Thonny oder {{W|Visual Studio Code}}. Unter Linux kann man auch {{W|KDevelop}}, ausgestattet mit dem Python3-Plugin, einsetzen. Braucht man den Umfang von ausgewachsenen IDEs nicht, so kann man auch normale Texteditoren verwenden (z.B. {{W|Geany}} oder {{W|Kate_(Texteditor)|Kate}}). = Debuggen und Testen = Das Debuggen und Testen von Programmen sind wichtige Bestandteile der Programmierung. Syntaxfehler lassen sich i.A. leicht beheben. Schwieriger ist das Eingrenzen von logischen Fehlern, die ev. nur in bestimmten Situationen auftreten und keine explizite Fehlermeldung hervorrufen. Das Programm liefert falsche Ergebnisse oder es stürzt aus heiterem Himmel ab. Um das zu verhindern gibt es verschiedene Werkzeuge, die bei der Fehlersuche behilflich sein können. Vorerst siehe aber zwecks Begriffsklärung noch folgende Links: * {{W|Debuggen}} * {{W|Debugger}} * {{W|Softwaretest}} <gallery> First Computer Bug, 1947.jpg Test ganzheitlich.png V-Modell.svg </gallery> == Das Modul pdb == Python bringt schon ein Modul zum Debuggen mit. Siehe z.B. [https://docs.python.org/3/library/pdb.html pdb — The Python Debugger]. Komfortabler lässt sich das aber mittels Integrierter Entwicklungsumgebungen (IDEs) angehen. == Debuggen mit IDEs == Für die IDEs IDLE und Spyder sei kurz auf die entsprechenden Webseiten verwiesen: * [https://www.cs.uky.edu/~keen/help/debug-tutorial/debug.html Debugging under IDLE]. * [https://docs.spyder-ide.org/current/panes/debugging.html Spyder Debugger] Dort wird die Vorgehensweise auch mittels Screenshots erläutert. == assert == assert ... behaupten, zusichern ({{W|Assertion (Informatik)}}) Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10., 0.) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10., 0.) File "/home/hr/Develop/test1.py", line 4, in print1 assert y != 0.0 ^^^^^^^^ AssertionError Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1("10.", "5.") File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Aber auch bei nachfolgendem Code gibt es eine Fehlermeldung: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10, 5) File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Damit letzteres funktioniert, kann man den Programmcode so umschreiben: def print1(x, y): assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 2.0 Und jetzt fangen wir den <code>AssertionError</code> auf: def print1(x, y): try: assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) except(AssertionError): print("Hallo") print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Hallo Ich hoffe, es ist wenigstens im Ansatz klar geworden, wofür <code>assert</code> gut sein kann. Ausschalten kann man die <code>assert</code>-Überprüfung übrigens mit dem Python-Schalter <code>-O</code>. == Doctests == Innerhalb eines Docstrings kann die Arbeit im interaktiven Modus simuliert werden. Nach den Promptzeichen (>>>) erfolgen dann bei unserem Beispiel innerhalb des Docstrings simulierte Aufrufe der Funktion <code>print1()</code>. Danach folgen jeweils die Sollresultate. Wird das Modul oder die Datei als Hauptprogramm aufgerufen, so wird die Funktion <code>doctest.testmode()</code> aufgerufen und ein Bericht auf der Konsole ausgegeben. Wird das Modul nicht als Hauptprogramm aufgerufen, sondern importiert, dann wird diese <code>testmod</code>-Funktion nicht aufgerufen. D.h. dieser Code kann sowohl für Testzwecke als auch für den produktiven Einsatz verwendet werden. Das ist auch sinnvoll, weil wenn man Teile der Datei immer löschen bzw. einfügen müsste, so würden sich Fehlerquellen auftun. Das würde den Sinn und Zweck von Doctests konterkarieren. def print1(x=0., y=1.): """ Dividiere zwei Zahlen Autor: Intruder Datum: 12.08.2025 >>> print1(2., 1.) 2.0 >>> print1(5., 2.) 2.5 >>> print1(5.) 5.0 """ print(x/y) if __name__ == "__main__": import doctest doctest.testmod(verbose=True) Ausgabe: Trying: print1(2., 1.) Expecting: 2.0 ok Trying: print1(5., 2) Expecting: 2.5 ok Trying: print1(5.) Expecting: 5.0 ok 1 items had no tests: __main__ 1 items passed all tests: 3 tests in __main__.print1 3 tests in 2 items. 3 passed and 0 failed. Test passed. Das gezeigte Beispiel ist so ziemlich das einfachste, das es gibt. Für weiterführende Details siehe z.B.: * [https://peps.python.org/pep-0257/ PEP 257 – Docstring Conventions] * [https://docs.python.org/3/library/doctest.html doctest — Test interactive Python examples] ''Einschub:'' Ganz ähnlich kann man auch Klassen testen, z.B. in folgendem Code-Fragment class Fahrzeug: # siehe Abschnitt "Objektorientierte Programmierung" # ... if __name__ == "__main__": vauweh = Fahrzeug(170, 90) beemweh = Fahrzeug(200, 120) print(vauweh.convertGeschw()) print(beemweh.convertGeschw()) Wird das Script als Hauptprogramm ausgeführt (z.B. zu Testzwecken), so erfolgt die Ausgabe der zwei, via <code>convertGeschw()</code>, umgerechneten Geschwindigkeiten. Wird es aber als Modul eingebunden, so wird der letzte Programmabschnitt nicht ausgeführt (<code>__name__ == "__main__"</code> ergibt <code>False</code>). == pytest == Siehe zu diesem Thema auch {{W|Modultest}}. pytest ist ein externes Modul und muss vorab installiert werden, z.B. mittels pip install -U pytest pip install -U pytest-html Python-Code, Datei test1.py: def add(x, y): return x + y def test_answer(): assert add(1, 1) == 3 Starten von pytest in der Konsole: pytest test1.py Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py F [100%] ========================================================= FAILURES ========================================================== ________________________________________________________ test_answer ________________________________________________________ def test_answer(): > assert add(1, 1) == 3 E assert 2 == 3 E + where 2 = add(1, 1) test1.py:6: AssertionError ================================================== short test summary info ================================================== FAILED test1.py::test_answer - assert 2 == 3 ===================================================== 1 failed in 0.09s ===================================================== Hier erhalten wir einen Fehler, da 1+1 eindeutig ungleich 3 ist. Aber aus irgendeinem Grund wollte der Programmierer oder Tester in diesem Fall, dass dies so ist. Testfälle werden übrigens mit dem Präfix <code>test_</code> eingeleitet. Python-Code: def add(x, y): return x + y + 1 def test_answer(): assert add(1, 1) == 3 Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py . [100%] ===================================================== 1 passed in 0.01s ===================================================== Jetzt ist alles in Ordnung. Weiterführendes siehe z.B. * [https://docs.pytest.org/en/stable/ pytest: helps you write better programs] == unittest == Auch unittest dient zur Durchführung von Testreihen, ist aber Bestandteil von Python. Hier wird vorerst nicht näher darauf eingegangen. Siehe z.B. * [https://docs.python.org/3/library/unittest.html unittest — Unit testing framework] Lt. ''Inden: Python Challenge; dpunkt, 2021, Seite 481'' soll unittest weniger komfortabel als pytest sein. Einen Vergleich von unittest mit pytest findet man in * [https://knapsackpro.com/testing_frameworks/difference_between/pytest/vs/unittest pytest vs unittest] = Python und Anwendungsprogramme = Bisher stand immer alleine die Programmiersprache Python (ev. unter Einbeziehung von Modulen) im Mittelpunkt der Betrachtungen. Aber Python kann auch als Makrosprache für Anwendungsprogramme auftreten. Als Beispiele seien {{W|FreeCAD}} und {{W|LibreOffice}} genannt. == FreeCAD == FreeCAD ist ein freies 3D-CAD-Programm. Hier soll nicht auf die Bedienung dieses CAD-Pakets eingegangen werden, sondern nur auf die Möglichkeit, mittels Python Makros zu schreiben. Als einfacher Einstieg soll ein Makro erstellt werden, welches eine Kugel (rot) und einen Quader (blau) zeichnet. Folgende Vorbereitungsschritte sind erforderlich (es sei vorausgesetzt, dass FreeCAD schon am Rechner installiert ist. Downloaden können Sie das Programm von der Website [https://www.freecad.org/downloads.php?lang=en]): * FreeCAD starten * Leere Datei erstellen * Makro > Makros > Erstellen ... Es öffnet sich ein leeres Editorfenster, in das Sie folgenden Code eingeben können: import FreeCAD import Part doc = FreeCAD.newDocument() # Kugel kugel = Part.makeSphere(10) form_element = doc.addObject("Part::Feature", "Kugel") form_element.Shape = kugel kug = FreeCAD.ActiveDocument.getObject("Kugel") kug.ViewObject.ShapeColor = (1.0, 0.0, 0.0) neuePosition = App.Vector(5, 2.5, 2.5) kug.Placement = App.Placement(neuePosition, kug.Placement.Rotation) # Quader quader = Part.makeBox(5, 5, 50) form_element = doc.addObject("Part::Feature", "Quader") form_element.Shape = quader quad = FreeCAD.ActiveDocument.getObject("Quader") quad.ViewObject.ShapeColor = (0.0, 0.0, 1.0) doc.recompute() Diesen Code können Sie nun ausführen: * Makro > Makro ausführen Es ergibt sich folgende Ausgabe (gedreht und gezoomt): [[Datei: PythonIng_freecad1.png|500px]] Siehe auch [https://wiki.freecad.org/Python_scripting_tutorial/de# Anleitung Skripterstellung mit Python]. Getestet wurde obiges Beispiel mit FreeCAD 1.1.3 unter Linux und 1.1.1 unter MS Windows. == LibreOffice == LibreOffice ist ein freies Officepaket ([https://de.libreoffice.org/]). Hier soll nur das Tabellenkalkulationsprogramm Calc kurz betrachtet werden. Es seinen in den ersten 3 Zellen (A1 bis A3) Zahlen gegeben. Diese sollen mit einem Python-Makro addiert und das Resultat in der Zelle A5 ausgegeben werden. Auch hier sind Vorbereitungsarbeiten nötig: * zuerst muss unter Linux das Verzeichnis <code>~/.config/libreoffice/4/user/Scripts/python</code> erstellt werden * für MS Windows ist es das Verzeichnis <code>%APPDATA%\LibreOffice\4\user\Scripts\python</code> ** drücken Sie zuerst Win + R (es öffnet sich das Ausführen-Fenster) ** geben Sie <code>%appdata%</code> ein, danach drücken Sie Enter (es öffnet sich der Explorer) ** navigieren Sie zu dem genannten Verzeichnis bzw. erstellen Sie das Verzeichnis * in diesem Verzeichnis wird dann mit einem beliebigen Texteditor das Python-Makro erstellt, in unserem Fall die Datei <code>summiere_zellen.py</code>: import uno def summiere_zellen(*args): # Zugriff auf das aktuelle Dokument und das aktive Tabellenblatt ctx = uno.getComponentContext() smgr = ctx.getServiceManager() desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) doc = desktop.getCurrentComponent() sheet = doc.getCurrentController().getActiveSheet() # Werte aus den Zellen A1 bis A3 auslesen w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value # Addition der drei Werte summe = w1 + w2 + w3 # Ergebnis in die Zelle A5 schreiben sheet.getCellRangeByName("A5").Value = summe * siehe dazu ggf. auch [https://help.libreoffice.org/latest/de/text/sbasic/python/python_locations.html?DbPAR=BASIC]. Weiter geht es in LibreOffice Calc mit dem Menü ''Extras > Makros > Makros verwalten > Python''. Dort wird das Makro <code>summiere_zellen</code> ausgeführt. Es ergibt sich z.B. folgendes Resultat [[Datei:PythonIng_libreoffice1.png]] Das Kürzel <code>uno</code> steht für '''U'''niversal '''N'''etwork '''O'''bjects. Etwas einfacher geht's auch so: def summiere_zellen(): desktop = XSCRIPTCONTEXT.getDesktop() model = desktop.getCurrentComponent() sheets = model.getSheets() sheet = sheets.getByIndex(0) w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value cell = sheet.getCellRangeByName("A5") cell.setValue(w1 + w2 + w3) Empfohlen wird auch, das Erweiterungspaket APSO ('''A'''lternative '''P'''ython '''S'''cript '''O'''rganizer, apso.oxt) zu installieren. Die Vorgehensweise wird hier nicht gezeigt, sondern nur darauf hingewiesen, dass man das einfach "googeln" kann. Siehe zur Python-Programmierung für LibreOffice auch [https://wiki.documentfoundation.org/Macros/Python_Guide/de Makros/Python-Handbuch]. Getestet wurden obige Beispiele mit LibreOffice 26.2.5.1 unter Linux und 26.2.1.2 unter MS Windows. = Ausblick = Dies war eine kurze Einführung in die Berechnungs- und Darstellungsmöglichkeiten mit Python. Es sollten etliche relevante Themen behandelt, oder zumindest kurz angesprochen worden sein. Wem dieser Text nicht ausreichend ist, der sei auf die entsprechenden weiterführenden Weblinks, Bücher und die Python-Hilfefunktion verwiesen. Python kennt noch viel mehr Befehle, als hier dargestellt wurden. Das Themenspektrum ist auch durch die Einbindung externer Module fast beliebig erweiterbar. = Weblinks= == Python allgemein == * [https://www.python.org/ Python Homepage] == Externe mathematische Module == * [https://numpy.org/ NumPy] * [https://numpy.org/doc/stable/user/numpy-for-matlab-users.html NumPy for MATLAB users] * [https://scipy.org/ SciPy] * [https://www.sympy.org/en/index.html SymPy] * [https://pandas.pydata.org/ pandas] * [https://github.com/maroba/findiff findiff] * [https://mpmath.org/ mpmath] == Externe Module für Grafiken == * [https://matplotlib.org/ Matplotlib] * [https://vpython.org/ VPython] * [https://docs.vtk.org/en/latest/api/python.html VTK] == Erstellung von User Interfaces == * [https://docs.python.org/3/library/tkinter.html tkinter - Python interface to Tcl/Tk] * [https://docs.python.org/3/library/curses.html curses - Terminal handling for character-cell displays] * [https://wiki.qt.io/Qt_for_Python Qt for Python] * [https://www.gtk.org/docs/language-bindings/python GTK and Python] == Erstellen virtueller Umgebungen == * [https://docs.python.org/3/library/venv.html venv - Creation of virtual environments] == Sonstige == * [https://python-control.readthedocs.io/en/stable/ Python Control Systems Library] * [https://pypi.org/project/regex/ regex - Regular Expressions] * [http://pyromat.org/ PYroMat] * [https://coolprop.org/coolprop/wrappers/Python/index.html CoolProp] * [https://pypi.org/project/iapws/ iapws] * [https://tespy.readthedocs.io/en/main/getting_started/introduction.html TESPy - Thermal Engineering Systems in Python] = Bücher = == Gedruckte Bücher, OpenBooks, Magazine == * Diverse: c't Python Lernen, Verstehen, Anwenden; Heise, 2022 * Ernesti, Kaiser: Python3 - das umfassende Handbuch; 5. Aufl., Rheinwerk, [https://openbook.rheinwerk-verlag.de/python/ OpenBook] * Inden: Python Challenge; dpunkt, 2021, ISBN 978-3-86490-809-5 * Klein: Numerisches Python; 2. Aufl., Hanser, 2023, ISBN 978-3-446-47170-2 * Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler; Rheinwerk, 2021, ISBN 978-3-8362-7316-9 * Weigend: Python 3 - Das umfassende Praxisbuch; 9. Aufl., mitp, 2022, ISBN 978-3-7475-0544-1 * Woyand: Python für Ingenieure und Naturwissenschaftler; 4. Aufl., Hanser, 2021, ISBN 978-3-446-46483-4 == Andere Wikibooks == * [[:en:Subject:Python_programming_language | Englische Wikibooks zum Thema Python]] * [[Python|Deutschsprachiges Python-Wikibook]] [[Bild:2von10.png|20%]] * [[Python unter Linux|Python 2.7 unter Linux]] [[Bild:10von10.png|100%]] {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} 63febfnnf4zyuly8bmu4q1649bhcvdo 1090742 1090741 2026-09-13T08:53:34Z Intruder 1513 /* Dictionaries und Mengen */ frozendict und frozenset hinzu 1090742 wikitext text/x-wiki {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} = Hallo Welt und allgemeine Hinweise = == Was ist Python == * Python ist eine universelle höhere Programmiersprache. * Python ist objektorientiert. * Python ist Open-Source (Python Software Foundation License). * Python ist für viele Betriebssysteme erhältlich (z.B. für Linux, MS Windows, macOS). * Python ist ein Interpreter. * Python ist durch Module fast beliebig erweiterbar. * Python als Programmiersprache ist case-sensitive - d.h. Groß- und Kleinschreibung ist relevant bei der Eingabe von Befehlen. * Python ist in etlichen Anwendungsprogrammen (z.B. {{W|FreeCAD}}, {{W|LibreOffice}}, {{W|GIMP}}, {{W|Blender (Software) | Blender}}) als Makrosprache verwendbar. {{Wikipedia | Python (Programmiersprache)}} == Python installieren == === MS Windows === Laden Sie das aktuelle Python-Paket von der Webseite [https://www.python.org/] herunter. Weiter geht es wie bei jedem anderen größeren zu installierenden Programm. Einfach das Installationsprogramm im Explorer doppelklicken und den Anweisungen des Setup-Programmes folgen. === Linux === Entweder ist Python bereits standardmäßig installiert, ansonsten ist die Installation mittels Paketmanagementsystem einfach möglich. Aber auch die Spyder-Entwicklungsumgebung ([https://www.spyder-ide.org]) bietet einen guten Einstieg mit Python (das gilt auch für MS Windows). Spyder bringt auch schon etliche wichtige Module standardmäßig mit. == Python starten == === MS Windows === Das Icon für das Python-Programm doppelklicken. Und schon startet das Programm. [[Datei:PythonIng_start1.jpg]] Python im interaktiven Modus präsentiert sich dann so: Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> Alternativ kann das Programm auch über die Eingabeaufforderung oder die PowerShell gestartet werden: c:\devel\Python>python.exe Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> === Linux === Tippen Sie einfach das Wort „python“ (oder unter openSUSE Tumbleweed z.B. auch „python3.11“ oder „python3.13“) in einem Linux-Terminal ein, schließen den Befehl mit der RETURN-Taste ab, und schon startet Python im interaktiven Modus: Python 3.13.12 (main, Feb 09 2026, 22:37:44) [GCC] on linux Type "help", "copyright", "credits" or "license" for more information. >>> Es gibt auch noch andere Möglichkeiten Python zwecks Programmausführung zu starten, z.&nbsp;B. den {{W|Shebang}} (<code>#!</code>) am Beginn eines Python-Scripts. Das Script sei als Script.py gespeichert. Dann kann das Script mit ./Script.py ausgeführt werden. Für openSUSE Tumbleweed sei nachfolgend ein lauffähiges "Hallo Welt!"-Script angegeben. Es wird in diesem Script der Python-Interpreter in der Version 3.13 verwendet : #!/usr/bin/python3.13 print("Hallo Welt!") Die Berechtigungen zum Ausführen der Datei müssen natürlich noch richtig gesetzt werden, z.B. mittels <code>chmod 777 Script.py</code>. <small><code>chmod</code> ist die Abkürzung für"'''ch'''ange file '''mod'''e bits".</small> <small>Die "Maske" <code>777</code> ist nur für Testzwecke sinnvoll, weil sie leicht zu merken ist und für alle Benutzer alle Zugriffsberechtigungen ('''r'''ead/'''w'''rite/e'''x'''ecute für owner/group/others) setzt. Im richtigen Einsatz wird man das aus Sicherheitsgründen nicht so handhaben, sondern nur die Berechtigungen setzen, die unbedingt erforderlich sind. Welche Zugriffsberechtigungen gesetzt sind, kann man z.B. mit dem Befehl <code>ls -l</code> oder <code>ll</code> ('''l'''i'''s'''t directory contents) erfragen. Aber dazu im Moment genug. Erfahrene Linux-Nutzer kennen das ohnehin und Anfänger sollen jetzt nicht mit Linux-Interna überfordert werden. Bei Bedarf siehe die Linux-Man-Pages oder dezidierte Bücher zu Linux.</code></small> <small>Oder das Script wird in einen Pfad verschoben, in dem sich ausführbare Programme generell befinden (welche Verzeichnisse im PATH liegen, kann bspw. mit <code>echo $PATH</code> abgefragt werden). Das Script kann dann wie ein normales Programm ohne weitere Angaben mit Script.py gestartet werden. Alternativ wird nicht das Script an sich verschoben, sondern nur ein symbolischer Link angelegt, z.B. mit <code>ln -s ~/tmp/Script.py ~/.local/bin/Script.py</code>. <code>~/.local/bin</code> sei ein im PATH gelegenes Verzeichnis. Dies sind aber schon Features für fortgeschrittene Linux-Benutzer und werden am Anfang eher selten benötigt.</small> == Ein paar Worte zur Erklärung == === Tests === Getestet wurden die Beispiele unter den Betriebssystemen * MS Windows 10 mit der Python-Version 3.12.0 (teilweise auch mit 3.12.2 und 3.13.1; nur die Inhalte die bis spätestens Juli 2025 erstellt wurden) * MS Windows 11 ab der Python-Version 3.13.4 (nur zum Teil; ab Juli 2025) * openSUSE Leap 15.6 mit der Python-Version 3.11.12 (Spyder, nur vereinzelt) und zum Teil mit 3.12.11 (ab Juli 2025 bis November 2025). * openSUSE Tumbleweed ab der Python-Version 3.13.9 (nur vereinzelt, ab November 2025) === Popularität === * An Beliebtheit rangiert Python mit Stand September 2026 mit einem Rating von 17,76% an 1. Stelle vor C und C++ (lt. [https://www.tiobe.com/tiobe-index/ TPCI - TIOBE Programming Community Index]). * Lt. [https://innovationgraph.github.com/global-metrics/programming-languages GitHub Top 50 Programming Languages Globally] lag Python im Q1/2026 auf Rang 2, vor TypeScript und hinter JavaScript. * [https://pypl.github.io/PYPL.html PYPL] (Popularity of Programming Language Index) ist ein anderer Popularitätsindex für Programmiersprachen. Auch hier liegt Python mit großem Vorsprung auf dem ersten Platz (52,08%), gefolgt von Java (13,34%) und C/C++ (7,99%) (Stand September 2026). === Namensgebung === Der Name "Python" rührt von der Komikertruppe {{W|Monty Python}} her. Die Icons für Python (z.B. Python selbst, Eric IDE, IDLE) sind aber durch die Python-Schlangenart symbolisiert. <gallery> Python-logo-notext.svg|Python-Logo Guido van Rossum in PyConUS24.jpg|{{W|Guido van Rossum}} (geb. 1956), der Erfinder von Python </gallery> == Ein erstes Programm == Kommentare werden in Python mit der Raute (#) eingeleitet. Sie werden vom Python-Interpreter ignoriert. Text kann mit der print-Funktion ausgegeben werden. Starten Sie Python und geben sie folgende Anweisungen zeilenweise ein >>> # Das ist ein Kommentar >>> print("Hallo Welt!") Als Ergebnis erhalten Sie Hallo Welt! Der Prompt (>>>) ist selbstverständlich nicht einzutippen, sondern wird vom Python-System geliefert. Strings können in Python entweder in Anführungszeichen (") gesetzt werden oder in Hochkommatas('). In diesem Text wird die erste Variante bevorzugt eingesetzt. Im Gegensatz zu Julia ist es hier egal, ob zwischen <code>print</code> und der öffnenden Klammer Leerzeichen stehen. = Python als Taschenrechner = == Allgemeines == Wir wollen 3 * 5 berechnen. Dazu starten wir Python im interaktiven Modus. Geben Sie dann die Formel >>> 3 * 5 ein, drücken die Taste ENTER/RETURN ({{Taste|↵}}) und erhalten als Ergebnis 15 Auch kompliziertere Ausdrücke sind möglich. Beispielsweise mit Winkelfunktionen, Quadratwurzeln etc. Wir wollen nun den Ausdruck <math>\sin\sqrt{15}</math> berechnen : >>> import math >>> math.sin(math.sqrt(15)) -0.6679052983383519 Als erstes wird das math-Modul importiert. Dann wird der mathematische Ausdruck berechnet. Eine andere Variante, die dasselbe Ergebnis liefert, ist >>> from math import * >>> sin(sqrt(15)) -0.6679052983383519 Es wird also aus dem Modul <code>math</code> alles importiert (erkennbar am <code>*</code>). Will man nicht alles importieren, so kann man das auch einschränken: >>> from math import sin, sqrt Beenden lässt sich das Python-Programm durch Eingabe von <code>exit()</code> (und natürlich ist zur Bestätigung die RETURN-Taste zu drücken). == Die Hilfefunktion von Python == Bei Eingabe der Anweisung <code>help</code> oder <code>help()</code> springt Python in den Hilfemodus. Eingabe: >>> help() Eingabe: help> math.sin Ausgabe: Help on built-in function sin in math: math.sin = sin(x, /) Return the sine of x (measured in radians). Für die komplette Python-Dokumentation siehe [https://docs.python.org/3/]. Verlassen kann man den Hilfemodus durch das Drücken von STRG-C, bzw. der Eingabe von q, quit oder exit mit anschließendem Drücken der RETURN-Taste. == Aufgaben == * Erkunden Sie die Tangensfunktion "tan" mittels Python-Hilfe (vergessen Sie nicht das math-Modul zu importieren und das <code>math.</code> vor <code>tan</code>) * Berechnen Sie mit Python den Ausdruck <math>\frac{1}{2}\cdot \text{e}^2 \cdot \tan(\pi/3)</math>. Siehe für die Exponentialfunktion im Python-Hilfesystem auch den Befehl <code>math.exp</code>. Alternativ kann auch die Konstante <code>math.e</code> eingesetzt werden. Potenzieren kann man bei Python mit dem **-Operator (z.B. 2**3 = 8). Für <math>\pi</math> gibt es <code>math.pi</code>. = Python als Scriptsprache = Häufig wird man aber kompliziertere Anweisungsfolgen verarbeiten müssen. Diese will man normalerweise nicht jedesmal neu eingeben, sondern in einer Datei speichern und diese Datei dann zur Ausführung bringen. Speichern Sie dazu folgenden Code in einer Textdatei, z.B. unter MS Windows als c:\tmp\test1.py # Das ist ein Kommentar print("Hallo Welt!") Python-Dateien werden mit der Dateiendung .py versehen. Achten Sie darauf, dass vor dem print keine Leerzeichen vorhanden sind. Das ist eine Python-Eigenheit. Wie wir später sehen werden, nutzt Python Einrückungen als syntaktisches Mittel, z.B. um bei Schleifen den Schleifenkörper zu kennzeichnen. Danach bringen Sie die Skriptdatei test1.py (sozusagen das Hauptprogramm) folgendermaßen zur Ausführung: 1) Starten Sie unter MS Windows die Eingabeaufforderung (oder alternativ auch die Windows PowerShell). Das sieht dann etwa so aus: Microsoft Windows [Version 10.0.19045.3693] (c) Microsoft Corporation. Alle Rechte vorbehalten. C:\Users\xyz> : <small>Falls jemand nicht weiß, wie man die Eingabeaufforderung startet: Eine Möglichkeit ist, einfach in der Taskleiste von Windows das "Start"-Symbol &nbsp;([[Image:Windows_logo_-_2021_(Black).svg|10px]])&nbsp; mit der rechten Maustaste anklicken. "Ausführen" auswählen (oder alternativ für die PowerShell unter Windows 10 den Eintrag "Windows PowerShell", unter Windows 11 den Eintrag "Terminal"). Im sich öffnenden Dialogfenster gibt man in die "Öffnen"-Zeile das Wort <code>cmd</code> ein und mit "OK" wird das Ganze bestätigt.</small> 2) Wechseln Sie mittels <code>cd c:\tmp</code> in das Verzeichnis c:\tmp 3) Angenommen, Sie haben Python unter dem Pfad <code>c:\devel\Python\</code> installiert. Starten Sie das Programm so (der Prompt <code>c:\tmp></code>ist natürlich nicht mit einzutippen): c:\tmp>c:\devel\Python\python.exe test1.py 4) Wie erwartet ergibt sich folgende Ausgabe am Bildschirm Hallo Welt! Die Vorgehensweise unter Linux ist prinzipiell gleich. Die kleinen Unterschiede, wie z.B. der Slash statt dem Backslash in Pfadangaben, sollten für Linux-Benutzer keine Hürde darstellen. == Variablen == Variablenbezeichner können aus Buchstaben (A-Za-z), Ziffern (0-9) und Underscores (_) bestehen, dürfen aber nicht mit einer Zahl beginnen. Führende Underscores haben u.a. im Kontext mit der Objektorientierten Programmierung eine spezielle Bedeutung und sollten nicht für "normale" Variablenbezeichner verwendet werden. Gültige Variablenbezeichner wären also: xyz x1 _wert name_anzahl Theoretisch kann man auch Umlaute, griechische Buchstaben u.ä. in Variablenbezeichnern nutzen, z.B. ößÜ = 16 α = 134 print(ößÜ) print(α) Ausgabe: 16 134 Davon wird aber aus offensichtlichen Gründen ({{W|Englisch als Lingua franca}}) abgeraten. Das Eurozeichen (€) etc. darf man ohnehin nicht in Variablenbezeichnern verwenden, dies ergäbe einen Syntaxfehler. Siehe dazu auch [https://peps.python.org/pep-3131/]. Es gibt in Python etliche Schlüsselwörter (z.B. for, if oder return). Diese dürfen nicht als eigene Variablenbezeichner verwendet werden. Eine Liste aller Schlüsselwörter liefert das Script import keyword print(keyword.kwlist) <small>Übung: Speichern Sie dieses Script in eine Datei, z.B. in c:\tmp\test1.py. Führen Sie diese Datei aus, um die Liste der Schlüsselwörter auszugeben.</small> Da Python case-sensitiv ist, repräsentieren folgende Bezeichner verschiedene Variablen: xyz XYZ xYz Werte werden an Variablen mittels Gleich-Zeichen (=) zugewiesen. Im Folgenden wird der Code immer in der Datei c:\tmp\test1.py gespeichert. x = 5 y = 10 z = x*y print(z) Bringen Sie die Datei test1.py zur Ausführung, so erhalten Sie folgende Bildschirmausgabe 50 Sie können auch mehrere Anweisungen in einer Zeile durch Semikolon getrennt schreiben. Dies führt aber zu unübersichtlichem Code. x = 5; y = 10; z = x*y; print(z) Ausgabe: 50 Auch aus der Programmiersprache C/C++ oder Java bekannte Konstrukte können Sie verwenden, z.B. x = 5 # x = x - 2 x -= 2 print(x) Bildschirmausgabe: 3 Beachten Sie, dass mit dem =-Zeichen eine Wertezuweisung durchgeführt wird. Dies ist nicht äquivalent zum mathematischen =-Zeichen, wie am vorigen Beispiel zu ersehen ist. Den Inkrement-/Dekrementoperator (z.B. x++ oder x--) aus C/C++ oder Java kennt Python aber nicht. Variablen sind nicht an einen bestimmten Datentyp gebunden, folgendes ist mit Python problemlos möglich: import math wert = 10 print(wert) wert = 35.5 print(wert) wert = "Hallo" print(wert) wert = math.pi print(wert) Ausgabe: 10 35.5 Hallo 3.141592653589793 == Physische und logische Zeilen == In Python muss eine Anweisung in einer logischen Zeile Platz finden. Wird eine Anweisung aber zu lang für eine Zeile, dann kann sie in mehrere physische Zeilen unterteilt werden. Dies kann einerseits durch einen Backslash am Ende einer Zeile geschehen, z.B. a = 2 + \ 5 Dies stellt eine logische Zeile dar, die in zwei physische Zeilen unterbrochen ist. Geklammerte Ausdrücke werden automatisch zu einer logischen Zeile verbunden, z.B. a = (2 + 5) Achtung: Im ersten Beispiel darf nach dem Backslash nichts mehr stehen, auch kein Kommentar. Dies trifft im zweiten Bespiel nicht zu, hier könnte noch ein Kommentar folgen, z.B. a = (2 + # Kommentar 5) Auch für Strings gibt es Möglichkeiten, diese auf mehrere Zeilen aufzuspalten. # Kurzer String str1 = "ABC" # Langer String str2 = """Hallo Welt, Grüetzi Schwyzer, Servus an alle""" # Backslash str3 = "UVW\ XYZ" # Mit Klammern str4 = ("Sehr langer Text, der automatisch .............. " "in einer einzigen Variable zusammengefügt wird." ) print(str1) print(str2) print(str3) print(str4) Ausgabe: ABC Hallo Welt, Grüetzi Schwyzer, Servus an alle UVWXYZ Sehr langer Text, der automatisch .............. in einer einzigen Variable zusammengefügt wird. ==Hexadezimale, oktale, binäre und andere Zahlen== d = 1050 # Dezimalzahl h = 0xAA2 # Hexadezimalzahl o = 0o12 # Oktalzahl b = 0b100001101 # Binärzahl print(d) print(h) print(o) print(b) Ausgabe: 1050 2722 10 269 Groß- und Kleinbuchstaben sind in obigen Literalen übrigens egal. So kann man z.B. statt <code>0b1001</code> auch <code>0B1001</code> schreiben (siehe dazu [https://docs.python.org/3/reference/lexical_analysis.html#integer-literals]). Sie können auch dezimale in hexadezimale Zahlen umwandeln, usw.: h = hex(1050) # Dezimalzahl -> Hexadezimalzahl b = bin(1050) # Dezimalzahl -> Binärzahl o = oct(1050) # Dezimalzahl -> Oktalzahl print(h) print(b) print(o) Ausgabe: 0x41a 0b10000011010 0o2032 Gegeben sei die Zahl 121 zur Basis 3. Diese soll in eine Dezimalzahl umgewandelt werden. Das kann so geschehen: z = int("121", 3) print(z) Ausgabe: 16 Dass dies richtig ist, davon kann man sich folgendermaßen überzeugen: <math> 1 \cdot 3^2 + 2 \cdot 3^1 + 1 \cdot 3^0 = 9 + 6+ 1 = 16 </math> Zahlen übersichtlicher schreiben kann man auch mittels Underscore, z.B.: print("Eine Million (Variante 1) =", 1000000) print("Eine Million (Variante 2) =", 1_000_000) print("Eine Rechnung:", 2_000 * 400_000); Es ergibt sich bei beiden Varianten die gleiche Ausgabe. Variante 2 ist aber im Sourcecode leichter lesbar, detto die Zahlen in der Rechnung: Eine Million (Variante 1) = 1000000 Eine Million (Variante 2) = 1000000 Eine Rechnung: 800000000 == Strings und Platzhalter== Ein paar einfache Beispiele: print("Hallo {}" . format("Hugo")) print("Hallo {:s}" . format("Hugo")) print("Hallo %s" % "Hugo") Ausgabe: Hallo Hugo Hallo Hugo Hallo Hugo Python-Code (formatted string literals, Beispiel 1): str1 = "Hallo" str2 = "Hugo" print(f"{str1} {str2}") Ausgabe: Hallo Hugo Python-Code (formatted string literals, Beispiel 2): wert = 11.567 print(f"Ausgabe: {wert:.5f}") Ausgabe: Ausgabe: 11.56700 Komplexere Beispiele: print("Hallo {} und {}" . format("Hugo", "Mike")) print("Hallo {name1} und {name2}" . format(name2="Hugo", name1="Mike")) # Füllzeichen: * # Bündigkeit: > (=rechts), < (=links), ^ (=zentriert) # Feldweite: 10 # Typ: s (=String), f (=Gleitkommazahl), d (=Dezimalzahl) etc. print("Hallo {:*>10s}" . format("Hugo")) print("Hallo {:*<10s}" . format("Hugo")) Ausgabe: Hallo Hugo und Mike Hallo Mike und Hugo Hallo ******Hugo Hallo Hugo****** Python-Code: str = "Hallo\t%s\t%7.2f\t%10.2e\t%i" % ("Hugo", 12.34567, 34.567, 264) print(str) Ausgabe: Hallo Hugo 12.35 3.46e+01 264 == Unicode == Neben den bekannten ASCII-Zeichen lassen sich Zeichen auch mittels Unicode beschreiben. Griechische Buchstaben oder komplexere mathematische Operatoren - all das sollte kein Problem sein. Siehe auch {{W|Unicode}}, {{W|Liste der Unicodeblöcke}} und {{W|Unicodeblock Mathematische Operatoren}}. Im Folgenden werden ein paar Zeichen (Allquantor, Nabla-Operator, Existenzquantor), die man aus der Mathematik kennt, erzeugt. ch1 = "\N{FOR ALL}" ch2 = "\N{NABLA}" ch3 = "\u2203" print(ch1, ch2, ch3) Ausgabe: ∀ ∇ ∃ <small>Diese Ausgabe ergibt sich z.B. mit der IDLE-Shell oder mit Cygwin. Beim Ausführen über die Windows-Eingabeaufforderung oder Windows PowerShell unter MS Windows 10 erfolgt keine korrekte Darstellung. IDLE ist die mit Python mitgelieferte IDE ('''I'''ntegrated '''D'''evelopment '''E'''nvironment, Integrierte Entwicklungsumgebung). Gegen Ende dieses Textes wird IDLE kurz beschrieben. Das Problem mit der Windows Eingabeaufforderung lässt sich aber umgehen. Man muss nur eine Schriftart auswählen, die die Zeichen kennt, z.B. "DejaVu Sans Mono". Dazu klicken Sie einfach bei der Eingabeaufforderung mit der rechten Maustaste oben auf die weiße Leiste und wählen im aufpoppenden Fenster den Menüpunkt "Eigenschaften". Es öffnet sich ein Dialogfenster. Über den Reiter "Schriftart" lässt sich nun die Schriftart einstellen. Unter MS Windows 11 oder openSUSE Leap 15.6 (bash-Konsole) gibt es dieses Problem ohnehin nicht.</small> == Reguläre Ausdrücke == Python kennt auch {{W|Regulärer Ausdruck|reguläre Ausdrücke}}. Dazu gibt es in Python das Modul <code>re</code>. Beipielsweise sollen alle Zahlen (<math>\text{zahl}\in\mathbb{N}_0</math>) in einem String gesucht und ausgegeben werden. Als String sei gegeben: <code>3x Grüße und 100 Kekse.</code> Das Muster (Pattern) ist <code>\d+</code>. <code>\d</code> steht für eine Dezimalziffer 0-9. Das Plus-Zeichen (+) steht symbolisch für ein oder mehrere Zeichen des vorherigen Ausdrucks. Hier also ein oder mehrere Dezimalziffern. Es wird die Funktion <code>findall</code> aus dem Modul <code>re</code>verwendet. Python-Code: from re import findall str = "3x Grüße und 100 Kekse." pat = "\\d+" # Doppel-Backslashes müssen verwendet werden, sonst gibt Python eine Warnung aus! # alternativ: pat = r"\d+" # oder: pat = "[0-9]+" numb = findall(pat, str) print(numb) Ausgabe: ['3', '100'] Python kennt noch viele weitere Möglichkeiten mittels regulärer Ausdrücke zu hantieren. Dies soll hier aber nicht vertieft werden, da das Thema schon ziemlich speziell und komplex ist. Bei Bedarf siehe aber z.B. die Bücher ''Weigend, Seite 380ff'' und ''Ernesti, Kaiser'' [https://openbook.rheinwerk-verlag.de/python/28_001.html] oder die Python-Dokumentation [https://docs.python.org/3/library/re.html]. Auch [[Python unter Linux: Reguläre Ausdrücke]] liefert ein umfangreiches und brauchbares Python-2-Kapitel zu den regulären Ausdrücken. Die dort gelisteten Beispiele müssten ggf. vor Verwendung auf Python-3 umgeschrieben werden. <small>Wie macht man das? Dazu siehe z.B. [https://openbook.rheinwerk-verlag.de/python/43_001.html], [https://portingguide.readthedocs.io/en/latest/] oder [https://www.digitalocean.com/community/tutorials/how-to-port-python-2-code-to-python-3]</small> <small>Es gibt auch ein externes Modul ''regex'', das bei Bedarf extra installiert werden muss ([https://pypi.org/project/regex/]). Es bietet zusätzliche Funktionalität und gründlicheren Unicode-Support. Dies sei hier aber nur der Vollständigkeit halber erwähnt.</small> == Verzweigungen == === if === Die IF-Verzweigung sei aus anderen Programmiersprachen bereits bekannt. In {{W|Pseudocode}} lässt sie sich folgendermaßen darstellen: WENN bedingung TRUE führe block1 aus SONST führe block2 aus ENDE Als {{W|Aktivitätsdiagramm|UML-Aktivitätsdiagramm}} sieht das in etwa so aus: [[File:If-Then-Else-diagram.svg|200px]] Und als {{W|Nassi-Shneiderman-Diagramm|Nassi-Shneiderman-Struktogramm}} so: [[File:Zweiseitige Auswahl.png|250px]] In Python gibt es keinen expliziten ENDE-Kennzeichner. Stattdessen wird der Code durch Einrückungen strukturiert. Alles mit der gleichen Einrückungstiefe gehört zum selben Block. Dies zeichnet Python vor anderen Programmiersprachen aus. Die test1.py-Datei laute also wie folgt: x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: Der else-Zweig wird ausgefuehrt x ist groesser oder gleich 4 Man achte auch auf die Doppelpunkte in der if- und else-Zeile. Darauf vergisst man gerne, wenn man von anderen Programmiersprachen kommt. Folgendes wäre in Python ein Fehler (genauer gesagt ein IndentationError). x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Auch Nachstehendes würde nicht zum gewünschten Ergebnis führen (löst aber keine Fehlermeldung aus). Der letzte print-Befehl ist schon außerhalb der IF-ELSE-Verzweigung. x = 3 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: x ist kleiner als 4 x ist groesser oder gleich 4 Python kennt eine Reihe von Vergleichs- und Verknüpfungsoperatoren: <, <= ... kleiner (gleich) >, >= ... größer (gleich) == ... gleich != ... ungleich is ... identisch is not ... nicht identisch and ... AND or ... OR not ... NOT Beispielsweise: a = 5 b = 9 if a<=10 and b!=7: print("OK") else print("Nicht OK") Ausgabe: OK Der else-Block kann übrigens auch ersatzlos entfallen. Als Pseudocode sieht das so aus WENN bedingung TRUE führe block aus ENDE Mehrfache Verzweigungen werden durch das elif-Konstrukt erstellt. In Pseudocode: WENN bedingung1 TRUE führe block1 aus SONST WENN bedingung2 TRUE führe block2 aus SONST WENN bedingung3 TRUE führe block3 aus SONST führe block4 aus ENDE Ein Python-Beispiel: a = 14 if a<=10: print("<=5") elif a>11 and a<15: print("11 bis 15") elif a>16 and a<20: print("16 bis 20") else: print(">=20") Ausgabe: 11 bis 15 In Python gibt es auch die Schlüsselwörter <code>True</code> (für wahr) und <code>False</code> (für falsch). Man beachte, dass sie mit Großbuchstaben beginnen. Andere Schreibweisen wären ein Fehler. Sie gehören zum Datentyp <code>bool</code>. Ihnen sind auch die Zahlen <code>1</code> und <code>0</code> zugewiesen. Man beachte, dass {{W|Rundungsfehler}} auftreten können. D.h. man sollte bei der Verwendung von {{W|Gleitkommazahl|Gleitpunktzahlen}} niemals auf absolute Genauigkeit prüfen, sondern eine Toleranz (einen <math>\varepsilon</math>-Wert) vorgeben. Ein klassisches Beispiel, das ein falsches Ergebnis liefert, ist: i = 0.1 + 0.2 print(i) if i == 0.3: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 NOK Und das, obwohl man schon in der Volksschule lernt, dass 0.1 + 0.2 gleich 0.3 ist. Korrekt muss das obige Beispiel z.B. so umgeschrieben werden: ist = 0.1 + 0.2 soll = 0.3 epsilon = 0.000001 print(ist) if abs(ist-soll) < epsilon: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 OK Alternativ kann auch die <code>math.isclose()</code>-Funktion verwendet werden. Das sei aber hier nur erwähnt und nicht konkret ausgeführt. <u>Aufgabe:</u> Recherchieren Sie im Internet zum Thema <code>math.isclose()</code>-Funktion. === match === Ab Python 3.10 gibt es auch die match-Anweisung. Dies ist das Python-Pendant für die switch-Anweisung in anderen Programmiersprachen, geht aber bei näherer Betrachtung weit darüber hinaus. Hier nur ein einfaches Beispiel: x = "Hello" match x: case "Servus" | "Ciao": # or print("Servus an alle") case "Grüetzi": print("Grüetzi Schwyzer") case _: # other, default, sonstiges ... print("Hallo Welt") Ausgabe: Hallo Welt Als Struktogramm sieht das in etwa so aus: [[File:Mehrseitige Auswahl.png|250px]] Für nähere Details siehe z.B. [https://www.geeksforgeeks.org/python-match-case-statement/], [https://learnpython.com/blog/python-match-case-statement/], [https://docs.python.org/3/tutorial/controlflow.html#match-statements] und das Python Enhancement Proposal (PEP) 636 – Structural Pattern Matching: Tutorial [https://peps.python.org/pep-0636] und dort insbesondere den Anhang A - Quick Intro. <small><code>match, case, _</code> etc. sind sogenannte ''soft keywords''. Im Gegensatz zu den normalen Schlüsselwörtern dürfen ihnen auch Werte zugewiesen werden. Eine Liste der weichen Schlüsselwörter lässt sich durch <code>keyword.softkwlist</code> erstellen (die Anweisung gibt es seit Python 3.9). Siehe dazu auch [https://stackoverflow.com/questions/65800344/what-are-soft-keywords] und [https://docs.python.org/3/library/keyword.html#keyword.softkwlist].</small> == Schleifen == Kopfgesteuerte Schleife, Endlosschleife und fußgesteuerte Schleife: [[File:Programmingloops.svg|450px]] === while === Die WHILE-Schleife ist kopfgesteuert. Sie funktioniert wie aus anderen Programmiersprachen bekannt. In Pseudocode: SOLANGE bedingung TRUE führe block aus ENDE In Python: x = 0 while x <= 10: print(x) x += 1 Ausgabe: 0 1 2 3 4 5 6 7 8 9 10 Eine Endlosschleife ergibt sich z.B. so: i = 5 while True: print(i) i-=1 Beendet werden kann sie mit der Tastenkombination STRG-C. Eine fußgesteuerte Schleife kann so simuliert werden: i = 5 while True: print(i) i-=1 if i<=0: print("Fire") break Ausgabe: 5 4 3 2 1 Fire Der <code>break</code>-Befehl wird etwas später noch einmal kurz thematisiert. === for === Struktogramm einer for-Schleife: [[File:Zählschleife.png|200px]] In Python bspw. so: for x in range(6): print(x*2) Ausgabe: 0 2 4 6 8 10 Die Schleife läuft von 0 bis 5. Ausgegeben wird jeweils der Wert x*2. Aquivalent kann diese Schleife auch so geschrieben werden: for x in range(0, 11, 2): print(x) Die Ausgabe ist wie oben. Der Startwert sei 0, der Endwert ist 11-1 und die Schrittweite ist 2. Ein anderes Beispiel sei for x in "text": print(x) Ausgabe: t e x t == Schleifen abbrechen == === break === <code>break</code> bricht die Schleife ab und setzt mit dem nächsten Befehl außerhalb der Schleife fort. for var in range(100): print(var) if var == 5: break Ausgabe: 0 1 2 3 4 5 === continue === <code>continue</code> bricht den aktuellen Schleifendurchlauf ab und setzt mit dem nächsten Schleifendurchlauf fort. for var in range (11): if var == 5: continue print(var) Ausgabe: 0 1 2 3 4 6 7 8 9 10 == try - except == try: z1 = 12 / 0 print(z1) except ZeroDivisionError: print("Das Ergebnis ist unendlich") except: print("Kann nicht berechnet werden!") print("Bitte die Formel korrigieren!") print("Setze Programm fort!") Ausgabe: Das Ergebnis ist unendlich Setze Programm fort! Es wird versucht, eine Zahl durch Null zu dividieren. Das ist nicht möglich, es wird eine Ausnahme ausgelöst. Das Programm springt daher in den except-ZeroDivisionError-Block und führt die dort gelisteten Anweisungen aus (in unserem Fall eine print-Anweisung). Danach wird das Programm fortgesetzt. Würden wir dieses Programm ohne try-except ausführen, so ergibt sich aus z1 = 12 / 0 print(z1) folgende Fehlermeldung und ein unmittelbarer Programmabbruch Traceback (most recent call last): File "C:\tmp\test1.py", line 1, in <module> z1 = 12 / 0 ZeroDivisionError: division by zero Mit dem try-except-Mechanismus können also Ausnahmen oder Fehler aufgefangen und behandelt werden. In unserem Beispiel ist das eher trivial, aber bei größeren Programmen kann das durchaus Sinn machen. Neu in Python 3.14 ist, dass mehrere Ausnahmen auch ohne Klammern angegeben werden können, z.B.: bis inkl. Python 3.13 nur: except (ZeroDivisionError, ValueError): ab Python 3.14 auch: except ZeroDivisionError, ValueError: == pass == Ein leerer Block muss in Python mittels dem Schlüsselwort <code>pass</code> dargestellt werden. Z.B. x = 2 if x == 1: print("Wert ist ", x) else: pass Würde man das <code>pass</code> im else-Block weglassen, so würde man eine Fehlermeldung erhalten: IndentationError: expected an indented block after 'else' statement on line 5 = Funktionen = == Aufrufen von Funktionen == Funktionen sind uns im Rahmen dieses Kurses schon zuhauf begegnet. Sei es die print()-, die math.sin()- oder die hex()-Funktion. All diese Funktionen werden von Python zur Verfügung gestellt, ohne dass man sie explizit programmieren müsste. Aufgerufen werden diese Funktionen, indem man ihren Namen eintippt, gefolgt von runden Klammern. In diesen Klammern können noch Argumente übergeben werden. Auch Rückgabewerte sind möglich. == Funktionen selber schreiben == Funktionen werden mit dem def-Schlüsselwort (man definiert die Funktion) eingeleitet, danach folgt der Funktionsname, danach wiederum runde Klammern, in denen formale Argumente stehen können. Abgeschlossen wird die def-Zeile mit einem Doppelpunkt. Danach folgt der Funktionskörper. Dieser Funktionskörper muss wiederum eingerückt werden (wie von den Verzweigungen und Schleifen bekannt). Aufgerufen wird diese Funktion, indem man ihren Funktionsnamen eingibt, gefolgt von runden Klammern (ggf. mit den aktuellen Parametern). Z.B. # Funktion definieren def halloWelt(i): # i ... beliebige Ganzzahl print("Hallo " * i, end="") print("Welt!") # Funktion aufrufen halloWelt(3) Ausgabe: Hallo Hallo Hallo Welt! Unterschied zwischen formalen und aktuellen Parametern: [[Datei:PythonIng_func1.jpg]] <small>Aktuelle Parameter werden auch Argumente genannt.</small> Rückgabe von Funktionswerten: # Funktion definieren def mathFunc(a, b): r1 = a + b r2 = a * b return r1, r2 # Funktion aufrufen c, d = mathFunc(3, 5) # Ausgabe der zurückgegebenen Werte print(c) print(d) Ausgabe: 8 15 Es werden r1 und r2 zurückgegeben und den Variablen c und d zugewiesen. (r1, r2) und (c, d) sind Tupel. Was Tupel konkret sind, siehe etwas später in diesem Kapitel. 3 und 5 sind die aktuellen Parameter (die Argumente). a und b sind die formalen Parameter. Die Zuweisung der aktuellen zu den formalen Parametern erfolgt in der gegebenen Reihenfolge, also die Zahl 3 wird an a übergeben und die Zahl 5 an b. Vorgabeparameter, z.B.: def mathFunc(a=10, b=20): r1 = a + b r2 = a * b return r1, r2 c, d = mathFunc(3, 5) print(c) print(d) e, f = mathFunc(5) print(e) print(f) g, h = mathFunc(b=6) print(g) print(h) Ausgabe: 8 15 25 100 16 60 Erklärung: * Erster <code>mathFunc</code>-Aufruf: Es werden, wie weiter oben, die Argumente 3 und 5 an die formalen Parameter a und b übergeben. Die Rückgabewerte r1 und r2 werden an c und d übergeben. Somit ist c=8 und d=15. * Zweiter <code>mathFunc</code>-Aufruf: Es wird nur das Argment 5 an a übergeben. b behält den Vorgabewert 20. D.h. e= 25 und f=100. * Dritter <code>mathFunc</code>-Aufruf: Es wird nur die Zahl 6 an b übergeben, a behält seinen Vorgabewert 10. Somit ergibt sich g=16 und h=60. Beispiel (Schlüsselwortargumente vs. Positionsargumente): def mathFunc(a, b): r1 = a - b r2 = a / b return r1, r2 c, d = mathFunc(b=3, a=5) # Schlüsselwortargumente e, f = mathFunc(3, 5) # Positionsargumente print(c) print(d) print(e) print(f) Ausgabe: 2 1.6666666666666667 -2 0.6 Durch die Verwendung von Schlüsselwortargumenten können die Argumente in beliebiger Reihenfolge angegeben werden. Bei den Positionsargumenten ist die Reihenfolge vorgegeben. Daraus resultiert auch der Unterschied bei den obigen Ausgaben. Werden beide Arten in einem Aufruf gemischt, so müssen die Positionsargumente zuerst angegeben werden. Den Unterschied zwischen beiden Argumentarten zu kennen ist wichtig, nicht nur bei selbst erstellten Funktionen. Auch beim Aufruf von Python-Funktionen verfolgt einen die Mischung von Schlüsselwort- und Positionsargumenten auf Schritt und Tritt, z.B. beim etwas später folgenden Abschnitt über "Grafiken zeichnen": plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") Bei dieser <code>plot</code>-Funktion aus dem Modul <code>matplotlib.pyplot</code> sind <code>x</code> und <code>y1</code> Positionsargumente. <code>label, lw</code> und <code>ls</code> sind die Namen der Schlüsselwortargumente. Die Schlüsselwortargumente könnten auch in anderer Reihenfolge angeschrieben werden, nicht jedoch die Positionsargumente! Siehe zu <code>matplotlib.pyplot.plot</code> auch die Seite [https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html]. == Lambda-Funktionen == print((lambda a, b: a*b) (3, 5)) Ausgabe: 15 Eingeleitet wird eine Lambda-Funktion (auch Lambda-Form, Lambda-Operator oder anonyme Funktion genannt) mit dem Schlüsselwort <code>lambda</code>. Es folgen die formalen Argumente, danach ein Doppelpunkt, die Berechnungsvorschrift und ggf. abschliessend in Klammern die aktuellen Parameter. Man kann einer Lambda-Funktion auch einen Funktionsnamen geben und die Funktion über diesen Namen aufrufen, z.B. prod = lambda a, b: a*b print(prod(3, 5)) Als Ausgabe wird wieder die Zahl 15 geliefert. == Rekursive Funktionen == Funktionen können wiederum andere Funktionen aufrufen. Von einem rekursiven Funktionsaufruf spricht man, wenn die aufgerufene Funktion gleich der aufrufenden ist. def printFunc(i): if (i >= 5): return else: print("Hallo Welt") printFunc(i+1) printFunc(1) Ausgabe: Hallo Welt Hallo Welt Hallo Welt Hallo Welt == Funktionsannotationen == Python ist sehr flexibel, was Typen angeht. Im Vorhergehenden haben wir generell keine Typangaben gemacht. Will man Typen angeben, so bietet Python das Konzept der Funktionsannotation. def calcFunc(a: int, b: int) -> int: return a+b r1 = calcFunc(8, 9) r2 = calcFunc(8.0, 9.0) r3 = calcFunc("Hallo", "Welt") print(r1) print(r2) print(r3) Ausgabe: 17 17.0 HalloWelt Jetzt sieht man auf den ersten Blick, welche Typen der Programmierer im Sinn hatte, als er die Funktion erstellte. Das Problem dabei ist nur, dass es Python ziemlich egal ist, welche Typen man im Endeffekt eingibt. Im obigen Beispiel können statt Integer-Typen u.a. auch Float- oder String-Typen eingegeben werden. <small> Siehe zum Thema "Type Checking" aber auch den später folgenden Abschnitt [[Ing_Mathematik:_Python#Type_Checker]]. </small> == Variadische Funktionen == Python-Code: def test1(a, *b): print(a); for c in b: print(c); test1("Hallo", "Welt", "Schweizer", "und alle anderen") Ausgabe: Hallo Welt Schweizer und alle anderen Mit dem Stern (auch als Splat-Operator bezeichnet) in der formalen Parameterliste bei der Funktion <code>test1</code> wird angezeigt, dass eine beliebige Anzahl von Argumenten übergeben wird. <small> Dies entspricht in etwa dem, was in anderen Programmiersprachen (PHP etc.) mittels Ellipse (<code>...</code>) angezeigt wird.</small> = Tupel, Listen und andere = [[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]] == Tupel und Listen == Tupel, Listen und einige andere sind Datenstrukturen oder Sequenzen. Listen (z.B. eine Einkaufsliste) sind veränderbar (mutable). Ein Tupel kann dagegen nicht verändert werden (immutable). Listen werden beim Anlegen in eckige Klammern eingeschlossen, Tupel in runde Klammern. Beim Tupel können die Klammern auch weggelassen werden. Ein Tupel mit nur einem Element muss mit einem Beistrich abgeschlossen werden. Der Grund ist, dass Python sonst nicht entscheiden kann, ob ein Tupel angelegt werden soll, oder nur ein geklammerter Wert. Als Gedächtnisstütze kann man sich den Unterschied zwischen Tupel und Liste ev. so leichter merken: : T'''u'''pel ... r'''u'''nde Klammern, '''u'''nveränderlich : L'''i'''ste ... eck'''i'''ge Klammern, veränderl'''i'''ch. Nachfolgend werden einige Operationen mit Listen und Tupel dargestellt. # Liste und Tupel liste = [1, 2, "Hallo"] tupel = (1, 2, "Hallo") # Ausgabe von liste und tupel print(liste) print(tupel) # Ausgabe von Einzelelementen print(liste[1]) print(tupel[2]) # Element an Liste anhängen und einfügen liste.append(55) liste.insert(4, "Welt") print(liste) # Element aus Liste entfernen liste.remove(1) print(liste) # einige weitere Beispiele liste2 = [1,] tupel2 = 1, 2 tupel3 = (1,) print(liste2) print(tupel2) print(tupel3) Ausgabe: [1, 2, 'Hallo'] (1, 2, 'Hallo') 2 Hallo [1, 2, 'Hallo', 55, 'Welt'] [2, 'Hallo', 55, 'Welt'] [1] (1, 2) (1,) Beispiel (eine Liste von Wörtern zu einem einzigen zusammenhängenden Text verbinden): woerter = ["Hallo", "Welt"] satz = " ".join(woerter) print(satz) Ausgabe: Hallo Welt == Dictionaries und Mengen == Zu den Datenstrukturen gehören weiters auch Mengen und Dictionaries. Mengen sind von der Mathematik bekannt, sie sind ungeordnet und es kommen keine mehrfachen Elemente vor. Dictionaries sind durch Schlüssel :Wert-Paare gekennzeichnet. Mengen werden beim Anlegen wie Dictionaries in geschweifte Klammern eingeschlossen. dict = {"vorname":"Hugo", "nachname":"Meister" } menge = {1, 1, 3, 4, 4, 4, "Hallo"} print(dict) print(menge) print(dict["vorname"]) Ausgabe: {'vorname': 'Hugo', 'nachname': 'Meister'} {1, 3, 4, 'Hallo'} Hugo Geschweifte Klammern ohne Inhalt stellen Dictionaries dar und keine Mengen: di = {} print(type(di)) Ausgabe: <class 'dict'> Leere Mengen lassen sich mit <code>set()</code> erzeugen: menge = set() # leere Menge print(menge) menge.add("Hallo") # Element hinzufügen print(menge) Ausgabe: set() {'Hallo'} Beispiel (einige Mengenoperationen): mengeA = {"Hallo", "Welt"} mengeB = {1, 2, "Welt", 3} # Vereinigung print(mengeA | mengeB) print(mengeA.union(mengeB)) # Durchschnitt print(mengeA & mengeB) print(mengeA.intersection(mengeB)) # Differenz print(mengeA - mengeB) print(mengeA.difference(mengeB)) # Symmetrische Differenz print(mengeA ^ mengeB) print(mengeA.symmetric_difference(mengeB)) # Teilmenge print(mengeA.issubset(mengeB)) # Mehrere Elemente hinzu mengeA.update(["Super", 67, 125]) print(mengeA) # Element löschen mengeA.discard("Hallo") print(mengeA) Ausgabe: {1, 2, 3, 'Welt', 'Hallo'} {1, 2, 3, 'Welt', 'Hallo'} {'Welt'} {'Welt'} {'Hallo'} {'Hallo'} {1, 2, 3, 'Hallo'} {1, 2, 3, 'Hallo'} False {67, 'Super', 'Welt', 'Hallo', 125} {67, 'Super', 'Welt', 125} Es gibt schon seit "ewigen" Zeiten unveränderbare Mengen, die mittels <code>frozenset</code> eingeleitet werden. Neu ab Python 3.15 ist dagegen das Pendant <code>frozendict</code>, das unveränderbare Dictionaries darstellt. fdict = frozendict({"vorname":"Hugo", "nachname":"Meister"}) fset = frozenset({"A", 1, "A"}) print(fdict) print(fdict["vorname"]) print (fset) try: fdict["vorname"] = "Max" print(fdict["vorname"]) except TypeError as e: print(f"Fehler: {e}") try: fset.add("B") print(fset) except AttributeError as e: print(f"Fehler: {e}") Ausgabe: frozendict({'vorname': 'Hugo', 'nachname': 'Meister'}) Hugo frozenset({1, 'A'}) Fehler: 'frozendict' object does not support item assignment Fehler: 'frozenset' object has no attribute 'add' == List Comprehensions == Aus einer Eingabeliste soll eine Ausgabeliste erzeugt werden. Das kann folgendermaßen geschehen. Mathematische Schreibweise: <math>lc = \{2x|x\in\ \mathbb{N}, 1\le x < 11\}</math> Python-Code: lc = [x*2 for x in range(1,11)] print(lc) Ausgabe: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] Mathematische Schreibweise: <math>lc = \{2x | x \in \mathbb{N}, 1\le x < 11, x \bmod 2 = 0 \}</math> Python-Code: lc = [x*2 for x in range(1,11) if x%2 == 0] print(lc) Ausgabe: [4, 8, 12, 16, 20] Siehe auch {{W|List Comprehension}}. == Set Comprehensions == Dies ist sehr ähnlich wie im vorigen Abschnitt beschrieben. Es wird aber keine Liste, sondern eine Menge erzeugt. sc = {x*2 for x in range(1,11)} print(sc) Ausgabe: {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} == Listen zusammenführen - zip() == li1 = ["A", "B", "C", "D"] li2 = [1, 2, 3, 4] li3 = [5.5, 6.6, 7.7, 8.8] z = zip(li1, li2, li3) print(z) li4 = list(z) print(li4) Ausgabe: <zip object at 0x00000283B6C6AC80> [('A', 1, 5.5), ('B', 2, 6.6), ('C', 3, 7.7), ('D', 4, 8.8)] == Generatorausdruck == g = (i*2 for i in range(1,11)) print(g) t = tuple(g) print(t) print(t[1:3]) Ausgabe: <generator object <genexpr> at 0x00000241D2A4A5A0> (2, 4, 6, 8, 10, 12, 14, 16, 18, 20) (4, 6) == Slicing == slice ... Scheibe, Teil, in Scheiben schneiden Beispiel: Zugriff auf Elemente eines geordneten sequentiellen Objekttyps (Liste, Tupel oder String): str1 = "Hallo" # Das erste Element wird mit dem Index 0 angesprochen # [start (inkl.) : stop (exkl.) : step (default=1)] str2 = str1[0:2] # Alternativ auch: str2 = str1[:2] print(str2) tup1 = (0,1,2,3) # Das letzte Element hat auch den Index -1, das vorletzte den Index -2 usw. tup2 = tup1[-3:-1] print(tup2) lst1 = [[1, 5, 10, 20], [30, 40, 50, 60]] lst2 = lst1[1][1] print(lst2) Ausgabe: Ha (1, 2) 40 Beispiel: Umdrehen von Strings str1 = "Hallo" str2 = str1[::-1] print(str2) Ausgabe: ollaH = Objektorientierte Programmierung = {{Wikipedia|Objektorientierte Programmierung}} * {{W|Klasse (Objektorientierung)|Klasse}} ... die Schablone oder der Bauplan, enthält Methoden und Attribute * {{W|Objekt (Programmierung)|Objekt}} ... eine Klasseninstanz (die konkrete Ausprägung der Klasse) * {{W|Attribut (Programmierung)|Attribute}} ... die Eigenschaften eines Objekts * {{W|Methode (Programmierung)|Methoden}} ... die Aktionen (Operationen), die ein Objekt ausführen kann * {{W|Vererbung (Programmierung)|Vererbung}} ... neue Klassen (Subklassen, Unterklassen, abgeleitete Klassen) aus vorhandenen Klassen (Superklassen, Oberklassen, Basisklassen, Elternklassen) ableiten. Ermöglicht den Aufbau von Klassenhierarchien. Die Subklasse "erbt" Attribute und Methoden von der Superklasse. Python unterstützt (so wie C++, aber im Gegensatz zu Java) Mehrfachvererbung. == UML == * {{W|Unified Modeling Language|UML}} ... '''U'''nified '''M'''odeling '''L'''anguage, eine Modellierungssprache. Die UML enthält zahlreiche Diagrammarten, um Programme zu modellieren. Im Nachfolgenden wird nur das {{W|Klassendiagramm}} verwendet. [[File:UmlCd Klasse-3.svg|300px]] * {{W|Sichtbarkeit (Programmierung)|Sichtbarkeit}}: ** + ... public (öffentlich) ** - ... private ** # ... protected * {{W|Attribut_(UML)#Attribute_für_Instanzen_und_für_Klassen|Klassenattribute}} (statische Attribute): Werden nur einmal pro Klasse angelegt. Im Klassendiagramm werden sie unterstrichen. [[File:Attribute-3.png|200px]] * Vererbung: <gallery> InheritancePgmUML.svg | Abgeleitete Klasse erbt von Basisklasse (Einfachvererbung) Diamond inheritance.svg | D erbt von B und C (Mehrfachvererbung). B und C erben von A (Einfachvererbung) </gallery> Für weitergehende Betrachtungen zur UML wird auf Spezialliteratur verwiesen, z.B.: * Seidl et al.: UML@Classroom. dpunkt, 2012, ISBN 978-3-89864-776-2 * Rupp et al.: UML 2 glasklar. Hanser, 4. Aufl., 2012, ISBN 978-3-446-43057-0 == Eine einfache Klasse == [[Datei:PythonIng_uml1.svg | 200px]] class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 fahr = Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die Klasse Fahrzeug wird durch das class-Schlüsselwort eingeleitet. raeder ist ein Klassenattribut und public. __init__ wird bei der Objekterzeugung automatisch aufgerufen (ist der sogenannte Konstruktor). Man achte darauf, dass diese Methode immer mit zwei Unterstrichen eingeleitet und abgeschlossen wird. Instanzattributen wird das Wort self vorangestellt. Wir sehen uns z.B. das Attribut self.__geschwind an. Auch hier werden zwei Unterstriche verwendet. Das bedeutet, dass dieses Attribut strikt/stark private ist. Wird nur ein Unterstrich verwendet, so deutet dies auf schwach/weakly private hin. Letzteres wird in Python deutlich häufiger verwendet. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt. Besonderheiten bei stark und schwach private: * '''stark private''': ** zwei führende Unterstriche ** Name Mangling: Name wird zu <code>_Klassenname__variablenname</code> ** Schutz vor Namenskollisionen bei Vererbung ** am Ende des Namens dürfen keine zwei Unterstriche verwendet werden. Das wären dann Magic Methods oder Dunder-Methods (z.B. __init__). Diese sind public. * '''schwach private''': ** ein führender Unterstrich ** Name bleibt gleich ** ist nur ein Hinweis an die Programmierer, kein starker Schutz ** <code>from modul import *</code>: Objekte mit einem führenden Unterstrich werden standardmäßig nicht importiert ** Standard für die Kapselung bei Python. Schätzung: Weit mehr als 80% der nicht-öffentlichen Attribute/Methoden werden als schwach private deklariert. Weniger als 5-10% als stark private (Quelle: Google KI) == Klassen importieren == Häufig ist es sinnvoll und übersichtlicher Klassen in eigenen Dateien zu speichern. Das sind dann eigene Module. Abgespeichert werden Sie mit der Endung py, wie bisher auch praktiziert. Aufgerufen werden Sie mit der import-Anweisung. Dann ist aber nur der Dateiname ohne Endung py zu verwenden. Klarer wird das mit einem Beispiel. Datei c:\tmp\fahrzeug.py class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 Datei c:\tmp\test1.py import fahrzeug fahr = fahrzeug.Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die üblichen import-Anweisungen lauten wie folgt: {| {{prettytable}} ! import-Befehl ! Instanz |- | import xyz || xyz.Klasse |- | import xyz as x || x.Klasse |- | from xyz import Klasse || Klasse |- | from xyz import * || Klasse |} Der Vorteil der ersten beiden import-Anweisungen ist, dass es kaum zu Namenskollisionen kommen kann. Dafür hat man bei den letzten beiden Varianten weniger Tipparbeit. == Vererbung == === Einfachvererbung === [[Datei:PythonIng_uml2.svg | 200px]] Datei fahrzeug.py: class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 class Luftfahrzeug(Fahrzeug): def __init__(self, geschwindigkeit, leistung, fluegel): super().__init__(geschwindigkeit, leistung) self.__flueg = fluegel def getFlueg(self): return self.__flueg Datei test1.py: import fahrzeug fahr = fahrzeug.Luftfahrzeug(150, 90, 4) print(fahr.getFlueg()) Ausgabe: 4 === Mehrfachvererbung === Mit Python ist auch Mehrfachvererbung möglich, z.B.: class A: def _printA(self): print("Klasse A") class B: def _printB(self): print("Klasse B") class C(A,B): def __init__(self): self._printA() self._printB() c = C() Ausgabe: Klasse A Klasse B Die Klasse C erbt von A und B. In UML sieht das in etwa so aus: +-----------------------------+ +-------------------------+ | A | | B | +-----------------------------+ +-------------------------+ | | | | +-----------------------------+ +-------------------------+ | # printA() | | # printB() | +-----------------------------+ +-------------------------+ . . / \ / \ --- --- | | | | +---------------------+ | C | +---------------------+ | | +---------------------+ | | +---------------------+ <code>printA()</code> und <code>printB()</code> sind schwach private (in UML als <code>protected</code> mit einem # dargestellt). Es ist aber zu beachten, dass schwach private nur Konvention ist. Praktisch könnte man auch von außerhalb auf diese Methoden zugreifen. Das soll man aber nicht tun, und das wird in Python durch einen Unterstrich angedeutet. = Grafiken zeichnen = Für das Zeichnen von Grafiken wird hier das Modul <code>matplotlib</code> verwendet. <code>matplotlib</code> ist ein externes Modul und muss vor der ersten Verwendung installiert werden. Das geht so: # Starten Sie ein Terminal (bei Windows die Eingabeaufforderung). # Führen Sie darin folgenden Befehl aus <code>c:\devel\Python\Scripts\pip.exe install matplotlib</code> pip ist übrigens der Paketmanager von Python ({{W|Pip_(Python)}}). Optimalerweise installieren wir auch gleich das Modul <code>numpy</code> (Numerical Python). Wir werden es im Folgenden oft benötigen (nicht nur bei den Grafiken). Das funktioniert vom Prinzip her genauso, wie für <code>matplotlib</code> gezeigt. <small>Verwenden Sie Spyder, so sind diese Schritte nicht nötig. Spyder inkludiert diese Pakete standardmäßig. Unter openSUSE Tumbleweed lassen sich diese Pakete mittels YaST oder zypper installieren.</small> == 2D == === Graph einer Funktion === Es soll die cosh-Funktion im Intervall <math>x\in[-3,3]</math> gezeichnet werden. Der Programmcode lautet in der einfachsten Form: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh1.jpg]] Der Code ist quasi selbsterklärend. Das Untermodul pyplot des matplotlib-Moduls und das numpy-Modul werden importiert. x läuft von -3 bis +3. y wird für jeden x-Wert per Formel ausgerechnet. "plt.plot()" ist der Zeichenbefehl. "plt.show" ist notwendig, um das Fenster mit der Grafik anzuzeigen. Die Schrittweite 0.1 wurde so gewählt, um einen ausreichend glatten Verlauf des Graphen zu gewährleisten. Das ist immer ein Kompromiss zwischen Berechnungszeit und Ansehnlichkeit. Testen Sie einfach ein paar verschiedene Werte, um ein Gefühl dafür zu zu bekommen. "plt.grid()" zeichnet ein Gitter in die Grafik (kann auch weggelassen werden). Die Bezeichnungen plt und np könnten auch anders gewählt werden. Es ist aber Konvention, diese so wie hier gezeigt zu wählen. <small>Mit der im obigen Bild gezeigten Menüleiste kann die dargestellte Grafik nachträglich noch geändert werden (Zoom, Pan, Achsenparameter, Kurvenparameter etc.). Natürlich kann man das alles auch direkt programmieren. Wie das funktioniert wird ansatzweise etwas später gezeigt.</small> Ein etwas komplexeres Beispiel ist Folgendes: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) + 2**x plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh4.png]] Man beachte, dass im Gegensatz zu Octave und Julia der ominöse Punkt (.) bei 2**x mit Python nicht benötigt wird. Das macht das Programmiererleben etwas einfacher. === Graphen mehrerer Funktionen und weiteres === import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x") plt.plot(x, y2, label = "sin(x) * cos(x)") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh2.png]] Um die Linienstile etwas individueller zu gestalten, ist folgender Programmcode gedacht: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") plt.plot(x, y2, label = "sin(x) * cos(x)", lw=3, ls="--") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh3.png]] === Funktion in Parameterdarstellung === Es soll die archimedische Spirale <math>x = t \cos(t), y = t \sin(t)</math> im Intervall <math>[0, 6\pi[</math> gezeichnet werden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.show() [[Datei:PythonIng_spirale1.png]] Diese Darstellung erscheint verzerrt. Will man gleiche Achsenskalierungen, so kann man den plt.axis()-Befehl verwenden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.axis("equal") plt.show() [[Datei:PythonIng_spirale2.png]] === Funktion in Polardarstellung === import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(projection="polar") r = np.arange(0, 1, 0.01) theta = r**3 line = ax.plot(theta, r) plt.show() [[Datei:PythonIng_polar1.png]] === Logarithmische Achsenskalierung === ==== Semilog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.semilogy() plt.show() Ausgabe: [[Datei:PythonIng_semilog1.png]] ==== LogLog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.loglog() plt.show() [[Datei:PythonIng_loglog1.png]] === Gefüllte Fläche === import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 3, 0.1) y1 = 3*x - 1 y2 = x**2 plt.plot(x, y1, x, y2, color='black') plt.fill_between(x, y1, y2, where=y1>=y2) plt.show() [[Datei:PythonIng_gefuellt.png]] === Linien, Pfeile, Rechtecke, Kreise und Texte === import matplotlib as mpl import matplotlib.pyplot as plt fig, ax = plt.subplots() r = mpl.patches.Rectangle((0, 0), 3, 3, angle=30, fill=False) c = mpl.patches.Circle((4, 4), 2, fill=False) ax.add_patch(r) ax.add_patch(c) ax.plot([-2, 7], [-2, 0], color="black") ax.arrow(0, 7, 5, 0, length_includes_head=True, head_width=0.5, head_length=1.5, color="black") ax.set_aspect("equal") plt.axis([-3, 8, -3, 8]) plt.show() [[Datei:PythonIng_linien_pfeile_etc.png]] Text kann mit <code>ax.text(x, y, "Text")</code> hinzugefügt werden, bspw. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.text(0.1, 0.1, "Hallo") ax.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() Oder einfacher auch ohne <code>subplots</code> import matplotlib.pyplot as plt plt.text(0.1, 0.1, "Hallo") plt.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text1.png]] Auch Sonderzeichen (griechische Buchstaben etc.) können verwendet werden (siehe dazu auch [https://matplotlib.org/stable/users/explain/text/mathtext.html]). import matplotlib.pyplot as plt plt.text(.3, .5, r'$\Omega\ \psi\ \oint\ \nabla\ \dot a\ \frac{a}{b}\ a_b$', size="20") plt.show() [[Datei:PythonIng_text20.svg]] Jetzt wird noch gezeigt, wofür <code>subplots</code> sinnvoll eingesetzt werden können. import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=1, ncols=2) ax[0].text(0.1, 0.1, "Hallo") ax[1].text(0.1, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text2.png]] === Aufgaben === * Zeichnen Sie die Strophoide <math>x = \frac{a(t^2-1)}{t^2+1}, y = \frac{at(t^2-1)}{t^2+1}, a = 2, -3 \leq t \leq 3</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_strophoide.jpg]] * Zeichnen Sie die verschlungene Hypozykloide <math>x = (R-r)\cos t + c\cos\frac{R-r}{r}t, y = (R-r)\sin t - c\sin\frac{R-r}{r}t, c = 3, r = 2, R = 6, -15 \leq t \leq 15</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_hypozykloide.jpg]] * Testen Sie bei den obigen Übungsaufgaben verschiedene Linienstile und Farben. Farben können mit dem plt.plot()-Parameter color gewählt werden. * Testen Sie bei den obigen Übungsaufgaben verschiedene Werte für a, c, r und R. == 3D == === Räumliche Kurven === import matplotlib.pyplot as plt import numpy as np t = np.arange(0, 6*np.pi, 0.1) x = t * np.cos(t) y = t * np.sin(t) z = t fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot(x, y, z) plt.show() [[Datei:PythonIng_raumkurve1.png]] === Flächen === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z) plt.show() [[Datei:PythonIng_fläche1.png]] Das Ganze in Netzdarstellung läßt sich so programmieren: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.5) y = np.arange(0, 10, 0.5) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_wireframe(x, y, z) plt.show() [[Datei:PythonIng_fläche2.png]] Ein etwas komplexeres Beispiel: import matplotlib.pyplot as plt import numpy as np x = np.arange(0.1, 10, 0.1) y = np.arange(0.1, 10, 0.1) x, y = np.meshgrid(x, y) z1 = np.sin(x) + 3 * np.cos(y) z2 = np.sin(x) + np.log(y) z3 = x + np.cos(y) z4 = x**2 - y fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, nrows=2, ncols=2) ax[0][0].plot_surface(x, y, z1) ax[0][1].plot_surface(x, y, z2) ax[1][0].plot_surface(x, y, z3) ax[1][1].plot_surface(x, y, z4) plt.show() [[Datei:PythonIng_subplot1.png]] Man beachte, dass man die Unterbilder im Bild nach dem Ausführen des Scripts z.B. mit der mittleren Maustaste einzeln drehen, oder über die Einträge in der Menüzeile einzeln bearbeiten kann. Mit ein paar Zeilen Programmtext lässt sich also eine Menge an Funktionalität generieren. Die Farbgebung lässt sich über <code>colormaps</code> variieren. import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm) plt.show() [[Datei:PythonIng_colormap1.png]] Es gibt eine Menge an Colormaps, z.B. <code>plasma, Greys, Dark2, ocean</code>. Zwecks detaillierterer Infos siehe die matplotlib-Dokumentation. <small>Verwendet man die IDE namens IDLE, so gibt es dort auch die automatische Codevervollständigung. D.h. es werden alle Möglichkeiten (in unserem Fall nach dem Eintippen von <code>cm.</code> alle verfügbaren Colormaps) angezeigt.</small> Die "edgecolor" und Linienbreite können auch frei gewählt werden: import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm, edgecolor="black", linewidth=1.0) plt.show() [[Datei:PythonIng_colormap2.png]] === Höhenlinien === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() ax.contour(x, y, z) plt.show() [[Datei:PythonIng_höhenlinien1.png|400px]] Etwas abgewandelt sieht das so aus: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contour(x, y, z) ax.clabel(hl, inline = True) plt.show() [[Datei:PythonIng_höhenlinien2.png|400px]] Und noch eine Variante (mit einem Farbbalken) sei gezeigt. import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contourf(x, y, z) fig.colorbar(hl) plt.show() [[Datei:PythonIng_höhenlinien5.svg|400px]] === Aufgaben === * Zeichnen Sie die räumliche Kurve <math>x = 2 \cdot \cosh(t)</math>, <math>y = 5 \cdot \sin(t)</math>, <math> z = t^{2} - t</math>, <math>0 \leq t \leq 3\pi</math>. * Zeichnen Sie die Fläche <math>z = \log(x) + \cos(y)</math>. == Animationen == === Mit matplotlib === Auch mit matplotlib sind Animationen möglich. Das ist ein bisschen komplizierter und wird deshalb hier nur mit einem sehr einfachen Beispiel dargestellt (bei Interesse siehe z.B. auch das [https://matplotlib.org/stable/users/explain/animations/animations.html#animations Animations using Matplotlib-Tutorial]). import matplotlib.pyplot as plt import matplotlib.animation as ani import matplotlib import numpy as np def update(frame): line.set_xdata(x[:frame]) line.set_ydata(y[:frame]) return (line) fig, ax = plt.subplots() x = np.arange(0, 10, .1) y = np.sin(x) line, = ax.plot(x[0], y[0]) ax.set(xlim=[0, 10], ylim=[-1, 1]) a = ani.FuncAnimation(fig=fig, func=update, frames=100, interval=20) plt.show() # Speichere die Animation in einem animierten GIF (optional) a.save(filename="c:/tmp/PythonIng_anim5.gif", writer="pillow") [[Datei:PythonIng_anim5.gif]] Es wird eine Sinuskurve auf den Bildschirm gezeichnet. In der letzten Zeile wird diese Animation in ein animiertes GIF gespeichert. Das ist natürlich optional und kann auch weggelassen werden. === Mit VPython === Aber auch mit dem Modul VPython lassen sich einfache 3D-Animationen erstellen. VPython ist ein externes Modul, das vorab installiert werden muss. Unter openSUSE Tumbleweed gibt es dzt. kein entsprechendes rpm-Paket. Die übliche Methode der Installation mittels YaST oder zypper ist somit nicht möglich. Auch eine direkte Verwendung von pip führt nur zu einer Fehlermeldung (<code>error: externally-managed-environment</code>). Es empfiehlt sich dort folgende Vorgehensweise: # Erstelle zuerst eine virtuelle Umgebung, z.B.: <code>python3.11 -m venv ~/tmp/venv1</code> # Wechsle das Verzeichnis: <code>cd ~/tmp/venv1/bin</code> # Installiere das entsprechende Paket: <code>./pip install vpython</code> # Führe das entsprechende Skript aus: <code>./python ~/tmp/test1.py</code> Aktuell (März 2026) ist dieses Programmpaket lt. der [https://vpython.org/presentation2018/install.html VPython-Homepage] nur für die Python-Versionen 3.8 bis 3.12 verfügbar. Ein Beispiel zu einer einfachen Animation wird nachfolgend geliefert. from vpython import * scene.width = 1200 scene.height = 600 scene.center = vector(20,0,0) scene.background = color.white cylinder(pos=vector(0,0,0), axis=vector(20,0,0), radius=5, color=color.blue) cone(pos=vector(0,0,0), axis=vector(-10,0,0), radius=5, color=color.blue) helix(pos=vector(20,0,0), axis=vector(40,0,0), radius=2, coils=10, thickness=0.5, color=color.blue) ball = sphere(pos=vector(20,0,0), color = color.green, radius = 1) ball.p = vector(0.15, 0, 0) toc = True while True: rate(200) if(ball.pos.x <= 60 and toc == True): ball.pos += ball.p else: toc = False ball.pos -= ball.p if(ball.pos.x <= 20 and toc == False): toc = True [[Datei:PythonIng_vpython_anim.JPG]] Idealerweise öffnet sich beim Ausführen des Scripts ein Browserfenster. Darin wird die programmierte Animation gezeigt (siehe auch den obigen Screenshot). Eine Größenänderung können Sie mit der mittleren Maustaste initiieren. Die Szenerie drehen können Sie mit der rechten Maustaste. === Mit VTK === Komplexer, aber auch mächtiger als VPython ist die Verwendung von VTK ('''V'''isualization '''T'''ool'''k'''it). Genauer gesagt des Python-Wrappers von VTK. Dieses externe Python-Modul muss vorab installiert werden (z.B. mittels YaST, pip oder in eine virtuelle Umgebung). VTK ist eine Softwarebibliothek zur 3D-Visualisierung und wurde ursprünglich in C++ geschrieben. Verbreitet eingesetzt wird diese Bibliothek in der Wissenschaft und Forschung, z.B. * in der medizinischen Bildgebung * für Strömungssimulationen * für Klimadaten VTK funktioniert nach dem {{W|Grafikpipeline|Pipeline-Prinzip}}: Source (Quellen) -> Filter -> Mapper (Senken) -> Actor/Renderer Daten fließen von den Quellen zu den Senken. Als einfaches Beispiel wird die Darstellung eines Zylinders gezeigt, der mit den Maustasten gedreht oder in der Größe geändert werden kann: import vtk # Zylinder erzeugen cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) # Geometrie in darstellbare Daten umwandeln mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) # Objekt in der Szene actor = vtk.vtkActor() actor.SetMapper(mapper) # Szene verwalten renderer = vtk.vtkRenderer() renderer.AddActor(actor) # Render-Fenster render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) # Maus/Tastatur-Steuerung interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) # Starten render_window.Render() interactor.Start() Ausgabe: [[Datei:PythonIng_VTK_1.png]] Gleiches Beispiel wie oben, aber mit einer Animationssequenz: import vtk import time cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderer.AddActor(actor) render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) render_window.Render() time.sleep(0.01) Das Grafikfenster schließt sich nach Ablauf der Schleife. Das Fenster bleibt geöffnet, wenn Sie am Programmende folgenden Befehl hinschreiben interactor.Start() Um den animierten Zylinder grün einzufärben, müssen Sie Folgendes im obigen Programm ergänzen (Farbnamen): colors = vtk.vtkNamedColors() actor.GetProperty().SetColor(colors.GetColor3d("Green")) Als Namen können Sie u.a. die CSS3 Web-Farben verwenden (siehe z.B. [https://wiki.selfhtml.org/wiki/Farbe/Farbangaben] und {{W|Webfarbe#CSS_3}}). Alternativ funktioniert auch das ({{W|RGB-Farbraum|RGB}}): actor.GetProperty().SetColor(0.0, 0.6, 0.0) Wie der Zylinder mit einer Textur versehen wird, zeigt folgendes Programm: import vtk import time cylinder = vtk.vtkCylinderSource() cylinder.SetResolution(30) cylinder.SetHeight(3.0) cylinder.SetRadius(1.0) cylinder.CappingOn() texture_coords = vtk.vtkTextureMapToCylinder() texture_coords.SetInputConnection(cylinder.GetOutputPort()) texture_coords.PreventSeamOn() reader = vtk.vtkJPEGReader() reader.SetFileName("PythonIng_textur.jpg") texture = vtk.vtkTexture() texture.SetInputConnection(reader.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(texture_coords.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.SetTexture(texture) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderer.AddActor(actor) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) renderWindow.Render() time.sleep(0.01) interactor.Start() <gallery> PythonIng_textur.jpg | Textur-Datei PythonIng_VTK_2.png | Ausgabe (Screenshot) </gallery> Nun aber genug von VTK und der Erstellung von Grafiken, weiter geht es mit mathematischeren Themen. = Vektoren und Matrizen = == Zahlenfolgen == Für das Erstellen von Zahlenfolgen bieten sich die Funktionen <code>arange</code> und <code>linspace</code> aus dem <code>numpy</code>-Modul an. from numpy import * start = 0 stop = 10 step = 2 num = 10 r = arange(start, stop, step) # step ... Schrittweite l = linspace(start, stop, num) # num ... Anzahl der Werte print("r = ", r) print("l = ", l) Ausgabe: r = [0 2 4 6 8] l = [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556 6.66666667 7.77777778 8.88888889 10. ] Bei <code>arange</code> ist der <code>stop</code>-Wert nicht im Ergebnis enthalten, bei <code>linspace</code> aber sehr wohl. == Vektoren == Vektoren sollten jedem aus der Linearen Algebra bekannt sein. === Arrays === In Python mit NumPy kann man Vektoren durch die Funktion array erzeugen. import numpy as np l1 = (-5, 3, 2) l2 = (1, 1, 4) a1 = np.array(l1) a2 = np.array(l2) a3 = a1 + a2 a4 = 2 * a2 print(a1) print(a2) print(a3) print(a3[2]) print(a4) Ausgabe: [-5 3 2] [1 1 4] [-4 4 6] 6 [2 2 8] === Zeilen- und Spaltenvektoren === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) print(z) print(s) Ausgabe: [ [-5 3 2] ] [[1] [1] [4]] === Skalarprodukt === import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) skalarprodukt = np.dot(a1, a2) print(skalarprodukt) Ausgabe: 6 === Vektorprodukt === <math>a\ast b=\left(\begin{array}{c} a_{1}\\ a_{2}\\ a_{3} \end{array}\right)\ast\left(\begin{array}{c} b_{1}\\ b_{2}\\ b_{3} \end{array}\right)=\left(\begin{array}{c} a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} \end{array}\right) </math> Python-Code: import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) vektorprodukt = np.cross(a1, a2) print(vektorprodukt) Ausgabe: [10 22 -8] === Transponierter Vektor === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) # transponierter Vektor z_tp = np.transpose(z) # transponierter Vektor s_tp = np.transpose(s) print(z_tp) print(s_tp) Ausgabe: [[-5] [ 3] [ 2]] [ [1 1 4] ] === Vektorfelder visualisieren === import matplotlib.pyplot as plt import numpy as np # Daten generieren x = np.arange(0, 10, 1) y = np.arange(0, 10, 1) X, Y = np.meshgrid(x, y) U = X * Y V = Y + X # Plotten fig, ax = plt.subplots() ax.quiver(X, Y, U, V, angles='xy') plt.show() Ausgabe: [[Datei:PythonIng_quiver1.png]] == Matrizen== import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) print(m1) Ausgabe: [[1 2 3] [4 5 6]] === Zugriff auf Matrizenelemente === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) # Element aus Zeile 2 und Spalte 3 (Achtung! Index startet bei Null) print(m1[1,2]) Ausgabe: 6 === Addition und Subtraktion von Matrizen === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) m2 = np.matrix([[0, 0, 2], [1, 3, 2]]) print(m1 + m2) print(m1 - m2) Ausgabe: [[1 2 5] [5 8 8]] [[1 2 1] [3 2 4]] === Transponierte Matrix === import numpy as np m = np.matrix([[1, 2, 3], [4, 5, 6]]) mt = np.transpose(m) print(m) print(mt) Ausgabe: [[1 2 3] [4 5 6]] [[1 4] [2 5] [3 6]] === Rang einer Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) rg = np.linalg.matrix_rank(m) print(rg) Ausgabe: 2 === Inverse Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) mi = np.linalg.inv(m) print(mi) Ausgabe: [[ 1. 0.6] [-0. -0.2]] === Multiplikation von Matrizen (falksches Schema) === import numpy as np m1 = np.matrix([[1, 3, 4], [0, -5, 1]]) m2 = np.matrix([[1, 2], [2, 3], [0, 2]]) print(m1 @ m2) Ausgabe: [[ 7 19] [-10 -13]] === Eigenwerte und Eigenvektoren === import numpy as np m = np.matrix([[5, 8], [1, 3]]) D,V = np.linalg.eig(m) # Eigenwerte print(D) # Eigenvektoren print(V) Ausgabe: [7. 1.] [[ 0.9701425 -0.89442719] [ 0.24253563 0.4472136 ]] === Teilmatrizen === import numpy as np m = np.matrix([[1, 3, 4], [0, -5, 1]]) print("m = ", m) # Erste Zeile extrahieren m1 = m[0,:] print("m1 = ", m1) # Das Element aus der 1. Zeile und der 2. Spalte extrahieren m2 = m[0,1] print("m2 = ", m2) # Zweite Spalte extrahieren m3 = m[:, 1] print("m3 = ", m3) Ausgabe: m = [[ 1 3 4] [ 0 -5 1]] m1 = [ [1 3 4] ] m2 = 3 m3 = [[ 3] [-5]] === Spezielle Matrizen === ==== Nullmatrix ==== import numpy as np z = np.zeros((3, 2)) print(z) Ausgabe: [[0. 0.] [0. 0.] [0. 0.]] ==== Einheitsmatrix ==== import numpy as np z = np.eye(3) print(z) Ausgabe: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ==== Matrix mit lauter Einsen ==== import numpy as np z = np.ones((3, 2)) print(z) Ausgabe: [[1. 1.] [1. 1.] [1. 1.]] === Spärlich besetzte Matrizen === Das Thema spärlich besetzter Matrizen wird hier nur kurz angerissen. Nähere Details siehe unter dem Weblink [https://docs.scipy.org/doc/scipy/reference/sparse.html#module-scipy.sparse]. import numpy as np import scipy A = scipy.sparse.csr_array(np.eye(5)) print(A) Ausgabe: (0, 0) 1.0 (1, 1) 1.0 (2, 2) 1.0 (3, 3) 1.0 (4, 4) 1.0 = Lineare Gleichungssysteme = Sei <math>Ax = b</math> ein lineares Gleichungssystem. <math>A</math> sei die Koeffizientenmatrix, <math>x</math> der Lösungsvektor und <math>b</math> ein bekannter Vektor. Beispiel: import numpy as np A = np.array([[5, 1], [0, 2]]) b = np.array([1, 2]) x = np.linalg.solve(A, b) print(x) Ausgabe: [0. 1.] Siehe dazu auch das Kapitel [[Ing Mathematik: Numerisches Lösen von linearen Gleichungssystemen]]. Dort wird dieses Themengebiet u.a. mit weitergehenden Python-Skripten vertieft. == Aufgabe == * Lösen Sie folgendes Gleichungssystem mittels Python (und zur Kontrolle auch händisch): 5x + 6y - 2z = 12 3x - y - 3z = 6 2x + 2y + 4z = 5 = Polynome = == Ein erstes einfaches Beispiel == Gegeben sei das Polynom <math>7x^3+5x^2+1</math>. In Python: import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p) Ausgabe: 3 2 7 x + 5 x + 1 == Einzelne Polynomwerte berechnen == import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p(1.5)) Ausgabe: 35.875 == Polynome integrieren und differenzieren == import numpy as np p = np.poly1d([7, 5, 0, 1]) # 1. Ableitung p1 = p.deriv() p2 = p.deriv(1) # 2. Ableitung p3 = p.deriv(2) # Integral p4 = p.integ() print(p1) print(p2) print(p3) print(p4) Ausgabe: 2 21 x + 10 x 2 21 x + 10 x 42 x + 10 4 3 1.75 x + 1.667 x + 1 x == Nullstellen bestimmen == import numpy as np p = np.poly1d([2, 5, 0, 4]) r = np.roots(p) print(r) Ausgabe: [-2.7621427 +0.j 0.13107135+0.84077099j 0.13107135-0.84077099j] == Aufgaben == * Berechnen Sie den Wert für x = 3 des Polynoms <math>y = 2x^4 - 3x^3 - x + 7</math>. * Differenzieren und integrieren Sie das Polynom <math>y = 2x^4 - 3x^3 - x + 7</math>. * Berechnen Sie die Nullstellen von <math>y = 7x^5 - 3x^2 + 12</math>. = Nichtlineare Gleichungen und Gleichungssysteme = == Nullstellenbestimmung == Löse eine beliebige Gleichung f(x) = 0, z.B. <math> f(x) = x^2 - 5\cos(x) - 10 = 0 </math>: import scipy import numpy as np def f(x): return x**2 - 5*np.cos(x) - 10 xstart = [-1, 1] # Startwerte xn = scipy.optimize.root(f, xstart) print(xn.x) Ausgabe: [-2.46813009 2.46813009] Funktionsgraph: [[Datei:octave_nichtlin2.jpg]] == Gleichungssysteme == SymPy ist ein externes Modul, das symbolisches Rechnen ('''Sym'''bolic '''Py'''thon) ermöglicht. Folgende Aufgabe ist dem Buch "Knorrenschild: Numerische Mathematik, Hanser, 2017, Seite 72" entnommen. Zu lösen ist das nichtlineare Gleichungssystem <math>f_1 = 2x_1 + 4x_2 = 0 </math> <math>f_2 = 4x_1 + 8x_2^3 = 0</math> Mit Python ist das so möglich: import sympy x1, x2 = sympy.symbols("x1 x2") f1 = 2*x1 + 4*x2 f2 = 4*x1 + 8*x2**3 s = sympy.solve((f1, f2), x1, x2) print(s) Ausgabe: [(-2, 1), (0, 0), (2, -1)] Plot: [[Datei:IngPython_nl_gleichung1.svg|500px]] = Komplexe Zahlen = Die imaginäre Einheit wird in Python durch den Buchstaben <code>j</code> symbolisiert. Darstellen kann man eine komplexe Zahl bekannterweise in mehreren Formen: * Kartesische Darstellung <math>z = \Re(z) + j \cdot \Im(z)</math> * Polardarstellungen <math>z = r \cdot (\cos(\phi) + j \cdot \sin(\phi)) = r \cdot e^{j\cdot \phi}</math> Die konjugiert komplexe Zahl ist <math>z^* = \Re(z) - j \cdot \Im(z)</math> Nachfolgend einige mathematische Operationen mit Python und NumPy. import numpy as np z1 = 2 + 5j # kartesische Darstellung z2 = 3 * np.exp(3j) # Polardarstellung # Addition res = z1 + z2 print("z1 + z2 = ", res) # Multiplikation res = z1 * z2 print("z1 * z2 = ", res) # Realteil res = np.real(z2) print("Realteil von z2 = ", res) # Imaginärteil res = np.imag(z2) print("Imaginaerteil von z2 = ", res) # Betrag res = np.abs(z1) print("Betrag von z1 = ", res) # Argument res = np.angle(z1) print("Argument von z1 = ", res) # Konjugiert komplexe Zahl res = np.conj(z1) print("Konjugiert komplexe Zahl von z1 = ", res) Ausgabe: z1 + z2 = (-0.9699774898013365+5.423360024179601j) z1 * z2 = (-8.05675510050068-14.003167400647481j) Realteil von z2 = -2.9699774898013365 Imaginaerteil von z2 = 0.4233600241796016 Betrag von z1 = 5.385164807134504 Argument von z1 = 1.1902899496825317 Konjugiert komplexe Zahl von z1 = (2-5j) = Interpolation = import numpy as np import scipy import matplotlib.pyplot as plt # Stützpunkte xp = np.arange(1, 6) yp = (0, -5, 2, 7, 6) ti = np.arange(1, 5, 0.01) i1 = scipy.interpolate.interp1d(xp, yp, kind = "linear") i2 = scipy.interpolate.interp1d(xp, yp, kind = "cubic") plt.plot(xp, yp, "rx") plt.plot(xp, i1(xp)) plt.plot(ti, i2(ti)) plt.show() Ausgabe: [[Datei:PythonIng_interpol1.png]] = Differenzialrechnung = == Numerisches Differenzieren == Als Beispiel differenzieren wir <math>y = 5x\sin{x}</math> und stellen das Ganze grafisch dar. from findiff import Diff import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 1000) f = 5 * x * np.sin(x) dx = x[1] - x[0] # Ableitung d_dx = Diff(0, dx) df_dx = d_dx(f) # Grafik plt.plot(x, f, label = "y") plt.plot(x, df_dx, label = "y'") plt.grid() plt.legend(loc="best") plt.show() Ausgabe: [[Datei:octave_diff1.jpg]] <small>findiff ist ein externes Modul. Dieses muss installiert werden (z.B. so: ...\Python\Scripts\pip.exe install --upgrade findiff). Für die Vorgehensweise unter openSUSE Tumbleweed siehe das Kapitel [[Ing_Mathematik:_Python#Mit_VPython | VPython]], nur dass das Ganze mit einer aktuelleren Python-Version exekutiert wird, z.B. mit Python 3.13. Das im Buch "Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler, Rheinwerk" verwendete Modul "scipy.misc" ist veraltet (deprecated ... missbilligt). Lt. [https://docs.scipy.org/doc/scipy-1.17.0/dev/roadmap-detailed.html#misc SciPy-Dokumentation für die Version 1.17.0] wurden alle entsprechenden Features schon entfernt.</small> == Symbolisches Differenzieren == Differenzieren Sie die Funktionen <math>f_1(x) = x^2</math> und <math>f_2(x) = \sin(x)\cos\left(\frac{x}{2}\right)</math>. import sympy x = sympy.symbols("x") f1 = x**2; f2 = sympy.sin(x) * sympy.cos(x/2.) d1 = sympy.diff(f1, x) d2 = sympy.diff(f2, x) print(d1) print(d2) Ausgabe: 2*x -0.5*sin(0.5*x)*sin(x) + cos(0.5*x)*cos(x) == Aufgaben == * Differenzieren Sie die Funktion <math>y = \log(x) + 10x</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. * Differenzieren Sie die Funktion <math>y = \frac{\sinh(x)}{(1+x)}</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. = Integralrechnung = == Numerisches Integrieren == Berechnen Sie das Integral <math>\int_{0}^{3}x^2 dx</math>. import scipy def f(x): return x**2 i = scipy.integrate.quad(f, 0, 3) print(i) Ausgabe: (9.000000000000002, 9.992007221626411e-14) Das trifft den exakten Wert 9.0 ziemlich genau. Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} dx</math>. import scipy import numpy as np def f(x): return 2**(-x) i = scipy.integrate.quad(f, 0, np.inf) print(i) Ausgabe: (1.4426950408889556, 4.486558477977586e-09) == Symbolisches Integrieren == Berechnen Sie <math>\int x^2 \text{d}x</math> und <math>\int \sin{x}\cos{\frac{x}{2}} \text{d}x</math>. import sympy x = sympy.symbols("x") f1 = x**2 f2 = sympy.sin(x) * sympy.cos(x/2.) i1 = sympy.integrate(f1, x) i2 = sympy.integrate(f2, x) print(i1) print(i2) Ausgabe: x**3/3 -0.666666666666667*sin(0.5*x)*sin(x) - 1.33333333333333*cos(0.5*x)*cos(x) Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} \text{d}x</math>. import sympy x = sympy.symbols("x") f = 2**(-x) i = sympy.integrate(f, (x, 0, sympy.oo)) print(i) Ausgabe: 1/log(2) <code>sympy.oo</code> steht für das {{W|Unendlichzeichen}} <math>\infty</math> (die liegende Acht oder das Möbiusband). Mit <code>sympy.pprint(i)</code> ließe sich letzere Ausgabe etwas schöner schreiben: 1 ────── log(2) Man beachtete, <code>log</code> steht hier für den natürlichen Logarithmus <code>ln</code>. == Aufgaben == * Integrieren Sie die Funktion <math>y = \log(x) + 10x</math> von 1 bis 5. * Integrieren Sie die Funktion <math>y = x^3</math> von 0 bis 4. * Integrieren Sie <math>\int x^x(\log (x) + 1)\mathrm dx</math> symbolisch. = Gewöhnliche Differenzialgleichungen = == DGL numerisch lösen == Für die Lösung von Differenzialgleichungen steht u.a. die Funktion scipy.integrate.solve_ivp() zur Verfügung. Diese Funktion implementiert auch das Runge-Kutta-Verfahren (RK45). {{Wikipedia | Runge-Kutta-Verfahren}} Beispiel <math>y' = x^2 + y^3</math>: import scipy import numpy as np import matplotlib.pyplot as plt def dy_dx(x, y): return x**2 + y**3 y0 = [1] xi = [0, 1] x = np.arange(0, 1, 0.01) z = scipy.integrate.solve_ivp(dy_dx, xi, y0, method="RK45", dense_output=True) y = z.sol(x) plt.plot(x, y.T) plt.grid() plt.show() [[Datei:PythonIng_dgl1.png]] == DGL symbolisch lösen == Beispiel <math>y' = x^2 + y^3</math>: import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) print(lsg) Ausgabe: [Eq(f(x), (-x**2)**(1/3)), Eq(f(x), (-x**2)**(1/3)*(-1 - sqrt(3)*I)/2), Eq(f(x), (-x**2)**(1/3)*(-1 + sqrt(3)*I)/2)] Mit <code>sympy.pprint</code> (pretty print) lässt sich die Ausgabe etwas übersichtlicher darstellen. import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) sympy.pprint(lsg) Ausgabe: ⎡ _____ _____ ⎤ ⎢ _____ 3 ╱ 2 3 ╱ 2 ⎥ ⎢ 3 ╱ 2 ╲╱ -x ⋅(-1 - √3⋅ⅈ) ╲╱ -x ⋅(-1 + √3⋅ⅈ)⎥ ⎢f(x) = ╲╱ -x , f(x) = ────────────────────, f(x) = ────────────────────⎥ ⎣ 2 2 ⎦ == Aufgaben == * Lösen Sie die Differenzialgleichung <math>y' = \frac{1}{x\cdot y}</math> mit Python. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>m' = -k\cdot m</math>. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>y' = \sqrt{|y|}</math>. =Laplace-Transformation= Laplace-Transformation: <math>F(s) =\mathcal{L} \left\{f\right\}(s) = \int_{0}^{\infty} f(t) \mathrm e^{-st} \,\mathrm{d}t, \qquad s\in\mathbb{C} </math> Inverse Laplace-Transformation: <math>\mathcal{L}^{-1} \left\{F\right\}(t) = \frac{1}{2 \pi \mathrm j} \int_{ \gamma - \mathrm j \infty}^{ \gamma + \mathrm j \infty} \mathrm e^{st} F(s)\,\mathrm ds = \begin{cases} f(t) & \text{für } t \geq 0 \\ 0 & \text{für } t < 0 \end{cases} </math> Siehe auch [[Ing_Mathematik:_Laplace-Transformation]] Code: import sympy from sympy.abc import t, s # Laplace-Transformation der Funktion f(t) = 1 (Heaviside-Fkt.) f = 1 # alternativ: f = sympy.Heaviside(t) F = sympy.laplace_transform(f, t, s, noconds=True) print("Laplace-Transformierte F(s):", F) # Inverse Laplace-Transformation zurück in den Zeitbereich f_inv = sympy.inverse_laplace_transform(F, s, t) print("Inverse Transformation f(t):", f_inv) Ausgabe: Laplace-Transformierte F(s): 1/s Inverse Transformation f(t): Heaviside(t) Die Zeile from sympy.abc import t, s steht alternativ für t = sympy.symbols("t") s = sympy.symbols("s") =Fourier-Reihen= <math> f(x)\approx \frac{a_{0}}{2}+\sum_{k=1}^{\infty}\left(a_{k}\cos\left(kx\right)+b_{k}\sin\left(kx\right)\right) </math> <math> a_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\cos\left(kx\right)\mathrm dx\quad\text{für }k\geq0 </math> <math> b_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\sin\left(kx\right)\mathrm dx\quad\text{für }k\geq1 </math> Für die Sägezahnfunktion <math>y=x;\, 0 < x < 2\pi</math> sei die Fourierreihe mit einem Python-Programm (unter Mithilfe von sympy) hergeleitet. Code: from sympy import fourier_series, pi, symbols, pprint x = symbols('x') f = x s = fourier_series(f, (x, 0, 2*pi)) pprint(s.truncate(n=4)) Ausgabe: 2⋅sin(3⋅x) -2⋅sin(x) - sin(2⋅x) - ────────── + π 3 Siehe auch [[Ing Mathematik: Fourierreihen]]. Ein komplizierteres Beispiel: [[Datei:IngMath fourier bsp13.svg | 300px]] <math>0\le t < T/2\text{:}\quad f(t) = H</math> <math>T/2 \le t \le T\text{:}\quad f(t) = \frac{2H}{T}\left( t-\frac{T}{2}\right)</math> Code: import sympy as sp H = sp.Symbol('H', positive=True) T = sp.Symbol('T', positive=True) t = sp.Symbol('t') f = sp.Piecewise( (H, (t > 0) & (t < T/2)), (2*H/T*(t-T/2), (t > T/2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Ausgabe: ⎛2⋅π⋅t⎞ ⎛4⋅π⋅t⎞ ⎛6⋅π⋅t⎞ ⎛2⋅π⋅t⎞ ⎛6⋅π⋅t⎞ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ 2⋅H⋅cos⎜─────⎟ 2⋅H⋅cos⎜─────⎟ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ 3⋅H ──────────── - ──────────── + ──────────── + ────────────── + ────────────── + ─── π 2⋅π 3⋅π 2 2 4 π 9⋅π =Rechnen mit wirklich großen Zahlen= Bekannt ist, dass Python kaum Einschränkungen beim Wertebereich von Ganzzahlen hat, z.B. print(10**300) Ausgabe (gekürzt): 100000000000000000000...00000000000000000000000000000000000000000000000000000000000000000000000 Ähnliches geht auch mit Gleitpunktzahlen, z.B. durch die Verwendung des Moduls mpmath: import mpmath print(mpmath.mpf(1500.4)**mpmath.mpf(300)) Ausgabe: 7.27975299218612e+952 Anderes Beispiel: from mpmath import mp, pi mp.dps = 100 print(pi) Ausgabe: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068 mpmath kann noch einiges mehr, dazu sei aber auf die entsprechende Dokumentation auf der mpmath-Homepage verwiesen. mpmath ist Bestandteil von SymPy, kann aber auch separat installiert werden. Aber auch Python selbst besitzt eine Möglichkeit, um mit großen bzw. exakten Gleitpunktzahlen zu rechnen, nämlich das interne Modul decimal. Dieses hat einige Vorteile gegenüber mpmath, aber auch gravierende Nachteile. Diese seien hier nicht detailliert aufgezählt. Grob gesagt hat decimal im Finanzwesen seine Berechtigung. Für wissenschaftliche Anwendungen wird aber mpmath vorzuziehen sein, da es u.a. vielfältige mathematische Funktionen bereit stellt. Nachfolgend ein einfaches Beispiel mit decimal: import decimal print("Potenzierung:", decimal.Decimal(1500.4) ** decimal.Decimal(300.0)) print("Einfache Addition:", 0.1 + 0.2) decimal.getcontext().prec = 50 print("Addition mit decimal:", decimal.Decimal("0.1") + decimal.Decimal("0.2")) Ausgabe: Potenzierung: 7.279752992186121551039839134E+952 Einfache Addition: 0.30000000000000004 Addition mit decimal: 0.3 <u>Aufgabe:</u> Recherchieren Sie im Internet die genauen Vor- und Nachteile von decimal und mpmath. Verwenden Sie dazu auch KI (z.B. von Google, chatgpt). =Regelungstechnische Aufgabenstellungen= Für regelungstechnische Aufgaben gibt es u.a. das externe Paket <code>control</code>. Hier soll nicht detailliert darauf eingegangen werden. Anhand eines Beispiels soll anschließend nur die Visualisierung in Form eines Bode-Diagramms und der Sprungantwort gezeigt werden. Gegeben sei ein P-Regler mit <math>R = \frac{5}{2}</math> und eine Strecke <math>S= \frac{1}{30s^3+20s^2+10s+1,5}</math>. Gesucht sei vorerst ein Bode-Diagramm für den offenen Regelkreis und das Führungsverhalten. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke # oder: G0 = ct.series(regler, strecke) Gw = ct.feedback(G0) ct.bode_plot(G0, label='G0') ct.bode_plot(Gw, label='Gw') plt.show() [[Datei:PythonIng_bode1.svg]] Nun noch für obiges Beispiel die Sprungantwort. Diese zeigt einige große Überschwinger, d.h. der Regler kann sicher noch optimiert werden. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke Gw = ct.feedback(G0) t, y = ct.step_response(Gw) plt.plot(t,y) plt.title('Sprungantwort') plt.xlabel('t') plt.ylabel('h(t)') plt.grid() plt.show() [[Datei:PythonIng_bode3.svg]] Einige weitere wichtige Daten (Phasenreserve, Amplitudenreserve, Durchtrittsfrequenz) lassen sich mittels der <code>control</code>-Funktion <code>margin()</code> ermitteln. Die Ortskurve lässt sich mit der Funktion <code>nyquist_plot()</code> zeichnen. Dies sei hier aber nicht weiter ausgeführt. ==Aufgaben== * Zeichen Sie mit Python die Ortskurve für obiges Beispiel. * Was passiert, wenn man die Reglerverstärkung weiter aufdreht (z.B. auf <math>R = \frac{25}{2}</math>)? * Wie sehen das Bode-Diagramm und die Sprungantwort aus, wenn ein PI-Regler verwendet wird? = Stereostatik etc. = Das Modul SymPy bietet einige Möglichkeiten einfache Bauwerke zu berechnen, z.B. Balken oder Fachwerke. Nachfolgend wird ein einfaches Fachwerk berechnet und gezeichnet. Python-Code: from sympy.physics.continuum_mechanics.truss import Truss t = Truss() # Knoten t.add_node(("A", -3, 0), ("B", 0, 0), ("C", 4, 0), ("D", 7, 0), ("E", 6, 1.5), ("F", 2, 3), ("G", -2, 1.5)) # Stäbe t.add_member(("AB","A","B"), ("BC","B","C"), ("CD","C","D")) t.add_member(("AG","A","G"), ("GB","G","B"), ("GF","G","F")) t.add_member(("BF","B","F"), ("FC","F","C"), ("CE","C","E")) t.add_member(("FE","F","E"), ("DE","D","E")) # Auflager; roller ... Loslager, pinned ... Festlager t.apply_support(("A","roller"), ("D","pinned")) # Einwirkende Kräfte t.apply_load(("G", 5, 270), ("E", 3, 90)) # Berechnung t.solve() print("Reaction Forces: ", t.reaction_loads) print("Internal Forces: ", t.internal_forces) # Fachwerk zeichnen p = t.draw() p.show() Ausgabe auf der Konsole: Reaction Forces: {'R_A_y': 4.20000000000000, 'R_D_x': 0, 'R_D_y': -2.20000000000000} Internal Forces: {'AB': 2.80000000000000, 'BC': 0.333333333333333, 'CD': -1.46666666666667, 'AG': -5.04777178564958, 'GB': -2.05555555555556, 'GF': -1.23413387432364, 'BF': 0.411111111111111*sqrt(13), 'FC': -0.3*sqrt(13), 'CE': 1.50000000000000, 'FE': 0.284800124843917, 'DE': 2.64407093534026} Zeichnung: [[File:PythonIng_fachwerk1.svg|300px]] Details zu diesem Thema siehe z.B. [https://docs.sympy.org/latest/modules/physics/continuum_mechanics/index.html Continuum Mechanics] oder [https://docs.sympy.org/latest/tutorials/physics/continuum_mechanics/index.html Continuum Mechanics Tutorials]. Auch andere mechanische Probleme werden von SymPy abgehandelt ([https://docs.sympy.org/latest/tutorials/physics/index.html Physics Tutorials]). == Aufgabe == Gegeben sei ein einseitig eingespannter Kragträger. Belastet wird er durch eine Einzellast am Trägerende. Für die Daten siehe folgende ASCII-Skizze: | 20 kN //|---> x | //| V //|---------------------- //| 10 m | Elastizitätsmodul E = 2,1*10⁵ N/mm² Flächenträgheitsmoment I = 0.001 m⁴ Berechnen Sie die Auflagerreaktionen, den Querkraft- und Biegemomentenverlauf, sowie die Verformungen. Stellen Sie dies mit Hilfe von SymPy graphisch und auch mittels Formeln dar. Verwenden Sie dazu auch pprint (pretty print) aus dem SymPy-Modul. Zwecks Lösungsansatz siehe die oben aufgeführte Seite "Continuum Mechanics Tutorials". Achten Sie auch auf die Einheiten! Kontrollieren Sie das Ganze mittels händischer Rechnung. In dem genannten Tutorial ist von "Singularity Functions" die Rede. Gemeint ist damit in diesem Kontext die {{W|Föppl-Klammer}}. Einige Python-Programme, vorrangig zu Maschinenelementen, finden sich auf [https://baymp.de/download_python.html BayMP für Python] (Balken, Zahnräder, Stabknickung usw.). =Thermodynamik= == PYroMat == Für thermodynamische Aufgabenstellungen gibt es verschiedene externe Module. Eines davon ist PYroMat (siehe auch [http://pyromat.org]). Damit lassen sich thermodynamische Stoffdaten für viele Substanzen berechnen. Beispiel (einige Stoffdaten für Wasser bei 400°C und 20 bar berechnen): import pyromat as pm # Wasserdaten laden: H2O = pm.get('mp.H2O') # Stoffdaten berechnen: T = 673.15 # Temperatur in Kelvin p = 20 # Druck in bar v = H2O.v(T, p) h = H2O.h(T, p) s = H2O.s(T, p) print(f"Spezifisches Volumen: {v} m³/kg") print(f"Spezifische Enthalpie: {h} kJ/kg") print(f"Spezifische Entropie: {s} kJ/(kg K)") Ausgabe: Spezifisches Volumen: [0.1512163] m³/kg Spezifische Enthalpie: [3248.3789473] kJ/kg Spezifische Entropie: [7.12924142] kJ/(kg K) <small> PYroMat muss vorab installiert werden (z.B. mittels pip, in eine virtuelle Umgebung) </small> <code>mp</code> steht für "multi phase". Für ein ideales Gas wäre <code>ig</code> zuständig, z.B. <code>'ig.O2'</code>. Beispiel (T-s-Diagramm für Wasser zeichnen): import numpy as np import matplotlib.pyplot as plt import pyromat as pm # Konfigurieren pm.config["unit_pressure"] = "bar" pm.config["unit_temperature"] = "K" fluid = pm.get("mp.H2O") # Temperaturbereich für das Nassdampfgebiet T_tripel = 273.16 T_crit = 647.096 T = np.linspace(T_tripel, T_crit - 0.1, 200) # Sättigungslinien berechnen und zeichnen for x in np.linspace(0.0, 1.0, 5): s = fluid.s(T=T, x=x) if(x<=0.0): plt.plot(s, T, label="Siedelinie x=%3.1f" % x, linewidth=2.0) elif(x>=1.0): plt.plot(s, T, label="Taulinie x=%3.1f" % x, linewidth=2.0) else: plt.plot(s, T, label="x=%3.1f" % x, linewidth=1.0) # Isobaren zeichnen p_values = [0.1, 1, 10, 50, 100] T_isobar = np.linspace(T_tripel, 1000, 200) t = 0.7 for p in p_values: s_iso = fluid.s(T=T_isobar, p=p) plt.plot(s_iso, T_isobar, 'k-', alpha=0.8, linewidth=0.8) t += .05 idx = int(len(s_iso) * t) plt.text(s_iso[idx], T_isobar[idx], f"{p} bar", fontsize=9, alpha=0.8) # Diagramm zeichnen plt.title("T-s-Diagramm für Wasser") plt.xlabel("Spezifische Entropie s in kJ/kg K", fontsize=10) plt.ylabel("Temperatur T in K", fontsize=10) plt.legend(loc="best") plt.grid(True) plt.show() Ausgabe (in etwa so): [[Datei:T-s-Diagramm fuer Wasser.svg|400px]] == CoolProp == Auch mit CoolProp können Stoffdaten berechnet werden. Siehe auch [https://coolprop.org/coolprop/wrappers/Python/index.html] Beispiel (Wasser bei 20bar und 400°C): import CoolProp.CoolProp as CP fluid = 'Water' T = 673.15 # Temperatur in Kelvin P = 20e5 # Druck in Pascal dichte = CP.PropsSI('D', 'T', T, 'P', P, fluid) enthalpie = CP.PropsSI('H', 'T', T, 'P', P, fluid) entropie = CP.PropsSI('S', 'T', T, 'P', P, fluid) print(f"Spez. Volumen: {1/dichte:.6f} m³/kg") print(f"Spez. Enthalpie: {enthalpie:.2f} J/kg") print(f"Spez. Entropie: {entropie:.2f} J/kgK") Ausgabe: Spez. Volumen: 0.151215 m³/kg Spez. Enthalpie: 3248344.02 J/kg Spez. Entropie: 7129.16 J/kgK == iapws == Um Werte für Wasser(dampf) zu erhalten (IAPWS; '''I'''nternational '''A'''ssociation for the '''P'''roperties of '''W'''ater and '''S'''team) gibt es die Bibliothek iapws. Siehe auch [https://iapws.org/] und [https://pypi.org/project/iapws/] Beispiel (Wasser für 20bar und 400°C): from iapws import IAPWS97 dampf = IAPWS97(P=2.0, T=673.15) print(f"Spezifisches Volumen: {dampf.v:.6f} m³/kg") print(f"Spezifische Enthalpie: {dampf.h:.2f} kJ/kg") print(f"Spezifische Entropie: {dampf.s:.4f} kJ/(kgK)") print(f"Phase: {dampf.phase}") Ausgabe: Spezifisches Volumen: 0.151208 m³/kg Spezifische Enthalpie: 3248.23 kJ/kg Spezifische Entropie: 7.1290 kJ/(kgK) Phase: Gas == TESPy == Ein anderes Modul für einen anderen Aufgabenzweck ist TESPy ('''T'''hermal '''E'''ngineering '''S'''ystems in '''Py'''thon). Dieses Modul ist für die Anlagensimulation zuständig. Für nähere Informationen siehe [https://tespy.readthedocs.io/en/main/getting_started/introduction.html]. Als Beipiel sei hier vorerst Code, der von der Google KI generiert wurde, angeführt. Der Code wurde überarbeitet, damit keine Warnungen auftreten. Bitte aber den Code trotzdem mit Vorsicht genießen, auch KI-generierter Code kann Fehler aufweisen. Eine Pumpe wird berechnet: from tespy.components import Sink, Source, Pump from tespy.connections import Connection from tespy.networks import Network # 1. Netzwerk definieren (Zentrales Steuerungselement) # Wir wählen Wasser als Fluid und bar/Celsius als Einheiten nw = Network(fluids=["water"]) nw.units.set_defaults(pressure="bar", pressure_difference="bar", temperature="°C", enthalpy="kJ / kg") # 2. Komponenten erstellen eingang = Source("Wasserquelle") ausgang = Sink("Wasserspeicher") pumpe = Pump("Speisewasserpumpe") # 3. Verbindungen definieren (Komponenten miteinander verknüpfen) c1 = Connection(eingang, "out1", pumpe, "in1") c2 = Connection(pumpe, "out1", ausgang, "in1") # Verbindungen dem Netzwerk hinzufügen nw.add_conns(c1, c2) # 4. Randbedingungen und Parameter festlegen # Zustand am Eingang (Druck, Temperatur, Massenstrom, Fluid-Zusammensetzung) c1.set_attr( v=1, # Massenstrom: 1 kg/s T=20, # Temperatur: 20 °C p=1, # Druck: 1 bar fluid={"water": 1}, # 100% Wasser ) # Zustand am Ausgang / Zielwerte der Pumpe c2.set_attr(p=10) # Ziel-Druck nach der Pumpe: 10 bar # Pumpeneigenschaften festlegen pumpe.set_attr(eta_s=0.8) # Isentroper Wirkungsgrad von 80% # 5. Simulation ausführen nw.solve(mode="design") # 6. Ergebnisse ausgeben nw.print_results() # Spezifische Werte direkt auslesen print("\n--- Auswertung ---") print(f"Erforderliche Pumpenleistung: {pumpe.P.val / 1000:.2f} kW") print(f"Temperatur nach der Pumpe: {c2.T.val:.2f} °C") Ausgabe (gekürzt): iter | residual | progress | massflow | pressure | enthalpy | fluid | component -------+------------+------------+------------+------------+------------+------------+------------ 1 | 7.04e+04 | 12 % | 9.96e+02 | 0.00e+00 | 8.81e+04 | 0.00e+00 | 0.00e+00 2 | 5.91e-12 | 100 % | 1.11e-13 | 0.00e+00 | 7.39e-12 | 0.00e+00 | 0.00e+00 3 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 4 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 Total iterations: 4, Calculation time: 0.01 s, Iterations per second: 480.85 ##### RESULTS (Pump) ##### +-------------------+----------+----------+-----------+----------+----------+----------+ | | P | pr | dp | eta | eta_s | head | |-------------------+----------+----------+-----------+----------+----------+----------| | Speisewasserpumpe | 1.12e+06 | 1.00e+01 | -9.00e+00 | 8.00e-01 | 8.00e-01 | 9.19e+01 | +-------------------+----------+----------+-----------+----------+----------+----------+ ... ... --- Auswertung --- Erforderliche Pumpenleistung: 1124.77 kW Temperatur nach der Pumpe: 20.07 °C = Stochastik = Die {{W|Stochastik}} ist ein sehr weites Feld. Hier werden etliche wichtige Themen kurz angerissen. Python stellt mit den Moduln math und statistics Software zu diesem Zwecke bereit. math und statistics sind bereits im Lieferumfang von Python enthalten. Aber auch mit den externen Modulen NumPy, SciPy, stochastic und pandas kann man Stochastik in Python betreiben. Die Theorie der Wahrscheinlichkeitsrechnung und Statistik soll etwas später in Band 5 dieser Buchreihe behandelt werden. == Lageparameter == import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] m1 = statistics.mean(werte) m2 = statistics.mode(werte) m3 = statistics.median(werte) print("Arithmetischer Mittelwert = ", m1) print("Modalwert = ", m2) print("Median = ", m3) Ausgabe: Arithmetischer Mittelwert = 3.5 Modalwert = 1 Median = 3.0 == Streuungsparameter == Beispiel (Berechnung der Standardabweichung): import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] s = statistics.stdev(werte) print("Standardabweichung = ", s) Ausgabe: Standardabweichung = 2.6770630673681683 Beispiel (Berechnung des Variationskoeffizienten V = Standardabweichung/Mittelwert) import numpy as np from scipy import stats import statistics k = 50 dat1 = [14, 21, 18, 25, 30, 17, 20] dat = np.array(dat1) # Mit SciPy v = stats.variation(dat) vddof = stats.variation(dat, ddof=1) print("V SciPy: ", v) print("V DDOF SciPy: ", vddof) print(k*"-") # mit NumPy mittelwert1 = np.mean(dat) std_abw1 = np.std(dat) std_abw1ddof = np.std(dat, ddof=1) v1= std_abw1 / mittelwert1 v1ddof = std_abw1ddof / mittelwert1 print("Mittelwert NumPy: ", mittelwert1) print("Std.abw. NumPy: ", std_abw1) print("Std.abw. DDOF NumPy: ", std_abw1ddof) print("V NumPy: ", v1) print("V DDOF NumPy: ", v1ddof) print(k*"-") # nur mit reinem Python mittelwert2 = statistics.mean(dat1) std_abw2 = statistics.stdev(dat1) v2 = std_abw2 / mittelwert2 print("Mittelwert Python: ", mittelwert2) print("Std.abw. Python: ", std_abw2) print("V Python:", v2) print(k*"-") Ausgabe: V SciPy: 0.23890355966467272 V DDOF SciPy: 0.25804533701889254 -------------------------------------------------- Mittelwert NumPy: 20.714285714285715 Std.abw. NumPy: 4.948716593053935 Std.abw. DDOF NumPy: 5.3452248382484875 V NumPy: 0.23890355966467272 V DDOF NumPy: 0.2580453370188925 -------------------------------------------------- Mittelwert Python: 20.714285714285715 Std.abw. Python: 5.3452248382484875 V Python: 0.2580453370188925 -------------------------------------------------- Der Unterschied bei der Standardabweichung zwischen reinem Python und den externen Bibliotheken SciPy und NumPy entsteht dadurch, dass einmal durch (n-1) und das andere Mal nur durch n dividiert wird. Dies kann bei NumPy und SciPy dadurch entschärft werden, indem <code>ddof=1</code> gesetzt wird. ddof steht für '''D'''elta '''D'''egrees '''o'''f '''F'''reedom. <small>Je größer die Anzahl der Datensätze n wird, umso weniger spielt das eine Rolle.</small> == Kombinatorik == Beispiel: import math n = 7 k = 5 print("n! = ", math.factorial(n)) print("Kombinationen (n über k) = ", math.comb(n, k)) Ausgabe: n! = 5040 Kombinationen (n über k) = 21 Siehe zu diesem Thema auch [[Ing Mathematik: Permutationen, Kombinationen, binomischer Lehrsatz]]. Die Anzahlen lassen sich einfach aus den dortigen Formeln ermitteln, z.B. bei Permutationen mit <math>n!</math> oder Variationen mit Wiederholungen als <math>n^k</math>. Will man die Kombinationen oder Variationen aber auch als Liste ausgeben, so kann das Modul <code>itertools</code> nützlich sein. Beispiel (Variationen ohne Wiederholung): from itertools import permutations menge = ["A", "B", "C", "D"] # n = 4 k = 3 variationen = list(permutations(menge, k)) for v in variationen: print("".join(v)) print(50*"-") print(len(variationen)) Ausgabe (gekürzt): ABC ABD ACB ... DCA DCB -------------------------------------------------- 24 Siehe zum Modul <code>itertools</code> auch die Website [https://docs.python.org/3/library/itertools.html]. * Variationen mit Wiederholung: <code>itertools.product()</code> * Kombinationen ohne Wiederholung: <code>itertools.combinations()</code> * Kombinationen mit Wiederholung: <code>itertools.combinations_with_replacement()</code> == Zufallszahlen == Beispiel: import random # Ganzzahlige Zufallszahl von 1 bis 10 zufallszahl1 = random.randint(1, 10) # Gleitpunktzahlen # zwischen 0.0 und 1.0 zufallszahl2 = random.random() # Zahl zwischen 1.5 und 9.5 zufallszahl3 = random.uniform(1.5, 9.5) # aus Liste auswählen farbe = ["Rot", "Grün", "Blau"] zufallswert = random.choice(farbe) print(zufallszahl1) print(zufallszahl2) print(zufallszahl3) print(zufallswert) Ausgabe, z.B.: 5 0.14147945849015753 6.894003397570905 Rot Benötigt man mehrere Zufallszahlen, so ist das Modul <code>numpy</code> zu bevorzugen, z.B.: * Normalverteilung: <code>np.random.normal(...)</code> * Gleichverteilung: <code>np.random.uniform(...)</code> == Histogramm == Zum Thema Histogramm siehe {{W|Histogramm}}. Beispiel (mit Matplotlib): import matplotlib.pyplot as plt import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) plt.hist(daten, bins=25, edgecolor='darkgray') plt.show() Ausgabe: [[Datei:IngMath_histogramm.svg|300px]] Beispiel (mit Seaborn): import matplotlib.pyplot as plt import seaborn as sns import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) sns.set_theme(style="darkgrid") sns.histplot(data=daten) plt.show() Ausgabe: [[Datei:IngMath_histogramm2.svg|300px]] Das Kürzel <code>sns</code> ist Konvention und steht für die fiktive Figur '''S'''amuel '''N'''orman '''S'''eaborn aus der US-Fernsehserie {{W|The West Wing – Im Zentrum der Macht | The West Wing}}. == Box-Plot == [[File:Elements of a boxplot.svg|400px]] Siehe auch {{W|Box-Plot}}. Beispiel (mit Seaborn erstellt): import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset("tips") sns.boxplot(data=df, x="day", y="tip", hue="day", legend=False) plt.show() Ausgabe: [[Datei:IngMath_boxplot.svg|400px]] Beispiel (mit Matplotlib erstellt): import matplotlib.pyplot as plt daten = [12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25] plt.boxplot(daten, patch_artist=True) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() Ausgabe: [[Datei:IngMath_boxplot2.svg|300px]] Um mehrere Box-Plots unterschiedlicher Farbe mit Matplotlib in einem Diagramm zu zeichnen, können Sie folgendermaßen vorgehen: import matplotlib.pyplot as plt daten = [[12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25], [10, 19, 20, 21, 20, 30, 19, 40, 11, 17, 19, 21]] farben = ["green", "blue"] boxplot = plt.boxplot(daten, patch_artist=True) for patch, farbe in zip(boxplot['boxes'], farben): patch.set_facecolor(farbe) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() == Regressionsrechnung == Beispiel: import numpy as np import matplotlib.pyplot as plt # Messpunkte x = np.array([1, 3, 5, 6, 8, 10, 20]) y = np.array([3, 4, 5, 5, 7, 9, 11]) # Regressionskurve (Grad 1 = lineare Regression, 2 = Polynom-Regression 2. Gr.) # y = kx + d k, d = np.polyfit(x, y, deg=1) # y = ax**2 + bx + c a, b, c = np.polyfit(x, y, deg=2) x_l = np.linspace(1, 20, 100) y_p = a * x_l**2 + b * x_l + c # Zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.plot(x, k*x + d, color='blue', label='Regressionsgerade') plt.plot(x_l, y_p, color='red', label='Regressionspolynom 2. Gr.') plt.xlabel('x') plt.ylabel('y') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: [[Datei:IngMath_regression.svg|400px]] == Korrelationsrechnung == Beispiel: import pandas as pd import matplotlib.pyplot as plt # Messdaten x = [1, 3, 4, 5, 6] y = [2, 4, 6, 8, 5] daten = {'X': x, 'Y': y} df = pd.DataFrame(daten) # Korrelation korr = df['X'].corr(df['Y']) print(f"Korrelationskoeff.: {korr}") # Messpunkte zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: Korrelationskoeff.: 0.7556096518348252 [[Datei:IngMath_korrelation.svg|300px]] == Mengen und Venn-Diagramme == Beispiel: import matplotlib.pyplot as plt from matplotlib_venn import venn2 menge_a = {1, 2, 3, 4, 5, 6} menge_b = {4, 5, 6, 7, 8} vereinigung = menge_a | menge_b schnitt = menge_a & menge_b print("Vereinigungsmenge = ", vereinigung) print("Schnittmenge = ", schnitt) venn2([menge_a, menge_b], set_labels=('Menge A', 'Menge B')) plt.show() Ausgabe: Vereinigungsmenge = {1, 2, 3, 4, 5, 6, 7, 8} Schnittmenge = {4, 5, 6} [[Datei:IngMath_venn.svg|300px]] Siehe auch {{W|Mengendiagramm#Venn-Diagramme}}. == Verteilungs- und Dichtefunktion == * CDF ... '''C'''umulative '''D'''istribution '''F'''unction, Verteilungsfunktion * PDF ... '''P'''robability '''D'''ensity '''F'''unction, Dichtefunktion Beispiel (Normalverteilung): import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm my, sigma = 0, 1 x = np.linspace(-4, 4, 50) pdf = norm.pdf(x, my, sigma) cdf = norm.cdf(x, my, sigma) plt.plot(x, pdf, lw=2, label="Dichtefunktion") plt.plot(x, cdf, lw=2, label="Verteilungsfunktion") plt.legend() plt.grid() plt.show() Ausgabe: [[Datei:IngMath_cdf_pdf.svg|300px]] Beispiel (<math>\chi^2</math>-Verteilung): import numpy as np import matplotlib.pyplot as plt import scipy.stats as stats x = np.linspace(0, 20, 500) # df ... degree of freedom, Freiheitsgrad pdf = (stats.chi2.pdf(x, df=2), stats.chi2.pdf(x, df=5), stats.chi2.pdf(x, df=10)) for i in range(0,3): if(i==0): lab = "Freiheitsgrad 2" elif(i==1): lab = "Freiheitsgrad 5" else: lab = "Freiheitsgrad 10" plt.plot(x, pdf[i], label=lab, lw=2) plt.grid() plt.legend() plt.show() Ausgabe: [[Datei:IngMath_chi2.svg | 300px]] == Schätzen und Testen == === Intervallschätzung === Als Beispiel seien Daten gegeben, die von ''Dürr, Mayer: Wahrscheinlichkeitsrechnung und Schließende Statistik; 7. Aufl., Hanser, 2014, Seite 137'' stammen. Und zwar soll das 95%-Vertrauensintervall für den Mittelwert des Kaloriengehalts (kcal/100g) von Hähnchen ermittelt werden. Wir wollen das mit Python inkl. NumPy und SciPy durchführen. Die Stichprobe ist groß (50 Hähnchen): Python-Code: import numpy as np import scipy.stats as stats # Stichprobe daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203] # Parameter definieren konfidenzniveau = 0.95 mean = np.mean(daten) std = np.std(daten, ddof=1) stdfehler = stats.sem(daten) intervall = stats.norm.interval(confidence=konfidenzniveau, loc=mean, scale=stdfehler) print(f"Mittelwert: {mean}") print(f"Standardabweichung: {std}") print(f"Konfidenzintervall: {intervall}") Ausgabe: Mittelwert: 215.48 Standardabweichung: 33.14238915925757 Konfidenzintervall: (np.float64(206.29356722321992), np.float64(224.66643277678006)) Diese Werte stimmen gerundet mit denen im genannten Buch überein. Zum Code selbst: * sem steht für '''s'''tandard '''e'''rror of the '''m'''ean. * <code>scipy.stats.norm</code> ... Modul für die Normalverteilung. === Punktschätzung === Gleiche Daten wie oben bei der Intervallschätzung. Python-Code: import numpy as np from scipy import stats daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203 ] mu_hat, sigma_hat = stats.norm.fit(daten) print(f"Schätzer für den Erwartungswert (μ): {mu_hat:.4f}") print(f"Schätzer für die Standardabweichung (σ): {sigma_hat:.4f}") Ausgabe: Schätzer für den Erwartungswert (μ): 215.4800 Schätzer für die Standardabweichung (σ): 32.8093 === Hypothesentests === Beispiel: import numpy as np import scipy.stats as stats x_quer = 12.075 # Stichproben-Mittelwert var = 0.069 # Stichproben-Varianz n = 90 # Stichprobengröße my_0 = 12.0 # Nullhypothese alpha = 0.05 # Signifikanzniveau z_stat = (x_quer - my_0) / np.sqrt(var / n) p_val = 2 * (1 - stats.norm.cdf(np.abs(z_stat))) print(f"Z-Statistik: {z_stat:.4f}") if p_val < alpha: print(f"p-Wert: {p_val:.6f} < alpha:", alpha) print("Die Nullhypothese wird verworfen.") else: print(f"p-Wert: {p_val:.6f} > alpha:", alpha) print("Die Nullhypothese wird nicht verworfen.") Ausgabe: Z-Statistik: 2.7087 p-Wert: 0.006755 < alpha: 0.05 Die Nullhypothese wird verworfen. == Statistische Qualitätskontrolle == Beispiel (Mittelwertkarte): import numpy as np import matplotlib.pyplot as plt # Gegeben sollwert = 50.0 varianz = 4.0 stichproben_umfang = 1 daten = [49.5, 50.2, 53.0, 48.1, 52.6, 53.4, 49.8] # Berechnung standardabweichung = np.sqrt(varianz) streuung = standardabweichung / np.sqrt(stichproben_umfang) cl = sollwert ucl = cl + 3 * streuung lcl = cl - 3 * streuung # Darstellung plt.plot(daten, marker='o', linestyle='-', color='b', label='Messdaten') plt.axhline(cl, color='green', linestyle='-', label=f'CL: {cl}') plt.axhline(ucl, color='red', linestyle='--', label=f'UCL: {ucl:.2f}') plt.axhline(lcl, color='red', linestyle='--', label=f'LCL: {lcl:.2f}') plt.title('Mittelwertkarte') plt.xlabel('Stichprobe') plt.ylabel('Wert') plt.legend(loc='lower left') plt.grid(True) plt.show() Ausgabe: [[Datei:IngMath_mittelwertkarte.svg|300px]] Siehe auch {{W|Shewhart-Regelkarte}} und {{W|Qualitätsregelkarte}}. * UCL ... '''U'''pper '''C'''ontrol '''Limit''', Obere Eingriffsgrenze * LCL ... '''L'''ower '''C'''ontrol '''Limit''', Untere Eingriffsgrenze * CL ... '''C'''enter '''L'''ine, Mittellinie = Ein- und Ausgabe = == print == Die Anweisung print haben wir schon oft verwendet. Hier soll anhand von Beispielen kurz beschrieben werden, was der Befehl print leisten kann. print("Hallo", "Welt", 1, sep="-") print("Hallo", end=" ") print("Welt") Ausgabe: Hallo-Welt-1 Hallo Welt == input == a = int(input("Zahl 1: ")) b = int(input("Zahl 2: ")) print("a + b = ", a+b) Ausgabe (nach Eingabe der beiden Ganzzahlen): Zahl 1: 4 Zahl 2: 5 a + b = 9 == Aus Dateien lesen == Es seinen die datei.txt Hallo Welt. Wie geht es dir? ... und test1.py dat = open("datei.txt", mode = "r") print(dat.read()) dat.close() Ausgabe Hallo Welt. Wie geht es dir? ... Mit dem open()-Befehl wird die Datei datei.txt im Lesemodus geöffnet (r ... read). Mit dem read()-Befehl wird die Datei eingelesen und mittels print ausgegeben. == In Dateien schreiben == dat = open("datei.txt", mode = "a", encoding = "utf-8") dat.write("Hänge Zeile an\n") dat.close() Die Datei datei.txt sieht nach Abarbeitung des obigen Skripts nun so aus Hallo Welt. Wie geht es dir? ... Hänge Zeile an Es wird die Datei im Schreibmodus geöffnet (a ... append (anhängend), w ... write (überschreibend)). write() fügt hier also eine Zeile Text am Dateiende ein. close() schließt die Datei wieder. Das close() kann man sich mit der with-Anweisung auch sparen. with open("datei.txt", mode="a", encoding="utf-8") as dat: dat.write("Hänge Zeile an\n") = Benutzeroberflächen erstellen = == tkinter == {{Wikipedia | Tkinter}} Python bietet standardmäßig das Modul tkinter zur Programmierung von Benutzeroberflächen. Es müssen also bei der Verwendung von tkinter keine externen Module installiert werden. Hier wird eine (sehr) kurze Einführung in das Erstellen von grafischen Oberflächen mittels tkinter gegeben. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") win.minsize(300, 50) but = tk.Button(win, text = "Push the button") but.pack() win.mainloop() Ausgabe: [[Datei:PythonIng_gui1.jpg]] Ein etwas komplizierteres Beispiel sei nachfolgend gezeigt. Es sollen zwei Strings miteinander verknüpft und ausgegeben werden. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") def on_button_clicked(): str = ent1.get() + ent2.get() lab2["text"] = str ent1 = tk.Entry(win) ent2 = tk.Entry(win) lab1 = tk.Label(win, text="verknuepfen mit") lab2 = tk.Label(win, text="") but = tk.Button(win, text = "=", command=on_button_clicked) ent1.pack(side="left") lab1.pack(side="left") ent2.pack(side="left") but.pack(side="left") ent2.pack(side="left") lab2.pack(side="left") win.mainloop() Ausgabe (vor der Eingabe der Teilstrings): [[Datei:PythonIng_gui2.jpg]] Ausgabe (nach der Eingabe der Teilstrings und dem Drücken des =-Buttons): [[Datei:PythonIng_gui3.jpg]] == curses == {{Wikipedia | curses}} Mit dem curses-Modul lassen sich u.a. TUIs ('''T'''ext '''U'''ser '''I'''nterfaces) erstellen. Ein sehr einfaches Beispiel zur allgemeinen Funktionsweise wird nachstehend geliefert. import curses stdscr = curses.initscr() curses.start_color() curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE) stdscr.clear() stdscr.addstr("Hallo Welt", curses.color_pair(1)) stdscr.refresh() stdscr.getch() curses.endwin() Als Ausgabe sollte <span style="color:#FF0000;">Hallo Welt</span> (rote Schrift auf weißem Hintergrund) auf dem Terminal/der Konsole erscheinen. Getestet wurde dies mit openSUSE Tumbleweed, Python-Version 3.13.12. Das entsprechende Python-curses-Package muss installiert sein. Allgemeine Informationen zur Terminal-/Konsolengröße und Cursorposition liefert folgendes Programm: import curses stdscr = curses.initscr() stdscr.addstr(3, 5, "LINES: %d" % curses.LINES) stdscr.addstr(4, 5, "COLS: %d" % curses.COLS) (y,x) = stdscr.getyx() stdscr.addstr(5, 5, "Momentane Cursorposition: [%d, %d]" % (y, x)) (y,x) = stdscr.getbegyx() stdscr.addstr(6, 5, "Koordinatenursprung: [%d, %d]" % (y, x)) (y,x) = stdscr.getmaxyx() stdscr.addstr(7, 5, "Fenstergröße: [%d, %d]" % (y, x)) stdscr.addstr(11, 2, "Taste drücken -> Ende") stdscr.refresh() stdscr.getch() curses.endwin() Es sollte sich in etwa folgende Ausgabe ergeben: LINES: 44 COLS: 110 Momentane Cursorposition: [4, 15] Koordinatenursprung: [0, 0] Fenstergröße: [44, 110] Taste drücken -> Ende Zur Funktionsweise von curses siehe auch das Wikibook [[ncurses]]. Zum Verständnis sind dort allerdings elementare Kenntnisse in der Programmiersprache C erforderlich. == Qt == {{Wikipedia | Qt (Bibliothek)}} Auch für das Qt-Framework gibt es eine Anbindung an Python. Nachfolgend ein einfaches Beispiel. import sys from PySide6.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hallo Welt!") label.show() sys.exit(app.exec()) Ausgabe: [[Datei:PythonIng_gui10.png]] == Gtk == {{Wikipedia | GTK (Programmbibliothek)}} Eine idente Ausgabe, wie oben für Qt gezeigt, erzeugt z.B. folgendes Gtk-Programm: import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk def on_activate(app): win = Gtk.ApplicationWindow(application=app) lab = Gtk.Label(label="Hallo Welt!") win.set_child(lab) win.present() app = Gtk.Application() app.connect('activate', on_activate) app.run(None) Auch für die Benutzung von Qt und Gtk müssen die jeweiligen Packages installiert sein. Getestet wurden die entsprechenden Python-Programme nur unter openSUSE Tumbleweed. Wie das GTK-Paket unter MS Windows 11 installiert wird, siehe z.B. [https://www.gtk.org/docs/installations/windows Setting up GTK for Windows]. Damit sei aber das Thema "Benutzeroberflächen erstellen" hier abgeschlossen, da dies schon ein sehr spezielles Aufgabengebiet ist, das eher Informatiker und nicht so sehr Ingenieure anspricht. Bei Bedarf siehe aber ggf. die entsprechenden Links unten in diesem Tutorial. Dort sind weiterführende Informationen zu finden. = Pandas kurz erklärt = Hier wird kurz auf das externe Modul Pandas eingegangen. Pandas steht für '''Pan'''el '''Da'''ta und ist ein Modul für die Datenanalyse und -manipulation. == Series == Vorstellbar ist eine "Series" wie eine einzelne Spalte in einem Tabellenkalkulationsprogramm. Beispiel (Index implizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) # Temperaturwerte print(temp) Ausgabe: 0 8.5 1 11.0 2 12.5 3 10.0 4 13.0 5 11.0 6 14.5 dtype: float64 Das Kürzel <code>pd</code> ist Konvention. Es seien Temperaturwerte gegeben. Die erste Spalte bei der Ausgabe ist der Index. Die zweite Spalte enthält die Werte. Beispiel (separater Zugriff auf den Index und auf die Werte): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) print(temp.index) print(temp.values) Ausgabe: RangeIndex(start=0, stop=7, step=1) [ 8.5 11. 12.5 10. 13. 11. 14.5] Beispiel (Index explizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) print("*** Die gesamte Series ***") print(temp) print("*** Temperatur am Donnerstag ***") print(temp["Do"]) print("*** Tage wärmer als 12 Grad ***") temp_gr_12 = temp[temp > 12] print(temp_gr_12) Ausgabe: *** Die gesamte Series *** Mo 8.5 Di 11.0 Mi 12.5 Do 10.0 Fr 13.0 Sa 11.0 So 14.5 dtype: float64 *** Temperatur am Donnerstag *** 10.0 *** Tage wärmer als 12 Grad *** Mi 12.5 Fr 13.0 So 14.5 dtype: float64 == DataFrame == Ein DataFrame entspricht einer Tabelle. Beispiel (Erzeugen eines DataFrames): import pandas as pd tag = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] v1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=tag) v2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=tag) v3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=tag) tab = pd.concat([v1, v2, v3], axis=1) tab.columns = stadt print(tab) print(type(tab)) Ausgabe: Linz Salzburg Innsbruck Mo 1 8 Hallo Di 2 9 16 Mi 3 10 17 Do 4 11 18 Fr 5 12 19 Sa 6 13 20 So 7 14 21 <class 'pandas.core.frame.DataFrame'> Wir haben hier drei Datenspalten (v1, v2, v3) mit den Spaltennamen "Linz", "Salzburg" und "Innsbruck", sowie sieben Zeilen "Mo" bis "So". Beispiel (Zugriff auf eine Spalte): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab["Salzburg"]) Ausgabe: Mo 8 Di 9 Mi 10 Do 11 Fr 12 Sa 13 So 14 Name: Salzburg, dtype: int64 Beispiel (Zugriff auf eine Zeile): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab.loc["Di"]) Ausgabe: Linz 2 Salzburg 9 Innsbruck 16 Name: Di, dtype: object == Grafiken erstellen == Hier sei nur ein Torten- oder Kreisdiagramm gezeichnet: import pandas as pd import matplotlib.pyplot as plt temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) expl = [0, 0.2, 0, 0, 0, 0, 0] temp.plot.pie(figsize=(5,5), explode=expl) plt.show() Ausgabe: [[Datei:IngPython_pandas1.svg|350px]] Die <code>figsize</code> hat nichts mit der Spaltenanzahl zu tun, sondern setzt die Fenster- oder Diagrammgröße in Inches (Breite * Höhe). Mit Pandas kann man auch noch andere Diagrammarten erstellen, z.B. Linien- oder Balkendiagramme. Dies wird hier aber nicht vorgeführt. == Arbeiten mit CSV- und LibreOffice-Dateien == Gegeben sei eine CSV-Datei test1.csv: Mai;Juni;Juli 12;17;45 15;65;65 16;32;23 4;14;7 23;17;Keine Daten verfügbar 67;Keine Daten verfügbar;45 15;24;12 Lesen von dieser CSV-Datei: import pandas as pd tab = pd.read_csv("test1.csv", sep=";") print(tab) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Schreiben in eine CSV-Datei test2.csv: import pandas as pd val = pd.read_csv("test1.csv", sep=";") val.to_csv("test2.csv", index=False) Ausgabedatei: Mai,Juni,Juli 12,17,45 15,65,65 16,32,23 4,14,7 23,17,Keine Daten verfügbar 67,Keine Daten verfügbar,45 15,24,12 Die Ausgabedatei ist beinahe gleich wie die Eingabedatei. Es werden aber Kommas statt Strichpunkten verwendet. Daher kommt auch der Name CSV ('''C'''omma '''S'''eparated '''V'''alue). Will man wieder Strichpunkte, so kann man dies über den Parameter <code>sep=";"</code> in der <code>to_csv</code>-Funktion machen. Um direkt von einer ODS-Datei (LibreOffice Calc, '''O'''pen '''D'''ocument '''S'''preadsheet) zu lesen muss das Modul odfpy extra installiert sein (per YaST, pip etc.). Gelesen wird dann folgendermaßen: import pandas as pd df = pd.read_excel('test1.ods', engine='odf') print(df) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Die Datei "test1.ods" sei die Datei, aus der das obige "test1.csv" generiert wurde. Schreiben kann man ebenfalls in eine ODS-Datei: import pandas as pd daten = { "Name": ["Hugo", "Richie", "Wilhelmine"], "Alter": [38, 30, 29], "Ort": ["Linz", "Innsbruck", "Salzburg"] } tab = pd.DataFrame(daten) with pd.ExcelWriter("test2.ods", engine="odf") as writer: tab.to_excel(writer, sheet_name="Daten", index=False) Es ergibt sich eine "test2.ods"-Datei (Screenshot): [[Datei:IngPython_pandas2.png|250px]] == Sonstiges == Hier seien stichpunktartig einige weitere Features von Pandas angeführt: * {{W|Pivot-Tabelle|Pivot-Tabellen}} (pivot ... Dreh-, Angelpunkt): Zweck - große Datenmengen schnell zusammenfassen, filtern und analysieren. * NaN ('''n'''ot '''a''' '''n'''umber): In einem Datensatz fehlt ein Wert oder ist nicht definiert. * groupby-Funktion: Daten strukturieren, aggregieren oder Zwischensummen bilden. * {{W|Binning#Datenverarbeitung_und_-analyse|Binning}}: Klassenbildung. * Mehrstufige Indizierung (Hierarchical Indexing oder MultiIndex) * Zeitreihen (Time Series) Für tiefergehende und weiterführende Informationen wird auf das Buch von ''Klein: Numerisches Python; Hanser, 2023'' und [https://pandas.pydata.org/ pandas] verwiesen. = Style Guide, flake8, pylint, Black etc. = == Style Guide == Wie man schönen und richtigen Python-Code schreibt, erfahren Sie in * [https://peps.python.org/pep-0008/ PEP 8 – Style Guide for Python Code] == Formatter und Linter == Ein Modul, das prüft, ob die Richtlinien im Style Guide eingehalten wurden, ist ''flake8'': * [https://flake8.pycqa.org/en/latest/ Flake8: Your Tool For Style Guide Enforcement] Code formatieren kann man auch mit [https://pypi.org/project/black/ Black]. Z.B. übersetzt <code>black test1.py</code> die Datei <code>test1.py</code> import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) in import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Die Programmausgabe ist reformatted test1.py All done! ✨ 🍰 ✨ 1 file reformatted. Der Unterschied zwischen Black und Flake8: * Black ist ein Code-Formatter. Er formatiert Ihren Code um, sodass er im Einklang mit PEP 8 steht. * Flake8 ist ein {{W|Lint (Programmierwerkzeug) | Code-Linter}}. Flake8 verändert Ihren Code nicht, sondern durchsucht ihn nach potenziellen Fehlern etc. Am obigen Beispiel sieht man auch, dass flake8 und Black nicht immer einer Meinung sind. Flake8 (<code>flake8 test1.py</code>) würde standardmäßig den mit Black formatierten Code bemängeln: test1.py:8:80: E501 line too long (80 > 79 characters) Diese Diskrepanz kann beseitigt werden. Da 79 Zeichen auf modernen Bildschirmen meist als zu kurz empfunden werden, ist ein Limit von 88 Zeichen (Black-Standard) oder mehr empfehlenswert. Um dies zu implementieren, erstellen Sie in Ihrem Projektverzeichnis eine <code>.flake8</code>-Datei mit dem Inhalt [flake8] max-line-length = 88 Und schon ignoriert Flake8 dieses Problem. Ein anderer Linter ist pylint. Der würde beim Abarbeiten des obigen Beispiels, z.B. mit <code>pylint test1.py</code> noch eine Kleinigkeit bemängeln: ************* Module test1 /home/hr/tmp/test1.py:1:0: C0114: Missing module docstring (missing-module-docstring) ------------------------------------------------------------------ Your code has been rated at 8.57/10 (previous run: 8.57/10, +0.00) Auch pylint muss vor der ersten Verwendung installiert werden (z.B. mittels pip, virtuelle Umgebung, YaST). Die Dokumentation zu pylint findet sich auf [https://pylint.readthedocs.io/en/latest/]. <u>Aufgabe:</u> Fügen Sie einen "module docstring" in die <code>test1.py</code>-Datei ein und testen Sie erneut mit flake8, Black und pylint. <small>Sehen Sie zum Thema docstrings auch [https://peps.python.org/pep-0257/#what-is-a-docstring PEP 257 – Docstring Conventions].</small> Es gibt noch weitere Formatierungswerkzeuge für Python-Code. Z.B. [https://docs.astral.sh/ruff/ Ruff], ein moderner Code-Formatter und -Linter. Mittels <code>ruff check test1.py</code> würde obiger Code geprüft (Linter). <code>ruff format test1.py</code> formatiert den Code (Formatter). == Type Checker == "Type Checker" sind z.B. * mypy * pyright * ty Diese prüfen die Datentypen, z.B. in folgendem Code def greetings(name: str) -> str: return "Hello, %s" % name print(greetings(42)) Python selbst, flake8, ruff oder black würden diesen Code ohne zu murren akzeptieren. "Type Checker" würden aber sehr wohl Alarm schlagen, z.B. liefert <code>mypy</code> folgende Ausgabe test1.py:5: error: Argument 1 to "greetings" has incompatible type "int"; expected "str" [arg-type] Found 1 error in 1 file (checked 1 source file) Das funktioniert übrigens nicht nur bei Funktionsannotationen, sondern auch mit Variablen etc. from typing import Final # "Konstante", ab Python 3.8 NUMBER: Final = 123 print(NUMBER) NUMBER = 125 print(NUMBER) # Variable a: int = 345 print(a) a = "Irgendwas" print(a) # Variable (Pipe-Symbol), ab Python 3.10 b : int|str = 567 print(b) b = "sonstiges" print(b) Ausgabe mit python: 123 125 345 Irgendwas 567 sonstiges Ausgabe mit mypy: test3.py:6: error: Cannot assign to final name "NUMBER" [misc] test3.py:12: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment] Found 2 errors in 1 file (checked 1 source file) Python kennt übrigens keine Konstanten. Man kann diese mittels Großbuchstaben andeuten. Das ist aber nur Konvention, hat aber keine sonstigen Auswirkungen. Oder man verwendet wie oben gezeigt <code>Final</code>. Dann werfen Typchecker Errors aus. ==pydoc== pydoc ist ein Werkzeug, um Python-Module, -Funktionen und -Klassen zu dokumentieren. Beispiel <code>test1.py</code>: """Rechen-Modul. Funktionen die von pydoc gelesen werden. """ def multiply(a, b): """Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a * b def add(a, b): """Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a + b if __name__ == '__main__': print(multiply(3, 5)) print(add(4, 6)) Ausgabe mit <code>python3.13 -m pydoc test1</code> auf der Konsole: Help on module test1: NAME test1 - Rechen-Modul. DESCRIPTION Funktionen die von pydoc gelesen werden. FUNCTIONS add(a, b) Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl multiply(a, b) Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl FILE /home/xyz/tmp/test1.py Siehe zu diesem Thema z.B. auch [https://docs.python.org/3/library/pydoc.html]. Mittels <code>python3.13 -m pydoc -w test1</code> kann man auch eine HTML-Dokumentation erstellen. Wofür <code>if __name__ == '__main__':</code> steht, siehe z.B. etwas später im Abschnitt [[Ing_Mathematik:_Python#Doctests]]. == Sonstige Tools == Andere Tools für die {{W|Statische Code-Analyse|statische Codeanalyse}}, die aber für Ingenieure weniger interessant sein dürften, sind z.B. * Radon: Liefert verschiedene {{W|Softwaremetrik|Codemetriken}} (Komplexität, Wartbarkeitsindex ...) * Bandit: Findet Sicherheitslücken Tools für die {{W|Dynamisches Software-Testverfahren|dynamische Codeanalyse}}, z.B.: * DynaPyt (Framework zur dynamischen Programmanalyse) * cProfile (Profiler) * Memory Profiler (Speicheranalyse) * Memray (Speicheranalyse) * tracemalloc (Speicheranalyse) Paket- und Projektmanagement (pip-Ersatz etc.): * uv * Poetry * Conda * pipx Packaging-Tools (Freezer) und {{W|Compiler#Sonderformen|Transpiler}} : * pyinstaller ** erstellt eigenständige, ausführbare Binärdatei ** kein Cross-Compiler ** kein Schutz vor Reverse-Engineering ** langsam ** packt alles in eine Datei ** sehr große Datei ** Befehl, z.B.: <code>pyinstaller --onefile test1.py</code> ** GUI: <code>auto-py-to-exe</code> * cx_Freeze * nuitka ** Übersetzt Python-Code in C/C++-Code und weiter in eine ausführbare Datei ** kein Cross-Compiler ** Schutz vor Reverse-Engineering ** Befehl, z.B.: <code>nuitka --standalone --onefile test1.py</code> * cython = Einige Integrierte Entwicklungsumgebungen (IDEs)= Werden Programmtexte größer und umfangreicher, so ist das Arbeiten mit der interaktiven Programmierumgebung bzw. das direkte Ausführen von Python-Skripten mühsam. Man wünscht sich z.B. Hilfen zum Debuggen oder die automatische Code-Vervollständigung. Zu diesem Zweck wurden IDEs (Integrated Development Environments) geschaffen. Von diesen seinen nachfolgend auszugsweise einige kurz beschrieben. Testen Sie einfach aus, welche davon für Sie bzw. für Ihr Python-Projekt geeignet sind. == IDLE == IDLE ist die mit dem Python-Programmpaket mitgelieferte IDE. Der Name leitet sich einerseits ab vom Monty-Python-Mitglied Eric Idle, andererseits steht es als Abkürzung für "'''I'''ntegrated '''D'''evelopment and '''L'''earning '''E'''nvironment. IDLE ist einfach zu bedienen, bietet aber schon einen beachtlichen Leistungsumfang. Nachfolgend wird ein Screenshot zu IDLE geliefert. Rechts ist das Editor-Fenster zu sehen, links die interaktive Programmierumgebung. Um das Beispiel selbst nachvollziehen zu können, starten Sie IDLE. Das geht ähnlich, wie Sie die interaktive Programmierumgebung von Python starten (nur, dass Sie eben das IDLE-Icon doppelklicken und nicht das Python-Icon. Unter Linux geben Sie einfach in einem Terminal <code>idle3.13</code> o. Ä. ein). Weiter geht es mit "File - Open - ...". Die auszuführende Datei auswählen (im konkreten Fall ein "Hallo-Welt"-Programm). Es erscheint das rechte Fenster. Dort "Run - Run Module" auswählen. Und schon wird im linken Fenster "Hallo Welt!" ausgegeben. [[Datei:PythonIng_idle1.jpg | 600px]] Siehe auch {{W|IDLE}}. == PyCharm == PyCharm ist ein kommerzielles Produkt. Es gab aber auch eine kostenlose Community Edition. Seit 2025 sind beide Varianten vereint. Für die ersten 30 Tage sind die Pro-Funktionen frei verfügbar, danach nur noch die Kernfunktionalitäten (oder man bezieht kostenpflichtig die Pro-Version). Zu beziehen ist PyCharm unter dem Weblink [https://www.jetbrains.com/pycharm/]. Nachfolgend ein etwas abgewandeltes "Hallo Welt"-Programm, editiert und ausgeführt mit PyCharm. [[Datei:PyCharm_IDE_2023_screenshot.png | 600px]] Siehe auch {{W|PyCharm}}. == Eric == Auch eric ist Open Source und steht unter der GNU General Public License Version 3 oder später. Zu beziehen ist diese Software unter [https://eric-ide.python-projects.org/]. [[Datei:Screenshot_Eric_4.png | 600px]] Siehe auch {{W|eric (Software)}}. <small> Unter openSUSE Tumbleweed sollte sich eric auch mit YaST installieren lassen. Bei mir gibt es aber dann beim Ausführen des eric-Programms eine Fehlermeldung (Stand März 2026): ... ModuleNotFoundError: No module named 'PyQt6.QtPdfWidgets' Umgehen kann man dieses Problem aber wieder mit dem Erstellen einer virtuellen Umgebung, in etwa so python3.13 -m venv ~/tmp/venv1 cd ~/tmp/venv1/bin ./python3.13 -m pip install --upgrade --prefer-binary eric-ide ./eric7_ide </small> == PyScripter == Vom Funktionsumfang vergleichbar mit den vorherigen IDEs ist PyScripter. Auch PyScripter ist Open Source. Die Projekt-Homepage findet sich auf [https://sourceforge.net/projects/pyscripter/]. PyScripter ist nur für MS Windows verfügbar. [[Datei:PythonIng_pyscripter1.jpg | 600px]] == Spyder IDE == Spyder enthält bereits eine stabile Python-Version und etliche Module (z.B. matplotlib, numpy, control). Ansonsten kann dieses Softwarepaket vom Funktionsumfang her mit den anderen genannten IDEs locker mithalten. Spyder wurde unter der MIT-Lizenz veröffentlicht. Diese Software findet sich auf [https://www.spyder-ide.org]. [[Datei:Spyder-windows-screenshot.png | 600px]] Siehe auch {{W|Spyder (Software)}} == Eclipse IDE== Die {{W|Eclipse_(IDE)|Eclipse-IDE}} kann für Python aufgerüstet werden. Dazu gibt es das PyDev-Plugin. Installiert wird es über * Help > Eclipse Marketplace... * Find - PyDev - Install Danach muss noch der Pfad zum Python-Interpreter festgelegt werden * Window > Preferences > PyDev > Interpreters > Python Interpreter > New ... Das Ergebnis ist ähnlich wie im folgenden Bild, nur dass statt C/C++ Python Verwendung findet. [[Datei:Setting Up Eclipse CDT helloout.png | 600px]] == Sonstige == Die genannten IDEs sind nicht die Einzigen. Es gibt, um dem Image Pythons als beliebteste Programmiersprache gerecht zu werden, noch einige andere. Sowohl Open Source-Programme als auch kommerzielle Programme sind im Web zu finden, z.B. Thonny oder {{W|Visual Studio Code}}. Unter Linux kann man auch {{W|KDevelop}}, ausgestattet mit dem Python3-Plugin, einsetzen. Braucht man den Umfang von ausgewachsenen IDEs nicht, so kann man auch normale Texteditoren verwenden (z.B. {{W|Geany}} oder {{W|Kate_(Texteditor)|Kate}}). = Debuggen und Testen = Das Debuggen und Testen von Programmen sind wichtige Bestandteile der Programmierung. Syntaxfehler lassen sich i.A. leicht beheben. Schwieriger ist das Eingrenzen von logischen Fehlern, die ev. nur in bestimmten Situationen auftreten und keine explizite Fehlermeldung hervorrufen. Das Programm liefert falsche Ergebnisse oder es stürzt aus heiterem Himmel ab. Um das zu verhindern gibt es verschiedene Werkzeuge, die bei der Fehlersuche behilflich sein können. Vorerst siehe aber zwecks Begriffsklärung noch folgende Links: * {{W|Debuggen}} * {{W|Debugger}} * {{W|Softwaretest}} <gallery> First Computer Bug, 1947.jpg Test ganzheitlich.png V-Modell.svg </gallery> == Das Modul pdb == Python bringt schon ein Modul zum Debuggen mit. Siehe z.B. [https://docs.python.org/3/library/pdb.html pdb — The Python Debugger]. Komfortabler lässt sich das aber mittels Integrierter Entwicklungsumgebungen (IDEs) angehen. == Debuggen mit IDEs == Für die IDEs IDLE und Spyder sei kurz auf die entsprechenden Webseiten verwiesen: * [https://www.cs.uky.edu/~keen/help/debug-tutorial/debug.html Debugging under IDLE]. * [https://docs.spyder-ide.org/current/panes/debugging.html Spyder Debugger] Dort wird die Vorgehensweise auch mittels Screenshots erläutert. == assert == assert ... behaupten, zusichern ({{W|Assertion (Informatik)}}) Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10., 0.) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10., 0.) File "/home/hr/Develop/test1.py", line 4, in print1 assert y != 0.0 ^^^^^^^^ AssertionError Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1("10.", "5.") File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Aber auch bei nachfolgendem Code gibt es eine Fehlermeldung: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10, 5) File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Damit letzteres funktioniert, kann man den Programmcode so umschreiben: def print1(x, y): assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 2.0 Und jetzt fangen wir den <code>AssertionError</code> auf: def print1(x, y): try: assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) except(AssertionError): print("Hallo") print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Hallo Ich hoffe, es ist wenigstens im Ansatz klar geworden, wofür <code>assert</code> gut sein kann. Ausschalten kann man die <code>assert</code>-Überprüfung übrigens mit dem Python-Schalter <code>-O</code>. == Doctests == Innerhalb eines Docstrings kann die Arbeit im interaktiven Modus simuliert werden. Nach den Promptzeichen (>>>) erfolgen dann bei unserem Beispiel innerhalb des Docstrings simulierte Aufrufe der Funktion <code>print1()</code>. Danach folgen jeweils die Sollresultate. Wird das Modul oder die Datei als Hauptprogramm aufgerufen, so wird die Funktion <code>doctest.testmode()</code> aufgerufen und ein Bericht auf der Konsole ausgegeben. Wird das Modul nicht als Hauptprogramm aufgerufen, sondern importiert, dann wird diese <code>testmod</code>-Funktion nicht aufgerufen. D.h. dieser Code kann sowohl für Testzwecke als auch für den produktiven Einsatz verwendet werden. Das ist auch sinnvoll, weil wenn man Teile der Datei immer löschen bzw. einfügen müsste, so würden sich Fehlerquellen auftun. Das würde den Sinn und Zweck von Doctests konterkarieren. def print1(x=0., y=1.): """ Dividiere zwei Zahlen Autor: Intruder Datum: 12.08.2025 >>> print1(2., 1.) 2.0 >>> print1(5., 2.) 2.5 >>> print1(5.) 5.0 """ print(x/y) if __name__ == "__main__": import doctest doctest.testmod(verbose=True) Ausgabe: Trying: print1(2., 1.) Expecting: 2.0 ok Trying: print1(5., 2) Expecting: 2.5 ok Trying: print1(5.) Expecting: 5.0 ok 1 items had no tests: __main__ 1 items passed all tests: 3 tests in __main__.print1 3 tests in 2 items. 3 passed and 0 failed. Test passed. Das gezeigte Beispiel ist so ziemlich das einfachste, das es gibt. Für weiterführende Details siehe z.B.: * [https://peps.python.org/pep-0257/ PEP 257 – Docstring Conventions] * [https://docs.python.org/3/library/doctest.html doctest — Test interactive Python examples] ''Einschub:'' Ganz ähnlich kann man auch Klassen testen, z.B. in folgendem Code-Fragment class Fahrzeug: # siehe Abschnitt "Objektorientierte Programmierung" # ... if __name__ == "__main__": vauweh = Fahrzeug(170, 90) beemweh = Fahrzeug(200, 120) print(vauweh.convertGeschw()) print(beemweh.convertGeschw()) Wird das Script als Hauptprogramm ausgeführt (z.B. zu Testzwecken), so erfolgt die Ausgabe der zwei, via <code>convertGeschw()</code>, umgerechneten Geschwindigkeiten. Wird es aber als Modul eingebunden, so wird der letzte Programmabschnitt nicht ausgeführt (<code>__name__ == "__main__"</code> ergibt <code>False</code>). == pytest == Siehe zu diesem Thema auch {{W|Modultest}}. pytest ist ein externes Modul und muss vorab installiert werden, z.B. mittels pip install -U pytest pip install -U pytest-html Python-Code, Datei test1.py: def add(x, y): return x + y def test_answer(): assert add(1, 1) == 3 Starten von pytest in der Konsole: pytest test1.py Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py F [100%] ========================================================= FAILURES ========================================================== ________________________________________________________ test_answer ________________________________________________________ def test_answer(): > assert add(1, 1) == 3 E assert 2 == 3 E + where 2 = add(1, 1) test1.py:6: AssertionError ================================================== short test summary info ================================================== FAILED test1.py::test_answer - assert 2 == 3 ===================================================== 1 failed in 0.09s ===================================================== Hier erhalten wir einen Fehler, da 1+1 eindeutig ungleich 3 ist. Aber aus irgendeinem Grund wollte der Programmierer oder Tester in diesem Fall, dass dies so ist. Testfälle werden übrigens mit dem Präfix <code>test_</code> eingeleitet. Python-Code: def add(x, y): return x + y + 1 def test_answer(): assert add(1, 1) == 3 Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py . [100%] ===================================================== 1 passed in 0.01s ===================================================== Jetzt ist alles in Ordnung. Weiterführendes siehe z.B. * [https://docs.pytest.org/en/stable/ pytest: helps you write better programs] == unittest == Auch unittest dient zur Durchführung von Testreihen, ist aber Bestandteil von Python. Hier wird vorerst nicht näher darauf eingegangen. Siehe z.B. * [https://docs.python.org/3/library/unittest.html unittest — Unit testing framework] Lt. ''Inden: Python Challenge; dpunkt, 2021, Seite 481'' soll unittest weniger komfortabel als pytest sein. Einen Vergleich von unittest mit pytest findet man in * [https://knapsackpro.com/testing_frameworks/difference_between/pytest/vs/unittest pytest vs unittest] = Python und Anwendungsprogramme = Bisher stand immer alleine die Programmiersprache Python (ev. unter Einbeziehung von Modulen) im Mittelpunkt der Betrachtungen. Aber Python kann auch als Makrosprache für Anwendungsprogramme auftreten. Als Beispiele seien {{W|FreeCAD}} und {{W|LibreOffice}} genannt. == FreeCAD == FreeCAD ist ein freies 3D-CAD-Programm. Hier soll nicht auf die Bedienung dieses CAD-Pakets eingegangen werden, sondern nur auf die Möglichkeit, mittels Python Makros zu schreiben. Als einfacher Einstieg soll ein Makro erstellt werden, welches eine Kugel (rot) und einen Quader (blau) zeichnet. Folgende Vorbereitungsschritte sind erforderlich (es sei vorausgesetzt, dass FreeCAD schon am Rechner installiert ist. Downloaden können Sie das Programm von der Website [https://www.freecad.org/downloads.php?lang=en]): * FreeCAD starten * Leere Datei erstellen * Makro > Makros > Erstellen ... Es öffnet sich ein leeres Editorfenster, in das Sie folgenden Code eingeben können: import FreeCAD import Part doc = FreeCAD.newDocument() # Kugel kugel = Part.makeSphere(10) form_element = doc.addObject("Part::Feature", "Kugel") form_element.Shape = kugel kug = FreeCAD.ActiveDocument.getObject("Kugel") kug.ViewObject.ShapeColor = (1.0, 0.0, 0.0) neuePosition = App.Vector(5, 2.5, 2.5) kug.Placement = App.Placement(neuePosition, kug.Placement.Rotation) # Quader quader = Part.makeBox(5, 5, 50) form_element = doc.addObject("Part::Feature", "Quader") form_element.Shape = quader quad = FreeCAD.ActiveDocument.getObject("Quader") quad.ViewObject.ShapeColor = (0.0, 0.0, 1.0) doc.recompute() Diesen Code können Sie nun ausführen: * Makro > Makro ausführen Es ergibt sich folgende Ausgabe (gedreht und gezoomt): [[Datei: PythonIng_freecad1.png|500px]] Siehe auch [https://wiki.freecad.org/Python_scripting_tutorial/de# Anleitung Skripterstellung mit Python]. Getestet wurde obiges Beispiel mit FreeCAD 1.1.3 unter Linux und 1.1.1 unter MS Windows. == LibreOffice == LibreOffice ist ein freies Officepaket ([https://de.libreoffice.org/]). Hier soll nur das Tabellenkalkulationsprogramm Calc kurz betrachtet werden. Es seinen in den ersten 3 Zellen (A1 bis A3) Zahlen gegeben. Diese sollen mit einem Python-Makro addiert und das Resultat in der Zelle A5 ausgegeben werden. Auch hier sind Vorbereitungsarbeiten nötig: * zuerst muss unter Linux das Verzeichnis <code>~/.config/libreoffice/4/user/Scripts/python</code> erstellt werden * für MS Windows ist es das Verzeichnis <code>%APPDATA%\LibreOffice\4\user\Scripts\python</code> ** drücken Sie zuerst Win + R (es öffnet sich das Ausführen-Fenster) ** geben Sie <code>%appdata%</code> ein, danach drücken Sie Enter (es öffnet sich der Explorer) ** navigieren Sie zu dem genannten Verzeichnis bzw. erstellen Sie das Verzeichnis * in diesem Verzeichnis wird dann mit einem beliebigen Texteditor das Python-Makro erstellt, in unserem Fall die Datei <code>summiere_zellen.py</code>: import uno def summiere_zellen(*args): # Zugriff auf das aktuelle Dokument und das aktive Tabellenblatt ctx = uno.getComponentContext() smgr = ctx.getServiceManager() desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) doc = desktop.getCurrentComponent() sheet = doc.getCurrentController().getActiveSheet() # Werte aus den Zellen A1 bis A3 auslesen w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value # Addition der drei Werte summe = w1 + w2 + w3 # Ergebnis in die Zelle A5 schreiben sheet.getCellRangeByName("A5").Value = summe * siehe dazu ggf. auch [https://help.libreoffice.org/latest/de/text/sbasic/python/python_locations.html?DbPAR=BASIC]. Weiter geht es in LibreOffice Calc mit dem Menü ''Extras > Makros > Makros verwalten > Python''. Dort wird das Makro <code>summiere_zellen</code> ausgeführt. Es ergibt sich z.B. folgendes Resultat [[Datei:PythonIng_libreoffice1.png]] Das Kürzel <code>uno</code> steht für '''U'''niversal '''N'''etwork '''O'''bjects. Etwas einfacher geht's auch so: def summiere_zellen(): desktop = XSCRIPTCONTEXT.getDesktop() model = desktop.getCurrentComponent() sheets = model.getSheets() sheet = sheets.getByIndex(0) w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value cell = sheet.getCellRangeByName("A5") cell.setValue(w1 + w2 + w3) Empfohlen wird auch, das Erweiterungspaket APSO ('''A'''lternative '''P'''ython '''S'''cript '''O'''rganizer, apso.oxt) zu installieren. Die Vorgehensweise wird hier nicht gezeigt, sondern nur darauf hingewiesen, dass man das einfach "googeln" kann. Siehe zur Python-Programmierung für LibreOffice auch [https://wiki.documentfoundation.org/Macros/Python_Guide/de Makros/Python-Handbuch]. Getestet wurden obige Beispiele mit LibreOffice 26.2.5.1 unter Linux und 26.2.1.2 unter MS Windows. = Ausblick = Dies war eine kurze Einführung in die Berechnungs- und Darstellungsmöglichkeiten mit Python. Es sollten etliche relevante Themen behandelt, oder zumindest kurz angesprochen worden sein. Wem dieser Text nicht ausreichend ist, der sei auf die entsprechenden weiterführenden Weblinks, Bücher und die Python-Hilfefunktion verwiesen. Python kennt noch viel mehr Befehle, als hier dargestellt wurden. Das Themenspektrum ist auch durch die Einbindung externer Module fast beliebig erweiterbar. = Weblinks= == Python allgemein == * [https://www.python.org/ Python Homepage] == Externe mathematische Module == * [https://numpy.org/ NumPy] * [https://numpy.org/doc/stable/user/numpy-for-matlab-users.html NumPy for MATLAB users] * [https://scipy.org/ SciPy] * [https://www.sympy.org/en/index.html SymPy] * [https://pandas.pydata.org/ pandas] * [https://github.com/maroba/findiff findiff] * [https://mpmath.org/ mpmath] == Externe Module für Grafiken == * [https://matplotlib.org/ Matplotlib] * [https://vpython.org/ VPython] * [https://docs.vtk.org/en/latest/api/python.html VTK] == Erstellung von User Interfaces == * [https://docs.python.org/3/library/tkinter.html tkinter - Python interface to Tcl/Tk] * [https://docs.python.org/3/library/curses.html curses - Terminal handling for character-cell displays] * [https://wiki.qt.io/Qt_for_Python Qt for Python] * [https://www.gtk.org/docs/language-bindings/python GTK and Python] == Erstellen virtueller Umgebungen == * [https://docs.python.org/3/library/venv.html venv - Creation of virtual environments] == Sonstige == * [https://python-control.readthedocs.io/en/stable/ Python Control Systems Library] * [https://pypi.org/project/regex/ regex - Regular Expressions] * [http://pyromat.org/ PYroMat] * [https://coolprop.org/coolprop/wrappers/Python/index.html CoolProp] * [https://pypi.org/project/iapws/ iapws] * [https://tespy.readthedocs.io/en/main/getting_started/introduction.html TESPy - Thermal Engineering Systems in Python] = Bücher = == Gedruckte Bücher, OpenBooks, Magazine == * Diverse: c't Python Lernen, Verstehen, Anwenden; Heise, 2022 * Ernesti, Kaiser: Python3 - das umfassende Handbuch; 5. Aufl., Rheinwerk, [https://openbook.rheinwerk-verlag.de/python/ OpenBook] * Inden: Python Challenge; dpunkt, 2021, ISBN 978-3-86490-809-5 * Klein: Numerisches Python; 2. Aufl., Hanser, 2023, ISBN 978-3-446-47170-2 * Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler; Rheinwerk, 2021, ISBN 978-3-8362-7316-9 * Weigend: Python 3 - Das umfassende Praxisbuch; 9. Aufl., mitp, 2022, ISBN 978-3-7475-0544-1 * Woyand: Python für Ingenieure und Naturwissenschaftler; 4. Aufl., Hanser, 2021, ISBN 978-3-446-46483-4 == Andere Wikibooks == * [[:en:Subject:Python_programming_language | Englische Wikibooks zum Thema Python]] * [[Python|Deutschsprachiges Python-Wikibook]] [[Bild:2von10.png|20%]] * [[Python unter Linux|Python 2.7 unter Linux]] [[Bild:10von10.png|100%]] {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} go3yxpvqw923lv337vwaqb1224n26ns 1090750 1090742 2026-09-13T11:16:39Z Intruder 1513 /* Animationen */ Überschrift ergänzt 1090750 wikitext text/x-wiki {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} = Hallo Welt und allgemeine Hinweise = == Was ist Python == * Python ist eine universelle höhere Programmiersprache. * Python ist objektorientiert. * Python ist Open-Source (Python Software Foundation License). * Python ist für viele Betriebssysteme erhältlich (z.B. für Linux, MS Windows, macOS). * Python ist ein Interpreter. * Python ist durch Module fast beliebig erweiterbar. * Python als Programmiersprache ist case-sensitive - d.h. Groß- und Kleinschreibung ist relevant bei der Eingabe von Befehlen. * Python ist in etlichen Anwendungsprogrammen (z.B. {{W|FreeCAD}}, {{W|LibreOffice}}, {{W|GIMP}}, {{W|Blender (Software) | Blender}}) als Makrosprache verwendbar. {{Wikipedia | Python (Programmiersprache)}} == Python installieren == === MS Windows === Laden Sie das aktuelle Python-Paket von der Webseite [https://www.python.org/] herunter. Weiter geht es wie bei jedem anderen größeren zu installierenden Programm. Einfach das Installationsprogramm im Explorer doppelklicken und den Anweisungen des Setup-Programmes folgen. === Linux === Entweder ist Python bereits standardmäßig installiert, ansonsten ist die Installation mittels Paketmanagementsystem einfach möglich. Aber auch die Spyder-Entwicklungsumgebung ([https://www.spyder-ide.org]) bietet einen guten Einstieg mit Python (das gilt auch für MS Windows). Spyder bringt auch schon etliche wichtige Module standardmäßig mit. == Python starten == === MS Windows === Das Icon für das Python-Programm doppelklicken. Und schon startet das Programm. [[Datei:PythonIng_start1.jpg]] Python im interaktiven Modus präsentiert sich dann so: Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> Alternativ kann das Programm auch über die Eingabeaufforderung oder die PowerShell gestartet werden: c:\devel\Python>python.exe Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> === Linux === Tippen Sie einfach das Wort „python“ (oder unter openSUSE Tumbleweed z.B. auch „python3.11“ oder „python3.13“) in einem Linux-Terminal ein, schließen den Befehl mit der RETURN-Taste ab, und schon startet Python im interaktiven Modus: Python 3.13.12 (main, Feb 09 2026, 22:37:44) [GCC] on linux Type "help", "copyright", "credits" or "license" for more information. >>> Es gibt auch noch andere Möglichkeiten Python zwecks Programmausführung zu starten, z.&nbsp;B. den {{W|Shebang}} (<code>#!</code>) am Beginn eines Python-Scripts. Das Script sei als Script.py gespeichert. Dann kann das Script mit ./Script.py ausgeführt werden. Für openSUSE Tumbleweed sei nachfolgend ein lauffähiges "Hallo Welt!"-Script angegeben. Es wird in diesem Script der Python-Interpreter in der Version 3.13 verwendet : #!/usr/bin/python3.13 print("Hallo Welt!") Die Berechtigungen zum Ausführen der Datei müssen natürlich noch richtig gesetzt werden, z.B. mittels <code>chmod 777 Script.py</code>. <small><code>chmod</code> ist die Abkürzung für"'''ch'''ange file '''mod'''e bits".</small> <small>Die "Maske" <code>777</code> ist nur für Testzwecke sinnvoll, weil sie leicht zu merken ist und für alle Benutzer alle Zugriffsberechtigungen ('''r'''ead/'''w'''rite/e'''x'''ecute für owner/group/others) setzt. Im richtigen Einsatz wird man das aus Sicherheitsgründen nicht so handhaben, sondern nur die Berechtigungen setzen, die unbedingt erforderlich sind. Welche Zugriffsberechtigungen gesetzt sind, kann man z.B. mit dem Befehl <code>ls -l</code> oder <code>ll</code> ('''l'''i'''s'''t directory contents) erfragen. Aber dazu im Moment genug. Erfahrene Linux-Nutzer kennen das ohnehin und Anfänger sollen jetzt nicht mit Linux-Interna überfordert werden. Bei Bedarf siehe die Linux-Man-Pages oder dezidierte Bücher zu Linux.</code></small> <small>Oder das Script wird in einen Pfad verschoben, in dem sich ausführbare Programme generell befinden (welche Verzeichnisse im PATH liegen, kann bspw. mit <code>echo $PATH</code> abgefragt werden). Das Script kann dann wie ein normales Programm ohne weitere Angaben mit Script.py gestartet werden. Alternativ wird nicht das Script an sich verschoben, sondern nur ein symbolischer Link angelegt, z.B. mit <code>ln -s ~/tmp/Script.py ~/.local/bin/Script.py</code>. <code>~/.local/bin</code> sei ein im PATH gelegenes Verzeichnis. Dies sind aber schon Features für fortgeschrittene Linux-Benutzer und werden am Anfang eher selten benötigt.</small> == Ein paar Worte zur Erklärung == === Tests === Getestet wurden die Beispiele unter den Betriebssystemen * MS Windows 10 mit der Python-Version 3.12.0 (teilweise auch mit 3.12.2 und 3.13.1; nur die Inhalte die bis spätestens Juli 2025 erstellt wurden) * MS Windows 11 ab der Python-Version 3.13.4 (nur zum Teil; ab Juli 2025) * openSUSE Leap 15.6 mit der Python-Version 3.11.12 (Spyder, nur vereinzelt) und zum Teil mit 3.12.11 (ab Juli 2025 bis November 2025). * openSUSE Tumbleweed ab der Python-Version 3.13.9 (nur vereinzelt, ab November 2025) === Popularität === * An Beliebtheit rangiert Python mit Stand September 2026 mit einem Rating von 17,76% an 1. Stelle vor C und C++ (lt. [https://www.tiobe.com/tiobe-index/ TPCI - TIOBE Programming Community Index]). * Lt. [https://innovationgraph.github.com/global-metrics/programming-languages GitHub Top 50 Programming Languages Globally] lag Python im Q1/2026 auf Rang 2, vor TypeScript und hinter JavaScript. * [https://pypl.github.io/PYPL.html PYPL] (Popularity of Programming Language Index) ist ein anderer Popularitätsindex für Programmiersprachen. Auch hier liegt Python mit großem Vorsprung auf dem ersten Platz (52,08%), gefolgt von Java (13,34%) und C/C++ (7,99%) (Stand September 2026). === Namensgebung === Der Name "Python" rührt von der Komikertruppe {{W|Monty Python}} her. Die Icons für Python (z.B. Python selbst, Eric IDE, IDLE) sind aber durch die Python-Schlangenart symbolisiert. <gallery> Python-logo-notext.svg|Python-Logo Guido van Rossum in PyConUS24.jpg|{{W|Guido van Rossum}} (geb. 1956), der Erfinder von Python </gallery> == Ein erstes Programm == Kommentare werden in Python mit der Raute (#) eingeleitet. Sie werden vom Python-Interpreter ignoriert. Text kann mit der print-Funktion ausgegeben werden. Starten Sie Python und geben sie folgende Anweisungen zeilenweise ein >>> # Das ist ein Kommentar >>> print("Hallo Welt!") Als Ergebnis erhalten Sie Hallo Welt! Der Prompt (>>>) ist selbstverständlich nicht einzutippen, sondern wird vom Python-System geliefert. Strings können in Python entweder in Anführungszeichen (") gesetzt werden oder in Hochkommatas('). In diesem Text wird die erste Variante bevorzugt eingesetzt. Im Gegensatz zu Julia ist es hier egal, ob zwischen <code>print</code> und der öffnenden Klammer Leerzeichen stehen. = Python als Taschenrechner = == Allgemeines == Wir wollen 3 * 5 berechnen. Dazu starten wir Python im interaktiven Modus. Geben Sie dann die Formel >>> 3 * 5 ein, drücken die Taste ENTER/RETURN ({{Taste|↵}}) und erhalten als Ergebnis 15 Auch kompliziertere Ausdrücke sind möglich. Beispielsweise mit Winkelfunktionen, Quadratwurzeln etc. Wir wollen nun den Ausdruck <math>\sin\sqrt{15}</math> berechnen : >>> import math >>> math.sin(math.sqrt(15)) -0.6679052983383519 Als erstes wird das math-Modul importiert. Dann wird der mathematische Ausdruck berechnet. Eine andere Variante, die dasselbe Ergebnis liefert, ist >>> from math import * >>> sin(sqrt(15)) -0.6679052983383519 Es wird also aus dem Modul <code>math</code> alles importiert (erkennbar am <code>*</code>). Will man nicht alles importieren, so kann man das auch einschränken: >>> from math import sin, sqrt Beenden lässt sich das Python-Programm durch Eingabe von <code>exit()</code> (und natürlich ist zur Bestätigung die RETURN-Taste zu drücken). == Die Hilfefunktion von Python == Bei Eingabe der Anweisung <code>help</code> oder <code>help()</code> springt Python in den Hilfemodus. Eingabe: >>> help() Eingabe: help> math.sin Ausgabe: Help on built-in function sin in math: math.sin = sin(x, /) Return the sine of x (measured in radians). Für die komplette Python-Dokumentation siehe [https://docs.python.org/3/]. Verlassen kann man den Hilfemodus durch das Drücken von STRG-C, bzw. der Eingabe von q, quit oder exit mit anschließendem Drücken der RETURN-Taste. == Aufgaben == * Erkunden Sie die Tangensfunktion "tan" mittels Python-Hilfe (vergessen Sie nicht das math-Modul zu importieren und das <code>math.</code> vor <code>tan</code>) * Berechnen Sie mit Python den Ausdruck <math>\frac{1}{2}\cdot \text{e}^2 \cdot \tan(\pi/3)</math>. Siehe für die Exponentialfunktion im Python-Hilfesystem auch den Befehl <code>math.exp</code>. Alternativ kann auch die Konstante <code>math.e</code> eingesetzt werden. Potenzieren kann man bei Python mit dem **-Operator (z.B. 2**3 = 8). Für <math>\pi</math> gibt es <code>math.pi</code>. = Python als Scriptsprache = Häufig wird man aber kompliziertere Anweisungsfolgen verarbeiten müssen. Diese will man normalerweise nicht jedesmal neu eingeben, sondern in einer Datei speichern und diese Datei dann zur Ausführung bringen. Speichern Sie dazu folgenden Code in einer Textdatei, z.B. unter MS Windows als c:\tmp\test1.py # Das ist ein Kommentar print("Hallo Welt!") Python-Dateien werden mit der Dateiendung .py versehen. Achten Sie darauf, dass vor dem print keine Leerzeichen vorhanden sind. Das ist eine Python-Eigenheit. Wie wir später sehen werden, nutzt Python Einrückungen als syntaktisches Mittel, z.B. um bei Schleifen den Schleifenkörper zu kennzeichnen. Danach bringen Sie die Skriptdatei test1.py (sozusagen das Hauptprogramm) folgendermaßen zur Ausführung: 1) Starten Sie unter MS Windows die Eingabeaufforderung (oder alternativ auch die Windows PowerShell). Das sieht dann etwa so aus: Microsoft Windows [Version 10.0.19045.3693] (c) Microsoft Corporation. Alle Rechte vorbehalten. C:\Users\xyz> : <small>Falls jemand nicht weiß, wie man die Eingabeaufforderung startet: Eine Möglichkeit ist, einfach in der Taskleiste von Windows das "Start"-Symbol &nbsp;([[Image:Windows_logo_-_2021_(Black).svg|10px]])&nbsp; mit der rechten Maustaste anklicken. "Ausführen" auswählen (oder alternativ für die PowerShell unter Windows 10 den Eintrag "Windows PowerShell", unter Windows 11 den Eintrag "Terminal"). Im sich öffnenden Dialogfenster gibt man in die "Öffnen"-Zeile das Wort <code>cmd</code> ein und mit "OK" wird das Ganze bestätigt.</small> 2) Wechseln Sie mittels <code>cd c:\tmp</code> in das Verzeichnis c:\tmp 3) Angenommen, Sie haben Python unter dem Pfad <code>c:\devel\Python\</code> installiert. Starten Sie das Programm so (der Prompt <code>c:\tmp></code>ist natürlich nicht mit einzutippen): c:\tmp>c:\devel\Python\python.exe test1.py 4) Wie erwartet ergibt sich folgende Ausgabe am Bildschirm Hallo Welt! Die Vorgehensweise unter Linux ist prinzipiell gleich. Die kleinen Unterschiede, wie z.B. der Slash statt dem Backslash in Pfadangaben, sollten für Linux-Benutzer keine Hürde darstellen. == Variablen == Variablenbezeichner können aus Buchstaben (A-Za-z), Ziffern (0-9) und Underscores (_) bestehen, dürfen aber nicht mit einer Zahl beginnen. Führende Underscores haben u.a. im Kontext mit der Objektorientierten Programmierung eine spezielle Bedeutung und sollten nicht für "normale" Variablenbezeichner verwendet werden. Gültige Variablenbezeichner wären also: xyz x1 _wert name_anzahl Theoretisch kann man auch Umlaute, griechische Buchstaben u.ä. in Variablenbezeichnern nutzen, z.B. ößÜ = 16 α = 134 print(ößÜ) print(α) Ausgabe: 16 134 Davon wird aber aus offensichtlichen Gründen ({{W|Englisch als Lingua franca}}) abgeraten. Das Eurozeichen (€) etc. darf man ohnehin nicht in Variablenbezeichnern verwenden, dies ergäbe einen Syntaxfehler. Siehe dazu auch [https://peps.python.org/pep-3131/]. Es gibt in Python etliche Schlüsselwörter (z.B. for, if oder return). Diese dürfen nicht als eigene Variablenbezeichner verwendet werden. Eine Liste aller Schlüsselwörter liefert das Script import keyword print(keyword.kwlist) <small>Übung: Speichern Sie dieses Script in eine Datei, z.B. in c:\tmp\test1.py. Führen Sie diese Datei aus, um die Liste der Schlüsselwörter auszugeben.</small> Da Python case-sensitiv ist, repräsentieren folgende Bezeichner verschiedene Variablen: xyz XYZ xYz Werte werden an Variablen mittels Gleich-Zeichen (=) zugewiesen. Im Folgenden wird der Code immer in der Datei c:\tmp\test1.py gespeichert. x = 5 y = 10 z = x*y print(z) Bringen Sie die Datei test1.py zur Ausführung, so erhalten Sie folgende Bildschirmausgabe 50 Sie können auch mehrere Anweisungen in einer Zeile durch Semikolon getrennt schreiben. Dies führt aber zu unübersichtlichem Code. x = 5; y = 10; z = x*y; print(z) Ausgabe: 50 Auch aus der Programmiersprache C/C++ oder Java bekannte Konstrukte können Sie verwenden, z.B. x = 5 # x = x - 2 x -= 2 print(x) Bildschirmausgabe: 3 Beachten Sie, dass mit dem =-Zeichen eine Wertezuweisung durchgeführt wird. Dies ist nicht äquivalent zum mathematischen =-Zeichen, wie am vorigen Beispiel zu ersehen ist. Den Inkrement-/Dekrementoperator (z.B. x++ oder x--) aus C/C++ oder Java kennt Python aber nicht. Variablen sind nicht an einen bestimmten Datentyp gebunden, folgendes ist mit Python problemlos möglich: import math wert = 10 print(wert) wert = 35.5 print(wert) wert = "Hallo" print(wert) wert = math.pi print(wert) Ausgabe: 10 35.5 Hallo 3.141592653589793 == Physische und logische Zeilen == In Python muss eine Anweisung in einer logischen Zeile Platz finden. Wird eine Anweisung aber zu lang für eine Zeile, dann kann sie in mehrere physische Zeilen unterteilt werden. Dies kann einerseits durch einen Backslash am Ende einer Zeile geschehen, z.B. a = 2 + \ 5 Dies stellt eine logische Zeile dar, die in zwei physische Zeilen unterbrochen ist. Geklammerte Ausdrücke werden automatisch zu einer logischen Zeile verbunden, z.B. a = (2 + 5) Achtung: Im ersten Beispiel darf nach dem Backslash nichts mehr stehen, auch kein Kommentar. Dies trifft im zweiten Bespiel nicht zu, hier könnte noch ein Kommentar folgen, z.B. a = (2 + # Kommentar 5) Auch für Strings gibt es Möglichkeiten, diese auf mehrere Zeilen aufzuspalten. # Kurzer String str1 = "ABC" # Langer String str2 = """Hallo Welt, Grüetzi Schwyzer, Servus an alle""" # Backslash str3 = "UVW\ XYZ" # Mit Klammern str4 = ("Sehr langer Text, der automatisch .............. " "in einer einzigen Variable zusammengefügt wird." ) print(str1) print(str2) print(str3) print(str4) Ausgabe: ABC Hallo Welt, Grüetzi Schwyzer, Servus an alle UVWXYZ Sehr langer Text, der automatisch .............. in einer einzigen Variable zusammengefügt wird. ==Hexadezimale, oktale, binäre und andere Zahlen== d = 1050 # Dezimalzahl h = 0xAA2 # Hexadezimalzahl o = 0o12 # Oktalzahl b = 0b100001101 # Binärzahl print(d) print(h) print(o) print(b) Ausgabe: 1050 2722 10 269 Groß- und Kleinbuchstaben sind in obigen Literalen übrigens egal. So kann man z.B. statt <code>0b1001</code> auch <code>0B1001</code> schreiben (siehe dazu [https://docs.python.org/3/reference/lexical_analysis.html#integer-literals]). Sie können auch dezimale in hexadezimale Zahlen umwandeln, usw.: h = hex(1050) # Dezimalzahl -> Hexadezimalzahl b = bin(1050) # Dezimalzahl -> Binärzahl o = oct(1050) # Dezimalzahl -> Oktalzahl print(h) print(b) print(o) Ausgabe: 0x41a 0b10000011010 0o2032 Gegeben sei die Zahl 121 zur Basis 3. Diese soll in eine Dezimalzahl umgewandelt werden. Das kann so geschehen: z = int("121", 3) print(z) Ausgabe: 16 Dass dies richtig ist, davon kann man sich folgendermaßen überzeugen: <math> 1 \cdot 3^2 + 2 \cdot 3^1 + 1 \cdot 3^0 = 9 + 6+ 1 = 16 </math> Zahlen übersichtlicher schreiben kann man auch mittels Underscore, z.B.: print("Eine Million (Variante 1) =", 1000000) print("Eine Million (Variante 2) =", 1_000_000) print("Eine Rechnung:", 2_000 * 400_000); Es ergibt sich bei beiden Varianten die gleiche Ausgabe. Variante 2 ist aber im Sourcecode leichter lesbar, detto die Zahlen in der Rechnung: Eine Million (Variante 1) = 1000000 Eine Million (Variante 2) = 1000000 Eine Rechnung: 800000000 == Strings und Platzhalter== Ein paar einfache Beispiele: print("Hallo {}" . format("Hugo")) print("Hallo {:s}" . format("Hugo")) print("Hallo %s" % "Hugo") Ausgabe: Hallo Hugo Hallo Hugo Hallo Hugo Python-Code (formatted string literals, Beispiel 1): str1 = "Hallo" str2 = "Hugo" print(f"{str1} {str2}") Ausgabe: Hallo Hugo Python-Code (formatted string literals, Beispiel 2): wert = 11.567 print(f"Ausgabe: {wert:.5f}") Ausgabe: Ausgabe: 11.56700 Komplexere Beispiele: print("Hallo {} und {}" . format("Hugo", "Mike")) print("Hallo {name1} und {name2}" . format(name2="Hugo", name1="Mike")) # Füllzeichen: * # Bündigkeit: > (=rechts), < (=links), ^ (=zentriert) # Feldweite: 10 # Typ: s (=String), f (=Gleitkommazahl), d (=Dezimalzahl) etc. print("Hallo {:*>10s}" . format("Hugo")) print("Hallo {:*<10s}" . format("Hugo")) Ausgabe: Hallo Hugo und Mike Hallo Mike und Hugo Hallo ******Hugo Hallo Hugo****** Python-Code: str = "Hallo\t%s\t%7.2f\t%10.2e\t%i" % ("Hugo", 12.34567, 34.567, 264) print(str) Ausgabe: Hallo Hugo 12.35 3.46e+01 264 == Unicode == Neben den bekannten ASCII-Zeichen lassen sich Zeichen auch mittels Unicode beschreiben. Griechische Buchstaben oder komplexere mathematische Operatoren - all das sollte kein Problem sein. Siehe auch {{W|Unicode}}, {{W|Liste der Unicodeblöcke}} und {{W|Unicodeblock Mathematische Operatoren}}. Im Folgenden werden ein paar Zeichen (Allquantor, Nabla-Operator, Existenzquantor), die man aus der Mathematik kennt, erzeugt. ch1 = "\N{FOR ALL}" ch2 = "\N{NABLA}" ch3 = "\u2203" print(ch1, ch2, ch3) Ausgabe: ∀ ∇ ∃ <small>Diese Ausgabe ergibt sich z.B. mit der IDLE-Shell oder mit Cygwin. Beim Ausführen über die Windows-Eingabeaufforderung oder Windows PowerShell unter MS Windows 10 erfolgt keine korrekte Darstellung. IDLE ist die mit Python mitgelieferte IDE ('''I'''ntegrated '''D'''evelopment '''E'''nvironment, Integrierte Entwicklungsumgebung). Gegen Ende dieses Textes wird IDLE kurz beschrieben. Das Problem mit der Windows Eingabeaufforderung lässt sich aber umgehen. Man muss nur eine Schriftart auswählen, die die Zeichen kennt, z.B. "DejaVu Sans Mono". Dazu klicken Sie einfach bei der Eingabeaufforderung mit der rechten Maustaste oben auf die weiße Leiste und wählen im aufpoppenden Fenster den Menüpunkt "Eigenschaften". Es öffnet sich ein Dialogfenster. Über den Reiter "Schriftart" lässt sich nun die Schriftart einstellen. Unter MS Windows 11 oder openSUSE Leap 15.6 (bash-Konsole) gibt es dieses Problem ohnehin nicht.</small> == Reguläre Ausdrücke == Python kennt auch {{W|Regulärer Ausdruck|reguläre Ausdrücke}}. Dazu gibt es in Python das Modul <code>re</code>. Beipielsweise sollen alle Zahlen (<math>\text{zahl}\in\mathbb{N}_0</math>) in einem String gesucht und ausgegeben werden. Als String sei gegeben: <code>3x Grüße und 100 Kekse.</code> Das Muster (Pattern) ist <code>\d+</code>. <code>\d</code> steht für eine Dezimalziffer 0-9. Das Plus-Zeichen (+) steht symbolisch für ein oder mehrere Zeichen des vorherigen Ausdrucks. Hier also ein oder mehrere Dezimalziffern. Es wird die Funktion <code>findall</code> aus dem Modul <code>re</code>verwendet. Python-Code: from re import findall str = "3x Grüße und 100 Kekse." pat = "\\d+" # Doppel-Backslashes müssen verwendet werden, sonst gibt Python eine Warnung aus! # alternativ: pat = r"\d+" # oder: pat = "[0-9]+" numb = findall(pat, str) print(numb) Ausgabe: ['3', '100'] Python kennt noch viele weitere Möglichkeiten mittels regulärer Ausdrücke zu hantieren. Dies soll hier aber nicht vertieft werden, da das Thema schon ziemlich speziell und komplex ist. Bei Bedarf siehe aber z.B. die Bücher ''Weigend, Seite 380ff'' und ''Ernesti, Kaiser'' [https://openbook.rheinwerk-verlag.de/python/28_001.html] oder die Python-Dokumentation [https://docs.python.org/3/library/re.html]. Auch [[Python unter Linux: Reguläre Ausdrücke]] liefert ein umfangreiches und brauchbares Python-2-Kapitel zu den regulären Ausdrücken. Die dort gelisteten Beispiele müssten ggf. vor Verwendung auf Python-3 umgeschrieben werden. <small>Wie macht man das? Dazu siehe z.B. [https://openbook.rheinwerk-verlag.de/python/43_001.html], [https://portingguide.readthedocs.io/en/latest/] oder [https://www.digitalocean.com/community/tutorials/how-to-port-python-2-code-to-python-3]</small> <small>Es gibt auch ein externes Modul ''regex'', das bei Bedarf extra installiert werden muss ([https://pypi.org/project/regex/]). Es bietet zusätzliche Funktionalität und gründlicheren Unicode-Support. Dies sei hier aber nur der Vollständigkeit halber erwähnt.</small> == Verzweigungen == === if === Die IF-Verzweigung sei aus anderen Programmiersprachen bereits bekannt. In {{W|Pseudocode}} lässt sie sich folgendermaßen darstellen: WENN bedingung TRUE führe block1 aus SONST führe block2 aus ENDE Als {{W|Aktivitätsdiagramm|UML-Aktivitätsdiagramm}} sieht das in etwa so aus: [[File:If-Then-Else-diagram.svg|200px]] Und als {{W|Nassi-Shneiderman-Diagramm|Nassi-Shneiderman-Struktogramm}} so: [[File:Zweiseitige Auswahl.png|250px]] In Python gibt es keinen expliziten ENDE-Kennzeichner. Stattdessen wird der Code durch Einrückungen strukturiert. Alles mit der gleichen Einrückungstiefe gehört zum selben Block. Dies zeichnet Python vor anderen Programmiersprachen aus. Die test1.py-Datei laute also wie folgt: x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: Der else-Zweig wird ausgefuehrt x ist groesser oder gleich 4 Man achte auch auf die Doppelpunkte in der if- und else-Zeile. Darauf vergisst man gerne, wenn man von anderen Programmiersprachen kommt. Folgendes wäre in Python ein Fehler (genauer gesagt ein IndentationError). x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Auch Nachstehendes würde nicht zum gewünschten Ergebnis führen (löst aber keine Fehlermeldung aus). Der letzte print-Befehl ist schon außerhalb der IF-ELSE-Verzweigung. x = 3 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: x ist kleiner als 4 x ist groesser oder gleich 4 Python kennt eine Reihe von Vergleichs- und Verknüpfungsoperatoren: <, <= ... kleiner (gleich) >, >= ... größer (gleich) == ... gleich != ... ungleich is ... identisch is not ... nicht identisch and ... AND or ... OR not ... NOT Beispielsweise: a = 5 b = 9 if a<=10 and b!=7: print("OK") else print("Nicht OK") Ausgabe: OK Der else-Block kann übrigens auch ersatzlos entfallen. Als Pseudocode sieht das so aus WENN bedingung TRUE führe block aus ENDE Mehrfache Verzweigungen werden durch das elif-Konstrukt erstellt. In Pseudocode: WENN bedingung1 TRUE führe block1 aus SONST WENN bedingung2 TRUE führe block2 aus SONST WENN bedingung3 TRUE führe block3 aus SONST führe block4 aus ENDE Ein Python-Beispiel: a = 14 if a<=10: print("<=5") elif a>11 and a<15: print("11 bis 15") elif a>16 and a<20: print("16 bis 20") else: print(">=20") Ausgabe: 11 bis 15 In Python gibt es auch die Schlüsselwörter <code>True</code> (für wahr) und <code>False</code> (für falsch). Man beachte, dass sie mit Großbuchstaben beginnen. Andere Schreibweisen wären ein Fehler. Sie gehören zum Datentyp <code>bool</code>. Ihnen sind auch die Zahlen <code>1</code> und <code>0</code> zugewiesen. Man beachte, dass {{W|Rundungsfehler}} auftreten können. D.h. man sollte bei der Verwendung von {{W|Gleitkommazahl|Gleitpunktzahlen}} niemals auf absolute Genauigkeit prüfen, sondern eine Toleranz (einen <math>\varepsilon</math>-Wert) vorgeben. Ein klassisches Beispiel, das ein falsches Ergebnis liefert, ist: i = 0.1 + 0.2 print(i) if i == 0.3: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 NOK Und das, obwohl man schon in der Volksschule lernt, dass 0.1 + 0.2 gleich 0.3 ist. Korrekt muss das obige Beispiel z.B. so umgeschrieben werden: ist = 0.1 + 0.2 soll = 0.3 epsilon = 0.000001 print(ist) if abs(ist-soll) < epsilon: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 OK Alternativ kann auch die <code>math.isclose()</code>-Funktion verwendet werden. Das sei aber hier nur erwähnt und nicht konkret ausgeführt. <u>Aufgabe:</u> Recherchieren Sie im Internet zum Thema <code>math.isclose()</code>-Funktion. === match === Ab Python 3.10 gibt es auch die match-Anweisung. Dies ist das Python-Pendant für die switch-Anweisung in anderen Programmiersprachen, geht aber bei näherer Betrachtung weit darüber hinaus. Hier nur ein einfaches Beispiel: x = "Hello" match x: case "Servus" | "Ciao": # or print("Servus an alle") case "Grüetzi": print("Grüetzi Schwyzer") case _: # other, default, sonstiges ... print("Hallo Welt") Ausgabe: Hallo Welt Als Struktogramm sieht das in etwa so aus: [[File:Mehrseitige Auswahl.png|250px]] Für nähere Details siehe z.B. [https://www.geeksforgeeks.org/python-match-case-statement/], [https://learnpython.com/blog/python-match-case-statement/], [https://docs.python.org/3/tutorial/controlflow.html#match-statements] und das Python Enhancement Proposal (PEP) 636 – Structural Pattern Matching: Tutorial [https://peps.python.org/pep-0636] und dort insbesondere den Anhang A - Quick Intro. <small><code>match, case, _</code> etc. sind sogenannte ''soft keywords''. Im Gegensatz zu den normalen Schlüsselwörtern dürfen ihnen auch Werte zugewiesen werden. Eine Liste der weichen Schlüsselwörter lässt sich durch <code>keyword.softkwlist</code> erstellen (die Anweisung gibt es seit Python 3.9). Siehe dazu auch [https://stackoverflow.com/questions/65800344/what-are-soft-keywords] und [https://docs.python.org/3/library/keyword.html#keyword.softkwlist].</small> == Schleifen == Kopfgesteuerte Schleife, Endlosschleife und fußgesteuerte Schleife: [[File:Programmingloops.svg|450px]] === while === Die WHILE-Schleife ist kopfgesteuert. Sie funktioniert wie aus anderen Programmiersprachen bekannt. In Pseudocode: SOLANGE bedingung TRUE führe block aus ENDE In Python: x = 0 while x <= 10: print(x) x += 1 Ausgabe: 0 1 2 3 4 5 6 7 8 9 10 Eine Endlosschleife ergibt sich z.B. so: i = 5 while True: print(i) i-=1 Beendet werden kann sie mit der Tastenkombination STRG-C. Eine fußgesteuerte Schleife kann so simuliert werden: i = 5 while True: print(i) i-=1 if i<=0: print("Fire") break Ausgabe: 5 4 3 2 1 Fire Der <code>break</code>-Befehl wird etwas später noch einmal kurz thematisiert. === for === Struktogramm einer for-Schleife: [[File:Zählschleife.png|200px]] In Python bspw. so: for x in range(6): print(x*2) Ausgabe: 0 2 4 6 8 10 Die Schleife läuft von 0 bis 5. Ausgegeben wird jeweils der Wert x*2. Aquivalent kann diese Schleife auch so geschrieben werden: for x in range(0, 11, 2): print(x) Die Ausgabe ist wie oben. Der Startwert sei 0, der Endwert ist 11-1 und die Schrittweite ist 2. Ein anderes Beispiel sei for x in "text": print(x) Ausgabe: t e x t == Schleifen abbrechen == === break === <code>break</code> bricht die Schleife ab und setzt mit dem nächsten Befehl außerhalb der Schleife fort. for var in range(100): print(var) if var == 5: break Ausgabe: 0 1 2 3 4 5 === continue === <code>continue</code> bricht den aktuellen Schleifendurchlauf ab und setzt mit dem nächsten Schleifendurchlauf fort. for var in range (11): if var == 5: continue print(var) Ausgabe: 0 1 2 3 4 6 7 8 9 10 == try - except == try: z1 = 12 / 0 print(z1) except ZeroDivisionError: print("Das Ergebnis ist unendlich") except: print("Kann nicht berechnet werden!") print("Bitte die Formel korrigieren!") print("Setze Programm fort!") Ausgabe: Das Ergebnis ist unendlich Setze Programm fort! Es wird versucht, eine Zahl durch Null zu dividieren. Das ist nicht möglich, es wird eine Ausnahme ausgelöst. Das Programm springt daher in den except-ZeroDivisionError-Block und führt die dort gelisteten Anweisungen aus (in unserem Fall eine print-Anweisung). Danach wird das Programm fortgesetzt. Würden wir dieses Programm ohne try-except ausführen, so ergibt sich aus z1 = 12 / 0 print(z1) folgende Fehlermeldung und ein unmittelbarer Programmabbruch Traceback (most recent call last): File "C:\tmp\test1.py", line 1, in <module> z1 = 12 / 0 ZeroDivisionError: division by zero Mit dem try-except-Mechanismus können also Ausnahmen oder Fehler aufgefangen und behandelt werden. In unserem Beispiel ist das eher trivial, aber bei größeren Programmen kann das durchaus Sinn machen. Neu in Python 3.14 ist, dass mehrere Ausnahmen auch ohne Klammern angegeben werden können, z.B.: bis inkl. Python 3.13 nur: except (ZeroDivisionError, ValueError): ab Python 3.14 auch: except ZeroDivisionError, ValueError: == pass == Ein leerer Block muss in Python mittels dem Schlüsselwort <code>pass</code> dargestellt werden. Z.B. x = 2 if x == 1: print("Wert ist ", x) else: pass Würde man das <code>pass</code> im else-Block weglassen, so würde man eine Fehlermeldung erhalten: IndentationError: expected an indented block after 'else' statement on line 5 = Funktionen = == Aufrufen von Funktionen == Funktionen sind uns im Rahmen dieses Kurses schon zuhauf begegnet. Sei es die print()-, die math.sin()- oder die hex()-Funktion. All diese Funktionen werden von Python zur Verfügung gestellt, ohne dass man sie explizit programmieren müsste. Aufgerufen werden diese Funktionen, indem man ihren Namen eintippt, gefolgt von runden Klammern. In diesen Klammern können noch Argumente übergeben werden. Auch Rückgabewerte sind möglich. == Funktionen selber schreiben == Funktionen werden mit dem def-Schlüsselwort (man definiert die Funktion) eingeleitet, danach folgt der Funktionsname, danach wiederum runde Klammern, in denen formale Argumente stehen können. Abgeschlossen wird die def-Zeile mit einem Doppelpunkt. Danach folgt der Funktionskörper. Dieser Funktionskörper muss wiederum eingerückt werden (wie von den Verzweigungen und Schleifen bekannt). Aufgerufen wird diese Funktion, indem man ihren Funktionsnamen eingibt, gefolgt von runden Klammern (ggf. mit den aktuellen Parametern). Z.B. # Funktion definieren def halloWelt(i): # i ... beliebige Ganzzahl print("Hallo " * i, end="") print("Welt!") # Funktion aufrufen halloWelt(3) Ausgabe: Hallo Hallo Hallo Welt! Unterschied zwischen formalen und aktuellen Parametern: [[Datei:PythonIng_func1.jpg]] <small>Aktuelle Parameter werden auch Argumente genannt.</small> Rückgabe von Funktionswerten: # Funktion definieren def mathFunc(a, b): r1 = a + b r2 = a * b return r1, r2 # Funktion aufrufen c, d = mathFunc(3, 5) # Ausgabe der zurückgegebenen Werte print(c) print(d) Ausgabe: 8 15 Es werden r1 und r2 zurückgegeben und den Variablen c und d zugewiesen. (r1, r2) und (c, d) sind Tupel. Was Tupel konkret sind, siehe etwas später in diesem Kapitel. 3 und 5 sind die aktuellen Parameter (die Argumente). a und b sind die formalen Parameter. Die Zuweisung der aktuellen zu den formalen Parametern erfolgt in der gegebenen Reihenfolge, also die Zahl 3 wird an a übergeben und die Zahl 5 an b. Vorgabeparameter, z.B.: def mathFunc(a=10, b=20): r1 = a + b r2 = a * b return r1, r2 c, d = mathFunc(3, 5) print(c) print(d) e, f = mathFunc(5) print(e) print(f) g, h = mathFunc(b=6) print(g) print(h) Ausgabe: 8 15 25 100 16 60 Erklärung: * Erster <code>mathFunc</code>-Aufruf: Es werden, wie weiter oben, die Argumente 3 und 5 an die formalen Parameter a und b übergeben. Die Rückgabewerte r1 und r2 werden an c und d übergeben. Somit ist c=8 und d=15. * Zweiter <code>mathFunc</code>-Aufruf: Es wird nur das Argment 5 an a übergeben. b behält den Vorgabewert 20. D.h. e= 25 und f=100. * Dritter <code>mathFunc</code>-Aufruf: Es wird nur die Zahl 6 an b übergeben, a behält seinen Vorgabewert 10. Somit ergibt sich g=16 und h=60. Beispiel (Schlüsselwortargumente vs. Positionsargumente): def mathFunc(a, b): r1 = a - b r2 = a / b return r1, r2 c, d = mathFunc(b=3, a=5) # Schlüsselwortargumente e, f = mathFunc(3, 5) # Positionsargumente print(c) print(d) print(e) print(f) Ausgabe: 2 1.6666666666666667 -2 0.6 Durch die Verwendung von Schlüsselwortargumenten können die Argumente in beliebiger Reihenfolge angegeben werden. Bei den Positionsargumenten ist die Reihenfolge vorgegeben. Daraus resultiert auch der Unterschied bei den obigen Ausgaben. Werden beide Arten in einem Aufruf gemischt, so müssen die Positionsargumente zuerst angegeben werden. Den Unterschied zwischen beiden Argumentarten zu kennen ist wichtig, nicht nur bei selbst erstellten Funktionen. Auch beim Aufruf von Python-Funktionen verfolgt einen die Mischung von Schlüsselwort- und Positionsargumenten auf Schritt und Tritt, z.B. beim etwas später folgenden Abschnitt über "Grafiken zeichnen": plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") Bei dieser <code>plot</code>-Funktion aus dem Modul <code>matplotlib.pyplot</code> sind <code>x</code> und <code>y1</code> Positionsargumente. <code>label, lw</code> und <code>ls</code> sind die Namen der Schlüsselwortargumente. Die Schlüsselwortargumente könnten auch in anderer Reihenfolge angeschrieben werden, nicht jedoch die Positionsargumente! Siehe zu <code>matplotlib.pyplot.plot</code> auch die Seite [https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html]. == Lambda-Funktionen == print((lambda a, b: a*b) (3, 5)) Ausgabe: 15 Eingeleitet wird eine Lambda-Funktion (auch Lambda-Form, Lambda-Operator oder anonyme Funktion genannt) mit dem Schlüsselwort <code>lambda</code>. Es folgen die formalen Argumente, danach ein Doppelpunkt, die Berechnungsvorschrift und ggf. abschliessend in Klammern die aktuellen Parameter. Man kann einer Lambda-Funktion auch einen Funktionsnamen geben und die Funktion über diesen Namen aufrufen, z.B. prod = lambda a, b: a*b print(prod(3, 5)) Als Ausgabe wird wieder die Zahl 15 geliefert. == Rekursive Funktionen == Funktionen können wiederum andere Funktionen aufrufen. Von einem rekursiven Funktionsaufruf spricht man, wenn die aufgerufene Funktion gleich der aufrufenden ist. def printFunc(i): if (i >= 5): return else: print("Hallo Welt") printFunc(i+1) printFunc(1) Ausgabe: Hallo Welt Hallo Welt Hallo Welt Hallo Welt == Funktionsannotationen == Python ist sehr flexibel, was Typen angeht. Im Vorhergehenden haben wir generell keine Typangaben gemacht. Will man Typen angeben, so bietet Python das Konzept der Funktionsannotation. def calcFunc(a: int, b: int) -> int: return a+b r1 = calcFunc(8, 9) r2 = calcFunc(8.0, 9.0) r3 = calcFunc("Hallo", "Welt") print(r1) print(r2) print(r3) Ausgabe: 17 17.0 HalloWelt Jetzt sieht man auf den ersten Blick, welche Typen der Programmierer im Sinn hatte, als er die Funktion erstellte. Das Problem dabei ist nur, dass es Python ziemlich egal ist, welche Typen man im Endeffekt eingibt. Im obigen Beispiel können statt Integer-Typen u.a. auch Float- oder String-Typen eingegeben werden. <small> Siehe zum Thema "Type Checking" aber auch den später folgenden Abschnitt [[Ing_Mathematik:_Python#Type_Checker]]. </small> == Variadische Funktionen == Python-Code: def test1(a, *b): print(a); for c in b: print(c); test1("Hallo", "Welt", "Schweizer", "und alle anderen") Ausgabe: Hallo Welt Schweizer und alle anderen Mit dem Stern (auch als Splat-Operator bezeichnet) in der formalen Parameterliste bei der Funktion <code>test1</code> wird angezeigt, dass eine beliebige Anzahl von Argumenten übergeben wird. <small> Dies entspricht in etwa dem, was in anderen Programmiersprachen (PHP etc.) mittels Ellipse (<code>...</code>) angezeigt wird.</small> = Tupel, Listen und andere = [[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]] == Tupel und Listen == Tupel, Listen und einige andere sind Datenstrukturen oder Sequenzen. Listen (z.B. eine Einkaufsliste) sind veränderbar (mutable). Ein Tupel kann dagegen nicht verändert werden (immutable). Listen werden beim Anlegen in eckige Klammern eingeschlossen, Tupel in runde Klammern. Beim Tupel können die Klammern auch weggelassen werden. Ein Tupel mit nur einem Element muss mit einem Beistrich abgeschlossen werden. Der Grund ist, dass Python sonst nicht entscheiden kann, ob ein Tupel angelegt werden soll, oder nur ein geklammerter Wert. Als Gedächtnisstütze kann man sich den Unterschied zwischen Tupel und Liste ev. so leichter merken: : T'''u'''pel ... r'''u'''nde Klammern, '''u'''nveränderlich : L'''i'''ste ... eck'''i'''ge Klammern, veränderl'''i'''ch. Nachfolgend werden einige Operationen mit Listen und Tupel dargestellt. # Liste und Tupel liste = [1, 2, "Hallo"] tupel = (1, 2, "Hallo") # Ausgabe von liste und tupel print(liste) print(tupel) # Ausgabe von Einzelelementen print(liste[1]) print(tupel[2]) # Element an Liste anhängen und einfügen liste.append(55) liste.insert(4, "Welt") print(liste) # Element aus Liste entfernen liste.remove(1) print(liste) # einige weitere Beispiele liste2 = [1,] tupel2 = 1, 2 tupel3 = (1,) print(liste2) print(tupel2) print(tupel3) Ausgabe: [1, 2, 'Hallo'] (1, 2, 'Hallo') 2 Hallo [1, 2, 'Hallo', 55, 'Welt'] [2, 'Hallo', 55, 'Welt'] [1] (1, 2) (1,) Beispiel (eine Liste von Wörtern zu einem einzigen zusammenhängenden Text verbinden): woerter = ["Hallo", "Welt"] satz = " ".join(woerter) print(satz) Ausgabe: Hallo Welt == Dictionaries und Mengen == Zu den Datenstrukturen gehören weiters auch Mengen und Dictionaries. Mengen sind von der Mathematik bekannt, sie sind ungeordnet und es kommen keine mehrfachen Elemente vor. Dictionaries sind durch Schlüssel :Wert-Paare gekennzeichnet. Mengen werden beim Anlegen wie Dictionaries in geschweifte Klammern eingeschlossen. dict = {"vorname":"Hugo", "nachname":"Meister" } menge = {1, 1, 3, 4, 4, 4, "Hallo"} print(dict) print(menge) print(dict["vorname"]) Ausgabe: {'vorname': 'Hugo', 'nachname': 'Meister'} {1, 3, 4, 'Hallo'} Hugo Geschweifte Klammern ohne Inhalt stellen Dictionaries dar und keine Mengen: di = {} print(type(di)) Ausgabe: <class 'dict'> Leere Mengen lassen sich mit <code>set()</code> erzeugen: menge = set() # leere Menge print(menge) menge.add("Hallo") # Element hinzufügen print(menge) Ausgabe: set() {'Hallo'} Beispiel (einige Mengenoperationen): mengeA = {"Hallo", "Welt"} mengeB = {1, 2, "Welt", 3} # Vereinigung print(mengeA | mengeB) print(mengeA.union(mengeB)) # Durchschnitt print(mengeA & mengeB) print(mengeA.intersection(mengeB)) # Differenz print(mengeA - mengeB) print(mengeA.difference(mengeB)) # Symmetrische Differenz print(mengeA ^ mengeB) print(mengeA.symmetric_difference(mengeB)) # Teilmenge print(mengeA.issubset(mengeB)) # Mehrere Elemente hinzu mengeA.update(["Super", 67, 125]) print(mengeA) # Element löschen mengeA.discard("Hallo") print(mengeA) Ausgabe: {1, 2, 3, 'Welt', 'Hallo'} {1, 2, 3, 'Welt', 'Hallo'} {'Welt'} {'Welt'} {'Hallo'} {'Hallo'} {1, 2, 3, 'Hallo'} {1, 2, 3, 'Hallo'} False {67, 'Super', 'Welt', 'Hallo', 125} {67, 'Super', 'Welt', 125} Es gibt schon seit "ewigen" Zeiten unveränderbare Mengen, die mittels <code>frozenset</code> eingeleitet werden. Neu ab Python 3.15 ist dagegen das Pendant <code>frozendict</code>, das unveränderbare Dictionaries darstellt. fdict = frozendict({"vorname":"Hugo", "nachname":"Meister"}) fset = frozenset({"A", 1, "A"}) print(fdict) print(fdict["vorname"]) print (fset) try: fdict["vorname"] = "Max" print(fdict["vorname"]) except TypeError as e: print(f"Fehler: {e}") try: fset.add("B") print(fset) except AttributeError as e: print(f"Fehler: {e}") Ausgabe: frozendict({'vorname': 'Hugo', 'nachname': 'Meister'}) Hugo frozenset({1, 'A'}) Fehler: 'frozendict' object does not support item assignment Fehler: 'frozenset' object has no attribute 'add' == List Comprehensions == Aus einer Eingabeliste soll eine Ausgabeliste erzeugt werden. Das kann folgendermaßen geschehen. Mathematische Schreibweise: <math>lc = \{2x|x\in\ \mathbb{N}, 1\le x < 11\}</math> Python-Code: lc = [x*2 for x in range(1,11)] print(lc) Ausgabe: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] Mathematische Schreibweise: <math>lc = \{2x | x \in \mathbb{N}, 1\le x < 11, x \bmod 2 = 0 \}</math> Python-Code: lc = [x*2 for x in range(1,11) if x%2 == 0] print(lc) Ausgabe: [4, 8, 12, 16, 20] Siehe auch {{W|List Comprehension}}. == Set Comprehensions == Dies ist sehr ähnlich wie im vorigen Abschnitt beschrieben. Es wird aber keine Liste, sondern eine Menge erzeugt. sc = {x*2 for x in range(1,11)} print(sc) Ausgabe: {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} == Listen zusammenführen - zip() == li1 = ["A", "B", "C", "D"] li2 = [1, 2, 3, 4] li3 = [5.5, 6.6, 7.7, 8.8] z = zip(li1, li2, li3) print(z) li4 = list(z) print(li4) Ausgabe: <zip object at 0x00000283B6C6AC80> [('A', 1, 5.5), ('B', 2, 6.6), ('C', 3, 7.7), ('D', 4, 8.8)] == Generatorausdruck == g = (i*2 for i in range(1,11)) print(g) t = tuple(g) print(t) print(t[1:3]) Ausgabe: <generator object <genexpr> at 0x00000241D2A4A5A0> (2, 4, 6, 8, 10, 12, 14, 16, 18, 20) (4, 6) == Slicing == slice ... Scheibe, Teil, in Scheiben schneiden Beispiel: Zugriff auf Elemente eines geordneten sequentiellen Objekttyps (Liste, Tupel oder String): str1 = "Hallo" # Das erste Element wird mit dem Index 0 angesprochen # [start (inkl.) : stop (exkl.) : step (default=1)] str2 = str1[0:2] # Alternativ auch: str2 = str1[:2] print(str2) tup1 = (0,1,2,3) # Das letzte Element hat auch den Index -1, das vorletzte den Index -2 usw. tup2 = tup1[-3:-1] print(tup2) lst1 = [[1, 5, 10, 20], [30, 40, 50, 60]] lst2 = lst1[1][1] print(lst2) Ausgabe: Ha (1, 2) 40 Beispiel: Umdrehen von Strings str1 = "Hallo" str2 = str1[::-1] print(str2) Ausgabe: ollaH = Objektorientierte Programmierung = {{Wikipedia|Objektorientierte Programmierung}} * {{W|Klasse (Objektorientierung)|Klasse}} ... die Schablone oder der Bauplan, enthält Methoden und Attribute * {{W|Objekt (Programmierung)|Objekt}} ... eine Klasseninstanz (die konkrete Ausprägung der Klasse) * {{W|Attribut (Programmierung)|Attribute}} ... die Eigenschaften eines Objekts * {{W|Methode (Programmierung)|Methoden}} ... die Aktionen (Operationen), die ein Objekt ausführen kann * {{W|Vererbung (Programmierung)|Vererbung}} ... neue Klassen (Subklassen, Unterklassen, abgeleitete Klassen) aus vorhandenen Klassen (Superklassen, Oberklassen, Basisklassen, Elternklassen) ableiten. Ermöglicht den Aufbau von Klassenhierarchien. Die Subklasse "erbt" Attribute und Methoden von der Superklasse. Python unterstützt (so wie C++, aber im Gegensatz zu Java) Mehrfachvererbung. == UML == * {{W|Unified Modeling Language|UML}} ... '''U'''nified '''M'''odeling '''L'''anguage, eine Modellierungssprache. Die UML enthält zahlreiche Diagrammarten, um Programme zu modellieren. Im Nachfolgenden wird nur das {{W|Klassendiagramm}} verwendet. [[File:UmlCd Klasse-3.svg|300px]] * {{W|Sichtbarkeit (Programmierung)|Sichtbarkeit}}: ** + ... public (öffentlich) ** - ... private ** # ... protected * {{W|Attribut_(UML)#Attribute_für_Instanzen_und_für_Klassen|Klassenattribute}} (statische Attribute): Werden nur einmal pro Klasse angelegt. Im Klassendiagramm werden sie unterstrichen. [[File:Attribute-3.png|200px]] * Vererbung: <gallery> InheritancePgmUML.svg | Abgeleitete Klasse erbt von Basisklasse (Einfachvererbung) Diamond inheritance.svg | D erbt von B und C (Mehrfachvererbung). B und C erben von A (Einfachvererbung) </gallery> Für weitergehende Betrachtungen zur UML wird auf Spezialliteratur verwiesen, z.B.: * Seidl et al.: UML@Classroom. dpunkt, 2012, ISBN 978-3-89864-776-2 * Rupp et al.: UML 2 glasklar. Hanser, 4. Aufl., 2012, ISBN 978-3-446-43057-0 == Eine einfache Klasse == [[Datei:PythonIng_uml1.svg | 200px]] class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 fahr = Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die Klasse Fahrzeug wird durch das class-Schlüsselwort eingeleitet. raeder ist ein Klassenattribut und public. __init__ wird bei der Objekterzeugung automatisch aufgerufen (ist der sogenannte Konstruktor). Man achte darauf, dass diese Methode immer mit zwei Unterstrichen eingeleitet und abgeschlossen wird. Instanzattributen wird das Wort self vorangestellt. Wir sehen uns z.B. das Attribut self.__geschwind an. Auch hier werden zwei Unterstriche verwendet. Das bedeutet, dass dieses Attribut strikt/stark private ist. Wird nur ein Unterstrich verwendet, so deutet dies auf schwach/weakly private hin. Letzteres wird in Python deutlich häufiger verwendet. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt. Besonderheiten bei stark und schwach private: * '''stark private''': ** zwei führende Unterstriche ** Name Mangling: Name wird zu <code>_Klassenname__variablenname</code> ** Schutz vor Namenskollisionen bei Vererbung ** am Ende des Namens dürfen keine zwei Unterstriche verwendet werden. Das wären dann Magic Methods oder Dunder-Methods (z.B. __init__). Diese sind public. * '''schwach private''': ** ein führender Unterstrich ** Name bleibt gleich ** ist nur ein Hinweis an die Programmierer, kein starker Schutz ** <code>from modul import *</code>: Objekte mit einem führenden Unterstrich werden standardmäßig nicht importiert ** Standard für die Kapselung bei Python. Schätzung: Weit mehr als 80% der nicht-öffentlichen Attribute/Methoden werden als schwach private deklariert. Weniger als 5-10% als stark private (Quelle: Google KI) == Klassen importieren == Häufig ist es sinnvoll und übersichtlicher Klassen in eigenen Dateien zu speichern. Das sind dann eigene Module. Abgespeichert werden Sie mit der Endung py, wie bisher auch praktiziert. Aufgerufen werden Sie mit der import-Anweisung. Dann ist aber nur der Dateiname ohne Endung py zu verwenden. Klarer wird das mit einem Beispiel. Datei c:\tmp\fahrzeug.py class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 Datei c:\tmp\test1.py import fahrzeug fahr = fahrzeug.Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die üblichen import-Anweisungen lauten wie folgt: {| {{prettytable}} ! import-Befehl ! Instanz |- | import xyz || xyz.Klasse |- | import xyz as x || x.Klasse |- | from xyz import Klasse || Klasse |- | from xyz import * || Klasse |} Der Vorteil der ersten beiden import-Anweisungen ist, dass es kaum zu Namenskollisionen kommen kann. Dafür hat man bei den letzten beiden Varianten weniger Tipparbeit. == Vererbung == === Einfachvererbung === [[Datei:PythonIng_uml2.svg | 200px]] Datei fahrzeug.py: class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 class Luftfahrzeug(Fahrzeug): def __init__(self, geschwindigkeit, leistung, fluegel): super().__init__(geschwindigkeit, leistung) self.__flueg = fluegel def getFlueg(self): return self.__flueg Datei test1.py: import fahrzeug fahr = fahrzeug.Luftfahrzeug(150, 90, 4) print(fahr.getFlueg()) Ausgabe: 4 === Mehrfachvererbung === Mit Python ist auch Mehrfachvererbung möglich, z.B.: class A: def _printA(self): print("Klasse A") class B: def _printB(self): print("Klasse B") class C(A,B): def __init__(self): self._printA() self._printB() c = C() Ausgabe: Klasse A Klasse B Die Klasse C erbt von A und B. In UML sieht das in etwa so aus: +-----------------------------+ +-------------------------+ | A | | B | +-----------------------------+ +-------------------------+ | | | | +-----------------------------+ +-------------------------+ | # printA() | | # printB() | +-----------------------------+ +-------------------------+ . . / \ / \ --- --- | | | | +---------------------+ | C | +---------------------+ | | +---------------------+ | | +---------------------+ <code>printA()</code> und <code>printB()</code> sind schwach private (in UML als <code>protected</code> mit einem # dargestellt). Es ist aber zu beachten, dass schwach private nur Konvention ist. Praktisch könnte man auch von außerhalb auf diese Methoden zugreifen. Das soll man aber nicht tun, und das wird in Python durch einen Unterstrich angedeutet. = Grafiken zeichnen = Für das Zeichnen von Grafiken wird hier das Modul <code>matplotlib</code> verwendet. <code>matplotlib</code> ist ein externes Modul und muss vor der ersten Verwendung installiert werden. Das geht so: # Starten Sie ein Terminal (bei Windows die Eingabeaufforderung). # Führen Sie darin folgenden Befehl aus <code>c:\devel\Python\Scripts\pip.exe install matplotlib</code> pip ist übrigens der Paketmanager von Python ({{W|Pip_(Python)}}). Optimalerweise installieren wir auch gleich das Modul <code>numpy</code> (Numerical Python). Wir werden es im Folgenden oft benötigen (nicht nur bei den Grafiken). Das funktioniert vom Prinzip her genauso, wie für <code>matplotlib</code> gezeigt. <small>Verwenden Sie Spyder, so sind diese Schritte nicht nötig. Spyder inkludiert diese Pakete standardmäßig. Unter openSUSE Tumbleweed lassen sich diese Pakete mittels YaST oder zypper installieren.</small> == 2D == === Graph einer Funktion === Es soll die cosh-Funktion im Intervall <math>x\in[-3,3]</math> gezeichnet werden. Der Programmcode lautet in der einfachsten Form: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh1.jpg]] Der Code ist quasi selbsterklärend. Das Untermodul pyplot des matplotlib-Moduls und das numpy-Modul werden importiert. x läuft von -3 bis +3. y wird für jeden x-Wert per Formel ausgerechnet. "plt.plot()" ist der Zeichenbefehl. "plt.show" ist notwendig, um das Fenster mit der Grafik anzuzeigen. Die Schrittweite 0.1 wurde so gewählt, um einen ausreichend glatten Verlauf des Graphen zu gewährleisten. Das ist immer ein Kompromiss zwischen Berechnungszeit und Ansehnlichkeit. Testen Sie einfach ein paar verschiedene Werte, um ein Gefühl dafür zu zu bekommen. "plt.grid()" zeichnet ein Gitter in die Grafik (kann auch weggelassen werden). Die Bezeichnungen plt und np könnten auch anders gewählt werden. Es ist aber Konvention, diese so wie hier gezeigt zu wählen. <small>Mit der im obigen Bild gezeigten Menüleiste kann die dargestellte Grafik nachträglich noch geändert werden (Zoom, Pan, Achsenparameter, Kurvenparameter etc.). Natürlich kann man das alles auch direkt programmieren. Wie das funktioniert wird ansatzweise etwas später gezeigt.</small> Ein etwas komplexeres Beispiel ist Folgendes: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) + 2**x plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh4.png]] Man beachte, dass im Gegensatz zu Octave und Julia der ominöse Punkt (.) bei 2**x mit Python nicht benötigt wird. Das macht das Programmiererleben etwas einfacher. === Graphen mehrerer Funktionen und weiteres === import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x") plt.plot(x, y2, label = "sin(x) * cos(x)") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh2.png]] Um die Linienstile etwas individueller zu gestalten, ist folgender Programmcode gedacht: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") plt.plot(x, y2, label = "sin(x) * cos(x)", lw=3, ls="--") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh3.png]] === Funktion in Parameterdarstellung === Es soll die archimedische Spirale <math>x = t \cos(t), y = t \sin(t)</math> im Intervall <math>[0, 6\pi[</math> gezeichnet werden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.show() [[Datei:PythonIng_spirale1.png]] Diese Darstellung erscheint verzerrt. Will man gleiche Achsenskalierungen, so kann man den plt.axis()-Befehl verwenden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.axis("equal") plt.show() [[Datei:PythonIng_spirale2.png]] === Funktion in Polardarstellung === import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(projection="polar") r = np.arange(0, 1, 0.01) theta = r**3 line = ax.plot(theta, r) plt.show() [[Datei:PythonIng_polar1.png]] === Logarithmische Achsenskalierung === ==== Semilog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.semilogy() plt.show() Ausgabe: [[Datei:PythonIng_semilog1.png]] ==== LogLog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.loglog() plt.show() [[Datei:PythonIng_loglog1.png]] === Gefüllte Fläche === import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 3, 0.1) y1 = 3*x - 1 y2 = x**2 plt.plot(x, y1, x, y2, color='black') plt.fill_between(x, y1, y2, where=y1>=y2) plt.show() [[Datei:PythonIng_gefuellt.png]] === Linien, Pfeile, Rechtecke, Kreise und Texte === import matplotlib as mpl import matplotlib.pyplot as plt fig, ax = plt.subplots() r = mpl.patches.Rectangle((0, 0), 3, 3, angle=30, fill=False) c = mpl.patches.Circle((4, 4), 2, fill=False) ax.add_patch(r) ax.add_patch(c) ax.plot([-2, 7], [-2, 0], color="black") ax.arrow(0, 7, 5, 0, length_includes_head=True, head_width=0.5, head_length=1.5, color="black") ax.set_aspect("equal") plt.axis([-3, 8, -3, 8]) plt.show() [[Datei:PythonIng_linien_pfeile_etc.png]] Text kann mit <code>ax.text(x, y, "Text")</code> hinzugefügt werden, bspw. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.text(0.1, 0.1, "Hallo") ax.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() Oder einfacher auch ohne <code>subplots</code> import matplotlib.pyplot as plt plt.text(0.1, 0.1, "Hallo") plt.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text1.png]] Auch Sonderzeichen (griechische Buchstaben etc.) können verwendet werden (siehe dazu auch [https://matplotlib.org/stable/users/explain/text/mathtext.html]). import matplotlib.pyplot as plt plt.text(.3, .5, r'$\Omega\ \psi\ \oint\ \nabla\ \dot a\ \frac{a}{b}\ a_b$', size="20") plt.show() [[Datei:PythonIng_text20.svg]] Jetzt wird noch gezeigt, wofür <code>subplots</code> sinnvoll eingesetzt werden können. import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=1, ncols=2) ax[0].text(0.1, 0.1, "Hallo") ax[1].text(0.1, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text2.png]] === Aufgaben === * Zeichnen Sie die Strophoide <math>x = \frac{a(t^2-1)}{t^2+1}, y = \frac{at(t^2-1)}{t^2+1}, a = 2, -3 \leq t \leq 3</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_strophoide.jpg]] * Zeichnen Sie die verschlungene Hypozykloide <math>x = (R-r)\cos t + c\cos\frac{R-r}{r}t, y = (R-r)\sin t - c\sin\frac{R-r}{r}t, c = 3, r = 2, R = 6, -15 \leq t \leq 15</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_hypozykloide.jpg]] * Testen Sie bei den obigen Übungsaufgaben verschiedene Linienstile und Farben. Farben können mit dem plt.plot()-Parameter color gewählt werden. * Testen Sie bei den obigen Übungsaufgaben verschiedene Werte für a, c, r und R. == 3D == === Räumliche Kurven === import matplotlib.pyplot as plt import numpy as np t = np.arange(0, 6*np.pi, 0.1) x = t * np.cos(t) y = t * np.sin(t) z = t fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot(x, y, z) plt.show() [[Datei:PythonIng_raumkurve1.png]] === Flächen === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z) plt.show() [[Datei:PythonIng_fläche1.png]] Das Ganze in Netzdarstellung läßt sich so programmieren: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.5) y = np.arange(0, 10, 0.5) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_wireframe(x, y, z) plt.show() [[Datei:PythonIng_fläche2.png]] Ein etwas komplexeres Beispiel: import matplotlib.pyplot as plt import numpy as np x = np.arange(0.1, 10, 0.1) y = np.arange(0.1, 10, 0.1) x, y = np.meshgrid(x, y) z1 = np.sin(x) + 3 * np.cos(y) z2 = np.sin(x) + np.log(y) z3 = x + np.cos(y) z4 = x**2 - y fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, nrows=2, ncols=2) ax[0][0].plot_surface(x, y, z1) ax[0][1].plot_surface(x, y, z2) ax[1][0].plot_surface(x, y, z3) ax[1][1].plot_surface(x, y, z4) plt.show() [[Datei:PythonIng_subplot1.png]] Man beachte, dass man die Unterbilder im Bild nach dem Ausführen des Scripts z.B. mit der mittleren Maustaste einzeln drehen, oder über die Einträge in der Menüzeile einzeln bearbeiten kann. Mit ein paar Zeilen Programmtext lässt sich also eine Menge an Funktionalität generieren. Die Farbgebung lässt sich über <code>colormaps</code> variieren. import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm) plt.show() [[Datei:PythonIng_colormap1.png]] Es gibt eine Menge an Colormaps, z.B. <code>plasma, Greys, Dark2, ocean</code>. Zwecks detaillierterer Infos siehe die matplotlib-Dokumentation. <small>Verwendet man die IDE namens IDLE, so gibt es dort auch die automatische Codevervollständigung. D.h. es werden alle Möglichkeiten (in unserem Fall nach dem Eintippen von <code>cm.</code> alle verfügbaren Colormaps) angezeigt.</small> Die "edgecolor" und Linienbreite können auch frei gewählt werden: import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm, edgecolor="black", linewidth=1.0) plt.show() [[Datei:PythonIng_colormap2.png]] === Höhenlinien === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() ax.contour(x, y, z) plt.show() [[Datei:PythonIng_höhenlinien1.png|400px]] Etwas abgewandelt sieht das so aus: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contour(x, y, z) ax.clabel(hl, inline = True) plt.show() [[Datei:PythonIng_höhenlinien2.png|400px]] Und noch eine Variante (mit einem Farbbalken) sei gezeigt. import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contourf(x, y, z) fig.colorbar(hl) plt.show() [[Datei:PythonIng_höhenlinien5.svg|400px]] === Aufgaben === * Zeichnen Sie die räumliche Kurve <math>x = 2 \cdot \cosh(t)</math>, <math>y = 5 \cdot \sin(t)</math>, <math> z = t^{2} - t</math>, <math>0 \leq t \leq 3\pi</math>. * Zeichnen Sie die Fläche <math>z = \log(x) + \cos(y)</math>. == Animationen und fortgeschrittenes 3D == === Mit matplotlib === Auch mit matplotlib sind Animationen möglich. Das ist ein bisschen komplizierter und wird deshalb hier nur mit einem sehr einfachen Beispiel dargestellt (bei Interesse siehe z.B. auch das [https://matplotlib.org/stable/users/explain/animations/animations.html#animations Animations using Matplotlib-Tutorial]). import matplotlib.pyplot as plt import matplotlib.animation as ani import matplotlib import numpy as np def update(frame): line.set_xdata(x[:frame]) line.set_ydata(y[:frame]) return (line) fig, ax = plt.subplots() x = np.arange(0, 10, .1) y = np.sin(x) line, = ax.plot(x[0], y[0]) ax.set(xlim=[0, 10], ylim=[-1, 1]) a = ani.FuncAnimation(fig=fig, func=update, frames=100, interval=20) plt.show() # Speichere die Animation in einem animierten GIF (optional) a.save(filename="c:/tmp/PythonIng_anim5.gif", writer="pillow") [[Datei:PythonIng_anim5.gif]] Es wird eine Sinuskurve auf den Bildschirm gezeichnet. In der letzten Zeile wird diese Animation in ein animiertes GIF gespeichert. Das ist natürlich optional und kann auch weggelassen werden. === Mit VPython === Aber auch mit dem Modul VPython lassen sich einfache 3D-Animationen erstellen. VPython ist ein externes Modul, das vorab installiert werden muss. Unter openSUSE Tumbleweed gibt es dzt. kein entsprechendes rpm-Paket. Die übliche Methode der Installation mittels YaST oder zypper ist somit nicht möglich. Auch eine direkte Verwendung von pip führt nur zu einer Fehlermeldung (<code>error: externally-managed-environment</code>). Es empfiehlt sich dort folgende Vorgehensweise: # Erstelle zuerst eine virtuelle Umgebung, z.B.: <code>python3.11 -m venv ~/tmp/venv1</code> # Wechsle das Verzeichnis: <code>cd ~/tmp/venv1/bin</code> # Installiere das entsprechende Paket: <code>./pip install vpython</code> # Führe das entsprechende Skript aus: <code>./python ~/tmp/test1.py</code> Aktuell (März 2026) ist dieses Programmpaket lt. der [https://vpython.org/presentation2018/install.html VPython-Homepage] nur für die Python-Versionen 3.8 bis 3.12 verfügbar. Ein Beispiel zu einer einfachen Animation wird nachfolgend geliefert. from vpython import * scene.width = 1200 scene.height = 600 scene.center = vector(20,0,0) scene.background = color.white cylinder(pos=vector(0,0,0), axis=vector(20,0,0), radius=5, color=color.blue) cone(pos=vector(0,0,0), axis=vector(-10,0,0), radius=5, color=color.blue) helix(pos=vector(20,0,0), axis=vector(40,0,0), radius=2, coils=10, thickness=0.5, color=color.blue) ball = sphere(pos=vector(20,0,0), color = color.green, radius = 1) ball.p = vector(0.15, 0, 0) toc = True while True: rate(200) if(ball.pos.x <= 60 and toc == True): ball.pos += ball.p else: toc = False ball.pos -= ball.p if(ball.pos.x <= 20 and toc == False): toc = True [[Datei:PythonIng_vpython_anim.JPG]] Idealerweise öffnet sich beim Ausführen des Scripts ein Browserfenster. Darin wird die programmierte Animation gezeigt (siehe auch den obigen Screenshot). Eine Größenänderung können Sie mit der mittleren Maustaste initiieren. Die Szenerie drehen können Sie mit der rechten Maustaste. === Mit VTK === Komplexer, aber auch mächtiger als VPython ist die Verwendung von VTK ('''V'''isualization '''T'''ool'''k'''it). Genauer gesagt des Python-Wrappers von VTK. Dieses externe Python-Modul muss vorab installiert werden (z.B. mittels YaST, pip oder in eine virtuelle Umgebung). VTK ist eine Softwarebibliothek zur 3D-Visualisierung und wurde ursprünglich in C++ geschrieben. Verbreitet eingesetzt wird diese Bibliothek in der Wissenschaft und Forschung, z.B. * in der medizinischen Bildgebung * für Strömungssimulationen * für Klimadaten VTK funktioniert nach dem {{W|Grafikpipeline|Pipeline-Prinzip}}: Source (Quellen) -> Filter -> Mapper (Senken) -> Actor/Renderer Daten fließen von den Quellen zu den Senken. Als einfaches Beispiel wird die Darstellung eines Zylinders gezeigt, der mit den Maustasten gedreht oder in der Größe geändert werden kann: import vtk # Zylinder erzeugen cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) # Geometrie in darstellbare Daten umwandeln mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) # Objekt in der Szene actor = vtk.vtkActor() actor.SetMapper(mapper) # Szene verwalten renderer = vtk.vtkRenderer() renderer.AddActor(actor) # Render-Fenster render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) # Maus/Tastatur-Steuerung interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) # Starten render_window.Render() interactor.Start() Ausgabe: [[Datei:PythonIng_VTK_1.png]] Gleiches Beispiel wie oben, aber mit einer Animationssequenz: import vtk import time cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderer.AddActor(actor) render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) render_window.Render() time.sleep(0.01) Das Grafikfenster schließt sich nach Ablauf der Schleife. Das Fenster bleibt geöffnet, wenn Sie am Programmende folgenden Befehl hinschreiben interactor.Start() Um den animierten Zylinder grün einzufärben, müssen Sie Folgendes im obigen Programm ergänzen (Farbnamen): colors = vtk.vtkNamedColors() actor.GetProperty().SetColor(colors.GetColor3d("Green")) Als Namen können Sie u.a. die CSS3 Web-Farben verwenden (siehe z.B. [https://wiki.selfhtml.org/wiki/Farbe/Farbangaben] und {{W|Webfarbe#CSS_3}}). Alternativ funktioniert auch das ({{W|RGB-Farbraum|RGB}}): actor.GetProperty().SetColor(0.0, 0.6, 0.0) Wie der Zylinder mit einer Textur versehen wird, zeigt folgendes Programm: import vtk import time cylinder = vtk.vtkCylinderSource() cylinder.SetResolution(30) cylinder.SetHeight(3.0) cylinder.SetRadius(1.0) cylinder.CappingOn() texture_coords = vtk.vtkTextureMapToCylinder() texture_coords.SetInputConnection(cylinder.GetOutputPort()) texture_coords.PreventSeamOn() reader = vtk.vtkJPEGReader() reader.SetFileName("PythonIng_textur.jpg") texture = vtk.vtkTexture() texture.SetInputConnection(reader.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(texture_coords.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.SetTexture(texture) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderer.AddActor(actor) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) renderWindow.Render() time.sleep(0.01) interactor.Start() <gallery> PythonIng_textur.jpg | Textur-Datei PythonIng_VTK_2.png | Ausgabe (Screenshot) </gallery> Nun aber genug von VTK und der Erstellung von Grafiken, weiter geht es mit mathematischeren Themen. = Vektoren und Matrizen = == Zahlenfolgen == Für das Erstellen von Zahlenfolgen bieten sich die Funktionen <code>arange</code> und <code>linspace</code> aus dem <code>numpy</code>-Modul an. from numpy import * start = 0 stop = 10 step = 2 num = 10 r = arange(start, stop, step) # step ... Schrittweite l = linspace(start, stop, num) # num ... Anzahl der Werte print("r = ", r) print("l = ", l) Ausgabe: r = [0 2 4 6 8] l = [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556 6.66666667 7.77777778 8.88888889 10. ] Bei <code>arange</code> ist der <code>stop</code>-Wert nicht im Ergebnis enthalten, bei <code>linspace</code> aber sehr wohl. == Vektoren == Vektoren sollten jedem aus der Linearen Algebra bekannt sein. === Arrays === In Python mit NumPy kann man Vektoren durch die Funktion array erzeugen. import numpy as np l1 = (-5, 3, 2) l2 = (1, 1, 4) a1 = np.array(l1) a2 = np.array(l2) a3 = a1 + a2 a4 = 2 * a2 print(a1) print(a2) print(a3) print(a3[2]) print(a4) Ausgabe: [-5 3 2] [1 1 4] [-4 4 6] 6 [2 2 8] === Zeilen- und Spaltenvektoren === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) print(z) print(s) Ausgabe: [ [-5 3 2] ] [[1] [1] [4]] === Skalarprodukt === import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) skalarprodukt = np.dot(a1, a2) print(skalarprodukt) Ausgabe: 6 === Vektorprodukt === <math>a\ast b=\left(\begin{array}{c} a_{1}\\ a_{2}\\ a_{3} \end{array}\right)\ast\left(\begin{array}{c} b_{1}\\ b_{2}\\ b_{3} \end{array}\right)=\left(\begin{array}{c} a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} \end{array}\right) </math> Python-Code: import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) vektorprodukt = np.cross(a1, a2) print(vektorprodukt) Ausgabe: [10 22 -8] === Transponierter Vektor === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) # transponierter Vektor z_tp = np.transpose(z) # transponierter Vektor s_tp = np.transpose(s) print(z_tp) print(s_tp) Ausgabe: [[-5] [ 3] [ 2]] [ [1 1 4] ] === Vektorfelder visualisieren === import matplotlib.pyplot as plt import numpy as np # Daten generieren x = np.arange(0, 10, 1) y = np.arange(0, 10, 1) X, Y = np.meshgrid(x, y) U = X * Y V = Y + X # Plotten fig, ax = plt.subplots() ax.quiver(X, Y, U, V, angles='xy') plt.show() Ausgabe: [[Datei:PythonIng_quiver1.png]] == Matrizen== import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) print(m1) Ausgabe: [[1 2 3] [4 5 6]] === Zugriff auf Matrizenelemente === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) # Element aus Zeile 2 und Spalte 3 (Achtung! Index startet bei Null) print(m1[1,2]) Ausgabe: 6 === Addition und Subtraktion von Matrizen === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) m2 = np.matrix([[0, 0, 2], [1, 3, 2]]) print(m1 + m2) print(m1 - m2) Ausgabe: [[1 2 5] [5 8 8]] [[1 2 1] [3 2 4]] === Transponierte Matrix === import numpy as np m = np.matrix([[1, 2, 3], [4, 5, 6]]) mt = np.transpose(m) print(m) print(mt) Ausgabe: [[1 2 3] [4 5 6]] [[1 4] [2 5] [3 6]] === Rang einer Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) rg = np.linalg.matrix_rank(m) print(rg) Ausgabe: 2 === Inverse Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) mi = np.linalg.inv(m) print(mi) Ausgabe: [[ 1. 0.6] [-0. -0.2]] === Multiplikation von Matrizen (falksches Schema) === import numpy as np m1 = np.matrix([[1, 3, 4], [0, -5, 1]]) m2 = np.matrix([[1, 2], [2, 3], [0, 2]]) print(m1 @ m2) Ausgabe: [[ 7 19] [-10 -13]] === Eigenwerte und Eigenvektoren === import numpy as np m = np.matrix([[5, 8], [1, 3]]) D,V = np.linalg.eig(m) # Eigenwerte print(D) # Eigenvektoren print(V) Ausgabe: [7. 1.] [[ 0.9701425 -0.89442719] [ 0.24253563 0.4472136 ]] === Teilmatrizen === import numpy as np m = np.matrix([[1, 3, 4], [0, -5, 1]]) print("m = ", m) # Erste Zeile extrahieren m1 = m[0,:] print("m1 = ", m1) # Das Element aus der 1. Zeile und der 2. Spalte extrahieren m2 = m[0,1] print("m2 = ", m2) # Zweite Spalte extrahieren m3 = m[:, 1] print("m3 = ", m3) Ausgabe: m = [[ 1 3 4] [ 0 -5 1]] m1 = [ [1 3 4] ] m2 = 3 m3 = [[ 3] [-5]] === Spezielle Matrizen === ==== Nullmatrix ==== import numpy as np z = np.zeros((3, 2)) print(z) Ausgabe: [[0. 0.] [0. 0.] [0. 0.]] ==== Einheitsmatrix ==== import numpy as np z = np.eye(3) print(z) Ausgabe: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ==== Matrix mit lauter Einsen ==== import numpy as np z = np.ones((3, 2)) print(z) Ausgabe: [[1. 1.] [1. 1.] [1. 1.]] === Spärlich besetzte Matrizen === Das Thema spärlich besetzter Matrizen wird hier nur kurz angerissen. Nähere Details siehe unter dem Weblink [https://docs.scipy.org/doc/scipy/reference/sparse.html#module-scipy.sparse]. import numpy as np import scipy A = scipy.sparse.csr_array(np.eye(5)) print(A) Ausgabe: (0, 0) 1.0 (1, 1) 1.0 (2, 2) 1.0 (3, 3) 1.0 (4, 4) 1.0 = Lineare Gleichungssysteme = Sei <math>Ax = b</math> ein lineares Gleichungssystem. <math>A</math> sei die Koeffizientenmatrix, <math>x</math> der Lösungsvektor und <math>b</math> ein bekannter Vektor. Beispiel: import numpy as np A = np.array([[5, 1], [0, 2]]) b = np.array([1, 2]) x = np.linalg.solve(A, b) print(x) Ausgabe: [0. 1.] Siehe dazu auch das Kapitel [[Ing Mathematik: Numerisches Lösen von linearen Gleichungssystemen]]. Dort wird dieses Themengebiet u.a. mit weitergehenden Python-Skripten vertieft. == Aufgabe == * Lösen Sie folgendes Gleichungssystem mittels Python (und zur Kontrolle auch händisch): 5x + 6y - 2z = 12 3x - y - 3z = 6 2x + 2y + 4z = 5 = Polynome = == Ein erstes einfaches Beispiel == Gegeben sei das Polynom <math>7x^3+5x^2+1</math>. In Python: import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p) Ausgabe: 3 2 7 x + 5 x + 1 == Einzelne Polynomwerte berechnen == import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p(1.5)) Ausgabe: 35.875 == Polynome integrieren und differenzieren == import numpy as np p = np.poly1d([7, 5, 0, 1]) # 1. Ableitung p1 = p.deriv() p2 = p.deriv(1) # 2. Ableitung p3 = p.deriv(2) # Integral p4 = p.integ() print(p1) print(p2) print(p3) print(p4) Ausgabe: 2 21 x + 10 x 2 21 x + 10 x 42 x + 10 4 3 1.75 x + 1.667 x + 1 x == Nullstellen bestimmen == import numpy as np p = np.poly1d([2, 5, 0, 4]) r = np.roots(p) print(r) Ausgabe: [-2.7621427 +0.j 0.13107135+0.84077099j 0.13107135-0.84077099j] == Aufgaben == * Berechnen Sie den Wert für x = 3 des Polynoms <math>y = 2x^4 - 3x^3 - x + 7</math>. * Differenzieren und integrieren Sie das Polynom <math>y = 2x^4 - 3x^3 - x + 7</math>. * Berechnen Sie die Nullstellen von <math>y = 7x^5 - 3x^2 + 12</math>. = Nichtlineare Gleichungen und Gleichungssysteme = == Nullstellenbestimmung == Löse eine beliebige Gleichung f(x) = 0, z.B. <math> f(x) = x^2 - 5\cos(x) - 10 = 0 </math>: import scipy import numpy as np def f(x): return x**2 - 5*np.cos(x) - 10 xstart = [-1, 1] # Startwerte xn = scipy.optimize.root(f, xstart) print(xn.x) Ausgabe: [-2.46813009 2.46813009] Funktionsgraph: [[Datei:octave_nichtlin2.jpg]] == Gleichungssysteme == SymPy ist ein externes Modul, das symbolisches Rechnen ('''Sym'''bolic '''Py'''thon) ermöglicht. Folgende Aufgabe ist dem Buch "Knorrenschild: Numerische Mathematik, Hanser, 2017, Seite 72" entnommen. Zu lösen ist das nichtlineare Gleichungssystem <math>f_1 = 2x_1 + 4x_2 = 0 </math> <math>f_2 = 4x_1 + 8x_2^3 = 0</math> Mit Python ist das so möglich: import sympy x1, x2 = sympy.symbols("x1 x2") f1 = 2*x1 + 4*x2 f2 = 4*x1 + 8*x2**3 s = sympy.solve((f1, f2), x1, x2) print(s) Ausgabe: [(-2, 1), (0, 0), (2, -1)] Plot: [[Datei:IngPython_nl_gleichung1.svg|500px]] = Komplexe Zahlen = Die imaginäre Einheit wird in Python durch den Buchstaben <code>j</code> symbolisiert. Darstellen kann man eine komplexe Zahl bekannterweise in mehreren Formen: * Kartesische Darstellung <math>z = \Re(z) + j \cdot \Im(z)</math> * Polardarstellungen <math>z = r \cdot (\cos(\phi) + j \cdot \sin(\phi)) = r \cdot e^{j\cdot \phi}</math> Die konjugiert komplexe Zahl ist <math>z^* = \Re(z) - j \cdot \Im(z)</math> Nachfolgend einige mathematische Operationen mit Python und NumPy. import numpy as np z1 = 2 + 5j # kartesische Darstellung z2 = 3 * np.exp(3j) # Polardarstellung # Addition res = z1 + z2 print("z1 + z2 = ", res) # Multiplikation res = z1 * z2 print("z1 * z2 = ", res) # Realteil res = np.real(z2) print("Realteil von z2 = ", res) # Imaginärteil res = np.imag(z2) print("Imaginaerteil von z2 = ", res) # Betrag res = np.abs(z1) print("Betrag von z1 = ", res) # Argument res = np.angle(z1) print("Argument von z1 = ", res) # Konjugiert komplexe Zahl res = np.conj(z1) print("Konjugiert komplexe Zahl von z1 = ", res) Ausgabe: z1 + z2 = (-0.9699774898013365+5.423360024179601j) z1 * z2 = (-8.05675510050068-14.003167400647481j) Realteil von z2 = -2.9699774898013365 Imaginaerteil von z2 = 0.4233600241796016 Betrag von z1 = 5.385164807134504 Argument von z1 = 1.1902899496825317 Konjugiert komplexe Zahl von z1 = (2-5j) = Interpolation = import numpy as np import scipy import matplotlib.pyplot as plt # Stützpunkte xp = np.arange(1, 6) yp = (0, -5, 2, 7, 6) ti = np.arange(1, 5, 0.01) i1 = scipy.interpolate.interp1d(xp, yp, kind = "linear") i2 = scipy.interpolate.interp1d(xp, yp, kind = "cubic") plt.plot(xp, yp, "rx") plt.plot(xp, i1(xp)) plt.plot(ti, i2(ti)) plt.show() Ausgabe: [[Datei:PythonIng_interpol1.png]] = Differenzialrechnung = == Numerisches Differenzieren == Als Beispiel differenzieren wir <math>y = 5x\sin{x}</math> und stellen das Ganze grafisch dar. from findiff import Diff import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 1000) f = 5 * x * np.sin(x) dx = x[1] - x[0] # Ableitung d_dx = Diff(0, dx) df_dx = d_dx(f) # Grafik plt.plot(x, f, label = "y") plt.plot(x, df_dx, label = "y'") plt.grid() plt.legend(loc="best") plt.show() Ausgabe: [[Datei:octave_diff1.jpg]] <small>findiff ist ein externes Modul. Dieses muss installiert werden (z.B. so: ...\Python\Scripts\pip.exe install --upgrade findiff). Für die Vorgehensweise unter openSUSE Tumbleweed siehe das Kapitel [[Ing_Mathematik:_Python#Mit_VPython | VPython]], nur dass das Ganze mit einer aktuelleren Python-Version exekutiert wird, z.B. mit Python 3.13. Das im Buch "Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler, Rheinwerk" verwendete Modul "scipy.misc" ist veraltet (deprecated ... missbilligt). Lt. [https://docs.scipy.org/doc/scipy-1.17.0/dev/roadmap-detailed.html#misc SciPy-Dokumentation für die Version 1.17.0] wurden alle entsprechenden Features schon entfernt.</small> == Symbolisches Differenzieren == Differenzieren Sie die Funktionen <math>f_1(x) = x^2</math> und <math>f_2(x) = \sin(x)\cos\left(\frac{x}{2}\right)</math>. import sympy x = sympy.symbols("x") f1 = x**2; f2 = sympy.sin(x) * sympy.cos(x/2.) d1 = sympy.diff(f1, x) d2 = sympy.diff(f2, x) print(d1) print(d2) Ausgabe: 2*x -0.5*sin(0.5*x)*sin(x) + cos(0.5*x)*cos(x) == Aufgaben == * Differenzieren Sie die Funktion <math>y = \log(x) + 10x</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. * Differenzieren Sie die Funktion <math>y = \frac{\sinh(x)}{(1+x)}</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. = Integralrechnung = == Numerisches Integrieren == Berechnen Sie das Integral <math>\int_{0}^{3}x^2 dx</math>. import scipy def f(x): return x**2 i = scipy.integrate.quad(f, 0, 3) print(i) Ausgabe: (9.000000000000002, 9.992007221626411e-14) Das trifft den exakten Wert 9.0 ziemlich genau. Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} dx</math>. import scipy import numpy as np def f(x): return 2**(-x) i = scipy.integrate.quad(f, 0, np.inf) print(i) Ausgabe: (1.4426950408889556, 4.486558477977586e-09) == Symbolisches Integrieren == Berechnen Sie <math>\int x^2 \text{d}x</math> und <math>\int \sin{x}\cos{\frac{x}{2}} \text{d}x</math>. import sympy x = sympy.symbols("x") f1 = x**2 f2 = sympy.sin(x) * sympy.cos(x/2.) i1 = sympy.integrate(f1, x) i2 = sympy.integrate(f2, x) print(i1) print(i2) Ausgabe: x**3/3 -0.666666666666667*sin(0.5*x)*sin(x) - 1.33333333333333*cos(0.5*x)*cos(x) Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} \text{d}x</math>. import sympy x = sympy.symbols("x") f = 2**(-x) i = sympy.integrate(f, (x, 0, sympy.oo)) print(i) Ausgabe: 1/log(2) <code>sympy.oo</code> steht für das {{W|Unendlichzeichen}} <math>\infty</math> (die liegende Acht oder das Möbiusband). Mit <code>sympy.pprint(i)</code> ließe sich letzere Ausgabe etwas schöner schreiben: 1 ────── log(2) Man beachtete, <code>log</code> steht hier für den natürlichen Logarithmus <code>ln</code>. == Aufgaben == * Integrieren Sie die Funktion <math>y = \log(x) + 10x</math> von 1 bis 5. * Integrieren Sie die Funktion <math>y = x^3</math> von 0 bis 4. * Integrieren Sie <math>\int x^x(\log (x) + 1)\mathrm dx</math> symbolisch. = Gewöhnliche Differenzialgleichungen = == DGL numerisch lösen == Für die Lösung von Differenzialgleichungen steht u.a. die Funktion scipy.integrate.solve_ivp() zur Verfügung. Diese Funktion implementiert auch das Runge-Kutta-Verfahren (RK45). {{Wikipedia | Runge-Kutta-Verfahren}} Beispiel <math>y' = x^2 + y^3</math>: import scipy import numpy as np import matplotlib.pyplot as plt def dy_dx(x, y): return x**2 + y**3 y0 = [1] xi = [0, 1] x = np.arange(0, 1, 0.01) z = scipy.integrate.solve_ivp(dy_dx, xi, y0, method="RK45", dense_output=True) y = z.sol(x) plt.plot(x, y.T) plt.grid() plt.show() [[Datei:PythonIng_dgl1.png]] == DGL symbolisch lösen == Beispiel <math>y' = x^2 + y^3</math>: import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) print(lsg) Ausgabe: [Eq(f(x), (-x**2)**(1/3)), Eq(f(x), (-x**2)**(1/3)*(-1 - sqrt(3)*I)/2), Eq(f(x), (-x**2)**(1/3)*(-1 + sqrt(3)*I)/2)] Mit <code>sympy.pprint</code> (pretty print) lässt sich die Ausgabe etwas übersichtlicher darstellen. import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) sympy.pprint(lsg) Ausgabe: ⎡ _____ _____ ⎤ ⎢ _____ 3 ╱ 2 3 ╱ 2 ⎥ ⎢ 3 ╱ 2 ╲╱ -x ⋅(-1 - √3⋅ⅈ) ╲╱ -x ⋅(-1 + √3⋅ⅈ)⎥ ⎢f(x) = ╲╱ -x , f(x) = ────────────────────, f(x) = ────────────────────⎥ ⎣ 2 2 ⎦ == Aufgaben == * Lösen Sie die Differenzialgleichung <math>y' = \frac{1}{x\cdot y}</math> mit Python. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>m' = -k\cdot m</math>. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>y' = \sqrt{|y|}</math>. =Laplace-Transformation= Laplace-Transformation: <math>F(s) =\mathcal{L} \left\{f\right\}(s) = \int_{0}^{\infty} f(t) \mathrm e^{-st} \,\mathrm{d}t, \qquad s\in\mathbb{C} </math> Inverse Laplace-Transformation: <math>\mathcal{L}^{-1} \left\{F\right\}(t) = \frac{1}{2 \pi \mathrm j} \int_{ \gamma - \mathrm j \infty}^{ \gamma + \mathrm j \infty} \mathrm e^{st} F(s)\,\mathrm ds = \begin{cases} f(t) & \text{für } t \geq 0 \\ 0 & \text{für } t < 0 \end{cases} </math> Siehe auch [[Ing_Mathematik:_Laplace-Transformation]] Code: import sympy from sympy.abc import t, s # Laplace-Transformation der Funktion f(t) = 1 (Heaviside-Fkt.) f = 1 # alternativ: f = sympy.Heaviside(t) F = sympy.laplace_transform(f, t, s, noconds=True) print("Laplace-Transformierte F(s):", F) # Inverse Laplace-Transformation zurück in den Zeitbereich f_inv = sympy.inverse_laplace_transform(F, s, t) print("Inverse Transformation f(t):", f_inv) Ausgabe: Laplace-Transformierte F(s): 1/s Inverse Transformation f(t): Heaviside(t) Die Zeile from sympy.abc import t, s steht alternativ für t = sympy.symbols("t") s = sympy.symbols("s") =Fourier-Reihen= <math> f(x)\approx \frac{a_{0}}{2}+\sum_{k=1}^{\infty}\left(a_{k}\cos\left(kx\right)+b_{k}\sin\left(kx\right)\right) </math> <math> a_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\cos\left(kx\right)\mathrm dx\quad\text{für }k\geq0 </math> <math> b_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\sin\left(kx\right)\mathrm dx\quad\text{für }k\geq1 </math> Für die Sägezahnfunktion <math>y=x;\, 0 < x < 2\pi</math> sei die Fourierreihe mit einem Python-Programm (unter Mithilfe von sympy) hergeleitet. Code: from sympy import fourier_series, pi, symbols, pprint x = symbols('x') f = x s = fourier_series(f, (x, 0, 2*pi)) pprint(s.truncate(n=4)) Ausgabe: 2⋅sin(3⋅x) -2⋅sin(x) - sin(2⋅x) - ────────── + π 3 Siehe auch [[Ing Mathematik: Fourierreihen]]. Ein komplizierteres Beispiel: [[Datei:IngMath fourier bsp13.svg | 300px]] <math>0\le t < T/2\text{:}\quad f(t) = H</math> <math>T/2 \le t \le T\text{:}\quad f(t) = \frac{2H}{T}\left( t-\frac{T}{2}\right)</math> Code: import sympy as sp H = sp.Symbol('H', positive=True) T = sp.Symbol('T', positive=True) t = sp.Symbol('t') f = sp.Piecewise( (H, (t > 0) & (t < T/2)), (2*H/T*(t-T/2), (t > T/2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Ausgabe: ⎛2⋅π⋅t⎞ ⎛4⋅π⋅t⎞ ⎛6⋅π⋅t⎞ ⎛2⋅π⋅t⎞ ⎛6⋅π⋅t⎞ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ 2⋅H⋅cos⎜─────⎟ 2⋅H⋅cos⎜─────⎟ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ 3⋅H ──────────── - ──────────── + ──────────── + ────────────── + ────────────── + ─── π 2⋅π 3⋅π 2 2 4 π 9⋅π =Rechnen mit wirklich großen Zahlen= Bekannt ist, dass Python kaum Einschränkungen beim Wertebereich von Ganzzahlen hat, z.B. print(10**300) Ausgabe (gekürzt): 100000000000000000000...00000000000000000000000000000000000000000000000000000000000000000000000 Ähnliches geht auch mit Gleitpunktzahlen, z.B. durch die Verwendung des Moduls mpmath: import mpmath print(mpmath.mpf(1500.4)**mpmath.mpf(300)) Ausgabe: 7.27975299218612e+952 Anderes Beispiel: from mpmath import mp, pi mp.dps = 100 print(pi) Ausgabe: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068 mpmath kann noch einiges mehr, dazu sei aber auf die entsprechende Dokumentation auf der mpmath-Homepage verwiesen. mpmath ist Bestandteil von SymPy, kann aber auch separat installiert werden. Aber auch Python selbst besitzt eine Möglichkeit, um mit großen bzw. exakten Gleitpunktzahlen zu rechnen, nämlich das interne Modul decimal. Dieses hat einige Vorteile gegenüber mpmath, aber auch gravierende Nachteile. Diese seien hier nicht detailliert aufgezählt. Grob gesagt hat decimal im Finanzwesen seine Berechtigung. Für wissenschaftliche Anwendungen wird aber mpmath vorzuziehen sein, da es u.a. vielfältige mathematische Funktionen bereit stellt. Nachfolgend ein einfaches Beispiel mit decimal: import decimal print("Potenzierung:", decimal.Decimal(1500.4) ** decimal.Decimal(300.0)) print("Einfache Addition:", 0.1 + 0.2) decimal.getcontext().prec = 50 print("Addition mit decimal:", decimal.Decimal("0.1") + decimal.Decimal("0.2")) Ausgabe: Potenzierung: 7.279752992186121551039839134E+952 Einfache Addition: 0.30000000000000004 Addition mit decimal: 0.3 <u>Aufgabe:</u> Recherchieren Sie im Internet die genauen Vor- und Nachteile von decimal und mpmath. Verwenden Sie dazu auch KI (z.B. von Google, chatgpt). =Regelungstechnische Aufgabenstellungen= Für regelungstechnische Aufgaben gibt es u.a. das externe Paket <code>control</code>. Hier soll nicht detailliert darauf eingegangen werden. Anhand eines Beispiels soll anschließend nur die Visualisierung in Form eines Bode-Diagramms und der Sprungantwort gezeigt werden. Gegeben sei ein P-Regler mit <math>R = \frac{5}{2}</math> und eine Strecke <math>S= \frac{1}{30s^3+20s^2+10s+1,5}</math>. Gesucht sei vorerst ein Bode-Diagramm für den offenen Regelkreis und das Führungsverhalten. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke # oder: G0 = ct.series(regler, strecke) Gw = ct.feedback(G0) ct.bode_plot(G0, label='G0') ct.bode_plot(Gw, label='Gw') plt.show() [[Datei:PythonIng_bode1.svg]] Nun noch für obiges Beispiel die Sprungantwort. Diese zeigt einige große Überschwinger, d.h. der Regler kann sicher noch optimiert werden. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke Gw = ct.feedback(G0) t, y = ct.step_response(Gw) plt.plot(t,y) plt.title('Sprungantwort') plt.xlabel('t') plt.ylabel('h(t)') plt.grid() plt.show() [[Datei:PythonIng_bode3.svg]] Einige weitere wichtige Daten (Phasenreserve, Amplitudenreserve, Durchtrittsfrequenz) lassen sich mittels der <code>control</code>-Funktion <code>margin()</code> ermitteln. Die Ortskurve lässt sich mit der Funktion <code>nyquist_plot()</code> zeichnen. Dies sei hier aber nicht weiter ausgeführt. ==Aufgaben== * Zeichen Sie mit Python die Ortskurve für obiges Beispiel. * Was passiert, wenn man die Reglerverstärkung weiter aufdreht (z.B. auf <math>R = \frac{25}{2}</math>)? * Wie sehen das Bode-Diagramm und die Sprungantwort aus, wenn ein PI-Regler verwendet wird? = Stereostatik etc. = Das Modul SymPy bietet einige Möglichkeiten einfache Bauwerke zu berechnen, z.B. Balken oder Fachwerke. Nachfolgend wird ein einfaches Fachwerk berechnet und gezeichnet. Python-Code: from sympy.physics.continuum_mechanics.truss import Truss t = Truss() # Knoten t.add_node(("A", -3, 0), ("B", 0, 0), ("C", 4, 0), ("D", 7, 0), ("E", 6, 1.5), ("F", 2, 3), ("G", -2, 1.5)) # Stäbe t.add_member(("AB","A","B"), ("BC","B","C"), ("CD","C","D")) t.add_member(("AG","A","G"), ("GB","G","B"), ("GF","G","F")) t.add_member(("BF","B","F"), ("FC","F","C"), ("CE","C","E")) t.add_member(("FE","F","E"), ("DE","D","E")) # Auflager; roller ... Loslager, pinned ... Festlager t.apply_support(("A","roller"), ("D","pinned")) # Einwirkende Kräfte t.apply_load(("G", 5, 270), ("E", 3, 90)) # Berechnung t.solve() print("Reaction Forces: ", t.reaction_loads) print("Internal Forces: ", t.internal_forces) # Fachwerk zeichnen p = t.draw() p.show() Ausgabe auf der Konsole: Reaction Forces: {'R_A_y': 4.20000000000000, 'R_D_x': 0, 'R_D_y': -2.20000000000000} Internal Forces: {'AB': 2.80000000000000, 'BC': 0.333333333333333, 'CD': -1.46666666666667, 'AG': -5.04777178564958, 'GB': -2.05555555555556, 'GF': -1.23413387432364, 'BF': 0.411111111111111*sqrt(13), 'FC': -0.3*sqrt(13), 'CE': 1.50000000000000, 'FE': 0.284800124843917, 'DE': 2.64407093534026} Zeichnung: [[File:PythonIng_fachwerk1.svg|300px]] Details zu diesem Thema siehe z.B. [https://docs.sympy.org/latest/modules/physics/continuum_mechanics/index.html Continuum Mechanics] oder [https://docs.sympy.org/latest/tutorials/physics/continuum_mechanics/index.html Continuum Mechanics Tutorials]. Auch andere mechanische Probleme werden von SymPy abgehandelt ([https://docs.sympy.org/latest/tutorials/physics/index.html Physics Tutorials]). == Aufgabe == Gegeben sei ein einseitig eingespannter Kragträger. Belastet wird er durch eine Einzellast am Trägerende. Für die Daten siehe folgende ASCII-Skizze: | 20 kN //|---> x | //| V //|---------------------- //| 10 m | Elastizitätsmodul E = 2,1*10⁵ N/mm² Flächenträgheitsmoment I = 0.001 m⁴ Berechnen Sie die Auflagerreaktionen, den Querkraft- und Biegemomentenverlauf, sowie die Verformungen. Stellen Sie dies mit Hilfe von SymPy graphisch und auch mittels Formeln dar. Verwenden Sie dazu auch pprint (pretty print) aus dem SymPy-Modul. Zwecks Lösungsansatz siehe die oben aufgeführte Seite "Continuum Mechanics Tutorials". Achten Sie auch auf die Einheiten! Kontrollieren Sie das Ganze mittels händischer Rechnung. In dem genannten Tutorial ist von "Singularity Functions" die Rede. Gemeint ist damit in diesem Kontext die {{W|Föppl-Klammer}}. Einige Python-Programme, vorrangig zu Maschinenelementen, finden sich auf [https://baymp.de/download_python.html BayMP für Python] (Balken, Zahnräder, Stabknickung usw.). =Thermodynamik= == PYroMat == Für thermodynamische Aufgabenstellungen gibt es verschiedene externe Module. Eines davon ist PYroMat (siehe auch [http://pyromat.org]). Damit lassen sich thermodynamische Stoffdaten für viele Substanzen berechnen. Beispiel (einige Stoffdaten für Wasser bei 400°C und 20 bar berechnen): import pyromat as pm # Wasserdaten laden: H2O = pm.get('mp.H2O') # Stoffdaten berechnen: T = 673.15 # Temperatur in Kelvin p = 20 # Druck in bar v = H2O.v(T, p) h = H2O.h(T, p) s = H2O.s(T, p) print(f"Spezifisches Volumen: {v} m³/kg") print(f"Spezifische Enthalpie: {h} kJ/kg") print(f"Spezifische Entropie: {s} kJ/(kg K)") Ausgabe: Spezifisches Volumen: [0.1512163] m³/kg Spezifische Enthalpie: [3248.3789473] kJ/kg Spezifische Entropie: [7.12924142] kJ/(kg K) <small> PYroMat muss vorab installiert werden (z.B. mittels pip, in eine virtuelle Umgebung) </small> <code>mp</code> steht für "multi phase". Für ein ideales Gas wäre <code>ig</code> zuständig, z.B. <code>'ig.O2'</code>. Beispiel (T-s-Diagramm für Wasser zeichnen): import numpy as np import matplotlib.pyplot as plt import pyromat as pm # Konfigurieren pm.config["unit_pressure"] = "bar" pm.config["unit_temperature"] = "K" fluid = pm.get("mp.H2O") # Temperaturbereich für das Nassdampfgebiet T_tripel = 273.16 T_crit = 647.096 T = np.linspace(T_tripel, T_crit - 0.1, 200) # Sättigungslinien berechnen und zeichnen for x in np.linspace(0.0, 1.0, 5): s = fluid.s(T=T, x=x) if(x<=0.0): plt.plot(s, T, label="Siedelinie x=%3.1f" % x, linewidth=2.0) elif(x>=1.0): plt.plot(s, T, label="Taulinie x=%3.1f" % x, linewidth=2.0) else: plt.plot(s, T, label="x=%3.1f" % x, linewidth=1.0) # Isobaren zeichnen p_values = [0.1, 1, 10, 50, 100] T_isobar = np.linspace(T_tripel, 1000, 200) t = 0.7 for p in p_values: s_iso = fluid.s(T=T_isobar, p=p) plt.plot(s_iso, T_isobar, 'k-', alpha=0.8, linewidth=0.8) t += .05 idx = int(len(s_iso) * t) plt.text(s_iso[idx], T_isobar[idx], f"{p} bar", fontsize=9, alpha=0.8) # Diagramm zeichnen plt.title("T-s-Diagramm für Wasser") plt.xlabel("Spezifische Entropie s in kJ/kg K", fontsize=10) plt.ylabel("Temperatur T in K", fontsize=10) plt.legend(loc="best") plt.grid(True) plt.show() Ausgabe (in etwa so): [[Datei:T-s-Diagramm fuer Wasser.svg|400px]] == CoolProp == Auch mit CoolProp können Stoffdaten berechnet werden. Siehe auch [https://coolprop.org/coolprop/wrappers/Python/index.html] Beispiel (Wasser bei 20bar und 400°C): import CoolProp.CoolProp as CP fluid = 'Water' T = 673.15 # Temperatur in Kelvin P = 20e5 # Druck in Pascal dichte = CP.PropsSI('D', 'T', T, 'P', P, fluid) enthalpie = CP.PropsSI('H', 'T', T, 'P', P, fluid) entropie = CP.PropsSI('S', 'T', T, 'P', P, fluid) print(f"Spez. Volumen: {1/dichte:.6f} m³/kg") print(f"Spez. Enthalpie: {enthalpie:.2f} J/kg") print(f"Spez. Entropie: {entropie:.2f} J/kgK") Ausgabe: Spez. Volumen: 0.151215 m³/kg Spez. Enthalpie: 3248344.02 J/kg Spez. Entropie: 7129.16 J/kgK == iapws == Um Werte für Wasser(dampf) zu erhalten (IAPWS; '''I'''nternational '''A'''ssociation for the '''P'''roperties of '''W'''ater and '''S'''team) gibt es die Bibliothek iapws. Siehe auch [https://iapws.org/] und [https://pypi.org/project/iapws/] Beispiel (Wasser für 20bar und 400°C): from iapws import IAPWS97 dampf = IAPWS97(P=2.0, T=673.15) print(f"Spezifisches Volumen: {dampf.v:.6f} m³/kg") print(f"Spezifische Enthalpie: {dampf.h:.2f} kJ/kg") print(f"Spezifische Entropie: {dampf.s:.4f} kJ/(kgK)") print(f"Phase: {dampf.phase}") Ausgabe: Spezifisches Volumen: 0.151208 m³/kg Spezifische Enthalpie: 3248.23 kJ/kg Spezifische Entropie: 7.1290 kJ/(kgK) Phase: Gas == TESPy == Ein anderes Modul für einen anderen Aufgabenzweck ist TESPy ('''T'''hermal '''E'''ngineering '''S'''ystems in '''Py'''thon). Dieses Modul ist für die Anlagensimulation zuständig. Für nähere Informationen siehe [https://tespy.readthedocs.io/en/main/getting_started/introduction.html]. Als Beipiel sei hier vorerst Code, der von der Google KI generiert wurde, angeführt. Der Code wurde überarbeitet, damit keine Warnungen auftreten. Bitte aber den Code trotzdem mit Vorsicht genießen, auch KI-generierter Code kann Fehler aufweisen. Eine Pumpe wird berechnet: from tespy.components import Sink, Source, Pump from tespy.connections import Connection from tespy.networks import Network # 1. Netzwerk definieren (Zentrales Steuerungselement) # Wir wählen Wasser als Fluid und bar/Celsius als Einheiten nw = Network(fluids=["water"]) nw.units.set_defaults(pressure="bar", pressure_difference="bar", temperature="°C", enthalpy="kJ / kg") # 2. Komponenten erstellen eingang = Source("Wasserquelle") ausgang = Sink("Wasserspeicher") pumpe = Pump("Speisewasserpumpe") # 3. Verbindungen definieren (Komponenten miteinander verknüpfen) c1 = Connection(eingang, "out1", pumpe, "in1") c2 = Connection(pumpe, "out1", ausgang, "in1") # Verbindungen dem Netzwerk hinzufügen nw.add_conns(c1, c2) # 4. Randbedingungen und Parameter festlegen # Zustand am Eingang (Druck, Temperatur, Massenstrom, Fluid-Zusammensetzung) c1.set_attr( v=1, # Massenstrom: 1 kg/s T=20, # Temperatur: 20 °C p=1, # Druck: 1 bar fluid={"water": 1}, # 100% Wasser ) # Zustand am Ausgang / Zielwerte der Pumpe c2.set_attr(p=10) # Ziel-Druck nach der Pumpe: 10 bar # Pumpeneigenschaften festlegen pumpe.set_attr(eta_s=0.8) # Isentroper Wirkungsgrad von 80% # 5. Simulation ausführen nw.solve(mode="design") # 6. Ergebnisse ausgeben nw.print_results() # Spezifische Werte direkt auslesen print("\n--- Auswertung ---") print(f"Erforderliche Pumpenleistung: {pumpe.P.val / 1000:.2f} kW") print(f"Temperatur nach der Pumpe: {c2.T.val:.2f} °C") Ausgabe (gekürzt): iter | residual | progress | massflow | pressure | enthalpy | fluid | component -------+------------+------------+------------+------------+------------+------------+------------ 1 | 7.04e+04 | 12 % | 9.96e+02 | 0.00e+00 | 8.81e+04 | 0.00e+00 | 0.00e+00 2 | 5.91e-12 | 100 % | 1.11e-13 | 0.00e+00 | 7.39e-12 | 0.00e+00 | 0.00e+00 3 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 4 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 Total iterations: 4, Calculation time: 0.01 s, Iterations per second: 480.85 ##### RESULTS (Pump) ##### +-------------------+----------+----------+-----------+----------+----------+----------+ | | P | pr | dp | eta | eta_s | head | |-------------------+----------+----------+-----------+----------+----------+----------| | Speisewasserpumpe | 1.12e+06 | 1.00e+01 | -9.00e+00 | 8.00e-01 | 8.00e-01 | 9.19e+01 | +-------------------+----------+----------+-----------+----------+----------+----------+ ... ... --- Auswertung --- Erforderliche Pumpenleistung: 1124.77 kW Temperatur nach der Pumpe: 20.07 °C = Stochastik = Die {{W|Stochastik}} ist ein sehr weites Feld. Hier werden etliche wichtige Themen kurz angerissen. Python stellt mit den Moduln math und statistics Software zu diesem Zwecke bereit. math und statistics sind bereits im Lieferumfang von Python enthalten. Aber auch mit den externen Modulen NumPy, SciPy, stochastic und pandas kann man Stochastik in Python betreiben. Die Theorie der Wahrscheinlichkeitsrechnung und Statistik soll etwas später in Band 5 dieser Buchreihe behandelt werden. == Lageparameter == import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] m1 = statistics.mean(werte) m2 = statistics.mode(werte) m3 = statistics.median(werte) print("Arithmetischer Mittelwert = ", m1) print("Modalwert = ", m2) print("Median = ", m3) Ausgabe: Arithmetischer Mittelwert = 3.5 Modalwert = 1 Median = 3.0 == Streuungsparameter == Beispiel (Berechnung der Standardabweichung): import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] s = statistics.stdev(werte) print("Standardabweichung = ", s) Ausgabe: Standardabweichung = 2.6770630673681683 Beispiel (Berechnung des Variationskoeffizienten V = Standardabweichung/Mittelwert) import numpy as np from scipy import stats import statistics k = 50 dat1 = [14, 21, 18, 25, 30, 17, 20] dat = np.array(dat1) # Mit SciPy v = stats.variation(dat) vddof = stats.variation(dat, ddof=1) print("V SciPy: ", v) print("V DDOF SciPy: ", vddof) print(k*"-") # mit NumPy mittelwert1 = np.mean(dat) std_abw1 = np.std(dat) std_abw1ddof = np.std(dat, ddof=1) v1= std_abw1 / mittelwert1 v1ddof = std_abw1ddof / mittelwert1 print("Mittelwert NumPy: ", mittelwert1) print("Std.abw. NumPy: ", std_abw1) print("Std.abw. DDOF NumPy: ", std_abw1ddof) print("V NumPy: ", v1) print("V DDOF NumPy: ", v1ddof) print(k*"-") # nur mit reinem Python mittelwert2 = statistics.mean(dat1) std_abw2 = statistics.stdev(dat1) v2 = std_abw2 / mittelwert2 print("Mittelwert Python: ", mittelwert2) print("Std.abw. Python: ", std_abw2) print("V Python:", v2) print(k*"-") Ausgabe: V SciPy: 0.23890355966467272 V DDOF SciPy: 0.25804533701889254 -------------------------------------------------- Mittelwert NumPy: 20.714285714285715 Std.abw. NumPy: 4.948716593053935 Std.abw. DDOF NumPy: 5.3452248382484875 V NumPy: 0.23890355966467272 V DDOF NumPy: 0.2580453370188925 -------------------------------------------------- Mittelwert Python: 20.714285714285715 Std.abw. Python: 5.3452248382484875 V Python: 0.2580453370188925 -------------------------------------------------- Der Unterschied bei der Standardabweichung zwischen reinem Python und den externen Bibliotheken SciPy und NumPy entsteht dadurch, dass einmal durch (n-1) und das andere Mal nur durch n dividiert wird. Dies kann bei NumPy und SciPy dadurch entschärft werden, indem <code>ddof=1</code> gesetzt wird. ddof steht für '''D'''elta '''D'''egrees '''o'''f '''F'''reedom. <small>Je größer die Anzahl der Datensätze n wird, umso weniger spielt das eine Rolle.</small> == Kombinatorik == Beispiel: import math n = 7 k = 5 print("n! = ", math.factorial(n)) print("Kombinationen (n über k) = ", math.comb(n, k)) Ausgabe: n! = 5040 Kombinationen (n über k) = 21 Siehe zu diesem Thema auch [[Ing Mathematik: Permutationen, Kombinationen, binomischer Lehrsatz]]. Die Anzahlen lassen sich einfach aus den dortigen Formeln ermitteln, z.B. bei Permutationen mit <math>n!</math> oder Variationen mit Wiederholungen als <math>n^k</math>. Will man die Kombinationen oder Variationen aber auch als Liste ausgeben, so kann das Modul <code>itertools</code> nützlich sein. Beispiel (Variationen ohne Wiederholung): from itertools import permutations menge = ["A", "B", "C", "D"] # n = 4 k = 3 variationen = list(permutations(menge, k)) for v in variationen: print("".join(v)) print(50*"-") print(len(variationen)) Ausgabe (gekürzt): ABC ABD ACB ... DCA DCB -------------------------------------------------- 24 Siehe zum Modul <code>itertools</code> auch die Website [https://docs.python.org/3/library/itertools.html]. * Variationen mit Wiederholung: <code>itertools.product()</code> * Kombinationen ohne Wiederholung: <code>itertools.combinations()</code> * Kombinationen mit Wiederholung: <code>itertools.combinations_with_replacement()</code> == Zufallszahlen == Beispiel: import random # Ganzzahlige Zufallszahl von 1 bis 10 zufallszahl1 = random.randint(1, 10) # Gleitpunktzahlen # zwischen 0.0 und 1.0 zufallszahl2 = random.random() # Zahl zwischen 1.5 und 9.5 zufallszahl3 = random.uniform(1.5, 9.5) # aus Liste auswählen farbe = ["Rot", "Grün", "Blau"] zufallswert = random.choice(farbe) print(zufallszahl1) print(zufallszahl2) print(zufallszahl3) print(zufallswert) Ausgabe, z.B.: 5 0.14147945849015753 6.894003397570905 Rot Benötigt man mehrere Zufallszahlen, so ist das Modul <code>numpy</code> zu bevorzugen, z.B.: * Normalverteilung: <code>np.random.normal(...)</code> * Gleichverteilung: <code>np.random.uniform(...)</code> == Histogramm == Zum Thema Histogramm siehe {{W|Histogramm}}. Beispiel (mit Matplotlib): import matplotlib.pyplot as plt import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) plt.hist(daten, bins=25, edgecolor='darkgray') plt.show() Ausgabe: [[Datei:IngMath_histogramm.svg|300px]] Beispiel (mit Seaborn): import matplotlib.pyplot as plt import seaborn as sns import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) sns.set_theme(style="darkgrid") sns.histplot(data=daten) plt.show() Ausgabe: [[Datei:IngMath_histogramm2.svg|300px]] Das Kürzel <code>sns</code> ist Konvention und steht für die fiktive Figur '''S'''amuel '''N'''orman '''S'''eaborn aus der US-Fernsehserie {{W|The West Wing – Im Zentrum der Macht | The West Wing}}. == Box-Plot == [[File:Elements of a boxplot.svg|400px]] Siehe auch {{W|Box-Plot}}. Beispiel (mit Seaborn erstellt): import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset("tips") sns.boxplot(data=df, x="day", y="tip", hue="day", legend=False) plt.show() Ausgabe: [[Datei:IngMath_boxplot.svg|400px]] Beispiel (mit Matplotlib erstellt): import matplotlib.pyplot as plt daten = [12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25] plt.boxplot(daten, patch_artist=True) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() Ausgabe: [[Datei:IngMath_boxplot2.svg|300px]] Um mehrere Box-Plots unterschiedlicher Farbe mit Matplotlib in einem Diagramm zu zeichnen, können Sie folgendermaßen vorgehen: import matplotlib.pyplot as plt daten = [[12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25], [10, 19, 20, 21, 20, 30, 19, 40, 11, 17, 19, 21]] farben = ["green", "blue"] boxplot = plt.boxplot(daten, patch_artist=True) for patch, farbe in zip(boxplot['boxes'], farben): patch.set_facecolor(farbe) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() == Regressionsrechnung == Beispiel: import numpy as np import matplotlib.pyplot as plt # Messpunkte x = np.array([1, 3, 5, 6, 8, 10, 20]) y = np.array([3, 4, 5, 5, 7, 9, 11]) # Regressionskurve (Grad 1 = lineare Regression, 2 = Polynom-Regression 2. Gr.) # y = kx + d k, d = np.polyfit(x, y, deg=1) # y = ax**2 + bx + c a, b, c = np.polyfit(x, y, deg=2) x_l = np.linspace(1, 20, 100) y_p = a * x_l**2 + b * x_l + c # Zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.plot(x, k*x + d, color='blue', label='Regressionsgerade') plt.plot(x_l, y_p, color='red', label='Regressionspolynom 2. Gr.') plt.xlabel('x') plt.ylabel('y') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: [[Datei:IngMath_regression.svg|400px]] == Korrelationsrechnung == Beispiel: import pandas as pd import matplotlib.pyplot as plt # Messdaten x = [1, 3, 4, 5, 6] y = [2, 4, 6, 8, 5] daten = {'X': x, 'Y': y} df = pd.DataFrame(daten) # Korrelation korr = df['X'].corr(df['Y']) print(f"Korrelationskoeff.: {korr}") # Messpunkte zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: Korrelationskoeff.: 0.7556096518348252 [[Datei:IngMath_korrelation.svg|300px]] == Mengen und Venn-Diagramme == Beispiel: import matplotlib.pyplot as plt from matplotlib_venn import venn2 menge_a = {1, 2, 3, 4, 5, 6} menge_b = {4, 5, 6, 7, 8} vereinigung = menge_a | menge_b schnitt = menge_a & menge_b print("Vereinigungsmenge = ", vereinigung) print("Schnittmenge = ", schnitt) venn2([menge_a, menge_b], set_labels=('Menge A', 'Menge B')) plt.show() Ausgabe: Vereinigungsmenge = {1, 2, 3, 4, 5, 6, 7, 8} Schnittmenge = {4, 5, 6} [[Datei:IngMath_venn.svg|300px]] Siehe auch {{W|Mengendiagramm#Venn-Diagramme}}. == Verteilungs- und Dichtefunktion == * CDF ... '''C'''umulative '''D'''istribution '''F'''unction, Verteilungsfunktion * PDF ... '''P'''robability '''D'''ensity '''F'''unction, Dichtefunktion Beispiel (Normalverteilung): import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm my, sigma = 0, 1 x = np.linspace(-4, 4, 50) pdf = norm.pdf(x, my, sigma) cdf = norm.cdf(x, my, sigma) plt.plot(x, pdf, lw=2, label="Dichtefunktion") plt.plot(x, cdf, lw=2, label="Verteilungsfunktion") plt.legend() plt.grid() plt.show() Ausgabe: [[Datei:IngMath_cdf_pdf.svg|300px]] Beispiel (<math>\chi^2</math>-Verteilung): import numpy as np import matplotlib.pyplot as plt import scipy.stats as stats x = np.linspace(0, 20, 500) # df ... degree of freedom, Freiheitsgrad pdf = (stats.chi2.pdf(x, df=2), stats.chi2.pdf(x, df=5), stats.chi2.pdf(x, df=10)) for i in range(0,3): if(i==0): lab = "Freiheitsgrad 2" elif(i==1): lab = "Freiheitsgrad 5" else: lab = "Freiheitsgrad 10" plt.plot(x, pdf[i], label=lab, lw=2) plt.grid() plt.legend() plt.show() Ausgabe: [[Datei:IngMath_chi2.svg | 300px]] == Schätzen und Testen == === Intervallschätzung === Als Beispiel seien Daten gegeben, die von ''Dürr, Mayer: Wahrscheinlichkeitsrechnung und Schließende Statistik; 7. Aufl., Hanser, 2014, Seite 137'' stammen. Und zwar soll das 95%-Vertrauensintervall für den Mittelwert des Kaloriengehalts (kcal/100g) von Hähnchen ermittelt werden. Wir wollen das mit Python inkl. NumPy und SciPy durchführen. Die Stichprobe ist groß (50 Hähnchen): Python-Code: import numpy as np import scipy.stats as stats # Stichprobe daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203] # Parameter definieren konfidenzniveau = 0.95 mean = np.mean(daten) std = np.std(daten, ddof=1) stdfehler = stats.sem(daten) intervall = stats.norm.interval(confidence=konfidenzniveau, loc=mean, scale=stdfehler) print(f"Mittelwert: {mean}") print(f"Standardabweichung: {std}") print(f"Konfidenzintervall: {intervall}") Ausgabe: Mittelwert: 215.48 Standardabweichung: 33.14238915925757 Konfidenzintervall: (np.float64(206.29356722321992), np.float64(224.66643277678006)) Diese Werte stimmen gerundet mit denen im genannten Buch überein. Zum Code selbst: * sem steht für '''s'''tandard '''e'''rror of the '''m'''ean. * <code>scipy.stats.norm</code> ... Modul für die Normalverteilung. === Punktschätzung === Gleiche Daten wie oben bei der Intervallschätzung. Python-Code: import numpy as np from scipy import stats daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203 ] mu_hat, sigma_hat = stats.norm.fit(daten) print(f"Schätzer für den Erwartungswert (μ): {mu_hat:.4f}") print(f"Schätzer für die Standardabweichung (σ): {sigma_hat:.4f}") Ausgabe: Schätzer für den Erwartungswert (μ): 215.4800 Schätzer für die Standardabweichung (σ): 32.8093 === Hypothesentests === Beispiel: import numpy as np import scipy.stats as stats x_quer = 12.075 # Stichproben-Mittelwert var = 0.069 # Stichproben-Varianz n = 90 # Stichprobengröße my_0 = 12.0 # Nullhypothese alpha = 0.05 # Signifikanzniveau z_stat = (x_quer - my_0) / np.sqrt(var / n) p_val = 2 * (1 - stats.norm.cdf(np.abs(z_stat))) print(f"Z-Statistik: {z_stat:.4f}") if p_val < alpha: print(f"p-Wert: {p_val:.6f} < alpha:", alpha) print("Die Nullhypothese wird verworfen.") else: print(f"p-Wert: {p_val:.6f} > alpha:", alpha) print("Die Nullhypothese wird nicht verworfen.") Ausgabe: Z-Statistik: 2.7087 p-Wert: 0.006755 < alpha: 0.05 Die Nullhypothese wird verworfen. == Statistische Qualitätskontrolle == Beispiel (Mittelwertkarte): import numpy as np import matplotlib.pyplot as plt # Gegeben sollwert = 50.0 varianz = 4.0 stichproben_umfang = 1 daten = [49.5, 50.2, 53.0, 48.1, 52.6, 53.4, 49.8] # Berechnung standardabweichung = np.sqrt(varianz) streuung = standardabweichung / np.sqrt(stichproben_umfang) cl = sollwert ucl = cl + 3 * streuung lcl = cl - 3 * streuung # Darstellung plt.plot(daten, marker='o', linestyle='-', color='b', label='Messdaten') plt.axhline(cl, color='green', linestyle='-', label=f'CL: {cl}') plt.axhline(ucl, color='red', linestyle='--', label=f'UCL: {ucl:.2f}') plt.axhline(lcl, color='red', linestyle='--', label=f'LCL: {lcl:.2f}') plt.title('Mittelwertkarte') plt.xlabel('Stichprobe') plt.ylabel('Wert') plt.legend(loc='lower left') plt.grid(True) plt.show() Ausgabe: [[Datei:IngMath_mittelwertkarte.svg|300px]] Siehe auch {{W|Shewhart-Regelkarte}} und {{W|Qualitätsregelkarte}}. * UCL ... '''U'''pper '''C'''ontrol '''Limit''', Obere Eingriffsgrenze * LCL ... '''L'''ower '''C'''ontrol '''Limit''', Untere Eingriffsgrenze * CL ... '''C'''enter '''L'''ine, Mittellinie = Ein- und Ausgabe = == print == Die Anweisung print haben wir schon oft verwendet. Hier soll anhand von Beispielen kurz beschrieben werden, was der Befehl print leisten kann. print("Hallo", "Welt", 1, sep="-") print("Hallo", end=" ") print("Welt") Ausgabe: Hallo-Welt-1 Hallo Welt == input == a = int(input("Zahl 1: ")) b = int(input("Zahl 2: ")) print("a + b = ", a+b) Ausgabe (nach Eingabe der beiden Ganzzahlen): Zahl 1: 4 Zahl 2: 5 a + b = 9 == Aus Dateien lesen == Es seinen die datei.txt Hallo Welt. Wie geht es dir? ... und test1.py dat = open("datei.txt", mode = "r") print(dat.read()) dat.close() Ausgabe Hallo Welt. Wie geht es dir? ... Mit dem open()-Befehl wird die Datei datei.txt im Lesemodus geöffnet (r ... read). Mit dem read()-Befehl wird die Datei eingelesen und mittels print ausgegeben. == In Dateien schreiben == dat = open("datei.txt", mode = "a", encoding = "utf-8") dat.write("Hänge Zeile an\n") dat.close() Die Datei datei.txt sieht nach Abarbeitung des obigen Skripts nun so aus Hallo Welt. Wie geht es dir? ... Hänge Zeile an Es wird die Datei im Schreibmodus geöffnet (a ... append (anhängend), w ... write (überschreibend)). write() fügt hier also eine Zeile Text am Dateiende ein. close() schließt die Datei wieder. Das close() kann man sich mit der with-Anweisung auch sparen. with open("datei.txt", mode="a", encoding="utf-8") as dat: dat.write("Hänge Zeile an\n") = Benutzeroberflächen erstellen = == tkinter == {{Wikipedia | Tkinter}} Python bietet standardmäßig das Modul tkinter zur Programmierung von Benutzeroberflächen. Es müssen also bei der Verwendung von tkinter keine externen Module installiert werden. Hier wird eine (sehr) kurze Einführung in das Erstellen von grafischen Oberflächen mittels tkinter gegeben. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") win.minsize(300, 50) but = tk.Button(win, text = "Push the button") but.pack() win.mainloop() Ausgabe: [[Datei:PythonIng_gui1.jpg]] Ein etwas komplizierteres Beispiel sei nachfolgend gezeigt. Es sollen zwei Strings miteinander verknüpft und ausgegeben werden. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") def on_button_clicked(): str = ent1.get() + ent2.get() lab2["text"] = str ent1 = tk.Entry(win) ent2 = tk.Entry(win) lab1 = tk.Label(win, text="verknuepfen mit") lab2 = tk.Label(win, text="") but = tk.Button(win, text = "=", command=on_button_clicked) ent1.pack(side="left") lab1.pack(side="left") ent2.pack(side="left") but.pack(side="left") ent2.pack(side="left") lab2.pack(side="left") win.mainloop() Ausgabe (vor der Eingabe der Teilstrings): [[Datei:PythonIng_gui2.jpg]] Ausgabe (nach der Eingabe der Teilstrings und dem Drücken des =-Buttons): [[Datei:PythonIng_gui3.jpg]] == curses == {{Wikipedia | curses}} Mit dem curses-Modul lassen sich u.a. TUIs ('''T'''ext '''U'''ser '''I'''nterfaces) erstellen. Ein sehr einfaches Beispiel zur allgemeinen Funktionsweise wird nachstehend geliefert. import curses stdscr = curses.initscr() curses.start_color() curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE) stdscr.clear() stdscr.addstr("Hallo Welt", curses.color_pair(1)) stdscr.refresh() stdscr.getch() curses.endwin() Als Ausgabe sollte <span style="color:#FF0000;">Hallo Welt</span> (rote Schrift auf weißem Hintergrund) auf dem Terminal/der Konsole erscheinen. Getestet wurde dies mit openSUSE Tumbleweed, Python-Version 3.13.12. Das entsprechende Python-curses-Package muss installiert sein. Allgemeine Informationen zur Terminal-/Konsolengröße und Cursorposition liefert folgendes Programm: import curses stdscr = curses.initscr() stdscr.addstr(3, 5, "LINES: %d" % curses.LINES) stdscr.addstr(4, 5, "COLS: %d" % curses.COLS) (y,x) = stdscr.getyx() stdscr.addstr(5, 5, "Momentane Cursorposition: [%d, %d]" % (y, x)) (y,x) = stdscr.getbegyx() stdscr.addstr(6, 5, "Koordinatenursprung: [%d, %d]" % (y, x)) (y,x) = stdscr.getmaxyx() stdscr.addstr(7, 5, "Fenstergröße: [%d, %d]" % (y, x)) stdscr.addstr(11, 2, "Taste drücken -> Ende") stdscr.refresh() stdscr.getch() curses.endwin() Es sollte sich in etwa folgende Ausgabe ergeben: LINES: 44 COLS: 110 Momentane Cursorposition: [4, 15] Koordinatenursprung: [0, 0] Fenstergröße: [44, 110] Taste drücken -> Ende Zur Funktionsweise von curses siehe auch das Wikibook [[ncurses]]. Zum Verständnis sind dort allerdings elementare Kenntnisse in der Programmiersprache C erforderlich. == Qt == {{Wikipedia | Qt (Bibliothek)}} Auch für das Qt-Framework gibt es eine Anbindung an Python. Nachfolgend ein einfaches Beispiel. import sys from PySide6.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hallo Welt!") label.show() sys.exit(app.exec()) Ausgabe: [[Datei:PythonIng_gui10.png]] == Gtk == {{Wikipedia | GTK (Programmbibliothek)}} Eine idente Ausgabe, wie oben für Qt gezeigt, erzeugt z.B. folgendes Gtk-Programm: import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk def on_activate(app): win = Gtk.ApplicationWindow(application=app) lab = Gtk.Label(label="Hallo Welt!") win.set_child(lab) win.present() app = Gtk.Application() app.connect('activate', on_activate) app.run(None) Auch für die Benutzung von Qt und Gtk müssen die jeweiligen Packages installiert sein. Getestet wurden die entsprechenden Python-Programme nur unter openSUSE Tumbleweed. Wie das GTK-Paket unter MS Windows 11 installiert wird, siehe z.B. [https://www.gtk.org/docs/installations/windows Setting up GTK for Windows]. Damit sei aber das Thema "Benutzeroberflächen erstellen" hier abgeschlossen, da dies schon ein sehr spezielles Aufgabengebiet ist, das eher Informatiker und nicht so sehr Ingenieure anspricht. Bei Bedarf siehe aber ggf. die entsprechenden Links unten in diesem Tutorial. Dort sind weiterführende Informationen zu finden. = Pandas kurz erklärt = Hier wird kurz auf das externe Modul Pandas eingegangen. Pandas steht für '''Pan'''el '''Da'''ta und ist ein Modul für die Datenanalyse und -manipulation. == Series == Vorstellbar ist eine "Series" wie eine einzelne Spalte in einem Tabellenkalkulationsprogramm. Beispiel (Index implizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) # Temperaturwerte print(temp) Ausgabe: 0 8.5 1 11.0 2 12.5 3 10.0 4 13.0 5 11.0 6 14.5 dtype: float64 Das Kürzel <code>pd</code> ist Konvention. Es seien Temperaturwerte gegeben. Die erste Spalte bei der Ausgabe ist der Index. Die zweite Spalte enthält die Werte. Beispiel (separater Zugriff auf den Index und auf die Werte): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) print(temp.index) print(temp.values) Ausgabe: RangeIndex(start=0, stop=7, step=1) [ 8.5 11. 12.5 10. 13. 11. 14.5] Beispiel (Index explizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) print("*** Die gesamte Series ***") print(temp) print("*** Temperatur am Donnerstag ***") print(temp["Do"]) print("*** Tage wärmer als 12 Grad ***") temp_gr_12 = temp[temp > 12] print(temp_gr_12) Ausgabe: *** Die gesamte Series *** Mo 8.5 Di 11.0 Mi 12.5 Do 10.0 Fr 13.0 Sa 11.0 So 14.5 dtype: float64 *** Temperatur am Donnerstag *** 10.0 *** Tage wärmer als 12 Grad *** Mi 12.5 Fr 13.0 So 14.5 dtype: float64 == DataFrame == Ein DataFrame entspricht einer Tabelle. Beispiel (Erzeugen eines DataFrames): import pandas as pd tag = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] v1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=tag) v2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=tag) v3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=tag) tab = pd.concat([v1, v2, v3], axis=1) tab.columns = stadt print(tab) print(type(tab)) Ausgabe: Linz Salzburg Innsbruck Mo 1 8 Hallo Di 2 9 16 Mi 3 10 17 Do 4 11 18 Fr 5 12 19 Sa 6 13 20 So 7 14 21 <class 'pandas.core.frame.DataFrame'> Wir haben hier drei Datenspalten (v1, v2, v3) mit den Spaltennamen "Linz", "Salzburg" und "Innsbruck", sowie sieben Zeilen "Mo" bis "So". Beispiel (Zugriff auf eine Spalte): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab["Salzburg"]) Ausgabe: Mo 8 Di 9 Mi 10 Do 11 Fr 12 Sa 13 So 14 Name: Salzburg, dtype: int64 Beispiel (Zugriff auf eine Zeile): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab.loc["Di"]) Ausgabe: Linz 2 Salzburg 9 Innsbruck 16 Name: Di, dtype: object == Grafiken erstellen == Hier sei nur ein Torten- oder Kreisdiagramm gezeichnet: import pandas as pd import matplotlib.pyplot as plt temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) expl = [0, 0.2, 0, 0, 0, 0, 0] temp.plot.pie(figsize=(5,5), explode=expl) plt.show() Ausgabe: [[Datei:IngPython_pandas1.svg|350px]] Die <code>figsize</code> hat nichts mit der Spaltenanzahl zu tun, sondern setzt die Fenster- oder Diagrammgröße in Inches (Breite * Höhe). Mit Pandas kann man auch noch andere Diagrammarten erstellen, z.B. Linien- oder Balkendiagramme. Dies wird hier aber nicht vorgeführt. == Arbeiten mit CSV- und LibreOffice-Dateien == Gegeben sei eine CSV-Datei test1.csv: Mai;Juni;Juli 12;17;45 15;65;65 16;32;23 4;14;7 23;17;Keine Daten verfügbar 67;Keine Daten verfügbar;45 15;24;12 Lesen von dieser CSV-Datei: import pandas as pd tab = pd.read_csv("test1.csv", sep=";") print(tab) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Schreiben in eine CSV-Datei test2.csv: import pandas as pd val = pd.read_csv("test1.csv", sep=";") val.to_csv("test2.csv", index=False) Ausgabedatei: Mai,Juni,Juli 12,17,45 15,65,65 16,32,23 4,14,7 23,17,Keine Daten verfügbar 67,Keine Daten verfügbar,45 15,24,12 Die Ausgabedatei ist beinahe gleich wie die Eingabedatei. Es werden aber Kommas statt Strichpunkten verwendet. Daher kommt auch der Name CSV ('''C'''omma '''S'''eparated '''V'''alue). Will man wieder Strichpunkte, so kann man dies über den Parameter <code>sep=";"</code> in der <code>to_csv</code>-Funktion machen. Um direkt von einer ODS-Datei (LibreOffice Calc, '''O'''pen '''D'''ocument '''S'''preadsheet) zu lesen muss das Modul odfpy extra installiert sein (per YaST, pip etc.). Gelesen wird dann folgendermaßen: import pandas as pd df = pd.read_excel('test1.ods', engine='odf') print(df) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Die Datei "test1.ods" sei die Datei, aus der das obige "test1.csv" generiert wurde. Schreiben kann man ebenfalls in eine ODS-Datei: import pandas as pd daten = { "Name": ["Hugo", "Richie", "Wilhelmine"], "Alter": [38, 30, 29], "Ort": ["Linz", "Innsbruck", "Salzburg"] } tab = pd.DataFrame(daten) with pd.ExcelWriter("test2.ods", engine="odf") as writer: tab.to_excel(writer, sheet_name="Daten", index=False) Es ergibt sich eine "test2.ods"-Datei (Screenshot): [[Datei:IngPython_pandas2.png|250px]] == Sonstiges == Hier seien stichpunktartig einige weitere Features von Pandas angeführt: * {{W|Pivot-Tabelle|Pivot-Tabellen}} (pivot ... Dreh-, Angelpunkt): Zweck - große Datenmengen schnell zusammenfassen, filtern und analysieren. * NaN ('''n'''ot '''a''' '''n'''umber): In einem Datensatz fehlt ein Wert oder ist nicht definiert. * groupby-Funktion: Daten strukturieren, aggregieren oder Zwischensummen bilden. * {{W|Binning#Datenverarbeitung_und_-analyse|Binning}}: Klassenbildung. * Mehrstufige Indizierung (Hierarchical Indexing oder MultiIndex) * Zeitreihen (Time Series) Für tiefergehende und weiterführende Informationen wird auf das Buch von ''Klein: Numerisches Python; Hanser, 2023'' und [https://pandas.pydata.org/ pandas] verwiesen. = Style Guide, flake8, pylint, Black etc. = == Style Guide == Wie man schönen und richtigen Python-Code schreibt, erfahren Sie in * [https://peps.python.org/pep-0008/ PEP 8 – Style Guide for Python Code] == Formatter und Linter == Ein Modul, das prüft, ob die Richtlinien im Style Guide eingehalten wurden, ist ''flake8'': * [https://flake8.pycqa.org/en/latest/ Flake8: Your Tool For Style Guide Enforcement] Code formatieren kann man auch mit [https://pypi.org/project/black/ Black]. Z.B. übersetzt <code>black test1.py</code> die Datei <code>test1.py</code> import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) in import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Die Programmausgabe ist reformatted test1.py All done! ✨ 🍰 ✨ 1 file reformatted. Der Unterschied zwischen Black und Flake8: * Black ist ein Code-Formatter. Er formatiert Ihren Code um, sodass er im Einklang mit PEP 8 steht. * Flake8 ist ein {{W|Lint (Programmierwerkzeug) | Code-Linter}}. Flake8 verändert Ihren Code nicht, sondern durchsucht ihn nach potenziellen Fehlern etc. Am obigen Beispiel sieht man auch, dass flake8 und Black nicht immer einer Meinung sind. Flake8 (<code>flake8 test1.py</code>) würde standardmäßig den mit Black formatierten Code bemängeln: test1.py:8:80: E501 line too long (80 > 79 characters) Diese Diskrepanz kann beseitigt werden. Da 79 Zeichen auf modernen Bildschirmen meist als zu kurz empfunden werden, ist ein Limit von 88 Zeichen (Black-Standard) oder mehr empfehlenswert. Um dies zu implementieren, erstellen Sie in Ihrem Projektverzeichnis eine <code>.flake8</code>-Datei mit dem Inhalt [flake8] max-line-length = 88 Und schon ignoriert Flake8 dieses Problem. Ein anderer Linter ist pylint. Der würde beim Abarbeiten des obigen Beispiels, z.B. mit <code>pylint test1.py</code> noch eine Kleinigkeit bemängeln: ************* Module test1 /home/hr/tmp/test1.py:1:0: C0114: Missing module docstring (missing-module-docstring) ------------------------------------------------------------------ Your code has been rated at 8.57/10 (previous run: 8.57/10, +0.00) Auch pylint muss vor der ersten Verwendung installiert werden (z.B. mittels pip, virtuelle Umgebung, YaST). Die Dokumentation zu pylint findet sich auf [https://pylint.readthedocs.io/en/latest/]. <u>Aufgabe:</u> Fügen Sie einen "module docstring" in die <code>test1.py</code>-Datei ein und testen Sie erneut mit flake8, Black und pylint. <small>Sehen Sie zum Thema docstrings auch [https://peps.python.org/pep-0257/#what-is-a-docstring PEP 257 – Docstring Conventions].</small> Es gibt noch weitere Formatierungswerkzeuge für Python-Code. Z.B. [https://docs.astral.sh/ruff/ Ruff], ein moderner Code-Formatter und -Linter. Mittels <code>ruff check test1.py</code> würde obiger Code geprüft (Linter). <code>ruff format test1.py</code> formatiert den Code (Formatter). == Type Checker == "Type Checker" sind z.B. * mypy * pyright * ty Diese prüfen die Datentypen, z.B. in folgendem Code def greetings(name: str) -> str: return "Hello, %s" % name print(greetings(42)) Python selbst, flake8, ruff oder black würden diesen Code ohne zu murren akzeptieren. "Type Checker" würden aber sehr wohl Alarm schlagen, z.B. liefert <code>mypy</code> folgende Ausgabe test1.py:5: error: Argument 1 to "greetings" has incompatible type "int"; expected "str" [arg-type] Found 1 error in 1 file (checked 1 source file) Das funktioniert übrigens nicht nur bei Funktionsannotationen, sondern auch mit Variablen etc. from typing import Final # "Konstante", ab Python 3.8 NUMBER: Final = 123 print(NUMBER) NUMBER = 125 print(NUMBER) # Variable a: int = 345 print(a) a = "Irgendwas" print(a) # Variable (Pipe-Symbol), ab Python 3.10 b : int|str = 567 print(b) b = "sonstiges" print(b) Ausgabe mit python: 123 125 345 Irgendwas 567 sonstiges Ausgabe mit mypy: test3.py:6: error: Cannot assign to final name "NUMBER" [misc] test3.py:12: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment] Found 2 errors in 1 file (checked 1 source file) Python kennt übrigens keine Konstanten. Man kann diese mittels Großbuchstaben andeuten. Das ist aber nur Konvention, hat aber keine sonstigen Auswirkungen. Oder man verwendet wie oben gezeigt <code>Final</code>. Dann werfen Typchecker Errors aus. ==pydoc== pydoc ist ein Werkzeug, um Python-Module, -Funktionen und -Klassen zu dokumentieren. Beispiel <code>test1.py</code>: """Rechen-Modul. Funktionen die von pydoc gelesen werden. """ def multiply(a, b): """Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a * b def add(a, b): """Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a + b if __name__ == '__main__': print(multiply(3, 5)) print(add(4, 6)) Ausgabe mit <code>python3.13 -m pydoc test1</code> auf der Konsole: Help on module test1: NAME test1 - Rechen-Modul. DESCRIPTION Funktionen die von pydoc gelesen werden. FUNCTIONS add(a, b) Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl multiply(a, b) Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl FILE /home/xyz/tmp/test1.py Siehe zu diesem Thema z.B. auch [https://docs.python.org/3/library/pydoc.html]. Mittels <code>python3.13 -m pydoc -w test1</code> kann man auch eine HTML-Dokumentation erstellen. Wofür <code>if __name__ == '__main__':</code> steht, siehe z.B. etwas später im Abschnitt [[Ing_Mathematik:_Python#Doctests]]. == Sonstige Tools == Andere Tools für die {{W|Statische Code-Analyse|statische Codeanalyse}}, die aber für Ingenieure weniger interessant sein dürften, sind z.B. * Radon: Liefert verschiedene {{W|Softwaremetrik|Codemetriken}} (Komplexität, Wartbarkeitsindex ...) * Bandit: Findet Sicherheitslücken Tools für die {{W|Dynamisches Software-Testverfahren|dynamische Codeanalyse}}, z.B.: * DynaPyt (Framework zur dynamischen Programmanalyse) * cProfile (Profiler) * Memory Profiler (Speicheranalyse) * Memray (Speicheranalyse) * tracemalloc (Speicheranalyse) Paket- und Projektmanagement (pip-Ersatz etc.): * uv * Poetry * Conda * pipx Packaging-Tools (Freezer) und {{W|Compiler#Sonderformen|Transpiler}} : * pyinstaller ** erstellt eigenständige, ausführbare Binärdatei ** kein Cross-Compiler ** kein Schutz vor Reverse-Engineering ** langsam ** packt alles in eine Datei ** sehr große Datei ** Befehl, z.B.: <code>pyinstaller --onefile test1.py</code> ** GUI: <code>auto-py-to-exe</code> * cx_Freeze * nuitka ** Übersetzt Python-Code in C/C++-Code und weiter in eine ausführbare Datei ** kein Cross-Compiler ** Schutz vor Reverse-Engineering ** Befehl, z.B.: <code>nuitka --standalone --onefile test1.py</code> * cython = Einige Integrierte Entwicklungsumgebungen (IDEs)= Werden Programmtexte größer und umfangreicher, so ist das Arbeiten mit der interaktiven Programmierumgebung bzw. das direkte Ausführen von Python-Skripten mühsam. Man wünscht sich z.B. Hilfen zum Debuggen oder die automatische Code-Vervollständigung. Zu diesem Zweck wurden IDEs (Integrated Development Environments) geschaffen. Von diesen seinen nachfolgend auszugsweise einige kurz beschrieben. Testen Sie einfach aus, welche davon für Sie bzw. für Ihr Python-Projekt geeignet sind. == IDLE == IDLE ist die mit dem Python-Programmpaket mitgelieferte IDE. Der Name leitet sich einerseits ab vom Monty-Python-Mitglied Eric Idle, andererseits steht es als Abkürzung für "'''I'''ntegrated '''D'''evelopment and '''L'''earning '''E'''nvironment. IDLE ist einfach zu bedienen, bietet aber schon einen beachtlichen Leistungsumfang. Nachfolgend wird ein Screenshot zu IDLE geliefert. Rechts ist das Editor-Fenster zu sehen, links die interaktive Programmierumgebung. Um das Beispiel selbst nachvollziehen zu können, starten Sie IDLE. Das geht ähnlich, wie Sie die interaktive Programmierumgebung von Python starten (nur, dass Sie eben das IDLE-Icon doppelklicken und nicht das Python-Icon. Unter Linux geben Sie einfach in einem Terminal <code>idle3.13</code> o. Ä. ein). Weiter geht es mit "File - Open - ...". Die auszuführende Datei auswählen (im konkreten Fall ein "Hallo-Welt"-Programm). Es erscheint das rechte Fenster. Dort "Run - Run Module" auswählen. Und schon wird im linken Fenster "Hallo Welt!" ausgegeben. [[Datei:PythonIng_idle1.jpg | 600px]] Siehe auch {{W|IDLE}}. == PyCharm == PyCharm ist ein kommerzielles Produkt. Es gab aber auch eine kostenlose Community Edition. Seit 2025 sind beide Varianten vereint. Für die ersten 30 Tage sind die Pro-Funktionen frei verfügbar, danach nur noch die Kernfunktionalitäten (oder man bezieht kostenpflichtig die Pro-Version). Zu beziehen ist PyCharm unter dem Weblink [https://www.jetbrains.com/pycharm/]. Nachfolgend ein etwas abgewandeltes "Hallo Welt"-Programm, editiert und ausgeführt mit PyCharm. [[Datei:PyCharm_IDE_2023_screenshot.png | 600px]] Siehe auch {{W|PyCharm}}. == Eric == Auch eric ist Open Source und steht unter der GNU General Public License Version 3 oder später. Zu beziehen ist diese Software unter [https://eric-ide.python-projects.org/]. [[Datei:Screenshot_Eric_4.png | 600px]] Siehe auch {{W|eric (Software)}}. <small> Unter openSUSE Tumbleweed sollte sich eric auch mit YaST installieren lassen. Bei mir gibt es aber dann beim Ausführen des eric-Programms eine Fehlermeldung (Stand März 2026): ... ModuleNotFoundError: No module named 'PyQt6.QtPdfWidgets' Umgehen kann man dieses Problem aber wieder mit dem Erstellen einer virtuellen Umgebung, in etwa so python3.13 -m venv ~/tmp/venv1 cd ~/tmp/venv1/bin ./python3.13 -m pip install --upgrade --prefer-binary eric-ide ./eric7_ide </small> == PyScripter == Vom Funktionsumfang vergleichbar mit den vorherigen IDEs ist PyScripter. Auch PyScripter ist Open Source. Die Projekt-Homepage findet sich auf [https://sourceforge.net/projects/pyscripter/]. PyScripter ist nur für MS Windows verfügbar. [[Datei:PythonIng_pyscripter1.jpg | 600px]] == Spyder IDE == Spyder enthält bereits eine stabile Python-Version und etliche Module (z.B. matplotlib, numpy, control). Ansonsten kann dieses Softwarepaket vom Funktionsumfang her mit den anderen genannten IDEs locker mithalten. Spyder wurde unter der MIT-Lizenz veröffentlicht. Diese Software findet sich auf [https://www.spyder-ide.org]. [[Datei:Spyder-windows-screenshot.png | 600px]] Siehe auch {{W|Spyder (Software)}} == Eclipse IDE== Die {{W|Eclipse_(IDE)|Eclipse-IDE}} kann für Python aufgerüstet werden. Dazu gibt es das PyDev-Plugin. Installiert wird es über * Help > Eclipse Marketplace... * Find - PyDev - Install Danach muss noch der Pfad zum Python-Interpreter festgelegt werden * Window > Preferences > PyDev > Interpreters > Python Interpreter > New ... Das Ergebnis ist ähnlich wie im folgenden Bild, nur dass statt C/C++ Python Verwendung findet. [[Datei:Setting Up Eclipse CDT helloout.png | 600px]] == Sonstige == Die genannten IDEs sind nicht die Einzigen. Es gibt, um dem Image Pythons als beliebteste Programmiersprache gerecht zu werden, noch einige andere. Sowohl Open Source-Programme als auch kommerzielle Programme sind im Web zu finden, z.B. Thonny oder {{W|Visual Studio Code}}. Unter Linux kann man auch {{W|KDevelop}}, ausgestattet mit dem Python3-Plugin, einsetzen. Braucht man den Umfang von ausgewachsenen IDEs nicht, so kann man auch normale Texteditoren verwenden (z.B. {{W|Geany}} oder {{W|Kate_(Texteditor)|Kate}}). = Debuggen und Testen = Das Debuggen und Testen von Programmen sind wichtige Bestandteile der Programmierung. Syntaxfehler lassen sich i.A. leicht beheben. Schwieriger ist das Eingrenzen von logischen Fehlern, die ev. nur in bestimmten Situationen auftreten und keine explizite Fehlermeldung hervorrufen. Das Programm liefert falsche Ergebnisse oder es stürzt aus heiterem Himmel ab. Um das zu verhindern gibt es verschiedene Werkzeuge, die bei der Fehlersuche behilflich sein können. Vorerst siehe aber zwecks Begriffsklärung noch folgende Links: * {{W|Debuggen}} * {{W|Debugger}} * {{W|Softwaretest}} <gallery> First Computer Bug, 1947.jpg Test ganzheitlich.png V-Modell.svg </gallery> == Das Modul pdb == Python bringt schon ein Modul zum Debuggen mit. Siehe z.B. [https://docs.python.org/3/library/pdb.html pdb — The Python Debugger]. Komfortabler lässt sich das aber mittels Integrierter Entwicklungsumgebungen (IDEs) angehen. == Debuggen mit IDEs == Für die IDEs IDLE und Spyder sei kurz auf die entsprechenden Webseiten verwiesen: * [https://www.cs.uky.edu/~keen/help/debug-tutorial/debug.html Debugging under IDLE]. * [https://docs.spyder-ide.org/current/panes/debugging.html Spyder Debugger] Dort wird die Vorgehensweise auch mittels Screenshots erläutert. == assert == assert ... behaupten, zusichern ({{W|Assertion (Informatik)}}) Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10., 0.) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10., 0.) File "/home/hr/Develop/test1.py", line 4, in print1 assert y != 0.0 ^^^^^^^^ AssertionError Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1("10.", "5.") File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Aber auch bei nachfolgendem Code gibt es eine Fehlermeldung: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10, 5) File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Damit letzteres funktioniert, kann man den Programmcode so umschreiben: def print1(x, y): assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 2.0 Und jetzt fangen wir den <code>AssertionError</code> auf: def print1(x, y): try: assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) except(AssertionError): print("Hallo") print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Hallo Ich hoffe, es ist wenigstens im Ansatz klar geworden, wofür <code>assert</code> gut sein kann. Ausschalten kann man die <code>assert</code>-Überprüfung übrigens mit dem Python-Schalter <code>-O</code>. == Doctests == Innerhalb eines Docstrings kann die Arbeit im interaktiven Modus simuliert werden. Nach den Promptzeichen (>>>) erfolgen dann bei unserem Beispiel innerhalb des Docstrings simulierte Aufrufe der Funktion <code>print1()</code>. Danach folgen jeweils die Sollresultate. Wird das Modul oder die Datei als Hauptprogramm aufgerufen, so wird die Funktion <code>doctest.testmode()</code> aufgerufen und ein Bericht auf der Konsole ausgegeben. Wird das Modul nicht als Hauptprogramm aufgerufen, sondern importiert, dann wird diese <code>testmod</code>-Funktion nicht aufgerufen. D.h. dieser Code kann sowohl für Testzwecke als auch für den produktiven Einsatz verwendet werden. Das ist auch sinnvoll, weil wenn man Teile der Datei immer löschen bzw. einfügen müsste, so würden sich Fehlerquellen auftun. Das würde den Sinn und Zweck von Doctests konterkarieren. def print1(x=0., y=1.): """ Dividiere zwei Zahlen Autor: Intruder Datum: 12.08.2025 >>> print1(2., 1.) 2.0 >>> print1(5., 2.) 2.5 >>> print1(5.) 5.0 """ print(x/y) if __name__ == "__main__": import doctest doctest.testmod(verbose=True) Ausgabe: Trying: print1(2., 1.) Expecting: 2.0 ok Trying: print1(5., 2) Expecting: 2.5 ok Trying: print1(5.) Expecting: 5.0 ok 1 items had no tests: __main__ 1 items passed all tests: 3 tests in __main__.print1 3 tests in 2 items. 3 passed and 0 failed. Test passed. Das gezeigte Beispiel ist so ziemlich das einfachste, das es gibt. Für weiterführende Details siehe z.B.: * [https://peps.python.org/pep-0257/ PEP 257 – Docstring Conventions] * [https://docs.python.org/3/library/doctest.html doctest — Test interactive Python examples] ''Einschub:'' Ganz ähnlich kann man auch Klassen testen, z.B. in folgendem Code-Fragment class Fahrzeug: # siehe Abschnitt "Objektorientierte Programmierung" # ... if __name__ == "__main__": vauweh = Fahrzeug(170, 90) beemweh = Fahrzeug(200, 120) print(vauweh.convertGeschw()) print(beemweh.convertGeschw()) Wird das Script als Hauptprogramm ausgeführt (z.B. zu Testzwecken), so erfolgt die Ausgabe der zwei, via <code>convertGeschw()</code>, umgerechneten Geschwindigkeiten. Wird es aber als Modul eingebunden, so wird der letzte Programmabschnitt nicht ausgeführt (<code>__name__ == "__main__"</code> ergibt <code>False</code>). == pytest == Siehe zu diesem Thema auch {{W|Modultest}}. pytest ist ein externes Modul und muss vorab installiert werden, z.B. mittels pip install -U pytest pip install -U pytest-html Python-Code, Datei test1.py: def add(x, y): return x + y def test_answer(): assert add(1, 1) == 3 Starten von pytest in der Konsole: pytest test1.py Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py F [100%] ========================================================= FAILURES ========================================================== ________________________________________________________ test_answer ________________________________________________________ def test_answer(): > assert add(1, 1) == 3 E assert 2 == 3 E + where 2 = add(1, 1) test1.py:6: AssertionError ================================================== short test summary info ================================================== FAILED test1.py::test_answer - assert 2 == 3 ===================================================== 1 failed in 0.09s ===================================================== Hier erhalten wir einen Fehler, da 1+1 eindeutig ungleich 3 ist. Aber aus irgendeinem Grund wollte der Programmierer oder Tester in diesem Fall, dass dies so ist. Testfälle werden übrigens mit dem Präfix <code>test_</code> eingeleitet. Python-Code: def add(x, y): return x + y + 1 def test_answer(): assert add(1, 1) == 3 Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py . [100%] ===================================================== 1 passed in 0.01s ===================================================== Jetzt ist alles in Ordnung. Weiterführendes siehe z.B. * [https://docs.pytest.org/en/stable/ pytest: helps you write better programs] == unittest == Auch unittest dient zur Durchführung von Testreihen, ist aber Bestandteil von Python. Hier wird vorerst nicht näher darauf eingegangen. Siehe z.B. * [https://docs.python.org/3/library/unittest.html unittest — Unit testing framework] Lt. ''Inden: Python Challenge; dpunkt, 2021, Seite 481'' soll unittest weniger komfortabel als pytest sein. Einen Vergleich von unittest mit pytest findet man in * [https://knapsackpro.com/testing_frameworks/difference_between/pytest/vs/unittest pytest vs unittest] = Python und Anwendungsprogramme = Bisher stand immer alleine die Programmiersprache Python (ev. unter Einbeziehung von Modulen) im Mittelpunkt der Betrachtungen. Aber Python kann auch als Makrosprache für Anwendungsprogramme auftreten. Als Beispiele seien {{W|FreeCAD}} und {{W|LibreOffice}} genannt. == FreeCAD == FreeCAD ist ein freies 3D-CAD-Programm. Hier soll nicht auf die Bedienung dieses CAD-Pakets eingegangen werden, sondern nur auf die Möglichkeit, mittels Python Makros zu schreiben. Als einfacher Einstieg soll ein Makro erstellt werden, welches eine Kugel (rot) und einen Quader (blau) zeichnet. Folgende Vorbereitungsschritte sind erforderlich (es sei vorausgesetzt, dass FreeCAD schon am Rechner installiert ist. Downloaden können Sie das Programm von der Website [https://www.freecad.org/downloads.php?lang=en]): * FreeCAD starten * Leere Datei erstellen * Makro > Makros > Erstellen ... Es öffnet sich ein leeres Editorfenster, in das Sie folgenden Code eingeben können: import FreeCAD import Part doc = FreeCAD.newDocument() # Kugel kugel = Part.makeSphere(10) form_element = doc.addObject("Part::Feature", "Kugel") form_element.Shape = kugel kug = FreeCAD.ActiveDocument.getObject("Kugel") kug.ViewObject.ShapeColor = (1.0, 0.0, 0.0) neuePosition = App.Vector(5, 2.5, 2.5) kug.Placement = App.Placement(neuePosition, kug.Placement.Rotation) # Quader quader = Part.makeBox(5, 5, 50) form_element = doc.addObject("Part::Feature", "Quader") form_element.Shape = quader quad = FreeCAD.ActiveDocument.getObject("Quader") quad.ViewObject.ShapeColor = (0.0, 0.0, 1.0) doc.recompute() Diesen Code können Sie nun ausführen: * Makro > Makro ausführen Es ergibt sich folgende Ausgabe (gedreht und gezoomt): [[Datei: PythonIng_freecad1.png|500px]] Siehe auch [https://wiki.freecad.org/Python_scripting_tutorial/de# Anleitung Skripterstellung mit Python]. Getestet wurde obiges Beispiel mit FreeCAD 1.1.3 unter Linux und 1.1.1 unter MS Windows. == LibreOffice == LibreOffice ist ein freies Officepaket ([https://de.libreoffice.org/]). Hier soll nur das Tabellenkalkulationsprogramm Calc kurz betrachtet werden. Es seinen in den ersten 3 Zellen (A1 bis A3) Zahlen gegeben. Diese sollen mit einem Python-Makro addiert und das Resultat in der Zelle A5 ausgegeben werden. Auch hier sind Vorbereitungsarbeiten nötig: * zuerst muss unter Linux das Verzeichnis <code>~/.config/libreoffice/4/user/Scripts/python</code> erstellt werden * für MS Windows ist es das Verzeichnis <code>%APPDATA%\LibreOffice\4\user\Scripts\python</code> ** drücken Sie zuerst Win + R (es öffnet sich das Ausführen-Fenster) ** geben Sie <code>%appdata%</code> ein, danach drücken Sie Enter (es öffnet sich der Explorer) ** navigieren Sie zu dem genannten Verzeichnis bzw. erstellen Sie das Verzeichnis * in diesem Verzeichnis wird dann mit einem beliebigen Texteditor das Python-Makro erstellt, in unserem Fall die Datei <code>summiere_zellen.py</code>: import uno def summiere_zellen(*args): # Zugriff auf das aktuelle Dokument und das aktive Tabellenblatt ctx = uno.getComponentContext() smgr = ctx.getServiceManager() desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) doc = desktop.getCurrentComponent() sheet = doc.getCurrentController().getActiveSheet() # Werte aus den Zellen A1 bis A3 auslesen w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value # Addition der drei Werte summe = w1 + w2 + w3 # Ergebnis in die Zelle A5 schreiben sheet.getCellRangeByName("A5").Value = summe * siehe dazu ggf. auch [https://help.libreoffice.org/latest/de/text/sbasic/python/python_locations.html?DbPAR=BASIC]. Weiter geht es in LibreOffice Calc mit dem Menü ''Extras > Makros > Makros verwalten > Python''. Dort wird das Makro <code>summiere_zellen</code> ausgeführt. Es ergibt sich z.B. folgendes Resultat [[Datei:PythonIng_libreoffice1.png]] Das Kürzel <code>uno</code> steht für '''U'''niversal '''N'''etwork '''O'''bjects. Etwas einfacher geht's auch so: def summiere_zellen(): desktop = XSCRIPTCONTEXT.getDesktop() model = desktop.getCurrentComponent() sheets = model.getSheets() sheet = sheets.getByIndex(0) w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value cell = sheet.getCellRangeByName("A5") cell.setValue(w1 + w2 + w3) Empfohlen wird auch, das Erweiterungspaket APSO ('''A'''lternative '''P'''ython '''S'''cript '''O'''rganizer, apso.oxt) zu installieren. Die Vorgehensweise wird hier nicht gezeigt, sondern nur darauf hingewiesen, dass man das einfach "googeln" kann. Siehe zur Python-Programmierung für LibreOffice auch [https://wiki.documentfoundation.org/Macros/Python_Guide/de Makros/Python-Handbuch]. Getestet wurden obige Beispiele mit LibreOffice 26.2.5.1 unter Linux und 26.2.1.2 unter MS Windows. = Ausblick = Dies war eine kurze Einführung in die Berechnungs- und Darstellungsmöglichkeiten mit Python. Es sollten etliche relevante Themen behandelt, oder zumindest kurz angesprochen worden sein. Wem dieser Text nicht ausreichend ist, der sei auf die entsprechenden weiterführenden Weblinks, Bücher und die Python-Hilfefunktion verwiesen. Python kennt noch viel mehr Befehle, als hier dargestellt wurden. Das Themenspektrum ist auch durch die Einbindung externer Module fast beliebig erweiterbar. = Weblinks= == Python allgemein == * [https://www.python.org/ Python Homepage] == Externe mathematische Module == * [https://numpy.org/ NumPy] * [https://numpy.org/doc/stable/user/numpy-for-matlab-users.html NumPy for MATLAB users] * [https://scipy.org/ SciPy] * [https://www.sympy.org/en/index.html SymPy] * [https://pandas.pydata.org/ pandas] * [https://github.com/maroba/findiff findiff] * [https://mpmath.org/ mpmath] == Externe Module für Grafiken == * [https://matplotlib.org/ Matplotlib] * [https://vpython.org/ VPython] * [https://docs.vtk.org/en/latest/api/python.html VTK] == Erstellung von User Interfaces == * [https://docs.python.org/3/library/tkinter.html tkinter - Python interface to Tcl/Tk] * [https://docs.python.org/3/library/curses.html curses - Terminal handling for character-cell displays] * [https://wiki.qt.io/Qt_for_Python Qt for Python] * [https://www.gtk.org/docs/language-bindings/python GTK and Python] == Erstellen virtueller Umgebungen == * [https://docs.python.org/3/library/venv.html venv - Creation of virtual environments] == Sonstige == * [https://python-control.readthedocs.io/en/stable/ Python Control Systems Library] * [https://pypi.org/project/regex/ regex - Regular Expressions] * [http://pyromat.org/ PYroMat] * [https://coolprop.org/coolprop/wrappers/Python/index.html CoolProp] * [https://pypi.org/project/iapws/ iapws] * [https://tespy.readthedocs.io/en/main/getting_started/introduction.html TESPy - Thermal Engineering Systems in Python] = Bücher = == Gedruckte Bücher, OpenBooks, Magazine == * Diverse: c't Python Lernen, Verstehen, Anwenden; Heise, 2022 * Ernesti, Kaiser: Python3 - das umfassende Handbuch; 5. Aufl., Rheinwerk, [https://openbook.rheinwerk-verlag.de/python/ OpenBook] * Inden: Python Challenge; dpunkt, 2021, ISBN 978-3-86490-809-5 * Klein: Numerisches Python; 2. Aufl., Hanser, 2023, ISBN 978-3-446-47170-2 * Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler; Rheinwerk, 2021, ISBN 978-3-8362-7316-9 * Weigend: Python 3 - Das umfassende Praxisbuch; 9. Aufl., mitp, 2022, ISBN 978-3-7475-0544-1 * Woyand: Python für Ingenieure und Naturwissenschaftler; 4. Aufl., Hanser, 2021, ISBN 978-3-446-46483-4 == Andere Wikibooks == * [[:en:Subject:Python_programming_language | Englische Wikibooks zum Thema Python]] * [[Python|Deutschsprachiges Python-Wikibook]] [[Bild:2von10.png|20%]] * [[Python unter Linux|Python 2.7 unter Linux]] [[Bild:10von10.png|100%]] {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} roka22vn3i4gtyt34jx6n4d6q6ir13x 1090751 1090750 2026-09-13T11:34:14Z Intruder 1513 /* Mit VPython */ build123d hinzu 1090751 wikitext text/x-wiki {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} = Hallo Welt und allgemeine Hinweise = == Was ist Python == * Python ist eine universelle höhere Programmiersprache. * Python ist objektorientiert. * Python ist Open-Source (Python Software Foundation License). * Python ist für viele Betriebssysteme erhältlich (z.B. für Linux, MS Windows, macOS). * Python ist ein Interpreter. * Python ist durch Module fast beliebig erweiterbar. * Python als Programmiersprache ist case-sensitive - d.h. Groß- und Kleinschreibung ist relevant bei der Eingabe von Befehlen. * Python ist in etlichen Anwendungsprogrammen (z.B. {{W|FreeCAD}}, {{W|LibreOffice}}, {{W|GIMP}}, {{W|Blender (Software) | Blender}}) als Makrosprache verwendbar. {{Wikipedia | Python (Programmiersprache)}} == Python installieren == === MS Windows === Laden Sie das aktuelle Python-Paket von der Webseite [https://www.python.org/] herunter. Weiter geht es wie bei jedem anderen größeren zu installierenden Programm. Einfach das Installationsprogramm im Explorer doppelklicken und den Anweisungen des Setup-Programmes folgen. === Linux === Entweder ist Python bereits standardmäßig installiert, ansonsten ist die Installation mittels Paketmanagementsystem einfach möglich. Aber auch die Spyder-Entwicklungsumgebung ([https://www.spyder-ide.org]) bietet einen guten Einstieg mit Python (das gilt auch für MS Windows). Spyder bringt auch schon etliche wichtige Module standardmäßig mit. == Python starten == === MS Windows === Das Icon für das Python-Programm doppelklicken. Und schon startet das Programm. [[Datei:PythonIng_start1.jpg]] Python im interaktiven Modus präsentiert sich dann so: Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> Alternativ kann das Programm auch über die Eingabeaufforderung oder die PowerShell gestartet werden: c:\devel\Python>python.exe Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> === Linux === Tippen Sie einfach das Wort „python“ (oder unter openSUSE Tumbleweed z.B. auch „python3.11“ oder „python3.13“) in einem Linux-Terminal ein, schließen den Befehl mit der RETURN-Taste ab, und schon startet Python im interaktiven Modus: Python 3.13.12 (main, Feb 09 2026, 22:37:44) [GCC] on linux Type "help", "copyright", "credits" or "license" for more information. >>> Es gibt auch noch andere Möglichkeiten Python zwecks Programmausführung zu starten, z.&nbsp;B. den {{W|Shebang}} (<code>#!</code>) am Beginn eines Python-Scripts. Das Script sei als Script.py gespeichert. Dann kann das Script mit ./Script.py ausgeführt werden. Für openSUSE Tumbleweed sei nachfolgend ein lauffähiges "Hallo Welt!"-Script angegeben. Es wird in diesem Script der Python-Interpreter in der Version 3.13 verwendet : #!/usr/bin/python3.13 print("Hallo Welt!") Die Berechtigungen zum Ausführen der Datei müssen natürlich noch richtig gesetzt werden, z.B. mittels <code>chmod 777 Script.py</code>. <small><code>chmod</code> ist die Abkürzung für"'''ch'''ange file '''mod'''e bits".</small> <small>Die "Maske" <code>777</code> ist nur für Testzwecke sinnvoll, weil sie leicht zu merken ist und für alle Benutzer alle Zugriffsberechtigungen ('''r'''ead/'''w'''rite/e'''x'''ecute für owner/group/others) setzt. Im richtigen Einsatz wird man das aus Sicherheitsgründen nicht so handhaben, sondern nur die Berechtigungen setzen, die unbedingt erforderlich sind. Welche Zugriffsberechtigungen gesetzt sind, kann man z.B. mit dem Befehl <code>ls -l</code> oder <code>ll</code> ('''l'''i'''s'''t directory contents) erfragen. Aber dazu im Moment genug. Erfahrene Linux-Nutzer kennen das ohnehin und Anfänger sollen jetzt nicht mit Linux-Interna überfordert werden. Bei Bedarf siehe die Linux-Man-Pages oder dezidierte Bücher zu Linux.</code></small> <small>Oder das Script wird in einen Pfad verschoben, in dem sich ausführbare Programme generell befinden (welche Verzeichnisse im PATH liegen, kann bspw. mit <code>echo $PATH</code> abgefragt werden). Das Script kann dann wie ein normales Programm ohne weitere Angaben mit Script.py gestartet werden. Alternativ wird nicht das Script an sich verschoben, sondern nur ein symbolischer Link angelegt, z.B. mit <code>ln -s ~/tmp/Script.py ~/.local/bin/Script.py</code>. <code>~/.local/bin</code> sei ein im PATH gelegenes Verzeichnis. Dies sind aber schon Features für fortgeschrittene Linux-Benutzer und werden am Anfang eher selten benötigt.</small> == Ein paar Worte zur Erklärung == === Tests === Getestet wurden die Beispiele unter den Betriebssystemen * MS Windows 10 mit der Python-Version 3.12.0 (teilweise auch mit 3.12.2 und 3.13.1; nur die Inhalte die bis spätestens Juli 2025 erstellt wurden) * MS Windows 11 ab der Python-Version 3.13.4 (nur zum Teil; ab Juli 2025) * openSUSE Leap 15.6 mit der Python-Version 3.11.12 (Spyder, nur vereinzelt) und zum Teil mit 3.12.11 (ab Juli 2025 bis November 2025). * openSUSE Tumbleweed ab der Python-Version 3.13.9 (nur vereinzelt, ab November 2025) === Popularität === * An Beliebtheit rangiert Python mit Stand September 2026 mit einem Rating von 17,76% an 1. Stelle vor C und C++ (lt. [https://www.tiobe.com/tiobe-index/ TPCI - TIOBE Programming Community Index]). * Lt. [https://innovationgraph.github.com/global-metrics/programming-languages GitHub Top 50 Programming Languages Globally] lag Python im Q1/2026 auf Rang 2, vor TypeScript und hinter JavaScript. * [https://pypl.github.io/PYPL.html PYPL] (Popularity of Programming Language Index) ist ein anderer Popularitätsindex für Programmiersprachen. Auch hier liegt Python mit großem Vorsprung auf dem ersten Platz (52,08%), gefolgt von Java (13,34%) und C/C++ (7,99%) (Stand September 2026). === Namensgebung === Der Name "Python" rührt von der Komikertruppe {{W|Monty Python}} her. Die Icons für Python (z.B. Python selbst, Eric IDE, IDLE) sind aber durch die Python-Schlangenart symbolisiert. <gallery> Python-logo-notext.svg|Python-Logo Guido van Rossum in PyConUS24.jpg|{{W|Guido van Rossum}} (geb. 1956), der Erfinder von Python </gallery> == Ein erstes Programm == Kommentare werden in Python mit der Raute (#) eingeleitet. Sie werden vom Python-Interpreter ignoriert. Text kann mit der print-Funktion ausgegeben werden. Starten Sie Python und geben sie folgende Anweisungen zeilenweise ein >>> # Das ist ein Kommentar >>> print("Hallo Welt!") Als Ergebnis erhalten Sie Hallo Welt! Der Prompt (>>>) ist selbstverständlich nicht einzutippen, sondern wird vom Python-System geliefert. Strings können in Python entweder in Anführungszeichen (") gesetzt werden oder in Hochkommatas('). In diesem Text wird die erste Variante bevorzugt eingesetzt. Im Gegensatz zu Julia ist es hier egal, ob zwischen <code>print</code> und der öffnenden Klammer Leerzeichen stehen. = Python als Taschenrechner = == Allgemeines == Wir wollen 3 * 5 berechnen. Dazu starten wir Python im interaktiven Modus. Geben Sie dann die Formel >>> 3 * 5 ein, drücken die Taste ENTER/RETURN ({{Taste|↵}}) und erhalten als Ergebnis 15 Auch kompliziertere Ausdrücke sind möglich. Beispielsweise mit Winkelfunktionen, Quadratwurzeln etc. Wir wollen nun den Ausdruck <math>\sin\sqrt{15}</math> berechnen : >>> import math >>> math.sin(math.sqrt(15)) -0.6679052983383519 Als erstes wird das math-Modul importiert. Dann wird der mathematische Ausdruck berechnet. Eine andere Variante, die dasselbe Ergebnis liefert, ist >>> from math import * >>> sin(sqrt(15)) -0.6679052983383519 Es wird also aus dem Modul <code>math</code> alles importiert (erkennbar am <code>*</code>). Will man nicht alles importieren, so kann man das auch einschränken: >>> from math import sin, sqrt Beenden lässt sich das Python-Programm durch Eingabe von <code>exit()</code> (und natürlich ist zur Bestätigung die RETURN-Taste zu drücken). == Die Hilfefunktion von Python == Bei Eingabe der Anweisung <code>help</code> oder <code>help()</code> springt Python in den Hilfemodus. Eingabe: >>> help() Eingabe: help> math.sin Ausgabe: Help on built-in function sin in math: math.sin = sin(x, /) Return the sine of x (measured in radians). Für die komplette Python-Dokumentation siehe [https://docs.python.org/3/]. Verlassen kann man den Hilfemodus durch das Drücken von STRG-C, bzw. der Eingabe von q, quit oder exit mit anschließendem Drücken der RETURN-Taste. == Aufgaben == * Erkunden Sie die Tangensfunktion "tan" mittels Python-Hilfe (vergessen Sie nicht das math-Modul zu importieren und das <code>math.</code> vor <code>tan</code>) * Berechnen Sie mit Python den Ausdruck <math>\frac{1}{2}\cdot \text{e}^2 \cdot \tan(\pi/3)</math>. Siehe für die Exponentialfunktion im Python-Hilfesystem auch den Befehl <code>math.exp</code>. Alternativ kann auch die Konstante <code>math.e</code> eingesetzt werden. Potenzieren kann man bei Python mit dem **-Operator (z.B. 2**3 = 8). Für <math>\pi</math> gibt es <code>math.pi</code>. = Python als Scriptsprache = Häufig wird man aber kompliziertere Anweisungsfolgen verarbeiten müssen. Diese will man normalerweise nicht jedesmal neu eingeben, sondern in einer Datei speichern und diese Datei dann zur Ausführung bringen. Speichern Sie dazu folgenden Code in einer Textdatei, z.B. unter MS Windows als c:\tmp\test1.py # Das ist ein Kommentar print("Hallo Welt!") Python-Dateien werden mit der Dateiendung .py versehen. Achten Sie darauf, dass vor dem print keine Leerzeichen vorhanden sind. Das ist eine Python-Eigenheit. Wie wir später sehen werden, nutzt Python Einrückungen als syntaktisches Mittel, z.B. um bei Schleifen den Schleifenkörper zu kennzeichnen. Danach bringen Sie die Skriptdatei test1.py (sozusagen das Hauptprogramm) folgendermaßen zur Ausführung: 1) Starten Sie unter MS Windows die Eingabeaufforderung (oder alternativ auch die Windows PowerShell). Das sieht dann etwa so aus: Microsoft Windows [Version 10.0.19045.3693] (c) Microsoft Corporation. Alle Rechte vorbehalten. C:\Users\xyz> : <small>Falls jemand nicht weiß, wie man die Eingabeaufforderung startet: Eine Möglichkeit ist, einfach in der Taskleiste von Windows das "Start"-Symbol &nbsp;([[Image:Windows_logo_-_2021_(Black).svg|10px]])&nbsp; mit der rechten Maustaste anklicken. "Ausführen" auswählen (oder alternativ für die PowerShell unter Windows 10 den Eintrag "Windows PowerShell", unter Windows 11 den Eintrag "Terminal"). Im sich öffnenden Dialogfenster gibt man in die "Öffnen"-Zeile das Wort <code>cmd</code> ein und mit "OK" wird das Ganze bestätigt.</small> 2) Wechseln Sie mittels <code>cd c:\tmp</code> in das Verzeichnis c:\tmp 3) Angenommen, Sie haben Python unter dem Pfad <code>c:\devel\Python\</code> installiert. Starten Sie das Programm so (der Prompt <code>c:\tmp></code>ist natürlich nicht mit einzutippen): c:\tmp>c:\devel\Python\python.exe test1.py 4) Wie erwartet ergibt sich folgende Ausgabe am Bildschirm Hallo Welt! Die Vorgehensweise unter Linux ist prinzipiell gleich. Die kleinen Unterschiede, wie z.B. der Slash statt dem Backslash in Pfadangaben, sollten für Linux-Benutzer keine Hürde darstellen. == Variablen == Variablenbezeichner können aus Buchstaben (A-Za-z), Ziffern (0-9) und Underscores (_) bestehen, dürfen aber nicht mit einer Zahl beginnen. Führende Underscores haben u.a. im Kontext mit der Objektorientierten Programmierung eine spezielle Bedeutung und sollten nicht für "normale" Variablenbezeichner verwendet werden. Gültige Variablenbezeichner wären also: xyz x1 _wert name_anzahl Theoretisch kann man auch Umlaute, griechische Buchstaben u.ä. in Variablenbezeichnern nutzen, z.B. ößÜ = 16 α = 134 print(ößÜ) print(α) Ausgabe: 16 134 Davon wird aber aus offensichtlichen Gründen ({{W|Englisch als Lingua franca}}) abgeraten. Das Eurozeichen (€) etc. darf man ohnehin nicht in Variablenbezeichnern verwenden, dies ergäbe einen Syntaxfehler. Siehe dazu auch [https://peps.python.org/pep-3131/]. Es gibt in Python etliche Schlüsselwörter (z.B. for, if oder return). Diese dürfen nicht als eigene Variablenbezeichner verwendet werden. Eine Liste aller Schlüsselwörter liefert das Script import keyword print(keyword.kwlist) <small>Übung: Speichern Sie dieses Script in eine Datei, z.B. in c:\tmp\test1.py. Führen Sie diese Datei aus, um die Liste der Schlüsselwörter auszugeben.</small> Da Python case-sensitiv ist, repräsentieren folgende Bezeichner verschiedene Variablen: xyz XYZ xYz Werte werden an Variablen mittels Gleich-Zeichen (=) zugewiesen. Im Folgenden wird der Code immer in der Datei c:\tmp\test1.py gespeichert. x = 5 y = 10 z = x*y print(z) Bringen Sie die Datei test1.py zur Ausführung, so erhalten Sie folgende Bildschirmausgabe 50 Sie können auch mehrere Anweisungen in einer Zeile durch Semikolon getrennt schreiben. Dies führt aber zu unübersichtlichem Code. x = 5; y = 10; z = x*y; print(z) Ausgabe: 50 Auch aus der Programmiersprache C/C++ oder Java bekannte Konstrukte können Sie verwenden, z.B. x = 5 # x = x - 2 x -= 2 print(x) Bildschirmausgabe: 3 Beachten Sie, dass mit dem =-Zeichen eine Wertezuweisung durchgeführt wird. Dies ist nicht äquivalent zum mathematischen =-Zeichen, wie am vorigen Beispiel zu ersehen ist. Den Inkrement-/Dekrementoperator (z.B. x++ oder x--) aus C/C++ oder Java kennt Python aber nicht. Variablen sind nicht an einen bestimmten Datentyp gebunden, folgendes ist mit Python problemlos möglich: import math wert = 10 print(wert) wert = 35.5 print(wert) wert = "Hallo" print(wert) wert = math.pi print(wert) Ausgabe: 10 35.5 Hallo 3.141592653589793 == Physische und logische Zeilen == In Python muss eine Anweisung in einer logischen Zeile Platz finden. Wird eine Anweisung aber zu lang für eine Zeile, dann kann sie in mehrere physische Zeilen unterteilt werden. Dies kann einerseits durch einen Backslash am Ende einer Zeile geschehen, z.B. a = 2 + \ 5 Dies stellt eine logische Zeile dar, die in zwei physische Zeilen unterbrochen ist. Geklammerte Ausdrücke werden automatisch zu einer logischen Zeile verbunden, z.B. a = (2 + 5) Achtung: Im ersten Beispiel darf nach dem Backslash nichts mehr stehen, auch kein Kommentar. Dies trifft im zweiten Bespiel nicht zu, hier könnte noch ein Kommentar folgen, z.B. a = (2 + # Kommentar 5) Auch für Strings gibt es Möglichkeiten, diese auf mehrere Zeilen aufzuspalten. # Kurzer String str1 = "ABC" # Langer String str2 = """Hallo Welt, Grüetzi Schwyzer, Servus an alle""" # Backslash str3 = "UVW\ XYZ" # Mit Klammern str4 = ("Sehr langer Text, der automatisch .............. " "in einer einzigen Variable zusammengefügt wird." ) print(str1) print(str2) print(str3) print(str4) Ausgabe: ABC Hallo Welt, Grüetzi Schwyzer, Servus an alle UVWXYZ Sehr langer Text, der automatisch .............. in einer einzigen Variable zusammengefügt wird. ==Hexadezimale, oktale, binäre und andere Zahlen== d = 1050 # Dezimalzahl h = 0xAA2 # Hexadezimalzahl o = 0o12 # Oktalzahl b = 0b100001101 # Binärzahl print(d) print(h) print(o) print(b) Ausgabe: 1050 2722 10 269 Groß- und Kleinbuchstaben sind in obigen Literalen übrigens egal. So kann man z.B. statt <code>0b1001</code> auch <code>0B1001</code> schreiben (siehe dazu [https://docs.python.org/3/reference/lexical_analysis.html#integer-literals]). Sie können auch dezimale in hexadezimale Zahlen umwandeln, usw.: h = hex(1050) # Dezimalzahl -> Hexadezimalzahl b = bin(1050) # Dezimalzahl -> Binärzahl o = oct(1050) # Dezimalzahl -> Oktalzahl print(h) print(b) print(o) Ausgabe: 0x41a 0b10000011010 0o2032 Gegeben sei die Zahl 121 zur Basis 3. Diese soll in eine Dezimalzahl umgewandelt werden. Das kann so geschehen: z = int("121", 3) print(z) Ausgabe: 16 Dass dies richtig ist, davon kann man sich folgendermaßen überzeugen: <math> 1 \cdot 3^2 + 2 \cdot 3^1 + 1 \cdot 3^0 = 9 + 6+ 1 = 16 </math> Zahlen übersichtlicher schreiben kann man auch mittels Underscore, z.B.: print("Eine Million (Variante 1) =", 1000000) print("Eine Million (Variante 2) =", 1_000_000) print("Eine Rechnung:", 2_000 * 400_000); Es ergibt sich bei beiden Varianten die gleiche Ausgabe. Variante 2 ist aber im Sourcecode leichter lesbar, detto die Zahlen in der Rechnung: Eine Million (Variante 1) = 1000000 Eine Million (Variante 2) = 1000000 Eine Rechnung: 800000000 == Strings und Platzhalter== Ein paar einfache Beispiele: print("Hallo {}" . format("Hugo")) print("Hallo {:s}" . format("Hugo")) print("Hallo %s" % "Hugo") Ausgabe: Hallo Hugo Hallo Hugo Hallo Hugo Python-Code (formatted string literals, Beispiel 1): str1 = "Hallo" str2 = "Hugo" print(f"{str1} {str2}") Ausgabe: Hallo Hugo Python-Code (formatted string literals, Beispiel 2): wert = 11.567 print(f"Ausgabe: {wert:.5f}") Ausgabe: Ausgabe: 11.56700 Komplexere Beispiele: print("Hallo {} und {}" . format("Hugo", "Mike")) print("Hallo {name1} und {name2}" . format(name2="Hugo", name1="Mike")) # Füllzeichen: * # Bündigkeit: > (=rechts), < (=links), ^ (=zentriert) # Feldweite: 10 # Typ: s (=String), f (=Gleitkommazahl), d (=Dezimalzahl) etc. print("Hallo {:*>10s}" . format("Hugo")) print("Hallo {:*<10s}" . format("Hugo")) Ausgabe: Hallo Hugo und Mike Hallo Mike und Hugo Hallo ******Hugo Hallo Hugo****** Python-Code: str = "Hallo\t%s\t%7.2f\t%10.2e\t%i" % ("Hugo", 12.34567, 34.567, 264) print(str) Ausgabe: Hallo Hugo 12.35 3.46e+01 264 == Unicode == Neben den bekannten ASCII-Zeichen lassen sich Zeichen auch mittels Unicode beschreiben. Griechische Buchstaben oder komplexere mathematische Operatoren - all das sollte kein Problem sein. Siehe auch {{W|Unicode}}, {{W|Liste der Unicodeblöcke}} und {{W|Unicodeblock Mathematische Operatoren}}. Im Folgenden werden ein paar Zeichen (Allquantor, Nabla-Operator, Existenzquantor), die man aus der Mathematik kennt, erzeugt. ch1 = "\N{FOR ALL}" ch2 = "\N{NABLA}" ch3 = "\u2203" print(ch1, ch2, ch3) Ausgabe: ∀ ∇ ∃ <small>Diese Ausgabe ergibt sich z.B. mit der IDLE-Shell oder mit Cygwin. Beim Ausführen über die Windows-Eingabeaufforderung oder Windows PowerShell unter MS Windows 10 erfolgt keine korrekte Darstellung. IDLE ist die mit Python mitgelieferte IDE ('''I'''ntegrated '''D'''evelopment '''E'''nvironment, Integrierte Entwicklungsumgebung). Gegen Ende dieses Textes wird IDLE kurz beschrieben. Das Problem mit der Windows Eingabeaufforderung lässt sich aber umgehen. Man muss nur eine Schriftart auswählen, die die Zeichen kennt, z.B. "DejaVu Sans Mono". Dazu klicken Sie einfach bei der Eingabeaufforderung mit der rechten Maustaste oben auf die weiße Leiste und wählen im aufpoppenden Fenster den Menüpunkt "Eigenschaften". Es öffnet sich ein Dialogfenster. Über den Reiter "Schriftart" lässt sich nun die Schriftart einstellen. Unter MS Windows 11 oder openSUSE Leap 15.6 (bash-Konsole) gibt es dieses Problem ohnehin nicht.</small> == Reguläre Ausdrücke == Python kennt auch {{W|Regulärer Ausdruck|reguläre Ausdrücke}}. Dazu gibt es in Python das Modul <code>re</code>. Beipielsweise sollen alle Zahlen (<math>\text{zahl}\in\mathbb{N}_0</math>) in einem String gesucht und ausgegeben werden. Als String sei gegeben: <code>3x Grüße und 100 Kekse.</code> Das Muster (Pattern) ist <code>\d+</code>. <code>\d</code> steht für eine Dezimalziffer 0-9. Das Plus-Zeichen (+) steht symbolisch für ein oder mehrere Zeichen des vorherigen Ausdrucks. Hier also ein oder mehrere Dezimalziffern. Es wird die Funktion <code>findall</code> aus dem Modul <code>re</code>verwendet. Python-Code: from re import findall str = "3x Grüße und 100 Kekse." pat = "\\d+" # Doppel-Backslashes müssen verwendet werden, sonst gibt Python eine Warnung aus! # alternativ: pat = r"\d+" # oder: pat = "[0-9]+" numb = findall(pat, str) print(numb) Ausgabe: ['3', '100'] Python kennt noch viele weitere Möglichkeiten mittels regulärer Ausdrücke zu hantieren. Dies soll hier aber nicht vertieft werden, da das Thema schon ziemlich speziell und komplex ist. Bei Bedarf siehe aber z.B. die Bücher ''Weigend, Seite 380ff'' und ''Ernesti, Kaiser'' [https://openbook.rheinwerk-verlag.de/python/28_001.html] oder die Python-Dokumentation [https://docs.python.org/3/library/re.html]. Auch [[Python unter Linux: Reguläre Ausdrücke]] liefert ein umfangreiches und brauchbares Python-2-Kapitel zu den regulären Ausdrücken. Die dort gelisteten Beispiele müssten ggf. vor Verwendung auf Python-3 umgeschrieben werden. <small>Wie macht man das? Dazu siehe z.B. [https://openbook.rheinwerk-verlag.de/python/43_001.html], [https://portingguide.readthedocs.io/en/latest/] oder [https://www.digitalocean.com/community/tutorials/how-to-port-python-2-code-to-python-3]</small> <small>Es gibt auch ein externes Modul ''regex'', das bei Bedarf extra installiert werden muss ([https://pypi.org/project/regex/]). Es bietet zusätzliche Funktionalität und gründlicheren Unicode-Support. Dies sei hier aber nur der Vollständigkeit halber erwähnt.</small> == Verzweigungen == === if === Die IF-Verzweigung sei aus anderen Programmiersprachen bereits bekannt. In {{W|Pseudocode}} lässt sie sich folgendermaßen darstellen: WENN bedingung TRUE führe block1 aus SONST führe block2 aus ENDE Als {{W|Aktivitätsdiagramm|UML-Aktivitätsdiagramm}} sieht das in etwa so aus: [[File:If-Then-Else-diagram.svg|200px]] Und als {{W|Nassi-Shneiderman-Diagramm|Nassi-Shneiderman-Struktogramm}} so: [[File:Zweiseitige Auswahl.png|250px]] In Python gibt es keinen expliziten ENDE-Kennzeichner. Stattdessen wird der Code durch Einrückungen strukturiert. Alles mit der gleichen Einrückungstiefe gehört zum selben Block. Dies zeichnet Python vor anderen Programmiersprachen aus. Die test1.py-Datei laute also wie folgt: x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: Der else-Zweig wird ausgefuehrt x ist groesser oder gleich 4 Man achte auch auf die Doppelpunkte in der if- und else-Zeile. Darauf vergisst man gerne, wenn man von anderen Programmiersprachen kommt. Folgendes wäre in Python ein Fehler (genauer gesagt ein IndentationError). x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Auch Nachstehendes würde nicht zum gewünschten Ergebnis führen (löst aber keine Fehlermeldung aus). Der letzte print-Befehl ist schon außerhalb der IF-ELSE-Verzweigung. x = 3 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: x ist kleiner als 4 x ist groesser oder gleich 4 Python kennt eine Reihe von Vergleichs- und Verknüpfungsoperatoren: <, <= ... kleiner (gleich) >, >= ... größer (gleich) == ... gleich != ... ungleich is ... identisch is not ... nicht identisch and ... AND or ... OR not ... NOT Beispielsweise: a = 5 b = 9 if a<=10 and b!=7: print("OK") else print("Nicht OK") Ausgabe: OK Der else-Block kann übrigens auch ersatzlos entfallen. Als Pseudocode sieht das so aus WENN bedingung TRUE führe block aus ENDE Mehrfache Verzweigungen werden durch das elif-Konstrukt erstellt. In Pseudocode: WENN bedingung1 TRUE führe block1 aus SONST WENN bedingung2 TRUE führe block2 aus SONST WENN bedingung3 TRUE führe block3 aus SONST führe block4 aus ENDE Ein Python-Beispiel: a = 14 if a<=10: print("<=5") elif a>11 and a<15: print("11 bis 15") elif a>16 and a<20: print("16 bis 20") else: print(">=20") Ausgabe: 11 bis 15 In Python gibt es auch die Schlüsselwörter <code>True</code> (für wahr) und <code>False</code> (für falsch). Man beachte, dass sie mit Großbuchstaben beginnen. Andere Schreibweisen wären ein Fehler. Sie gehören zum Datentyp <code>bool</code>. Ihnen sind auch die Zahlen <code>1</code> und <code>0</code> zugewiesen. Man beachte, dass {{W|Rundungsfehler}} auftreten können. D.h. man sollte bei der Verwendung von {{W|Gleitkommazahl|Gleitpunktzahlen}} niemals auf absolute Genauigkeit prüfen, sondern eine Toleranz (einen <math>\varepsilon</math>-Wert) vorgeben. Ein klassisches Beispiel, das ein falsches Ergebnis liefert, ist: i = 0.1 + 0.2 print(i) if i == 0.3: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 NOK Und das, obwohl man schon in der Volksschule lernt, dass 0.1 + 0.2 gleich 0.3 ist. Korrekt muss das obige Beispiel z.B. so umgeschrieben werden: ist = 0.1 + 0.2 soll = 0.3 epsilon = 0.000001 print(ist) if abs(ist-soll) < epsilon: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 OK Alternativ kann auch die <code>math.isclose()</code>-Funktion verwendet werden. Das sei aber hier nur erwähnt und nicht konkret ausgeführt. <u>Aufgabe:</u> Recherchieren Sie im Internet zum Thema <code>math.isclose()</code>-Funktion. === match === Ab Python 3.10 gibt es auch die match-Anweisung. Dies ist das Python-Pendant für die switch-Anweisung in anderen Programmiersprachen, geht aber bei näherer Betrachtung weit darüber hinaus. Hier nur ein einfaches Beispiel: x = "Hello" match x: case "Servus" | "Ciao": # or print("Servus an alle") case "Grüetzi": print("Grüetzi Schwyzer") case _: # other, default, sonstiges ... print("Hallo Welt") Ausgabe: Hallo Welt Als Struktogramm sieht das in etwa so aus: [[File:Mehrseitige Auswahl.png|250px]] Für nähere Details siehe z.B. [https://www.geeksforgeeks.org/python-match-case-statement/], [https://learnpython.com/blog/python-match-case-statement/], [https://docs.python.org/3/tutorial/controlflow.html#match-statements] und das Python Enhancement Proposal (PEP) 636 – Structural Pattern Matching: Tutorial [https://peps.python.org/pep-0636] und dort insbesondere den Anhang A - Quick Intro. <small><code>match, case, _</code> etc. sind sogenannte ''soft keywords''. Im Gegensatz zu den normalen Schlüsselwörtern dürfen ihnen auch Werte zugewiesen werden. Eine Liste der weichen Schlüsselwörter lässt sich durch <code>keyword.softkwlist</code> erstellen (die Anweisung gibt es seit Python 3.9). Siehe dazu auch [https://stackoverflow.com/questions/65800344/what-are-soft-keywords] und [https://docs.python.org/3/library/keyword.html#keyword.softkwlist].</small> == Schleifen == Kopfgesteuerte Schleife, Endlosschleife und fußgesteuerte Schleife: [[File:Programmingloops.svg|450px]] === while === Die WHILE-Schleife ist kopfgesteuert. Sie funktioniert wie aus anderen Programmiersprachen bekannt. In Pseudocode: SOLANGE bedingung TRUE führe block aus ENDE In Python: x = 0 while x <= 10: print(x) x += 1 Ausgabe: 0 1 2 3 4 5 6 7 8 9 10 Eine Endlosschleife ergibt sich z.B. so: i = 5 while True: print(i) i-=1 Beendet werden kann sie mit der Tastenkombination STRG-C. Eine fußgesteuerte Schleife kann so simuliert werden: i = 5 while True: print(i) i-=1 if i<=0: print("Fire") break Ausgabe: 5 4 3 2 1 Fire Der <code>break</code>-Befehl wird etwas später noch einmal kurz thematisiert. === for === Struktogramm einer for-Schleife: [[File:Zählschleife.png|200px]] In Python bspw. so: for x in range(6): print(x*2) Ausgabe: 0 2 4 6 8 10 Die Schleife läuft von 0 bis 5. Ausgegeben wird jeweils der Wert x*2. Aquivalent kann diese Schleife auch so geschrieben werden: for x in range(0, 11, 2): print(x) Die Ausgabe ist wie oben. Der Startwert sei 0, der Endwert ist 11-1 und die Schrittweite ist 2. Ein anderes Beispiel sei for x in "text": print(x) Ausgabe: t e x t == Schleifen abbrechen == === break === <code>break</code> bricht die Schleife ab und setzt mit dem nächsten Befehl außerhalb der Schleife fort. for var in range(100): print(var) if var == 5: break Ausgabe: 0 1 2 3 4 5 === continue === <code>continue</code> bricht den aktuellen Schleifendurchlauf ab und setzt mit dem nächsten Schleifendurchlauf fort. for var in range (11): if var == 5: continue print(var) Ausgabe: 0 1 2 3 4 6 7 8 9 10 == try - except == try: z1 = 12 / 0 print(z1) except ZeroDivisionError: print("Das Ergebnis ist unendlich") except: print("Kann nicht berechnet werden!") print("Bitte die Formel korrigieren!") print("Setze Programm fort!") Ausgabe: Das Ergebnis ist unendlich Setze Programm fort! Es wird versucht, eine Zahl durch Null zu dividieren. Das ist nicht möglich, es wird eine Ausnahme ausgelöst. Das Programm springt daher in den except-ZeroDivisionError-Block und führt die dort gelisteten Anweisungen aus (in unserem Fall eine print-Anweisung). Danach wird das Programm fortgesetzt. Würden wir dieses Programm ohne try-except ausführen, so ergibt sich aus z1 = 12 / 0 print(z1) folgende Fehlermeldung und ein unmittelbarer Programmabbruch Traceback (most recent call last): File "C:\tmp\test1.py", line 1, in <module> z1 = 12 / 0 ZeroDivisionError: division by zero Mit dem try-except-Mechanismus können also Ausnahmen oder Fehler aufgefangen und behandelt werden. In unserem Beispiel ist das eher trivial, aber bei größeren Programmen kann das durchaus Sinn machen. Neu in Python 3.14 ist, dass mehrere Ausnahmen auch ohne Klammern angegeben werden können, z.B.: bis inkl. Python 3.13 nur: except (ZeroDivisionError, ValueError): ab Python 3.14 auch: except ZeroDivisionError, ValueError: == pass == Ein leerer Block muss in Python mittels dem Schlüsselwort <code>pass</code> dargestellt werden. Z.B. x = 2 if x == 1: print("Wert ist ", x) else: pass Würde man das <code>pass</code> im else-Block weglassen, so würde man eine Fehlermeldung erhalten: IndentationError: expected an indented block after 'else' statement on line 5 = Funktionen = == Aufrufen von Funktionen == Funktionen sind uns im Rahmen dieses Kurses schon zuhauf begegnet. Sei es die print()-, die math.sin()- oder die hex()-Funktion. All diese Funktionen werden von Python zur Verfügung gestellt, ohne dass man sie explizit programmieren müsste. Aufgerufen werden diese Funktionen, indem man ihren Namen eintippt, gefolgt von runden Klammern. In diesen Klammern können noch Argumente übergeben werden. Auch Rückgabewerte sind möglich. == Funktionen selber schreiben == Funktionen werden mit dem def-Schlüsselwort (man definiert die Funktion) eingeleitet, danach folgt der Funktionsname, danach wiederum runde Klammern, in denen formale Argumente stehen können. Abgeschlossen wird die def-Zeile mit einem Doppelpunkt. Danach folgt der Funktionskörper. Dieser Funktionskörper muss wiederum eingerückt werden (wie von den Verzweigungen und Schleifen bekannt). Aufgerufen wird diese Funktion, indem man ihren Funktionsnamen eingibt, gefolgt von runden Klammern (ggf. mit den aktuellen Parametern). Z.B. # Funktion definieren def halloWelt(i): # i ... beliebige Ganzzahl print("Hallo " * i, end="") print("Welt!") # Funktion aufrufen halloWelt(3) Ausgabe: Hallo Hallo Hallo Welt! Unterschied zwischen formalen und aktuellen Parametern: [[Datei:PythonIng_func1.jpg]] <small>Aktuelle Parameter werden auch Argumente genannt.</small> Rückgabe von Funktionswerten: # Funktion definieren def mathFunc(a, b): r1 = a + b r2 = a * b return r1, r2 # Funktion aufrufen c, d = mathFunc(3, 5) # Ausgabe der zurückgegebenen Werte print(c) print(d) Ausgabe: 8 15 Es werden r1 und r2 zurückgegeben und den Variablen c und d zugewiesen. (r1, r2) und (c, d) sind Tupel. Was Tupel konkret sind, siehe etwas später in diesem Kapitel. 3 und 5 sind die aktuellen Parameter (die Argumente). a und b sind die formalen Parameter. Die Zuweisung der aktuellen zu den formalen Parametern erfolgt in der gegebenen Reihenfolge, also die Zahl 3 wird an a übergeben und die Zahl 5 an b. Vorgabeparameter, z.B.: def mathFunc(a=10, b=20): r1 = a + b r2 = a * b return r1, r2 c, d = mathFunc(3, 5) print(c) print(d) e, f = mathFunc(5) print(e) print(f) g, h = mathFunc(b=6) print(g) print(h) Ausgabe: 8 15 25 100 16 60 Erklärung: * Erster <code>mathFunc</code>-Aufruf: Es werden, wie weiter oben, die Argumente 3 und 5 an die formalen Parameter a und b übergeben. Die Rückgabewerte r1 und r2 werden an c und d übergeben. Somit ist c=8 und d=15. * Zweiter <code>mathFunc</code>-Aufruf: Es wird nur das Argment 5 an a übergeben. b behält den Vorgabewert 20. D.h. e= 25 und f=100. * Dritter <code>mathFunc</code>-Aufruf: Es wird nur die Zahl 6 an b übergeben, a behält seinen Vorgabewert 10. Somit ergibt sich g=16 und h=60. Beispiel (Schlüsselwortargumente vs. Positionsargumente): def mathFunc(a, b): r1 = a - b r2 = a / b return r1, r2 c, d = mathFunc(b=3, a=5) # Schlüsselwortargumente e, f = mathFunc(3, 5) # Positionsargumente print(c) print(d) print(e) print(f) Ausgabe: 2 1.6666666666666667 -2 0.6 Durch die Verwendung von Schlüsselwortargumenten können die Argumente in beliebiger Reihenfolge angegeben werden. Bei den Positionsargumenten ist die Reihenfolge vorgegeben. Daraus resultiert auch der Unterschied bei den obigen Ausgaben. Werden beide Arten in einem Aufruf gemischt, so müssen die Positionsargumente zuerst angegeben werden. Den Unterschied zwischen beiden Argumentarten zu kennen ist wichtig, nicht nur bei selbst erstellten Funktionen. Auch beim Aufruf von Python-Funktionen verfolgt einen die Mischung von Schlüsselwort- und Positionsargumenten auf Schritt und Tritt, z.B. beim etwas später folgenden Abschnitt über "Grafiken zeichnen": plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") Bei dieser <code>plot</code>-Funktion aus dem Modul <code>matplotlib.pyplot</code> sind <code>x</code> und <code>y1</code> Positionsargumente. <code>label, lw</code> und <code>ls</code> sind die Namen der Schlüsselwortargumente. Die Schlüsselwortargumente könnten auch in anderer Reihenfolge angeschrieben werden, nicht jedoch die Positionsargumente! Siehe zu <code>matplotlib.pyplot.plot</code> auch die Seite [https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html]. == Lambda-Funktionen == print((lambda a, b: a*b) (3, 5)) Ausgabe: 15 Eingeleitet wird eine Lambda-Funktion (auch Lambda-Form, Lambda-Operator oder anonyme Funktion genannt) mit dem Schlüsselwort <code>lambda</code>. Es folgen die formalen Argumente, danach ein Doppelpunkt, die Berechnungsvorschrift und ggf. abschliessend in Klammern die aktuellen Parameter. Man kann einer Lambda-Funktion auch einen Funktionsnamen geben und die Funktion über diesen Namen aufrufen, z.B. prod = lambda a, b: a*b print(prod(3, 5)) Als Ausgabe wird wieder die Zahl 15 geliefert. == Rekursive Funktionen == Funktionen können wiederum andere Funktionen aufrufen. Von einem rekursiven Funktionsaufruf spricht man, wenn die aufgerufene Funktion gleich der aufrufenden ist. def printFunc(i): if (i >= 5): return else: print("Hallo Welt") printFunc(i+1) printFunc(1) Ausgabe: Hallo Welt Hallo Welt Hallo Welt Hallo Welt == Funktionsannotationen == Python ist sehr flexibel, was Typen angeht. Im Vorhergehenden haben wir generell keine Typangaben gemacht. Will man Typen angeben, so bietet Python das Konzept der Funktionsannotation. def calcFunc(a: int, b: int) -> int: return a+b r1 = calcFunc(8, 9) r2 = calcFunc(8.0, 9.0) r3 = calcFunc("Hallo", "Welt") print(r1) print(r2) print(r3) Ausgabe: 17 17.0 HalloWelt Jetzt sieht man auf den ersten Blick, welche Typen der Programmierer im Sinn hatte, als er die Funktion erstellte. Das Problem dabei ist nur, dass es Python ziemlich egal ist, welche Typen man im Endeffekt eingibt. Im obigen Beispiel können statt Integer-Typen u.a. auch Float- oder String-Typen eingegeben werden. <small> Siehe zum Thema "Type Checking" aber auch den später folgenden Abschnitt [[Ing_Mathematik:_Python#Type_Checker]]. </small> == Variadische Funktionen == Python-Code: def test1(a, *b): print(a); for c in b: print(c); test1("Hallo", "Welt", "Schweizer", "und alle anderen") Ausgabe: Hallo Welt Schweizer und alle anderen Mit dem Stern (auch als Splat-Operator bezeichnet) in der formalen Parameterliste bei der Funktion <code>test1</code> wird angezeigt, dass eine beliebige Anzahl von Argumenten übergeben wird. <small> Dies entspricht in etwa dem, was in anderen Programmiersprachen (PHP etc.) mittels Ellipse (<code>...</code>) angezeigt wird.</small> = Tupel, Listen und andere = [[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]] == Tupel und Listen == Tupel, Listen und einige andere sind Datenstrukturen oder Sequenzen. Listen (z.B. eine Einkaufsliste) sind veränderbar (mutable). Ein Tupel kann dagegen nicht verändert werden (immutable). Listen werden beim Anlegen in eckige Klammern eingeschlossen, Tupel in runde Klammern. Beim Tupel können die Klammern auch weggelassen werden. Ein Tupel mit nur einem Element muss mit einem Beistrich abgeschlossen werden. Der Grund ist, dass Python sonst nicht entscheiden kann, ob ein Tupel angelegt werden soll, oder nur ein geklammerter Wert. Als Gedächtnisstütze kann man sich den Unterschied zwischen Tupel und Liste ev. so leichter merken: : T'''u'''pel ... r'''u'''nde Klammern, '''u'''nveränderlich : L'''i'''ste ... eck'''i'''ge Klammern, veränderl'''i'''ch. Nachfolgend werden einige Operationen mit Listen und Tupel dargestellt. # Liste und Tupel liste = [1, 2, "Hallo"] tupel = (1, 2, "Hallo") # Ausgabe von liste und tupel print(liste) print(tupel) # Ausgabe von Einzelelementen print(liste[1]) print(tupel[2]) # Element an Liste anhängen und einfügen liste.append(55) liste.insert(4, "Welt") print(liste) # Element aus Liste entfernen liste.remove(1) print(liste) # einige weitere Beispiele liste2 = [1,] tupel2 = 1, 2 tupel3 = (1,) print(liste2) print(tupel2) print(tupel3) Ausgabe: [1, 2, 'Hallo'] (1, 2, 'Hallo') 2 Hallo [1, 2, 'Hallo', 55, 'Welt'] [2, 'Hallo', 55, 'Welt'] [1] (1, 2) (1,) Beispiel (eine Liste von Wörtern zu einem einzigen zusammenhängenden Text verbinden): woerter = ["Hallo", "Welt"] satz = " ".join(woerter) print(satz) Ausgabe: Hallo Welt == Dictionaries und Mengen == Zu den Datenstrukturen gehören weiters auch Mengen und Dictionaries. Mengen sind von der Mathematik bekannt, sie sind ungeordnet und es kommen keine mehrfachen Elemente vor. Dictionaries sind durch Schlüssel :Wert-Paare gekennzeichnet. Mengen werden beim Anlegen wie Dictionaries in geschweifte Klammern eingeschlossen. dict = {"vorname":"Hugo", "nachname":"Meister" } menge = {1, 1, 3, 4, 4, 4, "Hallo"} print(dict) print(menge) print(dict["vorname"]) Ausgabe: {'vorname': 'Hugo', 'nachname': 'Meister'} {1, 3, 4, 'Hallo'} Hugo Geschweifte Klammern ohne Inhalt stellen Dictionaries dar und keine Mengen: di = {} print(type(di)) Ausgabe: <class 'dict'> Leere Mengen lassen sich mit <code>set()</code> erzeugen: menge = set() # leere Menge print(menge) menge.add("Hallo") # Element hinzufügen print(menge) Ausgabe: set() {'Hallo'} Beispiel (einige Mengenoperationen): mengeA = {"Hallo", "Welt"} mengeB = {1, 2, "Welt", 3} # Vereinigung print(mengeA | mengeB) print(mengeA.union(mengeB)) # Durchschnitt print(mengeA & mengeB) print(mengeA.intersection(mengeB)) # Differenz print(mengeA - mengeB) print(mengeA.difference(mengeB)) # Symmetrische Differenz print(mengeA ^ mengeB) print(mengeA.symmetric_difference(mengeB)) # Teilmenge print(mengeA.issubset(mengeB)) # Mehrere Elemente hinzu mengeA.update(["Super", 67, 125]) print(mengeA) # Element löschen mengeA.discard("Hallo") print(mengeA) Ausgabe: {1, 2, 3, 'Welt', 'Hallo'} {1, 2, 3, 'Welt', 'Hallo'} {'Welt'} {'Welt'} {'Hallo'} {'Hallo'} {1, 2, 3, 'Hallo'} {1, 2, 3, 'Hallo'} False {67, 'Super', 'Welt', 'Hallo', 125} {67, 'Super', 'Welt', 125} Es gibt schon seit "ewigen" Zeiten unveränderbare Mengen, die mittels <code>frozenset</code> eingeleitet werden. Neu ab Python 3.15 ist dagegen das Pendant <code>frozendict</code>, das unveränderbare Dictionaries darstellt. fdict = frozendict({"vorname":"Hugo", "nachname":"Meister"}) fset = frozenset({"A", 1, "A"}) print(fdict) print(fdict["vorname"]) print (fset) try: fdict["vorname"] = "Max" print(fdict["vorname"]) except TypeError as e: print(f"Fehler: {e}") try: fset.add("B") print(fset) except AttributeError as e: print(f"Fehler: {e}") Ausgabe: frozendict({'vorname': 'Hugo', 'nachname': 'Meister'}) Hugo frozenset({1, 'A'}) Fehler: 'frozendict' object does not support item assignment Fehler: 'frozenset' object has no attribute 'add' == List Comprehensions == Aus einer Eingabeliste soll eine Ausgabeliste erzeugt werden. Das kann folgendermaßen geschehen. Mathematische Schreibweise: <math>lc = \{2x|x\in\ \mathbb{N}, 1\le x < 11\}</math> Python-Code: lc = [x*2 for x in range(1,11)] print(lc) Ausgabe: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] Mathematische Schreibweise: <math>lc = \{2x | x \in \mathbb{N}, 1\le x < 11, x \bmod 2 = 0 \}</math> Python-Code: lc = [x*2 for x in range(1,11) if x%2 == 0] print(lc) Ausgabe: [4, 8, 12, 16, 20] Siehe auch {{W|List Comprehension}}. == Set Comprehensions == Dies ist sehr ähnlich wie im vorigen Abschnitt beschrieben. Es wird aber keine Liste, sondern eine Menge erzeugt. sc = {x*2 for x in range(1,11)} print(sc) Ausgabe: {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} == Listen zusammenführen - zip() == li1 = ["A", "B", "C", "D"] li2 = [1, 2, 3, 4] li3 = [5.5, 6.6, 7.7, 8.8] z = zip(li1, li2, li3) print(z) li4 = list(z) print(li4) Ausgabe: <zip object at 0x00000283B6C6AC80> [('A', 1, 5.5), ('B', 2, 6.6), ('C', 3, 7.7), ('D', 4, 8.8)] == Generatorausdruck == g = (i*2 for i in range(1,11)) print(g) t = tuple(g) print(t) print(t[1:3]) Ausgabe: <generator object <genexpr> at 0x00000241D2A4A5A0> (2, 4, 6, 8, 10, 12, 14, 16, 18, 20) (4, 6) == Slicing == slice ... Scheibe, Teil, in Scheiben schneiden Beispiel: Zugriff auf Elemente eines geordneten sequentiellen Objekttyps (Liste, Tupel oder String): str1 = "Hallo" # Das erste Element wird mit dem Index 0 angesprochen # [start (inkl.) : stop (exkl.) : step (default=1)] str2 = str1[0:2] # Alternativ auch: str2 = str1[:2] print(str2) tup1 = (0,1,2,3) # Das letzte Element hat auch den Index -1, das vorletzte den Index -2 usw. tup2 = tup1[-3:-1] print(tup2) lst1 = [[1, 5, 10, 20], [30, 40, 50, 60]] lst2 = lst1[1][1] print(lst2) Ausgabe: Ha (1, 2) 40 Beispiel: Umdrehen von Strings str1 = "Hallo" str2 = str1[::-1] print(str2) Ausgabe: ollaH = Objektorientierte Programmierung = {{Wikipedia|Objektorientierte Programmierung}} * {{W|Klasse (Objektorientierung)|Klasse}} ... die Schablone oder der Bauplan, enthält Methoden und Attribute * {{W|Objekt (Programmierung)|Objekt}} ... eine Klasseninstanz (die konkrete Ausprägung der Klasse) * {{W|Attribut (Programmierung)|Attribute}} ... die Eigenschaften eines Objekts * {{W|Methode (Programmierung)|Methoden}} ... die Aktionen (Operationen), die ein Objekt ausführen kann * {{W|Vererbung (Programmierung)|Vererbung}} ... neue Klassen (Subklassen, Unterklassen, abgeleitete Klassen) aus vorhandenen Klassen (Superklassen, Oberklassen, Basisklassen, Elternklassen) ableiten. Ermöglicht den Aufbau von Klassenhierarchien. Die Subklasse "erbt" Attribute und Methoden von der Superklasse. Python unterstützt (so wie C++, aber im Gegensatz zu Java) Mehrfachvererbung. == UML == * {{W|Unified Modeling Language|UML}} ... '''U'''nified '''M'''odeling '''L'''anguage, eine Modellierungssprache. Die UML enthält zahlreiche Diagrammarten, um Programme zu modellieren. Im Nachfolgenden wird nur das {{W|Klassendiagramm}} verwendet. [[File:UmlCd Klasse-3.svg|300px]] * {{W|Sichtbarkeit (Programmierung)|Sichtbarkeit}}: ** + ... public (öffentlich) ** - ... private ** # ... protected * {{W|Attribut_(UML)#Attribute_für_Instanzen_und_für_Klassen|Klassenattribute}} (statische Attribute): Werden nur einmal pro Klasse angelegt. Im Klassendiagramm werden sie unterstrichen. [[File:Attribute-3.png|200px]] * Vererbung: <gallery> InheritancePgmUML.svg | Abgeleitete Klasse erbt von Basisklasse (Einfachvererbung) Diamond inheritance.svg | D erbt von B und C (Mehrfachvererbung). B und C erben von A (Einfachvererbung) </gallery> Für weitergehende Betrachtungen zur UML wird auf Spezialliteratur verwiesen, z.B.: * Seidl et al.: UML@Classroom. dpunkt, 2012, ISBN 978-3-89864-776-2 * Rupp et al.: UML 2 glasklar. Hanser, 4. Aufl., 2012, ISBN 978-3-446-43057-0 == Eine einfache Klasse == [[Datei:PythonIng_uml1.svg | 200px]] class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 fahr = Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die Klasse Fahrzeug wird durch das class-Schlüsselwort eingeleitet. raeder ist ein Klassenattribut und public. __init__ wird bei der Objekterzeugung automatisch aufgerufen (ist der sogenannte Konstruktor). Man achte darauf, dass diese Methode immer mit zwei Unterstrichen eingeleitet und abgeschlossen wird. Instanzattributen wird das Wort self vorangestellt. Wir sehen uns z.B. das Attribut self.__geschwind an. Auch hier werden zwei Unterstriche verwendet. Das bedeutet, dass dieses Attribut strikt/stark private ist. Wird nur ein Unterstrich verwendet, so deutet dies auf schwach/weakly private hin. Letzteres wird in Python deutlich häufiger verwendet. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt. Besonderheiten bei stark und schwach private: * '''stark private''': ** zwei führende Unterstriche ** Name Mangling: Name wird zu <code>_Klassenname__variablenname</code> ** Schutz vor Namenskollisionen bei Vererbung ** am Ende des Namens dürfen keine zwei Unterstriche verwendet werden. Das wären dann Magic Methods oder Dunder-Methods (z.B. __init__). Diese sind public. * '''schwach private''': ** ein führender Unterstrich ** Name bleibt gleich ** ist nur ein Hinweis an die Programmierer, kein starker Schutz ** <code>from modul import *</code>: Objekte mit einem führenden Unterstrich werden standardmäßig nicht importiert ** Standard für die Kapselung bei Python. Schätzung: Weit mehr als 80% der nicht-öffentlichen Attribute/Methoden werden als schwach private deklariert. Weniger als 5-10% als stark private (Quelle: Google KI) == Klassen importieren == Häufig ist es sinnvoll und übersichtlicher Klassen in eigenen Dateien zu speichern. Das sind dann eigene Module. Abgespeichert werden Sie mit der Endung py, wie bisher auch praktiziert. Aufgerufen werden Sie mit der import-Anweisung. Dann ist aber nur der Dateiname ohne Endung py zu verwenden. Klarer wird das mit einem Beispiel. Datei c:\tmp\fahrzeug.py class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 Datei c:\tmp\test1.py import fahrzeug fahr = fahrzeug.Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die üblichen import-Anweisungen lauten wie folgt: {| {{prettytable}} ! import-Befehl ! Instanz |- | import xyz || xyz.Klasse |- | import xyz as x || x.Klasse |- | from xyz import Klasse || Klasse |- | from xyz import * || Klasse |} Der Vorteil der ersten beiden import-Anweisungen ist, dass es kaum zu Namenskollisionen kommen kann. Dafür hat man bei den letzten beiden Varianten weniger Tipparbeit. == Vererbung == === Einfachvererbung === [[Datei:PythonIng_uml2.svg | 200px]] Datei fahrzeug.py: class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 class Luftfahrzeug(Fahrzeug): def __init__(self, geschwindigkeit, leistung, fluegel): super().__init__(geschwindigkeit, leistung) self.__flueg = fluegel def getFlueg(self): return self.__flueg Datei test1.py: import fahrzeug fahr = fahrzeug.Luftfahrzeug(150, 90, 4) print(fahr.getFlueg()) Ausgabe: 4 === Mehrfachvererbung === Mit Python ist auch Mehrfachvererbung möglich, z.B.: class A: def _printA(self): print("Klasse A") class B: def _printB(self): print("Klasse B") class C(A,B): def __init__(self): self._printA() self._printB() c = C() Ausgabe: Klasse A Klasse B Die Klasse C erbt von A und B. In UML sieht das in etwa so aus: +-----------------------------+ +-------------------------+ | A | | B | +-----------------------------+ +-------------------------+ | | | | +-----------------------------+ +-------------------------+ | # printA() | | # printB() | +-----------------------------+ +-------------------------+ . . / \ / \ --- --- | | | | +---------------------+ | C | +---------------------+ | | +---------------------+ | | +---------------------+ <code>printA()</code> und <code>printB()</code> sind schwach private (in UML als <code>protected</code> mit einem # dargestellt). Es ist aber zu beachten, dass schwach private nur Konvention ist. Praktisch könnte man auch von außerhalb auf diese Methoden zugreifen. Das soll man aber nicht tun, und das wird in Python durch einen Unterstrich angedeutet. = Grafiken zeichnen = Für das Zeichnen von Grafiken wird hier das Modul <code>matplotlib</code> verwendet. <code>matplotlib</code> ist ein externes Modul und muss vor der ersten Verwendung installiert werden. Das geht so: # Starten Sie ein Terminal (bei Windows die Eingabeaufforderung). # Führen Sie darin folgenden Befehl aus <code>c:\devel\Python\Scripts\pip.exe install matplotlib</code> pip ist übrigens der Paketmanager von Python ({{W|Pip_(Python)}}). Optimalerweise installieren wir auch gleich das Modul <code>numpy</code> (Numerical Python). Wir werden es im Folgenden oft benötigen (nicht nur bei den Grafiken). Das funktioniert vom Prinzip her genauso, wie für <code>matplotlib</code> gezeigt. <small>Verwenden Sie Spyder, so sind diese Schritte nicht nötig. Spyder inkludiert diese Pakete standardmäßig. Unter openSUSE Tumbleweed lassen sich diese Pakete mittels YaST oder zypper installieren.</small> == 2D == === Graph einer Funktion === Es soll die cosh-Funktion im Intervall <math>x\in[-3,3]</math> gezeichnet werden. Der Programmcode lautet in der einfachsten Form: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh1.jpg]] Der Code ist quasi selbsterklärend. Das Untermodul pyplot des matplotlib-Moduls und das numpy-Modul werden importiert. x läuft von -3 bis +3. y wird für jeden x-Wert per Formel ausgerechnet. "plt.plot()" ist der Zeichenbefehl. "plt.show" ist notwendig, um das Fenster mit der Grafik anzuzeigen. Die Schrittweite 0.1 wurde so gewählt, um einen ausreichend glatten Verlauf des Graphen zu gewährleisten. Das ist immer ein Kompromiss zwischen Berechnungszeit und Ansehnlichkeit. Testen Sie einfach ein paar verschiedene Werte, um ein Gefühl dafür zu zu bekommen. "plt.grid()" zeichnet ein Gitter in die Grafik (kann auch weggelassen werden). Die Bezeichnungen plt und np könnten auch anders gewählt werden. Es ist aber Konvention, diese so wie hier gezeigt zu wählen. <small>Mit der im obigen Bild gezeigten Menüleiste kann die dargestellte Grafik nachträglich noch geändert werden (Zoom, Pan, Achsenparameter, Kurvenparameter etc.). Natürlich kann man das alles auch direkt programmieren. Wie das funktioniert wird ansatzweise etwas später gezeigt.</small> Ein etwas komplexeres Beispiel ist Folgendes: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) + 2**x plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh4.png]] Man beachte, dass im Gegensatz zu Octave und Julia der ominöse Punkt (.) bei 2**x mit Python nicht benötigt wird. Das macht das Programmiererleben etwas einfacher. === Graphen mehrerer Funktionen und weiteres === import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x") plt.plot(x, y2, label = "sin(x) * cos(x)") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh2.png]] Um die Linienstile etwas individueller zu gestalten, ist folgender Programmcode gedacht: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") plt.plot(x, y2, label = "sin(x) * cos(x)", lw=3, ls="--") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh3.png]] === Funktion in Parameterdarstellung === Es soll die archimedische Spirale <math>x = t \cos(t), y = t \sin(t)</math> im Intervall <math>[0, 6\pi[</math> gezeichnet werden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.show() [[Datei:PythonIng_spirale1.png]] Diese Darstellung erscheint verzerrt. Will man gleiche Achsenskalierungen, so kann man den plt.axis()-Befehl verwenden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.axis("equal") plt.show() [[Datei:PythonIng_spirale2.png]] === Funktion in Polardarstellung === import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(projection="polar") r = np.arange(0, 1, 0.01) theta = r**3 line = ax.plot(theta, r) plt.show() [[Datei:PythonIng_polar1.png]] === Logarithmische Achsenskalierung === ==== Semilog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.semilogy() plt.show() Ausgabe: [[Datei:PythonIng_semilog1.png]] ==== LogLog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.loglog() plt.show() [[Datei:PythonIng_loglog1.png]] === Gefüllte Fläche === import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 3, 0.1) y1 = 3*x - 1 y2 = x**2 plt.plot(x, y1, x, y2, color='black') plt.fill_between(x, y1, y2, where=y1>=y2) plt.show() [[Datei:PythonIng_gefuellt.png]] === Linien, Pfeile, Rechtecke, Kreise und Texte === import matplotlib as mpl import matplotlib.pyplot as plt fig, ax = plt.subplots() r = mpl.patches.Rectangle((0, 0), 3, 3, angle=30, fill=False) c = mpl.patches.Circle((4, 4), 2, fill=False) ax.add_patch(r) ax.add_patch(c) ax.plot([-2, 7], [-2, 0], color="black") ax.arrow(0, 7, 5, 0, length_includes_head=True, head_width=0.5, head_length=1.5, color="black") ax.set_aspect("equal") plt.axis([-3, 8, -3, 8]) plt.show() [[Datei:PythonIng_linien_pfeile_etc.png]] Text kann mit <code>ax.text(x, y, "Text")</code> hinzugefügt werden, bspw. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.text(0.1, 0.1, "Hallo") ax.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() Oder einfacher auch ohne <code>subplots</code> import matplotlib.pyplot as plt plt.text(0.1, 0.1, "Hallo") plt.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text1.png]] Auch Sonderzeichen (griechische Buchstaben etc.) können verwendet werden (siehe dazu auch [https://matplotlib.org/stable/users/explain/text/mathtext.html]). import matplotlib.pyplot as plt plt.text(.3, .5, r'$\Omega\ \psi\ \oint\ \nabla\ \dot a\ \frac{a}{b}\ a_b$', size="20") plt.show() [[Datei:PythonIng_text20.svg]] Jetzt wird noch gezeigt, wofür <code>subplots</code> sinnvoll eingesetzt werden können. import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=1, ncols=2) ax[0].text(0.1, 0.1, "Hallo") ax[1].text(0.1, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text2.png]] === Aufgaben === * Zeichnen Sie die Strophoide <math>x = \frac{a(t^2-1)}{t^2+1}, y = \frac{at(t^2-1)}{t^2+1}, a = 2, -3 \leq t \leq 3</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_strophoide.jpg]] * Zeichnen Sie die verschlungene Hypozykloide <math>x = (R-r)\cos t + c\cos\frac{R-r}{r}t, y = (R-r)\sin t - c\sin\frac{R-r}{r}t, c = 3, r = 2, R = 6, -15 \leq t \leq 15</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_hypozykloide.jpg]] * Testen Sie bei den obigen Übungsaufgaben verschiedene Linienstile und Farben. Farben können mit dem plt.plot()-Parameter color gewählt werden. * Testen Sie bei den obigen Übungsaufgaben verschiedene Werte für a, c, r und R. == 3D == === Räumliche Kurven === import matplotlib.pyplot as plt import numpy as np t = np.arange(0, 6*np.pi, 0.1) x = t * np.cos(t) y = t * np.sin(t) z = t fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot(x, y, z) plt.show() [[Datei:PythonIng_raumkurve1.png]] === Flächen === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z) plt.show() [[Datei:PythonIng_fläche1.png]] Das Ganze in Netzdarstellung läßt sich so programmieren: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.5) y = np.arange(0, 10, 0.5) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_wireframe(x, y, z) plt.show() [[Datei:PythonIng_fläche2.png]] Ein etwas komplexeres Beispiel: import matplotlib.pyplot as plt import numpy as np x = np.arange(0.1, 10, 0.1) y = np.arange(0.1, 10, 0.1) x, y = np.meshgrid(x, y) z1 = np.sin(x) + 3 * np.cos(y) z2 = np.sin(x) + np.log(y) z3 = x + np.cos(y) z4 = x**2 - y fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, nrows=2, ncols=2) ax[0][0].plot_surface(x, y, z1) ax[0][1].plot_surface(x, y, z2) ax[1][0].plot_surface(x, y, z3) ax[1][1].plot_surface(x, y, z4) plt.show() [[Datei:PythonIng_subplot1.png]] Man beachte, dass man die Unterbilder im Bild nach dem Ausführen des Scripts z.B. mit der mittleren Maustaste einzeln drehen, oder über die Einträge in der Menüzeile einzeln bearbeiten kann. Mit ein paar Zeilen Programmtext lässt sich also eine Menge an Funktionalität generieren. Die Farbgebung lässt sich über <code>colormaps</code> variieren. import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm) plt.show() [[Datei:PythonIng_colormap1.png]] Es gibt eine Menge an Colormaps, z.B. <code>plasma, Greys, Dark2, ocean</code>. Zwecks detaillierterer Infos siehe die matplotlib-Dokumentation. <small>Verwendet man die IDE namens IDLE, so gibt es dort auch die automatische Codevervollständigung. D.h. es werden alle Möglichkeiten (in unserem Fall nach dem Eintippen von <code>cm.</code> alle verfügbaren Colormaps) angezeigt.</small> Die "edgecolor" und Linienbreite können auch frei gewählt werden: import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm, edgecolor="black", linewidth=1.0) plt.show() [[Datei:PythonIng_colormap2.png]] === Höhenlinien === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() ax.contour(x, y, z) plt.show() [[Datei:PythonIng_höhenlinien1.png|400px]] Etwas abgewandelt sieht das so aus: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contour(x, y, z) ax.clabel(hl, inline = True) plt.show() [[Datei:PythonIng_höhenlinien2.png|400px]] Und noch eine Variante (mit einem Farbbalken) sei gezeigt. import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contourf(x, y, z) fig.colorbar(hl) plt.show() [[Datei:PythonIng_höhenlinien5.svg|400px]] === Aufgaben === * Zeichnen Sie die räumliche Kurve <math>x = 2 \cdot \cosh(t)</math>, <math>y = 5 \cdot \sin(t)</math>, <math> z = t^{2} - t</math>, <math>0 \leq t \leq 3\pi</math>. * Zeichnen Sie die Fläche <math>z = \log(x) + \cos(y)</math>. == Animationen und fortgeschrittenes 3D == === Mit matplotlib === Auch mit matplotlib sind Animationen möglich. Das ist ein bisschen komplizierter und wird deshalb hier nur mit einem sehr einfachen Beispiel dargestellt (bei Interesse siehe z.B. auch das [https://matplotlib.org/stable/users/explain/animations/animations.html#animations Animations using Matplotlib-Tutorial]). import matplotlib.pyplot as plt import matplotlib.animation as ani import matplotlib import numpy as np def update(frame): line.set_xdata(x[:frame]) line.set_ydata(y[:frame]) return (line) fig, ax = plt.subplots() x = np.arange(0, 10, .1) y = np.sin(x) line, = ax.plot(x[0], y[0]) ax.set(xlim=[0, 10], ylim=[-1, 1]) a = ani.FuncAnimation(fig=fig, func=update, frames=100, interval=20) plt.show() # Speichere die Animation in einem animierten GIF (optional) a.save(filename="c:/tmp/PythonIng_anim5.gif", writer="pillow") [[Datei:PythonIng_anim5.gif]] Es wird eine Sinuskurve auf den Bildschirm gezeichnet. In der letzten Zeile wird diese Animation in ein animiertes GIF gespeichert. Das ist natürlich optional und kann auch weggelassen werden. === Mit VPython === Aber auch mit dem Modul VPython lassen sich einfache 3D-Animationen erstellen. VPython ist ein externes Modul, das vorab installiert werden muss. Unter openSUSE Tumbleweed gibt es dzt. kein entsprechendes rpm-Paket. Die übliche Methode der Installation mittels YaST oder zypper ist somit nicht möglich. Auch eine direkte Verwendung von pip führt nur zu einer Fehlermeldung (<code>error: externally-managed-environment</code>). Es empfiehlt sich dort folgende Vorgehensweise: # Erstelle zuerst eine virtuelle Umgebung, z.B.: <code>python3.11 -m venv ~/tmp/venv1</code> # Wechsle das Verzeichnis: <code>cd ~/tmp/venv1/bin</code> # Installiere das entsprechende Paket: <code>./pip install vpython</code> # Führe das entsprechende Skript aus: <code>./python ~/tmp/test1.py</code> Aktuell (März 2026) ist dieses Programmpaket lt. der [https://vpython.org/presentation2018/install.html VPython-Homepage] nur für die Python-Versionen 3.8 bis 3.12 verfügbar. Ein Beispiel zu einer einfachen Animation wird nachfolgend geliefert. from vpython import * scene.width = 1200 scene.height = 600 scene.center = vector(20,0,0) scene.background = color.white cylinder(pos=vector(0,0,0), axis=vector(20,0,0), radius=5, color=color.blue) cone(pos=vector(0,0,0), axis=vector(-10,0,0), radius=5, color=color.blue) helix(pos=vector(20,0,0), axis=vector(40,0,0), radius=2, coils=10, thickness=0.5, color=color.blue) ball = sphere(pos=vector(20,0,0), color = color.green, radius = 1) ball.p = vector(0.15, 0, 0) toc = True while True: rate(200) if(ball.pos.x <= 60 and toc == True): ball.pos += ball.p else: toc = False ball.pos -= ball.p if(ball.pos.x <= 20 and toc == False): toc = True [[Datei:PythonIng_vpython_anim.JPG]] Idealerweise öffnet sich beim Ausführen des Scripts ein Browserfenster. Darin wird die programmierte Animation gezeigt (siehe auch den obigen Screenshot). Eine Größenänderung können Sie mit der mittleren Maustaste initiieren. Die Szenerie drehen können Sie mit der rechten Maustaste. === Mit build123d === Hiermit lassen sich einfach 3D-Modelle für CAD-Systeme erstellen. [https://build123d.readthedocs.io/en/latest/ build123d] ist ein externes Modul und muss vorab, wie schon für mehrere andere Module gezeigt, installiert werden (pip, venv etc.). Beispielcode: from build123d import * # Bauteil with BuildPart() as bauteil: # Zylinder erstellen Cylinder(100, 60) # Bohrung with BuildSketch(bauteil.faces().sort_by(Axis.Z)[-1]) as loch: Circle(radius=10) # negativ extrudieren extrude(amount=-60, mode=Mode.SUBTRACT) # Fertiges Modell exportieren export_step(bauteil.part, "bauteil.step") Ausgabe (STEP-Datei z.B. in {{W|FreeCAD}} importiert, Screenshot): [[Datei:PythonIng_build123d.jpg | 300px]] FreeCAD ist ein freies 3D-CAD-System. Die Makroprogrammierung in diesem System wird später noch gezeigt. === Mit VTK === Komplexer, aber auch mächtiger als VPython ist die Verwendung von VTK ('''V'''isualization '''T'''ool'''k'''it). Genauer gesagt des Python-Wrappers von VTK. Dieses externe Python-Modul muss vorab installiert werden (z.B. mittels YaST, pip oder in eine virtuelle Umgebung). VTK ist eine Softwarebibliothek zur 3D-Visualisierung und wurde ursprünglich in C++ geschrieben. Verbreitet eingesetzt wird diese Bibliothek in der Wissenschaft und Forschung, z.B. * in der medizinischen Bildgebung * für Strömungssimulationen * für Klimadaten VTK funktioniert nach dem {{W|Grafikpipeline|Pipeline-Prinzip}}: Source (Quellen) -> Filter -> Mapper (Senken) -> Actor/Renderer Daten fließen von den Quellen zu den Senken. Als einfaches Beispiel wird die Darstellung eines Zylinders gezeigt, der mit den Maustasten gedreht oder in der Größe geändert werden kann: import vtk # Zylinder erzeugen cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) # Geometrie in darstellbare Daten umwandeln mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) # Objekt in der Szene actor = vtk.vtkActor() actor.SetMapper(mapper) # Szene verwalten renderer = vtk.vtkRenderer() renderer.AddActor(actor) # Render-Fenster render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) # Maus/Tastatur-Steuerung interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) # Starten render_window.Render() interactor.Start() Ausgabe: [[Datei:PythonIng_VTK_1.png]] Gleiches Beispiel wie oben, aber mit einer Animationssequenz: import vtk import time cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderer.AddActor(actor) render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) render_window.Render() time.sleep(0.01) Das Grafikfenster schließt sich nach Ablauf der Schleife. Das Fenster bleibt geöffnet, wenn Sie am Programmende folgenden Befehl hinschreiben interactor.Start() Um den animierten Zylinder grün einzufärben, müssen Sie Folgendes im obigen Programm ergänzen (Farbnamen): colors = vtk.vtkNamedColors() actor.GetProperty().SetColor(colors.GetColor3d("Green")) Als Namen können Sie u.a. die CSS3 Web-Farben verwenden (siehe z.B. [https://wiki.selfhtml.org/wiki/Farbe/Farbangaben] und {{W|Webfarbe#CSS_3}}). Alternativ funktioniert auch das ({{W|RGB-Farbraum|RGB}}): actor.GetProperty().SetColor(0.0, 0.6, 0.0) Wie der Zylinder mit einer Textur versehen wird, zeigt folgendes Programm: import vtk import time cylinder = vtk.vtkCylinderSource() cylinder.SetResolution(30) cylinder.SetHeight(3.0) cylinder.SetRadius(1.0) cylinder.CappingOn() texture_coords = vtk.vtkTextureMapToCylinder() texture_coords.SetInputConnection(cylinder.GetOutputPort()) texture_coords.PreventSeamOn() reader = vtk.vtkJPEGReader() reader.SetFileName("PythonIng_textur.jpg") texture = vtk.vtkTexture() texture.SetInputConnection(reader.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(texture_coords.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.SetTexture(texture) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderer.AddActor(actor) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) renderWindow.Render() time.sleep(0.01) interactor.Start() <gallery> PythonIng_textur.jpg | Textur-Datei PythonIng_VTK_2.png | Ausgabe (Screenshot) </gallery> Nun aber genug von VTK und der Erstellung von Grafiken, weiter geht es mit mathematischeren Themen. = Vektoren und Matrizen = == Zahlenfolgen == Für das Erstellen von Zahlenfolgen bieten sich die Funktionen <code>arange</code> und <code>linspace</code> aus dem <code>numpy</code>-Modul an. from numpy import * start = 0 stop = 10 step = 2 num = 10 r = arange(start, stop, step) # step ... Schrittweite l = linspace(start, stop, num) # num ... Anzahl der Werte print("r = ", r) print("l = ", l) Ausgabe: r = [0 2 4 6 8] l = [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556 6.66666667 7.77777778 8.88888889 10. ] Bei <code>arange</code> ist der <code>stop</code>-Wert nicht im Ergebnis enthalten, bei <code>linspace</code> aber sehr wohl. == Vektoren == Vektoren sollten jedem aus der Linearen Algebra bekannt sein. === Arrays === In Python mit NumPy kann man Vektoren durch die Funktion array erzeugen. import numpy as np l1 = (-5, 3, 2) l2 = (1, 1, 4) a1 = np.array(l1) a2 = np.array(l2) a3 = a1 + a2 a4 = 2 * a2 print(a1) print(a2) print(a3) print(a3[2]) print(a4) Ausgabe: [-5 3 2] [1 1 4] [-4 4 6] 6 [2 2 8] === Zeilen- und Spaltenvektoren === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) print(z) print(s) Ausgabe: [ [-5 3 2] ] [[1] [1] [4]] === Skalarprodukt === import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) skalarprodukt = np.dot(a1, a2) print(skalarprodukt) Ausgabe: 6 === Vektorprodukt === <math>a\ast b=\left(\begin{array}{c} a_{1}\\ a_{2}\\ a_{3} \end{array}\right)\ast\left(\begin{array}{c} b_{1}\\ b_{2}\\ b_{3} \end{array}\right)=\left(\begin{array}{c} a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} \end{array}\right) </math> Python-Code: import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) vektorprodukt = np.cross(a1, a2) print(vektorprodukt) Ausgabe: [10 22 -8] === Transponierter Vektor === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) # transponierter Vektor z_tp = np.transpose(z) # transponierter Vektor s_tp = np.transpose(s) print(z_tp) print(s_tp) Ausgabe: [[-5] [ 3] [ 2]] [ [1 1 4] ] === Vektorfelder visualisieren === import matplotlib.pyplot as plt import numpy as np # Daten generieren x = np.arange(0, 10, 1) y = np.arange(0, 10, 1) X, Y = np.meshgrid(x, y) U = X * Y V = Y + X # Plotten fig, ax = plt.subplots() ax.quiver(X, Y, U, V, angles='xy') plt.show() Ausgabe: [[Datei:PythonIng_quiver1.png]] == Matrizen== import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) print(m1) Ausgabe: [[1 2 3] [4 5 6]] === Zugriff auf Matrizenelemente === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) # Element aus Zeile 2 und Spalte 3 (Achtung! Index startet bei Null) print(m1[1,2]) Ausgabe: 6 === Addition und Subtraktion von Matrizen === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) m2 = np.matrix([[0, 0, 2], [1, 3, 2]]) print(m1 + m2) print(m1 - m2) Ausgabe: [[1 2 5] [5 8 8]] [[1 2 1] [3 2 4]] === Transponierte Matrix === import numpy as np m = np.matrix([[1, 2, 3], [4, 5, 6]]) mt = np.transpose(m) print(m) print(mt) Ausgabe: [[1 2 3] [4 5 6]] [[1 4] [2 5] [3 6]] === Rang einer Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) rg = np.linalg.matrix_rank(m) print(rg) Ausgabe: 2 === Inverse Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) mi = np.linalg.inv(m) print(mi) Ausgabe: [[ 1. 0.6] [-0. -0.2]] === Multiplikation von Matrizen (falksches Schema) === import numpy as np m1 = np.matrix([[1, 3, 4], [0, -5, 1]]) m2 = np.matrix([[1, 2], [2, 3], [0, 2]]) print(m1 @ m2) Ausgabe: [[ 7 19] [-10 -13]] === Eigenwerte und Eigenvektoren === import numpy as np m = np.matrix([[5, 8], [1, 3]]) D,V = np.linalg.eig(m) # Eigenwerte print(D) # Eigenvektoren print(V) Ausgabe: [7. 1.] [[ 0.9701425 -0.89442719] [ 0.24253563 0.4472136 ]] === Teilmatrizen === import numpy as np m = np.matrix([[1, 3, 4], [0, -5, 1]]) print("m = ", m) # Erste Zeile extrahieren m1 = m[0,:] print("m1 = ", m1) # Das Element aus der 1. Zeile und der 2. Spalte extrahieren m2 = m[0,1] print("m2 = ", m2) # Zweite Spalte extrahieren m3 = m[:, 1] print("m3 = ", m3) Ausgabe: m = [[ 1 3 4] [ 0 -5 1]] m1 = [ [1 3 4] ] m2 = 3 m3 = [[ 3] [-5]] === Spezielle Matrizen === ==== Nullmatrix ==== import numpy as np z = np.zeros((3, 2)) print(z) Ausgabe: [[0. 0.] [0. 0.] [0. 0.]] ==== Einheitsmatrix ==== import numpy as np z = np.eye(3) print(z) Ausgabe: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ==== Matrix mit lauter Einsen ==== import numpy as np z = np.ones((3, 2)) print(z) Ausgabe: [[1. 1.] [1. 1.] [1. 1.]] === Spärlich besetzte Matrizen === Das Thema spärlich besetzter Matrizen wird hier nur kurz angerissen. Nähere Details siehe unter dem Weblink [https://docs.scipy.org/doc/scipy/reference/sparse.html#module-scipy.sparse]. import numpy as np import scipy A = scipy.sparse.csr_array(np.eye(5)) print(A) Ausgabe: (0, 0) 1.0 (1, 1) 1.0 (2, 2) 1.0 (3, 3) 1.0 (4, 4) 1.0 = Lineare Gleichungssysteme = Sei <math>Ax = b</math> ein lineares Gleichungssystem. <math>A</math> sei die Koeffizientenmatrix, <math>x</math> der Lösungsvektor und <math>b</math> ein bekannter Vektor. Beispiel: import numpy as np A = np.array([[5, 1], [0, 2]]) b = np.array([1, 2]) x = np.linalg.solve(A, b) print(x) Ausgabe: [0. 1.] Siehe dazu auch das Kapitel [[Ing Mathematik: Numerisches Lösen von linearen Gleichungssystemen]]. Dort wird dieses Themengebiet u.a. mit weitergehenden Python-Skripten vertieft. == Aufgabe == * Lösen Sie folgendes Gleichungssystem mittels Python (und zur Kontrolle auch händisch): 5x + 6y - 2z = 12 3x - y - 3z = 6 2x + 2y + 4z = 5 = Polynome = == Ein erstes einfaches Beispiel == Gegeben sei das Polynom <math>7x^3+5x^2+1</math>. In Python: import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p) Ausgabe: 3 2 7 x + 5 x + 1 == Einzelne Polynomwerte berechnen == import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p(1.5)) Ausgabe: 35.875 == Polynome integrieren und differenzieren == import numpy as np p = np.poly1d([7, 5, 0, 1]) # 1. Ableitung p1 = p.deriv() p2 = p.deriv(1) # 2. Ableitung p3 = p.deriv(2) # Integral p4 = p.integ() print(p1) print(p2) print(p3) print(p4) Ausgabe: 2 21 x + 10 x 2 21 x + 10 x 42 x + 10 4 3 1.75 x + 1.667 x + 1 x == Nullstellen bestimmen == import numpy as np p = np.poly1d([2, 5, 0, 4]) r = np.roots(p) print(r) Ausgabe: [-2.7621427 +0.j 0.13107135+0.84077099j 0.13107135-0.84077099j] == Aufgaben == * Berechnen Sie den Wert für x = 3 des Polynoms <math>y = 2x^4 - 3x^3 - x + 7</math>. * Differenzieren und integrieren Sie das Polynom <math>y = 2x^4 - 3x^3 - x + 7</math>. * Berechnen Sie die Nullstellen von <math>y = 7x^5 - 3x^2 + 12</math>. = Nichtlineare Gleichungen und Gleichungssysteme = == Nullstellenbestimmung == Löse eine beliebige Gleichung f(x) = 0, z.B. <math> f(x) = x^2 - 5\cos(x) - 10 = 0 </math>: import scipy import numpy as np def f(x): return x**2 - 5*np.cos(x) - 10 xstart = [-1, 1] # Startwerte xn = scipy.optimize.root(f, xstart) print(xn.x) Ausgabe: [-2.46813009 2.46813009] Funktionsgraph: [[Datei:octave_nichtlin2.jpg]] == Gleichungssysteme == SymPy ist ein externes Modul, das symbolisches Rechnen ('''Sym'''bolic '''Py'''thon) ermöglicht. Folgende Aufgabe ist dem Buch "Knorrenschild: Numerische Mathematik, Hanser, 2017, Seite 72" entnommen. Zu lösen ist das nichtlineare Gleichungssystem <math>f_1 = 2x_1 + 4x_2 = 0 </math> <math>f_2 = 4x_1 + 8x_2^3 = 0</math> Mit Python ist das so möglich: import sympy x1, x2 = sympy.symbols("x1 x2") f1 = 2*x1 + 4*x2 f2 = 4*x1 + 8*x2**3 s = sympy.solve((f1, f2), x1, x2) print(s) Ausgabe: [(-2, 1), (0, 0), (2, -1)] Plot: [[Datei:IngPython_nl_gleichung1.svg|500px]] = Komplexe Zahlen = Die imaginäre Einheit wird in Python durch den Buchstaben <code>j</code> symbolisiert. Darstellen kann man eine komplexe Zahl bekannterweise in mehreren Formen: * Kartesische Darstellung <math>z = \Re(z) + j \cdot \Im(z)</math> * Polardarstellungen <math>z = r \cdot (\cos(\phi) + j \cdot \sin(\phi)) = r \cdot e^{j\cdot \phi}</math> Die konjugiert komplexe Zahl ist <math>z^* = \Re(z) - j \cdot \Im(z)</math> Nachfolgend einige mathematische Operationen mit Python und NumPy. import numpy as np z1 = 2 + 5j # kartesische Darstellung z2 = 3 * np.exp(3j) # Polardarstellung # Addition res = z1 + z2 print("z1 + z2 = ", res) # Multiplikation res = z1 * z2 print("z1 * z2 = ", res) # Realteil res = np.real(z2) print("Realteil von z2 = ", res) # Imaginärteil res = np.imag(z2) print("Imaginaerteil von z2 = ", res) # Betrag res = np.abs(z1) print("Betrag von z1 = ", res) # Argument res = np.angle(z1) print("Argument von z1 = ", res) # Konjugiert komplexe Zahl res = np.conj(z1) print("Konjugiert komplexe Zahl von z1 = ", res) Ausgabe: z1 + z2 = (-0.9699774898013365+5.423360024179601j) z1 * z2 = (-8.05675510050068-14.003167400647481j) Realteil von z2 = -2.9699774898013365 Imaginaerteil von z2 = 0.4233600241796016 Betrag von z1 = 5.385164807134504 Argument von z1 = 1.1902899496825317 Konjugiert komplexe Zahl von z1 = (2-5j) = Interpolation = import numpy as np import scipy import matplotlib.pyplot as plt # Stützpunkte xp = np.arange(1, 6) yp = (0, -5, 2, 7, 6) ti = np.arange(1, 5, 0.01) i1 = scipy.interpolate.interp1d(xp, yp, kind = "linear") i2 = scipy.interpolate.interp1d(xp, yp, kind = "cubic") plt.plot(xp, yp, "rx") plt.plot(xp, i1(xp)) plt.plot(ti, i2(ti)) plt.show() Ausgabe: [[Datei:PythonIng_interpol1.png]] = Differenzialrechnung = == Numerisches Differenzieren == Als Beispiel differenzieren wir <math>y = 5x\sin{x}</math> und stellen das Ganze grafisch dar. from findiff import Diff import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 1000) f = 5 * x * np.sin(x) dx = x[1] - x[0] # Ableitung d_dx = Diff(0, dx) df_dx = d_dx(f) # Grafik plt.plot(x, f, label = "y") plt.plot(x, df_dx, label = "y'") plt.grid() plt.legend(loc="best") plt.show() Ausgabe: [[Datei:octave_diff1.jpg]] <small>findiff ist ein externes Modul. Dieses muss installiert werden (z.B. so: ...\Python\Scripts\pip.exe install --upgrade findiff). Für die Vorgehensweise unter openSUSE Tumbleweed siehe das Kapitel [[Ing_Mathematik:_Python#Mit_VPython | VPython]], nur dass das Ganze mit einer aktuelleren Python-Version exekutiert wird, z.B. mit Python 3.13. Das im Buch "Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler, Rheinwerk" verwendete Modul "scipy.misc" ist veraltet (deprecated ... missbilligt). Lt. [https://docs.scipy.org/doc/scipy-1.17.0/dev/roadmap-detailed.html#misc SciPy-Dokumentation für die Version 1.17.0] wurden alle entsprechenden Features schon entfernt.</small> == Symbolisches Differenzieren == Differenzieren Sie die Funktionen <math>f_1(x) = x^2</math> und <math>f_2(x) = \sin(x)\cos\left(\frac{x}{2}\right)</math>. import sympy x = sympy.symbols("x") f1 = x**2; f2 = sympy.sin(x) * sympy.cos(x/2.) d1 = sympy.diff(f1, x) d2 = sympy.diff(f2, x) print(d1) print(d2) Ausgabe: 2*x -0.5*sin(0.5*x)*sin(x) + cos(0.5*x)*cos(x) == Aufgaben == * Differenzieren Sie die Funktion <math>y = \log(x) + 10x</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. * Differenzieren Sie die Funktion <math>y = \frac{\sinh(x)}{(1+x)}</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. = Integralrechnung = == Numerisches Integrieren == Berechnen Sie das Integral <math>\int_{0}^{3}x^2 dx</math>. import scipy def f(x): return x**2 i = scipy.integrate.quad(f, 0, 3) print(i) Ausgabe: (9.000000000000002, 9.992007221626411e-14) Das trifft den exakten Wert 9.0 ziemlich genau. Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} dx</math>. import scipy import numpy as np def f(x): return 2**(-x) i = scipy.integrate.quad(f, 0, np.inf) print(i) Ausgabe: (1.4426950408889556, 4.486558477977586e-09) == Symbolisches Integrieren == Berechnen Sie <math>\int x^2 \text{d}x</math> und <math>\int \sin{x}\cos{\frac{x}{2}} \text{d}x</math>. import sympy x = sympy.symbols("x") f1 = x**2 f2 = sympy.sin(x) * sympy.cos(x/2.) i1 = sympy.integrate(f1, x) i2 = sympy.integrate(f2, x) print(i1) print(i2) Ausgabe: x**3/3 -0.666666666666667*sin(0.5*x)*sin(x) - 1.33333333333333*cos(0.5*x)*cos(x) Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} \text{d}x</math>. import sympy x = sympy.symbols("x") f = 2**(-x) i = sympy.integrate(f, (x, 0, sympy.oo)) print(i) Ausgabe: 1/log(2) <code>sympy.oo</code> steht für das {{W|Unendlichzeichen}} <math>\infty</math> (die liegende Acht oder das Möbiusband). Mit <code>sympy.pprint(i)</code> ließe sich letzere Ausgabe etwas schöner schreiben: 1 ────── log(2) Man beachtete, <code>log</code> steht hier für den natürlichen Logarithmus <code>ln</code>. == Aufgaben == * Integrieren Sie die Funktion <math>y = \log(x) + 10x</math> von 1 bis 5. * Integrieren Sie die Funktion <math>y = x^3</math> von 0 bis 4. * Integrieren Sie <math>\int x^x(\log (x) + 1)\mathrm dx</math> symbolisch. = Gewöhnliche Differenzialgleichungen = == DGL numerisch lösen == Für die Lösung von Differenzialgleichungen steht u.a. die Funktion scipy.integrate.solve_ivp() zur Verfügung. Diese Funktion implementiert auch das Runge-Kutta-Verfahren (RK45). {{Wikipedia | Runge-Kutta-Verfahren}} Beispiel <math>y' = x^2 + y^3</math>: import scipy import numpy as np import matplotlib.pyplot as plt def dy_dx(x, y): return x**2 + y**3 y0 = [1] xi = [0, 1] x = np.arange(0, 1, 0.01) z = scipy.integrate.solve_ivp(dy_dx, xi, y0, method="RK45", dense_output=True) y = z.sol(x) plt.plot(x, y.T) plt.grid() plt.show() [[Datei:PythonIng_dgl1.png]] == DGL symbolisch lösen == Beispiel <math>y' = x^2 + y^3</math>: import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) print(lsg) Ausgabe: [Eq(f(x), (-x**2)**(1/3)), Eq(f(x), (-x**2)**(1/3)*(-1 - sqrt(3)*I)/2), Eq(f(x), (-x**2)**(1/3)*(-1 + sqrt(3)*I)/2)] Mit <code>sympy.pprint</code> (pretty print) lässt sich die Ausgabe etwas übersichtlicher darstellen. import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) sympy.pprint(lsg) Ausgabe: ⎡ _____ _____ ⎤ ⎢ _____ 3 ╱ 2 3 ╱ 2 ⎥ ⎢ 3 ╱ 2 ╲╱ -x ⋅(-1 - √3⋅ⅈ) ╲╱ -x ⋅(-1 + √3⋅ⅈ)⎥ ⎢f(x) = ╲╱ -x , f(x) = ────────────────────, f(x) = ────────────────────⎥ ⎣ 2 2 ⎦ == Aufgaben == * Lösen Sie die Differenzialgleichung <math>y' = \frac{1}{x\cdot y}</math> mit Python. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>m' = -k\cdot m</math>. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>y' = \sqrt{|y|}</math>. =Laplace-Transformation= Laplace-Transformation: <math>F(s) =\mathcal{L} \left\{f\right\}(s) = \int_{0}^{\infty} f(t) \mathrm e^{-st} \,\mathrm{d}t, \qquad s\in\mathbb{C} </math> Inverse Laplace-Transformation: <math>\mathcal{L}^{-1} \left\{F\right\}(t) = \frac{1}{2 \pi \mathrm j} \int_{ \gamma - \mathrm j \infty}^{ \gamma + \mathrm j \infty} \mathrm e^{st} F(s)\,\mathrm ds = \begin{cases} f(t) & \text{für } t \geq 0 \\ 0 & \text{für } t < 0 \end{cases} </math> Siehe auch [[Ing_Mathematik:_Laplace-Transformation]] Code: import sympy from sympy.abc import t, s # Laplace-Transformation der Funktion f(t) = 1 (Heaviside-Fkt.) f = 1 # alternativ: f = sympy.Heaviside(t) F = sympy.laplace_transform(f, t, s, noconds=True) print("Laplace-Transformierte F(s):", F) # Inverse Laplace-Transformation zurück in den Zeitbereich f_inv = sympy.inverse_laplace_transform(F, s, t) print("Inverse Transformation f(t):", f_inv) Ausgabe: Laplace-Transformierte F(s): 1/s Inverse Transformation f(t): Heaviside(t) Die Zeile from sympy.abc import t, s steht alternativ für t = sympy.symbols("t") s = sympy.symbols("s") =Fourier-Reihen= <math> f(x)\approx \frac{a_{0}}{2}+\sum_{k=1}^{\infty}\left(a_{k}\cos\left(kx\right)+b_{k}\sin\left(kx\right)\right) </math> <math> a_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\cos\left(kx\right)\mathrm dx\quad\text{für }k\geq0 </math> <math> b_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\sin\left(kx\right)\mathrm dx\quad\text{für }k\geq1 </math> Für die Sägezahnfunktion <math>y=x;\, 0 < x < 2\pi</math> sei die Fourierreihe mit einem Python-Programm (unter Mithilfe von sympy) hergeleitet. Code: from sympy import fourier_series, pi, symbols, pprint x = symbols('x') f = x s = fourier_series(f, (x, 0, 2*pi)) pprint(s.truncate(n=4)) Ausgabe: 2⋅sin(3⋅x) -2⋅sin(x) - sin(2⋅x) - ────────── + π 3 Siehe auch [[Ing Mathematik: Fourierreihen]]. Ein komplizierteres Beispiel: [[Datei:IngMath fourier bsp13.svg | 300px]] <math>0\le t < T/2\text{:}\quad f(t) = H</math> <math>T/2 \le t \le T\text{:}\quad f(t) = \frac{2H}{T}\left( t-\frac{T}{2}\right)</math> Code: import sympy as sp H = sp.Symbol('H', positive=True) T = sp.Symbol('T', positive=True) t = sp.Symbol('t') f = sp.Piecewise( (H, (t > 0) & (t < T/2)), (2*H/T*(t-T/2), (t > T/2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Ausgabe: ⎛2⋅π⋅t⎞ ⎛4⋅π⋅t⎞ ⎛6⋅π⋅t⎞ ⎛2⋅π⋅t⎞ ⎛6⋅π⋅t⎞ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ 2⋅H⋅cos⎜─────⎟ 2⋅H⋅cos⎜─────⎟ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ 3⋅H ──────────── - ──────────── + ──────────── + ────────────── + ────────────── + ─── π 2⋅π 3⋅π 2 2 4 π 9⋅π =Rechnen mit wirklich großen Zahlen= Bekannt ist, dass Python kaum Einschränkungen beim Wertebereich von Ganzzahlen hat, z.B. print(10**300) Ausgabe (gekürzt): 100000000000000000000...00000000000000000000000000000000000000000000000000000000000000000000000 Ähnliches geht auch mit Gleitpunktzahlen, z.B. durch die Verwendung des Moduls mpmath: import mpmath print(mpmath.mpf(1500.4)**mpmath.mpf(300)) Ausgabe: 7.27975299218612e+952 Anderes Beispiel: from mpmath import mp, pi mp.dps = 100 print(pi) Ausgabe: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068 mpmath kann noch einiges mehr, dazu sei aber auf die entsprechende Dokumentation auf der mpmath-Homepage verwiesen. mpmath ist Bestandteil von SymPy, kann aber auch separat installiert werden. Aber auch Python selbst besitzt eine Möglichkeit, um mit großen bzw. exakten Gleitpunktzahlen zu rechnen, nämlich das interne Modul decimal. Dieses hat einige Vorteile gegenüber mpmath, aber auch gravierende Nachteile. Diese seien hier nicht detailliert aufgezählt. Grob gesagt hat decimal im Finanzwesen seine Berechtigung. Für wissenschaftliche Anwendungen wird aber mpmath vorzuziehen sein, da es u.a. vielfältige mathematische Funktionen bereit stellt. Nachfolgend ein einfaches Beispiel mit decimal: import decimal print("Potenzierung:", decimal.Decimal(1500.4) ** decimal.Decimal(300.0)) print("Einfache Addition:", 0.1 + 0.2) decimal.getcontext().prec = 50 print("Addition mit decimal:", decimal.Decimal("0.1") + decimal.Decimal("0.2")) Ausgabe: Potenzierung: 7.279752992186121551039839134E+952 Einfache Addition: 0.30000000000000004 Addition mit decimal: 0.3 <u>Aufgabe:</u> Recherchieren Sie im Internet die genauen Vor- und Nachteile von decimal und mpmath. Verwenden Sie dazu auch KI (z.B. von Google, chatgpt). =Regelungstechnische Aufgabenstellungen= Für regelungstechnische Aufgaben gibt es u.a. das externe Paket <code>control</code>. Hier soll nicht detailliert darauf eingegangen werden. Anhand eines Beispiels soll anschließend nur die Visualisierung in Form eines Bode-Diagramms und der Sprungantwort gezeigt werden. Gegeben sei ein P-Regler mit <math>R = \frac{5}{2}</math> und eine Strecke <math>S= \frac{1}{30s^3+20s^2+10s+1,5}</math>. Gesucht sei vorerst ein Bode-Diagramm für den offenen Regelkreis und das Führungsverhalten. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke # oder: G0 = ct.series(regler, strecke) Gw = ct.feedback(G0) ct.bode_plot(G0, label='G0') ct.bode_plot(Gw, label='Gw') plt.show() [[Datei:PythonIng_bode1.svg]] Nun noch für obiges Beispiel die Sprungantwort. Diese zeigt einige große Überschwinger, d.h. der Regler kann sicher noch optimiert werden. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke Gw = ct.feedback(G0) t, y = ct.step_response(Gw) plt.plot(t,y) plt.title('Sprungantwort') plt.xlabel('t') plt.ylabel('h(t)') plt.grid() plt.show() [[Datei:PythonIng_bode3.svg]] Einige weitere wichtige Daten (Phasenreserve, Amplitudenreserve, Durchtrittsfrequenz) lassen sich mittels der <code>control</code>-Funktion <code>margin()</code> ermitteln. Die Ortskurve lässt sich mit der Funktion <code>nyquist_plot()</code> zeichnen. Dies sei hier aber nicht weiter ausgeführt. ==Aufgaben== * Zeichen Sie mit Python die Ortskurve für obiges Beispiel. * Was passiert, wenn man die Reglerverstärkung weiter aufdreht (z.B. auf <math>R = \frac{25}{2}</math>)? * Wie sehen das Bode-Diagramm und die Sprungantwort aus, wenn ein PI-Regler verwendet wird? = Stereostatik etc. = Das Modul SymPy bietet einige Möglichkeiten einfache Bauwerke zu berechnen, z.B. Balken oder Fachwerke. Nachfolgend wird ein einfaches Fachwerk berechnet und gezeichnet. Python-Code: from sympy.physics.continuum_mechanics.truss import Truss t = Truss() # Knoten t.add_node(("A", -3, 0), ("B", 0, 0), ("C", 4, 0), ("D", 7, 0), ("E", 6, 1.5), ("F", 2, 3), ("G", -2, 1.5)) # Stäbe t.add_member(("AB","A","B"), ("BC","B","C"), ("CD","C","D")) t.add_member(("AG","A","G"), ("GB","G","B"), ("GF","G","F")) t.add_member(("BF","B","F"), ("FC","F","C"), ("CE","C","E")) t.add_member(("FE","F","E"), ("DE","D","E")) # Auflager; roller ... Loslager, pinned ... Festlager t.apply_support(("A","roller"), ("D","pinned")) # Einwirkende Kräfte t.apply_load(("G", 5, 270), ("E", 3, 90)) # Berechnung t.solve() print("Reaction Forces: ", t.reaction_loads) print("Internal Forces: ", t.internal_forces) # Fachwerk zeichnen p = t.draw() p.show() Ausgabe auf der Konsole: Reaction Forces: {'R_A_y': 4.20000000000000, 'R_D_x': 0, 'R_D_y': -2.20000000000000} Internal Forces: {'AB': 2.80000000000000, 'BC': 0.333333333333333, 'CD': -1.46666666666667, 'AG': -5.04777178564958, 'GB': -2.05555555555556, 'GF': -1.23413387432364, 'BF': 0.411111111111111*sqrt(13), 'FC': -0.3*sqrt(13), 'CE': 1.50000000000000, 'FE': 0.284800124843917, 'DE': 2.64407093534026} Zeichnung: [[File:PythonIng_fachwerk1.svg|300px]] Details zu diesem Thema siehe z.B. [https://docs.sympy.org/latest/modules/physics/continuum_mechanics/index.html Continuum Mechanics] oder [https://docs.sympy.org/latest/tutorials/physics/continuum_mechanics/index.html Continuum Mechanics Tutorials]. Auch andere mechanische Probleme werden von SymPy abgehandelt ([https://docs.sympy.org/latest/tutorials/physics/index.html Physics Tutorials]). == Aufgabe == Gegeben sei ein einseitig eingespannter Kragträger. Belastet wird er durch eine Einzellast am Trägerende. Für die Daten siehe folgende ASCII-Skizze: | 20 kN //|---> x | //| V //|---------------------- //| 10 m | Elastizitätsmodul E = 2,1*10⁵ N/mm² Flächenträgheitsmoment I = 0.001 m⁴ Berechnen Sie die Auflagerreaktionen, den Querkraft- und Biegemomentenverlauf, sowie die Verformungen. Stellen Sie dies mit Hilfe von SymPy graphisch und auch mittels Formeln dar. Verwenden Sie dazu auch pprint (pretty print) aus dem SymPy-Modul. Zwecks Lösungsansatz siehe die oben aufgeführte Seite "Continuum Mechanics Tutorials". Achten Sie auch auf die Einheiten! Kontrollieren Sie das Ganze mittels händischer Rechnung. In dem genannten Tutorial ist von "Singularity Functions" die Rede. Gemeint ist damit in diesem Kontext die {{W|Föppl-Klammer}}. Einige Python-Programme, vorrangig zu Maschinenelementen, finden sich auf [https://baymp.de/download_python.html BayMP für Python] (Balken, Zahnräder, Stabknickung usw.). =Thermodynamik= == PYroMat == Für thermodynamische Aufgabenstellungen gibt es verschiedene externe Module. Eines davon ist PYroMat (siehe auch [http://pyromat.org]). Damit lassen sich thermodynamische Stoffdaten für viele Substanzen berechnen. Beispiel (einige Stoffdaten für Wasser bei 400°C und 20 bar berechnen): import pyromat as pm # Wasserdaten laden: H2O = pm.get('mp.H2O') # Stoffdaten berechnen: T = 673.15 # Temperatur in Kelvin p = 20 # Druck in bar v = H2O.v(T, p) h = H2O.h(T, p) s = H2O.s(T, p) print(f"Spezifisches Volumen: {v} m³/kg") print(f"Spezifische Enthalpie: {h} kJ/kg") print(f"Spezifische Entropie: {s} kJ/(kg K)") Ausgabe: Spezifisches Volumen: [0.1512163] m³/kg Spezifische Enthalpie: [3248.3789473] kJ/kg Spezifische Entropie: [7.12924142] kJ/(kg K) <small> PYroMat muss vorab installiert werden (z.B. mittels pip, in eine virtuelle Umgebung) </small> <code>mp</code> steht für "multi phase". Für ein ideales Gas wäre <code>ig</code> zuständig, z.B. <code>'ig.O2'</code>. Beispiel (T-s-Diagramm für Wasser zeichnen): import numpy as np import matplotlib.pyplot as plt import pyromat as pm # Konfigurieren pm.config["unit_pressure"] = "bar" pm.config["unit_temperature"] = "K" fluid = pm.get("mp.H2O") # Temperaturbereich für das Nassdampfgebiet T_tripel = 273.16 T_crit = 647.096 T = np.linspace(T_tripel, T_crit - 0.1, 200) # Sättigungslinien berechnen und zeichnen for x in np.linspace(0.0, 1.0, 5): s = fluid.s(T=T, x=x) if(x<=0.0): plt.plot(s, T, label="Siedelinie x=%3.1f" % x, linewidth=2.0) elif(x>=1.0): plt.plot(s, T, label="Taulinie x=%3.1f" % x, linewidth=2.0) else: plt.plot(s, T, label="x=%3.1f" % x, linewidth=1.0) # Isobaren zeichnen p_values = [0.1, 1, 10, 50, 100] T_isobar = np.linspace(T_tripel, 1000, 200) t = 0.7 for p in p_values: s_iso = fluid.s(T=T_isobar, p=p) plt.plot(s_iso, T_isobar, 'k-', alpha=0.8, linewidth=0.8) t += .05 idx = int(len(s_iso) * t) plt.text(s_iso[idx], T_isobar[idx], f"{p} bar", fontsize=9, alpha=0.8) # Diagramm zeichnen plt.title("T-s-Diagramm für Wasser") plt.xlabel("Spezifische Entropie s in kJ/kg K", fontsize=10) plt.ylabel("Temperatur T in K", fontsize=10) plt.legend(loc="best") plt.grid(True) plt.show() Ausgabe (in etwa so): [[Datei:T-s-Diagramm fuer Wasser.svg|400px]] == CoolProp == Auch mit CoolProp können Stoffdaten berechnet werden. Siehe auch [https://coolprop.org/coolprop/wrappers/Python/index.html] Beispiel (Wasser bei 20bar und 400°C): import CoolProp.CoolProp as CP fluid = 'Water' T = 673.15 # Temperatur in Kelvin P = 20e5 # Druck in Pascal dichte = CP.PropsSI('D', 'T', T, 'P', P, fluid) enthalpie = CP.PropsSI('H', 'T', T, 'P', P, fluid) entropie = CP.PropsSI('S', 'T', T, 'P', P, fluid) print(f"Spez. Volumen: {1/dichte:.6f} m³/kg") print(f"Spez. Enthalpie: {enthalpie:.2f} J/kg") print(f"Spez. Entropie: {entropie:.2f} J/kgK") Ausgabe: Spez. Volumen: 0.151215 m³/kg Spez. Enthalpie: 3248344.02 J/kg Spez. Entropie: 7129.16 J/kgK == iapws == Um Werte für Wasser(dampf) zu erhalten (IAPWS; '''I'''nternational '''A'''ssociation for the '''P'''roperties of '''W'''ater and '''S'''team) gibt es die Bibliothek iapws. Siehe auch [https://iapws.org/] und [https://pypi.org/project/iapws/] Beispiel (Wasser für 20bar und 400°C): from iapws import IAPWS97 dampf = IAPWS97(P=2.0, T=673.15) print(f"Spezifisches Volumen: {dampf.v:.6f} m³/kg") print(f"Spezifische Enthalpie: {dampf.h:.2f} kJ/kg") print(f"Spezifische Entropie: {dampf.s:.4f} kJ/(kgK)") print(f"Phase: {dampf.phase}") Ausgabe: Spezifisches Volumen: 0.151208 m³/kg Spezifische Enthalpie: 3248.23 kJ/kg Spezifische Entropie: 7.1290 kJ/(kgK) Phase: Gas == TESPy == Ein anderes Modul für einen anderen Aufgabenzweck ist TESPy ('''T'''hermal '''E'''ngineering '''S'''ystems in '''Py'''thon). Dieses Modul ist für die Anlagensimulation zuständig. Für nähere Informationen siehe [https://tespy.readthedocs.io/en/main/getting_started/introduction.html]. Als Beipiel sei hier vorerst Code, der von der Google KI generiert wurde, angeführt. Der Code wurde überarbeitet, damit keine Warnungen auftreten. Bitte aber den Code trotzdem mit Vorsicht genießen, auch KI-generierter Code kann Fehler aufweisen. Eine Pumpe wird berechnet: from tespy.components import Sink, Source, Pump from tespy.connections import Connection from tespy.networks import Network # 1. Netzwerk definieren (Zentrales Steuerungselement) # Wir wählen Wasser als Fluid und bar/Celsius als Einheiten nw = Network(fluids=["water"]) nw.units.set_defaults(pressure="bar", pressure_difference="bar", temperature="°C", enthalpy="kJ / kg") # 2. Komponenten erstellen eingang = Source("Wasserquelle") ausgang = Sink("Wasserspeicher") pumpe = Pump("Speisewasserpumpe") # 3. Verbindungen definieren (Komponenten miteinander verknüpfen) c1 = Connection(eingang, "out1", pumpe, "in1") c2 = Connection(pumpe, "out1", ausgang, "in1") # Verbindungen dem Netzwerk hinzufügen nw.add_conns(c1, c2) # 4. Randbedingungen und Parameter festlegen # Zustand am Eingang (Druck, Temperatur, Massenstrom, Fluid-Zusammensetzung) c1.set_attr( v=1, # Massenstrom: 1 kg/s T=20, # Temperatur: 20 °C p=1, # Druck: 1 bar fluid={"water": 1}, # 100% Wasser ) # Zustand am Ausgang / Zielwerte der Pumpe c2.set_attr(p=10) # Ziel-Druck nach der Pumpe: 10 bar # Pumpeneigenschaften festlegen pumpe.set_attr(eta_s=0.8) # Isentroper Wirkungsgrad von 80% # 5. Simulation ausführen nw.solve(mode="design") # 6. Ergebnisse ausgeben nw.print_results() # Spezifische Werte direkt auslesen print("\n--- Auswertung ---") print(f"Erforderliche Pumpenleistung: {pumpe.P.val / 1000:.2f} kW") print(f"Temperatur nach der Pumpe: {c2.T.val:.2f} °C") Ausgabe (gekürzt): iter | residual | progress | massflow | pressure | enthalpy | fluid | component -------+------------+------------+------------+------------+------------+------------+------------ 1 | 7.04e+04 | 12 % | 9.96e+02 | 0.00e+00 | 8.81e+04 | 0.00e+00 | 0.00e+00 2 | 5.91e-12 | 100 % | 1.11e-13 | 0.00e+00 | 7.39e-12 | 0.00e+00 | 0.00e+00 3 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 4 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 Total iterations: 4, Calculation time: 0.01 s, Iterations per second: 480.85 ##### RESULTS (Pump) ##### +-------------------+----------+----------+-----------+----------+----------+----------+ | | P | pr | dp | eta | eta_s | head | |-------------------+----------+----------+-----------+----------+----------+----------| | Speisewasserpumpe | 1.12e+06 | 1.00e+01 | -9.00e+00 | 8.00e-01 | 8.00e-01 | 9.19e+01 | +-------------------+----------+----------+-----------+----------+----------+----------+ ... ... --- Auswertung --- Erforderliche Pumpenleistung: 1124.77 kW Temperatur nach der Pumpe: 20.07 °C = Stochastik = Die {{W|Stochastik}} ist ein sehr weites Feld. Hier werden etliche wichtige Themen kurz angerissen. Python stellt mit den Moduln math und statistics Software zu diesem Zwecke bereit. math und statistics sind bereits im Lieferumfang von Python enthalten. Aber auch mit den externen Modulen NumPy, SciPy, stochastic und pandas kann man Stochastik in Python betreiben. Die Theorie der Wahrscheinlichkeitsrechnung und Statistik soll etwas später in Band 5 dieser Buchreihe behandelt werden. == Lageparameter == import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] m1 = statistics.mean(werte) m2 = statistics.mode(werte) m3 = statistics.median(werte) print("Arithmetischer Mittelwert = ", m1) print("Modalwert = ", m2) print("Median = ", m3) Ausgabe: Arithmetischer Mittelwert = 3.5 Modalwert = 1 Median = 3.0 == Streuungsparameter == Beispiel (Berechnung der Standardabweichung): import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] s = statistics.stdev(werte) print("Standardabweichung = ", s) Ausgabe: Standardabweichung = 2.6770630673681683 Beispiel (Berechnung des Variationskoeffizienten V = Standardabweichung/Mittelwert) import numpy as np from scipy import stats import statistics k = 50 dat1 = [14, 21, 18, 25, 30, 17, 20] dat = np.array(dat1) # Mit SciPy v = stats.variation(dat) vddof = stats.variation(dat, ddof=1) print("V SciPy: ", v) print("V DDOF SciPy: ", vddof) print(k*"-") # mit NumPy mittelwert1 = np.mean(dat) std_abw1 = np.std(dat) std_abw1ddof = np.std(dat, ddof=1) v1= std_abw1 / mittelwert1 v1ddof = std_abw1ddof / mittelwert1 print("Mittelwert NumPy: ", mittelwert1) print("Std.abw. NumPy: ", std_abw1) print("Std.abw. DDOF NumPy: ", std_abw1ddof) print("V NumPy: ", v1) print("V DDOF NumPy: ", v1ddof) print(k*"-") # nur mit reinem Python mittelwert2 = statistics.mean(dat1) std_abw2 = statistics.stdev(dat1) v2 = std_abw2 / mittelwert2 print("Mittelwert Python: ", mittelwert2) print("Std.abw. Python: ", std_abw2) print("V Python:", v2) print(k*"-") Ausgabe: V SciPy: 0.23890355966467272 V DDOF SciPy: 0.25804533701889254 -------------------------------------------------- Mittelwert NumPy: 20.714285714285715 Std.abw. NumPy: 4.948716593053935 Std.abw. DDOF NumPy: 5.3452248382484875 V NumPy: 0.23890355966467272 V DDOF NumPy: 0.2580453370188925 -------------------------------------------------- Mittelwert Python: 20.714285714285715 Std.abw. Python: 5.3452248382484875 V Python: 0.2580453370188925 -------------------------------------------------- Der Unterschied bei der Standardabweichung zwischen reinem Python und den externen Bibliotheken SciPy und NumPy entsteht dadurch, dass einmal durch (n-1) und das andere Mal nur durch n dividiert wird. Dies kann bei NumPy und SciPy dadurch entschärft werden, indem <code>ddof=1</code> gesetzt wird. ddof steht für '''D'''elta '''D'''egrees '''o'''f '''F'''reedom. <small>Je größer die Anzahl der Datensätze n wird, umso weniger spielt das eine Rolle.</small> == Kombinatorik == Beispiel: import math n = 7 k = 5 print("n! = ", math.factorial(n)) print("Kombinationen (n über k) = ", math.comb(n, k)) Ausgabe: n! = 5040 Kombinationen (n über k) = 21 Siehe zu diesem Thema auch [[Ing Mathematik: Permutationen, Kombinationen, binomischer Lehrsatz]]. Die Anzahlen lassen sich einfach aus den dortigen Formeln ermitteln, z.B. bei Permutationen mit <math>n!</math> oder Variationen mit Wiederholungen als <math>n^k</math>. Will man die Kombinationen oder Variationen aber auch als Liste ausgeben, so kann das Modul <code>itertools</code> nützlich sein. Beispiel (Variationen ohne Wiederholung): from itertools import permutations menge = ["A", "B", "C", "D"] # n = 4 k = 3 variationen = list(permutations(menge, k)) for v in variationen: print("".join(v)) print(50*"-") print(len(variationen)) Ausgabe (gekürzt): ABC ABD ACB ... DCA DCB -------------------------------------------------- 24 Siehe zum Modul <code>itertools</code> auch die Website [https://docs.python.org/3/library/itertools.html]. * Variationen mit Wiederholung: <code>itertools.product()</code> * Kombinationen ohne Wiederholung: <code>itertools.combinations()</code> * Kombinationen mit Wiederholung: <code>itertools.combinations_with_replacement()</code> == Zufallszahlen == Beispiel: import random # Ganzzahlige Zufallszahl von 1 bis 10 zufallszahl1 = random.randint(1, 10) # Gleitpunktzahlen # zwischen 0.0 und 1.0 zufallszahl2 = random.random() # Zahl zwischen 1.5 und 9.5 zufallszahl3 = random.uniform(1.5, 9.5) # aus Liste auswählen farbe = ["Rot", "Grün", "Blau"] zufallswert = random.choice(farbe) print(zufallszahl1) print(zufallszahl2) print(zufallszahl3) print(zufallswert) Ausgabe, z.B.: 5 0.14147945849015753 6.894003397570905 Rot Benötigt man mehrere Zufallszahlen, so ist das Modul <code>numpy</code> zu bevorzugen, z.B.: * Normalverteilung: <code>np.random.normal(...)</code> * Gleichverteilung: <code>np.random.uniform(...)</code> == Histogramm == Zum Thema Histogramm siehe {{W|Histogramm}}. Beispiel (mit Matplotlib): import matplotlib.pyplot as plt import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) plt.hist(daten, bins=25, edgecolor='darkgray') plt.show() Ausgabe: [[Datei:IngMath_histogramm.svg|300px]] Beispiel (mit Seaborn): import matplotlib.pyplot as plt import seaborn as sns import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) sns.set_theme(style="darkgrid") sns.histplot(data=daten) plt.show() Ausgabe: [[Datei:IngMath_histogramm2.svg|300px]] Das Kürzel <code>sns</code> ist Konvention und steht für die fiktive Figur '''S'''amuel '''N'''orman '''S'''eaborn aus der US-Fernsehserie {{W|The West Wing – Im Zentrum der Macht | The West Wing}}. == Box-Plot == [[File:Elements of a boxplot.svg|400px]] Siehe auch {{W|Box-Plot}}. Beispiel (mit Seaborn erstellt): import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset("tips") sns.boxplot(data=df, x="day", y="tip", hue="day", legend=False) plt.show() Ausgabe: [[Datei:IngMath_boxplot.svg|400px]] Beispiel (mit Matplotlib erstellt): import matplotlib.pyplot as plt daten = [12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25] plt.boxplot(daten, patch_artist=True) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() Ausgabe: [[Datei:IngMath_boxplot2.svg|300px]] Um mehrere Box-Plots unterschiedlicher Farbe mit Matplotlib in einem Diagramm zu zeichnen, können Sie folgendermaßen vorgehen: import matplotlib.pyplot as plt daten = [[12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25], [10, 19, 20, 21, 20, 30, 19, 40, 11, 17, 19, 21]] farben = ["green", "blue"] boxplot = plt.boxplot(daten, patch_artist=True) for patch, farbe in zip(boxplot['boxes'], farben): patch.set_facecolor(farbe) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() == Regressionsrechnung == Beispiel: import numpy as np import matplotlib.pyplot as plt # Messpunkte x = np.array([1, 3, 5, 6, 8, 10, 20]) y = np.array([3, 4, 5, 5, 7, 9, 11]) # Regressionskurve (Grad 1 = lineare Regression, 2 = Polynom-Regression 2. Gr.) # y = kx + d k, d = np.polyfit(x, y, deg=1) # y = ax**2 + bx + c a, b, c = np.polyfit(x, y, deg=2) x_l = np.linspace(1, 20, 100) y_p = a * x_l**2 + b * x_l + c # Zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.plot(x, k*x + d, color='blue', label='Regressionsgerade') plt.plot(x_l, y_p, color='red', label='Regressionspolynom 2. Gr.') plt.xlabel('x') plt.ylabel('y') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: [[Datei:IngMath_regression.svg|400px]] == Korrelationsrechnung == Beispiel: import pandas as pd import matplotlib.pyplot as plt # Messdaten x = [1, 3, 4, 5, 6] y = [2, 4, 6, 8, 5] daten = {'X': x, 'Y': y} df = pd.DataFrame(daten) # Korrelation korr = df['X'].corr(df['Y']) print(f"Korrelationskoeff.: {korr}") # Messpunkte zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: Korrelationskoeff.: 0.7556096518348252 [[Datei:IngMath_korrelation.svg|300px]] == Mengen und Venn-Diagramme == Beispiel: import matplotlib.pyplot as plt from matplotlib_venn import venn2 menge_a = {1, 2, 3, 4, 5, 6} menge_b = {4, 5, 6, 7, 8} vereinigung = menge_a | menge_b schnitt = menge_a & menge_b print("Vereinigungsmenge = ", vereinigung) print("Schnittmenge = ", schnitt) venn2([menge_a, menge_b], set_labels=('Menge A', 'Menge B')) plt.show() Ausgabe: Vereinigungsmenge = {1, 2, 3, 4, 5, 6, 7, 8} Schnittmenge = {4, 5, 6} [[Datei:IngMath_venn.svg|300px]] Siehe auch {{W|Mengendiagramm#Venn-Diagramme}}. == Verteilungs- und Dichtefunktion == * CDF ... '''C'''umulative '''D'''istribution '''F'''unction, Verteilungsfunktion * PDF ... '''P'''robability '''D'''ensity '''F'''unction, Dichtefunktion Beispiel (Normalverteilung): import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm my, sigma = 0, 1 x = np.linspace(-4, 4, 50) pdf = norm.pdf(x, my, sigma) cdf = norm.cdf(x, my, sigma) plt.plot(x, pdf, lw=2, label="Dichtefunktion") plt.plot(x, cdf, lw=2, label="Verteilungsfunktion") plt.legend() plt.grid() plt.show() Ausgabe: [[Datei:IngMath_cdf_pdf.svg|300px]] Beispiel (<math>\chi^2</math>-Verteilung): import numpy as np import matplotlib.pyplot as plt import scipy.stats as stats x = np.linspace(0, 20, 500) # df ... degree of freedom, Freiheitsgrad pdf = (stats.chi2.pdf(x, df=2), stats.chi2.pdf(x, df=5), stats.chi2.pdf(x, df=10)) for i in range(0,3): if(i==0): lab = "Freiheitsgrad 2" elif(i==1): lab = "Freiheitsgrad 5" else: lab = "Freiheitsgrad 10" plt.plot(x, pdf[i], label=lab, lw=2) plt.grid() plt.legend() plt.show() Ausgabe: [[Datei:IngMath_chi2.svg | 300px]] == Schätzen und Testen == === Intervallschätzung === Als Beispiel seien Daten gegeben, die von ''Dürr, Mayer: Wahrscheinlichkeitsrechnung und Schließende Statistik; 7. Aufl., Hanser, 2014, Seite 137'' stammen. Und zwar soll das 95%-Vertrauensintervall für den Mittelwert des Kaloriengehalts (kcal/100g) von Hähnchen ermittelt werden. Wir wollen das mit Python inkl. NumPy und SciPy durchführen. Die Stichprobe ist groß (50 Hähnchen): Python-Code: import numpy as np import scipy.stats as stats # Stichprobe daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203] # Parameter definieren konfidenzniveau = 0.95 mean = np.mean(daten) std = np.std(daten, ddof=1) stdfehler = stats.sem(daten) intervall = stats.norm.interval(confidence=konfidenzniveau, loc=mean, scale=stdfehler) print(f"Mittelwert: {mean}") print(f"Standardabweichung: {std}") print(f"Konfidenzintervall: {intervall}") Ausgabe: Mittelwert: 215.48 Standardabweichung: 33.14238915925757 Konfidenzintervall: (np.float64(206.29356722321992), np.float64(224.66643277678006)) Diese Werte stimmen gerundet mit denen im genannten Buch überein. Zum Code selbst: * sem steht für '''s'''tandard '''e'''rror of the '''m'''ean. * <code>scipy.stats.norm</code> ... Modul für die Normalverteilung. === Punktschätzung === Gleiche Daten wie oben bei der Intervallschätzung. Python-Code: import numpy as np from scipy import stats daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203 ] mu_hat, sigma_hat = stats.norm.fit(daten) print(f"Schätzer für den Erwartungswert (μ): {mu_hat:.4f}") print(f"Schätzer für die Standardabweichung (σ): {sigma_hat:.4f}") Ausgabe: Schätzer für den Erwartungswert (μ): 215.4800 Schätzer für die Standardabweichung (σ): 32.8093 === Hypothesentests === Beispiel: import numpy as np import scipy.stats as stats x_quer = 12.075 # Stichproben-Mittelwert var = 0.069 # Stichproben-Varianz n = 90 # Stichprobengröße my_0 = 12.0 # Nullhypothese alpha = 0.05 # Signifikanzniveau z_stat = (x_quer - my_0) / np.sqrt(var / n) p_val = 2 * (1 - stats.norm.cdf(np.abs(z_stat))) print(f"Z-Statistik: {z_stat:.4f}") if p_val < alpha: print(f"p-Wert: {p_val:.6f} < alpha:", alpha) print("Die Nullhypothese wird verworfen.") else: print(f"p-Wert: {p_val:.6f} > alpha:", alpha) print("Die Nullhypothese wird nicht verworfen.") Ausgabe: Z-Statistik: 2.7087 p-Wert: 0.006755 < alpha: 0.05 Die Nullhypothese wird verworfen. == Statistische Qualitätskontrolle == Beispiel (Mittelwertkarte): import numpy as np import matplotlib.pyplot as plt # Gegeben sollwert = 50.0 varianz = 4.0 stichproben_umfang = 1 daten = [49.5, 50.2, 53.0, 48.1, 52.6, 53.4, 49.8] # Berechnung standardabweichung = np.sqrt(varianz) streuung = standardabweichung / np.sqrt(stichproben_umfang) cl = sollwert ucl = cl + 3 * streuung lcl = cl - 3 * streuung # Darstellung plt.plot(daten, marker='o', linestyle='-', color='b', label='Messdaten') plt.axhline(cl, color='green', linestyle='-', label=f'CL: {cl}') plt.axhline(ucl, color='red', linestyle='--', label=f'UCL: {ucl:.2f}') plt.axhline(lcl, color='red', linestyle='--', label=f'LCL: {lcl:.2f}') plt.title('Mittelwertkarte') plt.xlabel('Stichprobe') plt.ylabel('Wert') plt.legend(loc='lower left') plt.grid(True) plt.show() Ausgabe: [[Datei:IngMath_mittelwertkarte.svg|300px]] Siehe auch {{W|Shewhart-Regelkarte}} und {{W|Qualitätsregelkarte}}. * UCL ... '''U'''pper '''C'''ontrol '''Limit''', Obere Eingriffsgrenze * LCL ... '''L'''ower '''C'''ontrol '''Limit''', Untere Eingriffsgrenze * CL ... '''C'''enter '''L'''ine, Mittellinie = Ein- und Ausgabe = == print == Die Anweisung print haben wir schon oft verwendet. Hier soll anhand von Beispielen kurz beschrieben werden, was der Befehl print leisten kann. print("Hallo", "Welt", 1, sep="-") print("Hallo", end=" ") print("Welt") Ausgabe: Hallo-Welt-1 Hallo Welt == input == a = int(input("Zahl 1: ")) b = int(input("Zahl 2: ")) print("a + b = ", a+b) Ausgabe (nach Eingabe der beiden Ganzzahlen): Zahl 1: 4 Zahl 2: 5 a + b = 9 == Aus Dateien lesen == Es seinen die datei.txt Hallo Welt. Wie geht es dir? ... und test1.py dat = open("datei.txt", mode = "r") print(dat.read()) dat.close() Ausgabe Hallo Welt. Wie geht es dir? ... Mit dem open()-Befehl wird die Datei datei.txt im Lesemodus geöffnet (r ... read). Mit dem read()-Befehl wird die Datei eingelesen und mittels print ausgegeben. == In Dateien schreiben == dat = open("datei.txt", mode = "a", encoding = "utf-8") dat.write("Hänge Zeile an\n") dat.close() Die Datei datei.txt sieht nach Abarbeitung des obigen Skripts nun so aus Hallo Welt. Wie geht es dir? ... Hänge Zeile an Es wird die Datei im Schreibmodus geöffnet (a ... append (anhängend), w ... write (überschreibend)). write() fügt hier also eine Zeile Text am Dateiende ein. close() schließt die Datei wieder. Das close() kann man sich mit der with-Anweisung auch sparen. with open("datei.txt", mode="a", encoding="utf-8") as dat: dat.write("Hänge Zeile an\n") = Benutzeroberflächen erstellen = == tkinter == {{Wikipedia | Tkinter}} Python bietet standardmäßig das Modul tkinter zur Programmierung von Benutzeroberflächen. Es müssen also bei der Verwendung von tkinter keine externen Module installiert werden. Hier wird eine (sehr) kurze Einführung in das Erstellen von grafischen Oberflächen mittels tkinter gegeben. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") win.minsize(300, 50) but = tk.Button(win, text = "Push the button") but.pack() win.mainloop() Ausgabe: [[Datei:PythonIng_gui1.jpg]] Ein etwas komplizierteres Beispiel sei nachfolgend gezeigt. Es sollen zwei Strings miteinander verknüpft und ausgegeben werden. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") def on_button_clicked(): str = ent1.get() + ent2.get() lab2["text"] = str ent1 = tk.Entry(win) ent2 = tk.Entry(win) lab1 = tk.Label(win, text="verknuepfen mit") lab2 = tk.Label(win, text="") but = tk.Button(win, text = "=", command=on_button_clicked) ent1.pack(side="left") lab1.pack(side="left") ent2.pack(side="left") but.pack(side="left") ent2.pack(side="left") lab2.pack(side="left") win.mainloop() Ausgabe (vor der Eingabe der Teilstrings): [[Datei:PythonIng_gui2.jpg]] Ausgabe (nach der Eingabe der Teilstrings und dem Drücken des =-Buttons): [[Datei:PythonIng_gui3.jpg]] == curses == {{Wikipedia | curses}} Mit dem curses-Modul lassen sich u.a. TUIs ('''T'''ext '''U'''ser '''I'''nterfaces) erstellen. Ein sehr einfaches Beispiel zur allgemeinen Funktionsweise wird nachstehend geliefert. import curses stdscr = curses.initscr() curses.start_color() curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE) stdscr.clear() stdscr.addstr("Hallo Welt", curses.color_pair(1)) stdscr.refresh() stdscr.getch() curses.endwin() Als Ausgabe sollte <span style="color:#FF0000;">Hallo Welt</span> (rote Schrift auf weißem Hintergrund) auf dem Terminal/der Konsole erscheinen. Getestet wurde dies mit openSUSE Tumbleweed, Python-Version 3.13.12. Das entsprechende Python-curses-Package muss installiert sein. Allgemeine Informationen zur Terminal-/Konsolengröße und Cursorposition liefert folgendes Programm: import curses stdscr = curses.initscr() stdscr.addstr(3, 5, "LINES: %d" % curses.LINES) stdscr.addstr(4, 5, "COLS: %d" % curses.COLS) (y,x) = stdscr.getyx() stdscr.addstr(5, 5, "Momentane Cursorposition: [%d, %d]" % (y, x)) (y,x) = stdscr.getbegyx() stdscr.addstr(6, 5, "Koordinatenursprung: [%d, %d]" % (y, x)) (y,x) = stdscr.getmaxyx() stdscr.addstr(7, 5, "Fenstergröße: [%d, %d]" % (y, x)) stdscr.addstr(11, 2, "Taste drücken -> Ende") stdscr.refresh() stdscr.getch() curses.endwin() Es sollte sich in etwa folgende Ausgabe ergeben: LINES: 44 COLS: 110 Momentane Cursorposition: [4, 15] Koordinatenursprung: [0, 0] Fenstergröße: [44, 110] Taste drücken -> Ende Zur Funktionsweise von curses siehe auch das Wikibook [[ncurses]]. Zum Verständnis sind dort allerdings elementare Kenntnisse in der Programmiersprache C erforderlich. == Qt == {{Wikipedia | Qt (Bibliothek)}} Auch für das Qt-Framework gibt es eine Anbindung an Python. Nachfolgend ein einfaches Beispiel. import sys from PySide6.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hallo Welt!") label.show() sys.exit(app.exec()) Ausgabe: [[Datei:PythonIng_gui10.png]] == Gtk == {{Wikipedia | GTK (Programmbibliothek)}} Eine idente Ausgabe, wie oben für Qt gezeigt, erzeugt z.B. folgendes Gtk-Programm: import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk def on_activate(app): win = Gtk.ApplicationWindow(application=app) lab = Gtk.Label(label="Hallo Welt!") win.set_child(lab) win.present() app = Gtk.Application() app.connect('activate', on_activate) app.run(None) Auch für die Benutzung von Qt und Gtk müssen die jeweiligen Packages installiert sein. Getestet wurden die entsprechenden Python-Programme nur unter openSUSE Tumbleweed. Wie das GTK-Paket unter MS Windows 11 installiert wird, siehe z.B. [https://www.gtk.org/docs/installations/windows Setting up GTK for Windows]. Damit sei aber das Thema "Benutzeroberflächen erstellen" hier abgeschlossen, da dies schon ein sehr spezielles Aufgabengebiet ist, das eher Informatiker und nicht so sehr Ingenieure anspricht. Bei Bedarf siehe aber ggf. die entsprechenden Links unten in diesem Tutorial. Dort sind weiterführende Informationen zu finden. = Pandas kurz erklärt = Hier wird kurz auf das externe Modul Pandas eingegangen. Pandas steht für '''Pan'''el '''Da'''ta und ist ein Modul für die Datenanalyse und -manipulation. == Series == Vorstellbar ist eine "Series" wie eine einzelne Spalte in einem Tabellenkalkulationsprogramm. Beispiel (Index implizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) # Temperaturwerte print(temp) Ausgabe: 0 8.5 1 11.0 2 12.5 3 10.0 4 13.0 5 11.0 6 14.5 dtype: float64 Das Kürzel <code>pd</code> ist Konvention. Es seien Temperaturwerte gegeben. Die erste Spalte bei der Ausgabe ist der Index. Die zweite Spalte enthält die Werte. Beispiel (separater Zugriff auf den Index und auf die Werte): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) print(temp.index) print(temp.values) Ausgabe: RangeIndex(start=0, stop=7, step=1) [ 8.5 11. 12.5 10. 13. 11. 14.5] Beispiel (Index explizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) print("*** Die gesamte Series ***") print(temp) print("*** Temperatur am Donnerstag ***") print(temp["Do"]) print("*** Tage wärmer als 12 Grad ***") temp_gr_12 = temp[temp > 12] print(temp_gr_12) Ausgabe: *** Die gesamte Series *** Mo 8.5 Di 11.0 Mi 12.5 Do 10.0 Fr 13.0 Sa 11.0 So 14.5 dtype: float64 *** Temperatur am Donnerstag *** 10.0 *** Tage wärmer als 12 Grad *** Mi 12.5 Fr 13.0 So 14.5 dtype: float64 == DataFrame == Ein DataFrame entspricht einer Tabelle. Beispiel (Erzeugen eines DataFrames): import pandas as pd tag = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] v1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=tag) v2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=tag) v3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=tag) tab = pd.concat([v1, v2, v3], axis=1) tab.columns = stadt print(tab) print(type(tab)) Ausgabe: Linz Salzburg Innsbruck Mo 1 8 Hallo Di 2 9 16 Mi 3 10 17 Do 4 11 18 Fr 5 12 19 Sa 6 13 20 So 7 14 21 <class 'pandas.core.frame.DataFrame'> Wir haben hier drei Datenspalten (v1, v2, v3) mit den Spaltennamen "Linz", "Salzburg" und "Innsbruck", sowie sieben Zeilen "Mo" bis "So". Beispiel (Zugriff auf eine Spalte): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab["Salzburg"]) Ausgabe: Mo 8 Di 9 Mi 10 Do 11 Fr 12 Sa 13 So 14 Name: Salzburg, dtype: int64 Beispiel (Zugriff auf eine Zeile): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab.loc["Di"]) Ausgabe: Linz 2 Salzburg 9 Innsbruck 16 Name: Di, dtype: object == Grafiken erstellen == Hier sei nur ein Torten- oder Kreisdiagramm gezeichnet: import pandas as pd import matplotlib.pyplot as plt temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) expl = [0, 0.2, 0, 0, 0, 0, 0] temp.plot.pie(figsize=(5,5), explode=expl) plt.show() Ausgabe: [[Datei:IngPython_pandas1.svg|350px]] Die <code>figsize</code> hat nichts mit der Spaltenanzahl zu tun, sondern setzt die Fenster- oder Diagrammgröße in Inches (Breite * Höhe). Mit Pandas kann man auch noch andere Diagrammarten erstellen, z.B. Linien- oder Balkendiagramme. Dies wird hier aber nicht vorgeführt. == Arbeiten mit CSV- und LibreOffice-Dateien == Gegeben sei eine CSV-Datei test1.csv: Mai;Juni;Juli 12;17;45 15;65;65 16;32;23 4;14;7 23;17;Keine Daten verfügbar 67;Keine Daten verfügbar;45 15;24;12 Lesen von dieser CSV-Datei: import pandas as pd tab = pd.read_csv("test1.csv", sep=";") print(tab) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Schreiben in eine CSV-Datei test2.csv: import pandas as pd val = pd.read_csv("test1.csv", sep=";") val.to_csv("test2.csv", index=False) Ausgabedatei: Mai,Juni,Juli 12,17,45 15,65,65 16,32,23 4,14,7 23,17,Keine Daten verfügbar 67,Keine Daten verfügbar,45 15,24,12 Die Ausgabedatei ist beinahe gleich wie die Eingabedatei. Es werden aber Kommas statt Strichpunkten verwendet. Daher kommt auch der Name CSV ('''C'''omma '''S'''eparated '''V'''alue). Will man wieder Strichpunkte, so kann man dies über den Parameter <code>sep=";"</code> in der <code>to_csv</code>-Funktion machen. Um direkt von einer ODS-Datei (LibreOffice Calc, '''O'''pen '''D'''ocument '''S'''preadsheet) zu lesen muss das Modul odfpy extra installiert sein (per YaST, pip etc.). Gelesen wird dann folgendermaßen: import pandas as pd df = pd.read_excel('test1.ods', engine='odf') print(df) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Die Datei "test1.ods" sei die Datei, aus der das obige "test1.csv" generiert wurde. Schreiben kann man ebenfalls in eine ODS-Datei: import pandas as pd daten = { "Name": ["Hugo", "Richie", "Wilhelmine"], "Alter": [38, 30, 29], "Ort": ["Linz", "Innsbruck", "Salzburg"] } tab = pd.DataFrame(daten) with pd.ExcelWriter("test2.ods", engine="odf") as writer: tab.to_excel(writer, sheet_name="Daten", index=False) Es ergibt sich eine "test2.ods"-Datei (Screenshot): [[Datei:IngPython_pandas2.png|250px]] == Sonstiges == Hier seien stichpunktartig einige weitere Features von Pandas angeführt: * {{W|Pivot-Tabelle|Pivot-Tabellen}} (pivot ... Dreh-, Angelpunkt): Zweck - große Datenmengen schnell zusammenfassen, filtern und analysieren. * NaN ('''n'''ot '''a''' '''n'''umber): In einem Datensatz fehlt ein Wert oder ist nicht definiert. * groupby-Funktion: Daten strukturieren, aggregieren oder Zwischensummen bilden. * {{W|Binning#Datenverarbeitung_und_-analyse|Binning}}: Klassenbildung. * Mehrstufige Indizierung (Hierarchical Indexing oder MultiIndex) * Zeitreihen (Time Series) Für tiefergehende und weiterführende Informationen wird auf das Buch von ''Klein: Numerisches Python; Hanser, 2023'' und [https://pandas.pydata.org/ pandas] verwiesen. = Style Guide, flake8, pylint, Black etc. = == Style Guide == Wie man schönen und richtigen Python-Code schreibt, erfahren Sie in * [https://peps.python.org/pep-0008/ PEP 8 – Style Guide for Python Code] == Formatter und Linter == Ein Modul, das prüft, ob die Richtlinien im Style Guide eingehalten wurden, ist ''flake8'': * [https://flake8.pycqa.org/en/latest/ Flake8: Your Tool For Style Guide Enforcement] Code formatieren kann man auch mit [https://pypi.org/project/black/ Black]. Z.B. übersetzt <code>black test1.py</code> die Datei <code>test1.py</code> import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) in import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Die Programmausgabe ist reformatted test1.py All done! ✨ 🍰 ✨ 1 file reformatted. Der Unterschied zwischen Black und Flake8: * Black ist ein Code-Formatter. Er formatiert Ihren Code um, sodass er im Einklang mit PEP 8 steht. * Flake8 ist ein {{W|Lint (Programmierwerkzeug) | Code-Linter}}. Flake8 verändert Ihren Code nicht, sondern durchsucht ihn nach potenziellen Fehlern etc. Am obigen Beispiel sieht man auch, dass flake8 und Black nicht immer einer Meinung sind. Flake8 (<code>flake8 test1.py</code>) würde standardmäßig den mit Black formatierten Code bemängeln: test1.py:8:80: E501 line too long (80 > 79 characters) Diese Diskrepanz kann beseitigt werden. Da 79 Zeichen auf modernen Bildschirmen meist als zu kurz empfunden werden, ist ein Limit von 88 Zeichen (Black-Standard) oder mehr empfehlenswert. Um dies zu implementieren, erstellen Sie in Ihrem Projektverzeichnis eine <code>.flake8</code>-Datei mit dem Inhalt [flake8] max-line-length = 88 Und schon ignoriert Flake8 dieses Problem. Ein anderer Linter ist pylint. Der würde beim Abarbeiten des obigen Beispiels, z.B. mit <code>pylint test1.py</code> noch eine Kleinigkeit bemängeln: ************* Module test1 /home/hr/tmp/test1.py:1:0: C0114: Missing module docstring (missing-module-docstring) ------------------------------------------------------------------ Your code has been rated at 8.57/10 (previous run: 8.57/10, +0.00) Auch pylint muss vor der ersten Verwendung installiert werden (z.B. mittels pip, virtuelle Umgebung, YaST). Die Dokumentation zu pylint findet sich auf [https://pylint.readthedocs.io/en/latest/]. <u>Aufgabe:</u> Fügen Sie einen "module docstring" in die <code>test1.py</code>-Datei ein und testen Sie erneut mit flake8, Black und pylint. <small>Sehen Sie zum Thema docstrings auch [https://peps.python.org/pep-0257/#what-is-a-docstring PEP 257 – Docstring Conventions].</small> Es gibt noch weitere Formatierungswerkzeuge für Python-Code. Z.B. [https://docs.astral.sh/ruff/ Ruff], ein moderner Code-Formatter und -Linter. Mittels <code>ruff check test1.py</code> würde obiger Code geprüft (Linter). <code>ruff format test1.py</code> formatiert den Code (Formatter). == Type Checker == "Type Checker" sind z.B. * mypy * pyright * ty Diese prüfen die Datentypen, z.B. in folgendem Code def greetings(name: str) -> str: return "Hello, %s" % name print(greetings(42)) Python selbst, flake8, ruff oder black würden diesen Code ohne zu murren akzeptieren. "Type Checker" würden aber sehr wohl Alarm schlagen, z.B. liefert <code>mypy</code> folgende Ausgabe test1.py:5: error: Argument 1 to "greetings" has incompatible type "int"; expected "str" [arg-type] Found 1 error in 1 file (checked 1 source file) Das funktioniert übrigens nicht nur bei Funktionsannotationen, sondern auch mit Variablen etc. from typing import Final # "Konstante", ab Python 3.8 NUMBER: Final = 123 print(NUMBER) NUMBER = 125 print(NUMBER) # Variable a: int = 345 print(a) a = "Irgendwas" print(a) # Variable (Pipe-Symbol), ab Python 3.10 b : int|str = 567 print(b) b = "sonstiges" print(b) Ausgabe mit python: 123 125 345 Irgendwas 567 sonstiges Ausgabe mit mypy: test3.py:6: error: Cannot assign to final name "NUMBER" [misc] test3.py:12: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment] Found 2 errors in 1 file (checked 1 source file) Python kennt übrigens keine Konstanten. Man kann diese mittels Großbuchstaben andeuten. Das ist aber nur Konvention, hat aber keine sonstigen Auswirkungen. Oder man verwendet wie oben gezeigt <code>Final</code>. Dann werfen Typchecker Errors aus. ==pydoc== pydoc ist ein Werkzeug, um Python-Module, -Funktionen und -Klassen zu dokumentieren. Beispiel <code>test1.py</code>: """Rechen-Modul. Funktionen die von pydoc gelesen werden. """ def multiply(a, b): """Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a * b def add(a, b): """Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a + b if __name__ == '__main__': print(multiply(3, 5)) print(add(4, 6)) Ausgabe mit <code>python3.13 -m pydoc test1</code> auf der Konsole: Help on module test1: NAME test1 - Rechen-Modul. DESCRIPTION Funktionen die von pydoc gelesen werden. FUNCTIONS add(a, b) Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl multiply(a, b) Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl FILE /home/xyz/tmp/test1.py Siehe zu diesem Thema z.B. auch [https://docs.python.org/3/library/pydoc.html]. Mittels <code>python3.13 -m pydoc -w test1</code> kann man auch eine HTML-Dokumentation erstellen. Wofür <code>if __name__ == '__main__':</code> steht, siehe z.B. etwas später im Abschnitt [[Ing_Mathematik:_Python#Doctests]]. == Sonstige Tools == Andere Tools für die {{W|Statische Code-Analyse|statische Codeanalyse}}, die aber für Ingenieure weniger interessant sein dürften, sind z.B. * Radon: Liefert verschiedene {{W|Softwaremetrik|Codemetriken}} (Komplexität, Wartbarkeitsindex ...) * Bandit: Findet Sicherheitslücken Tools für die {{W|Dynamisches Software-Testverfahren|dynamische Codeanalyse}}, z.B.: * DynaPyt (Framework zur dynamischen Programmanalyse) * cProfile (Profiler) * Memory Profiler (Speicheranalyse) * Memray (Speicheranalyse) * tracemalloc (Speicheranalyse) Paket- und Projektmanagement (pip-Ersatz etc.): * uv * Poetry * Conda * pipx Packaging-Tools (Freezer) und {{W|Compiler#Sonderformen|Transpiler}} : * pyinstaller ** erstellt eigenständige, ausführbare Binärdatei ** kein Cross-Compiler ** kein Schutz vor Reverse-Engineering ** langsam ** packt alles in eine Datei ** sehr große Datei ** Befehl, z.B.: <code>pyinstaller --onefile test1.py</code> ** GUI: <code>auto-py-to-exe</code> * cx_Freeze * nuitka ** Übersetzt Python-Code in C/C++-Code und weiter in eine ausführbare Datei ** kein Cross-Compiler ** Schutz vor Reverse-Engineering ** Befehl, z.B.: <code>nuitka --standalone --onefile test1.py</code> * cython = Einige Integrierte Entwicklungsumgebungen (IDEs)= Werden Programmtexte größer und umfangreicher, so ist das Arbeiten mit der interaktiven Programmierumgebung bzw. das direkte Ausführen von Python-Skripten mühsam. Man wünscht sich z.B. Hilfen zum Debuggen oder die automatische Code-Vervollständigung. Zu diesem Zweck wurden IDEs (Integrated Development Environments) geschaffen. Von diesen seinen nachfolgend auszugsweise einige kurz beschrieben. Testen Sie einfach aus, welche davon für Sie bzw. für Ihr Python-Projekt geeignet sind. == IDLE == IDLE ist die mit dem Python-Programmpaket mitgelieferte IDE. Der Name leitet sich einerseits ab vom Monty-Python-Mitglied Eric Idle, andererseits steht es als Abkürzung für "'''I'''ntegrated '''D'''evelopment and '''L'''earning '''E'''nvironment. IDLE ist einfach zu bedienen, bietet aber schon einen beachtlichen Leistungsumfang. Nachfolgend wird ein Screenshot zu IDLE geliefert. Rechts ist das Editor-Fenster zu sehen, links die interaktive Programmierumgebung. Um das Beispiel selbst nachvollziehen zu können, starten Sie IDLE. Das geht ähnlich, wie Sie die interaktive Programmierumgebung von Python starten (nur, dass Sie eben das IDLE-Icon doppelklicken und nicht das Python-Icon. Unter Linux geben Sie einfach in einem Terminal <code>idle3.13</code> o. Ä. ein). Weiter geht es mit "File - Open - ...". Die auszuführende Datei auswählen (im konkreten Fall ein "Hallo-Welt"-Programm). Es erscheint das rechte Fenster. Dort "Run - Run Module" auswählen. Und schon wird im linken Fenster "Hallo Welt!" ausgegeben. [[Datei:PythonIng_idle1.jpg | 600px]] Siehe auch {{W|IDLE}}. == PyCharm == PyCharm ist ein kommerzielles Produkt. Es gab aber auch eine kostenlose Community Edition. Seit 2025 sind beide Varianten vereint. Für die ersten 30 Tage sind die Pro-Funktionen frei verfügbar, danach nur noch die Kernfunktionalitäten (oder man bezieht kostenpflichtig die Pro-Version). Zu beziehen ist PyCharm unter dem Weblink [https://www.jetbrains.com/pycharm/]. Nachfolgend ein etwas abgewandeltes "Hallo Welt"-Programm, editiert und ausgeführt mit PyCharm. [[Datei:PyCharm_IDE_2023_screenshot.png | 600px]] Siehe auch {{W|PyCharm}}. == Eric == Auch eric ist Open Source und steht unter der GNU General Public License Version 3 oder später. Zu beziehen ist diese Software unter [https://eric-ide.python-projects.org/]. [[Datei:Screenshot_Eric_4.png | 600px]] Siehe auch {{W|eric (Software)}}. <small> Unter openSUSE Tumbleweed sollte sich eric auch mit YaST installieren lassen. Bei mir gibt es aber dann beim Ausführen des eric-Programms eine Fehlermeldung (Stand März 2026): ... ModuleNotFoundError: No module named 'PyQt6.QtPdfWidgets' Umgehen kann man dieses Problem aber wieder mit dem Erstellen einer virtuellen Umgebung, in etwa so python3.13 -m venv ~/tmp/venv1 cd ~/tmp/venv1/bin ./python3.13 -m pip install --upgrade --prefer-binary eric-ide ./eric7_ide </small> == PyScripter == Vom Funktionsumfang vergleichbar mit den vorherigen IDEs ist PyScripter. Auch PyScripter ist Open Source. Die Projekt-Homepage findet sich auf [https://sourceforge.net/projects/pyscripter/]. PyScripter ist nur für MS Windows verfügbar. [[Datei:PythonIng_pyscripter1.jpg | 600px]] == Spyder IDE == Spyder enthält bereits eine stabile Python-Version und etliche Module (z.B. matplotlib, numpy, control). Ansonsten kann dieses Softwarepaket vom Funktionsumfang her mit den anderen genannten IDEs locker mithalten. Spyder wurde unter der MIT-Lizenz veröffentlicht. Diese Software findet sich auf [https://www.spyder-ide.org]. [[Datei:Spyder-windows-screenshot.png | 600px]] Siehe auch {{W|Spyder (Software)}} == Eclipse IDE== Die {{W|Eclipse_(IDE)|Eclipse-IDE}} kann für Python aufgerüstet werden. Dazu gibt es das PyDev-Plugin. Installiert wird es über * Help > Eclipse Marketplace... * Find - PyDev - Install Danach muss noch der Pfad zum Python-Interpreter festgelegt werden * Window > Preferences > PyDev > Interpreters > Python Interpreter > New ... Das Ergebnis ist ähnlich wie im folgenden Bild, nur dass statt C/C++ Python Verwendung findet. [[Datei:Setting Up Eclipse CDT helloout.png | 600px]] == Sonstige == Die genannten IDEs sind nicht die Einzigen. Es gibt, um dem Image Pythons als beliebteste Programmiersprache gerecht zu werden, noch einige andere. Sowohl Open Source-Programme als auch kommerzielle Programme sind im Web zu finden, z.B. Thonny oder {{W|Visual Studio Code}}. Unter Linux kann man auch {{W|KDevelop}}, ausgestattet mit dem Python3-Plugin, einsetzen. Braucht man den Umfang von ausgewachsenen IDEs nicht, so kann man auch normale Texteditoren verwenden (z.B. {{W|Geany}} oder {{W|Kate_(Texteditor)|Kate}}). = Debuggen und Testen = Das Debuggen und Testen von Programmen sind wichtige Bestandteile der Programmierung. Syntaxfehler lassen sich i.A. leicht beheben. Schwieriger ist das Eingrenzen von logischen Fehlern, die ev. nur in bestimmten Situationen auftreten und keine explizite Fehlermeldung hervorrufen. Das Programm liefert falsche Ergebnisse oder es stürzt aus heiterem Himmel ab. Um das zu verhindern gibt es verschiedene Werkzeuge, die bei der Fehlersuche behilflich sein können. Vorerst siehe aber zwecks Begriffsklärung noch folgende Links: * {{W|Debuggen}} * {{W|Debugger}} * {{W|Softwaretest}} <gallery> First Computer Bug, 1947.jpg Test ganzheitlich.png V-Modell.svg </gallery> == Das Modul pdb == Python bringt schon ein Modul zum Debuggen mit. Siehe z.B. [https://docs.python.org/3/library/pdb.html pdb — The Python Debugger]. Komfortabler lässt sich das aber mittels Integrierter Entwicklungsumgebungen (IDEs) angehen. == Debuggen mit IDEs == Für die IDEs IDLE und Spyder sei kurz auf die entsprechenden Webseiten verwiesen: * [https://www.cs.uky.edu/~keen/help/debug-tutorial/debug.html Debugging under IDLE]. * [https://docs.spyder-ide.org/current/panes/debugging.html Spyder Debugger] Dort wird die Vorgehensweise auch mittels Screenshots erläutert. == assert == assert ... behaupten, zusichern ({{W|Assertion (Informatik)}}) Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10., 0.) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10., 0.) File "/home/hr/Develop/test1.py", line 4, in print1 assert y != 0.0 ^^^^^^^^ AssertionError Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1("10.", "5.") File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Aber auch bei nachfolgendem Code gibt es eine Fehlermeldung: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10, 5) File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Damit letzteres funktioniert, kann man den Programmcode so umschreiben: def print1(x, y): assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 2.0 Und jetzt fangen wir den <code>AssertionError</code> auf: def print1(x, y): try: assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) except(AssertionError): print("Hallo") print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Hallo Ich hoffe, es ist wenigstens im Ansatz klar geworden, wofür <code>assert</code> gut sein kann. Ausschalten kann man die <code>assert</code>-Überprüfung übrigens mit dem Python-Schalter <code>-O</code>. == Doctests == Innerhalb eines Docstrings kann die Arbeit im interaktiven Modus simuliert werden. Nach den Promptzeichen (>>>) erfolgen dann bei unserem Beispiel innerhalb des Docstrings simulierte Aufrufe der Funktion <code>print1()</code>. Danach folgen jeweils die Sollresultate. Wird das Modul oder die Datei als Hauptprogramm aufgerufen, so wird die Funktion <code>doctest.testmode()</code> aufgerufen und ein Bericht auf der Konsole ausgegeben. Wird das Modul nicht als Hauptprogramm aufgerufen, sondern importiert, dann wird diese <code>testmod</code>-Funktion nicht aufgerufen. D.h. dieser Code kann sowohl für Testzwecke als auch für den produktiven Einsatz verwendet werden. Das ist auch sinnvoll, weil wenn man Teile der Datei immer löschen bzw. einfügen müsste, so würden sich Fehlerquellen auftun. Das würde den Sinn und Zweck von Doctests konterkarieren. def print1(x=0., y=1.): """ Dividiere zwei Zahlen Autor: Intruder Datum: 12.08.2025 >>> print1(2., 1.) 2.0 >>> print1(5., 2.) 2.5 >>> print1(5.) 5.0 """ print(x/y) if __name__ == "__main__": import doctest doctest.testmod(verbose=True) Ausgabe: Trying: print1(2., 1.) Expecting: 2.0 ok Trying: print1(5., 2) Expecting: 2.5 ok Trying: print1(5.) Expecting: 5.0 ok 1 items had no tests: __main__ 1 items passed all tests: 3 tests in __main__.print1 3 tests in 2 items. 3 passed and 0 failed. Test passed. Das gezeigte Beispiel ist so ziemlich das einfachste, das es gibt. Für weiterführende Details siehe z.B.: * [https://peps.python.org/pep-0257/ PEP 257 – Docstring Conventions] * [https://docs.python.org/3/library/doctest.html doctest — Test interactive Python examples] ''Einschub:'' Ganz ähnlich kann man auch Klassen testen, z.B. in folgendem Code-Fragment class Fahrzeug: # siehe Abschnitt "Objektorientierte Programmierung" # ... if __name__ == "__main__": vauweh = Fahrzeug(170, 90) beemweh = Fahrzeug(200, 120) print(vauweh.convertGeschw()) print(beemweh.convertGeschw()) Wird das Script als Hauptprogramm ausgeführt (z.B. zu Testzwecken), so erfolgt die Ausgabe der zwei, via <code>convertGeschw()</code>, umgerechneten Geschwindigkeiten. Wird es aber als Modul eingebunden, so wird der letzte Programmabschnitt nicht ausgeführt (<code>__name__ == "__main__"</code> ergibt <code>False</code>). == pytest == Siehe zu diesem Thema auch {{W|Modultest}}. pytest ist ein externes Modul und muss vorab installiert werden, z.B. mittels pip install -U pytest pip install -U pytest-html Python-Code, Datei test1.py: def add(x, y): return x + y def test_answer(): assert add(1, 1) == 3 Starten von pytest in der Konsole: pytest test1.py Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py F [100%] ========================================================= FAILURES ========================================================== ________________________________________________________ test_answer ________________________________________________________ def test_answer(): > assert add(1, 1) == 3 E assert 2 == 3 E + where 2 = add(1, 1) test1.py:6: AssertionError ================================================== short test summary info ================================================== FAILED test1.py::test_answer - assert 2 == 3 ===================================================== 1 failed in 0.09s ===================================================== Hier erhalten wir einen Fehler, da 1+1 eindeutig ungleich 3 ist. Aber aus irgendeinem Grund wollte der Programmierer oder Tester in diesem Fall, dass dies so ist. Testfälle werden übrigens mit dem Präfix <code>test_</code> eingeleitet. Python-Code: def add(x, y): return x + y + 1 def test_answer(): assert add(1, 1) == 3 Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py . [100%] ===================================================== 1 passed in 0.01s ===================================================== Jetzt ist alles in Ordnung. Weiterführendes siehe z.B. * [https://docs.pytest.org/en/stable/ pytest: helps you write better programs] == unittest == Auch unittest dient zur Durchführung von Testreihen, ist aber Bestandteil von Python. Hier wird vorerst nicht näher darauf eingegangen. Siehe z.B. * [https://docs.python.org/3/library/unittest.html unittest — Unit testing framework] Lt. ''Inden: Python Challenge; dpunkt, 2021, Seite 481'' soll unittest weniger komfortabel als pytest sein. Einen Vergleich von unittest mit pytest findet man in * [https://knapsackpro.com/testing_frameworks/difference_between/pytest/vs/unittest pytest vs unittest] = Python und Anwendungsprogramme = Bisher stand immer alleine die Programmiersprache Python (ev. unter Einbeziehung von Modulen) im Mittelpunkt der Betrachtungen. Aber Python kann auch als Makrosprache für Anwendungsprogramme auftreten. Als Beispiele seien {{W|FreeCAD}} und {{W|LibreOffice}} genannt. == FreeCAD == FreeCAD ist ein freies 3D-CAD-Programm. Hier soll nicht auf die Bedienung dieses CAD-Pakets eingegangen werden, sondern nur auf die Möglichkeit, mittels Python Makros zu schreiben. Als einfacher Einstieg soll ein Makro erstellt werden, welches eine Kugel (rot) und einen Quader (blau) zeichnet. Folgende Vorbereitungsschritte sind erforderlich (es sei vorausgesetzt, dass FreeCAD schon am Rechner installiert ist. Downloaden können Sie das Programm von der Website [https://www.freecad.org/downloads.php?lang=en]): * FreeCAD starten * Leere Datei erstellen * Makro > Makros > Erstellen ... Es öffnet sich ein leeres Editorfenster, in das Sie folgenden Code eingeben können: import FreeCAD import Part doc = FreeCAD.newDocument() # Kugel kugel = Part.makeSphere(10) form_element = doc.addObject("Part::Feature", "Kugel") form_element.Shape = kugel kug = FreeCAD.ActiveDocument.getObject("Kugel") kug.ViewObject.ShapeColor = (1.0, 0.0, 0.0) neuePosition = App.Vector(5, 2.5, 2.5) kug.Placement = App.Placement(neuePosition, kug.Placement.Rotation) # Quader quader = Part.makeBox(5, 5, 50) form_element = doc.addObject("Part::Feature", "Quader") form_element.Shape = quader quad = FreeCAD.ActiveDocument.getObject("Quader") quad.ViewObject.ShapeColor = (0.0, 0.0, 1.0) doc.recompute() Diesen Code können Sie nun ausführen: * Makro > Makro ausführen Es ergibt sich folgende Ausgabe (gedreht und gezoomt): [[Datei: PythonIng_freecad1.png|500px]] Siehe auch [https://wiki.freecad.org/Python_scripting_tutorial/de# Anleitung Skripterstellung mit Python]. Getestet wurde obiges Beispiel mit FreeCAD 1.1.3 unter Linux und 1.1.1 unter MS Windows. == LibreOffice == LibreOffice ist ein freies Officepaket ([https://de.libreoffice.org/]). Hier soll nur das Tabellenkalkulationsprogramm Calc kurz betrachtet werden. Es seinen in den ersten 3 Zellen (A1 bis A3) Zahlen gegeben. Diese sollen mit einem Python-Makro addiert und das Resultat in der Zelle A5 ausgegeben werden. Auch hier sind Vorbereitungsarbeiten nötig: * zuerst muss unter Linux das Verzeichnis <code>~/.config/libreoffice/4/user/Scripts/python</code> erstellt werden * für MS Windows ist es das Verzeichnis <code>%APPDATA%\LibreOffice\4\user\Scripts\python</code> ** drücken Sie zuerst Win + R (es öffnet sich das Ausführen-Fenster) ** geben Sie <code>%appdata%</code> ein, danach drücken Sie Enter (es öffnet sich der Explorer) ** navigieren Sie zu dem genannten Verzeichnis bzw. erstellen Sie das Verzeichnis * in diesem Verzeichnis wird dann mit einem beliebigen Texteditor das Python-Makro erstellt, in unserem Fall die Datei <code>summiere_zellen.py</code>: import uno def summiere_zellen(*args): # Zugriff auf das aktuelle Dokument und das aktive Tabellenblatt ctx = uno.getComponentContext() smgr = ctx.getServiceManager() desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) doc = desktop.getCurrentComponent() sheet = doc.getCurrentController().getActiveSheet() # Werte aus den Zellen A1 bis A3 auslesen w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value # Addition der drei Werte summe = w1 + w2 + w3 # Ergebnis in die Zelle A5 schreiben sheet.getCellRangeByName("A5").Value = summe * siehe dazu ggf. auch [https://help.libreoffice.org/latest/de/text/sbasic/python/python_locations.html?DbPAR=BASIC]. Weiter geht es in LibreOffice Calc mit dem Menü ''Extras > Makros > Makros verwalten > Python''. Dort wird das Makro <code>summiere_zellen</code> ausgeführt. Es ergibt sich z.B. folgendes Resultat [[Datei:PythonIng_libreoffice1.png]] Das Kürzel <code>uno</code> steht für '''U'''niversal '''N'''etwork '''O'''bjects. Etwas einfacher geht's auch so: def summiere_zellen(): desktop = XSCRIPTCONTEXT.getDesktop() model = desktop.getCurrentComponent() sheets = model.getSheets() sheet = sheets.getByIndex(0) w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value cell = sheet.getCellRangeByName("A5") cell.setValue(w1 + w2 + w3) Empfohlen wird auch, das Erweiterungspaket APSO ('''A'''lternative '''P'''ython '''S'''cript '''O'''rganizer, apso.oxt) zu installieren. Die Vorgehensweise wird hier nicht gezeigt, sondern nur darauf hingewiesen, dass man das einfach "googeln" kann. Siehe zur Python-Programmierung für LibreOffice auch [https://wiki.documentfoundation.org/Macros/Python_Guide/de Makros/Python-Handbuch]. Getestet wurden obige Beispiele mit LibreOffice 26.2.5.1 unter Linux und 26.2.1.2 unter MS Windows. = Ausblick = Dies war eine kurze Einführung in die Berechnungs- und Darstellungsmöglichkeiten mit Python. Es sollten etliche relevante Themen behandelt, oder zumindest kurz angesprochen worden sein. Wem dieser Text nicht ausreichend ist, der sei auf die entsprechenden weiterführenden Weblinks, Bücher und die Python-Hilfefunktion verwiesen. Python kennt noch viel mehr Befehle, als hier dargestellt wurden. Das Themenspektrum ist auch durch die Einbindung externer Module fast beliebig erweiterbar. = Weblinks= == Python allgemein == * [https://www.python.org/ Python Homepage] == Externe mathematische Module == * [https://numpy.org/ NumPy] * [https://numpy.org/doc/stable/user/numpy-for-matlab-users.html NumPy for MATLAB users] * [https://scipy.org/ SciPy] * [https://www.sympy.org/en/index.html SymPy] * [https://pandas.pydata.org/ pandas] * [https://github.com/maroba/findiff findiff] * [https://mpmath.org/ mpmath] == Externe Module für Grafiken == * [https://matplotlib.org/ Matplotlib] * [https://vpython.org/ VPython] * [https://docs.vtk.org/en/latest/api/python.html VTK] == Erstellung von User Interfaces == * [https://docs.python.org/3/library/tkinter.html tkinter - Python interface to Tcl/Tk] * [https://docs.python.org/3/library/curses.html curses - Terminal handling for character-cell displays] * [https://wiki.qt.io/Qt_for_Python Qt for Python] * [https://www.gtk.org/docs/language-bindings/python GTK and Python] == Erstellen virtueller Umgebungen == * [https://docs.python.org/3/library/venv.html venv - Creation of virtual environments] == Sonstige == * [https://python-control.readthedocs.io/en/stable/ Python Control Systems Library] * [https://pypi.org/project/regex/ regex - Regular Expressions] * [http://pyromat.org/ PYroMat] * [https://coolprop.org/coolprop/wrappers/Python/index.html CoolProp] * [https://pypi.org/project/iapws/ iapws] * [https://tespy.readthedocs.io/en/main/getting_started/introduction.html TESPy - Thermal Engineering Systems in Python] = Bücher = == Gedruckte Bücher, OpenBooks, Magazine == * Diverse: c't Python Lernen, Verstehen, Anwenden; Heise, 2022 * Ernesti, Kaiser: Python3 - das umfassende Handbuch; 5. Aufl., Rheinwerk, [https://openbook.rheinwerk-verlag.de/python/ OpenBook] * Inden: Python Challenge; dpunkt, 2021, ISBN 978-3-86490-809-5 * Klein: Numerisches Python; 2. Aufl., Hanser, 2023, ISBN 978-3-446-47170-2 * Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler; Rheinwerk, 2021, ISBN 978-3-8362-7316-9 * Weigend: Python 3 - Das umfassende Praxisbuch; 9. Aufl., mitp, 2022, ISBN 978-3-7475-0544-1 * Woyand: Python für Ingenieure und Naturwissenschaftler; 4. Aufl., Hanser, 2021, ISBN 978-3-446-46483-4 == Andere Wikibooks == * [[:en:Subject:Python_programming_language | Englische Wikibooks zum Thema Python]] * [[Python|Deutschsprachiges Python-Wikibook]] [[Bild:2von10.png|20%]] * [[Python unter Linux|Python 2.7 unter Linux]] [[Bild:10von10.png|100%]] {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} gk3q9ayaeurp58obt8t3uphmjncw1ow 1090752 1090751 2026-09-13T11:51:16Z Intruder 1513 /* Externe Module für Grafiken */ build123d hinzu 1090752 wikitext text/x-wiki {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} = Hallo Welt und allgemeine Hinweise = == Was ist Python == * Python ist eine universelle höhere Programmiersprache. * Python ist objektorientiert. * Python ist Open-Source (Python Software Foundation License). * Python ist für viele Betriebssysteme erhältlich (z.B. für Linux, MS Windows, macOS). * Python ist ein Interpreter. * Python ist durch Module fast beliebig erweiterbar. * Python als Programmiersprache ist case-sensitive - d.h. Groß- und Kleinschreibung ist relevant bei der Eingabe von Befehlen. * Python ist in etlichen Anwendungsprogrammen (z.B. {{W|FreeCAD}}, {{W|LibreOffice}}, {{W|GIMP}}, {{W|Blender (Software) | Blender}}) als Makrosprache verwendbar. {{Wikipedia | Python (Programmiersprache)}} == Python installieren == === MS Windows === Laden Sie das aktuelle Python-Paket von der Webseite [https://www.python.org/] herunter. Weiter geht es wie bei jedem anderen größeren zu installierenden Programm. Einfach das Installationsprogramm im Explorer doppelklicken und den Anweisungen des Setup-Programmes folgen. === Linux === Entweder ist Python bereits standardmäßig installiert, ansonsten ist die Installation mittels Paketmanagementsystem einfach möglich. Aber auch die Spyder-Entwicklungsumgebung ([https://www.spyder-ide.org]) bietet einen guten Einstieg mit Python (das gilt auch für MS Windows). Spyder bringt auch schon etliche wichtige Module standardmäßig mit. == Python starten == === MS Windows === Das Icon für das Python-Programm doppelklicken. Und schon startet das Programm. [[Datei:PythonIng_start1.jpg]] Python im interaktiven Modus präsentiert sich dann so: Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> Alternativ kann das Programm auch über die Eingabeaufforderung oder die PowerShell gestartet werden: c:\devel\Python>python.exe Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> === Linux === Tippen Sie einfach das Wort „python“ (oder unter openSUSE Tumbleweed z.B. auch „python3.11“ oder „python3.13“) in einem Linux-Terminal ein, schließen den Befehl mit der RETURN-Taste ab, und schon startet Python im interaktiven Modus: Python 3.13.12 (main, Feb 09 2026, 22:37:44) [GCC] on linux Type "help", "copyright", "credits" or "license" for more information. >>> Es gibt auch noch andere Möglichkeiten Python zwecks Programmausführung zu starten, z.&nbsp;B. den {{W|Shebang}} (<code>#!</code>) am Beginn eines Python-Scripts. Das Script sei als Script.py gespeichert. Dann kann das Script mit ./Script.py ausgeführt werden. Für openSUSE Tumbleweed sei nachfolgend ein lauffähiges "Hallo Welt!"-Script angegeben. Es wird in diesem Script der Python-Interpreter in der Version 3.13 verwendet : #!/usr/bin/python3.13 print("Hallo Welt!") Die Berechtigungen zum Ausführen der Datei müssen natürlich noch richtig gesetzt werden, z.B. mittels <code>chmod 777 Script.py</code>. <small><code>chmod</code> ist die Abkürzung für"'''ch'''ange file '''mod'''e bits".</small> <small>Die "Maske" <code>777</code> ist nur für Testzwecke sinnvoll, weil sie leicht zu merken ist und für alle Benutzer alle Zugriffsberechtigungen ('''r'''ead/'''w'''rite/e'''x'''ecute für owner/group/others) setzt. Im richtigen Einsatz wird man das aus Sicherheitsgründen nicht so handhaben, sondern nur die Berechtigungen setzen, die unbedingt erforderlich sind. Welche Zugriffsberechtigungen gesetzt sind, kann man z.B. mit dem Befehl <code>ls -l</code> oder <code>ll</code> ('''l'''i'''s'''t directory contents) erfragen. Aber dazu im Moment genug. Erfahrene Linux-Nutzer kennen das ohnehin und Anfänger sollen jetzt nicht mit Linux-Interna überfordert werden. Bei Bedarf siehe die Linux-Man-Pages oder dezidierte Bücher zu Linux.</code></small> <small>Oder das Script wird in einen Pfad verschoben, in dem sich ausführbare Programme generell befinden (welche Verzeichnisse im PATH liegen, kann bspw. mit <code>echo $PATH</code> abgefragt werden). Das Script kann dann wie ein normales Programm ohne weitere Angaben mit Script.py gestartet werden. Alternativ wird nicht das Script an sich verschoben, sondern nur ein symbolischer Link angelegt, z.B. mit <code>ln -s ~/tmp/Script.py ~/.local/bin/Script.py</code>. <code>~/.local/bin</code> sei ein im PATH gelegenes Verzeichnis. Dies sind aber schon Features für fortgeschrittene Linux-Benutzer und werden am Anfang eher selten benötigt.</small> == Ein paar Worte zur Erklärung == === Tests === Getestet wurden die Beispiele unter den Betriebssystemen * MS Windows 10 mit der Python-Version 3.12.0 (teilweise auch mit 3.12.2 und 3.13.1; nur die Inhalte die bis spätestens Juli 2025 erstellt wurden) * MS Windows 11 ab der Python-Version 3.13.4 (nur zum Teil; ab Juli 2025) * openSUSE Leap 15.6 mit der Python-Version 3.11.12 (Spyder, nur vereinzelt) und zum Teil mit 3.12.11 (ab Juli 2025 bis November 2025). * openSUSE Tumbleweed ab der Python-Version 3.13.9 (nur vereinzelt, ab November 2025) === Popularität === * An Beliebtheit rangiert Python mit Stand September 2026 mit einem Rating von 17,76% an 1. Stelle vor C und C++ (lt. [https://www.tiobe.com/tiobe-index/ TPCI - TIOBE Programming Community Index]). * Lt. [https://innovationgraph.github.com/global-metrics/programming-languages GitHub Top 50 Programming Languages Globally] lag Python im Q1/2026 auf Rang 2, vor TypeScript und hinter JavaScript. * [https://pypl.github.io/PYPL.html PYPL] (Popularity of Programming Language Index) ist ein anderer Popularitätsindex für Programmiersprachen. Auch hier liegt Python mit großem Vorsprung auf dem ersten Platz (52,08%), gefolgt von Java (13,34%) und C/C++ (7,99%) (Stand September 2026). === Namensgebung === Der Name "Python" rührt von der Komikertruppe {{W|Monty Python}} her. Die Icons für Python (z.B. Python selbst, Eric IDE, IDLE) sind aber durch die Python-Schlangenart symbolisiert. <gallery> Python-logo-notext.svg|Python-Logo Guido van Rossum in PyConUS24.jpg|{{W|Guido van Rossum}} (geb. 1956), der Erfinder von Python </gallery> == Ein erstes Programm == Kommentare werden in Python mit der Raute (#) eingeleitet. Sie werden vom Python-Interpreter ignoriert. Text kann mit der print-Funktion ausgegeben werden. Starten Sie Python und geben sie folgende Anweisungen zeilenweise ein >>> # Das ist ein Kommentar >>> print("Hallo Welt!") Als Ergebnis erhalten Sie Hallo Welt! Der Prompt (>>>) ist selbstverständlich nicht einzutippen, sondern wird vom Python-System geliefert. Strings können in Python entweder in Anführungszeichen (") gesetzt werden oder in Hochkommatas('). In diesem Text wird die erste Variante bevorzugt eingesetzt. Im Gegensatz zu Julia ist es hier egal, ob zwischen <code>print</code> und der öffnenden Klammer Leerzeichen stehen. = Python als Taschenrechner = == Allgemeines == Wir wollen 3 * 5 berechnen. Dazu starten wir Python im interaktiven Modus. Geben Sie dann die Formel >>> 3 * 5 ein, drücken die Taste ENTER/RETURN ({{Taste|↵}}) und erhalten als Ergebnis 15 Auch kompliziertere Ausdrücke sind möglich. Beispielsweise mit Winkelfunktionen, Quadratwurzeln etc. Wir wollen nun den Ausdruck <math>\sin\sqrt{15}</math> berechnen : >>> import math >>> math.sin(math.sqrt(15)) -0.6679052983383519 Als erstes wird das math-Modul importiert. Dann wird der mathematische Ausdruck berechnet. Eine andere Variante, die dasselbe Ergebnis liefert, ist >>> from math import * >>> sin(sqrt(15)) -0.6679052983383519 Es wird also aus dem Modul <code>math</code> alles importiert (erkennbar am <code>*</code>). Will man nicht alles importieren, so kann man das auch einschränken: >>> from math import sin, sqrt Beenden lässt sich das Python-Programm durch Eingabe von <code>exit()</code> (und natürlich ist zur Bestätigung die RETURN-Taste zu drücken). == Die Hilfefunktion von Python == Bei Eingabe der Anweisung <code>help</code> oder <code>help()</code> springt Python in den Hilfemodus. Eingabe: >>> help() Eingabe: help> math.sin Ausgabe: Help on built-in function sin in math: math.sin = sin(x, /) Return the sine of x (measured in radians). Für die komplette Python-Dokumentation siehe [https://docs.python.org/3/]. Verlassen kann man den Hilfemodus durch das Drücken von STRG-C, bzw. der Eingabe von q, quit oder exit mit anschließendem Drücken der RETURN-Taste. == Aufgaben == * Erkunden Sie die Tangensfunktion "tan" mittels Python-Hilfe (vergessen Sie nicht das math-Modul zu importieren und das <code>math.</code> vor <code>tan</code>) * Berechnen Sie mit Python den Ausdruck <math>\frac{1}{2}\cdot \text{e}^2 \cdot \tan(\pi/3)</math>. Siehe für die Exponentialfunktion im Python-Hilfesystem auch den Befehl <code>math.exp</code>. Alternativ kann auch die Konstante <code>math.e</code> eingesetzt werden. Potenzieren kann man bei Python mit dem **-Operator (z.B. 2**3 = 8). Für <math>\pi</math> gibt es <code>math.pi</code>. = Python als Scriptsprache = Häufig wird man aber kompliziertere Anweisungsfolgen verarbeiten müssen. Diese will man normalerweise nicht jedesmal neu eingeben, sondern in einer Datei speichern und diese Datei dann zur Ausführung bringen. Speichern Sie dazu folgenden Code in einer Textdatei, z.B. unter MS Windows als c:\tmp\test1.py # Das ist ein Kommentar print("Hallo Welt!") Python-Dateien werden mit der Dateiendung .py versehen. Achten Sie darauf, dass vor dem print keine Leerzeichen vorhanden sind. Das ist eine Python-Eigenheit. Wie wir später sehen werden, nutzt Python Einrückungen als syntaktisches Mittel, z.B. um bei Schleifen den Schleifenkörper zu kennzeichnen. Danach bringen Sie die Skriptdatei test1.py (sozusagen das Hauptprogramm) folgendermaßen zur Ausführung: 1) Starten Sie unter MS Windows die Eingabeaufforderung (oder alternativ auch die Windows PowerShell). Das sieht dann etwa so aus: Microsoft Windows [Version 10.0.19045.3693] (c) Microsoft Corporation. Alle Rechte vorbehalten. C:\Users\xyz> : <small>Falls jemand nicht weiß, wie man die Eingabeaufforderung startet: Eine Möglichkeit ist, einfach in der Taskleiste von Windows das "Start"-Symbol &nbsp;([[Image:Windows_logo_-_2021_(Black).svg|10px]])&nbsp; mit der rechten Maustaste anklicken. "Ausführen" auswählen (oder alternativ für die PowerShell unter Windows 10 den Eintrag "Windows PowerShell", unter Windows 11 den Eintrag "Terminal"). Im sich öffnenden Dialogfenster gibt man in die "Öffnen"-Zeile das Wort <code>cmd</code> ein und mit "OK" wird das Ganze bestätigt.</small> 2) Wechseln Sie mittels <code>cd c:\tmp</code> in das Verzeichnis c:\tmp 3) Angenommen, Sie haben Python unter dem Pfad <code>c:\devel\Python\</code> installiert. Starten Sie das Programm so (der Prompt <code>c:\tmp></code>ist natürlich nicht mit einzutippen): c:\tmp>c:\devel\Python\python.exe test1.py 4) Wie erwartet ergibt sich folgende Ausgabe am Bildschirm Hallo Welt! Die Vorgehensweise unter Linux ist prinzipiell gleich. Die kleinen Unterschiede, wie z.B. der Slash statt dem Backslash in Pfadangaben, sollten für Linux-Benutzer keine Hürde darstellen. == Variablen == Variablenbezeichner können aus Buchstaben (A-Za-z), Ziffern (0-9) und Underscores (_) bestehen, dürfen aber nicht mit einer Zahl beginnen. Führende Underscores haben u.a. im Kontext mit der Objektorientierten Programmierung eine spezielle Bedeutung und sollten nicht für "normale" Variablenbezeichner verwendet werden. Gültige Variablenbezeichner wären also: xyz x1 _wert name_anzahl Theoretisch kann man auch Umlaute, griechische Buchstaben u.ä. in Variablenbezeichnern nutzen, z.B. ößÜ = 16 α = 134 print(ößÜ) print(α) Ausgabe: 16 134 Davon wird aber aus offensichtlichen Gründen ({{W|Englisch als Lingua franca}}) abgeraten. Das Eurozeichen (€) etc. darf man ohnehin nicht in Variablenbezeichnern verwenden, dies ergäbe einen Syntaxfehler. Siehe dazu auch [https://peps.python.org/pep-3131/]. Es gibt in Python etliche Schlüsselwörter (z.B. for, if oder return). Diese dürfen nicht als eigene Variablenbezeichner verwendet werden. Eine Liste aller Schlüsselwörter liefert das Script import keyword print(keyword.kwlist) <small>Übung: Speichern Sie dieses Script in eine Datei, z.B. in c:\tmp\test1.py. Führen Sie diese Datei aus, um die Liste der Schlüsselwörter auszugeben.</small> Da Python case-sensitiv ist, repräsentieren folgende Bezeichner verschiedene Variablen: xyz XYZ xYz Werte werden an Variablen mittels Gleich-Zeichen (=) zugewiesen. Im Folgenden wird der Code immer in der Datei c:\tmp\test1.py gespeichert. x = 5 y = 10 z = x*y print(z) Bringen Sie die Datei test1.py zur Ausführung, so erhalten Sie folgende Bildschirmausgabe 50 Sie können auch mehrere Anweisungen in einer Zeile durch Semikolon getrennt schreiben. Dies führt aber zu unübersichtlichem Code. x = 5; y = 10; z = x*y; print(z) Ausgabe: 50 Auch aus der Programmiersprache C/C++ oder Java bekannte Konstrukte können Sie verwenden, z.B. x = 5 # x = x - 2 x -= 2 print(x) Bildschirmausgabe: 3 Beachten Sie, dass mit dem =-Zeichen eine Wertezuweisung durchgeführt wird. Dies ist nicht äquivalent zum mathematischen =-Zeichen, wie am vorigen Beispiel zu ersehen ist. Den Inkrement-/Dekrementoperator (z.B. x++ oder x--) aus C/C++ oder Java kennt Python aber nicht. Variablen sind nicht an einen bestimmten Datentyp gebunden, folgendes ist mit Python problemlos möglich: import math wert = 10 print(wert) wert = 35.5 print(wert) wert = "Hallo" print(wert) wert = math.pi print(wert) Ausgabe: 10 35.5 Hallo 3.141592653589793 == Physische und logische Zeilen == In Python muss eine Anweisung in einer logischen Zeile Platz finden. Wird eine Anweisung aber zu lang für eine Zeile, dann kann sie in mehrere physische Zeilen unterteilt werden. Dies kann einerseits durch einen Backslash am Ende einer Zeile geschehen, z.B. a = 2 + \ 5 Dies stellt eine logische Zeile dar, die in zwei physische Zeilen unterbrochen ist. Geklammerte Ausdrücke werden automatisch zu einer logischen Zeile verbunden, z.B. a = (2 + 5) Achtung: Im ersten Beispiel darf nach dem Backslash nichts mehr stehen, auch kein Kommentar. Dies trifft im zweiten Bespiel nicht zu, hier könnte noch ein Kommentar folgen, z.B. a = (2 + # Kommentar 5) Auch für Strings gibt es Möglichkeiten, diese auf mehrere Zeilen aufzuspalten. # Kurzer String str1 = "ABC" # Langer String str2 = """Hallo Welt, Grüetzi Schwyzer, Servus an alle""" # Backslash str3 = "UVW\ XYZ" # Mit Klammern str4 = ("Sehr langer Text, der automatisch .............. " "in einer einzigen Variable zusammengefügt wird." ) print(str1) print(str2) print(str3) print(str4) Ausgabe: ABC Hallo Welt, Grüetzi Schwyzer, Servus an alle UVWXYZ Sehr langer Text, der automatisch .............. in einer einzigen Variable zusammengefügt wird. ==Hexadezimale, oktale, binäre und andere Zahlen== d = 1050 # Dezimalzahl h = 0xAA2 # Hexadezimalzahl o = 0o12 # Oktalzahl b = 0b100001101 # Binärzahl print(d) print(h) print(o) print(b) Ausgabe: 1050 2722 10 269 Groß- und Kleinbuchstaben sind in obigen Literalen übrigens egal. So kann man z.B. statt <code>0b1001</code> auch <code>0B1001</code> schreiben (siehe dazu [https://docs.python.org/3/reference/lexical_analysis.html#integer-literals]). Sie können auch dezimale in hexadezimale Zahlen umwandeln, usw.: h = hex(1050) # Dezimalzahl -> Hexadezimalzahl b = bin(1050) # Dezimalzahl -> Binärzahl o = oct(1050) # Dezimalzahl -> Oktalzahl print(h) print(b) print(o) Ausgabe: 0x41a 0b10000011010 0o2032 Gegeben sei die Zahl 121 zur Basis 3. Diese soll in eine Dezimalzahl umgewandelt werden. Das kann so geschehen: z = int("121", 3) print(z) Ausgabe: 16 Dass dies richtig ist, davon kann man sich folgendermaßen überzeugen: <math> 1 \cdot 3^2 + 2 \cdot 3^1 + 1 \cdot 3^0 = 9 + 6+ 1 = 16 </math> Zahlen übersichtlicher schreiben kann man auch mittels Underscore, z.B.: print("Eine Million (Variante 1) =", 1000000) print("Eine Million (Variante 2) =", 1_000_000) print("Eine Rechnung:", 2_000 * 400_000); Es ergibt sich bei beiden Varianten die gleiche Ausgabe. Variante 2 ist aber im Sourcecode leichter lesbar, detto die Zahlen in der Rechnung: Eine Million (Variante 1) = 1000000 Eine Million (Variante 2) = 1000000 Eine Rechnung: 800000000 == Strings und Platzhalter== Ein paar einfache Beispiele: print("Hallo {}" . format("Hugo")) print("Hallo {:s}" . format("Hugo")) print("Hallo %s" % "Hugo") Ausgabe: Hallo Hugo Hallo Hugo Hallo Hugo Python-Code (formatted string literals, Beispiel 1): str1 = "Hallo" str2 = "Hugo" print(f"{str1} {str2}") Ausgabe: Hallo Hugo Python-Code (formatted string literals, Beispiel 2): wert = 11.567 print(f"Ausgabe: {wert:.5f}") Ausgabe: Ausgabe: 11.56700 Komplexere Beispiele: print("Hallo {} und {}" . format("Hugo", "Mike")) print("Hallo {name1} und {name2}" . format(name2="Hugo", name1="Mike")) # Füllzeichen: * # Bündigkeit: > (=rechts), < (=links), ^ (=zentriert) # Feldweite: 10 # Typ: s (=String), f (=Gleitkommazahl), d (=Dezimalzahl) etc. print("Hallo {:*>10s}" . format("Hugo")) print("Hallo {:*<10s}" . format("Hugo")) Ausgabe: Hallo Hugo und Mike Hallo Mike und Hugo Hallo ******Hugo Hallo Hugo****** Python-Code: str = "Hallo\t%s\t%7.2f\t%10.2e\t%i" % ("Hugo", 12.34567, 34.567, 264) print(str) Ausgabe: Hallo Hugo 12.35 3.46e+01 264 == Unicode == Neben den bekannten ASCII-Zeichen lassen sich Zeichen auch mittels Unicode beschreiben. Griechische Buchstaben oder komplexere mathematische Operatoren - all das sollte kein Problem sein. Siehe auch {{W|Unicode}}, {{W|Liste der Unicodeblöcke}} und {{W|Unicodeblock Mathematische Operatoren}}. Im Folgenden werden ein paar Zeichen (Allquantor, Nabla-Operator, Existenzquantor), die man aus der Mathematik kennt, erzeugt. ch1 = "\N{FOR ALL}" ch2 = "\N{NABLA}" ch3 = "\u2203" print(ch1, ch2, ch3) Ausgabe: ∀ ∇ ∃ <small>Diese Ausgabe ergibt sich z.B. mit der IDLE-Shell oder mit Cygwin. Beim Ausführen über die Windows-Eingabeaufforderung oder Windows PowerShell unter MS Windows 10 erfolgt keine korrekte Darstellung. IDLE ist die mit Python mitgelieferte IDE ('''I'''ntegrated '''D'''evelopment '''E'''nvironment, Integrierte Entwicklungsumgebung). Gegen Ende dieses Textes wird IDLE kurz beschrieben. Das Problem mit der Windows Eingabeaufforderung lässt sich aber umgehen. Man muss nur eine Schriftart auswählen, die die Zeichen kennt, z.B. "DejaVu Sans Mono". Dazu klicken Sie einfach bei der Eingabeaufforderung mit der rechten Maustaste oben auf die weiße Leiste und wählen im aufpoppenden Fenster den Menüpunkt "Eigenschaften". Es öffnet sich ein Dialogfenster. Über den Reiter "Schriftart" lässt sich nun die Schriftart einstellen. Unter MS Windows 11 oder openSUSE Leap 15.6 (bash-Konsole) gibt es dieses Problem ohnehin nicht.</small> == Reguläre Ausdrücke == Python kennt auch {{W|Regulärer Ausdruck|reguläre Ausdrücke}}. Dazu gibt es in Python das Modul <code>re</code>. Beipielsweise sollen alle Zahlen (<math>\text{zahl}\in\mathbb{N}_0</math>) in einem String gesucht und ausgegeben werden. Als String sei gegeben: <code>3x Grüße und 100 Kekse.</code> Das Muster (Pattern) ist <code>\d+</code>. <code>\d</code> steht für eine Dezimalziffer 0-9. Das Plus-Zeichen (+) steht symbolisch für ein oder mehrere Zeichen des vorherigen Ausdrucks. Hier also ein oder mehrere Dezimalziffern. Es wird die Funktion <code>findall</code> aus dem Modul <code>re</code>verwendet. Python-Code: from re import findall str = "3x Grüße und 100 Kekse." pat = "\\d+" # Doppel-Backslashes müssen verwendet werden, sonst gibt Python eine Warnung aus! # alternativ: pat = r"\d+" # oder: pat = "[0-9]+" numb = findall(pat, str) print(numb) Ausgabe: ['3', '100'] Python kennt noch viele weitere Möglichkeiten mittels regulärer Ausdrücke zu hantieren. Dies soll hier aber nicht vertieft werden, da das Thema schon ziemlich speziell und komplex ist. Bei Bedarf siehe aber z.B. die Bücher ''Weigend, Seite 380ff'' und ''Ernesti, Kaiser'' [https://openbook.rheinwerk-verlag.de/python/28_001.html] oder die Python-Dokumentation [https://docs.python.org/3/library/re.html]. Auch [[Python unter Linux: Reguläre Ausdrücke]] liefert ein umfangreiches und brauchbares Python-2-Kapitel zu den regulären Ausdrücken. Die dort gelisteten Beispiele müssten ggf. vor Verwendung auf Python-3 umgeschrieben werden. <small>Wie macht man das? Dazu siehe z.B. [https://openbook.rheinwerk-verlag.de/python/43_001.html], [https://portingguide.readthedocs.io/en/latest/] oder [https://www.digitalocean.com/community/tutorials/how-to-port-python-2-code-to-python-3]</small> <small>Es gibt auch ein externes Modul ''regex'', das bei Bedarf extra installiert werden muss ([https://pypi.org/project/regex/]). Es bietet zusätzliche Funktionalität und gründlicheren Unicode-Support. Dies sei hier aber nur der Vollständigkeit halber erwähnt.</small> == Verzweigungen == === if === Die IF-Verzweigung sei aus anderen Programmiersprachen bereits bekannt. In {{W|Pseudocode}} lässt sie sich folgendermaßen darstellen: WENN bedingung TRUE führe block1 aus SONST führe block2 aus ENDE Als {{W|Aktivitätsdiagramm|UML-Aktivitätsdiagramm}} sieht das in etwa so aus: [[File:If-Then-Else-diagram.svg|200px]] Und als {{W|Nassi-Shneiderman-Diagramm|Nassi-Shneiderman-Struktogramm}} so: [[File:Zweiseitige Auswahl.png|250px]] In Python gibt es keinen expliziten ENDE-Kennzeichner. Stattdessen wird der Code durch Einrückungen strukturiert. Alles mit der gleichen Einrückungstiefe gehört zum selben Block. Dies zeichnet Python vor anderen Programmiersprachen aus. Die test1.py-Datei laute also wie folgt: x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: Der else-Zweig wird ausgefuehrt x ist groesser oder gleich 4 Man achte auch auf die Doppelpunkte in der if- und else-Zeile. Darauf vergisst man gerne, wenn man von anderen Programmiersprachen kommt. Folgendes wäre in Python ein Fehler (genauer gesagt ein IndentationError). x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Auch Nachstehendes würde nicht zum gewünschten Ergebnis führen (löst aber keine Fehlermeldung aus). Der letzte print-Befehl ist schon außerhalb der IF-ELSE-Verzweigung. x = 3 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: x ist kleiner als 4 x ist groesser oder gleich 4 Python kennt eine Reihe von Vergleichs- und Verknüpfungsoperatoren: <, <= ... kleiner (gleich) >, >= ... größer (gleich) == ... gleich != ... ungleich is ... identisch is not ... nicht identisch and ... AND or ... OR not ... NOT Beispielsweise: a = 5 b = 9 if a<=10 and b!=7: print("OK") else print("Nicht OK") Ausgabe: OK Der else-Block kann übrigens auch ersatzlos entfallen. Als Pseudocode sieht das so aus WENN bedingung TRUE führe block aus ENDE Mehrfache Verzweigungen werden durch das elif-Konstrukt erstellt. In Pseudocode: WENN bedingung1 TRUE führe block1 aus SONST WENN bedingung2 TRUE führe block2 aus SONST WENN bedingung3 TRUE führe block3 aus SONST führe block4 aus ENDE Ein Python-Beispiel: a = 14 if a<=10: print("<=5") elif a>11 and a<15: print("11 bis 15") elif a>16 and a<20: print("16 bis 20") else: print(">=20") Ausgabe: 11 bis 15 In Python gibt es auch die Schlüsselwörter <code>True</code> (für wahr) und <code>False</code> (für falsch). Man beachte, dass sie mit Großbuchstaben beginnen. Andere Schreibweisen wären ein Fehler. Sie gehören zum Datentyp <code>bool</code>. Ihnen sind auch die Zahlen <code>1</code> und <code>0</code> zugewiesen. Man beachte, dass {{W|Rundungsfehler}} auftreten können. D.h. man sollte bei der Verwendung von {{W|Gleitkommazahl|Gleitpunktzahlen}} niemals auf absolute Genauigkeit prüfen, sondern eine Toleranz (einen <math>\varepsilon</math>-Wert) vorgeben. Ein klassisches Beispiel, das ein falsches Ergebnis liefert, ist: i = 0.1 + 0.2 print(i) if i == 0.3: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 NOK Und das, obwohl man schon in der Volksschule lernt, dass 0.1 + 0.2 gleich 0.3 ist. Korrekt muss das obige Beispiel z.B. so umgeschrieben werden: ist = 0.1 + 0.2 soll = 0.3 epsilon = 0.000001 print(ist) if abs(ist-soll) < epsilon: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 OK Alternativ kann auch die <code>math.isclose()</code>-Funktion verwendet werden. Das sei aber hier nur erwähnt und nicht konkret ausgeführt. <u>Aufgabe:</u> Recherchieren Sie im Internet zum Thema <code>math.isclose()</code>-Funktion. === match === Ab Python 3.10 gibt es auch die match-Anweisung. Dies ist das Python-Pendant für die switch-Anweisung in anderen Programmiersprachen, geht aber bei näherer Betrachtung weit darüber hinaus. Hier nur ein einfaches Beispiel: x = "Hello" match x: case "Servus" | "Ciao": # or print("Servus an alle") case "Grüetzi": print("Grüetzi Schwyzer") case _: # other, default, sonstiges ... print("Hallo Welt") Ausgabe: Hallo Welt Als Struktogramm sieht das in etwa so aus: [[File:Mehrseitige Auswahl.png|250px]] Für nähere Details siehe z.B. [https://www.geeksforgeeks.org/python-match-case-statement/], [https://learnpython.com/blog/python-match-case-statement/], [https://docs.python.org/3/tutorial/controlflow.html#match-statements] und das Python Enhancement Proposal (PEP) 636 – Structural Pattern Matching: Tutorial [https://peps.python.org/pep-0636] und dort insbesondere den Anhang A - Quick Intro. <small><code>match, case, _</code> etc. sind sogenannte ''soft keywords''. Im Gegensatz zu den normalen Schlüsselwörtern dürfen ihnen auch Werte zugewiesen werden. Eine Liste der weichen Schlüsselwörter lässt sich durch <code>keyword.softkwlist</code> erstellen (die Anweisung gibt es seit Python 3.9). Siehe dazu auch [https://stackoverflow.com/questions/65800344/what-are-soft-keywords] und [https://docs.python.org/3/library/keyword.html#keyword.softkwlist].</small> == Schleifen == Kopfgesteuerte Schleife, Endlosschleife und fußgesteuerte Schleife: [[File:Programmingloops.svg|450px]] === while === Die WHILE-Schleife ist kopfgesteuert. Sie funktioniert wie aus anderen Programmiersprachen bekannt. In Pseudocode: SOLANGE bedingung TRUE führe block aus ENDE In Python: x = 0 while x <= 10: print(x) x += 1 Ausgabe: 0 1 2 3 4 5 6 7 8 9 10 Eine Endlosschleife ergibt sich z.B. so: i = 5 while True: print(i) i-=1 Beendet werden kann sie mit der Tastenkombination STRG-C. Eine fußgesteuerte Schleife kann so simuliert werden: i = 5 while True: print(i) i-=1 if i<=0: print("Fire") break Ausgabe: 5 4 3 2 1 Fire Der <code>break</code>-Befehl wird etwas später noch einmal kurz thematisiert. === for === Struktogramm einer for-Schleife: [[File:Zählschleife.png|200px]] In Python bspw. so: for x in range(6): print(x*2) Ausgabe: 0 2 4 6 8 10 Die Schleife läuft von 0 bis 5. Ausgegeben wird jeweils der Wert x*2. Aquivalent kann diese Schleife auch so geschrieben werden: for x in range(0, 11, 2): print(x) Die Ausgabe ist wie oben. Der Startwert sei 0, der Endwert ist 11-1 und die Schrittweite ist 2. Ein anderes Beispiel sei for x in "text": print(x) Ausgabe: t e x t == Schleifen abbrechen == === break === <code>break</code> bricht die Schleife ab und setzt mit dem nächsten Befehl außerhalb der Schleife fort. for var in range(100): print(var) if var == 5: break Ausgabe: 0 1 2 3 4 5 === continue === <code>continue</code> bricht den aktuellen Schleifendurchlauf ab und setzt mit dem nächsten Schleifendurchlauf fort. for var in range (11): if var == 5: continue print(var) Ausgabe: 0 1 2 3 4 6 7 8 9 10 == try - except == try: z1 = 12 / 0 print(z1) except ZeroDivisionError: print("Das Ergebnis ist unendlich") except: print("Kann nicht berechnet werden!") print("Bitte die Formel korrigieren!") print("Setze Programm fort!") Ausgabe: Das Ergebnis ist unendlich Setze Programm fort! Es wird versucht, eine Zahl durch Null zu dividieren. Das ist nicht möglich, es wird eine Ausnahme ausgelöst. Das Programm springt daher in den except-ZeroDivisionError-Block und führt die dort gelisteten Anweisungen aus (in unserem Fall eine print-Anweisung). Danach wird das Programm fortgesetzt. Würden wir dieses Programm ohne try-except ausführen, so ergibt sich aus z1 = 12 / 0 print(z1) folgende Fehlermeldung und ein unmittelbarer Programmabbruch Traceback (most recent call last): File "C:\tmp\test1.py", line 1, in <module> z1 = 12 / 0 ZeroDivisionError: division by zero Mit dem try-except-Mechanismus können also Ausnahmen oder Fehler aufgefangen und behandelt werden. In unserem Beispiel ist das eher trivial, aber bei größeren Programmen kann das durchaus Sinn machen. Neu in Python 3.14 ist, dass mehrere Ausnahmen auch ohne Klammern angegeben werden können, z.B.: bis inkl. Python 3.13 nur: except (ZeroDivisionError, ValueError): ab Python 3.14 auch: except ZeroDivisionError, ValueError: == pass == Ein leerer Block muss in Python mittels dem Schlüsselwort <code>pass</code> dargestellt werden. Z.B. x = 2 if x == 1: print("Wert ist ", x) else: pass Würde man das <code>pass</code> im else-Block weglassen, so würde man eine Fehlermeldung erhalten: IndentationError: expected an indented block after 'else' statement on line 5 = Funktionen = == Aufrufen von Funktionen == Funktionen sind uns im Rahmen dieses Kurses schon zuhauf begegnet. Sei es die print()-, die math.sin()- oder die hex()-Funktion. All diese Funktionen werden von Python zur Verfügung gestellt, ohne dass man sie explizit programmieren müsste. Aufgerufen werden diese Funktionen, indem man ihren Namen eintippt, gefolgt von runden Klammern. In diesen Klammern können noch Argumente übergeben werden. Auch Rückgabewerte sind möglich. == Funktionen selber schreiben == Funktionen werden mit dem def-Schlüsselwort (man definiert die Funktion) eingeleitet, danach folgt der Funktionsname, danach wiederum runde Klammern, in denen formale Argumente stehen können. Abgeschlossen wird die def-Zeile mit einem Doppelpunkt. Danach folgt der Funktionskörper. Dieser Funktionskörper muss wiederum eingerückt werden (wie von den Verzweigungen und Schleifen bekannt). Aufgerufen wird diese Funktion, indem man ihren Funktionsnamen eingibt, gefolgt von runden Klammern (ggf. mit den aktuellen Parametern). Z.B. # Funktion definieren def halloWelt(i): # i ... beliebige Ganzzahl print("Hallo " * i, end="") print("Welt!") # Funktion aufrufen halloWelt(3) Ausgabe: Hallo Hallo Hallo Welt! Unterschied zwischen formalen und aktuellen Parametern: [[Datei:PythonIng_func1.jpg]] <small>Aktuelle Parameter werden auch Argumente genannt.</small> Rückgabe von Funktionswerten: # Funktion definieren def mathFunc(a, b): r1 = a + b r2 = a * b return r1, r2 # Funktion aufrufen c, d = mathFunc(3, 5) # Ausgabe der zurückgegebenen Werte print(c) print(d) Ausgabe: 8 15 Es werden r1 und r2 zurückgegeben und den Variablen c und d zugewiesen. (r1, r2) und (c, d) sind Tupel. Was Tupel konkret sind, siehe etwas später in diesem Kapitel. 3 und 5 sind die aktuellen Parameter (die Argumente). a und b sind die formalen Parameter. Die Zuweisung der aktuellen zu den formalen Parametern erfolgt in der gegebenen Reihenfolge, also die Zahl 3 wird an a übergeben und die Zahl 5 an b. Vorgabeparameter, z.B.: def mathFunc(a=10, b=20): r1 = a + b r2 = a * b return r1, r2 c, d = mathFunc(3, 5) print(c) print(d) e, f = mathFunc(5) print(e) print(f) g, h = mathFunc(b=6) print(g) print(h) Ausgabe: 8 15 25 100 16 60 Erklärung: * Erster <code>mathFunc</code>-Aufruf: Es werden, wie weiter oben, die Argumente 3 und 5 an die formalen Parameter a und b übergeben. Die Rückgabewerte r1 und r2 werden an c und d übergeben. Somit ist c=8 und d=15. * Zweiter <code>mathFunc</code>-Aufruf: Es wird nur das Argment 5 an a übergeben. b behält den Vorgabewert 20. D.h. e= 25 und f=100. * Dritter <code>mathFunc</code>-Aufruf: Es wird nur die Zahl 6 an b übergeben, a behält seinen Vorgabewert 10. Somit ergibt sich g=16 und h=60. Beispiel (Schlüsselwortargumente vs. Positionsargumente): def mathFunc(a, b): r1 = a - b r2 = a / b return r1, r2 c, d = mathFunc(b=3, a=5) # Schlüsselwortargumente e, f = mathFunc(3, 5) # Positionsargumente print(c) print(d) print(e) print(f) Ausgabe: 2 1.6666666666666667 -2 0.6 Durch die Verwendung von Schlüsselwortargumenten können die Argumente in beliebiger Reihenfolge angegeben werden. Bei den Positionsargumenten ist die Reihenfolge vorgegeben. Daraus resultiert auch der Unterschied bei den obigen Ausgaben. Werden beide Arten in einem Aufruf gemischt, so müssen die Positionsargumente zuerst angegeben werden. Den Unterschied zwischen beiden Argumentarten zu kennen ist wichtig, nicht nur bei selbst erstellten Funktionen. Auch beim Aufruf von Python-Funktionen verfolgt einen die Mischung von Schlüsselwort- und Positionsargumenten auf Schritt und Tritt, z.B. beim etwas später folgenden Abschnitt über "Grafiken zeichnen": plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") Bei dieser <code>plot</code>-Funktion aus dem Modul <code>matplotlib.pyplot</code> sind <code>x</code> und <code>y1</code> Positionsargumente. <code>label, lw</code> und <code>ls</code> sind die Namen der Schlüsselwortargumente. Die Schlüsselwortargumente könnten auch in anderer Reihenfolge angeschrieben werden, nicht jedoch die Positionsargumente! Siehe zu <code>matplotlib.pyplot.plot</code> auch die Seite [https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html]. == Lambda-Funktionen == print((lambda a, b: a*b) (3, 5)) Ausgabe: 15 Eingeleitet wird eine Lambda-Funktion (auch Lambda-Form, Lambda-Operator oder anonyme Funktion genannt) mit dem Schlüsselwort <code>lambda</code>. Es folgen die formalen Argumente, danach ein Doppelpunkt, die Berechnungsvorschrift und ggf. abschliessend in Klammern die aktuellen Parameter. Man kann einer Lambda-Funktion auch einen Funktionsnamen geben und die Funktion über diesen Namen aufrufen, z.B. prod = lambda a, b: a*b print(prod(3, 5)) Als Ausgabe wird wieder die Zahl 15 geliefert. == Rekursive Funktionen == Funktionen können wiederum andere Funktionen aufrufen. Von einem rekursiven Funktionsaufruf spricht man, wenn die aufgerufene Funktion gleich der aufrufenden ist. def printFunc(i): if (i >= 5): return else: print("Hallo Welt") printFunc(i+1) printFunc(1) Ausgabe: Hallo Welt Hallo Welt Hallo Welt Hallo Welt == Funktionsannotationen == Python ist sehr flexibel, was Typen angeht. Im Vorhergehenden haben wir generell keine Typangaben gemacht. Will man Typen angeben, so bietet Python das Konzept der Funktionsannotation. def calcFunc(a: int, b: int) -> int: return a+b r1 = calcFunc(8, 9) r2 = calcFunc(8.0, 9.0) r3 = calcFunc("Hallo", "Welt") print(r1) print(r2) print(r3) Ausgabe: 17 17.0 HalloWelt Jetzt sieht man auf den ersten Blick, welche Typen der Programmierer im Sinn hatte, als er die Funktion erstellte. Das Problem dabei ist nur, dass es Python ziemlich egal ist, welche Typen man im Endeffekt eingibt. Im obigen Beispiel können statt Integer-Typen u.a. auch Float- oder String-Typen eingegeben werden. <small> Siehe zum Thema "Type Checking" aber auch den später folgenden Abschnitt [[Ing_Mathematik:_Python#Type_Checker]]. </small> == Variadische Funktionen == Python-Code: def test1(a, *b): print(a); for c in b: print(c); test1("Hallo", "Welt", "Schweizer", "und alle anderen") Ausgabe: Hallo Welt Schweizer und alle anderen Mit dem Stern (auch als Splat-Operator bezeichnet) in der formalen Parameterliste bei der Funktion <code>test1</code> wird angezeigt, dass eine beliebige Anzahl von Argumenten übergeben wird. <small> Dies entspricht in etwa dem, was in anderen Programmiersprachen (PHP etc.) mittels Ellipse (<code>...</code>) angezeigt wird.</small> = Tupel, Listen und andere = [[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]] == Tupel und Listen == Tupel, Listen und einige andere sind Datenstrukturen oder Sequenzen. Listen (z.B. eine Einkaufsliste) sind veränderbar (mutable). Ein Tupel kann dagegen nicht verändert werden (immutable). Listen werden beim Anlegen in eckige Klammern eingeschlossen, Tupel in runde Klammern. Beim Tupel können die Klammern auch weggelassen werden. Ein Tupel mit nur einem Element muss mit einem Beistrich abgeschlossen werden. Der Grund ist, dass Python sonst nicht entscheiden kann, ob ein Tupel angelegt werden soll, oder nur ein geklammerter Wert. Als Gedächtnisstütze kann man sich den Unterschied zwischen Tupel und Liste ev. so leichter merken: : T'''u'''pel ... r'''u'''nde Klammern, '''u'''nveränderlich : L'''i'''ste ... eck'''i'''ge Klammern, veränderl'''i'''ch. Nachfolgend werden einige Operationen mit Listen und Tupel dargestellt. # Liste und Tupel liste = [1, 2, "Hallo"] tupel = (1, 2, "Hallo") # Ausgabe von liste und tupel print(liste) print(tupel) # Ausgabe von Einzelelementen print(liste[1]) print(tupel[2]) # Element an Liste anhängen und einfügen liste.append(55) liste.insert(4, "Welt") print(liste) # Element aus Liste entfernen liste.remove(1) print(liste) # einige weitere Beispiele liste2 = [1,] tupel2 = 1, 2 tupel3 = (1,) print(liste2) print(tupel2) print(tupel3) Ausgabe: [1, 2, 'Hallo'] (1, 2, 'Hallo') 2 Hallo [1, 2, 'Hallo', 55, 'Welt'] [2, 'Hallo', 55, 'Welt'] [1] (1, 2) (1,) Beispiel (eine Liste von Wörtern zu einem einzigen zusammenhängenden Text verbinden): woerter = ["Hallo", "Welt"] satz = " ".join(woerter) print(satz) Ausgabe: Hallo Welt == Dictionaries und Mengen == Zu den Datenstrukturen gehören weiters auch Mengen und Dictionaries. Mengen sind von der Mathematik bekannt, sie sind ungeordnet und es kommen keine mehrfachen Elemente vor. Dictionaries sind durch Schlüssel :Wert-Paare gekennzeichnet. Mengen werden beim Anlegen wie Dictionaries in geschweifte Klammern eingeschlossen. dict = {"vorname":"Hugo", "nachname":"Meister" } menge = {1, 1, 3, 4, 4, 4, "Hallo"} print(dict) print(menge) print(dict["vorname"]) Ausgabe: {'vorname': 'Hugo', 'nachname': 'Meister'} {1, 3, 4, 'Hallo'} Hugo Geschweifte Klammern ohne Inhalt stellen Dictionaries dar und keine Mengen: di = {} print(type(di)) Ausgabe: <class 'dict'> Leere Mengen lassen sich mit <code>set()</code> erzeugen: menge = set() # leere Menge print(menge) menge.add("Hallo") # Element hinzufügen print(menge) Ausgabe: set() {'Hallo'} Beispiel (einige Mengenoperationen): mengeA = {"Hallo", "Welt"} mengeB = {1, 2, "Welt", 3} # Vereinigung print(mengeA | mengeB) print(mengeA.union(mengeB)) # Durchschnitt print(mengeA & mengeB) print(mengeA.intersection(mengeB)) # Differenz print(mengeA - mengeB) print(mengeA.difference(mengeB)) # Symmetrische Differenz print(mengeA ^ mengeB) print(mengeA.symmetric_difference(mengeB)) # Teilmenge print(mengeA.issubset(mengeB)) # Mehrere Elemente hinzu mengeA.update(["Super", 67, 125]) print(mengeA) # Element löschen mengeA.discard("Hallo") print(mengeA) Ausgabe: {1, 2, 3, 'Welt', 'Hallo'} {1, 2, 3, 'Welt', 'Hallo'} {'Welt'} {'Welt'} {'Hallo'} {'Hallo'} {1, 2, 3, 'Hallo'} {1, 2, 3, 'Hallo'} False {67, 'Super', 'Welt', 'Hallo', 125} {67, 'Super', 'Welt', 125} Es gibt schon seit "ewigen" Zeiten unveränderbare Mengen, die mittels <code>frozenset</code> eingeleitet werden. Neu ab Python 3.15 ist dagegen das Pendant <code>frozendict</code>, das unveränderbare Dictionaries darstellt. fdict = frozendict({"vorname":"Hugo", "nachname":"Meister"}) fset = frozenset({"A", 1, "A"}) print(fdict) print(fdict["vorname"]) print (fset) try: fdict["vorname"] = "Max" print(fdict["vorname"]) except TypeError as e: print(f"Fehler: {e}") try: fset.add("B") print(fset) except AttributeError as e: print(f"Fehler: {e}") Ausgabe: frozendict({'vorname': 'Hugo', 'nachname': 'Meister'}) Hugo frozenset({1, 'A'}) Fehler: 'frozendict' object does not support item assignment Fehler: 'frozenset' object has no attribute 'add' == List Comprehensions == Aus einer Eingabeliste soll eine Ausgabeliste erzeugt werden. Das kann folgendermaßen geschehen. Mathematische Schreibweise: <math>lc = \{2x|x\in\ \mathbb{N}, 1\le x < 11\}</math> Python-Code: lc = [x*2 for x in range(1,11)] print(lc) Ausgabe: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] Mathematische Schreibweise: <math>lc = \{2x | x \in \mathbb{N}, 1\le x < 11, x \bmod 2 = 0 \}</math> Python-Code: lc = [x*2 for x in range(1,11) if x%2 == 0] print(lc) Ausgabe: [4, 8, 12, 16, 20] Siehe auch {{W|List Comprehension}}. == Set Comprehensions == Dies ist sehr ähnlich wie im vorigen Abschnitt beschrieben. Es wird aber keine Liste, sondern eine Menge erzeugt. sc = {x*2 for x in range(1,11)} print(sc) Ausgabe: {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} == Listen zusammenführen - zip() == li1 = ["A", "B", "C", "D"] li2 = [1, 2, 3, 4] li3 = [5.5, 6.6, 7.7, 8.8] z = zip(li1, li2, li3) print(z) li4 = list(z) print(li4) Ausgabe: <zip object at 0x00000283B6C6AC80> [('A', 1, 5.5), ('B', 2, 6.6), ('C', 3, 7.7), ('D', 4, 8.8)] == Generatorausdruck == g = (i*2 for i in range(1,11)) print(g) t = tuple(g) print(t) print(t[1:3]) Ausgabe: <generator object <genexpr> at 0x00000241D2A4A5A0> (2, 4, 6, 8, 10, 12, 14, 16, 18, 20) (4, 6) == Slicing == slice ... Scheibe, Teil, in Scheiben schneiden Beispiel: Zugriff auf Elemente eines geordneten sequentiellen Objekttyps (Liste, Tupel oder String): str1 = "Hallo" # Das erste Element wird mit dem Index 0 angesprochen # [start (inkl.) : stop (exkl.) : step (default=1)] str2 = str1[0:2] # Alternativ auch: str2 = str1[:2] print(str2) tup1 = (0,1,2,3) # Das letzte Element hat auch den Index -1, das vorletzte den Index -2 usw. tup2 = tup1[-3:-1] print(tup2) lst1 = [[1, 5, 10, 20], [30, 40, 50, 60]] lst2 = lst1[1][1] print(lst2) Ausgabe: Ha (1, 2) 40 Beispiel: Umdrehen von Strings str1 = "Hallo" str2 = str1[::-1] print(str2) Ausgabe: ollaH = Objektorientierte Programmierung = {{Wikipedia|Objektorientierte Programmierung}} * {{W|Klasse (Objektorientierung)|Klasse}} ... die Schablone oder der Bauplan, enthält Methoden und Attribute * {{W|Objekt (Programmierung)|Objekt}} ... eine Klasseninstanz (die konkrete Ausprägung der Klasse) * {{W|Attribut (Programmierung)|Attribute}} ... die Eigenschaften eines Objekts * {{W|Methode (Programmierung)|Methoden}} ... die Aktionen (Operationen), die ein Objekt ausführen kann * {{W|Vererbung (Programmierung)|Vererbung}} ... neue Klassen (Subklassen, Unterklassen, abgeleitete Klassen) aus vorhandenen Klassen (Superklassen, Oberklassen, Basisklassen, Elternklassen) ableiten. Ermöglicht den Aufbau von Klassenhierarchien. Die Subklasse "erbt" Attribute und Methoden von der Superklasse. Python unterstützt (so wie C++, aber im Gegensatz zu Java) Mehrfachvererbung. == UML == * {{W|Unified Modeling Language|UML}} ... '''U'''nified '''M'''odeling '''L'''anguage, eine Modellierungssprache. Die UML enthält zahlreiche Diagrammarten, um Programme zu modellieren. Im Nachfolgenden wird nur das {{W|Klassendiagramm}} verwendet. [[File:UmlCd Klasse-3.svg|300px]] * {{W|Sichtbarkeit (Programmierung)|Sichtbarkeit}}: ** + ... public (öffentlich) ** - ... private ** # ... protected * {{W|Attribut_(UML)#Attribute_für_Instanzen_und_für_Klassen|Klassenattribute}} (statische Attribute): Werden nur einmal pro Klasse angelegt. Im Klassendiagramm werden sie unterstrichen. [[File:Attribute-3.png|200px]] * Vererbung: <gallery> InheritancePgmUML.svg | Abgeleitete Klasse erbt von Basisklasse (Einfachvererbung) Diamond inheritance.svg | D erbt von B und C (Mehrfachvererbung). B und C erben von A (Einfachvererbung) </gallery> Für weitergehende Betrachtungen zur UML wird auf Spezialliteratur verwiesen, z.B.: * Seidl et al.: UML@Classroom. dpunkt, 2012, ISBN 978-3-89864-776-2 * Rupp et al.: UML 2 glasklar. Hanser, 4. Aufl., 2012, ISBN 978-3-446-43057-0 == Eine einfache Klasse == [[Datei:PythonIng_uml1.svg | 200px]] class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 fahr = Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die Klasse Fahrzeug wird durch das class-Schlüsselwort eingeleitet. raeder ist ein Klassenattribut und public. __init__ wird bei der Objekterzeugung automatisch aufgerufen (ist der sogenannte Konstruktor). Man achte darauf, dass diese Methode immer mit zwei Unterstrichen eingeleitet und abgeschlossen wird. Instanzattributen wird das Wort self vorangestellt. Wir sehen uns z.B. das Attribut self.__geschwind an. Auch hier werden zwei Unterstriche verwendet. Das bedeutet, dass dieses Attribut strikt/stark private ist. Wird nur ein Unterstrich verwendet, so deutet dies auf schwach/weakly private hin. Letzteres wird in Python deutlich häufiger verwendet. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt. Besonderheiten bei stark und schwach private: * '''stark private''': ** zwei führende Unterstriche ** Name Mangling: Name wird zu <code>_Klassenname__variablenname</code> ** Schutz vor Namenskollisionen bei Vererbung ** am Ende des Namens dürfen keine zwei Unterstriche verwendet werden. Das wären dann Magic Methods oder Dunder-Methods (z.B. __init__). Diese sind public. * '''schwach private''': ** ein führender Unterstrich ** Name bleibt gleich ** ist nur ein Hinweis an die Programmierer, kein starker Schutz ** <code>from modul import *</code>: Objekte mit einem führenden Unterstrich werden standardmäßig nicht importiert ** Standard für die Kapselung bei Python. Schätzung: Weit mehr als 80% der nicht-öffentlichen Attribute/Methoden werden als schwach private deklariert. Weniger als 5-10% als stark private (Quelle: Google KI) == Klassen importieren == Häufig ist es sinnvoll und übersichtlicher Klassen in eigenen Dateien zu speichern. Das sind dann eigene Module. Abgespeichert werden Sie mit der Endung py, wie bisher auch praktiziert. Aufgerufen werden Sie mit der import-Anweisung. Dann ist aber nur der Dateiname ohne Endung py zu verwenden. Klarer wird das mit einem Beispiel. Datei c:\tmp\fahrzeug.py class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 Datei c:\tmp\test1.py import fahrzeug fahr = fahrzeug.Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die üblichen import-Anweisungen lauten wie folgt: {| {{prettytable}} ! import-Befehl ! Instanz |- | import xyz || xyz.Klasse |- | import xyz as x || x.Klasse |- | from xyz import Klasse || Klasse |- | from xyz import * || Klasse |} Der Vorteil der ersten beiden import-Anweisungen ist, dass es kaum zu Namenskollisionen kommen kann. Dafür hat man bei den letzten beiden Varianten weniger Tipparbeit. == Vererbung == === Einfachvererbung === [[Datei:PythonIng_uml2.svg | 200px]] Datei fahrzeug.py: class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 class Luftfahrzeug(Fahrzeug): def __init__(self, geschwindigkeit, leistung, fluegel): super().__init__(geschwindigkeit, leistung) self.__flueg = fluegel def getFlueg(self): return self.__flueg Datei test1.py: import fahrzeug fahr = fahrzeug.Luftfahrzeug(150, 90, 4) print(fahr.getFlueg()) Ausgabe: 4 === Mehrfachvererbung === Mit Python ist auch Mehrfachvererbung möglich, z.B.: class A: def _printA(self): print("Klasse A") class B: def _printB(self): print("Klasse B") class C(A,B): def __init__(self): self._printA() self._printB() c = C() Ausgabe: Klasse A Klasse B Die Klasse C erbt von A und B. In UML sieht das in etwa so aus: +-----------------------------+ +-------------------------+ | A | | B | +-----------------------------+ +-------------------------+ | | | | +-----------------------------+ +-------------------------+ | # printA() | | # printB() | +-----------------------------+ +-------------------------+ . . / \ / \ --- --- | | | | +---------------------+ | C | +---------------------+ | | +---------------------+ | | +---------------------+ <code>printA()</code> und <code>printB()</code> sind schwach private (in UML als <code>protected</code> mit einem # dargestellt). Es ist aber zu beachten, dass schwach private nur Konvention ist. Praktisch könnte man auch von außerhalb auf diese Methoden zugreifen. Das soll man aber nicht tun, und das wird in Python durch einen Unterstrich angedeutet. = Grafiken zeichnen = Für das Zeichnen von Grafiken wird hier das Modul <code>matplotlib</code> verwendet. <code>matplotlib</code> ist ein externes Modul und muss vor der ersten Verwendung installiert werden. Das geht so: # Starten Sie ein Terminal (bei Windows die Eingabeaufforderung). # Führen Sie darin folgenden Befehl aus <code>c:\devel\Python\Scripts\pip.exe install matplotlib</code> pip ist übrigens der Paketmanager von Python ({{W|Pip_(Python)}}). Optimalerweise installieren wir auch gleich das Modul <code>numpy</code> (Numerical Python). Wir werden es im Folgenden oft benötigen (nicht nur bei den Grafiken). Das funktioniert vom Prinzip her genauso, wie für <code>matplotlib</code> gezeigt. <small>Verwenden Sie Spyder, so sind diese Schritte nicht nötig. Spyder inkludiert diese Pakete standardmäßig. Unter openSUSE Tumbleweed lassen sich diese Pakete mittels YaST oder zypper installieren.</small> == 2D == === Graph einer Funktion === Es soll die cosh-Funktion im Intervall <math>x\in[-3,3]</math> gezeichnet werden. Der Programmcode lautet in der einfachsten Form: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh1.jpg]] Der Code ist quasi selbsterklärend. Das Untermodul pyplot des matplotlib-Moduls und das numpy-Modul werden importiert. x läuft von -3 bis +3. y wird für jeden x-Wert per Formel ausgerechnet. "plt.plot()" ist der Zeichenbefehl. "plt.show" ist notwendig, um das Fenster mit der Grafik anzuzeigen. Die Schrittweite 0.1 wurde so gewählt, um einen ausreichend glatten Verlauf des Graphen zu gewährleisten. Das ist immer ein Kompromiss zwischen Berechnungszeit und Ansehnlichkeit. Testen Sie einfach ein paar verschiedene Werte, um ein Gefühl dafür zu zu bekommen. "plt.grid()" zeichnet ein Gitter in die Grafik (kann auch weggelassen werden). Die Bezeichnungen plt und np könnten auch anders gewählt werden. Es ist aber Konvention, diese so wie hier gezeigt zu wählen. <small>Mit der im obigen Bild gezeigten Menüleiste kann die dargestellte Grafik nachträglich noch geändert werden (Zoom, Pan, Achsenparameter, Kurvenparameter etc.). Natürlich kann man das alles auch direkt programmieren. Wie das funktioniert wird ansatzweise etwas später gezeigt.</small> Ein etwas komplexeres Beispiel ist Folgendes: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) + 2**x plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh4.png]] Man beachte, dass im Gegensatz zu Octave und Julia der ominöse Punkt (.) bei 2**x mit Python nicht benötigt wird. Das macht das Programmiererleben etwas einfacher. === Graphen mehrerer Funktionen und weiteres === import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x") plt.plot(x, y2, label = "sin(x) * cos(x)") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh2.png]] Um die Linienstile etwas individueller zu gestalten, ist folgender Programmcode gedacht: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") plt.plot(x, y2, label = "sin(x) * cos(x)", lw=3, ls="--") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh3.png]] === Funktion in Parameterdarstellung === Es soll die archimedische Spirale <math>x = t \cos(t), y = t \sin(t)</math> im Intervall <math>[0, 6\pi[</math> gezeichnet werden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.show() [[Datei:PythonIng_spirale1.png]] Diese Darstellung erscheint verzerrt. Will man gleiche Achsenskalierungen, so kann man den plt.axis()-Befehl verwenden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.axis("equal") plt.show() [[Datei:PythonIng_spirale2.png]] === Funktion in Polardarstellung === import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(projection="polar") r = np.arange(0, 1, 0.01) theta = r**3 line = ax.plot(theta, r) plt.show() [[Datei:PythonIng_polar1.png]] === Logarithmische Achsenskalierung === ==== Semilog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.semilogy() plt.show() Ausgabe: [[Datei:PythonIng_semilog1.png]] ==== LogLog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.loglog() plt.show() [[Datei:PythonIng_loglog1.png]] === Gefüllte Fläche === import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 3, 0.1) y1 = 3*x - 1 y2 = x**2 plt.plot(x, y1, x, y2, color='black') plt.fill_between(x, y1, y2, where=y1>=y2) plt.show() [[Datei:PythonIng_gefuellt.png]] === Linien, Pfeile, Rechtecke, Kreise und Texte === import matplotlib as mpl import matplotlib.pyplot as plt fig, ax = plt.subplots() r = mpl.patches.Rectangle((0, 0), 3, 3, angle=30, fill=False) c = mpl.patches.Circle((4, 4), 2, fill=False) ax.add_patch(r) ax.add_patch(c) ax.plot([-2, 7], [-2, 0], color="black") ax.arrow(0, 7, 5, 0, length_includes_head=True, head_width=0.5, head_length=1.5, color="black") ax.set_aspect("equal") plt.axis([-3, 8, -3, 8]) plt.show() [[Datei:PythonIng_linien_pfeile_etc.png]] Text kann mit <code>ax.text(x, y, "Text")</code> hinzugefügt werden, bspw. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.text(0.1, 0.1, "Hallo") ax.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() Oder einfacher auch ohne <code>subplots</code> import matplotlib.pyplot as plt plt.text(0.1, 0.1, "Hallo") plt.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text1.png]] Auch Sonderzeichen (griechische Buchstaben etc.) können verwendet werden (siehe dazu auch [https://matplotlib.org/stable/users/explain/text/mathtext.html]). import matplotlib.pyplot as plt plt.text(.3, .5, r'$\Omega\ \psi\ \oint\ \nabla\ \dot a\ \frac{a}{b}\ a_b$', size="20") plt.show() [[Datei:PythonIng_text20.svg]] Jetzt wird noch gezeigt, wofür <code>subplots</code> sinnvoll eingesetzt werden können. import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=1, ncols=2) ax[0].text(0.1, 0.1, "Hallo") ax[1].text(0.1, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text2.png]] === Aufgaben === * Zeichnen Sie die Strophoide <math>x = \frac{a(t^2-1)}{t^2+1}, y = \frac{at(t^2-1)}{t^2+1}, a = 2, -3 \leq t \leq 3</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_strophoide.jpg]] * Zeichnen Sie die verschlungene Hypozykloide <math>x = (R-r)\cos t + c\cos\frac{R-r}{r}t, y = (R-r)\sin t - c\sin\frac{R-r}{r}t, c = 3, r = 2, R = 6, -15 \leq t \leq 15</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_hypozykloide.jpg]] * Testen Sie bei den obigen Übungsaufgaben verschiedene Linienstile und Farben. Farben können mit dem plt.plot()-Parameter color gewählt werden. * Testen Sie bei den obigen Übungsaufgaben verschiedene Werte für a, c, r und R. == 3D == === Räumliche Kurven === import matplotlib.pyplot as plt import numpy as np t = np.arange(0, 6*np.pi, 0.1) x = t * np.cos(t) y = t * np.sin(t) z = t fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot(x, y, z) plt.show() [[Datei:PythonIng_raumkurve1.png]] === Flächen === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z) plt.show() [[Datei:PythonIng_fläche1.png]] Das Ganze in Netzdarstellung läßt sich so programmieren: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.5) y = np.arange(0, 10, 0.5) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_wireframe(x, y, z) plt.show() [[Datei:PythonIng_fläche2.png]] Ein etwas komplexeres Beispiel: import matplotlib.pyplot as plt import numpy as np x = np.arange(0.1, 10, 0.1) y = np.arange(0.1, 10, 0.1) x, y = np.meshgrid(x, y) z1 = np.sin(x) + 3 * np.cos(y) z2 = np.sin(x) + np.log(y) z3 = x + np.cos(y) z4 = x**2 - y fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, nrows=2, ncols=2) ax[0][0].plot_surface(x, y, z1) ax[0][1].plot_surface(x, y, z2) ax[1][0].plot_surface(x, y, z3) ax[1][1].plot_surface(x, y, z4) plt.show() [[Datei:PythonIng_subplot1.png]] Man beachte, dass man die Unterbilder im Bild nach dem Ausführen des Scripts z.B. mit der mittleren Maustaste einzeln drehen, oder über die Einträge in der Menüzeile einzeln bearbeiten kann. Mit ein paar Zeilen Programmtext lässt sich also eine Menge an Funktionalität generieren. Die Farbgebung lässt sich über <code>colormaps</code> variieren. import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm) plt.show() [[Datei:PythonIng_colormap1.png]] Es gibt eine Menge an Colormaps, z.B. <code>plasma, Greys, Dark2, ocean</code>. Zwecks detaillierterer Infos siehe die matplotlib-Dokumentation. <small>Verwendet man die IDE namens IDLE, so gibt es dort auch die automatische Codevervollständigung. D.h. es werden alle Möglichkeiten (in unserem Fall nach dem Eintippen von <code>cm.</code> alle verfügbaren Colormaps) angezeigt.</small> Die "edgecolor" und Linienbreite können auch frei gewählt werden: import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm, edgecolor="black", linewidth=1.0) plt.show() [[Datei:PythonIng_colormap2.png]] === Höhenlinien === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() ax.contour(x, y, z) plt.show() [[Datei:PythonIng_höhenlinien1.png|400px]] Etwas abgewandelt sieht das so aus: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contour(x, y, z) ax.clabel(hl, inline = True) plt.show() [[Datei:PythonIng_höhenlinien2.png|400px]] Und noch eine Variante (mit einem Farbbalken) sei gezeigt. import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contourf(x, y, z) fig.colorbar(hl) plt.show() [[Datei:PythonIng_höhenlinien5.svg|400px]] === Aufgaben === * Zeichnen Sie die räumliche Kurve <math>x = 2 \cdot \cosh(t)</math>, <math>y = 5 \cdot \sin(t)</math>, <math> z = t^{2} - t</math>, <math>0 \leq t \leq 3\pi</math>. * Zeichnen Sie die Fläche <math>z = \log(x) + \cos(y)</math>. == Animationen und fortgeschrittenes 3D == === Mit matplotlib === Auch mit matplotlib sind Animationen möglich. Das ist ein bisschen komplizierter und wird deshalb hier nur mit einem sehr einfachen Beispiel dargestellt (bei Interesse siehe z.B. auch das [https://matplotlib.org/stable/users/explain/animations/animations.html#animations Animations using Matplotlib-Tutorial]). import matplotlib.pyplot as plt import matplotlib.animation as ani import matplotlib import numpy as np def update(frame): line.set_xdata(x[:frame]) line.set_ydata(y[:frame]) return (line) fig, ax = plt.subplots() x = np.arange(0, 10, .1) y = np.sin(x) line, = ax.plot(x[0], y[0]) ax.set(xlim=[0, 10], ylim=[-1, 1]) a = ani.FuncAnimation(fig=fig, func=update, frames=100, interval=20) plt.show() # Speichere die Animation in einem animierten GIF (optional) a.save(filename="c:/tmp/PythonIng_anim5.gif", writer="pillow") [[Datei:PythonIng_anim5.gif]] Es wird eine Sinuskurve auf den Bildschirm gezeichnet. In der letzten Zeile wird diese Animation in ein animiertes GIF gespeichert. Das ist natürlich optional und kann auch weggelassen werden. === Mit VPython === Aber auch mit dem Modul VPython lassen sich einfache 3D-Animationen erstellen. VPython ist ein externes Modul, das vorab installiert werden muss. Unter openSUSE Tumbleweed gibt es dzt. kein entsprechendes rpm-Paket. Die übliche Methode der Installation mittels YaST oder zypper ist somit nicht möglich. Auch eine direkte Verwendung von pip führt nur zu einer Fehlermeldung (<code>error: externally-managed-environment</code>). Es empfiehlt sich dort folgende Vorgehensweise: # Erstelle zuerst eine virtuelle Umgebung, z.B.: <code>python3.11 -m venv ~/tmp/venv1</code> # Wechsle das Verzeichnis: <code>cd ~/tmp/venv1/bin</code> # Installiere das entsprechende Paket: <code>./pip install vpython</code> # Führe das entsprechende Skript aus: <code>./python ~/tmp/test1.py</code> Aktuell (März 2026) ist dieses Programmpaket lt. der [https://vpython.org/presentation2018/install.html VPython-Homepage] nur für die Python-Versionen 3.8 bis 3.12 verfügbar. Ein Beispiel zu einer einfachen Animation wird nachfolgend geliefert. from vpython import * scene.width = 1200 scene.height = 600 scene.center = vector(20,0,0) scene.background = color.white cylinder(pos=vector(0,0,0), axis=vector(20,0,0), radius=5, color=color.blue) cone(pos=vector(0,0,0), axis=vector(-10,0,0), radius=5, color=color.blue) helix(pos=vector(20,0,0), axis=vector(40,0,0), radius=2, coils=10, thickness=0.5, color=color.blue) ball = sphere(pos=vector(20,0,0), color = color.green, radius = 1) ball.p = vector(0.15, 0, 0) toc = True while True: rate(200) if(ball.pos.x <= 60 and toc == True): ball.pos += ball.p else: toc = False ball.pos -= ball.p if(ball.pos.x <= 20 and toc == False): toc = True [[Datei:PythonIng_vpython_anim.JPG]] Idealerweise öffnet sich beim Ausführen des Scripts ein Browserfenster. Darin wird die programmierte Animation gezeigt (siehe auch den obigen Screenshot). Eine Größenänderung können Sie mit der mittleren Maustaste initiieren. Die Szenerie drehen können Sie mit der rechten Maustaste. === Mit build123d === Hiermit lassen sich einfach 3D-Modelle für CAD-Systeme erstellen. [https://build123d.readthedocs.io/en/latest/ build123d] ist ein externes Modul und muss vorab, wie schon für mehrere andere Module gezeigt, installiert werden (pip, venv etc.). Beispielcode: from build123d import * # Bauteil with BuildPart() as bauteil: # Zylinder erstellen Cylinder(100, 60) # Bohrung with BuildSketch(bauteil.faces().sort_by(Axis.Z)[-1]) as loch: Circle(radius=10) # negativ extrudieren extrude(amount=-60, mode=Mode.SUBTRACT) # Fertiges Modell exportieren export_step(bauteil.part, "bauteil.step") Ausgabe (STEP-Datei z.B. in {{W|FreeCAD}} importiert, Screenshot): [[Datei:PythonIng_build123d.jpg | 300px]] FreeCAD ist ein freies 3D-CAD-System. Die Makroprogrammierung in diesem System wird später noch gezeigt. === Mit VTK === Komplexer, aber auch mächtiger als VPython ist die Verwendung von VTK ('''V'''isualization '''T'''ool'''k'''it). Genauer gesagt des Python-Wrappers von VTK. Dieses externe Python-Modul muss vorab installiert werden (z.B. mittels YaST, pip oder in eine virtuelle Umgebung). VTK ist eine Softwarebibliothek zur 3D-Visualisierung und wurde ursprünglich in C++ geschrieben. Verbreitet eingesetzt wird diese Bibliothek in der Wissenschaft und Forschung, z.B. * in der medizinischen Bildgebung * für Strömungssimulationen * für Klimadaten VTK funktioniert nach dem {{W|Grafikpipeline|Pipeline-Prinzip}}: Source (Quellen) -> Filter -> Mapper (Senken) -> Actor/Renderer Daten fließen von den Quellen zu den Senken. Als einfaches Beispiel wird die Darstellung eines Zylinders gezeigt, der mit den Maustasten gedreht oder in der Größe geändert werden kann: import vtk # Zylinder erzeugen cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) # Geometrie in darstellbare Daten umwandeln mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) # Objekt in der Szene actor = vtk.vtkActor() actor.SetMapper(mapper) # Szene verwalten renderer = vtk.vtkRenderer() renderer.AddActor(actor) # Render-Fenster render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) # Maus/Tastatur-Steuerung interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) # Starten render_window.Render() interactor.Start() Ausgabe: [[Datei:PythonIng_VTK_1.png]] Gleiches Beispiel wie oben, aber mit einer Animationssequenz: import vtk import time cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderer.AddActor(actor) render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) render_window.Render() time.sleep(0.01) Das Grafikfenster schließt sich nach Ablauf der Schleife. Das Fenster bleibt geöffnet, wenn Sie am Programmende folgenden Befehl hinschreiben interactor.Start() Um den animierten Zylinder grün einzufärben, müssen Sie Folgendes im obigen Programm ergänzen (Farbnamen): colors = vtk.vtkNamedColors() actor.GetProperty().SetColor(colors.GetColor3d("Green")) Als Namen können Sie u.a. die CSS3 Web-Farben verwenden (siehe z.B. [https://wiki.selfhtml.org/wiki/Farbe/Farbangaben] und {{W|Webfarbe#CSS_3}}). Alternativ funktioniert auch das ({{W|RGB-Farbraum|RGB}}): actor.GetProperty().SetColor(0.0, 0.6, 0.0) Wie der Zylinder mit einer Textur versehen wird, zeigt folgendes Programm: import vtk import time cylinder = vtk.vtkCylinderSource() cylinder.SetResolution(30) cylinder.SetHeight(3.0) cylinder.SetRadius(1.0) cylinder.CappingOn() texture_coords = vtk.vtkTextureMapToCylinder() texture_coords.SetInputConnection(cylinder.GetOutputPort()) texture_coords.PreventSeamOn() reader = vtk.vtkJPEGReader() reader.SetFileName("PythonIng_textur.jpg") texture = vtk.vtkTexture() texture.SetInputConnection(reader.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(texture_coords.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.SetTexture(texture) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderer.AddActor(actor) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) renderWindow.Render() time.sleep(0.01) interactor.Start() <gallery> PythonIng_textur.jpg | Textur-Datei PythonIng_VTK_2.png | Ausgabe (Screenshot) </gallery> Nun aber genug von VTK und der Erstellung von Grafiken, weiter geht es mit mathematischeren Themen. = Vektoren und Matrizen = == Zahlenfolgen == Für das Erstellen von Zahlenfolgen bieten sich die Funktionen <code>arange</code> und <code>linspace</code> aus dem <code>numpy</code>-Modul an. from numpy import * start = 0 stop = 10 step = 2 num = 10 r = arange(start, stop, step) # step ... Schrittweite l = linspace(start, stop, num) # num ... Anzahl der Werte print("r = ", r) print("l = ", l) Ausgabe: r = [0 2 4 6 8] l = [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556 6.66666667 7.77777778 8.88888889 10. ] Bei <code>arange</code> ist der <code>stop</code>-Wert nicht im Ergebnis enthalten, bei <code>linspace</code> aber sehr wohl. == Vektoren == Vektoren sollten jedem aus der Linearen Algebra bekannt sein. === Arrays === In Python mit NumPy kann man Vektoren durch die Funktion array erzeugen. import numpy as np l1 = (-5, 3, 2) l2 = (1, 1, 4) a1 = np.array(l1) a2 = np.array(l2) a3 = a1 + a2 a4 = 2 * a2 print(a1) print(a2) print(a3) print(a3[2]) print(a4) Ausgabe: [-5 3 2] [1 1 4] [-4 4 6] 6 [2 2 8] === Zeilen- und Spaltenvektoren === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) print(z) print(s) Ausgabe: [ [-5 3 2] ] [[1] [1] [4]] === Skalarprodukt === import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) skalarprodukt = np.dot(a1, a2) print(skalarprodukt) Ausgabe: 6 === Vektorprodukt === <math>a\ast b=\left(\begin{array}{c} a_{1}\\ a_{2}\\ a_{3} \end{array}\right)\ast\left(\begin{array}{c} b_{1}\\ b_{2}\\ b_{3} \end{array}\right)=\left(\begin{array}{c} a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} \end{array}\right) </math> Python-Code: import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) vektorprodukt = np.cross(a1, a2) print(vektorprodukt) Ausgabe: [10 22 -8] === Transponierter Vektor === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) # transponierter Vektor z_tp = np.transpose(z) # transponierter Vektor s_tp = np.transpose(s) print(z_tp) print(s_tp) Ausgabe: [[-5] [ 3] [ 2]] [ [1 1 4] ] === Vektorfelder visualisieren === import matplotlib.pyplot as plt import numpy as np # Daten generieren x = np.arange(0, 10, 1) y = np.arange(0, 10, 1) X, Y = np.meshgrid(x, y) U = X * Y V = Y + X # Plotten fig, ax = plt.subplots() ax.quiver(X, Y, U, V, angles='xy') plt.show() Ausgabe: [[Datei:PythonIng_quiver1.png]] == Matrizen== import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) print(m1) Ausgabe: [[1 2 3] [4 5 6]] === Zugriff auf Matrizenelemente === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) # Element aus Zeile 2 und Spalte 3 (Achtung! Index startet bei Null) print(m1[1,2]) Ausgabe: 6 === Addition und Subtraktion von Matrizen === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) m2 = np.matrix([[0, 0, 2], [1, 3, 2]]) print(m1 + m2) print(m1 - m2) Ausgabe: [[1 2 5] [5 8 8]] [[1 2 1] [3 2 4]] === Transponierte Matrix === import numpy as np m = np.matrix([[1, 2, 3], [4, 5, 6]]) mt = np.transpose(m) print(m) print(mt) Ausgabe: [[1 2 3] [4 5 6]] [[1 4] [2 5] [3 6]] === Rang einer Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) rg = np.linalg.matrix_rank(m) print(rg) Ausgabe: 2 === Inverse Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) mi = np.linalg.inv(m) print(mi) Ausgabe: [[ 1. 0.6] [-0. -0.2]] === Multiplikation von Matrizen (falksches Schema) === import numpy as np m1 = np.matrix([[1, 3, 4], [0, -5, 1]]) m2 = np.matrix([[1, 2], [2, 3], [0, 2]]) print(m1 @ m2) Ausgabe: [[ 7 19] [-10 -13]] === Eigenwerte und Eigenvektoren === import numpy as np m = np.matrix([[5, 8], [1, 3]]) D,V = np.linalg.eig(m) # Eigenwerte print(D) # Eigenvektoren print(V) Ausgabe: [7. 1.] [[ 0.9701425 -0.89442719] [ 0.24253563 0.4472136 ]] === Teilmatrizen === import numpy as np m = np.matrix([[1, 3, 4], [0, -5, 1]]) print("m = ", m) # Erste Zeile extrahieren m1 = m[0,:] print("m1 = ", m1) # Das Element aus der 1. Zeile und der 2. Spalte extrahieren m2 = m[0,1] print("m2 = ", m2) # Zweite Spalte extrahieren m3 = m[:, 1] print("m3 = ", m3) Ausgabe: m = [[ 1 3 4] [ 0 -5 1]] m1 = [ [1 3 4] ] m2 = 3 m3 = [[ 3] [-5]] === Spezielle Matrizen === ==== Nullmatrix ==== import numpy as np z = np.zeros((3, 2)) print(z) Ausgabe: [[0. 0.] [0. 0.] [0. 0.]] ==== Einheitsmatrix ==== import numpy as np z = np.eye(3) print(z) Ausgabe: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ==== Matrix mit lauter Einsen ==== import numpy as np z = np.ones((3, 2)) print(z) Ausgabe: [[1. 1.] [1. 1.] [1. 1.]] === Spärlich besetzte Matrizen === Das Thema spärlich besetzter Matrizen wird hier nur kurz angerissen. Nähere Details siehe unter dem Weblink [https://docs.scipy.org/doc/scipy/reference/sparse.html#module-scipy.sparse]. import numpy as np import scipy A = scipy.sparse.csr_array(np.eye(5)) print(A) Ausgabe: (0, 0) 1.0 (1, 1) 1.0 (2, 2) 1.0 (3, 3) 1.0 (4, 4) 1.0 = Lineare Gleichungssysteme = Sei <math>Ax = b</math> ein lineares Gleichungssystem. <math>A</math> sei die Koeffizientenmatrix, <math>x</math> der Lösungsvektor und <math>b</math> ein bekannter Vektor. Beispiel: import numpy as np A = np.array([[5, 1], [0, 2]]) b = np.array([1, 2]) x = np.linalg.solve(A, b) print(x) Ausgabe: [0. 1.] Siehe dazu auch das Kapitel [[Ing Mathematik: Numerisches Lösen von linearen Gleichungssystemen]]. Dort wird dieses Themengebiet u.a. mit weitergehenden Python-Skripten vertieft. == Aufgabe == * Lösen Sie folgendes Gleichungssystem mittels Python (und zur Kontrolle auch händisch): 5x + 6y - 2z = 12 3x - y - 3z = 6 2x + 2y + 4z = 5 = Polynome = == Ein erstes einfaches Beispiel == Gegeben sei das Polynom <math>7x^3+5x^2+1</math>. In Python: import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p) Ausgabe: 3 2 7 x + 5 x + 1 == Einzelne Polynomwerte berechnen == import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p(1.5)) Ausgabe: 35.875 == Polynome integrieren und differenzieren == import numpy as np p = np.poly1d([7, 5, 0, 1]) # 1. Ableitung p1 = p.deriv() p2 = p.deriv(1) # 2. Ableitung p3 = p.deriv(2) # Integral p4 = p.integ() print(p1) print(p2) print(p3) print(p4) Ausgabe: 2 21 x + 10 x 2 21 x + 10 x 42 x + 10 4 3 1.75 x + 1.667 x + 1 x == Nullstellen bestimmen == import numpy as np p = np.poly1d([2, 5, 0, 4]) r = np.roots(p) print(r) Ausgabe: [-2.7621427 +0.j 0.13107135+0.84077099j 0.13107135-0.84077099j] == Aufgaben == * Berechnen Sie den Wert für x = 3 des Polynoms <math>y = 2x^4 - 3x^3 - x + 7</math>. * Differenzieren und integrieren Sie das Polynom <math>y = 2x^4 - 3x^3 - x + 7</math>. * Berechnen Sie die Nullstellen von <math>y = 7x^5 - 3x^2 + 12</math>. = Nichtlineare Gleichungen und Gleichungssysteme = == Nullstellenbestimmung == Löse eine beliebige Gleichung f(x) = 0, z.B. <math> f(x) = x^2 - 5\cos(x) - 10 = 0 </math>: import scipy import numpy as np def f(x): return x**2 - 5*np.cos(x) - 10 xstart = [-1, 1] # Startwerte xn = scipy.optimize.root(f, xstart) print(xn.x) Ausgabe: [-2.46813009 2.46813009] Funktionsgraph: [[Datei:octave_nichtlin2.jpg]] == Gleichungssysteme == SymPy ist ein externes Modul, das symbolisches Rechnen ('''Sym'''bolic '''Py'''thon) ermöglicht. Folgende Aufgabe ist dem Buch "Knorrenschild: Numerische Mathematik, Hanser, 2017, Seite 72" entnommen. Zu lösen ist das nichtlineare Gleichungssystem <math>f_1 = 2x_1 + 4x_2 = 0 </math> <math>f_2 = 4x_1 + 8x_2^3 = 0</math> Mit Python ist das so möglich: import sympy x1, x2 = sympy.symbols("x1 x2") f1 = 2*x1 + 4*x2 f2 = 4*x1 + 8*x2**3 s = sympy.solve((f1, f2), x1, x2) print(s) Ausgabe: [(-2, 1), (0, 0), (2, -1)] Plot: [[Datei:IngPython_nl_gleichung1.svg|500px]] = Komplexe Zahlen = Die imaginäre Einheit wird in Python durch den Buchstaben <code>j</code> symbolisiert. Darstellen kann man eine komplexe Zahl bekannterweise in mehreren Formen: * Kartesische Darstellung <math>z = \Re(z) + j \cdot \Im(z)</math> * Polardarstellungen <math>z = r \cdot (\cos(\phi) + j \cdot \sin(\phi)) = r \cdot e^{j\cdot \phi}</math> Die konjugiert komplexe Zahl ist <math>z^* = \Re(z) - j \cdot \Im(z)</math> Nachfolgend einige mathematische Operationen mit Python und NumPy. import numpy as np z1 = 2 + 5j # kartesische Darstellung z2 = 3 * np.exp(3j) # Polardarstellung # Addition res = z1 + z2 print("z1 + z2 = ", res) # Multiplikation res = z1 * z2 print("z1 * z2 = ", res) # Realteil res = np.real(z2) print("Realteil von z2 = ", res) # Imaginärteil res = np.imag(z2) print("Imaginaerteil von z2 = ", res) # Betrag res = np.abs(z1) print("Betrag von z1 = ", res) # Argument res = np.angle(z1) print("Argument von z1 = ", res) # Konjugiert komplexe Zahl res = np.conj(z1) print("Konjugiert komplexe Zahl von z1 = ", res) Ausgabe: z1 + z2 = (-0.9699774898013365+5.423360024179601j) z1 * z2 = (-8.05675510050068-14.003167400647481j) Realteil von z2 = -2.9699774898013365 Imaginaerteil von z2 = 0.4233600241796016 Betrag von z1 = 5.385164807134504 Argument von z1 = 1.1902899496825317 Konjugiert komplexe Zahl von z1 = (2-5j) = Interpolation = import numpy as np import scipy import matplotlib.pyplot as plt # Stützpunkte xp = np.arange(1, 6) yp = (0, -5, 2, 7, 6) ti = np.arange(1, 5, 0.01) i1 = scipy.interpolate.interp1d(xp, yp, kind = "linear") i2 = scipy.interpolate.interp1d(xp, yp, kind = "cubic") plt.plot(xp, yp, "rx") plt.plot(xp, i1(xp)) plt.plot(ti, i2(ti)) plt.show() Ausgabe: [[Datei:PythonIng_interpol1.png]] = Differenzialrechnung = == Numerisches Differenzieren == Als Beispiel differenzieren wir <math>y = 5x\sin{x}</math> und stellen das Ganze grafisch dar. from findiff import Diff import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 1000) f = 5 * x * np.sin(x) dx = x[1] - x[0] # Ableitung d_dx = Diff(0, dx) df_dx = d_dx(f) # Grafik plt.plot(x, f, label = "y") plt.plot(x, df_dx, label = "y'") plt.grid() plt.legend(loc="best") plt.show() Ausgabe: [[Datei:octave_diff1.jpg]] <small>findiff ist ein externes Modul. Dieses muss installiert werden (z.B. so: ...\Python\Scripts\pip.exe install --upgrade findiff). Für die Vorgehensweise unter openSUSE Tumbleweed siehe das Kapitel [[Ing_Mathematik:_Python#Mit_VPython | VPython]], nur dass das Ganze mit einer aktuelleren Python-Version exekutiert wird, z.B. mit Python 3.13. Das im Buch "Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler, Rheinwerk" verwendete Modul "scipy.misc" ist veraltet (deprecated ... missbilligt). Lt. [https://docs.scipy.org/doc/scipy-1.17.0/dev/roadmap-detailed.html#misc SciPy-Dokumentation für die Version 1.17.0] wurden alle entsprechenden Features schon entfernt.</small> == Symbolisches Differenzieren == Differenzieren Sie die Funktionen <math>f_1(x) = x^2</math> und <math>f_2(x) = \sin(x)\cos\left(\frac{x}{2}\right)</math>. import sympy x = sympy.symbols("x") f1 = x**2; f2 = sympy.sin(x) * sympy.cos(x/2.) d1 = sympy.diff(f1, x) d2 = sympy.diff(f2, x) print(d1) print(d2) Ausgabe: 2*x -0.5*sin(0.5*x)*sin(x) + cos(0.5*x)*cos(x) == Aufgaben == * Differenzieren Sie die Funktion <math>y = \log(x) + 10x</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. * Differenzieren Sie die Funktion <math>y = \frac{\sinh(x)}{(1+x)}</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. = Integralrechnung = == Numerisches Integrieren == Berechnen Sie das Integral <math>\int_{0}^{3}x^2 dx</math>. import scipy def f(x): return x**2 i = scipy.integrate.quad(f, 0, 3) print(i) Ausgabe: (9.000000000000002, 9.992007221626411e-14) Das trifft den exakten Wert 9.0 ziemlich genau. Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} dx</math>. import scipy import numpy as np def f(x): return 2**(-x) i = scipy.integrate.quad(f, 0, np.inf) print(i) Ausgabe: (1.4426950408889556, 4.486558477977586e-09) == Symbolisches Integrieren == Berechnen Sie <math>\int x^2 \text{d}x</math> und <math>\int \sin{x}\cos{\frac{x}{2}} \text{d}x</math>. import sympy x = sympy.symbols("x") f1 = x**2 f2 = sympy.sin(x) * sympy.cos(x/2.) i1 = sympy.integrate(f1, x) i2 = sympy.integrate(f2, x) print(i1) print(i2) Ausgabe: x**3/3 -0.666666666666667*sin(0.5*x)*sin(x) - 1.33333333333333*cos(0.5*x)*cos(x) Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} \text{d}x</math>. import sympy x = sympy.symbols("x") f = 2**(-x) i = sympy.integrate(f, (x, 0, sympy.oo)) print(i) Ausgabe: 1/log(2) <code>sympy.oo</code> steht für das {{W|Unendlichzeichen}} <math>\infty</math> (die liegende Acht oder das Möbiusband). Mit <code>sympy.pprint(i)</code> ließe sich letzere Ausgabe etwas schöner schreiben: 1 ────── log(2) Man beachtete, <code>log</code> steht hier für den natürlichen Logarithmus <code>ln</code>. == Aufgaben == * Integrieren Sie die Funktion <math>y = \log(x) + 10x</math> von 1 bis 5. * Integrieren Sie die Funktion <math>y = x^3</math> von 0 bis 4. * Integrieren Sie <math>\int x^x(\log (x) + 1)\mathrm dx</math> symbolisch. = Gewöhnliche Differenzialgleichungen = == DGL numerisch lösen == Für die Lösung von Differenzialgleichungen steht u.a. die Funktion scipy.integrate.solve_ivp() zur Verfügung. Diese Funktion implementiert auch das Runge-Kutta-Verfahren (RK45). {{Wikipedia | Runge-Kutta-Verfahren}} Beispiel <math>y' = x^2 + y^3</math>: import scipy import numpy as np import matplotlib.pyplot as plt def dy_dx(x, y): return x**2 + y**3 y0 = [1] xi = [0, 1] x = np.arange(0, 1, 0.01) z = scipy.integrate.solve_ivp(dy_dx, xi, y0, method="RK45", dense_output=True) y = z.sol(x) plt.plot(x, y.T) plt.grid() plt.show() [[Datei:PythonIng_dgl1.png]] == DGL symbolisch lösen == Beispiel <math>y' = x^2 + y^3</math>: import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) print(lsg) Ausgabe: [Eq(f(x), (-x**2)**(1/3)), Eq(f(x), (-x**2)**(1/3)*(-1 - sqrt(3)*I)/2), Eq(f(x), (-x**2)**(1/3)*(-1 + sqrt(3)*I)/2)] Mit <code>sympy.pprint</code> (pretty print) lässt sich die Ausgabe etwas übersichtlicher darstellen. import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) sympy.pprint(lsg) Ausgabe: ⎡ _____ _____ ⎤ ⎢ _____ 3 ╱ 2 3 ╱ 2 ⎥ ⎢ 3 ╱ 2 ╲╱ -x ⋅(-1 - √3⋅ⅈ) ╲╱ -x ⋅(-1 + √3⋅ⅈ)⎥ ⎢f(x) = ╲╱ -x , f(x) = ────────────────────, f(x) = ────────────────────⎥ ⎣ 2 2 ⎦ == Aufgaben == * Lösen Sie die Differenzialgleichung <math>y' = \frac{1}{x\cdot y}</math> mit Python. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>m' = -k\cdot m</math>. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>y' = \sqrt{|y|}</math>. =Laplace-Transformation= Laplace-Transformation: <math>F(s) =\mathcal{L} \left\{f\right\}(s) = \int_{0}^{\infty} f(t) \mathrm e^{-st} \,\mathrm{d}t, \qquad s\in\mathbb{C} </math> Inverse Laplace-Transformation: <math>\mathcal{L}^{-1} \left\{F\right\}(t) = \frac{1}{2 \pi \mathrm j} \int_{ \gamma - \mathrm j \infty}^{ \gamma + \mathrm j \infty} \mathrm e^{st} F(s)\,\mathrm ds = \begin{cases} f(t) & \text{für } t \geq 0 \\ 0 & \text{für } t < 0 \end{cases} </math> Siehe auch [[Ing_Mathematik:_Laplace-Transformation]] Code: import sympy from sympy.abc import t, s # Laplace-Transformation der Funktion f(t) = 1 (Heaviside-Fkt.) f = 1 # alternativ: f = sympy.Heaviside(t) F = sympy.laplace_transform(f, t, s, noconds=True) print("Laplace-Transformierte F(s):", F) # Inverse Laplace-Transformation zurück in den Zeitbereich f_inv = sympy.inverse_laplace_transform(F, s, t) print("Inverse Transformation f(t):", f_inv) Ausgabe: Laplace-Transformierte F(s): 1/s Inverse Transformation f(t): Heaviside(t) Die Zeile from sympy.abc import t, s steht alternativ für t = sympy.symbols("t") s = sympy.symbols("s") =Fourier-Reihen= <math> f(x)\approx \frac{a_{0}}{2}+\sum_{k=1}^{\infty}\left(a_{k}\cos\left(kx\right)+b_{k}\sin\left(kx\right)\right) </math> <math> a_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\cos\left(kx\right)\mathrm dx\quad\text{für }k\geq0 </math> <math> b_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\sin\left(kx\right)\mathrm dx\quad\text{für }k\geq1 </math> Für die Sägezahnfunktion <math>y=x;\, 0 < x < 2\pi</math> sei die Fourierreihe mit einem Python-Programm (unter Mithilfe von sympy) hergeleitet. Code: from sympy import fourier_series, pi, symbols, pprint x = symbols('x') f = x s = fourier_series(f, (x, 0, 2*pi)) pprint(s.truncate(n=4)) Ausgabe: 2⋅sin(3⋅x) -2⋅sin(x) - sin(2⋅x) - ────────── + π 3 Siehe auch [[Ing Mathematik: Fourierreihen]]. Ein komplizierteres Beispiel: [[Datei:IngMath fourier bsp13.svg | 300px]] <math>0\le t < T/2\text{:}\quad f(t) = H</math> <math>T/2 \le t \le T\text{:}\quad f(t) = \frac{2H}{T}\left( t-\frac{T}{2}\right)</math> Code: import sympy as sp H = sp.Symbol('H', positive=True) T = sp.Symbol('T', positive=True) t = sp.Symbol('t') f = sp.Piecewise( (H, (t > 0) & (t < T/2)), (2*H/T*(t-T/2), (t > T/2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Ausgabe: ⎛2⋅π⋅t⎞ ⎛4⋅π⋅t⎞ ⎛6⋅π⋅t⎞ ⎛2⋅π⋅t⎞ ⎛6⋅π⋅t⎞ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ 2⋅H⋅cos⎜─────⎟ 2⋅H⋅cos⎜─────⎟ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ 3⋅H ──────────── - ──────────── + ──────────── + ────────────── + ────────────── + ─── π 2⋅π 3⋅π 2 2 4 π 9⋅π =Rechnen mit wirklich großen Zahlen= Bekannt ist, dass Python kaum Einschränkungen beim Wertebereich von Ganzzahlen hat, z.B. print(10**300) Ausgabe (gekürzt): 100000000000000000000...00000000000000000000000000000000000000000000000000000000000000000000000 Ähnliches geht auch mit Gleitpunktzahlen, z.B. durch die Verwendung des Moduls mpmath: import mpmath print(mpmath.mpf(1500.4)**mpmath.mpf(300)) Ausgabe: 7.27975299218612e+952 Anderes Beispiel: from mpmath import mp, pi mp.dps = 100 print(pi) Ausgabe: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068 mpmath kann noch einiges mehr, dazu sei aber auf die entsprechende Dokumentation auf der mpmath-Homepage verwiesen. mpmath ist Bestandteil von SymPy, kann aber auch separat installiert werden. Aber auch Python selbst besitzt eine Möglichkeit, um mit großen bzw. exakten Gleitpunktzahlen zu rechnen, nämlich das interne Modul decimal. Dieses hat einige Vorteile gegenüber mpmath, aber auch gravierende Nachteile. Diese seien hier nicht detailliert aufgezählt. Grob gesagt hat decimal im Finanzwesen seine Berechtigung. Für wissenschaftliche Anwendungen wird aber mpmath vorzuziehen sein, da es u.a. vielfältige mathematische Funktionen bereit stellt. Nachfolgend ein einfaches Beispiel mit decimal: import decimal print("Potenzierung:", decimal.Decimal(1500.4) ** decimal.Decimal(300.0)) print("Einfache Addition:", 0.1 + 0.2) decimal.getcontext().prec = 50 print("Addition mit decimal:", decimal.Decimal("0.1") + decimal.Decimal("0.2")) Ausgabe: Potenzierung: 7.279752992186121551039839134E+952 Einfache Addition: 0.30000000000000004 Addition mit decimal: 0.3 <u>Aufgabe:</u> Recherchieren Sie im Internet die genauen Vor- und Nachteile von decimal und mpmath. Verwenden Sie dazu auch KI (z.B. von Google, chatgpt). =Regelungstechnische Aufgabenstellungen= Für regelungstechnische Aufgaben gibt es u.a. das externe Paket <code>control</code>. Hier soll nicht detailliert darauf eingegangen werden. Anhand eines Beispiels soll anschließend nur die Visualisierung in Form eines Bode-Diagramms und der Sprungantwort gezeigt werden. Gegeben sei ein P-Regler mit <math>R = \frac{5}{2}</math> und eine Strecke <math>S= \frac{1}{30s^3+20s^2+10s+1,5}</math>. Gesucht sei vorerst ein Bode-Diagramm für den offenen Regelkreis und das Führungsverhalten. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke # oder: G0 = ct.series(regler, strecke) Gw = ct.feedback(G0) ct.bode_plot(G0, label='G0') ct.bode_plot(Gw, label='Gw') plt.show() [[Datei:PythonIng_bode1.svg]] Nun noch für obiges Beispiel die Sprungantwort. Diese zeigt einige große Überschwinger, d.h. der Regler kann sicher noch optimiert werden. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke Gw = ct.feedback(G0) t, y = ct.step_response(Gw) plt.plot(t,y) plt.title('Sprungantwort') plt.xlabel('t') plt.ylabel('h(t)') plt.grid() plt.show() [[Datei:PythonIng_bode3.svg]] Einige weitere wichtige Daten (Phasenreserve, Amplitudenreserve, Durchtrittsfrequenz) lassen sich mittels der <code>control</code>-Funktion <code>margin()</code> ermitteln. Die Ortskurve lässt sich mit der Funktion <code>nyquist_plot()</code> zeichnen. Dies sei hier aber nicht weiter ausgeführt. ==Aufgaben== * Zeichen Sie mit Python die Ortskurve für obiges Beispiel. * Was passiert, wenn man die Reglerverstärkung weiter aufdreht (z.B. auf <math>R = \frac{25}{2}</math>)? * Wie sehen das Bode-Diagramm und die Sprungantwort aus, wenn ein PI-Regler verwendet wird? = Stereostatik etc. = Das Modul SymPy bietet einige Möglichkeiten einfache Bauwerke zu berechnen, z.B. Balken oder Fachwerke. Nachfolgend wird ein einfaches Fachwerk berechnet und gezeichnet. Python-Code: from sympy.physics.continuum_mechanics.truss import Truss t = Truss() # Knoten t.add_node(("A", -3, 0), ("B", 0, 0), ("C", 4, 0), ("D", 7, 0), ("E", 6, 1.5), ("F", 2, 3), ("G", -2, 1.5)) # Stäbe t.add_member(("AB","A","B"), ("BC","B","C"), ("CD","C","D")) t.add_member(("AG","A","G"), ("GB","G","B"), ("GF","G","F")) t.add_member(("BF","B","F"), ("FC","F","C"), ("CE","C","E")) t.add_member(("FE","F","E"), ("DE","D","E")) # Auflager; roller ... Loslager, pinned ... Festlager t.apply_support(("A","roller"), ("D","pinned")) # Einwirkende Kräfte t.apply_load(("G", 5, 270), ("E", 3, 90)) # Berechnung t.solve() print("Reaction Forces: ", t.reaction_loads) print("Internal Forces: ", t.internal_forces) # Fachwerk zeichnen p = t.draw() p.show() Ausgabe auf der Konsole: Reaction Forces: {'R_A_y': 4.20000000000000, 'R_D_x': 0, 'R_D_y': -2.20000000000000} Internal Forces: {'AB': 2.80000000000000, 'BC': 0.333333333333333, 'CD': -1.46666666666667, 'AG': -5.04777178564958, 'GB': -2.05555555555556, 'GF': -1.23413387432364, 'BF': 0.411111111111111*sqrt(13), 'FC': -0.3*sqrt(13), 'CE': 1.50000000000000, 'FE': 0.284800124843917, 'DE': 2.64407093534026} Zeichnung: [[File:PythonIng_fachwerk1.svg|300px]] Details zu diesem Thema siehe z.B. [https://docs.sympy.org/latest/modules/physics/continuum_mechanics/index.html Continuum Mechanics] oder [https://docs.sympy.org/latest/tutorials/physics/continuum_mechanics/index.html Continuum Mechanics Tutorials]. Auch andere mechanische Probleme werden von SymPy abgehandelt ([https://docs.sympy.org/latest/tutorials/physics/index.html Physics Tutorials]). == Aufgabe == Gegeben sei ein einseitig eingespannter Kragträger. Belastet wird er durch eine Einzellast am Trägerende. Für die Daten siehe folgende ASCII-Skizze: | 20 kN //|---> x | //| V //|---------------------- //| 10 m | Elastizitätsmodul E = 2,1*10⁵ N/mm² Flächenträgheitsmoment I = 0.001 m⁴ Berechnen Sie die Auflagerreaktionen, den Querkraft- und Biegemomentenverlauf, sowie die Verformungen. Stellen Sie dies mit Hilfe von SymPy graphisch und auch mittels Formeln dar. Verwenden Sie dazu auch pprint (pretty print) aus dem SymPy-Modul. Zwecks Lösungsansatz siehe die oben aufgeführte Seite "Continuum Mechanics Tutorials". Achten Sie auch auf die Einheiten! Kontrollieren Sie das Ganze mittels händischer Rechnung. In dem genannten Tutorial ist von "Singularity Functions" die Rede. Gemeint ist damit in diesem Kontext die {{W|Föppl-Klammer}}. Einige Python-Programme, vorrangig zu Maschinenelementen, finden sich auf [https://baymp.de/download_python.html BayMP für Python] (Balken, Zahnräder, Stabknickung usw.). =Thermodynamik= == PYroMat == Für thermodynamische Aufgabenstellungen gibt es verschiedene externe Module. Eines davon ist PYroMat (siehe auch [http://pyromat.org]). Damit lassen sich thermodynamische Stoffdaten für viele Substanzen berechnen. Beispiel (einige Stoffdaten für Wasser bei 400°C und 20 bar berechnen): import pyromat as pm # Wasserdaten laden: H2O = pm.get('mp.H2O') # Stoffdaten berechnen: T = 673.15 # Temperatur in Kelvin p = 20 # Druck in bar v = H2O.v(T, p) h = H2O.h(T, p) s = H2O.s(T, p) print(f"Spezifisches Volumen: {v} m³/kg") print(f"Spezifische Enthalpie: {h} kJ/kg") print(f"Spezifische Entropie: {s} kJ/(kg K)") Ausgabe: Spezifisches Volumen: [0.1512163] m³/kg Spezifische Enthalpie: [3248.3789473] kJ/kg Spezifische Entropie: [7.12924142] kJ/(kg K) <small> PYroMat muss vorab installiert werden (z.B. mittels pip, in eine virtuelle Umgebung) </small> <code>mp</code> steht für "multi phase". Für ein ideales Gas wäre <code>ig</code> zuständig, z.B. <code>'ig.O2'</code>. Beispiel (T-s-Diagramm für Wasser zeichnen): import numpy as np import matplotlib.pyplot as plt import pyromat as pm # Konfigurieren pm.config["unit_pressure"] = "bar" pm.config["unit_temperature"] = "K" fluid = pm.get("mp.H2O") # Temperaturbereich für das Nassdampfgebiet T_tripel = 273.16 T_crit = 647.096 T = np.linspace(T_tripel, T_crit - 0.1, 200) # Sättigungslinien berechnen und zeichnen for x in np.linspace(0.0, 1.0, 5): s = fluid.s(T=T, x=x) if(x<=0.0): plt.plot(s, T, label="Siedelinie x=%3.1f" % x, linewidth=2.0) elif(x>=1.0): plt.plot(s, T, label="Taulinie x=%3.1f" % x, linewidth=2.0) else: plt.plot(s, T, label="x=%3.1f" % x, linewidth=1.0) # Isobaren zeichnen p_values = [0.1, 1, 10, 50, 100] T_isobar = np.linspace(T_tripel, 1000, 200) t = 0.7 for p in p_values: s_iso = fluid.s(T=T_isobar, p=p) plt.plot(s_iso, T_isobar, 'k-', alpha=0.8, linewidth=0.8) t += .05 idx = int(len(s_iso) * t) plt.text(s_iso[idx], T_isobar[idx], f"{p} bar", fontsize=9, alpha=0.8) # Diagramm zeichnen plt.title("T-s-Diagramm für Wasser") plt.xlabel("Spezifische Entropie s in kJ/kg K", fontsize=10) plt.ylabel("Temperatur T in K", fontsize=10) plt.legend(loc="best") plt.grid(True) plt.show() Ausgabe (in etwa so): [[Datei:T-s-Diagramm fuer Wasser.svg|400px]] == CoolProp == Auch mit CoolProp können Stoffdaten berechnet werden. Siehe auch [https://coolprop.org/coolprop/wrappers/Python/index.html] Beispiel (Wasser bei 20bar und 400°C): import CoolProp.CoolProp as CP fluid = 'Water' T = 673.15 # Temperatur in Kelvin P = 20e5 # Druck in Pascal dichte = CP.PropsSI('D', 'T', T, 'P', P, fluid) enthalpie = CP.PropsSI('H', 'T', T, 'P', P, fluid) entropie = CP.PropsSI('S', 'T', T, 'P', P, fluid) print(f"Spez. Volumen: {1/dichte:.6f} m³/kg") print(f"Spez. Enthalpie: {enthalpie:.2f} J/kg") print(f"Spez. Entropie: {entropie:.2f} J/kgK") Ausgabe: Spez. Volumen: 0.151215 m³/kg Spez. Enthalpie: 3248344.02 J/kg Spez. Entropie: 7129.16 J/kgK == iapws == Um Werte für Wasser(dampf) zu erhalten (IAPWS; '''I'''nternational '''A'''ssociation for the '''P'''roperties of '''W'''ater and '''S'''team) gibt es die Bibliothek iapws. Siehe auch [https://iapws.org/] und [https://pypi.org/project/iapws/] Beispiel (Wasser für 20bar und 400°C): from iapws import IAPWS97 dampf = IAPWS97(P=2.0, T=673.15) print(f"Spezifisches Volumen: {dampf.v:.6f} m³/kg") print(f"Spezifische Enthalpie: {dampf.h:.2f} kJ/kg") print(f"Spezifische Entropie: {dampf.s:.4f} kJ/(kgK)") print(f"Phase: {dampf.phase}") Ausgabe: Spezifisches Volumen: 0.151208 m³/kg Spezifische Enthalpie: 3248.23 kJ/kg Spezifische Entropie: 7.1290 kJ/(kgK) Phase: Gas == TESPy == Ein anderes Modul für einen anderen Aufgabenzweck ist TESPy ('''T'''hermal '''E'''ngineering '''S'''ystems in '''Py'''thon). Dieses Modul ist für die Anlagensimulation zuständig. Für nähere Informationen siehe [https://tespy.readthedocs.io/en/main/getting_started/introduction.html]. Als Beipiel sei hier vorerst Code, der von der Google KI generiert wurde, angeführt. Der Code wurde überarbeitet, damit keine Warnungen auftreten. Bitte aber den Code trotzdem mit Vorsicht genießen, auch KI-generierter Code kann Fehler aufweisen. Eine Pumpe wird berechnet: from tespy.components import Sink, Source, Pump from tespy.connections import Connection from tespy.networks import Network # 1. Netzwerk definieren (Zentrales Steuerungselement) # Wir wählen Wasser als Fluid und bar/Celsius als Einheiten nw = Network(fluids=["water"]) nw.units.set_defaults(pressure="bar", pressure_difference="bar", temperature="°C", enthalpy="kJ / kg") # 2. Komponenten erstellen eingang = Source("Wasserquelle") ausgang = Sink("Wasserspeicher") pumpe = Pump("Speisewasserpumpe") # 3. Verbindungen definieren (Komponenten miteinander verknüpfen) c1 = Connection(eingang, "out1", pumpe, "in1") c2 = Connection(pumpe, "out1", ausgang, "in1") # Verbindungen dem Netzwerk hinzufügen nw.add_conns(c1, c2) # 4. Randbedingungen und Parameter festlegen # Zustand am Eingang (Druck, Temperatur, Massenstrom, Fluid-Zusammensetzung) c1.set_attr( v=1, # Massenstrom: 1 kg/s T=20, # Temperatur: 20 °C p=1, # Druck: 1 bar fluid={"water": 1}, # 100% Wasser ) # Zustand am Ausgang / Zielwerte der Pumpe c2.set_attr(p=10) # Ziel-Druck nach der Pumpe: 10 bar # Pumpeneigenschaften festlegen pumpe.set_attr(eta_s=0.8) # Isentroper Wirkungsgrad von 80% # 5. Simulation ausführen nw.solve(mode="design") # 6. Ergebnisse ausgeben nw.print_results() # Spezifische Werte direkt auslesen print("\n--- Auswertung ---") print(f"Erforderliche Pumpenleistung: {pumpe.P.val / 1000:.2f} kW") print(f"Temperatur nach der Pumpe: {c2.T.val:.2f} °C") Ausgabe (gekürzt): iter | residual | progress | massflow | pressure | enthalpy | fluid | component -------+------------+------------+------------+------------+------------+------------+------------ 1 | 7.04e+04 | 12 % | 9.96e+02 | 0.00e+00 | 8.81e+04 | 0.00e+00 | 0.00e+00 2 | 5.91e-12 | 100 % | 1.11e-13 | 0.00e+00 | 7.39e-12 | 0.00e+00 | 0.00e+00 3 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 4 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 Total iterations: 4, Calculation time: 0.01 s, Iterations per second: 480.85 ##### RESULTS (Pump) ##### +-------------------+----------+----------+-----------+----------+----------+----------+ | | P | pr | dp | eta | eta_s | head | |-------------------+----------+----------+-----------+----------+----------+----------| | Speisewasserpumpe | 1.12e+06 | 1.00e+01 | -9.00e+00 | 8.00e-01 | 8.00e-01 | 9.19e+01 | +-------------------+----------+----------+-----------+----------+----------+----------+ ... ... --- Auswertung --- Erforderliche Pumpenleistung: 1124.77 kW Temperatur nach der Pumpe: 20.07 °C = Stochastik = Die {{W|Stochastik}} ist ein sehr weites Feld. Hier werden etliche wichtige Themen kurz angerissen. Python stellt mit den Moduln math und statistics Software zu diesem Zwecke bereit. math und statistics sind bereits im Lieferumfang von Python enthalten. Aber auch mit den externen Modulen NumPy, SciPy, stochastic und pandas kann man Stochastik in Python betreiben. Die Theorie der Wahrscheinlichkeitsrechnung und Statistik soll etwas später in Band 5 dieser Buchreihe behandelt werden. == Lageparameter == import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] m1 = statistics.mean(werte) m2 = statistics.mode(werte) m3 = statistics.median(werte) print("Arithmetischer Mittelwert = ", m1) print("Modalwert = ", m2) print("Median = ", m3) Ausgabe: Arithmetischer Mittelwert = 3.5 Modalwert = 1 Median = 3.0 == Streuungsparameter == Beispiel (Berechnung der Standardabweichung): import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] s = statistics.stdev(werte) print("Standardabweichung = ", s) Ausgabe: Standardabweichung = 2.6770630673681683 Beispiel (Berechnung des Variationskoeffizienten V = Standardabweichung/Mittelwert) import numpy as np from scipy import stats import statistics k = 50 dat1 = [14, 21, 18, 25, 30, 17, 20] dat = np.array(dat1) # Mit SciPy v = stats.variation(dat) vddof = stats.variation(dat, ddof=1) print("V SciPy: ", v) print("V DDOF SciPy: ", vddof) print(k*"-") # mit NumPy mittelwert1 = np.mean(dat) std_abw1 = np.std(dat) std_abw1ddof = np.std(dat, ddof=1) v1= std_abw1 / mittelwert1 v1ddof = std_abw1ddof / mittelwert1 print("Mittelwert NumPy: ", mittelwert1) print("Std.abw. NumPy: ", std_abw1) print("Std.abw. DDOF NumPy: ", std_abw1ddof) print("V NumPy: ", v1) print("V DDOF NumPy: ", v1ddof) print(k*"-") # nur mit reinem Python mittelwert2 = statistics.mean(dat1) std_abw2 = statistics.stdev(dat1) v2 = std_abw2 / mittelwert2 print("Mittelwert Python: ", mittelwert2) print("Std.abw. Python: ", std_abw2) print("V Python:", v2) print(k*"-") Ausgabe: V SciPy: 0.23890355966467272 V DDOF SciPy: 0.25804533701889254 -------------------------------------------------- Mittelwert NumPy: 20.714285714285715 Std.abw. NumPy: 4.948716593053935 Std.abw. DDOF NumPy: 5.3452248382484875 V NumPy: 0.23890355966467272 V DDOF NumPy: 0.2580453370188925 -------------------------------------------------- Mittelwert Python: 20.714285714285715 Std.abw. Python: 5.3452248382484875 V Python: 0.2580453370188925 -------------------------------------------------- Der Unterschied bei der Standardabweichung zwischen reinem Python und den externen Bibliotheken SciPy und NumPy entsteht dadurch, dass einmal durch (n-1) und das andere Mal nur durch n dividiert wird. Dies kann bei NumPy und SciPy dadurch entschärft werden, indem <code>ddof=1</code> gesetzt wird. ddof steht für '''D'''elta '''D'''egrees '''o'''f '''F'''reedom. <small>Je größer die Anzahl der Datensätze n wird, umso weniger spielt das eine Rolle.</small> == Kombinatorik == Beispiel: import math n = 7 k = 5 print("n! = ", math.factorial(n)) print("Kombinationen (n über k) = ", math.comb(n, k)) Ausgabe: n! = 5040 Kombinationen (n über k) = 21 Siehe zu diesem Thema auch [[Ing Mathematik: Permutationen, Kombinationen, binomischer Lehrsatz]]. Die Anzahlen lassen sich einfach aus den dortigen Formeln ermitteln, z.B. bei Permutationen mit <math>n!</math> oder Variationen mit Wiederholungen als <math>n^k</math>. Will man die Kombinationen oder Variationen aber auch als Liste ausgeben, so kann das Modul <code>itertools</code> nützlich sein. Beispiel (Variationen ohne Wiederholung): from itertools import permutations menge = ["A", "B", "C", "D"] # n = 4 k = 3 variationen = list(permutations(menge, k)) for v in variationen: print("".join(v)) print(50*"-") print(len(variationen)) Ausgabe (gekürzt): ABC ABD ACB ... DCA DCB -------------------------------------------------- 24 Siehe zum Modul <code>itertools</code> auch die Website [https://docs.python.org/3/library/itertools.html]. * Variationen mit Wiederholung: <code>itertools.product()</code> * Kombinationen ohne Wiederholung: <code>itertools.combinations()</code> * Kombinationen mit Wiederholung: <code>itertools.combinations_with_replacement()</code> == Zufallszahlen == Beispiel: import random # Ganzzahlige Zufallszahl von 1 bis 10 zufallszahl1 = random.randint(1, 10) # Gleitpunktzahlen # zwischen 0.0 und 1.0 zufallszahl2 = random.random() # Zahl zwischen 1.5 und 9.5 zufallszahl3 = random.uniform(1.5, 9.5) # aus Liste auswählen farbe = ["Rot", "Grün", "Blau"] zufallswert = random.choice(farbe) print(zufallszahl1) print(zufallszahl2) print(zufallszahl3) print(zufallswert) Ausgabe, z.B.: 5 0.14147945849015753 6.894003397570905 Rot Benötigt man mehrere Zufallszahlen, so ist das Modul <code>numpy</code> zu bevorzugen, z.B.: * Normalverteilung: <code>np.random.normal(...)</code> * Gleichverteilung: <code>np.random.uniform(...)</code> == Histogramm == Zum Thema Histogramm siehe {{W|Histogramm}}. Beispiel (mit Matplotlib): import matplotlib.pyplot as plt import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) plt.hist(daten, bins=25, edgecolor='darkgray') plt.show() Ausgabe: [[Datei:IngMath_histogramm.svg|300px]] Beispiel (mit Seaborn): import matplotlib.pyplot as plt import seaborn as sns import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) sns.set_theme(style="darkgrid") sns.histplot(data=daten) plt.show() Ausgabe: [[Datei:IngMath_histogramm2.svg|300px]] Das Kürzel <code>sns</code> ist Konvention und steht für die fiktive Figur '''S'''amuel '''N'''orman '''S'''eaborn aus der US-Fernsehserie {{W|The West Wing – Im Zentrum der Macht | The West Wing}}. == Box-Plot == [[File:Elements of a boxplot.svg|400px]] Siehe auch {{W|Box-Plot}}. Beispiel (mit Seaborn erstellt): import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset("tips") sns.boxplot(data=df, x="day", y="tip", hue="day", legend=False) plt.show() Ausgabe: [[Datei:IngMath_boxplot.svg|400px]] Beispiel (mit Matplotlib erstellt): import matplotlib.pyplot as plt daten = [12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25] plt.boxplot(daten, patch_artist=True) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() Ausgabe: [[Datei:IngMath_boxplot2.svg|300px]] Um mehrere Box-Plots unterschiedlicher Farbe mit Matplotlib in einem Diagramm zu zeichnen, können Sie folgendermaßen vorgehen: import matplotlib.pyplot as plt daten = [[12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25], [10, 19, 20, 21, 20, 30, 19, 40, 11, 17, 19, 21]] farben = ["green", "blue"] boxplot = plt.boxplot(daten, patch_artist=True) for patch, farbe in zip(boxplot['boxes'], farben): patch.set_facecolor(farbe) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() == Regressionsrechnung == Beispiel: import numpy as np import matplotlib.pyplot as plt # Messpunkte x = np.array([1, 3, 5, 6, 8, 10, 20]) y = np.array([3, 4, 5, 5, 7, 9, 11]) # Regressionskurve (Grad 1 = lineare Regression, 2 = Polynom-Regression 2. Gr.) # y = kx + d k, d = np.polyfit(x, y, deg=1) # y = ax**2 + bx + c a, b, c = np.polyfit(x, y, deg=2) x_l = np.linspace(1, 20, 100) y_p = a * x_l**2 + b * x_l + c # Zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.plot(x, k*x + d, color='blue', label='Regressionsgerade') plt.plot(x_l, y_p, color='red', label='Regressionspolynom 2. Gr.') plt.xlabel('x') plt.ylabel('y') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: [[Datei:IngMath_regression.svg|400px]] == Korrelationsrechnung == Beispiel: import pandas as pd import matplotlib.pyplot as plt # Messdaten x = [1, 3, 4, 5, 6] y = [2, 4, 6, 8, 5] daten = {'X': x, 'Y': y} df = pd.DataFrame(daten) # Korrelation korr = df['X'].corr(df['Y']) print(f"Korrelationskoeff.: {korr}") # Messpunkte zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: Korrelationskoeff.: 0.7556096518348252 [[Datei:IngMath_korrelation.svg|300px]] == Mengen und Venn-Diagramme == Beispiel: import matplotlib.pyplot as plt from matplotlib_venn import venn2 menge_a = {1, 2, 3, 4, 5, 6} menge_b = {4, 5, 6, 7, 8} vereinigung = menge_a | menge_b schnitt = menge_a & menge_b print("Vereinigungsmenge = ", vereinigung) print("Schnittmenge = ", schnitt) venn2([menge_a, menge_b], set_labels=('Menge A', 'Menge B')) plt.show() Ausgabe: Vereinigungsmenge = {1, 2, 3, 4, 5, 6, 7, 8} Schnittmenge = {4, 5, 6} [[Datei:IngMath_venn.svg|300px]] Siehe auch {{W|Mengendiagramm#Venn-Diagramme}}. == Verteilungs- und Dichtefunktion == * CDF ... '''C'''umulative '''D'''istribution '''F'''unction, Verteilungsfunktion * PDF ... '''P'''robability '''D'''ensity '''F'''unction, Dichtefunktion Beispiel (Normalverteilung): import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm my, sigma = 0, 1 x = np.linspace(-4, 4, 50) pdf = norm.pdf(x, my, sigma) cdf = norm.cdf(x, my, sigma) plt.plot(x, pdf, lw=2, label="Dichtefunktion") plt.plot(x, cdf, lw=2, label="Verteilungsfunktion") plt.legend() plt.grid() plt.show() Ausgabe: [[Datei:IngMath_cdf_pdf.svg|300px]] Beispiel (<math>\chi^2</math>-Verteilung): import numpy as np import matplotlib.pyplot as plt import scipy.stats as stats x = np.linspace(0, 20, 500) # df ... degree of freedom, Freiheitsgrad pdf = (stats.chi2.pdf(x, df=2), stats.chi2.pdf(x, df=5), stats.chi2.pdf(x, df=10)) for i in range(0,3): if(i==0): lab = "Freiheitsgrad 2" elif(i==1): lab = "Freiheitsgrad 5" else: lab = "Freiheitsgrad 10" plt.plot(x, pdf[i], label=lab, lw=2) plt.grid() plt.legend() plt.show() Ausgabe: [[Datei:IngMath_chi2.svg | 300px]] == Schätzen und Testen == === Intervallschätzung === Als Beispiel seien Daten gegeben, die von ''Dürr, Mayer: Wahrscheinlichkeitsrechnung und Schließende Statistik; 7. Aufl., Hanser, 2014, Seite 137'' stammen. Und zwar soll das 95%-Vertrauensintervall für den Mittelwert des Kaloriengehalts (kcal/100g) von Hähnchen ermittelt werden. Wir wollen das mit Python inkl. NumPy und SciPy durchführen. Die Stichprobe ist groß (50 Hähnchen): Python-Code: import numpy as np import scipy.stats as stats # Stichprobe daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203] # Parameter definieren konfidenzniveau = 0.95 mean = np.mean(daten) std = np.std(daten, ddof=1) stdfehler = stats.sem(daten) intervall = stats.norm.interval(confidence=konfidenzniveau, loc=mean, scale=stdfehler) print(f"Mittelwert: {mean}") print(f"Standardabweichung: {std}") print(f"Konfidenzintervall: {intervall}") Ausgabe: Mittelwert: 215.48 Standardabweichung: 33.14238915925757 Konfidenzintervall: (np.float64(206.29356722321992), np.float64(224.66643277678006)) Diese Werte stimmen gerundet mit denen im genannten Buch überein. Zum Code selbst: * sem steht für '''s'''tandard '''e'''rror of the '''m'''ean. * <code>scipy.stats.norm</code> ... Modul für die Normalverteilung. === Punktschätzung === Gleiche Daten wie oben bei der Intervallschätzung. Python-Code: import numpy as np from scipy import stats daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203 ] mu_hat, sigma_hat = stats.norm.fit(daten) print(f"Schätzer für den Erwartungswert (μ): {mu_hat:.4f}") print(f"Schätzer für die Standardabweichung (σ): {sigma_hat:.4f}") Ausgabe: Schätzer für den Erwartungswert (μ): 215.4800 Schätzer für die Standardabweichung (σ): 32.8093 === Hypothesentests === Beispiel: import numpy as np import scipy.stats as stats x_quer = 12.075 # Stichproben-Mittelwert var = 0.069 # Stichproben-Varianz n = 90 # Stichprobengröße my_0 = 12.0 # Nullhypothese alpha = 0.05 # Signifikanzniveau z_stat = (x_quer - my_0) / np.sqrt(var / n) p_val = 2 * (1 - stats.norm.cdf(np.abs(z_stat))) print(f"Z-Statistik: {z_stat:.4f}") if p_val < alpha: print(f"p-Wert: {p_val:.6f} < alpha:", alpha) print("Die Nullhypothese wird verworfen.") else: print(f"p-Wert: {p_val:.6f} > alpha:", alpha) print("Die Nullhypothese wird nicht verworfen.") Ausgabe: Z-Statistik: 2.7087 p-Wert: 0.006755 < alpha: 0.05 Die Nullhypothese wird verworfen. == Statistische Qualitätskontrolle == Beispiel (Mittelwertkarte): import numpy as np import matplotlib.pyplot as plt # Gegeben sollwert = 50.0 varianz = 4.0 stichproben_umfang = 1 daten = [49.5, 50.2, 53.0, 48.1, 52.6, 53.4, 49.8] # Berechnung standardabweichung = np.sqrt(varianz) streuung = standardabweichung / np.sqrt(stichproben_umfang) cl = sollwert ucl = cl + 3 * streuung lcl = cl - 3 * streuung # Darstellung plt.plot(daten, marker='o', linestyle='-', color='b', label='Messdaten') plt.axhline(cl, color='green', linestyle='-', label=f'CL: {cl}') plt.axhline(ucl, color='red', linestyle='--', label=f'UCL: {ucl:.2f}') plt.axhline(lcl, color='red', linestyle='--', label=f'LCL: {lcl:.2f}') plt.title('Mittelwertkarte') plt.xlabel('Stichprobe') plt.ylabel('Wert') plt.legend(loc='lower left') plt.grid(True) plt.show() Ausgabe: [[Datei:IngMath_mittelwertkarte.svg|300px]] Siehe auch {{W|Shewhart-Regelkarte}} und {{W|Qualitätsregelkarte}}. * UCL ... '''U'''pper '''C'''ontrol '''Limit''', Obere Eingriffsgrenze * LCL ... '''L'''ower '''C'''ontrol '''Limit''', Untere Eingriffsgrenze * CL ... '''C'''enter '''L'''ine, Mittellinie = Ein- und Ausgabe = == print == Die Anweisung print haben wir schon oft verwendet. Hier soll anhand von Beispielen kurz beschrieben werden, was der Befehl print leisten kann. print("Hallo", "Welt", 1, sep="-") print("Hallo", end=" ") print("Welt") Ausgabe: Hallo-Welt-1 Hallo Welt == input == a = int(input("Zahl 1: ")) b = int(input("Zahl 2: ")) print("a + b = ", a+b) Ausgabe (nach Eingabe der beiden Ganzzahlen): Zahl 1: 4 Zahl 2: 5 a + b = 9 == Aus Dateien lesen == Es seinen die datei.txt Hallo Welt. Wie geht es dir? ... und test1.py dat = open("datei.txt", mode = "r") print(dat.read()) dat.close() Ausgabe Hallo Welt. Wie geht es dir? ... Mit dem open()-Befehl wird die Datei datei.txt im Lesemodus geöffnet (r ... read). Mit dem read()-Befehl wird die Datei eingelesen und mittels print ausgegeben. == In Dateien schreiben == dat = open("datei.txt", mode = "a", encoding = "utf-8") dat.write("Hänge Zeile an\n") dat.close() Die Datei datei.txt sieht nach Abarbeitung des obigen Skripts nun so aus Hallo Welt. Wie geht es dir? ... Hänge Zeile an Es wird die Datei im Schreibmodus geöffnet (a ... append (anhängend), w ... write (überschreibend)). write() fügt hier also eine Zeile Text am Dateiende ein. close() schließt die Datei wieder. Das close() kann man sich mit der with-Anweisung auch sparen. with open("datei.txt", mode="a", encoding="utf-8") as dat: dat.write("Hänge Zeile an\n") = Benutzeroberflächen erstellen = == tkinter == {{Wikipedia | Tkinter}} Python bietet standardmäßig das Modul tkinter zur Programmierung von Benutzeroberflächen. Es müssen also bei der Verwendung von tkinter keine externen Module installiert werden. Hier wird eine (sehr) kurze Einführung in das Erstellen von grafischen Oberflächen mittels tkinter gegeben. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") win.minsize(300, 50) but = tk.Button(win, text = "Push the button") but.pack() win.mainloop() Ausgabe: [[Datei:PythonIng_gui1.jpg]] Ein etwas komplizierteres Beispiel sei nachfolgend gezeigt. Es sollen zwei Strings miteinander verknüpft und ausgegeben werden. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") def on_button_clicked(): str = ent1.get() + ent2.get() lab2["text"] = str ent1 = tk.Entry(win) ent2 = tk.Entry(win) lab1 = tk.Label(win, text="verknuepfen mit") lab2 = tk.Label(win, text="") but = tk.Button(win, text = "=", command=on_button_clicked) ent1.pack(side="left") lab1.pack(side="left") ent2.pack(side="left") but.pack(side="left") ent2.pack(side="left") lab2.pack(side="left") win.mainloop() Ausgabe (vor der Eingabe der Teilstrings): [[Datei:PythonIng_gui2.jpg]] Ausgabe (nach der Eingabe der Teilstrings und dem Drücken des =-Buttons): [[Datei:PythonIng_gui3.jpg]] == curses == {{Wikipedia | curses}} Mit dem curses-Modul lassen sich u.a. TUIs ('''T'''ext '''U'''ser '''I'''nterfaces) erstellen. Ein sehr einfaches Beispiel zur allgemeinen Funktionsweise wird nachstehend geliefert. import curses stdscr = curses.initscr() curses.start_color() curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE) stdscr.clear() stdscr.addstr("Hallo Welt", curses.color_pair(1)) stdscr.refresh() stdscr.getch() curses.endwin() Als Ausgabe sollte <span style="color:#FF0000;">Hallo Welt</span> (rote Schrift auf weißem Hintergrund) auf dem Terminal/der Konsole erscheinen. Getestet wurde dies mit openSUSE Tumbleweed, Python-Version 3.13.12. Das entsprechende Python-curses-Package muss installiert sein. Allgemeine Informationen zur Terminal-/Konsolengröße und Cursorposition liefert folgendes Programm: import curses stdscr = curses.initscr() stdscr.addstr(3, 5, "LINES: %d" % curses.LINES) stdscr.addstr(4, 5, "COLS: %d" % curses.COLS) (y,x) = stdscr.getyx() stdscr.addstr(5, 5, "Momentane Cursorposition: [%d, %d]" % (y, x)) (y,x) = stdscr.getbegyx() stdscr.addstr(6, 5, "Koordinatenursprung: [%d, %d]" % (y, x)) (y,x) = stdscr.getmaxyx() stdscr.addstr(7, 5, "Fenstergröße: [%d, %d]" % (y, x)) stdscr.addstr(11, 2, "Taste drücken -> Ende") stdscr.refresh() stdscr.getch() curses.endwin() Es sollte sich in etwa folgende Ausgabe ergeben: LINES: 44 COLS: 110 Momentane Cursorposition: [4, 15] Koordinatenursprung: [0, 0] Fenstergröße: [44, 110] Taste drücken -> Ende Zur Funktionsweise von curses siehe auch das Wikibook [[ncurses]]. Zum Verständnis sind dort allerdings elementare Kenntnisse in der Programmiersprache C erforderlich. == Qt == {{Wikipedia | Qt (Bibliothek)}} Auch für das Qt-Framework gibt es eine Anbindung an Python. Nachfolgend ein einfaches Beispiel. import sys from PySide6.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hallo Welt!") label.show() sys.exit(app.exec()) Ausgabe: [[Datei:PythonIng_gui10.png]] == Gtk == {{Wikipedia | GTK (Programmbibliothek)}} Eine idente Ausgabe, wie oben für Qt gezeigt, erzeugt z.B. folgendes Gtk-Programm: import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk def on_activate(app): win = Gtk.ApplicationWindow(application=app) lab = Gtk.Label(label="Hallo Welt!") win.set_child(lab) win.present() app = Gtk.Application() app.connect('activate', on_activate) app.run(None) Auch für die Benutzung von Qt und Gtk müssen die jeweiligen Packages installiert sein. Getestet wurden die entsprechenden Python-Programme nur unter openSUSE Tumbleweed. Wie das GTK-Paket unter MS Windows 11 installiert wird, siehe z.B. [https://www.gtk.org/docs/installations/windows Setting up GTK for Windows]. Damit sei aber das Thema "Benutzeroberflächen erstellen" hier abgeschlossen, da dies schon ein sehr spezielles Aufgabengebiet ist, das eher Informatiker und nicht so sehr Ingenieure anspricht. Bei Bedarf siehe aber ggf. die entsprechenden Links unten in diesem Tutorial. Dort sind weiterführende Informationen zu finden. = Pandas kurz erklärt = Hier wird kurz auf das externe Modul Pandas eingegangen. Pandas steht für '''Pan'''el '''Da'''ta und ist ein Modul für die Datenanalyse und -manipulation. == Series == Vorstellbar ist eine "Series" wie eine einzelne Spalte in einem Tabellenkalkulationsprogramm. Beispiel (Index implizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) # Temperaturwerte print(temp) Ausgabe: 0 8.5 1 11.0 2 12.5 3 10.0 4 13.0 5 11.0 6 14.5 dtype: float64 Das Kürzel <code>pd</code> ist Konvention. Es seien Temperaturwerte gegeben. Die erste Spalte bei der Ausgabe ist der Index. Die zweite Spalte enthält die Werte. Beispiel (separater Zugriff auf den Index und auf die Werte): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) print(temp.index) print(temp.values) Ausgabe: RangeIndex(start=0, stop=7, step=1) [ 8.5 11. 12.5 10. 13. 11. 14.5] Beispiel (Index explizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) print("*** Die gesamte Series ***") print(temp) print("*** Temperatur am Donnerstag ***") print(temp["Do"]) print("*** Tage wärmer als 12 Grad ***") temp_gr_12 = temp[temp > 12] print(temp_gr_12) Ausgabe: *** Die gesamte Series *** Mo 8.5 Di 11.0 Mi 12.5 Do 10.0 Fr 13.0 Sa 11.0 So 14.5 dtype: float64 *** Temperatur am Donnerstag *** 10.0 *** Tage wärmer als 12 Grad *** Mi 12.5 Fr 13.0 So 14.5 dtype: float64 == DataFrame == Ein DataFrame entspricht einer Tabelle. Beispiel (Erzeugen eines DataFrames): import pandas as pd tag = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] v1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=tag) v2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=tag) v3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=tag) tab = pd.concat([v1, v2, v3], axis=1) tab.columns = stadt print(tab) print(type(tab)) Ausgabe: Linz Salzburg Innsbruck Mo 1 8 Hallo Di 2 9 16 Mi 3 10 17 Do 4 11 18 Fr 5 12 19 Sa 6 13 20 So 7 14 21 <class 'pandas.core.frame.DataFrame'> Wir haben hier drei Datenspalten (v1, v2, v3) mit den Spaltennamen "Linz", "Salzburg" und "Innsbruck", sowie sieben Zeilen "Mo" bis "So". Beispiel (Zugriff auf eine Spalte): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab["Salzburg"]) Ausgabe: Mo 8 Di 9 Mi 10 Do 11 Fr 12 Sa 13 So 14 Name: Salzburg, dtype: int64 Beispiel (Zugriff auf eine Zeile): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab.loc["Di"]) Ausgabe: Linz 2 Salzburg 9 Innsbruck 16 Name: Di, dtype: object == Grafiken erstellen == Hier sei nur ein Torten- oder Kreisdiagramm gezeichnet: import pandas as pd import matplotlib.pyplot as plt temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) expl = [0, 0.2, 0, 0, 0, 0, 0] temp.plot.pie(figsize=(5,5), explode=expl) plt.show() Ausgabe: [[Datei:IngPython_pandas1.svg|350px]] Die <code>figsize</code> hat nichts mit der Spaltenanzahl zu tun, sondern setzt die Fenster- oder Diagrammgröße in Inches (Breite * Höhe). Mit Pandas kann man auch noch andere Diagrammarten erstellen, z.B. Linien- oder Balkendiagramme. Dies wird hier aber nicht vorgeführt. == Arbeiten mit CSV- und LibreOffice-Dateien == Gegeben sei eine CSV-Datei test1.csv: Mai;Juni;Juli 12;17;45 15;65;65 16;32;23 4;14;7 23;17;Keine Daten verfügbar 67;Keine Daten verfügbar;45 15;24;12 Lesen von dieser CSV-Datei: import pandas as pd tab = pd.read_csv("test1.csv", sep=";") print(tab) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Schreiben in eine CSV-Datei test2.csv: import pandas as pd val = pd.read_csv("test1.csv", sep=";") val.to_csv("test2.csv", index=False) Ausgabedatei: Mai,Juni,Juli 12,17,45 15,65,65 16,32,23 4,14,7 23,17,Keine Daten verfügbar 67,Keine Daten verfügbar,45 15,24,12 Die Ausgabedatei ist beinahe gleich wie die Eingabedatei. Es werden aber Kommas statt Strichpunkten verwendet. Daher kommt auch der Name CSV ('''C'''omma '''S'''eparated '''V'''alue). Will man wieder Strichpunkte, so kann man dies über den Parameter <code>sep=";"</code> in der <code>to_csv</code>-Funktion machen. Um direkt von einer ODS-Datei (LibreOffice Calc, '''O'''pen '''D'''ocument '''S'''preadsheet) zu lesen muss das Modul odfpy extra installiert sein (per YaST, pip etc.). Gelesen wird dann folgendermaßen: import pandas as pd df = pd.read_excel('test1.ods', engine='odf') print(df) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Die Datei "test1.ods" sei die Datei, aus der das obige "test1.csv" generiert wurde. Schreiben kann man ebenfalls in eine ODS-Datei: import pandas as pd daten = { "Name": ["Hugo", "Richie", "Wilhelmine"], "Alter": [38, 30, 29], "Ort": ["Linz", "Innsbruck", "Salzburg"] } tab = pd.DataFrame(daten) with pd.ExcelWriter("test2.ods", engine="odf") as writer: tab.to_excel(writer, sheet_name="Daten", index=False) Es ergibt sich eine "test2.ods"-Datei (Screenshot): [[Datei:IngPython_pandas2.png|250px]] == Sonstiges == Hier seien stichpunktartig einige weitere Features von Pandas angeführt: * {{W|Pivot-Tabelle|Pivot-Tabellen}} (pivot ... Dreh-, Angelpunkt): Zweck - große Datenmengen schnell zusammenfassen, filtern und analysieren. * NaN ('''n'''ot '''a''' '''n'''umber): In einem Datensatz fehlt ein Wert oder ist nicht definiert. * groupby-Funktion: Daten strukturieren, aggregieren oder Zwischensummen bilden. * {{W|Binning#Datenverarbeitung_und_-analyse|Binning}}: Klassenbildung. * Mehrstufige Indizierung (Hierarchical Indexing oder MultiIndex) * Zeitreihen (Time Series) Für tiefergehende und weiterführende Informationen wird auf das Buch von ''Klein: Numerisches Python; Hanser, 2023'' und [https://pandas.pydata.org/ pandas] verwiesen. = Style Guide, flake8, pylint, Black etc. = == Style Guide == Wie man schönen und richtigen Python-Code schreibt, erfahren Sie in * [https://peps.python.org/pep-0008/ PEP 8 – Style Guide for Python Code] == Formatter und Linter == Ein Modul, das prüft, ob die Richtlinien im Style Guide eingehalten wurden, ist ''flake8'': * [https://flake8.pycqa.org/en/latest/ Flake8: Your Tool For Style Guide Enforcement] Code formatieren kann man auch mit [https://pypi.org/project/black/ Black]. Z.B. übersetzt <code>black test1.py</code> die Datei <code>test1.py</code> import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) in import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Die Programmausgabe ist reformatted test1.py All done! ✨ 🍰 ✨ 1 file reformatted. Der Unterschied zwischen Black und Flake8: * Black ist ein Code-Formatter. Er formatiert Ihren Code um, sodass er im Einklang mit PEP 8 steht. * Flake8 ist ein {{W|Lint (Programmierwerkzeug) | Code-Linter}}. Flake8 verändert Ihren Code nicht, sondern durchsucht ihn nach potenziellen Fehlern etc. Am obigen Beispiel sieht man auch, dass flake8 und Black nicht immer einer Meinung sind. Flake8 (<code>flake8 test1.py</code>) würde standardmäßig den mit Black formatierten Code bemängeln: test1.py:8:80: E501 line too long (80 > 79 characters) Diese Diskrepanz kann beseitigt werden. Da 79 Zeichen auf modernen Bildschirmen meist als zu kurz empfunden werden, ist ein Limit von 88 Zeichen (Black-Standard) oder mehr empfehlenswert. Um dies zu implementieren, erstellen Sie in Ihrem Projektverzeichnis eine <code>.flake8</code>-Datei mit dem Inhalt [flake8] max-line-length = 88 Und schon ignoriert Flake8 dieses Problem. Ein anderer Linter ist pylint. Der würde beim Abarbeiten des obigen Beispiels, z.B. mit <code>pylint test1.py</code> noch eine Kleinigkeit bemängeln: ************* Module test1 /home/hr/tmp/test1.py:1:0: C0114: Missing module docstring (missing-module-docstring) ------------------------------------------------------------------ Your code has been rated at 8.57/10 (previous run: 8.57/10, +0.00) Auch pylint muss vor der ersten Verwendung installiert werden (z.B. mittels pip, virtuelle Umgebung, YaST). Die Dokumentation zu pylint findet sich auf [https://pylint.readthedocs.io/en/latest/]. <u>Aufgabe:</u> Fügen Sie einen "module docstring" in die <code>test1.py</code>-Datei ein und testen Sie erneut mit flake8, Black und pylint. <small>Sehen Sie zum Thema docstrings auch [https://peps.python.org/pep-0257/#what-is-a-docstring PEP 257 – Docstring Conventions].</small> Es gibt noch weitere Formatierungswerkzeuge für Python-Code. Z.B. [https://docs.astral.sh/ruff/ Ruff], ein moderner Code-Formatter und -Linter. Mittels <code>ruff check test1.py</code> würde obiger Code geprüft (Linter). <code>ruff format test1.py</code> formatiert den Code (Formatter). == Type Checker == "Type Checker" sind z.B. * mypy * pyright * ty Diese prüfen die Datentypen, z.B. in folgendem Code def greetings(name: str) -> str: return "Hello, %s" % name print(greetings(42)) Python selbst, flake8, ruff oder black würden diesen Code ohne zu murren akzeptieren. "Type Checker" würden aber sehr wohl Alarm schlagen, z.B. liefert <code>mypy</code> folgende Ausgabe test1.py:5: error: Argument 1 to "greetings" has incompatible type "int"; expected "str" [arg-type] Found 1 error in 1 file (checked 1 source file) Das funktioniert übrigens nicht nur bei Funktionsannotationen, sondern auch mit Variablen etc. from typing import Final # "Konstante", ab Python 3.8 NUMBER: Final = 123 print(NUMBER) NUMBER = 125 print(NUMBER) # Variable a: int = 345 print(a) a = "Irgendwas" print(a) # Variable (Pipe-Symbol), ab Python 3.10 b : int|str = 567 print(b) b = "sonstiges" print(b) Ausgabe mit python: 123 125 345 Irgendwas 567 sonstiges Ausgabe mit mypy: test3.py:6: error: Cannot assign to final name "NUMBER" [misc] test3.py:12: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment] Found 2 errors in 1 file (checked 1 source file) Python kennt übrigens keine Konstanten. Man kann diese mittels Großbuchstaben andeuten. Das ist aber nur Konvention, hat aber keine sonstigen Auswirkungen. Oder man verwendet wie oben gezeigt <code>Final</code>. Dann werfen Typchecker Errors aus. ==pydoc== pydoc ist ein Werkzeug, um Python-Module, -Funktionen und -Klassen zu dokumentieren. Beispiel <code>test1.py</code>: """Rechen-Modul. Funktionen die von pydoc gelesen werden. """ def multiply(a, b): """Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a * b def add(a, b): """Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a + b if __name__ == '__main__': print(multiply(3, 5)) print(add(4, 6)) Ausgabe mit <code>python3.13 -m pydoc test1</code> auf der Konsole: Help on module test1: NAME test1 - Rechen-Modul. DESCRIPTION Funktionen die von pydoc gelesen werden. FUNCTIONS add(a, b) Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl multiply(a, b) Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl FILE /home/xyz/tmp/test1.py Siehe zu diesem Thema z.B. auch [https://docs.python.org/3/library/pydoc.html]. Mittels <code>python3.13 -m pydoc -w test1</code> kann man auch eine HTML-Dokumentation erstellen. Wofür <code>if __name__ == '__main__':</code> steht, siehe z.B. etwas später im Abschnitt [[Ing_Mathematik:_Python#Doctests]]. == Sonstige Tools == Andere Tools für die {{W|Statische Code-Analyse|statische Codeanalyse}}, die aber für Ingenieure weniger interessant sein dürften, sind z.B. * Radon: Liefert verschiedene {{W|Softwaremetrik|Codemetriken}} (Komplexität, Wartbarkeitsindex ...) * Bandit: Findet Sicherheitslücken Tools für die {{W|Dynamisches Software-Testverfahren|dynamische Codeanalyse}}, z.B.: * DynaPyt (Framework zur dynamischen Programmanalyse) * cProfile (Profiler) * Memory Profiler (Speicheranalyse) * Memray (Speicheranalyse) * tracemalloc (Speicheranalyse) Paket- und Projektmanagement (pip-Ersatz etc.): * uv * Poetry * Conda * pipx Packaging-Tools (Freezer) und {{W|Compiler#Sonderformen|Transpiler}} : * pyinstaller ** erstellt eigenständige, ausführbare Binärdatei ** kein Cross-Compiler ** kein Schutz vor Reverse-Engineering ** langsam ** packt alles in eine Datei ** sehr große Datei ** Befehl, z.B.: <code>pyinstaller --onefile test1.py</code> ** GUI: <code>auto-py-to-exe</code> * cx_Freeze * nuitka ** Übersetzt Python-Code in C/C++-Code und weiter in eine ausführbare Datei ** kein Cross-Compiler ** Schutz vor Reverse-Engineering ** Befehl, z.B.: <code>nuitka --standalone --onefile test1.py</code> * cython = Einige Integrierte Entwicklungsumgebungen (IDEs)= Werden Programmtexte größer und umfangreicher, so ist das Arbeiten mit der interaktiven Programmierumgebung bzw. das direkte Ausführen von Python-Skripten mühsam. Man wünscht sich z.B. Hilfen zum Debuggen oder die automatische Code-Vervollständigung. Zu diesem Zweck wurden IDEs (Integrated Development Environments) geschaffen. Von diesen seinen nachfolgend auszugsweise einige kurz beschrieben. Testen Sie einfach aus, welche davon für Sie bzw. für Ihr Python-Projekt geeignet sind. == IDLE == IDLE ist die mit dem Python-Programmpaket mitgelieferte IDE. Der Name leitet sich einerseits ab vom Monty-Python-Mitglied Eric Idle, andererseits steht es als Abkürzung für "'''I'''ntegrated '''D'''evelopment and '''L'''earning '''E'''nvironment. IDLE ist einfach zu bedienen, bietet aber schon einen beachtlichen Leistungsumfang. Nachfolgend wird ein Screenshot zu IDLE geliefert. Rechts ist das Editor-Fenster zu sehen, links die interaktive Programmierumgebung. Um das Beispiel selbst nachvollziehen zu können, starten Sie IDLE. Das geht ähnlich, wie Sie die interaktive Programmierumgebung von Python starten (nur, dass Sie eben das IDLE-Icon doppelklicken und nicht das Python-Icon. Unter Linux geben Sie einfach in einem Terminal <code>idle3.13</code> o. Ä. ein). Weiter geht es mit "File - Open - ...". Die auszuführende Datei auswählen (im konkreten Fall ein "Hallo-Welt"-Programm). Es erscheint das rechte Fenster. Dort "Run - Run Module" auswählen. Und schon wird im linken Fenster "Hallo Welt!" ausgegeben. [[Datei:PythonIng_idle1.jpg | 600px]] Siehe auch {{W|IDLE}}. == PyCharm == PyCharm ist ein kommerzielles Produkt. Es gab aber auch eine kostenlose Community Edition. Seit 2025 sind beide Varianten vereint. Für die ersten 30 Tage sind die Pro-Funktionen frei verfügbar, danach nur noch die Kernfunktionalitäten (oder man bezieht kostenpflichtig die Pro-Version). Zu beziehen ist PyCharm unter dem Weblink [https://www.jetbrains.com/pycharm/]. Nachfolgend ein etwas abgewandeltes "Hallo Welt"-Programm, editiert und ausgeführt mit PyCharm. [[Datei:PyCharm_IDE_2023_screenshot.png | 600px]] Siehe auch {{W|PyCharm}}. == Eric == Auch eric ist Open Source und steht unter der GNU General Public License Version 3 oder später. Zu beziehen ist diese Software unter [https://eric-ide.python-projects.org/]. [[Datei:Screenshot_Eric_4.png | 600px]] Siehe auch {{W|eric (Software)}}. <small> Unter openSUSE Tumbleweed sollte sich eric auch mit YaST installieren lassen. Bei mir gibt es aber dann beim Ausführen des eric-Programms eine Fehlermeldung (Stand März 2026): ... ModuleNotFoundError: No module named 'PyQt6.QtPdfWidgets' Umgehen kann man dieses Problem aber wieder mit dem Erstellen einer virtuellen Umgebung, in etwa so python3.13 -m venv ~/tmp/venv1 cd ~/tmp/venv1/bin ./python3.13 -m pip install --upgrade --prefer-binary eric-ide ./eric7_ide </small> == PyScripter == Vom Funktionsumfang vergleichbar mit den vorherigen IDEs ist PyScripter. Auch PyScripter ist Open Source. Die Projekt-Homepage findet sich auf [https://sourceforge.net/projects/pyscripter/]. PyScripter ist nur für MS Windows verfügbar. [[Datei:PythonIng_pyscripter1.jpg | 600px]] == Spyder IDE == Spyder enthält bereits eine stabile Python-Version und etliche Module (z.B. matplotlib, numpy, control). Ansonsten kann dieses Softwarepaket vom Funktionsumfang her mit den anderen genannten IDEs locker mithalten. Spyder wurde unter der MIT-Lizenz veröffentlicht. Diese Software findet sich auf [https://www.spyder-ide.org]. [[Datei:Spyder-windows-screenshot.png | 600px]] Siehe auch {{W|Spyder (Software)}} == Eclipse IDE== Die {{W|Eclipse_(IDE)|Eclipse-IDE}} kann für Python aufgerüstet werden. Dazu gibt es das PyDev-Plugin. Installiert wird es über * Help > Eclipse Marketplace... * Find - PyDev - Install Danach muss noch der Pfad zum Python-Interpreter festgelegt werden * Window > Preferences > PyDev > Interpreters > Python Interpreter > New ... Das Ergebnis ist ähnlich wie im folgenden Bild, nur dass statt C/C++ Python Verwendung findet. [[Datei:Setting Up Eclipse CDT helloout.png | 600px]] == Sonstige == Die genannten IDEs sind nicht die Einzigen. Es gibt, um dem Image Pythons als beliebteste Programmiersprache gerecht zu werden, noch einige andere. Sowohl Open Source-Programme als auch kommerzielle Programme sind im Web zu finden, z.B. Thonny oder {{W|Visual Studio Code}}. Unter Linux kann man auch {{W|KDevelop}}, ausgestattet mit dem Python3-Plugin, einsetzen. Braucht man den Umfang von ausgewachsenen IDEs nicht, so kann man auch normale Texteditoren verwenden (z.B. {{W|Geany}} oder {{W|Kate_(Texteditor)|Kate}}). = Debuggen und Testen = Das Debuggen und Testen von Programmen sind wichtige Bestandteile der Programmierung. Syntaxfehler lassen sich i.A. leicht beheben. Schwieriger ist das Eingrenzen von logischen Fehlern, die ev. nur in bestimmten Situationen auftreten und keine explizite Fehlermeldung hervorrufen. Das Programm liefert falsche Ergebnisse oder es stürzt aus heiterem Himmel ab. Um das zu verhindern gibt es verschiedene Werkzeuge, die bei der Fehlersuche behilflich sein können. Vorerst siehe aber zwecks Begriffsklärung noch folgende Links: * {{W|Debuggen}} * {{W|Debugger}} * {{W|Softwaretest}} <gallery> First Computer Bug, 1947.jpg Test ganzheitlich.png V-Modell.svg </gallery> == Das Modul pdb == Python bringt schon ein Modul zum Debuggen mit. Siehe z.B. [https://docs.python.org/3/library/pdb.html pdb — The Python Debugger]. Komfortabler lässt sich das aber mittels Integrierter Entwicklungsumgebungen (IDEs) angehen. == Debuggen mit IDEs == Für die IDEs IDLE und Spyder sei kurz auf die entsprechenden Webseiten verwiesen: * [https://www.cs.uky.edu/~keen/help/debug-tutorial/debug.html Debugging under IDLE]. * [https://docs.spyder-ide.org/current/panes/debugging.html Spyder Debugger] Dort wird die Vorgehensweise auch mittels Screenshots erläutert. == assert == assert ... behaupten, zusichern ({{W|Assertion (Informatik)}}) Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10., 0.) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10., 0.) File "/home/hr/Develop/test1.py", line 4, in print1 assert y != 0.0 ^^^^^^^^ AssertionError Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1("10.", "5.") File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Aber auch bei nachfolgendem Code gibt es eine Fehlermeldung: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10, 5) File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Damit letzteres funktioniert, kann man den Programmcode so umschreiben: def print1(x, y): assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 2.0 Und jetzt fangen wir den <code>AssertionError</code> auf: def print1(x, y): try: assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) except(AssertionError): print("Hallo") print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Hallo Ich hoffe, es ist wenigstens im Ansatz klar geworden, wofür <code>assert</code> gut sein kann. Ausschalten kann man die <code>assert</code>-Überprüfung übrigens mit dem Python-Schalter <code>-O</code>. == Doctests == Innerhalb eines Docstrings kann die Arbeit im interaktiven Modus simuliert werden. Nach den Promptzeichen (>>>) erfolgen dann bei unserem Beispiel innerhalb des Docstrings simulierte Aufrufe der Funktion <code>print1()</code>. Danach folgen jeweils die Sollresultate. Wird das Modul oder die Datei als Hauptprogramm aufgerufen, so wird die Funktion <code>doctest.testmode()</code> aufgerufen und ein Bericht auf der Konsole ausgegeben. Wird das Modul nicht als Hauptprogramm aufgerufen, sondern importiert, dann wird diese <code>testmod</code>-Funktion nicht aufgerufen. D.h. dieser Code kann sowohl für Testzwecke als auch für den produktiven Einsatz verwendet werden. Das ist auch sinnvoll, weil wenn man Teile der Datei immer löschen bzw. einfügen müsste, so würden sich Fehlerquellen auftun. Das würde den Sinn und Zweck von Doctests konterkarieren. def print1(x=0., y=1.): """ Dividiere zwei Zahlen Autor: Intruder Datum: 12.08.2025 >>> print1(2., 1.) 2.0 >>> print1(5., 2.) 2.5 >>> print1(5.) 5.0 """ print(x/y) if __name__ == "__main__": import doctest doctest.testmod(verbose=True) Ausgabe: Trying: print1(2., 1.) Expecting: 2.0 ok Trying: print1(5., 2) Expecting: 2.5 ok Trying: print1(5.) Expecting: 5.0 ok 1 items had no tests: __main__ 1 items passed all tests: 3 tests in __main__.print1 3 tests in 2 items. 3 passed and 0 failed. Test passed. Das gezeigte Beispiel ist so ziemlich das einfachste, das es gibt. Für weiterführende Details siehe z.B.: * [https://peps.python.org/pep-0257/ PEP 257 – Docstring Conventions] * [https://docs.python.org/3/library/doctest.html doctest — Test interactive Python examples] ''Einschub:'' Ganz ähnlich kann man auch Klassen testen, z.B. in folgendem Code-Fragment class Fahrzeug: # siehe Abschnitt "Objektorientierte Programmierung" # ... if __name__ == "__main__": vauweh = Fahrzeug(170, 90) beemweh = Fahrzeug(200, 120) print(vauweh.convertGeschw()) print(beemweh.convertGeschw()) Wird das Script als Hauptprogramm ausgeführt (z.B. zu Testzwecken), so erfolgt die Ausgabe der zwei, via <code>convertGeschw()</code>, umgerechneten Geschwindigkeiten. Wird es aber als Modul eingebunden, so wird der letzte Programmabschnitt nicht ausgeführt (<code>__name__ == "__main__"</code> ergibt <code>False</code>). == pytest == Siehe zu diesem Thema auch {{W|Modultest}}. pytest ist ein externes Modul und muss vorab installiert werden, z.B. mittels pip install -U pytest pip install -U pytest-html Python-Code, Datei test1.py: def add(x, y): return x + y def test_answer(): assert add(1, 1) == 3 Starten von pytest in der Konsole: pytest test1.py Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py F [100%] ========================================================= FAILURES ========================================================== ________________________________________________________ test_answer ________________________________________________________ def test_answer(): > assert add(1, 1) == 3 E assert 2 == 3 E + where 2 = add(1, 1) test1.py:6: AssertionError ================================================== short test summary info ================================================== FAILED test1.py::test_answer - assert 2 == 3 ===================================================== 1 failed in 0.09s ===================================================== Hier erhalten wir einen Fehler, da 1+1 eindeutig ungleich 3 ist. Aber aus irgendeinem Grund wollte der Programmierer oder Tester in diesem Fall, dass dies so ist. Testfälle werden übrigens mit dem Präfix <code>test_</code> eingeleitet. Python-Code: def add(x, y): return x + y + 1 def test_answer(): assert add(1, 1) == 3 Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py . [100%] ===================================================== 1 passed in 0.01s ===================================================== Jetzt ist alles in Ordnung. Weiterführendes siehe z.B. * [https://docs.pytest.org/en/stable/ pytest: helps you write better programs] == unittest == Auch unittest dient zur Durchführung von Testreihen, ist aber Bestandteil von Python. Hier wird vorerst nicht näher darauf eingegangen. Siehe z.B. * [https://docs.python.org/3/library/unittest.html unittest — Unit testing framework] Lt. ''Inden: Python Challenge; dpunkt, 2021, Seite 481'' soll unittest weniger komfortabel als pytest sein. Einen Vergleich von unittest mit pytest findet man in * [https://knapsackpro.com/testing_frameworks/difference_between/pytest/vs/unittest pytest vs unittest] = Python und Anwendungsprogramme = Bisher stand immer alleine die Programmiersprache Python (ev. unter Einbeziehung von Modulen) im Mittelpunkt der Betrachtungen. Aber Python kann auch als Makrosprache für Anwendungsprogramme auftreten. Als Beispiele seien {{W|FreeCAD}} und {{W|LibreOffice}} genannt. == FreeCAD == FreeCAD ist ein freies 3D-CAD-Programm. Hier soll nicht auf die Bedienung dieses CAD-Pakets eingegangen werden, sondern nur auf die Möglichkeit, mittels Python Makros zu schreiben. Als einfacher Einstieg soll ein Makro erstellt werden, welches eine Kugel (rot) und einen Quader (blau) zeichnet. Folgende Vorbereitungsschritte sind erforderlich (es sei vorausgesetzt, dass FreeCAD schon am Rechner installiert ist. Downloaden können Sie das Programm von der Website [https://www.freecad.org/downloads.php?lang=en]): * FreeCAD starten * Leere Datei erstellen * Makro > Makros > Erstellen ... Es öffnet sich ein leeres Editorfenster, in das Sie folgenden Code eingeben können: import FreeCAD import Part doc = FreeCAD.newDocument() # Kugel kugel = Part.makeSphere(10) form_element = doc.addObject("Part::Feature", "Kugel") form_element.Shape = kugel kug = FreeCAD.ActiveDocument.getObject("Kugel") kug.ViewObject.ShapeColor = (1.0, 0.0, 0.0) neuePosition = App.Vector(5, 2.5, 2.5) kug.Placement = App.Placement(neuePosition, kug.Placement.Rotation) # Quader quader = Part.makeBox(5, 5, 50) form_element = doc.addObject("Part::Feature", "Quader") form_element.Shape = quader quad = FreeCAD.ActiveDocument.getObject("Quader") quad.ViewObject.ShapeColor = (0.0, 0.0, 1.0) doc.recompute() Diesen Code können Sie nun ausführen: * Makro > Makro ausführen Es ergibt sich folgende Ausgabe (gedreht und gezoomt): [[Datei: PythonIng_freecad1.png|500px]] Siehe auch [https://wiki.freecad.org/Python_scripting_tutorial/de# Anleitung Skripterstellung mit Python]. Getestet wurde obiges Beispiel mit FreeCAD 1.1.3 unter Linux und 1.1.1 unter MS Windows. == LibreOffice == LibreOffice ist ein freies Officepaket ([https://de.libreoffice.org/]). Hier soll nur das Tabellenkalkulationsprogramm Calc kurz betrachtet werden. Es seinen in den ersten 3 Zellen (A1 bis A3) Zahlen gegeben. Diese sollen mit einem Python-Makro addiert und das Resultat in der Zelle A5 ausgegeben werden. Auch hier sind Vorbereitungsarbeiten nötig: * zuerst muss unter Linux das Verzeichnis <code>~/.config/libreoffice/4/user/Scripts/python</code> erstellt werden * für MS Windows ist es das Verzeichnis <code>%APPDATA%\LibreOffice\4\user\Scripts\python</code> ** drücken Sie zuerst Win + R (es öffnet sich das Ausführen-Fenster) ** geben Sie <code>%appdata%</code> ein, danach drücken Sie Enter (es öffnet sich der Explorer) ** navigieren Sie zu dem genannten Verzeichnis bzw. erstellen Sie das Verzeichnis * in diesem Verzeichnis wird dann mit einem beliebigen Texteditor das Python-Makro erstellt, in unserem Fall die Datei <code>summiere_zellen.py</code>: import uno def summiere_zellen(*args): # Zugriff auf das aktuelle Dokument und das aktive Tabellenblatt ctx = uno.getComponentContext() smgr = ctx.getServiceManager() desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) doc = desktop.getCurrentComponent() sheet = doc.getCurrentController().getActiveSheet() # Werte aus den Zellen A1 bis A3 auslesen w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value # Addition der drei Werte summe = w1 + w2 + w3 # Ergebnis in die Zelle A5 schreiben sheet.getCellRangeByName("A5").Value = summe * siehe dazu ggf. auch [https://help.libreoffice.org/latest/de/text/sbasic/python/python_locations.html?DbPAR=BASIC]. Weiter geht es in LibreOffice Calc mit dem Menü ''Extras > Makros > Makros verwalten > Python''. Dort wird das Makro <code>summiere_zellen</code> ausgeführt. Es ergibt sich z.B. folgendes Resultat [[Datei:PythonIng_libreoffice1.png]] Das Kürzel <code>uno</code> steht für '''U'''niversal '''N'''etwork '''O'''bjects. Etwas einfacher geht's auch so: def summiere_zellen(): desktop = XSCRIPTCONTEXT.getDesktop() model = desktop.getCurrentComponent() sheets = model.getSheets() sheet = sheets.getByIndex(0) w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value cell = sheet.getCellRangeByName("A5") cell.setValue(w1 + w2 + w3) Empfohlen wird auch, das Erweiterungspaket APSO ('''A'''lternative '''P'''ython '''S'''cript '''O'''rganizer, apso.oxt) zu installieren. Die Vorgehensweise wird hier nicht gezeigt, sondern nur darauf hingewiesen, dass man das einfach "googeln" kann. Siehe zur Python-Programmierung für LibreOffice auch [https://wiki.documentfoundation.org/Macros/Python_Guide/de Makros/Python-Handbuch]. Getestet wurden obige Beispiele mit LibreOffice 26.2.5.1 unter Linux und 26.2.1.2 unter MS Windows. = Ausblick = Dies war eine kurze Einführung in die Berechnungs- und Darstellungsmöglichkeiten mit Python. Es sollten etliche relevante Themen behandelt, oder zumindest kurz angesprochen worden sein. Wem dieser Text nicht ausreichend ist, der sei auf die entsprechenden weiterführenden Weblinks, Bücher und die Python-Hilfefunktion verwiesen. Python kennt noch viel mehr Befehle, als hier dargestellt wurden. Das Themenspektrum ist auch durch die Einbindung externer Module fast beliebig erweiterbar. = Weblinks= == Python allgemein == * [https://www.python.org/ Python Homepage] == Externe mathematische Module == * [https://numpy.org/ NumPy] * [https://numpy.org/doc/stable/user/numpy-for-matlab-users.html NumPy for MATLAB users] * [https://scipy.org/ SciPy] * [https://www.sympy.org/en/index.html SymPy] * [https://pandas.pydata.org/ pandas] * [https://github.com/maroba/findiff findiff] * [https://mpmath.org/ mpmath] == Externe Module für Grafiken == * [https://matplotlib.org/ Matplotlib] * [https://vpython.org/ VPython] * [https://build123d.readthedocs.io/en/latest/ build123d] * [https://docs.vtk.org/en/latest/api/python.html VTK] == Erstellung von User Interfaces == * [https://docs.python.org/3/library/tkinter.html tkinter - Python interface to Tcl/Tk] * [https://docs.python.org/3/library/curses.html curses - Terminal handling for character-cell displays] * [https://wiki.qt.io/Qt_for_Python Qt for Python] * [https://www.gtk.org/docs/language-bindings/python GTK and Python] == Erstellen virtueller Umgebungen == * [https://docs.python.org/3/library/venv.html venv - Creation of virtual environments] == Sonstige == * [https://python-control.readthedocs.io/en/stable/ Python Control Systems Library] * [https://pypi.org/project/regex/ regex - Regular Expressions] * [http://pyromat.org/ PYroMat] * [https://coolprop.org/coolprop/wrappers/Python/index.html CoolProp] * [https://pypi.org/project/iapws/ iapws] * [https://tespy.readthedocs.io/en/main/getting_started/introduction.html TESPy - Thermal Engineering Systems in Python] = Bücher = == Gedruckte Bücher, OpenBooks, Magazine == * Diverse: c't Python Lernen, Verstehen, Anwenden; Heise, 2022 * Ernesti, Kaiser: Python3 - das umfassende Handbuch; 5. Aufl., Rheinwerk, [https://openbook.rheinwerk-verlag.de/python/ OpenBook] * Inden: Python Challenge; dpunkt, 2021, ISBN 978-3-86490-809-5 * Klein: Numerisches Python; 2. Aufl., Hanser, 2023, ISBN 978-3-446-47170-2 * Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler; Rheinwerk, 2021, ISBN 978-3-8362-7316-9 * Weigend: Python 3 - Das umfassende Praxisbuch; 9. Aufl., mitp, 2022, ISBN 978-3-7475-0544-1 * Woyand: Python für Ingenieure und Naturwissenschaftler; 4. Aufl., Hanser, 2021, ISBN 978-3-446-46483-4 == Andere Wikibooks == * [[:en:Subject:Python_programming_language | Englische Wikibooks zum Thema Python]] * [[Python|Deutschsprachiges Python-Wikibook]] [[Bild:2von10.png|20%]] * [[Python unter Linux|Python 2.7 unter Linux]] [[Bild:10von10.png|100%]] {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} p9ebqqgha05zmkcfxawybj8whqbihht 1090753 1090752 2026-09-13T11:54:42Z Intruder 1513 /* Mit build123d */ verlinkt 1090753 wikitext text/x-wiki {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} = Hallo Welt und allgemeine Hinweise = == Was ist Python == * Python ist eine universelle höhere Programmiersprache. * Python ist objektorientiert. * Python ist Open-Source (Python Software Foundation License). * Python ist für viele Betriebssysteme erhältlich (z.B. für Linux, MS Windows, macOS). * Python ist ein Interpreter. * Python ist durch Module fast beliebig erweiterbar. * Python als Programmiersprache ist case-sensitive - d.h. Groß- und Kleinschreibung ist relevant bei der Eingabe von Befehlen. * Python ist in etlichen Anwendungsprogrammen (z.B. {{W|FreeCAD}}, {{W|LibreOffice}}, {{W|GIMP}}, {{W|Blender (Software) | Blender}}) als Makrosprache verwendbar. {{Wikipedia | Python (Programmiersprache)}} == Python installieren == === MS Windows === Laden Sie das aktuelle Python-Paket von der Webseite [https://www.python.org/] herunter. Weiter geht es wie bei jedem anderen größeren zu installierenden Programm. Einfach das Installationsprogramm im Explorer doppelklicken und den Anweisungen des Setup-Programmes folgen. === Linux === Entweder ist Python bereits standardmäßig installiert, ansonsten ist die Installation mittels Paketmanagementsystem einfach möglich. Aber auch die Spyder-Entwicklungsumgebung ([https://www.spyder-ide.org]) bietet einen guten Einstieg mit Python (das gilt auch für MS Windows). Spyder bringt auch schon etliche wichtige Module standardmäßig mit. == Python starten == === MS Windows === Das Icon für das Python-Programm doppelklicken. Und schon startet das Programm. [[Datei:PythonIng_start1.jpg]] Python im interaktiven Modus präsentiert sich dann so: Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> Alternativ kann das Programm auch über die Eingabeaufforderung oder die PowerShell gestartet werden: c:\devel\Python>python.exe Python 3.12.4 (tags/v3.12.4:8e8a4ba, Jun 6 2024, 19:30:16) [MSC v.1940 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> === Linux === Tippen Sie einfach das Wort „python“ (oder unter openSUSE Tumbleweed z.B. auch „python3.11“ oder „python3.13“) in einem Linux-Terminal ein, schließen den Befehl mit der RETURN-Taste ab, und schon startet Python im interaktiven Modus: Python 3.13.12 (main, Feb 09 2026, 22:37:44) [GCC] on linux Type "help", "copyright", "credits" or "license" for more information. >>> Es gibt auch noch andere Möglichkeiten Python zwecks Programmausführung zu starten, z.&nbsp;B. den {{W|Shebang}} (<code>#!</code>) am Beginn eines Python-Scripts. Das Script sei als Script.py gespeichert. Dann kann das Script mit ./Script.py ausgeführt werden. Für openSUSE Tumbleweed sei nachfolgend ein lauffähiges "Hallo Welt!"-Script angegeben. Es wird in diesem Script der Python-Interpreter in der Version 3.13 verwendet : #!/usr/bin/python3.13 print("Hallo Welt!") Die Berechtigungen zum Ausführen der Datei müssen natürlich noch richtig gesetzt werden, z.B. mittels <code>chmod 777 Script.py</code>. <small><code>chmod</code> ist die Abkürzung für"'''ch'''ange file '''mod'''e bits".</small> <small>Die "Maske" <code>777</code> ist nur für Testzwecke sinnvoll, weil sie leicht zu merken ist und für alle Benutzer alle Zugriffsberechtigungen ('''r'''ead/'''w'''rite/e'''x'''ecute für owner/group/others) setzt. Im richtigen Einsatz wird man das aus Sicherheitsgründen nicht so handhaben, sondern nur die Berechtigungen setzen, die unbedingt erforderlich sind. Welche Zugriffsberechtigungen gesetzt sind, kann man z.B. mit dem Befehl <code>ls -l</code> oder <code>ll</code> ('''l'''i'''s'''t directory contents) erfragen. Aber dazu im Moment genug. Erfahrene Linux-Nutzer kennen das ohnehin und Anfänger sollen jetzt nicht mit Linux-Interna überfordert werden. Bei Bedarf siehe die Linux-Man-Pages oder dezidierte Bücher zu Linux.</code></small> <small>Oder das Script wird in einen Pfad verschoben, in dem sich ausführbare Programme generell befinden (welche Verzeichnisse im PATH liegen, kann bspw. mit <code>echo $PATH</code> abgefragt werden). Das Script kann dann wie ein normales Programm ohne weitere Angaben mit Script.py gestartet werden. Alternativ wird nicht das Script an sich verschoben, sondern nur ein symbolischer Link angelegt, z.B. mit <code>ln -s ~/tmp/Script.py ~/.local/bin/Script.py</code>. <code>~/.local/bin</code> sei ein im PATH gelegenes Verzeichnis. Dies sind aber schon Features für fortgeschrittene Linux-Benutzer und werden am Anfang eher selten benötigt.</small> == Ein paar Worte zur Erklärung == === Tests === Getestet wurden die Beispiele unter den Betriebssystemen * MS Windows 10 mit der Python-Version 3.12.0 (teilweise auch mit 3.12.2 und 3.13.1; nur die Inhalte die bis spätestens Juli 2025 erstellt wurden) * MS Windows 11 ab der Python-Version 3.13.4 (nur zum Teil; ab Juli 2025) * openSUSE Leap 15.6 mit der Python-Version 3.11.12 (Spyder, nur vereinzelt) und zum Teil mit 3.12.11 (ab Juli 2025 bis November 2025). * openSUSE Tumbleweed ab der Python-Version 3.13.9 (nur vereinzelt, ab November 2025) === Popularität === * An Beliebtheit rangiert Python mit Stand September 2026 mit einem Rating von 17,76% an 1. Stelle vor C und C++ (lt. [https://www.tiobe.com/tiobe-index/ TPCI - TIOBE Programming Community Index]). * Lt. [https://innovationgraph.github.com/global-metrics/programming-languages GitHub Top 50 Programming Languages Globally] lag Python im Q1/2026 auf Rang 2, vor TypeScript und hinter JavaScript. * [https://pypl.github.io/PYPL.html PYPL] (Popularity of Programming Language Index) ist ein anderer Popularitätsindex für Programmiersprachen. Auch hier liegt Python mit großem Vorsprung auf dem ersten Platz (52,08%), gefolgt von Java (13,34%) und C/C++ (7,99%) (Stand September 2026). === Namensgebung === Der Name "Python" rührt von der Komikertruppe {{W|Monty Python}} her. Die Icons für Python (z.B. Python selbst, Eric IDE, IDLE) sind aber durch die Python-Schlangenart symbolisiert. <gallery> Python-logo-notext.svg|Python-Logo Guido van Rossum in PyConUS24.jpg|{{W|Guido van Rossum}} (geb. 1956), der Erfinder von Python </gallery> == Ein erstes Programm == Kommentare werden in Python mit der Raute (#) eingeleitet. Sie werden vom Python-Interpreter ignoriert. Text kann mit der print-Funktion ausgegeben werden. Starten Sie Python und geben sie folgende Anweisungen zeilenweise ein >>> # Das ist ein Kommentar >>> print("Hallo Welt!") Als Ergebnis erhalten Sie Hallo Welt! Der Prompt (>>>) ist selbstverständlich nicht einzutippen, sondern wird vom Python-System geliefert. Strings können in Python entweder in Anführungszeichen (") gesetzt werden oder in Hochkommatas('). In diesem Text wird die erste Variante bevorzugt eingesetzt. Im Gegensatz zu Julia ist es hier egal, ob zwischen <code>print</code> und der öffnenden Klammer Leerzeichen stehen. = Python als Taschenrechner = == Allgemeines == Wir wollen 3 * 5 berechnen. Dazu starten wir Python im interaktiven Modus. Geben Sie dann die Formel >>> 3 * 5 ein, drücken die Taste ENTER/RETURN ({{Taste|↵}}) und erhalten als Ergebnis 15 Auch kompliziertere Ausdrücke sind möglich. Beispielsweise mit Winkelfunktionen, Quadratwurzeln etc. Wir wollen nun den Ausdruck <math>\sin\sqrt{15}</math> berechnen : >>> import math >>> math.sin(math.sqrt(15)) -0.6679052983383519 Als erstes wird das math-Modul importiert. Dann wird der mathematische Ausdruck berechnet. Eine andere Variante, die dasselbe Ergebnis liefert, ist >>> from math import * >>> sin(sqrt(15)) -0.6679052983383519 Es wird also aus dem Modul <code>math</code> alles importiert (erkennbar am <code>*</code>). Will man nicht alles importieren, so kann man das auch einschränken: >>> from math import sin, sqrt Beenden lässt sich das Python-Programm durch Eingabe von <code>exit()</code> (und natürlich ist zur Bestätigung die RETURN-Taste zu drücken). == Die Hilfefunktion von Python == Bei Eingabe der Anweisung <code>help</code> oder <code>help()</code> springt Python in den Hilfemodus. Eingabe: >>> help() Eingabe: help> math.sin Ausgabe: Help on built-in function sin in math: math.sin = sin(x, /) Return the sine of x (measured in radians). Für die komplette Python-Dokumentation siehe [https://docs.python.org/3/]. Verlassen kann man den Hilfemodus durch das Drücken von STRG-C, bzw. der Eingabe von q, quit oder exit mit anschließendem Drücken der RETURN-Taste. == Aufgaben == * Erkunden Sie die Tangensfunktion "tan" mittels Python-Hilfe (vergessen Sie nicht das math-Modul zu importieren und das <code>math.</code> vor <code>tan</code>) * Berechnen Sie mit Python den Ausdruck <math>\frac{1}{2}\cdot \text{e}^2 \cdot \tan(\pi/3)</math>. Siehe für die Exponentialfunktion im Python-Hilfesystem auch den Befehl <code>math.exp</code>. Alternativ kann auch die Konstante <code>math.e</code> eingesetzt werden. Potenzieren kann man bei Python mit dem **-Operator (z.B. 2**3 = 8). Für <math>\pi</math> gibt es <code>math.pi</code>. = Python als Scriptsprache = Häufig wird man aber kompliziertere Anweisungsfolgen verarbeiten müssen. Diese will man normalerweise nicht jedesmal neu eingeben, sondern in einer Datei speichern und diese Datei dann zur Ausführung bringen. Speichern Sie dazu folgenden Code in einer Textdatei, z.B. unter MS Windows als c:\tmp\test1.py # Das ist ein Kommentar print("Hallo Welt!") Python-Dateien werden mit der Dateiendung .py versehen. Achten Sie darauf, dass vor dem print keine Leerzeichen vorhanden sind. Das ist eine Python-Eigenheit. Wie wir später sehen werden, nutzt Python Einrückungen als syntaktisches Mittel, z.B. um bei Schleifen den Schleifenkörper zu kennzeichnen. Danach bringen Sie die Skriptdatei test1.py (sozusagen das Hauptprogramm) folgendermaßen zur Ausführung: 1) Starten Sie unter MS Windows die Eingabeaufforderung (oder alternativ auch die Windows PowerShell). Das sieht dann etwa so aus: Microsoft Windows [Version 10.0.19045.3693] (c) Microsoft Corporation. Alle Rechte vorbehalten. C:\Users\xyz> : <small>Falls jemand nicht weiß, wie man die Eingabeaufforderung startet: Eine Möglichkeit ist, einfach in der Taskleiste von Windows das "Start"-Symbol &nbsp;([[Image:Windows_logo_-_2021_(Black).svg|10px]])&nbsp; mit der rechten Maustaste anklicken. "Ausführen" auswählen (oder alternativ für die PowerShell unter Windows 10 den Eintrag "Windows PowerShell", unter Windows 11 den Eintrag "Terminal"). Im sich öffnenden Dialogfenster gibt man in die "Öffnen"-Zeile das Wort <code>cmd</code> ein und mit "OK" wird das Ganze bestätigt.</small> 2) Wechseln Sie mittels <code>cd c:\tmp</code> in das Verzeichnis c:\tmp 3) Angenommen, Sie haben Python unter dem Pfad <code>c:\devel\Python\</code> installiert. Starten Sie das Programm so (der Prompt <code>c:\tmp></code>ist natürlich nicht mit einzutippen): c:\tmp>c:\devel\Python\python.exe test1.py 4) Wie erwartet ergibt sich folgende Ausgabe am Bildschirm Hallo Welt! Die Vorgehensweise unter Linux ist prinzipiell gleich. Die kleinen Unterschiede, wie z.B. der Slash statt dem Backslash in Pfadangaben, sollten für Linux-Benutzer keine Hürde darstellen. == Variablen == Variablenbezeichner können aus Buchstaben (A-Za-z), Ziffern (0-9) und Underscores (_) bestehen, dürfen aber nicht mit einer Zahl beginnen. Führende Underscores haben u.a. im Kontext mit der Objektorientierten Programmierung eine spezielle Bedeutung und sollten nicht für "normale" Variablenbezeichner verwendet werden. Gültige Variablenbezeichner wären also: xyz x1 _wert name_anzahl Theoretisch kann man auch Umlaute, griechische Buchstaben u.ä. in Variablenbezeichnern nutzen, z.B. ößÜ = 16 α = 134 print(ößÜ) print(α) Ausgabe: 16 134 Davon wird aber aus offensichtlichen Gründen ({{W|Englisch als Lingua franca}}) abgeraten. Das Eurozeichen (€) etc. darf man ohnehin nicht in Variablenbezeichnern verwenden, dies ergäbe einen Syntaxfehler. Siehe dazu auch [https://peps.python.org/pep-3131/]. Es gibt in Python etliche Schlüsselwörter (z.B. for, if oder return). Diese dürfen nicht als eigene Variablenbezeichner verwendet werden. Eine Liste aller Schlüsselwörter liefert das Script import keyword print(keyword.kwlist) <small>Übung: Speichern Sie dieses Script in eine Datei, z.B. in c:\tmp\test1.py. Führen Sie diese Datei aus, um die Liste der Schlüsselwörter auszugeben.</small> Da Python case-sensitiv ist, repräsentieren folgende Bezeichner verschiedene Variablen: xyz XYZ xYz Werte werden an Variablen mittels Gleich-Zeichen (=) zugewiesen. Im Folgenden wird der Code immer in der Datei c:\tmp\test1.py gespeichert. x = 5 y = 10 z = x*y print(z) Bringen Sie die Datei test1.py zur Ausführung, so erhalten Sie folgende Bildschirmausgabe 50 Sie können auch mehrere Anweisungen in einer Zeile durch Semikolon getrennt schreiben. Dies führt aber zu unübersichtlichem Code. x = 5; y = 10; z = x*y; print(z) Ausgabe: 50 Auch aus der Programmiersprache C/C++ oder Java bekannte Konstrukte können Sie verwenden, z.B. x = 5 # x = x - 2 x -= 2 print(x) Bildschirmausgabe: 3 Beachten Sie, dass mit dem =-Zeichen eine Wertezuweisung durchgeführt wird. Dies ist nicht äquivalent zum mathematischen =-Zeichen, wie am vorigen Beispiel zu ersehen ist. Den Inkrement-/Dekrementoperator (z.B. x++ oder x--) aus C/C++ oder Java kennt Python aber nicht. Variablen sind nicht an einen bestimmten Datentyp gebunden, folgendes ist mit Python problemlos möglich: import math wert = 10 print(wert) wert = 35.5 print(wert) wert = "Hallo" print(wert) wert = math.pi print(wert) Ausgabe: 10 35.5 Hallo 3.141592653589793 == Physische und logische Zeilen == In Python muss eine Anweisung in einer logischen Zeile Platz finden. Wird eine Anweisung aber zu lang für eine Zeile, dann kann sie in mehrere physische Zeilen unterteilt werden. Dies kann einerseits durch einen Backslash am Ende einer Zeile geschehen, z.B. a = 2 + \ 5 Dies stellt eine logische Zeile dar, die in zwei physische Zeilen unterbrochen ist. Geklammerte Ausdrücke werden automatisch zu einer logischen Zeile verbunden, z.B. a = (2 + 5) Achtung: Im ersten Beispiel darf nach dem Backslash nichts mehr stehen, auch kein Kommentar. Dies trifft im zweiten Bespiel nicht zu, hier könnte noch ein Kommentar folgen, z.B. a = (2 + # Kommentar 5) Auch für Strings gibt es Möglichkeiten, diese auf mehrere Zeilen aufzuspalten. # Kurzer String str1 = "ABC" # Langer String str2 = """Hallo Welt, Grüetzi Schwyzer, Servus an alle""" # Backslash str3 = "UVW\ XYZ" # Mit Klammern str4 = ("Sehr langer Text, der automatisch .............. " "in einer einzigen Variable zusammengefügt wird." ) print(str1) print(str2) print(str3) print(str4) Ausgabe: ABC Hallo Welt, Grüetzi Schwyzer, Servus an alle UVWXYZ Sehr langer Text, der automatisch .............. in einer einzigen Variable zusammengefügt wird. ==Hexadezimale, oktale, binäre und andere Zahlen== d = 1050 # Dezimalzahl h = 0xAA2 # Hexadezimalzahl o = 0o12 # Oktalzahl b = 0b100001101 # Binärzahl print(d) print(h) print(o) print(b) Ausgabe: 1050 2722 10 269 Groß- und Kleinbuchstaben sind in obigen Literalen übrigens egal. So kann man z.B. statt <code>0b1001</code> auch <code>0B1001</code> schreiben (siehe dazu [https://docs.python.org/3/reference/lexical_analysis.html#integer-literals]). Sie können auch dezimale in hexadezimale Zahlen umwandeln, usw.: h = hex(1050) # Dezimalzahl -> Hexadezimalzahl b = bin(1050) # Dezimalzahl -> Binärzahl o = oct(1050) # Dezimalzahl -> Oktalzahl print(h) print(b) print(o) Ausgabe: 0x41a 0b10000011010 0o2032 Gegeben sei die Zahl 121 zur Basis 3. Diese soll in eine Dezimalzahl umgewandelt werden. Das kann so geschehen: z = int("121", 3) print(z) Ausgabe: 16 Dass dies richtig ist, davon kann man sich folgendermaßen überzeugen: <math> 1 \cdot 3^2 + 2 \cdot 3^1 + 1 \cdot 3^0 = 9 + 6+ 1 = 16 </math> Zahlen übersichtlicher schreiben kann man auch mittels Underscore, z.B.: print("Eine Million (Variante 1) =", 1000000) print("Eine Million (Variante 2) =", 1_000_000) print("Eine Rechnung:", 2_000 * 400_000); Es ergibt sich bei beiden Varianten die gleiche Ausgabe. Variante 2 ist aber im Sourcecode leichter lesbar, detto die Zahlen in der Rechnung: Eine Million (Variante 1) = 1000000 Eine Million (Variante 2) = 1000000 Eine Rechnung: 800000000 == Strings und Platzhalter== Ein paar einfache Beispiele: print("Hallo {}" . format("Hugo")) print("Hallo {:s}" . format("Hugo")) print("Hallo %s" % "Hugo") Ausgabe: Hallo Hugo Hallo Hugo Hallo Hugo Python-Code (formatted string literals, Beispiel 1): str1 = "Hallo" str2 = "Hugo" print(f"{str1} {str2}") Ausgabe: Hallo Hugo Python-Code (formatted string literals, Beispiel 2): wert = 11.567 print(f"Ausgabe: {wert:.5f}") Ausgabe: Ausgabe: 11.56700 Komplexere Beispiele: print("Hallo {} und {}" . format("Hugo", "Mike")) print("Hallo {name1} und {name2}" . format(name2="Hugo", name1="Mike")) # Füllzeichen: * # Bündigkeit: > (=rechts), < (=links), ^ (=zentriert) # Feldweite: 10 # Typ: s (=String), f (=Gleitkommazahl), d (=Dezimalzahl) etc. print("Hallo {:*>10s}" . format("Hugo")) print("Hallo {:*<10s}" . format("Hugo")) Ausgabe: Hallo Hugo und Mike Hallo Mike und Hugo Hallo ******Hugo Hallo Hugo****** Python-Code: str = "Hallo\t%s\t%7.2f\t%10.2e\t%i" % ("Hugo", 12.34567, 34.567, 264) print(str) Ausgabe: Hallo Hugo 12.35 3.46e+01 264 == Unicode == Neben den bekannten ASCII-Zeichen lassen sich Zeichen auch mittels Unicode beschreiben. Griechische Buchstaben oder komplexere mathematische Operatoren - all das sollte kein Problem sein. Siehe auch {{W|Unicode}}, {{W|Liste der Unicodeblöcke}} und {{W|Unicodeblock Mathematische Operatoren}}. Im Folgenden werden ein paar Zeichen (Allquantor, Nabla-Operator, Existenzquantor), die man aus der Mathematik kennt, erzeugt. ch1 = "\N{FOR ALL}" ch2 = "\N{NABLA}" ch3 = "\u2203" print(ch1, ch2, ch3) Ausgabe: ∀ ∇ ∃ <small>Diese Ausgabe ergibt sich z.B. mit der IDLE-Shell oder mit Cygwin. Beim Ausführen über die Windows-Eingabeaufforderung oder Windows PowerShell unter MS Windows 10 erfolgt keine korrekte Darstellung. IDLE ist die mit Python mitgelieferte IDE ('''I'''ntegrated '''D'''evelopment '''E'''nvironment, Integrierte Entwicklungsumgebung). Gegen Ende dieses Textes wird IDLE kurz beschrieben. Das Problem mit der Windows Eingabeaufforderung lässt sich aber umgehen. Man muss nur eine Schriftart auswählen, die die Zeichen kennt, z.B. "DejaVu Sans Mono". Dazu klicken Sie einfach bei der Eingabeaufforderung mit der rechten Maustaste oben auf die weiße Leiste und wählen im aufpoppenden Fenster den Menüpunkt "Eigenschaften". Es öffnet sich ein Dialogfenster. Über den Reiter "Schriftart" lässt sich nun die Schriftart einstellen. Unter MS Windows 11 oder openSUSE Leap 15.6 (bash-Konsole) gibt es dieses Problem ohnehin nicht.</small> == Reguläre Ausdrücke == Python kennt auch {{W|Regulärer Ausdruck|reguläre Ausdrücke}}. Dazu gibt es in Python das Modul <code>re</code>. Beipielsweise sollen alle Zahlen (<math>\text{zahl}\in\mathbb{N}_0</math>) in einem String gesucht und ausgegeben werden. Als String sei gegeben: <code>3x Grüße und 100 Kekse.</code> Das Muster (Pattern) ist <code>\d+</code>. <code>\d</code> steht für eine Dezimalziffer 0-9. Das Plus-Zeichen (+) steht symbolisch für ein oder mehrere Zeichen des vorherigen Ausdrucks. Hier also ein oder mehrere Dezimalziffern. Es wird die Funktion <code>findall</code> aus dem Modul <code>re</code>verwendet. Python-Code: from re import findall str = "3x Grüße und 100 Kekse." pat = "\\d+" # Doppel-Backslashes müssen verwendet werden, sonst gibt Python eine Warnung aus! # alternativ: pat = r"\d+" # oder: pat = "[0-9]+" numb = findall(pat, str) print(numb) Ausgabe: ['3', '100'] Python kennt noch viele weitere Möglichkeiten mittels regulärer Ausdrücke zu hantieren. Dies soll hier aber nicht vertieft werden, da das Thema schon ziemlich speziell und komplex ist. Bei Bedarf siehe aber z.B. die Bücher ''Weigend, Seite 380ff'' und ''Ernesti, Kaiser'' [https://openbook.rheinwerk-verlag.de/python/28_001.html] oder die Python-Dokumentation [https://docs.python.org/3/library/re.html]. Auch [[Python unter Linux: Reguläre Ausdrücke]] liefert ein umfangreiches und brauchbares Python-2-Kapitel zu den regulären Ausdrücken. Die dort gelisteten Beispiele müssten ggf. vor Verwendung auf Python-3 umgeschrieben werden. <small>Wie macht man das? Dazu siehe z.B. [https://openbook.rheinwerk-verlag.de/python/43_001.html], [https://portingguide.readthedocs.io/en/latest/] oder [https://www.digitalocean.com/community/tutorials/how-to-port-python-2-code-to-python-3]</small> <small>Es gibt auch ein externes Modul ''regex'', das bei Bedarf extra installiert werden muss ([https://pypi.org/project/regex/]). Es bietet zusätzliche Funktionalität und gründlicheren Unicode-Support. Dies sei hier aber nur der Vollständigkeit halber erwähnt.</small> == Verzweigungen == === if === Die IF-Verzweigung sei aus anderen Programmiersprachen bereits bekannt. In {{W|Pseudocode}} lässt sie sich folgendermaßen darstellen: WENN bedingung TRUE führe block1 aus SONST führe block2 aus ENDE Als {{W|Aktivitätsdiagramm|UML-Aktivitätsdiagramm}} sieht das in etwa so aus: [[File:If-Then-Else-diagram.svg|200px]] Und als {{W|Nassi-Shneiderman-Diagramm|Nassi-Shneiderman-Struktogramm}} so: [[File:Zweiseitige Auswahl.png|250px]] In Python gibt es keinen expliziten ENDE-Kennzeichner. Stattdessen wird der Code durch Einrückungen strukturiert. Alles mit der gleichen Einrückungstiefe gehört zum selben Block. Dies zeichnet Python vor anderen Programmiersprachen aus. Die test1.py-Datei laute also wie folgt: x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: Der else-Zweig wird ausgefuehrt x ist groesser oder gleich 4 Man achte auch auf die Doppelpunkte in der if- und else-Zeile. Darauf vergisst man gerne, wenn man von anderen Programmiersprachen kommt. Folgendes wäre in Python ein Fehler (genauer gesagt ein IndentationError). x = 5 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Auch Nachstehendes würde nicht zum gewünschten Ergebnis führen (löst aber keine Fehlermeldung aus). Der letzte print-Befehl ist schon außerhalb der IF-ELSE-Verzweigung. x = 3 if x < 4: print("x ist kleiner als 4") else: print("Der else-Zweig wird ausgefuehrt") print("x ist groesser oder gleich 4") Ausgabe: x ist kleiner als 4 x ist groesser oder gleich 4 Python kennt eine Reihe von Vergleichs- und Verknüpfungsoperatoren: <, <= ... kleiner (gleich) >, >= ... größer (gleich) == ... gleich != ... ungleich is ... identisch is not ... nicht identisch and ... AND or ... OR not ... NOT Beispielsweise: a = 5 b = 9 if a<=10 and b!=7: print("OK") else print("Nicht OK") Ausgabe: OK Der else-Block kann übrigens auch ersatzlos entfallen. Als Pseudocode sieht das so aus WENN bedingung TRUE führe block aus ENDE Mehrfache Verzweigungen werden durch das elif-Konstrukt erstellt. In Pseudocode: WENN bedingung1 TRUE führe block1 aus SONST WENN bedingung2 TRUE führe block2 aus SONST WENN bedingung3 TRUE führe block3 aus SONST führe block4 aus ENDE Ein Python-Beispiel: a = 14 if a<=10: print("<=5") elif a>11 and a<15: print("11 bis 15") elif a>16 and a<20: print("16 bis 20") else: print(">=20") Ausgabe: 11 bis 15 In Python gibt es auch die Schlüsselwörter <code>True</code> (für wahr) und <code>False</code> (für falsch). Man beachte, dass sie mit Großbuchstaben beginnen. Andere Schreibweisen wären ein Fehler. Sie gehören zum Datentyp <code>bool</code>. Ihnen sind auch die Zahlen <code>1</code> und <code>0</code> zugewiesen. Man beachte, dass {{W|Rundungsfehler}} auftreten können. D.h. man sollte bei der Verwendung von {{W|Gleitkommazahl|Gleitpunktzahlen}} niemals auf absolute Genauigkeit prüfen, sondern eine Toleranz (einen <math>\varepsilon</math>-Wert) vorgeben. Ein klassisches Beispiel, das ein falsches Ergebnis liefert, ist: i = 0.1 + 0.2 print(i) if i == 0.3: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 NOK Und das, obwohl man schon in der Volksschule lernt, dass 0.1 + 0.2 gleich 0.3 ist. Korrekt muss das obige Beispiel z.B. so umgeschrieben werden: ist = 0.1 + 0.2 soll = 0.3 epsilon = 0.000001 print(ist) if abs(ist-soll) < epsilon: print("OK") else: print("NOK") Ausgabe: 0.30000000000000004 OK Alternativ kann auch die <code>math.isclose()</code>-Funktion verwendet werden. Das sei aber hier nur erwähnt und nicht konkret ausgeführt. <u>Aufgabe:</u> Recherchieren Sie im Internet zum Thema <code>math.isclose()</code>-Funktion. === match === Ab Python 3.10 gibt es auch die match-Anweisung. Dies ist das Python-Pendant für die switch-Anweisung in anderen Programmiersprachen, geht aber bei näherer Betrachtung weit darüber hinaus. Hier nur ein einfaches Beispiel: x = "Hello" match x: case "Servus" | "Ciao": # or print("Servus an alle") case "Grüetzi": print("Grüetzi Schwyzer") case _: # other, default, sonstiges ... print("Hallo Welt") Ausgabe: Hallo Welt Als Struktogramm sieht das in etwa so aus: [[File:Mehrseitige Auswahl.png|250px]] Für nähere Details siehe z.B. [https://www.geeksforgeeks.org/python-match-case-statement/], [https://learnpython.com/blog/python-match-case-statement/], [https://docs.python.org/3/tutorial/controlflow.html#match-statements] und das Python Enhancement Proposal (PEP) 636 – Structural Pattern Matching: Tutorial [https://peps.python.org/pep-0636] und dort insbesondere den Anhang A - Quick Intro. <small><code>match, case, _</code> etc. sind sogenannte ''soft keywords''. Im Gegensatz zu den normalen Schlüsselwörtern dürfen ihnen auch Werte zugewiesen werden. Eine Liste der weichen Schlüsselwörter lässt sich durch <code>keyword.softkwlist</code> erstellen (die Anweisung gibt es seit Python 3.9). Siehe dazu auch [https://stackoverflow.com/questions/65800344/what-are-soft-keywords] und [https://docs.python.org/3/library/keyword.html#keyword.softkwlist].</small> == Schleifen == Kopfgesteuerte Schleife, Endlosschleife und fußgesteuerte Schleife: [[File:Programmingloops.svg|450px]] === while === Die WHILE-Schleife ist kopfgesteuert. Sie funktioniert wie aus anderen Programmiersprachen bekannt. In Pseudocode: SOLANGE bedingung TRUE führe block aus ENDE In Python: x = 0 while x <= 10: print(x) x += 1 Ausgabe: 0 1 2 3 4 5 6 7 8 9 10 Eine Endlosschleife ergibt sich z.B. so: i = 5 while True: print(i) i-=1 Beendet werden kann sie mit der Tastenkombination STRG-C. Eine fußgesteuerte Schleife kann so simuliert werden: i = 5 while True: print(i) i-=1 if i<=0: print("Fire") break Ausgabe: 5 4 3 2 1 Fire Der <code>break</code>-Befehl wird etwas später noch einmal kurz thematisiert. === for === Struktogramm einer for-Schleife: [[File:Zählschleife.png|200px]] In Python bspw. so: for x in range(6): print(x*2) Ausgabe: 0 2 4 6 8 10 Die Schleife läuft von 0 bis 5. Ausgegeben wird jeweils der Wert x*2. Aquivalent kann diese Schleife auch so geschrieben werden: for x in range(0, 11, 2): print(x) Die Ausgabe ist wie oben. Der Startwert sei 0, der Endwert ist 11-1 und die Schrittweite ist 2. Ein anderes Beispiel sei for x in "text": print(x) Ausgabe: t e x t == Schleifen abbrechen == === break === <code>break</code> bricht die Schleife ab und setzt mit dem nächsten Befehl außerhalb der Schleife fort. for var in range(100): print(var) if var == 5: break Ausgabe: 0 1 2 3 4 5 === continue === <code>continue</code> bricht den aktuellen Schleifendurchlauf ab und setzt mit dem nächsten Schleifendurchlauf fort. for var in range (11): if var == 5: continue print(var) Ausgabe: 0 1 2 3 4 6 7 8 9 10 == try - except == try: z1 = 12 / 0 print(z1) except ZeroDivisionError: print("Das Ergebnis ist unendlich") except: print("Kann nicht berechnet werden!") print("Bitte die Formel korrigieren!") print("Setze Programm fort!") Ausgabe: Das Ergebnis ist unendlich Setze Programm fort! Es wird versucht, eine Zahl durch Null zu dividieren. Das ist nicht möglich, es wird eine Ausnahme ausgelöst. Das Programm springt daher in den except-ZeroDivisionError-Block und führt die dort gelisteten Anweisungen aus (in unserem Fall eine print-Anweisung). Danach wird das Programm fortgesetzt. Würden wir dieses Programm ohne try-except ausführen, so ergibt sich aus z1 = 12 / 0 print(z1) folgende Fehlermeldung und ein unmittelbarer Programmabbruch Traceback (most recent call last): File "C:\tmp\test1.py", line 1, in <module> z1 = 12 / 0 ZeroDivisionError: division by zero Mit dem try-except-Mechanismus können also Ausnahmen oder Fehler aufgefangen und behandelt werden. In unserem Beispiel ist das eher trivial, aber bei größeren Programmen kann das durchaus Sinn machen. Neu in Python 3.14 ist, dass mehrere Ausnahmen auch ohne Klammern angegeben werden können, z.B.: bis inkl. Python 3.13 nur: except (ZeroDivisionError, ValueError): ab Python 3.14 auch: except ZeroDivisionError, ValueError: == pass == Ein leerer Block muss in Python mittels dem Schlüsselwort <code>pass</code> dargestellt werden. Z.B. x = 2 if x == 1: print("Wert ist ", x) else: pass Würde man das <code>pass</code> im else-Block weglassen, so würde man eine Fehlermeldung erhalten: IndentationError: expected an indented block after 'else' statement on line 5 = Funktionen = == Aufrufen von Funktionen == Funktionen sind uns im Rahmen dieses Kurses schon zuhauf begegnet. Sei es die print()-, die math.sin()- oder die hex()-Funktion. All diese Funktionen werden von Python zur Verfügung gestellt, ohne dass man sie explizit programmieren müsste. Aufgerufen werden diese Funktionen, indem man ihren Namen eintippt, gefolgt von runden Klammern. In diesen Klammern können noch Argumente übergeben werden. Auch Rückgabewerte sind möglich. == Funktionen selber schreiben == Funktionen werden mit dem def-Schlüsselwort (man definiert die Funktion) eingeleitet, danach folgt der Funktionsname, danach wiederum runde Klammern, in denen formale Argumente stehen können. Abgeschlossen wird die def-Zeile mit einem Doppelpunkt. Danach folgt der Funktionskörper. Dieser Funktionskörper muss wiederum eingerückt werden (wie von den Verzweigungen und Schleifen bekannt). Aufgerufen wird diese Funktion, indem man ihren Funktionsnamen eingibt, gefolgt von runden Klammern (ggf. mit den aktuellen Parametern). Z.B. # Funktion definieren def halloWelt(i): # i ... beliebige Ganzzahl print("Hallo " * i, end="") print("Welt!") # Funktion aufrufen halloWelt(3) Ausgabe: Hallo Hallo Hallo Welt! Unterschied zwischen formalen und aktuellen Parametern: [[Datei:PythonIng_func1.jpg]] <small>Aktuelle Parameter werden auch Argumente genannt.</small> Rückgabe von Funktionswerten: # Funktion definieren def mathFunc(a, b): r1 = a + b r2 = a * b return r1, r2 # Funktion aufrufen c, d = mathFunc(3, 5) # Ausgabe der zurückgegebenen Werte print(c) print(d) Ausgabe: 8 15 Es werden r1 und r2 zurückgegeben und den Variablen c und d zugewiesen. (r1, r2) und (c, d) sind Tupel. Was Tupel konkret sind, siehe etwas später in diesem Kapitel. 3 und 5 sind die aktuellen Parameter (die Argumente). a und b sind die formalen Parameter. Die Zuweisung der aktuellen zu den formalen Parametern erfolgt in der gegebenen Reihenfolge, also die Zahl 3 wird an a übergeben und die Zahl 5 an b. Vorgabeparameter, z.B.: def mathFunc(a=10, b=20): r1 = a + b r2 = a * b return r1, r2 c, d = mathFunc(3, 5) print(c) print(d) e, f = mathFunc(5) print(e) print(f) g, h = mathFunc(b=6) print(g) print(h) Ausgabe: 8 15 25 100 16 60 Erklärung: * Erster <code>mathFunc</code>-Aufruf: Es werden, wie weiter oben, die Argumente 3 und 5 an die formalen Parameter a und b übergeben. Die Rückgabewerte r1 und r2 werden an c und d übergeben. Somit ist c=8 und d=15. * Zweiter <code>mathFunc</code>-Aufruf: Es wird nur das Argment 5 an a übergeben. b behält den Vorgabewert 20. D.h. e= 25 und f=100. * Dritter <code>mathFunc</code>-Aufruf: Es wird nur die Zahl 6 an b übergeben, a behält seinen Vorgabewert 10. Somit ergibt sich g=16 und h=60. Beispiel (Schlüsselwortargumente vs. Positionsargumente): def mathFunc(a, b): r1 = a - b r2 = a / b return r1, r2 c, d = mathFunc(b=3, a=5) # Schlüsselwortargumente e, f = mathFunc(3, 5) # Positionsargumente print(c) print(d) print(e) print(f) Ausgabe: 2 1.6666666666666667 -2 0.6 Durch die Verwendung von Schlüsselwortargumenten können die Argumente in beliebiger Reihenfolge angegeben werden. Bei den Positionsargumenten ist die Reihenfolge vorgegeben. Daraus resultiert auch der Unterschied bei den obigen Ausgaben. Werden beide Arten in einem Aufruf gemischt, so müssen die Positionsargumente zuerst angegeben werden. Den Unterschied zwischen beiden Argumentarten zu kennen ist wichtig, nicht nur bei selbst erstellten Funktionen. Auch beim Aufruf von Python-Funktionen verfolgt einen die Mischung von Schlüsselwort- und Positionsargumenten auf Schritt und Tritt, z.B. beim etwas später folgenden Abschnitt über "Grafiken zeichnen": plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") Bei dieser <code>plot</code>-Funktion aus dem Modul <code>matplotlib.pyplot</code> sind <code>x</code> und <code>y1</code> Positionsargumente. <code>label, lw</code> und <code>ls</code> sind die Namen der Schlüsselwortargumente. Die Schlüsselwortargumente könnten auch in anderer Reihenfolge angeschrieben werden, nicht jedoch die Positionsargumente! Siehe zu <code>matplotlib.pyplot.plot</code> auch die Seite [https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html]. == Lambda-Funktionen == print((lambda a, b: a*b) (3, 5)) Ausgabe: 15 Eingeleitet wird eine Lambda-Funktion (auch Lambda-Form, Lambda-Operator oder anonyme Funktion genannt) mit dem Schlüsselwort <code>lambda</code>. Es folgen die formalen Argumente, danach ein Doppelpunkt, die Berechnungsvorschrift und ggf. abschliessend in Klammern die aktuellen Parameter. Man kann einer Lambda-Funktion auch einen Funktionsnamen geben und die Funktion über diesen Namen aufrufen, z.B. prod = lambda a, b: a*b print(prod(3, 5)) Als Ausgabe wird wieder die Zahl 15 geliefert. == Rekursive Funktionen == Funktionen können wiederum andere Funktionen aufrufen. Von einem rekursiven Funktionsaufruf spricht man, wenn die aufgerufene Funktion gleich der aufrufenden ist. def printFunc(i): if (i >= 5): return else: print("Hallo Welt") printFunc(i+1) printFunc(1) Ausgabe: Hallo Welt Hallo Welt Hallo Welt Hallo Welt == Funktionsannotationen == Python ist sehr flexibel, was Typen angeht. Im Vorhergehenden haben wir generell keine Typangaben gemacht. Will man Typen angeben, so bietet Python das Konzept der Funktionsannotation. def calcFunc(a: int, b: int) -> int: return a+b r1 = calcFunc(8, 9) r2 = calcFunc(8.0, 9.0) r3 = calcFunc("Hallo", "Welt") print(r1) print(r2) print(r3) Ausgabe: 17 17.0 HalloWelt Jetzt sieht man auf den ersten Blick, welche Typen der Programmierer im Sinn hatte, als er die Funktion erstellte. Das Problem dabei ist nur, dass es Python ziemlich egal ist, welche Typen man im Endeffekt eingibt. Im obigen Beispiel können statt Integer-Typen u.a. auch Float- oder String-Typen eingegeben werden. <small> Siehe zum Thema "Type Checking" aber auch den später folgenden Abschnitt [[Ing_Mathematik:_Python#Type_Checker]]. </small> == Variadische Funktionen == Python-Code: def test1(a, *b): print(a); for c in b: print(c); test1("Hallo", "Welt", "Schweizer", "und alle anderen") Ausgabe: Hallo Welt Schweizer und alle anderen Mit dem Stern (auch als Splat-Operator bezeichnet) in der formalen Parameterliste bei der Funktion <code>test1</code> wird angezeigt, dass eine beliebige Anzahl von Argumenten übergeben wird. <small> Dies entspricht in etwa dem, was in anderen Programmiersprachen (PHP etc.) mittels Ellipse (<code>...</code>) angezeigt wird.</small> = Tupel, Listen und andere = [[Datei:Python 3. The standard type hierarchy.png|mini|hochkant=1.7|Datentypen und Strukturen]] == Tupel und Listen == Tupel, Listen und einige andere sind Datenstrukturen oder Sequenzen. Listen (z.B. eine Einkaufsliste) sind veränderbar (mutable). Ein Tupel kann dagegen nicht verändert werden (immutable). Listen werden beim Anlegen in eckige Klammern eingeschlossen, Tupel in runde Klammern. Beim Tupel können die Klammern auch weggelassen werden. Ein Tupel mit nur einem Element muss mit einem Beistrich abgeschlossen werden. Der Grund ist, dass Python sonst nicht entscheiden kann, ob ein Tupel angelegt werden soll, oder nur ein geklammerter Wert. Als Gedächtnisstütze kann man sich den Unterschied zwischen Tupel und Liste ev. so leichter merken: : T'''u'''pel ... r'''u'''nde Klammern, '''u'''nveränderlich : L'''i'''ste ... eck'''i'''ge Klammern, veränderl'''i'''ch. Nachfolgend werden einige Operationen mit Listen und Tupel dargestellt. # Liste und Tupel liste = [1, 2, "Hallo"] tupel = (1, 2, "Hallo") # Ausgabe von liste und tupel print(liste) print(tupel) # Ausgabe von Einzelelementen print(liste[1]) print(tupel[2]) # Element an Liste anhängen und einfügen liste.append(55) liste.insert(4, "Welt") print(liste) # Element aus Liste entfernen liste.remove(1) print(liste) # einige weitere Beispiele liste2 = [1,] tupel2 = 1, 2 tupel3 = (1,) print(liste2) print(tupel2) print(tupel3) Ausgabe: [1, 2, 'Hallo'] (1, 2, 'Hallo') 2 Hallo [1, 2, 'Hallo', 55, 'Welt'] [2, 'Hallo', 55, 'Welt'] [1] (1, 2) (1,) Beispiel (eine Liste von Wörtern zu einem einzigen zusammenhängenden Text verbinden): woerter = ["Hallo", "Welt"] satz = " ".join(woerter) print(satz) Ausgabe: Hallo Welt == Dictionaries und Mengen == Zu den Datenstrukturen gehören weiters auch Mengen und Dictionaries. Mengen sind von der Mathematik bekannt, sie sind ungeordnet und es kommen keine mehrfachen Elemente vor. Dictionaries sind durch Schlüssel :Wert-Paare gekennzeichnet. Mengen werden beim Anlegen wie Dictionaries in geschweifte Klammern eingeschlossen. dict = {"vorname":"Hugo", "nachname":"Meister" } menge = {1, 1, 3, 4, 4, 4, "Hallo"} print(dict) print(menge) print(dict["vorname"]) Ausgabe: {'vorname': 'Hugo', 'nachname': 'Meister'} {1, 3, 4, 'Hallo'} Hugo Geschweifte Klammern ohne Inhalt stellen Dictionaries dar und keine Mengen: di = {} print(type(di)) Ausgabe: <class 'dict'> Leere Mengen lassen sich mit <code>set()</code> erzeugen: menge = set() # leere Menge print(menge) menge.add("Hallo") # Element hinzufügen print(menge) Ausgabe: set() {'Hallo'} Beispiel (einige Mengenoperationen): mengeA = {"Hallo", "Welt"} mengeB = {1, 2, "Welt", 3} # Vereinigung print(mengeA | mengeB) print(mengeA.union(mengeB)) # Durchschnitt print(mengeA & mengeB) print(mengeA.intersection(mengeB)) # Differenz print(mengeA - mengeB) print(mengeA.difference(mengeB)) # Symmetrische Differenz print(mengeA ^ mengeB) print(mengeA.symmetric_difference(mengeB)) # Teilmenge print(mengeA.issubset(mengeB)) # Mehrere Elemente hinzu mengeA.update(["Super", 67, 125]) print(mengeA) # Element löschen mengeA.discard("Hallo") print(mengeA) Ausgabe: {1, 2, 3, 'Welt', 'Hallo'} {1, 2, 3, 'Welt', 'Hallo'} {'Welt'} {'Welt'} {'Hallo'} {'Hallo'} {1, 2, 3, 'Hallo'} {1, 2, 3, 'Hallo'} False {67, 'Super', 'Welt', 'Hallo', 125} {67, 'Super', 'Welt', 125} Es gibt schon seit "ewigen" Zeiten unveränderbare Mengen, die mittels <code>frozenset</code> eingeleitet werden. Neu ab Python 3.15 ist dagegen das Pendant <code>frozendict</code>, das unveränderbare Dictionaries darstellt. fdict = frozendict({"vorname":"Hugo", "nachname":"Meister"}) fset = frozenset({"A", 1, "A"}) print(fdict) print(fdict["vorname"]) print (fset) try: fdict["vorname"] = "Max" print(fdict["vorname"]) except TypeError as e: print(f"Fehler: {e}") try: fset.add("B") print(fset) except AttributeError as e: print(f"Fehler: {e}") Ausgabe: frozendict({'vorname': 'Hugo', 'nachname': 'Meister'}) Hugo frozenset({1, 'A'}) Fehler: 'frozendict' object does not support item assignment Fehler: 'frozenset' object has no attribute 'add' == List Comprehensions == Aus einer Eingabeliste soll eine Ausgabeliste erzeugt werden. Das kann folgendermaßen geschehen. Mathematische Schreibweise: <math>lc = \{2x|x\in\ \mathbb{N}, 1\le x < 11\}</math> Python-Code: lc = [x*2 for x in range(1,11)] print(lc) Ausgabe: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] Mathematische Schreibweise: <math>lc = \{2x | x \in \mathbb{N}, 1\le x < 11, x \bmod 2 = 0 \}</math> Python-Code: lc = [x*2 for x in range(1,11) if x%2 == 0] print(lc) Ausgabe: [4, 8, 12, 16, 20] Siehe auch {{W|List Comprehension}}. == Set Comprehensions == Dies ist sehr ähnlich wie im vorigen Abschnitt beschrieben. Es wird aber keine Liste, sondern eine Menge erzeugt. sc = {x*2 for x in range(1,11)} print(sc) Ausgabe: {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} == Listen zusammenführen - zip() == li1 = ["A", "B", "C", "D"] li2 = [1, 2, 3, 4] li3 = [5.5, 6.6, 7.7, 8.8] z = zip(li1, li2, li3) print(z) li4 = list(z) print(li4) Ausgabe: <zip object at 0x00000283B6C6AC80> [('A', 1, 5.5), ('B', 2, 6.6), ('C', 3, 7.7), ('D', 4, 8.8)] == Generatorausdruck == g = (i*2 for i in range(1,11)) print(g) t = tuple(g) print(t) print(t[1:3]) Ausgabe: <generator object <genexpr> at 0x00000241D2A4A5A0> (2, 4, 6, 8, 10, 12, 14, 16, 18, 20) (4, 6) == Slicing == slice ... Scheibe, Teil, in Scheiben schneiden Beispiel: Zugriff auf Elemente eines geordneten sequentiellen Objekttyps (Liste, Tupel oder String): str1 = "Hallo" # Das erste Element wird mit dem Index 0 angesprochen # [start (inkl.) : stop (exkl.) : step (default=1)] str2 = str1[0:2] # Alternativ auch: str2 = str1[:2] print(str2) tup1 = (0,1,2,3) # Das letzte Element hat auch den Index -1, das vorletzte den Index -2 usw. tup2 = tup1[-3:-1] print(tup2) lst1 = [[1, 5, 10, 20], [30, 40, 50, 60]] lst2 = lst1[1][1] print(lst2) Ausgabe: Ha (1, 2) 40 Beispiel: Umdrehen von Strings str1 = "Hallo" str2 = str1[::-1] print(str2) Ausgabe: ollaH = Objektorientierte Programmierung = {{Wikipedia|Objektorientierte Programmierung}} * {{W|Klasse (Objektorientierung)|Klasse}} ... die Schablone oder der Bauplan, enthält Methoden und Attribute * {{W|Objekt (Programmierung)|Objekt}} ... eine Klasseninstanz (die konkrete Ausprägung der Klasse) * {{W|Attribut (Programmierung)|Attribute}} ... die Eigenschaften eines Objekts * {{W|Methode (Programmierung)|Methoden}} ... die Aktionen (Operationen), die ein Objekt ausführen kann * {{W|Vererbung (Programmierung)|Vererbung}} ... neue Klassen (Subklassen, Unterklassen, abgeleitete Klassen) aus vorhandenen Klassen (Superklassen, Oberklassen, Basisklassen, Elternklassen) ableiten. Ermöglicht den Aufbau von Klassenhierarchien. Die Subklasse "erbt" Attribute und Methoden von der Superklasse. Python unterstützt (so wie C++, aber im Gegensatz zu Java) Mehrfachvererbung. == UML == * {{W|Unified Modeling Language|UML}} ... '''U'''nified '''M'''odeling '''L'''anguage, eine Modellierungssprache. Die UML enthält zahlreiche Diagrammarten, um Programme zu modellieren. Im Nachfolgenden wird nur das {{W|Klassendiagramm}} verwendet. [[File:UmlCd Klasse-3.svg|300px]] * {{W|Sichtbarkeit (Programmierung)|Sichtbarkeit}}: ** + ... public (öffentlich) ** - ... private ** # ... protected * {{W|Attribut_(UML)#Attribute_für_Instanzen_und_für_Klassen|Klassenattribute}} (statische Attribute): Werden nur einmal pro Klasse angelegt. Im Klassendiagramm werden sie unterstrichen. [[File:Attribute-3.png|200px]] * Vererbung: <gallery> InheritancePgmUML.svg | Abgeleitete Klasse erbt von Basisklasse (Einfachvererbung) Diamond inheritance.svg | D erbt von B und C (Mehrfachvererbung). B und C erben von A (Einfachvererbung) </gallery> Für weitergehende Betrachtungen zur UML wird auf Spezialliteratur verwiesen, z.B.: * Seidl et al.: UML@Classroom. dpunkt, 2012, ISBN 978-3-89864-776-2 * Rupp et al.: UML 2 glasklar. Hanser, 4. Aufl., 2012, ISBN 978-3-446-43057-0 == Eine einfache Klasse == [[Datei:PythonIng_uml1.svg | 200px]] class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 fahr = Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die Klasse Fahrzeug wird durch das class-Schlüsselwort eingeleitet. raeder ist ein Klassenattribut und public. __init__ wird bei der Objekterzeugung automatisch aufgerufen (ist der sogenannte Konstruktor). Man achte darauf, dass diese Methode immer mit zwei Unterstrichen eingeleitet und abgeschlossen wird. Instanzattributen wird das Wort self vorangestellt. Wir sehen uns z.B. das Attribut self.__geschwind an. Auch hier werden zwei Unterstriche verwendet. Das bedeutet, dass dieses Attribut strikt/stark private ist. Wird nur ein Unterstrich verwendet, so deutet dies auf schwach/weakly private hin. Letzteres wird in Python deutlich häufiger verwendet. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt. Besonderheiten bei stark und schwach private: * '''stark private''': ** zwei führende Unterstriche ** Name Mangling: Name wird zu <code>_Klassenname__variablenname</code> ** Schutz vor Namenskollisionen bei Vererbung ** am Ende des Namens dürfen keine zwei Unterstriche verwendet werden. Das wären dann Magic Methods oder Dunder-Methods (z.B. __init__). Diese sind public. * '''schwach private''': ** ein führender Unterstrich ** Name bleibt gleich ** ist nur ein Hinweis an die Programmierer, kein starker Schutz ** <code>from modul import *</code>: Objekte mit einem führenden Unterstrich werden standardmäßig nicht importiert ** Standard für die Kapselung bei Python. Schätzung: Weit mehr als 80% der nicht-öffentlichen Attribute/Methoden werden als schwach private deklariert. Weniger als 5-10% als stark private (Quelle: Google KI) == Klassen importieren == Häufig ist es sinnvoll und übersichtlicher Klassen in eigenen Dateien zu speichern. Das sind dann eigene Module. Abgespeichert werden Sie mit der Endung py, wie bisher auch praktiziert. Aufgerufen werden Sie mit der import-Anweisung. Dann ist aber nur der Dateiname ohne Endung py zu verwenden. Klarer wird das mit einem Beispiel. Datei c:\tmp\fahrzeug.py class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 Datei c:\tmp\test1.py import fahrzeug fahr = fahrzeug.Fahrzeug(150, 90) print(fahr.convertGeschw()) Ausgabe: 41.666666666666664 Die üblichen import-Anweisungen lauten wie folgt: {| {{prettytable}} ! import-Befehl ! Instanz |- | import xyz || xyz.Klasse |- | import xyz as x || x.Klasse |- | from xyz import Klasse || Klasse |- | from xyz import * || Klasse |} Der Vorteil der ersten beiden import-Anweisungen ist, dass es kaum zu Namenskollisionen kommen kann. Dafür hat man bei den letzten beiden Varianten weniger Tipparbeit. == Vererbung == === Einfachvererbung === [[Datei:PythonIng_uml2.svg | 200px]] Datei fahrzeug.py: class Fahrzeug: raeder = 4 def __init__(self, geschwindigkeit, leistung): self.__geschwind = geschwindigkeit self.__leistung = leistung def setGeschwindigkeit(self, geschwindigkeit): # geschwindigkeit in km/h self.__geschwind = geschwindigkeit def setLeistung(self, leistung): self.__leistung = leistung def convertGeschw(self): # geschwindigkeit in m/s rueckgeben return self.__geschwind / 3.6 class Luftfahrzeug(Fahrzeug): def __init__(self, geschwindigkeit, leistung, fluegel): super().__init__(geschwindigkeit, leistung) self.__flueg = fluegel def getFlueg(self): return self.__flueg Datei test1.py: import fahrzeug fahr = fahrzeug.Luftfahrzeug(150, 90, 4) print(fahr.getFlueg()) Ausgabe: 4 === Mehrfachvererbung === Mit Python ist auch Mehrfachvererbung möglich, z.B.: class A: def _printA(self): print("Klasse A") class B: def _printB(self): print("Klasse B") class C(A,B): def __init__(self): self._printA() self._printB() c = C() Ausgabe: Klasse A Klasse B Die Klasse C erbt von A und B. In UML sieht das in etwa so aus: +-----------------------------+ +-------------------------+ | A | | B | +-----------------------------+ +-------------------------+ | | | | +-----------------------------+ +-------------------------+ | # printA() | | # printB() | +-----------------------------+ +-------------------------+ . . / \ / \ --- --- | | | | +---------------------+ | C | +---------------------+ | | +---------------------+ | | +---------------------+ <code>printA()</code> und <code>printB()</code> sind schwach private (in UML als <code>protected</code> mit einem # dargestellt). Es ist aber zu beachten, dass schwach private nur Konvention ist. Praktisch könnte man auch von außerhalb auf diese Methoden zugreifen. Das soll man aber nicht tun, und das wird in Python durch einen Unterstrich angedeutet. = Grafiken zeichnen = Für das Zeichnen von Grafiken wird hier das Modul <code>matplotlib</code> verwendet. <code>matplotlib</code> ist ein externes Modul und muss vor der ersten Verwendung installiert werden. Das geht so: # Starten Sie ein Terminal (bei Windows die Eingabeaufforderung). # Führen Sie darin folgenden Befehl aus <code>c:\devel\Python\Scripts\pip.exe install matplotlib</code> pip ist übrigens der Paketmanager von Python ({{W|Pip_(Python)}}). Optimalerweise installieren wir auch gleich das Modul <code>numpy</code> (Numerical Python). Wir werden es im Folgenden oft benötigen (nicht nur bei den Grafiken). Das funktioniert vom Prinzip her genauso, wie für <code>matplotlib</code> gezeigt. <small>Verwenden Sie Spyder, so sind diese Schritte nicht nötig. Spyder inkludiert diese Pakete standardmäßig. Unter openSUSE Tumbleweed lassen sich diese Pakete mittels YaST oder zypper installieren.</small> == 2D == === Graph einer Funktion === Es soll die cosh-Funktion im Intervall <math>x\in[-3,3]</math> gezeichnet werden. Der Programmcode lautet in der einfachsten Form: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh1.jpg]] Der Code ist quasi selbsterklärend. Das Untermodul pyplot des matplotlib-Moduls und das numpy-Modul werden importiert. x läuft von -3 bis +3. y wird für jeden x-Wert per Formel ausgerechnet. "plt.plot()" ist der Zeichenbefehl. "plt.show" ist notwendig, um das Fenster mit der Grafik anzuzeigen. Die Schrittweite 0.1 wurde so gewählt, um einen ausreichend glatten Verlauf des Graphen zu gewährleisten. Das ist immer ein Kompromiss zwischen Berechnungszeit und Ansehnlichkeit. Testen Sie einfach ein paar verschiedene Werte, um ein Gefühl dafür zu zu bekommen. "plt.grid()" zeichnet ein Gitter in die Grafik (kann auch weggelassen werden). Die Bezeichnungen plt und np könnten auch anders gewählt werden. Es ist aber Konvention, diese so wie hier gezeigt zu wählen. <small>Mit der im obigen Bild gezeigten Menüleiste kann die dargestellte Grafik nachträglich noch geändert werden (Zoom, Pan, Achsenparameter, Kurvenparameter etc.). Natürlich kann man das alles auch direkt programmieren. Wie das funktioniert wird ansatzweise etwas später gezeigt.</small> Ein etwas komplexeres Beispiel ist Folgendes: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y = np.cosh(x) + 2**x plt.plot(x,y) plt.grid() plt.show() Ausgabe: [[Datei:PythonIng_cosh4.png]] Man beachte, dass im Gegensatz zu Octave und Julia der ominöse Punkt (.) bei 2**x mit Python nicht benötigt wird. Das macht das Programmiererleben etwas einfacher. === Graphen mehrerer Funktionen und weiteres === import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x") plt.plot(x, y2, label = "sin(x) * cos(x)") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh2.png]] Um die Linienstile etwas individueller zu gestalten, ist folgender Programmcode gedacht: import matplotlib.pyplot as plt import numpy as np x = np.arange(-3., 3.1, .1) y1 = np.cosh(x) + 2**x y2 = np.sin(x) * np.cos(x) plt.plot(x, y1, label = "cosh(x) + 2**x", lw=5, ls="dotted") plt.plot(x, y2, label = "sin(x) * cos(x)", lw=3, ls="--") plt.grid() plt.title("Funktionsgraphen") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="best") plt.show() [[Datei:PythonIng_cosh3.png]] === Funktion in Parameterdarstellung === Es soll die archimedische Spirale <math>x = t \cos(t), y = t \sin(t)</math> im Intervall <math>[0, 6\pi[</math> gezeichnet werden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.show() [[Datei:PythonIng_spirale1.png]] Diese Darstellung erscheint verzerrt. Will man gleiche Achsenskalierungen, so kann man den plt.axis()-Befehl verwenden. import matplotlib.pyplot as plt import numpy as np t = np.arange(0., 6*np.pi, .1) x = t * np.cos(t) y = t * np.sin(t) plt.plot(x, y) plt.grid() plt.title("Archimedische Spirale") plt.axis("equal") plt.show() [[Datei:PythonIng_spirale2.png]] === Funktion in Polardarstellung === import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(projection="polar") r = np.arange(0, 1, 0.01) theta = r**3 line = ax.plot(theta, r) plt.show() [[Datei:PythonIng_polar1.png]] === Logarithmische Achsenskalierung === ==== Semilog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.semilogy() plt.show() Ausgabe: [[Datei:PythonIng_semilog1.png]] ==== LogLog ==== import matplotlib.pyplot as plt import numpy as np x = np.arange(0., 10, .1) y = 10**x plt.plot(x, y) plt.grid() plt.loglog() plt.show() [[Datei:PythonIng_loglog1.png]] === Gefüllte Fläche === import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 3, 0.1) y1 = 3*x - 1 y2 = x**2 plt.plot(x, y1, x, y2, color='black') plt.fill_between(x, y1, y2, where=y1>=y2) plt.show() [[Datei:PythonIng_gefuellt.png]] === Linien, Pfeile, Rechtecke, Kreise und Texte === import matplotlib as mpl import matplotlib.pyplot as plt fig, ax = plt.subplots() r = mpl.patches.Rectangle((0, 0), 3, 3, angle=30, fill=False) c = mpl.patches.Circle((4, 4), 2, fill=False) ax.add_patch(r) ax.add_patch(c) ax.plot([-2, 7], [-2, 0], color="black") ax.arrow(0, 7, 5, 0, length_includes_head=True, head_width=0.5, head_length=1.5, color="black") ax.set_aspect("equal") plt.axis([-3, 8, -3, 8]) plt.show() [[Datei:PythonIng_linien_pfeile_etc.png]] Text kann mit <code>ax.text(x, y, "Text")</code> hinzugefügt werden, bspw. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.text(0.1, 0.1, "Hallo") ax.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() Oder einfacher auch ohne <code>subplots</code> import matplotlib.pyplot as plt plt.text(0.1, 0.1, "Hallo") plt.text(0.5, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text1.png]] Auch Sonderzeichen (griechische Buchstaben etc.) können verwendet werden (siehe dazu auch [https://matplotlib.org/stable/users/explain/text/mathtext.html]). import matplotlib.pyplot as plt plt.text(.3, .5, r'$\Omega\ \psi\ \oint\ \nabla\ \dot a\ \frac{a}{b}\ a_b$', size="20") plt.show() [[Datei:PythonIng_text20.svg]] Jetzt wird noch gezeigt, wofür <code>subplots</code> sinnvoll eingesetzt werden können. import matplotlib.pyplot as plt fig, ax = plt.subplots(nrows=1, ncols=2) ax[0].text(0.1, 0.1, "Hallo") ax[1].text(0.1, 0.5, "Welt", size="40", family="cursive", style="italic", rotation=30.0) plt.show() [[Datei:PythonIng_text2.png]] === Aufgaben === * Zeichnen Sie die Strophoide <math>x = \frac{a(t^2-1)}{t^2+1}, y = \frac{at(t^2-1)}{t^2+1}, a = 2, -3 \leq t \leq 3</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_strophoide.jpg]] * Zeichnen Sie die verschlungene Hypozykloide <math>x = (R-r)\cos t + c\cos\frac{R-r}{r}t, y = (R-r)\sin t - c\sin\frac{R-r}{r}t, c = 3, r = 2, R = 6, -15 \leq t \leq 15</math>. Das Ganze sollte in etwa so aussehen wie folgende Grafik: [[Datei:octave_hypozykloide.jpg]] * Testen Sie bei den obigen Übungsaufgaben verschiedene Linienstile und Farben. Farben können mit dem plt.plot()-Parameter color gewählt werden. * Testen Sie bei den obigen Übungsaufgaben verschiedene Werte für a, c, r und R. == 3D == === Räumliche Kurven === import matplotlib.pyplot as plt import numpy as np t = np.arange(0, 6*np.pi, 0.1) x = t * np.cos(t) y = t * np.sin(t) z = t fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot(x, y, z) plt.show() [[Datei:PythonIng_raumkurve1.png]] === Flächen === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z) plt.show() [[Datei:PythonIng_fläche1.png]] Das Ganze in Netzdarstellung läßt sich so programmieren: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.5) y = np.arange(0, 10, 0.5) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_wireframe(x, y, z) plt.show() [[Datei:PythonIng_fläche2.png]] Ein etwas komplexeres Beispiel: import matplotlib.pyplot as plt import numpy as np x = np.arange(0.1, 10, 0.1) y = np.arange(0.1, 10, 0.1) x, y = np.meshgrid(x, y) z1 = np.sin(x) + 3 * np.cos(y) z2 = np.sin(x) + np.log(y) z3 = x + np.cos(y) z4 = x**2 - y fig, ax = plt.subplots(subplot_kw={"projection": "3d"}, nrows=2, ncols=2) ax[0][0].plot_surface(x, y, z1) ax[0][1].plot_surface(x, y, z2) ax[1][0].plot_surface(x, y, z3) ax[1][1].plot_surface(x, y, z4) plt.show() [[Datei:PythonIng_subplot1.png]] Man beachte, dass man die Unterbilder im Bild nach dem Ausführen des Scripts z.B. mit der mittleren Maustaste einzeln drehen, oder über die Einträge in der Menüzeile einzeln bearbeiten kann. Mit ein paar Zeilen Programmtext lässt sich also eine Menge an Funktionalität generieren. Die Farbgebung lässt sich über <code>colormaps</code> variieren. import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm) plt.show() [[Datei:PythonIng_colormap1.png]] Es gibt eine Menge an Colormaps, z.B. <code>plasma, Greys, Dark2, ocean</code>. Zwecks detaillierterer Infos siehe die matplotlib-Dokumentation. <small>Verwendet man die IDE namens IDLE, so gibt es dort auch die automatische Codevervollständigung. D.h. es werden alle Möglichkeiten (in unserem Fall nach dem Eintippen von <code>cm.</code> alle verfügbaren Colormaps) angezeigt.</small> Die "edgecolor" und Linienbreite können auch frei gewählt werden: import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(x, y, z, cmap = cm.coolwarm, edgecolor="black", linewidth=1.0) plt.show() [[Datei:PythonIng_colormap2.png]] === Höhenlinien === import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() ax.contour(x, y, z) plt.show() [[Datei:PythonIng_höhenlinien1.png|400px]] Etwas abgewandelt sieht das so aus: import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contour(x, y, z) ax.clabel(hl, inline = True) plt.show() [[Datei:PythonIng_höhenlinien2.png|400px]] Und noch eine Variante (mit einem Farbbalken) sei gezeigt. import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y = np.arange(0, 10, 0.1) x, y = np.meshgrid(x, y) z = np.sin(x) + 3 * np.cos(y) fig, ax = plt.subplots() hl = ax.contourf(x, y, z) fig.colorbar(hl) plt.show() [[Datei:PythonIng_höhenlinien5.svg|400px]] === Aufgaben === * Zeichnen Sie die räumliche Kurve <math>x = 2 \cdot \cosh(t)</math>, <math>y = 5 \cdot \sin(t)</math>, <math> z = t^{2} - t</math>, <math>0 \leq t \leq 3\pi</math>. * Zeichnen Sie die Fläche <math>z = \log(x) + \cos(y)</math>. == Animationen und fortgeschrittenes 3D == === Mit matplotlib === Auch mit matplotlib sind Animationen möglich. Das ist ein bisschen komplizierter und wird deshalb hier nur mit einem sehr einfachen Beispiel dargestellt (bei Interesse siehe z.B. auch das [https://matplotlib.org/stable/users/explain/animations/animations.html#animations Animations using Matplotlib-Tutorial]). import matplotlib.pyplot as plt import matplotlib.animation as ani import matplotlib import numpy as np def update(frame): line.set_xdata(x[:frame]) line.set_ydata(y[:frame]) return (line) fig, ax = plt.subplots() x = np.arange(0, 10, .1) y = np.sin(x) line, = ax.plot(x[0], y[0]) ax.set(xlim=[0, 10], ylim=[-1, 1]) a = ani.FuncAnimation(fig=fig, func=update, frames=100, interval=20) plt.show() # Speichere die Animation in einem animierten GIF (optional) a.save(filename="c:/tmp/PythonIng_anim5.gif", writer="pillow") [[Datei:PythonIng_anim5.gif]] Es wird eine Sinuskurve auf den Bildschirm gezeichnet. In der letzten Zeile wird diese Animation in ein animiertes GIF gespeichert. Das ist natürlich optional und kann auch weggelassen werden. === Mit VPython === Aber auch mit dem Modul VPython lassen sich einfache 3D-Animationen erstellen. VPython ist ein externes Modul, das vorab installiert werden muss. Unter openSUSE Tumbleweed gibt es dzt. kein entsprechendes rpm-Paket. Die übliche Methode der Installation mittels YaST oder zypper ist somit nicht möglich. Auch eine direkte Verwendung von pip führt nur zu einer Fehlermeldung (<code>error: externally-managed-environment</code>). Es empfiehlt sich dort folgende Vorgehensweise: # Erstelle zuerst eine virtuelle Umgebung, z.B.: <code>python3.11 -m venv ~/tmp/venv1</code> # Wechsle das Verzeichnis: <code>cd ~/tmp/venv1/bin</code> # Installiere das entsprechende Paket: <code>./pip install vpython</code> # Führe das entsprechende Skript aus: <code>./python ~/tmp/test1.py</code> Aktuell (März 2026) ist dieses Programmpaket lt. der [https://vpython.org/presentation2018/install.html VPython-Homepage] nur für die Python-Versionen 3.8 bis 3.12 verfügbar. Ein Beispiel zu einer einfachen Animation wird nachfolgend geliefert. from vpython import * scene.width = 1200 scene.height = 600 scene.center = vector(20,0,0) scene.background = color.white cylinder(pos=vector(0,0,0), axis=vector(20,0,0), radius=5, color=color.blue) cone(pos=vector(0,0,0), axis=vector(-10,0,0), radius=5, color=color.blue) helix(pos=vector(20,0,0), axis=vector(40,0,0), radius=2, coils=10, thickness=0.5, color=color.blue) ball = sphere(pos=vector(20,0,0), color = color.green, radius = 1) ball.p = vector(0.15, 0, 0) toc = True while True: rate(200) if(ball.pos.x <= 60 and toc == True): ball.pos += ball.p else: toc = False ball.pos -= ball.p if(ball.pos.x <= 20 and toc == False): toc = True [[Datei:PythonIng_vpython_anim.JPG]] Idealerweise öffnet sich beim Ausführen des Scripts ein Browserfenster. Darin wird die programmierte Animation gezeigt (siehe auch den obigen Screenshot). Eine Größenänderung können Sie mit der mittleren Maustaste initiieren. Die Szenerie drehen können Sie mit der rechten Maustaste. === Mit build123d === Hiermit lassen sich einfach 3D-Modelle für CAD-Systeme erstellen. [https://build123d.readthedocs.io/en/latest/ build123d] ist ein externes Modul und muss vorab, wie schon für mehrere andere Module gezeigt, installiert werden (pip, venv etc.). Beispielcode: from build123d import * # Bauteil with BuildPart() as bauteil: # Zylinder erstellen Cylinder(100, 60) # Bohrung with BuildSketch(bauteil.faces().sort_by(Axis.Z)[-1]) as loch: Circle(radius=10) # negativ extrudieren extrude(amount=-60, mode=Mode.SUBTRACT) # Fertiges Modell exportieren export_step(bauteil.part, "bauteil.step") Ausgabe (STEP-Datei z.B. in {{W|FreeCAD}} importiert, Screenshot): [[Datei:PythonIng_build123d.jpg | 300px]] FreeCAD ist ein freies 3D-CAD-System. Die [[Ing_Mathematik:_Python#FreeCAD | Makroprogrammierung]] in diesem System wird später noch gezeigt. === Mit VTK === Komplexer, aber auch mächtiger als VPython ist die Verwendung von VTK ('''V'''isualization '''T'''ool'''k'''it). Genauer gesagt des Python-Wrappers von VTK. Dieses externe Python-Modul muss vorab installiert werden (z.B. mittels YaST, pip oder in eine virtuelle Umgebung). VTK ist eine Softwarebibliothek zur 3D-Visualisierung und wurde ursprünglich in C++ geschrieben. Verbreitet eingesetzt wird diese Bibliothek in der Wissenschaft und Forschung, z.B. * in der medizinischen Bildgebung * für Strömungssimulationen * für Klimadaten VTK funktioniert nach dem {{W|Grafikpipeline|Pipeline-Prinzip}}: Source (Quellen) -> Filter -> Mapper (Senken) -> Actor/Renderer Daten fließen von den Quellen zu den Senken. Als einfaches Beispiel wird die Darstellung eines Zylinders gezeigt, der mit den Maustasten gedreht oder in der Größe geändert werden kann: import vtk # Zylinder erzeugen cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) # Geometrie in darstellbare Daten umwandeln mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) # Objekt in der Szene actor = vtk.vtkActor() actor.SetMapper(mapper) # Szene verwalten renderer = vtk.vtkRenderer() renderer.AddActor(actor) # Render-Fenster render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) # Maus/Tastatur-Steuerung interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) # Starten render_window.Render() interactor.Start() Ausgabe: [[Datei:PythonIng_VTK_1.png]] Gleiches Beispiel wie oben, aber mit einer Animationssequenz: import vtk import time cyl = vtk.vtkCylinderSource() cyl.SetRadius(5.0) cyl.SetHeight(20.0) cyl.SetResolution(40) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(cyl.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) renderer = vtk.vtkRenderer() renderer.AddActor(actor) render_window = vtk.vtkRenderWindow() render_window.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(render_window) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) render_window.Render() time.sleep(0.01) Das Grafikfenster schließt sich nach Ablauf der Schleife. Das Fenster bleibt geöffnet, wenn Sie am Programmende folgenden Befehl hinschreiben interactor.Start() Um den animierten Zylinder grün einzufärben, müssen Sie Folgendes im obigen Programm ergänzen (Farbnamen): colors = vtk.vtkNamedColors() actor.GetProperty().SetColor(colors.GetColor3d("Green")) Als Namen können Sie u.a. die CSS3 Web-Farben verwenden (siehe z.B. [https://wiki.selfhtml.org/wiki/Farbe/Farbangaben] und {{W|Webfarbe#CSS_3}}). Alternativ funktioniert auch das ({{W|RGB-Farbraum|RGB}}): actor.GetProperty().SetColor(0.0, 0.6, 0.0) Wie der Zylinder mit einer Textur versehen wird, zeigt folgendes Programm: import vtk import time cylinder = vtk.vtkCylinderSource() cylinder.SetResolution(30) cylinder.SetHeight(3.0) cylinder.SetRadius(1.0) cylinder.CappingOn() texture_coords = vtk.vtkTextureMapToCylinder() texture_coords.SetInputConnection(cylinder.GetOutputPort()) texture_coords.PreventSeamOn() reader = vtk.vtkJPEGReader() reader.SetFileName("PythonIng_textur.jpg") texture = vtk.vtkTexture() texture.SetInputConnection(reader.GetOutputPort()) mapper = vtk.vtkPolyDataMapper() mapper.SetInputConnection(texture_coords.GetOutputPort()) actor = vtk.vtkActor() actor.SetMapper(mapper) actor.SetTexture(texture) renderer = vtk.vtkRenderer() renderWindow = vtk.vtkRenderWindow() renderWindow.AddRenderer(renderer) interactor = vtk.vtkRenderWindowInteractor() interactor.SetRenderWindow(renderWindow) renderer.AddActor(actor) for i in range(360): actor.RotateZ(1) actor.RotateY(.5) renderWindow.Render() time.sleep(0.01) interactor.Start() <gallery> PythonIng_textur.jpg | Textur-Datei PythonIng_VTK_2.png | Ausgabe (Screenshot) </gallery> Nun aber genug von VTK und der Erstellung von Grafiken, weiter geht es mit mathematischeren Themen. = Vektoren und Matrizen = == Zahlenfolgen == Für das Erstellen von Zahlenfolgen bieten sich die Funktionen <code>arange</code> und <code>linspace</code> aus dem <code>numpy</code>-Modul an. from numpy import * start = 0 stop = 10 step = 2 num = 10 r = arange(start, stop, step) # step ... Schrittweite l = linspace(start, stop, num) # num ... Anzahl der Werte print("r = ", r) print("l = ", l) Ausgabe: r = [0 2 4 6 8] l = [ 0. 1.11111111 2.22222222 3.33333333 4.44444444 5.55555556 6.66666667 7.77777778 8.88888889 10. ] Bei <code>arange</code> ist der <code>stop</code>-Wert nicht im Ergebnis enthalten, bei <code>linspace</code> aber sehr wohl. == Vektoren == Vektoren sollten jedem aus der Linearen Algebra bekannt sein. === Arrays === In Python mit NumPy kann man Vektoren durch die Funktion array erzeugen. import numpy as np l1 = (-5, 3, 2) l2 = (1, 1, 4) a1 = np.array(l1) a2 = np.array(l2) a3 = a1 + a2 a4 = 2 * a2 print(a1) print(a2) print(a3) print(a3[2]) print(a4) Ausgabe: [-5 3 2] [1 1 4] [-4 4 6] 6 [2 2 8] === Zeilen- und Spaltenvektoren === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) print(z) print(s) Ausgabe: [ [-5 3 2] ] [[1] [1] [4]] === Skalarprodukt === import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) skalarprodukt = np.dot(a1, a2) print(skalarprodukt) Ausgabe: 6 === Vektorprodukt === <math>a\ast b=\left(\begin{array}{c} a_{1}\\ a_{2}\\ a_{3} \end{array}\right)\ast\left(\begin{array}{c} b_{1}\\ b_{2}\\ b_{3} \end{array}\right)=\left(\begin{array}{c} a_{2}b_{3}-a_{3}b_{2}\\ a_{3}b_{1}-a_{1}b_{3}\\ a_{1}b_{2}-a_{2}b_{1} \end{array}\right) </math> Python-Code: import numpy as np a1 = np.array((-5, 3, 2)) a2 = np.array((1, 1, 4)) vektorprodukt = np.cross(a1, a2) print(vektorprodukt) Ausgabe: [10 22 -8] === Transponierter Vektor === import numpy as np # Zeilenvektor z = np.array([ [-5, 3, 2] ]) # Spaltenvektor s = np.array([[1], [1], [4]]) # transponierter Vektor z_tp = np.transpose(z) # transponierter Vektor s_tp = np.transpose(s) print(z_tp) print(s_tp) Ausgabe: [[-5] [ 3] [ 2]] [ [1 1 4] ] === Vektorfelder visualisieren === import matplotlib.pyplot as plt import numpy as np # Daten generieren x = np.arange(0, 10, 1) y = np.arange(0, 10, 1) X, Y = np.meshgrid(x, y) U = X * Y V = Y + X # Plotten fig, ax = plt.subplots() ax.quiver(X, Y, U, V, angles='xy') plt.show() Ausgabe: [[Datei:PythonIng_quiver1.png]] == Matrizen== import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) print(m1) Ausgabe: [[1 2 3] [4 5 6]] === Zugriff auf Matrizenelemente === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) # Element aus Zeile 2 und Spalte 3 (Achtung! Index startet bei Null) print(m1[1,2]) Ausgabe: 6 === Addition und Subtraktion von Matrizen === import numpy as np m1 = np.matrix([[1, 2, 3], [4, 5, 6]]) m2 = np.matrix([[0, 0, 2], [1, 3, 2]]) print(m1 + m2) print(m1 - m2) Ausgabe: [[1 2 5] [5 8 8]] [[1 2 1] [3 2 4]] === Transponierte Matrix === import numpy as np m = np.matrix([[1, 2, 3], [4, 5, 6]]) mt = np.transpose(m) print(m) print(mt) Ausgabe: [[1 2 3] [4 5 6]] [[1 4] [2 5] [3 6]] === Rang einer Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) rg = np.linalg.matrix_rank(m) print(rg) Ausgabe: 2 === Inverse Matrix === import numpy as np m = np.matrix([[1, 3], [0, -5]]) mi = np.linalg.inv(m) print(mi) Ausgabe: [[ 1. 0.6] [-0. -0.2]] === Multiplikation von Matrizen (falksches Schema) === import numpy as np m1 = np.matrix([[1, 3, 4], [0, -5, 1]]) m2 = np.matrix([[1, 2], [2, 3], [0, 2]]) print(m1 @ m2) Ausgabe: [[ 7 19] [-10 -13]] === Eigenwerte und Eigenvektoren === import numpy as np m = np.matrix([[5, 8], [1, 3]]) D,V = np.linalg.eig(m) # Eigenwerte print(D) # Eigenvektoren print(V) Ausgabe: [7. 1.] [[ 0.9701425 -0.89442719] [ 0.24253563 0.4472136 ]] === Teilmatrizen === import numpy as np m = np.matrix([[1, 3, 4], [0, -5, 1]]) print("m = ", m) # Erste Zeile extrahieren m1 = m[0,:] print("m1 = ", m1) # Das Element aus der 1. Zeile und der 2. Spalte extrahieren m2 = m[0,1] print("m2 = ", m2) # Zweite Spalte extrahieren m3 = m[:, 1] print("m3 = ", m3) Ausgabe: m = [[ 1 3 4] [ 0 -5 1]] m1 = [ [1 3 4] ] m2 = 3 m3 = [[ 3] [-5]] === Spezielle Matrizen === ==== Nullmatrix ==== import numpy as np z = np.zeros((3, 2)) print(z) Ausgabe: [[0. 0.] [0. 0.] [0. 0.]] ==== Einheitsmatrix ==== import numpy as np z = np.eye(3) print(z) Ausgabe: [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] ==== Matrix mit lauter Einsen ==== import numpy as np z = np.ones((3, 2)) print(z) Ausgabe: [[1. 1.] [1. 1.] [1. 1.]] === Spärlich besetzte Matrizen === Das Thema spärlich besetzter Matrizen wird hier nur kurz angerissen. Nähere Details siehe unter dem Weblink [https://docs.scipy.org/doc/scipy/reference/sparse.html#module-scipy.sparse]. import numpy as np import scipy A = scipy.sparse.csr_array(np.eye(5)) print(A) Ausgabe: (0, 0) 1.0 (1, 1) 1.0 (2, 2) 1.0 (3, 3) 1.0 (4, 4) 1.0 = Lineare Gleichungssysteme = Sei <math>Ax = b</math> ein lineares Gleichungssystem. <math>A</math> sei die Koeffizientenmatrix, <math>x</math> der Lösungsvektor und <math>b</math> ein bekannter Vektor. Beispiel: import numpy as np A = np.array([[5, 1], [0, 2]]) b = np.array([1, 2]) x = np.linalg.solve(A, b) print(x) Ausgabe: [0. 1.] Siehe dazu auch das Kapitel [[Ing Mathematik: Numerisches Lösen von linearen Gleichungssystemen]]. Dort wird dieses Themengebiet u.a. mit weitergehenden Python-Skripten vertieft. == Aufgabe == * Lösen Sie folgendes Gleichungssystem mittels Python (und zur Kontrolle auch händisch): 5x + 6y - 2z = 12 3x - y - 3z = 6 2x + 2y + 4z = 5 = Polynome = == Ein erstes einfaches Beispiel == Gegeben sei das Polynom <math>7x^3+5x^2+1</math>. In Python: import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p) Ausgabe: 3 2 7 x + 5 x + 1 == Einzelne Polynomwerte berechnen == import numpy as np p = np.poly1d([7, 5, 0, 1]) print(p(1.5)) Ausgabe: 35.875 == Polynome integrieren und differenzieren == import numpy as np p = np.poly1d([7, 5, 0, 1]) # 1. Ableitung p1 = p.deriv() p2 = p.deriv(1) # 2. Ableitung p3 = p.deriv(2) # Integral p4 = p.integ() print(p1) print(p2) print(p3) print(p4) Ausgabe: 2 21 x + 10 x 2 21 x + 10 x 42 x + 10 4 3 1.75 x + 1.667 x + 1 x == Nullstellen bestimmen == import numpy as np p = np.poly1d([2, 5, 0, 4]) r = np.roots(p) print(r) Ausgabe: [-2.7621427 +0.j 0.13107135+0.84077099j 0.13107135-0.84077099j] == Aufgaben == * Berechnen Sie den Wert für x = 3 des Polynoms <math>y = 2x^4 - 3x^3 - x + 7</math>. * Differenzieren und integrieren Sie das Polynom <math>y = 2x^4 - 3x^3 - x + 7</math>. * Berechnen Sie die Nullstellen von <math>y = 7x^5 - 3x^2 + 12</math>. = Nichtlineare Gleichungen und Gleichungssysteme = == Nullstellenbestimmung == Löse eine beliebige Gleichung f(x) = 0, z.B. <math> f(x) = x^2 - 5\cos(x) - 10 = 0 </math>: import scipy import numpy as np def f(x): return x**2 - 5*np.cos(x) - 10 xstart = [-1, 1] # Startwerte xn = scipy.optimize.root(f, xstart) print(xn.x) Ausgabe: [-2.46813009 2.46813009] Funktionsgraph: [[Datei:octave_nichtlin2.jpg]] == Gleichungssysteme == SymPy ist ein externes Modul, das symbolisches Rechnen ('''Sym'''bolic '''Py'''thon) ermöglicht. Folgende Aufgabe ist dem Buch "Knorrenschild: Numerische Mathematik, Hanser, 2017, Seite 72" entnommen. Zu lösen ist das nichtlineare Gleichungssystem <math>f_1 = 2x_1 + 4x_2 = 0 </math> <math>f_2 = 4x_1 + 8x_2^3 = 0</math> Mit Python ist das so möglich: import sympy x1, x2 = sympy.symbols("x1 x2") f1 = 2*x1 + 4*x2 f2 = 4*x1 + 8*x2**3 s = sympy.solve((f1, f2), x1, x2) print(s) Ausgabe: [(-2, 1), (0, 0), (2, -1)] Plot: [[Datei:IngPython_nl_gleichung1.svg|500px]] = Komplexe Zahlen = Die imaginäre Einheit wird in Python durch den Buchstaben <code>j</code> symbolisiert. Darstellen kann man eine komplexe Zahl bekannterweise in mehreren Formen: * Kartesische Darstellung <math>z = \Re(z) + j \cdot \Im(z)</math> * Polardarstellungen <math>z = r \cdot (\cos(\phi) + j \cdot \sin(\phi)) = r \cdot e^{j\cdot \phi}</math> Die konjugiert komplexe Zahl ist <math>z^* = \Re(z) - j \cdot \Im(z)</math> Nachfolgend einige mathematische Operationen mit Python und NumPy. import numpy as np z1 = 2 + 5j # kartesische Darstellung z2 = 3 * np.exp(3j) # Polardarstellung # Addition res = z1 + z2 print("z1 + z2 = ", res) # Multiplikation res = z1 * z2 print("z1 * z2 = ", res) # Realteil res = np.real(z2) print("Realteil von z2 = ", res) # Imaginärteil res = np.imag(z2) print("Imaginaerteil von z2 = ", res) # Betrag res = np.abs(z1) print("Betrag von z1 = ", res) # Argument res = np.angle(z1) print("Argument von z1 = ", res) # Konjugiert komplexe Zahl res = np.conj(z1) print("Konjugiert komplexe Zahl von z1 = ", res) Ausgabe: z1 + z2 = (-0.9699774898013365+5.423360024179601j) z1 * z2 = (-8.05675510050068-14.003167400647481j) Realteil von z2 = -2.9699774898013365 Imaginaerteil von z2 = 0.4233600241796016 Betrag von z1 = 5.385164807134504 Argument von z1 = 1.1902899496825317 Konjugiert komplexe Zahl von z1 = (2-5j) = Interpolation = import numpy as np import scipy import matplotlib.pyplot as plt # Stützpunkte xp = np.arange(1, 6) yp = (0, -5, 2, 7, 6) ti = np.arange(1, 5, 0.01) i1 = scipy.interpolate.interp1d(xp, yp, kind = "linear") i2 = scipy.interpolate.interp1d(xp, yp, kind = "cubic") plt.plot(xp, yp, "rx") plt.plot(xp, i1(xp)) plt.plot(ti, i2(ti)) plt.show() Ausgabe: [[Datei:PythonIng_interpol1.png]] = Differenzialrechnung = == Numerisches Differenzieren == Als Beispiel differenzieren wir <math>y = 5x\sin{x}</math> und stellen das Ganze grafisch dar. from findiff import Diff import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 1000) f = 5 * x * np.sin(x) dx = x[1] - x[0] # Ableitung d_dx = Diff(0, dx) df_dx = d_dx(f) # Grafik plt.plot(x, f, label = "y") plt.plot(x, df_dx, label = "y'") plt.grid() plt.legend(loc="best") plt.show() Ausgabe: [[Datei:octave_diff1.jpg]] <small>findiff ist ein externes Modul. Dieses muss installiert werden (z.B. so: ...\Python\Scripts\pip.exe install --upgrade findiff). Für die Vorgehensweise unter openSUSE Tumbleweed siehe das Kapitel [[Ing_Mathematik:_Python#Mit_VPython | VPython]], nur dass das Ganze mit einer aktuelleren Python-Version exekutiert wird, z.B. mit Python 3.13. Das im Buch "Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler, Rheinwerk" verwendete Modul "scipy.misc" ist veraltet (deprecated ... missbilligt). Lt. [https://docs.scipy.org/doc/scipy-1.17.0/dev/roadmap-detailed.html#misc SciPy-Dokumentation für die Version 1.17.0] wurden alle entsprechenden Features schon entfernt.</small> == Symbolisches Differenzieren == Differenzieren Sie die Funktionen <math>f_1(x) = x^2</math> und <math>f_2(x) = \sin(x)\cos\left(\frac{x}{2}\right)</math>. import sympy x = sympy.symbols("x") f1 = x**2; f2 = sympy.sin(x) * sympy.cos(x/2.) d1 = sympy.diff(f1, x) d2 = sympy.diff(f2, x) print(d1) print(d2) Ausgabe: 2*x -0.5*sin(0.5*x)*sin(x) + cos(0.5*x)*cos(x) == Aufgaben == * Differenzieren Sie die Funktion <math>y = \log(x) + 10x</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. * Differenzieren Sie die Funktion <math>y = \frac{\sinh(x)}{(1+x)}</math> und stellen Sie y, sowie y' grafisch am Bildschirm dar. = Integralrechnung = == Numerisches Integrieren == Berechnen Sie das Integral <math>\int_{0}^{3}x^2 dx</math>. import scipy def f(x): return x**2 i = scipy.integrate.quad(f, 0, 3) print(i) Ausgabe: (9.000000000000002, 9.992007221626411e-14) Das trifft den exakten Wert 9.0 ziemlich genau. Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} dx</math>. import scipy import numpy as np def f(x): return 2**(-x) i = scipy.integrate.quad(f, 0, np.inf) print(i) Ausgabe: (1.4426950408889556, 4.486558477977586e-09) == Symbolisches Integrieren == Berechnen Sie <math>\int x^2 \text{d}x</math> und <math>\int \sin{x}\cos{\frac{x}{2}} \text{d}x</math>. import sympy x = sympy.symbols("x") f1 = x**2 f2 = sympy.sin(x) * sympy.cos(x/2.) i1 = sympy.integrate(f1, x) i2 = sympy.integrate(f2, x) print(i1) print(i2) Ausgabe: x**3/3 -0.666666666666667*sin(0.5*x)*sin(x) - 1.33333333333333*cos(0.5*x)*cos(x) Berechnen Sie das Integral <math>\int_{0}^{\infty} 2^{-x} \text{d}x</math>. import sympy x = sympy.symbols("x") f = 2**(-x) i = sympy.integrate(f, (x, 0, sympy.oo)) print(i) Ausgabe: 1/log(2) <code>sympy.oo</code> steht für das {{W|Unendlichzeichen}} <math>\infty</math> (die liegende Acht oder das Möbiusband). Mit <code>sympy.pprint(i)</code> ließe sich letzere Ausgabe etwas schöner schreiben: 1 ────── log(2) Man beachtete, <code>log</code> steht hier für den natürlichen Logarithmus <code>ln</code>. == Aufgaben == * Integrieren Sie die Funktion <math>y = \log(x) + 10x</math> von 1 bis 5. * Integrieren Sie die Funktion <math>y = x^3</math> von 0 bis 4. * Integrieren Sie <math>\int x^x(\log (x) + 1)\mathrm dx</math> symbolisch. = Gewöhnliche Differenzialgleichungen = == DGL numerisch lösen == Für die Lösung von Differenzialgleichungen steht u.a. die Funktion scipy.integrate.solve_ivp() zur Verfügung. Diese Funktion implementiert auch das Runge-Kutta-Verfahren (RK45). {{Wikipedia | Runge-Kutta-Verfahren}} Beispiel <math>y' = x^2 + y^3</math>: import scipy import numpy as np import matplotlib.pyplot as plt def dy_dx(x, y): return x**2 + y**3 y0 = [1] xi = [0, 1] x = np.arange(0, 1, 0.01) z = scipy.integrate.solve_ivp(dy_dx, xi, y0, method="RK45", dense_output=True) y = z.sol(x) plt.plot(x, y.T) plt.grid() plt.show() [[Datei:PythonIng_dgl1.png]] == DGL symbolisch lösen == Beispiel <math>y' = x^2 + y^3</math>: import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) print(lsg) Ausgabe: [Eq(f(x), (-x**2)**(1/3)), Eq(f(x), (-x**2)**(1/3)*(-1 - sqrt(3)*I)/2), Eq(f(x), (-x**2)**(1/3)*(-1 + sqrt(3)*I)/2)] Mit <code>sympy.pprint</code> (pretty print) lässt sich die Ausgabe etwas übersichtlicher darstellen. import sympy x = sympy.symbols("x") y = sympy.Function("f")(x) dgl = x**2 + y**3 lsg = sympy.dsolve(dgl, y) sympy.pprint(lsg) Ausgabe: ⎡ _____ _____ ⎤ ⎢ _____ 3 ╱ 2 3 ╱ 2 ⎥ ⎢ 3 ╱ 2 ╲╱ -x ⋅(-1 - √3⋅ⅈ) ╲╱ -x ⋅(-1 + √3⋅ⅈ)⎥ ⎢f(x) = ╲╱ -x , f(x) = ────────────────────, f(x) = ────────────────────⎥ ⎣ 2 2 ⎦ == Aufgaben == * Lösen Sie die Differenzialgleichung <math>y' = \frac{1}{x\cdot y}</math> mit Python. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>m' = -k\cdot m</math>. Kontrollieren Sie das Ergebnis, indem Sie die DGl händisch lösen. * Lösen Sie die Differenzialgleichung <math>y' = \sqrt{|y|}</math>. =Laplace-Transformation= Laplace-Transformation: <math>F(s) =\mathcal{L} \left\{f\right\}(s) = \int_{0}^{\infty} f(t) \mathrm e^{-st} \,\mathrm{d}t, \qquad s\in\mathbb{C} </math> Inverse Laplace-Transformation: <math>\mathcal{L}^{-1} \left\{F\right\}(t) = \frac{1}{2 \pi \mathrm j} \int_{ \gamma - \mathrm j \infty}^{ \gamma + \mathrm j \infty} \mathrm e^{st} F(s)\,\mathrm ds = \begin{cases} f(t) & \text{für } t \geq 0 \\ 0 & \text{für } t < 0 \end{cases} </math> Siehe auch [[Ing_Mathematik:_Laplace-Transformation]] Code: import sympy from sympy.abc import t, s # Laplace-Transformation der Funktion f(t) = 1 (Heaviside-Fkt.) f = 1 # alternativ: f = sympy.Heaviside(t) F = sympy.laplace_transform(f, t, s, noconds=True) print("Laplace-Transformierte F(s):", F) # Inverse Laplace-Transformation zurück in den Zeitbereich f_inv = sympy.inverse_laplace_transform(F, s, t) print("Inverse Transformation f(t):", f_inv) Ausgabe: Laplace-Transformierte F(s): 1/s Inverse Transformation f(t): Heaviside(t) Die Zeile from sympy.abc import t, s steht alternativ für t = sympy.symbols("t") s = sympy.symbols("s") =Fourier-Reihen= <math> f(x)\approx \frac{a_{0}}{2}+\sum_{k=1}^{\infty}\left(a_{k}\cos\left(kx\right)+b_{k}\sin\left(kx\right)\right) </math> <math> a_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\cos\left(kx\right)\mathrm dx\quad\text{für }k\geq0 </math> <math> b_{k} = \frac{1}{\pi}\int_{-\pi}^{\pi}f(x)\cdot\sin\left(kx\right)\mathrm dx\quad\text{für }k\geq1 </math> Für die Sägezahnfunktion <math>y=x;\, 0 < x < 2\pi</math> sei die Fourierreihe mit einem Python-Programm (unter Mithilfe von sympy) hergeleitet. Code: from sympy import fourier_series, pi, symbols, pprint x = symbols('x') f = x s = fourier_series(f, (x, 0, 2*pi)) pprint(s.truncate(n=4)) Ausgabe: 2⋅sin(3⋅x) -2⋅sin(x) - sin(2⋅x) - ────────── + π 3 Siehe auch [[Ing Mathematik: Fourierreihen]]. Ein komplizierteres Beispiel: [[Datei:IngMath fourier bsp13.svg | 300px]] <math>0\le t < T/2\text{:}\quad f(t) = H</math> <math>T/2 \le t \le T\text{:}\quad f(t) = \frac{2H}{T}\left( t-\frac{T}{2}\right)</math> Code: import sympy as sp H = sp.Symbol('H', positive=True) T = sp.Symbol('T', positive=True) t = sp.Symbol('t') f = sp.Piecewise( (H, (t > 0) & (t < T/2)), (2*H/T*(t-T/2), (t > T/2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Ausgabe: ⎛2⋅π⋅t⎞ ⎛4⋅π⋅t⎞ ⎛6⋅π⋅t⎞ ⎛2⋅π⋅t⎞ ⎛6⋅π⋅t⎞ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ H⋅sin⎜─────⎟ 2⋅H⋅cos⎜─────⎟ 2⋅H⋅cos⎜─────⎟ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ ⎝ T ⎠ 3⋅H ──────────── - ──────────── + ──────────── + ────────────── + ────────────── + ─── π 2⋅π 3⋅π 2 2 4 π 9⋅π =Rechnen mit wirklich großen Zahlen= Bekannt ist, dass Python kaum Einschränkungen beim Wertebereich von Ganzzahlen hat, z.B. print(10**300) Ausgabe (gekürzt): 100000000000000000000...00000000000000000000000000000000000000000000000000000000000000000000000 Ähnliches geht auch mit Gleitpunktzahlen, z.B. durch die Verwendung des Moduls mpmath: import mpmath print(mpmath.mpf(1500.4)**mpmath.mpf(300)) Ausgabe: 7.27975299218612e+952 Anderes Beispiel: from mpmath import mp, pi mp.dps = 100 print(pi) Ausgabe: 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068 mpmath kann noch einiges mehr, dazu sei aber auf die entsprechende Dokumentation auf der mpmath-Homepage verwiesen. mpmath ist Bestandteil von SymPy, kann aber auch separat installiert werden. Aber auch Python selbst besitzt eine Möglichkeit, um mit großen bzw. exakten Gleitpunktzahlen zu rechnen, nämlich das interne Modul decimal. Dieses hat einige Vorteile gegenüber mpmath, aber auch gravierende Nachteile. Diese seien hier nicht detailliert aufgezählt. Grob gesagt hat decimal im Finanzwesen seine Berechtigung. Für wissenschaftliche Anwendungen wird aber mpmath vorzuziehen sein, da es u.a. vielfältige mathematische Funktionen bereit stellt. Nachfolgend ein einfaches Beispiel mit decimal: import decimal print("Potenzierung:", decimal.Decimal(1500.4) ** decimal.Decimal(300.0)) print("Einfache Addition:", 0.1 + 0.2) decimal.getcontext().prec = 50 print("Addition mit decimal:", decimal.Decimal("0.1") + decimal.Decimal("0.2")) Ausgabe: Potenzierung: 7.279752992186121551039839134E+952 Einfache Addition: 0.30000000000000004 Addition mit decimal: 0.3 <u>Aufgabe:</u> Recherchieren Sie im Internet die genauen Vor- und Nachteile von decimal und mpmath. Verwenden Sie dazu auch KI (z.B. von Google, chatgpt). =Regelungstechnische Aufgabenstellungen= Für regelungstechnische Aufgaben gibt es u.a. das externe Paket <code>control</code>. Hier soll nicht detailliert darauf eingegangen werden. Anhand eines Beispiels soll anschließend nur die Visualisierung in Form eines Bode-Diagramms und der Sprungantwort gezeigt werden. Gegeben sei ein P-Regler mit <math>R = \frac{5}{2}</math> und eine Strecke <math>S= \frac{1}{30s^3+20s^2+10s+1,5}</math>. Gesucht sei vorerst ein Bode-Diagramm für den offenen Regelkreis und das Führungsverhalten. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke # oder: G0 = ct.series(regler, strecke) Gw = ct.feedback(G0) ct.bode_plot(G0, label='G0') ct.bode_plot(Gw, label='Gw') plt.show() [[Datei:PythonIng_bode1.svg]] Nun noch für obiges Beispiel die Sprungantwort. Diese zeigt einige große Überschwinger, d.h. der Regler kann sicher noch optimiert werden. import numpy as np import control as ct import matplotlib.pyplot as plt zaehler1 = np.array([1.]) nenner1 = np.array([30., 20., 10., 1.5]) strecke = ct.tf(zaehler1, nenner1) zaehler2 = np.array([5.]) nenner2 = np.array([2.]) regler = ct.tf(zaehler2, nenner2) G0 = regler*strecke Gw = ct.feedback(G0) t, y = ct.step_response(Gw) plt.plot(t,y) plt.title('Sprungantwort') plt.xlabel('t') plt.ylabel('h(t)') plt.grid() plt.show() [[Datei:PythonIng_bode3.svg]] Einige weitere wichtige Daten (Phasenreserve, Amplitudenreserve, Durchtrittsfrequenz) lassen sich mittels der <code>control</code>-Funktion <code>margin()</code> ermitteln. Die Ortskurve lässt sich mit der Funktion <code>nyquist_plot()</code> zeichnen. Dies sei hier aber nicht weiter ausgeführt. ==Aufgaben== * Zeichen Sie mit Python die Ortskurve für obiges Beispiel. * Was passiert, wenn man die Reglerverstärkung weiter aufdreht (z.B. auf <math>R = \frac{25}{2}</math>)? * Wie sehen das Bode-Diagramm und die Sprungantwort aus, wenn ein PI-Regler verwendet wird? = Stereostatik etc. = Das Modul SymPy bietet einige Möglichkeiten einfache Bauwerke zu berechnen, z.B. Balken oder Fachwerke. Nachfolgend wird ein einfaches Fachwerk berechnet und gezeichnet. Python-Code: from sympy.physics.continuum_mechanics.truss import Truss t = Truss() # Knoten t.add_node(("A", -3, 0), ("B", 0, 0), ("C", 4, 0), ("D", 7, 0), ("E", 6, 1.5), ("F", 2, 3), ("G", -2, 1.5)) # Stäbe t.add_member(("AB","A","B"), ("BC","B","C"), ("CD","C","D")) t.add_member(("AG","A","G"), ("GB","G","B"), ("GF","G","F")) t.add_member(("BF","B","F"), ("FC","F","C"), ("CE","C","E")) t.add_member(("FE","F","E"), ("DE","D","E")) # Auflager; roller ... Loslager, pinned ... Festlager t.apply_support(("A","roller"), ("D","pinned")) # Einwirkende Kräfte t.apply_load(("G", 5, 270), ("E", 3, 90)) # Berechnung t.solve() print("Reaction Forces: ", t.reaction_loads) print("Internal Forces: ", t.internal_forces) # Fachwerk zeichnen p = t.draw() p.show() Ausgabe auf der Konsole: Reaction Forces: {'R_A_y': 4.20000000000000, 'R_D_x': 0, 'R_D_y': -2.20000000000000} Internal Forces: {'AB': 2.80000000000000, 'BC': 0.333333333333333, 'CD': -1.46666666666667, 'AG': -5.04777178564958, 'GB': -2.05555555555556, 'GF': -1.23413387432364, 'BF': 0.411111111111111*sqrt(13), 'FC': -0.3*sqrt(13), 'CE': 1.50000000000000, 'FE': 0.284800124843917, 'DE': 2.64407093534026} Zeichnung: [[File:PythonIng_fachwerk1.svg|300px]] Details zu diesem Thema siehe z.B. [https://docs.sympy.org/latest/modules/physics/continuum_mechanics/index.html Continuum Mechanics] oder [https://docs.sympy.org/latest/tutorials/physics/continuum_mechanics/index.html Continuum Mechanics Tutorials]. Auch andere mechanische Probleme werden von SymPy abgehandelt ([https://docs.sympy.org/latest/tutorials/physics/index.html Physics Tutorials]). == Aufgabe == Gegeben sei ein einseitig eingespannter Kragträger. Belastet wird er durch eine Einzellast am Trägerende. Für die Daten siehe folgende ASCII-Skizze: | 20 kN //|---> x | //| V //|---------------------- //| 10 m | Elastizitätsmodul E = 2,1*10⁵ N/mm² Flächenträgheitsmoment I = 0.001 m⁴ Berechnen Sie die Auflagerreaktionen, den Querkraft- und Biegemomentenverlauf, sowie die Verformungen. Stellen Sie dies mit Hilfe von SymPy graphisch und auch mittels Formeln dar. Verwenden Sie dazu auch pprint (pretty print) aus dem SymPy-Modul. Zwecks Lösungsansatz siehe die oben aufgeführte Seite "Continuum Mechanics Tutorials". Achten Sie auch auf die Einheiten! Kontrollieren Sie das Ganze mittels händischer Rechnung. In dem genannten Tutorial ist von "Singularity Functions" die Rede. Gemeint ist damit in diesem Kontext die {{W|Föppl-Klammer}}. Einige Python-Programme, vorrangig zu Maschinenelementen, finden sich auf [https://baymp.de/download_python.html BayMP für Python] (Balken, Zahnräder, Stabknickung usw.). =Thermodynamik= == PYroMat == Für thermodynamische Aufgabenstellungen gibt es verschiedene externe Module. Eines davon ist PYroMat (siehe auch [http://pyromat.org]). Damit lassen sich thermodynamische Stoffdaten für viele Substanzen berechnen. Beispiel (einige Stoffdaten für Wasser bei 400°C und 20 bar berechnen): import pyromat as pm # Wasserdaten laden: H2O = pm.get('mp.H2O') # Stoffdaten berechnen: T = 673.15 # Temperatur in Kelvin p = 20 # Druck in bar v = H2O.v(T, p) h = H2O.h(T, p) s = H2O.s(T, p) print(f"Spezifisches Volumen: {v} m³/kg") print(f"Spezifische Enthalpie: {h} kJ/kg") print(f"Spezifische Entropie: {s} kJ/(kg K)") Ausgabe: Spezifisches Volumen: [0.1512163] m³/kg Spezifische Enthalpie: [3248.3789473] kJ/kg Spezifische Entropie: [7.12924142] kJ/(kg K) <small> PYroMat muss vorab installiert werden (z.B. mittels pip, in eine virtuelle Umgebung) </small> <code>mp</code> steht für "multi phase". Für ein ideales Gas wäre <code>ig</code> zuständig, z.B. <code>'ig.O2'</code>. Beispiel (T-s-Diagramm für Wasser zeichnen): import numpy as np import matplotlib.pyplot as plt import pyromat as pm # Konfigurieren pm.config["unit_pressure"] = "bar" pm.config["unit_temperature"] = "K" fluid = pm.get("mp.H2O") # Temperaturbereich für das Nassdampfgebiet T_tripel = 273.16 T_crit = 647.096 T = np.linspace(T_tripel, T_crit - 0.1, 200) # Sättigungslinien berechnen und zeichnen for x in np.linspace(0.0, 1.0, 5): s = fluid.s(T=T, x=x) if(x<=0.0): plt.plot(s, T, label="Siedelinie x=%3.1f" % x, linewidth=2.0) elif(x>=1.0): plt.plot(s, T, label="Taulinie x=%3.1f" % x, linewidth=2.0) else: plt.plot(s, T, label="x=%3.1f" % x, linewidth=1.0) # Isobaren zeichnen p_values = [0.1, 1, 10, 50, 100] T_isobar = np.linspace(T_tripel, 1000, 200) t = 0.7 for p in p_values: s_iso = fluid.s(T=T_isobar, p=p) plt.plot(s_iso, T_isobar, 'k-', alpha=0.8, linewidth=0.8) t += .05 idx = int(len(s_iso) * t) plt.text(s_iso[idx], T_isobar[idx], f"{p} bar", fontsize=9, alpha=0.8) # Diagramm zeichnen plt.title("T-s-Diagramm für Wasser") plt.xlabel("Spezifische Entropie s in kJ/kg K", fontsize=10) plt.ylabel("Temperatur T in K", fontsize=10) plt.legend(loc="best") plt.grid(True) plt.show() Ausgabe (in etwa so): [[Datei:T-s-Diagramm fuer Wasser.svg|400px]] == CoolProp == Auch mit CoolProp können Stoffdaten berechnet werden. Siehe auch [https://coolprop.org/coolprop/wrappers/Python/index.html] Beispiel (Wasser bei 20bar und 400°C): import CoolProp.CoolProp as CP fluid = 'Water' T = 673.15 # Temperatur in Kelvin P = 20e5 # Druck in Pascal dichte = CP.PropsSI('D', 'T', T, 'P', P, fluid) enthalpie = CP.PropsSI('H', 'T', T, 'P', P, fluid) entropie = CP.PropsSI('S', 'T', T, 'P', P, fluid) print(f"Spez. Volumen: {1/dichte:.6f} m³/kg") print(f"Spez. Enthalpie: {enthalpie:.2f} J/kg") print(f"Spez. Entropie: {entropie:.2f} J/kgK") Ausgabe: Spez. Volumen: 0.151215 m³/kg Spez. Enthalpie: 3248344.02 J/kg Spez. Entropie: 7129.16 J/kgK == iapws == Um Werte für Wasser(dampf) zu erhalten (IAPWS; '''I'''nternational '''A'''ssociation for the '''P'''roperties of '''W'''ater and '''S'''team) gibt es die Bibliothek iapws. Siehe auch [https://iapws.org/] und [https://pypi.org/project/iapws/] Beispiel (Wasser für 20bar und 400°C): from iapws import IAPWS97 dampf = IAPWS97(P=2.0, T=673.15) print(f"Spezifisches Volumen: {dampf.v:.6f} m³/kg") print(f"Spezifische Enthalpie: {dampf.h:.2f} kJ/kg") print(f"Spezifische Entropie: {dampf.s:.4f} kJ/(kgK)") print(f"Phase: {dampf.phase}") Ausgabe: Spezifisches Volumen: 0.151208 m³/kg Spezifische Enthalpie: 3248.23 kJ/kg Spezifische Entropie: 7.1290 kJ/(kgK) Phase: Gas == TESPy == Ein anderes Modul für einen anderen Aufgabenzweck ist TESPy ('''T'''hermal '''E'''ngineering '''S'''ystems in '''Py'''thon). Dieses Modul ist für die Anlagensimulation zuständig. Für nähere Informationen siehe [https://tespy.readthedocs.io/en/main/getting_started/introduction.html]. Als Beipiel sei hier vorerst Code, der von der Google KI generiert wurde, angeführt. Der Code wurde überarbeitet, damit keine Warnungen auftreten. Bitte aber den Code trotzdem mit Vorsicht genießen, auch KI-generierter Code kann Fehler aufweisen. Eine Pumpe wird berechnet: from tespy.components import Sink, Source, Pump from tespy.connections import Connection from tespy.networks import Network # 1. Netzwerk definieren (Zentrales Steuerungselement) # Wir wählen Wasser als Fluid und bar/Celsius als Einheiten nw = Network(fluids=["water"]) nw.units.set_defaults(pressure="bar", pressure_difference="bar", temperature="°C", enthalpy="kJ / kg") # 2. Komponenten erstellen eingang = Source("Wasserquelle") ausgang = Sink("Wasserspeicher") pumpe = Pump("Speisewasserpumpe") # 3. Verbindungen definieren (Komponenten miteinander verknüpfen) c1 = Connection(eingang, "out1", pumpe, "in1") c2 = Connection(pumpe, "out1", ausgang, "in1") # Verbindungen dem Netzwerk hinzufügen nw.add_conns(c1, c2) # 4. Randbedingungen und Parameter festlegen # Zustand am Eingang (Druck, Temperatur, Massenstrom, Fluid-Zusammensetzung) c1.set_attr( v=1, # Massenstrom: 1 kg/s T=20, # Temperatur: 20 °C p=1, # Druck: 1 bar fluid={"water": 1}, # 100% Wasser ) # Zustand am Ausgang / Zielwerte der Pumpe c2.set_attr(p=10) # Ziel-Druck nach der Pumpe: 10 bar # Pumpeneigenschaften festlegen pumpe.set_attr(eta_s=0.8) # Isentroper Wirkungsgrad von 80% # 5. Simulation ausführen nw.solve(mode="design") # 6. Ergebnisse ausgeben nw.print_results() # Spezifische Werte direkt auslesen print("\n--- Auswertung ---") print(f"Erforderliche Pumpenleistung: {pumpe.P.val / 1000:.2f} kW") print(f"Temperatur nach der Pumpe: {c2.T.val:.2f} °C") Ausgabe (gekürzt): iter | residual | progress | massflow | pressure | enthalpy | fluid | component -------+------------+------------+------------+------------+------------+------------+------------ 1 | 7.04e+04 | 12 % | 9.96e+02 | 0.00e+00 | 8.81e+04 | 0.00e+00 | 0.00e+00 2 | 5.91e-12 | 100 % | 1.11e-13 | 0.00e+00 | 7.39e-12 | 0.00e+00 | 0.00e+00 3 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 4 | 5.80e-12 | 100 % | 0.00e+00 | 0.00e+00 | 7.25e-12 | 0.00e+00 | 0.00e+00 Total iterations: 4, Calculation time: 0.01 s, Iterations per second: 480.85 ##### RESULTS (Pump) ##### +-------------------+----------+----------+-----------+----------+----------+----------+ | | P | pr | dp | eta | eta_s | head | |-------------------+----------+----------+-----------+----------+----------+----------| | Speisewasserpumpe | 1.12e+06 | 1.00e+01 | -9.00e+00 | 8.00e-01 | 8.00e-01 | 9.19e+01 | +-------------------+----------+----------+-----------+----------+----------+----------+ ... ... --- Auswertung --- Erforderliche Pumpenleistung: 1124.77 kW Temperatur nach der Pumpe: 20.07 °C = Stochastik = Die {{W|Stochastik}} ist ein sehr weites Feld. Hier werden etliche wichtige Themen kurz angerissen. Python stellt mit den Moduln math und statistics Software zu diesem Zwecke bereit. math und statistics sind bereits im Lieferumfang von Python enthalten. Aber auch mit den externen Modulen NumPy, SciPy, stochastic und pandas kann man Stochastik in Python betreiben. Die Theorie der Wahrscheinlichkeitsrechnung und Statistik soll etwas später in Band 5 dieser Buchreihe behandelt werden. == Lageparameter == import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] m1 = statistics.mean(werte) m2 = statistics.mode(werte) m3 = statistics.median(werte) print("Arithmetischer Mittelwert = ", m1) print("Modalwert = ", m2) print("Median = ", m3) Ausgabe: Arithmetischer Mittelwert = 3.5 Modalwert = 1 Median = 3.0 == Streuungsparameter == Beispiel (Berechnung der Standardabweichung): import statistics werte = [1, 3, 4, 4, 1, 7, 9, 1, 2, 3] s = statistics.stdev(werte) print("Standardabweichung = ", s) Ausgabe: Standardabweichung = 2.6770630673681683 Beispiel (Berechnung des Variationskoeffizienten V = Standardabweichung/Mittelwert) import numpy as np from scipy import stats import statistics k = 50 dat1 = [14, 21, 18, 25, 30, 17, 20] dat = np.array(dat1) # Mit SciPy v = stats.variation(dat) vddof = stats.variation(dat, ddof=1) print("V SciPy: ", v) print("V DDOF SciPy: ", vddof) print(k*"-") # mit NumPy mittelwert1 = np.mean(dat) std_abw1 = np.std(dat) std_abw1ddof = np.std(dat, ddof=1) v1= std_abw1 / mittelwert1 v1ddof = std_abw1ddof / mittelwert1 print("Mittelwert NumPy: ", mittelwert1) print("Std.abw. NumPy: ", std_abw1) print("Std.abw. DDOF NumPy: ", std_abw1ddof) print("V NumPy: ", v1) print("V DDOF NumPy: ", v1ddof) print(k*"-") # nur mit reinem Python mittelwert2 = statistics.mean(dat1) std_abw2 = statistics.stdev(dat1) v2 = std_abw2 / mittelwert2 print("Mittelwert Python: ", mittelwert2) print("Std.abw. Python: ", std_abw2) print("V Python:", v2) print(k*"-") Ausgabe: V SciPy: 0.23890355966467272 V DDOF SciPy: 0.25804533701889254 -------------------------------------------------- Mittelwert NumPy: 20.714285714285715 Std.abw. NumPy: 4.948716593053935 Std.abw. DDOF NumPy: 5.3452248382484875 V NumPy: 0.23890355966467272 V DDOF NumPy: 0.2580453370188925 -------------------------------------------------- Mittelwert Python: 20.714285714285715 Std.abw. Python: 5.3452248382484875 V Python: 0.2580453370188925 -------------------------------------------------- Der Unterschied bei der Standardabweichung zwischen reinem Python und den externen Bibliotheken SciPy und NumPy entsteht dadurch, dass einmal durch (n-1) und das andere Mal nur durch n dividiert wird. Dies kann bei NumPy und SciPy dadurch entschärft werden, indem <code>ddof=1</code> gesetzt wird. ddof steht für '''D'''elta '''D'''egrees '''o'''f '''F'''reedom. <small>Je größer die Anzahl der Datensätze n wird, umso weniger spielt das eine Rolle.</small> == Kombinatorik == Beispiel: import math n = 7 k = 5 print("n! = ", math.factorial(n)) print("Kombinationen (n über k) = ", math.comb(n, k)) Ausgabe: n! = 5040 Kombinationen (n über k) = 21 Siehe zu diesem Thema auch [[Ing Mathematik: Permutationen, Kombinationen, binomischer Lehrsatz]]. Die Anzahlen lassen sich einfach aus den dortigen Formeln ermitteln, z.B. bei Permutationen mit <math>n!</math> oder Variationen mit Wiederholungen als <math>n^k</math>. Will man die Kombinationen oder Variationen aber auch als Liste ausgeben, so kann das Modul <code>itertools</code> nützlich sein. Beispiel (Variationen ohne Wiederholung): from itertools import permutations menge = ["A", "B", "C", "D"] # n = 4 k = 3 variationen = list(permutations(menge, k)) for v in variationen: print("".join(v)) print(50*"-") print(len(variationen)) Ausgabe (gekürzt): ABC ABD ACB ... DCA DCB -------------------------------------------------- 24 Siehe zum Modul <code>itertools</code> auch die Website [https://docs.python.org/3/library/itertools.html]. * Variationen mit Wiederholung: <code>itertools.product()</code> * Kombinationen ohne Wiederholung: <code>itertools.combinations()</code> * Kombinationen mit Wiederholung: <code>itertools.combinations_with_replacement()</code> == Zufallszahlen == Beispiel: import random # Ganzzahlige Zufallszahl von 1 bis 10 zufallszahl1 = random.randint(1, 10) # Gleitpunktzahlen # zwischen 0.0 und 1.0 zufallszahl2 = random.random() # Zahl zwischen 1.5 und 9.5 zufallszahl3 = random.uniform(1.5, 9.5) # aus Liste auswählen farbe = ["Rot", "Grün", "Blau"] zufallswert = random.choice(farbe) print(zufallszahl1) print(zufallszahl2) print(zufallszahl3) print(zufallswert) Ausgabe, z.B.: 5 0.14147945849015753 6.894003397570905 Rot Benötigt man mehrere Zufallszahlen, so ist das Modul <code>numpy</code> zu bevorzugen, z.B.: * Normalverteilung: <code>np.random.normal(...)</code> * Gleichverteilung: <code>np.random.uniform(...)</code> == Histogramm == Zum Thema Histogramm siehe {{W|Histogramm}}. Beispiel (mit Matplotlib): import matplotlib.pyplot as plt import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) plt.hist(daten, bins=25, edgecolor='darkgray') plt.show() Ausgabe: [[Datei:IngMath_histogramm.svg|300px]] Beispiel (mit Seaborn): import matplotlib.pyplot as plt import seaborn as sns import numpy as np daten = np.random.normal(loc=50, scale=10, size=1000) sns.set_theme(style="darkgrid") sns.histplot(data=daten) plt.show() Ausgabe: [[Datei:IngMath_histogramm2.svg|300px]] Das Kürzel <code>sns</code> ist Konvention und steht für die fiktive Figur '''S'''amuel '''N'''orman '''S'''eaborn aus der US-Fernsehserie {{W|The West Wing – Im Zentrum der Macht | The West Wing}}. == Box-Plot == [[File:Elements of a boxplot.svg|400px]] Siehe auch {{W|Box-Plot}}. Beispiel (mit Seaborn erstellt): import seaborn as sns import matplotlib.pyplot as plt df = sns.load_dataset("tips") sns.boxplot(data=df, x="day", y="tip", hue="day", legend=False) plt.show() Ausgabe: [[Datei:IngMath_boxplot.svg|400px]] Beispiel (mit Matplotlib erstellt): import matplotlib.pyplot as plt daten = [12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25] plt.boxplot(daten, patch_artist=True) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() Ausgabe: [[Datei:IngMath_boxplot2.svg|300px]] Um mehrere Box-Plots unterschiedlicher Farbe mit Matplotlib in einem Diagramm zu zeichnen, können Sie folgendermaßen vorgehen: import matplotlib.pyplot as plt daten = [[12, 15, 18, 19, 22, 25, 28, 30, 31, 35, 42, 55, 12, 25], [10, 19, 20, 21, 20, 30, 19, 40, 11, 17, 19, 21]] farben = ["green", "blue"] boxplot = plt.boxplot(daten, patch_artist=True) for patch, farbe in zip(boxplot['boxes'], farben): patch.set_facecolor(farbe) plt.title("Boxplot mit Matplotlib") plt.ylabel("Daten") plt.show() == Regressionsrechnung == Beispiel: import numpy as np import matplotlib.pyplot as plt # Messpunkte x = np.array([1, 3, 5, 6, 8, 10, 20]) y = np.array([3, 4, 5, 5, 7, 9, 11]) # Regressionskurve (Grad 1 = lineare Regression, 2 = Polynom-Regression 2. Gr.) # y = kx + d k, d = np.polyfit(x, y, deg=1) # y = ax**2 + bx + c a, b, c = np.polyfit(x, y, deg=2) x_l = np.linspace(1, 20, 100) y_p = a * x_l**2 + b * x_l + c # Zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.plot(x, k*x + d, color='blue', label='Regressionsgerade') plt.plot(x_l, y_p, color='red', label='Regressionspolynom 2. Gr.') plt.xlabel('x') plt.ylabel('y') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: [[Datei:IngMath_regression.svg|400px]] == Korrelationsrechnung == Beispiel: import pandas as pd import matplotlib.pyplot as plt # Messdaten x = [1, 3, 4, 5, 6] y = [2, 4, 6, 8, 5] daten = {'X': x, 'Y': y} df = pd.DataFrame(daten) # Korrelation korr = df['X'].corr(df['Y']) print(f"Korrelationskoeff.: {korr}") # Messpunkte zeichnen plt.scatter(x, y, color='green', label='Messpunkte') plt.grid() plt.axis("equal") plt.legend(loc="best") plt.show() Ausgabe: Korrelationskoeff.: 0.7556096518348252 [[Datei:IngMath_korrelation.svg|300px]] == Mengen und Venn-Diagramme == Beispiel: import matplotlib.pyplot as plt from matplotlib_venn import venn2 menge_a = {1, 2, 3, 4, 5, 6} menge_b = {4, 5, 6, 7, 8} vereinigung = menge_a | menge_b schnitt = menge_a & menge_b print("Vereinigungsmenge = ", vereinigung) print("Schnittmenge = ", schnitt) venn2([menge_a, menge_b], set_labels=('Menge A', 'Menge B')) plt.show() Ausgabe: Vereinigungsmenge = {1, 2, 3, 4, 5, 6, 7, 8} Schnittmenge = {4, 5, 6} [[Datei:IngMath_venn.svg|300px]] Siehe auch {{W|Mengendiagramm#Venn-Diagramme}}. == Verteilungs- und Dichtefunktion == * CDF ... '''C'''umulative '''D'''istribution '''F'''unction, Verteilungsfunktion * PDF ... '''P'''robability '''D'''ensity '''F'''unction, Dichtefunktion Beispiel (Normalverteilung): import numpy as np import matplotlib.pyplot as plt from scipy.stats import norm my, sigma = 0, 1 x = np.linspace(-4, 4, 50) pdf = norm.pdf(x, my, sigma) cdf = norm.cdf(x, my, sigma) plt.plot(x, pdf, lw=2, label="Dichtefunktion") plt.plot(x, cdf, lw=2, label="Verteilungsfunktion") plt.legend() plt.grid() plt.show() Ausgabe: [[Datei:IngMath_cdf_pdf.svg|300px]] Beispiel (<math>\chi^2</math>-Verteilung): import numpy as np import matplotlib.pyplot as plt import scipy.stats as stats x = np.linspace(0, 20, 500) # df ... degree of freedom, Freiheitsgrad pdf = (stats.chi2.pdf(x, df=2), stats.chi2.pdf(x, df=5), stats.chi2.pdf(x, df=10)) for i in range(0,3): if(i==0): lab = "Freiheitsgrad 2" elif(i==1): lab = "Freiheitsgrad 5" else: lab = "Freiheitsgrad 10" plt.plot(x, pdf[i], label=lab, lw=2) plt.grid() plt.legend() plt.show() Ausgabe: [[Datei:IngMath_chi2.svg | 300px]] == Schätzen und Testen == === Intervallschätzung === Als Beispiel seien Daten gegeben, die von ''Dürr, Mayer: Wahrscheinlichkeitsrechnung und Schließende Statistik; 7. Aufl., Hanser, 2014, Seite 137'' stammen. Und zwar soll das 95%-Vertrauensintervall für den Mittelwert des Kaloriengehalts (kcal/100g) von Hähnchen ermittelt werden. Wir wollen das mit Python inkl. NumPy und SciPy durchführen. Die Stichprobe ist groß (50 Hähnchen): Python-Code: import numpy as np import scipy.stats as stats # Stichprobe daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203] # Parameter definieren konfidenzniveau = 0.95 mean = np.mean(daten) std = np.std(daten, ddof=1) stdfehler = stats.sem(daten) intervall = stats.norm.interval(confidence=konfidenzniveau, loc=mean, scale=stdfehler) print(f"Mittelwert: {mean}") print(f"Standardabweichung: {std}") print(f"Konfidenzintervall: {intervall}") Ausgabe: Mittelwert: 215.48 Standardabweichung: 33.14238915925757 Konfidenzintervall: (np.float64(206.29356722321992), np.float64(224.66643277678006)) Diese Werte stimmen gerundet mit denen im genannten Buch überein. Zum Code selbst: * sem steht für '''s'''tandard '''e'''rror of the '''m'''ean. * <code>scipy.stats.norm</code> ... Modul für die Normalverteilung. === Punktschätzung === Gleiche Daten wie oben bei der Intervallschätzung. Python-Code: import numpy as np from scipy import stats daten = [309, 202, 234, 252, 240, 225, 241, 212, 118, 191, 236, 204, 213, 220, 219, 218, 195, 159, 195, 206, 207, 232, 215, 210, 204, 332, 241, 225, 235, 193, 238, 187, 189, 203, 190, 252, 227, 212, 180, 178, 242, 236, 174, 240, 195, 223, 213, 209, 200, 203 ] mu_hat, sigma_hat = stats.norm.fit(daten) print(f"Schätzer für den Erwartungswert (μ): {mu_hat:.4f}") print(f"Schätzer für die Standardabweichung (σ): {sigma_hat:.4f}") Ausgabe: Schätzer für den Erwartungswert (μ): 215.4800 Schätzer für die Standardabweichung (σ): 32.8093 === Hypothesentests === Beispiel: import numpy as np import scipy.stats as stats x_quer = 12.075 # Stichproben-Mittelwert var = 0.069 # Stichproben-Varianz n = 90 # Stichprobengröße my_0 = 12.0 # Nullhypothese alpha = 0.05 # Signifikanzniveau z_stat = (x_quer - my_0) / np.sqrt(var / n) p_val = 2 * (1 - stats.norm.cdf(np.abs(z_stat))) print(f"Z-Statistik: {z_stat:.4f}") if p_val < alpha: print(f"p-Wert: {p_val:.6f} < alpha:", alpha) print("Die Nullhypothese wird verworfen.") else: print(f"p-Wert: {p_val:.6f} > alpha:", alpha) print("Die Nullhypothese wird nicht verworfen.") Ausgabe: Z-Statistik: 2.7087 p-Wert: 0.006755 < alpha: 0.05 Die Nullhypothese wird verworfen. == Statistische Qualitätskontrolle == Beispiel (Mittelwertkarte): import numpy as np import matplotlib.pyplot as plt # Gegeben sollwert = 50.0 varianz = 4.0 stichproben_umfang = 1 daten = [49.5, 50.2, 53.0, 48.1, 52.6, 53.4, 49.8] # Berechnung standardabweichung = np.sqrt(varianz) streuung = standardabweichung / np.sqrt(stichproben_umfang) cl = sollwert ucl = cl + 3 * streuung lcl = cl - 3 * streuung # Darstellung plt.plot(daten, marker='o', linestyle='-', color='b', label='Messdaten') plt.axhline(cl, color='green', linestyle='-', label=f'CL: {cl}') plt.axhline(ucl, color='red', linestyle='--', label=f'UCL: {ucl:.2f}') plt.axhline(lcl, color='red', linestyle='--', label=f'LCL: {lcl:.2f}') plt.title('Mittelwertkarte') plt.xlabel('Stichprobe') plt.ylabel('Wert') plt.legend(loc='lower left') plt.grid(True) plt.show() Ausgabe: [[Datei:IngMath_mittelwertkarte.svg|300px]] Siehe auch {{W|Shewhart-Regelkarte}} und {{W|Qualitätsregelkarte}}. * UCL ... '''U'''pper '''C'''ontrol '''Limit''', Obere Eingriffsgrenze * LCL ... '''L'''ower '''C'''ontrol '''Limit''', Untere Eingriffsgrenze * CL ... '''C'''enter '''L'''ine, Mittellinie = Ein- und Ausgabe = == print == Die Anweisung print haben wir schon oft verwendet. Hier soll anhand von Beispielen kurz beschrieben werden, was der Befehl print leisten kann. print("Hallo", "Welt", 1, sep="-") print("Hallo", end=" ") print("Welt") Ausgabe: Hallo-Welt-1 Hallo Welt == input == a = int(input("Zahl 1: ")) b = int(input("Zahl 2: ")) print("a + b = ", a+b) Ausgabe (nach Eingabe der beiden Ganzzahlen): Zahl 1: 4 Zahl 2: 5 a + b = 9 == Aus Dateien lesen == Es seinen die datei.txt Hallo Welt. Wie geht es dir? ... und test1.py dat = open("datei.txt", mode = "r") print(dat.read()) dat.close() Ausgabe Hallo Welt. Wie geht es dir? ... Mit dem open()-Befehl wird die Datei datei.txt im Lesemodus geöffnet (r ... read). Mit dem read()-Befehl wird die Datei eingelesen und mittels print ausgegeben. == In Dateien schreiben == dat = open("datei.txt", mode = "a", encoding = "utf-8") dat.write("Hänge Zeile an\n") dat.close() Die Datei datei.txt sieht nach Abarbeitung des obigen Skripts nun so aus Hallo Welt. Wie geht es dir? ... Hänge Zeile an Es wird die Datei im Schreibmodus geöffnet (a ... append (anhängend), w ... write (überschreibend)). write() fügt hier also eine Zeile Text am Dateiende ein. close() schließt die Datei wieder. Das close() kann man sich mit der with-Anweisung auch sparen. with open("datei.txt", mode="a", encoding="utf-8") as dat: dat.write("Hänge Zeile an\n") = Benutzeroberflächen erstellen = == tkinter == {{Wikipedia | Tkinter}} Python bietet standardmäßig das Modul tkinter zur Programmierung von Benutzeroberflächen. Es müssen also bei der Verwendung von tkinter keine externen Module installiert werden. Hier wird eine (sehr) kurze Einführung in das Erstellen von grafischen Oberflächen mittels tkinter gegeben. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") win.minsize(300, 50) but = tk.Button(win, text = "Push the button") but.pack() win.mainloop() Ausgabe: [[Datei:PythonIng_gui1.jpg]] Ein etwas komplizierteres Beispiel sei nachfolgend gezeigt. Es sollen zwei Strings miteinander verknüpft und ausgegeben werden. import tkinter as tk win = tk.Tk() win.title("Hallo Welt!") def on_button_clicked(): str = ent1.get() + ent2.get() lab2["text"] = str ent1 = tk.Entry(win) ent2 = tk.Entry(win) lab1 = tk.Label(win, text="verknuepfen mit") lab2 = tk.Label(win, text="") but = tk.Button(win, text = "=", command=on_button_clicked) ent1.pack(side="left") lab1.pack(side="left") ent2.pack(side="left") but.pack(side="left") ent2.pack(side="left") lab2.pack(side="left") win.mainloop() Ausgabe (vor der Eingabe der Teilstrings): [[Datei:PythonIng_gui2.jpg]] Ausgabe (nach der Eingabe der Teilstrings und dem Drücken des =-Buttons): [[Datei:PythonIng_gui3.jpg]] == curses == {{Wikipedia | curses}} Mit dem curses-Modul lassen sich u.a. TUIs ('''T'''ext '''U'''ser '''I'''nterfaces) erstellen. Ein sehr einfaches Beispiel zur allgemeinen Funktionsweise wird nachstehend geliefert. import curses stdscr = curses.initscr() curses.start_color() curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE) stdscr.clear() stdscr.addstr("Hallo Welt", curses.color_pair(1)) stdscr.refresh() stdscr.getch() curses.endwin() Als Ausgabe sollte <span style="color:#FF0000;">Hallo Welt</span> (rote Schrift auf weißem Hintergrund) auf dem Terminal/der Konsole erscheinen. Getestet wurde dies mit openSUSE Tumbleweed, Python-Version 3.13.12. Das entsprechende Python-curses-Package muss installiert sein. Allgemeine Informationen zur Terminal-/Konsolengröße und Cursorposition liefert folgendes Programm: import curses stdscr = curses.initscr() stdscr.addstr(3, 5, "LINES: %d" % curses.LINES) stdscr.addstr(4, 5, "COLS: %d" % curses.COLS) (y,x) = stdscr.getyx() stdscr.addstr(5, 5, "Momentane Cursorposition: [%d, %d]" % (y, x)) (y,x) = stdscr.getbegyx() stdscr.addstr(6, 5, "Koordinatenursprung: [%d, %d]" % (y, x)) (y,x) = stdscr.getmaxyx() stdscr.addstr(7, 5, "Fenstergröße: [%d, %d]" % (y, x)) stdscr.addstr(11, 2, "Taste drücken -> Ende") stdscr.refresh() stdscr.getch() curses.endwin() Es sollte sich in etwa folgende Ausgabe ergeben: LINES: 44 COLS: 110 Momentane Cursorposition: [4, 15] Koordinatenursprung: [0, 0] Fenstergröße: [44, 110] Taste drücken -> Ende Zur Funktionsweise von curses siehe auch das Wikibook [[ncurses]]. Zum Verständnis sind dort allerdings elementare Kenntnisse in der Programmiersprache C erforderlich. == Qt == {{Wikipedia | Qt (Bibliothek)}} Auch für das Qt-Framework gibt es eine Anbindung an Python. Nachfolgend ein einfaches Beispiel. import sys from PySide6.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hallo Welt!") label.show() sys.exit(app.exec()) Ausgabe: [[Datei:PythonIng_gui10.png]] == Gtk == {{Wikipedia | GTK (Programmbibliothek)}} Eine idente Ausgabe, wie oben für Qt gezeigt, erzeugt z.B. folgendes Gtk-Programm: import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk def on_activate(app): win = Gtk.ApplicationWindow(application=app) lab = Gtk.Label(label="Hallo Welt!") win.set_child(lab) win.present() app = Gtk.Application() app.connect('activate', on_activate) app.run(None) Auch für die Benutzung von Qt und Gtk müssen die jeweiligen Packages installiert sein. Getestet wurden die entsprechenden Python-Programme nur unter openSUSE Tumbleweed. Wie das GTK-Paket unter MS Windows 11 installiert wird, siehe z.B. [https://www.gtk.org/docs/installations/windows Setting up GTK for Windows]. Damit sei aber das Thema "Benutzeroberflächen erstellen" hier abgeschlossen, da dies schon ein sehr spezielles Aufgabengebiet ist, das eher Informatiker und nicht so sehr Ingenieure anspricht. Bei Bedarf siehe aber ggf. die entsprechenden Links unten in diesem Tutorial. Dort sind weiterführende Informationen zu finden. = Pandas kurz erklärt = Hier wird kurz auf das externe Modul Pandas eingegangen. Pandas steht für '''Pan'''el '''Da'''ta und ist ein Modul für die Datenanalyse und -manipulation. == Series == Vorstellbar ist eine "Series" wie eine einzelne Spalte in einem Tabellenkalkulationsprogramm. Beispiel (Index implizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) # Temperaturwerte print(temp) Ausgabe: 0 8.5 1 11.0 2 12.5 3 10.0 4 13.0 5 11.0 6 14.5 dtype: float64 Das Kürzel <code>pd</code> ist Konvention. Es seien Temperaturwerte gegeben. Die erste Spalte bei der Ausgabe ist der Index. Die zweite Spalte enthält die Werte. Beispiel (separater Zugriff auf den Index und auf die Werte): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5]) print(temp.index) print(temp.values) Ausgabe: RangeIndex(start=0, stop=7, step=1) [ 8.5 11. 12.5 10. 13. 11. 14.5] Beispiel (Index explizit vorgegeben): import pandas as pd temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) print("*** Die gesamte Series ***") print(temp) print("*** Temperatur am Donnerstag ***") print(temp["Do"]) print("*** Tage wärmer als 12 Grad ***") temp_gr_12 = temp[temp > 12] print(temp_gr_12) Ausgabe: *** Die gesamte Series *** Mo 8.5 Di 11.0 Mi 12.5 Do 10.0 Fr 13.0 Sa 11.0 So 14.5 dtype: float64 *** Temperatur am Donnerstag *** 10.0 *** Tage wärmer als 12 Grad *** Mi 12.5 Fr 13.0 So 14.5 dtype: float64 == DataFrame == Ein DataFrame entspricht einer Tabelle. Beispiel (Erzeugen eines DataFrames): import pandas as pd tag = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] v1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=tag) v2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=tag) v3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=tag) tab = pd.concat([v1, v2, v3], axis=1) tab.columns = stadt print(tab) print(type(tab)) Ausgabe: Linz Salzburg Innsbruck Mo 1 8 Hallo Di 2 9 16 Mi 3 10 17 Do 4 11 18 Fr 5 12 19 Sa 6 13 20 So 7 14 21 <class 'pandas.core.frame.DataFrame'> Wir haben hier drei Datenspalten (v1, v2, v3) mit den Spaltennamen "Linz", "Salzburg" und "Innsbruck", sowie sieben Zeilen "Mo" bis "So". Beispiel (Zugriff auf eine Spalte): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab["Salzburg"]) Ausgabe: Mo 8 Di 9 Mi 10 Do 11 Fr 12 Sa 13 So 14 Name: Salzburg, dtype: int64 Beispiel (Zugriff auf eine Zeile): import pandas as pd ind = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] stadt = ["Linz", "Salzburg", "Innsbruck"] temp1 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=ind) temp2 = pd.Series([8, 9, 10, 11, 12, 13, 14], index=ind) temp3 = pd.Series(["Hallo", 16, 17, 18, 19, 20, 21], index=ind) tab = pd.concat([temp1, temp2, temp3], axis=1) tab.columns = stadt print(tab.loc["Di"]) Ausgabe: Linz 2 Salzburg 9 Innsbruck 16 Name: Di, dtype: object == Grafiken erstellen == Hier sei nur ein Torten- oder Kreisdiagramm gezeichnet: import pandas as pd import matplotlib.pyplot as plt temp = pd.Series([8.5, 11.0, 12.5, 10.0, 13.0, 11.0, 14.5], index=["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]) expl = [0, 0.2, 0, 0, 0, 0, 0] temp.plot.pie(figsize=(5,5), explode=expl) plt.show() Ausgabe: [[Datei:IngPython_pandas1.svg|350px]] Die <code>figsize</code> hat nichts mit der Spaltenanzahl zu tun, sondern setzt die Fenster- oder Diagrammgröße in Inches (Breite * Höhe). Mit Pandas kann man auch noch andere Diagrammarten erstellen, z.B. Linien- oder Balkendiagramme. Dies wird hier aber nicht vorgeführt. == Arbeiten mit CSV- und LibreOffice-Dateien == Gegeben sei eine CSV-Datei test1.csv: Mai;Juni;Juli 12;17;45 15;65;65 16;32;23 4;14;7 23;17;Keine Daten verfügbar 67;Keine Daten verfügbar;45 15;24;12 Lesen von dieser CSV-Datei: import pandas as pd tab = pd.read_csv("test1.csv", sep=";") print(tab) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Schreiben in eine CSV-Datei test2.csv: import pandas as pd val = pd.read_csv("test1.csv", sep=";") val.to_csv("test2.csv", index=False) Ausgabedatei: Mai,Juni,Juli 12,17,45 15,65,65 16,32,23 4,14,7 23,17,Keine Daten verfügbar 67,Keine Daten verfügbar,45 15,24,12 Die Ausgabedatei ist beinahe gleich wie die Eingabedatei. Es werden aber Kommas statt Strichpunkten verwendet. Daher kommt auch der Name CSV ('''C'''omma '''S'''eparated '''V'''alue). Will man wieder Strichpunkte, so kann man dies über den Parameter <code>sep=";"</code> in der <code>to_csv</code>-Funktion machen. Um direkt von einer ODS-Datei (LibreOffice Calc, '''O'''pen '''D'''ocument '''S'''preadsheet) zu lesen muss das Modul odfpy extra installiert sein (per YaST, pip etc.). Gelesen wird dann folgendermaßen: import pandas as pd df = pd.read_excel('test1.ods', engine='odf') print(df) Ausgabe: Mai Juni Juli 0 12 17 45 1 15 65 65 2 16 32 23 3 4 14 7 4 23 17 Keine Daten verfügbar 5 67 Keine Daten verfügbar 45 6 15 24 12 Die Datei "test1.ods" sei die Datei, aus der das obige "test1.csv" generiert wurde. Schreiben kann man ebenfalls in eine ODS-Datei: import pandas as pd daten = { "Name": ["Hugo", "Richie", "Wilhelmine"], "Alter": [38, 30, 29], "Ort": ["Linz", "Innsbruck", "Salzburg"] } tab = pd.DataFrame(daten) with pd.ExcelWriter("test2.ods", engine="odf") as writer: tab.to_excel(writer, sheet_name="Daten", index=False) Es ergibt sich eine "test2.ods"-Datei (Screenshot): [[Datei:IngPython_pandas2.png|250px]] == Sonstiges == Hier seien stichpunktartig einige weitere Features von Pandas angeführt: * {{W|Pivot-Tabelle|Pivot-Tabellen}} (pivot ... Dreh-, Angelpunkt): Zweck - große Datenmengen schnell zusammenfassen, filtern und analysieren. * NaN ('''n'''ot '''a''' '''n'''umber): In einem Datensatz fehlt ein Wert oder ist nicht definiert. * groupby-Funktion: Daten strukturieren, aggregieren oder Zwischensummen bilden. * {{W|Binning#Datenverarbeitung_und_-analyse|Binning}}: Klassenbildung. * Mehrstufige Indizierung (Hierarchical Indexing oder MultiIndex) * Zeitreihen (Time Series) Für tiefergehende und weiterführende Informationen wird auf das Buch von ''Klein: Numerisches Python; Hanser, 2023'' und [https://pandas.pydata.org/ pandas] verwiesen. = Style Guide, flake8, pylint, Black etc. = == Style Guide == Wie man schönen und richtigen Python-Code schreibt, erfahren Sie in * [https://peps.python.org/pep-0008/ PEP 8 – Style Guide for Python Code] == Formatter und Linter == Ein Modul, das prüft, ob die Richtlinien im Style Guide eingehalten wurden, ist ''flake8'': * [https://flake8.pycqa.org/en/latest/ Flake8: Your Tool For Style Guide Enforcement] Code formatieren kann man auch mit [https://pypi.org/project/black/ Black]. Z.B. übersetzt <code>black test1.py</code> die Datei <code>test1.py</code> import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) in import sympy as sp H = sp.Symbol("H", positive=True) T = sp.Symbol("T", positive=True) t = sp.Symbol("t") f = sp.Piecewise( (H, (t > 0) & (t < T / 2)), (2 * H / T * (t - T / 2), (t > T / 2) & (t < T)) ) f_series = sp.fourier_series(f, (t, 0, T)) sp.pprint(f_series.truncate(4)) Die Programmausgabe ist reformatted test1.py All done! ✨ 🍰 ✨ 1 file reformatted. Der Unterschied zwischen Black und Flake8: * Black ist ein Code-Formatter. Er formatiert Ihren Code um, sodass er im Einklang mit PEP 8 steht. * Flake8 ist ein {{W|Lint (Programmierwerkzeug) | Code-Linter}}. Flake8 verändert Ihren Code nicht, sondern durchsucht ihn nach potenziellen Fehlern etc. Am obigen Beispiel sieht man auch, dass flake8 und Black nicht immer einer Meinung sind. Flake8 (<code>flake8 test1.py</code>) würde standardmäßig den mit Black formatierten Code bemängeln: test1.py:8:80: E501 line too long (80 > 79 characters) Diese Diskrepanz kann beseitigt werden. Da 79 Zeichen auf modernen Bildschirmen meist als zu kurz empfunden werden, ist ein Limit von 88 Zeichen (Black-Standard) oder mehr empfehlenswert. Um dies zu implementieren, erstellen Sie in Ihrem Projektverzeichnis eine <code>.flake8</code>-Datei mit dem Inhalt [flake8] max-line-length = 88 Und schon ignoriert Flake8 dieses Problem. Ein anderer Linter ist pylint. Der würde beim Abarbeiten des obigen Beispiels, z.B. mit <code>pylint test1.py</code> noch eine Kleinigkeit bemängeln: ************* Module test1 /home/hr/tmp/test1.py:1:0: C0114: Missing module docstring (missing-module-docstring) ------------------------------------------------------------------ Your code has been rated at 8.57/10 (previous run: 8.57/10, +0.00) Auch pylint muss vor der ersten Verwendung installiert werden (z.B. mittels pip, virtuelle Umgebung, YaST). Die Dokumentation zu pylint findet sich auf [https://pylint.readthedocs.io/en/latest/]. <u>Aufgabe:</u> Fügen Sie einen "module docstring" in die <code>test1.py</code>-Datei ein und testen Sie erneut mit flake8, Black und pylint. <small>Sehen Sie zum Thema docstrings auch [https://peps.python.org/pep-0257/#what-is-a-docstring PEP 257 – Docstring Conventions].</small> Es gibt noch weitere Formatierungswerkzeuge für Python-Code. Z.B. [https://docs.astral.sh/ruff/ Ruff], ein moderner Code-Formatter und -Linter. Mittels <code>ruff check test1.py</code> würde obiger Code geprüft (Linter). <code>ruff format test1.py</code> formatiert den Code (Formatter). == Type Checker == "Type Checker" sind z.B. * mypy * pyright * ty Diese prüfen die Datentypen, z.B. in folgendem Code def greetings(name: str) -> str: return "Hello, %s" % name print(greetings(42)) Python selbst, flake8, ruff oder black würden diesen Code ohne zu murren akzeptieren. "Type Checker" würden aber sehr wohl Alarm schlagen, z.B. liefert <code>mypy</code> folgende Ausgabe test1.py:5: error: Argument 1 to "greetings" has incompatible type "int"; expected "str" [arg-type] Found 1 error in 1 file (checked 1 source file) Das funktioniert übrigens nicht nur bei Funktionsannotationen, sondern auch mit Variablen etc. from typing import Final # "Konstante", ab Python 3.8 NUMBER: Final = 123 print(NUMBER) NUMBER = 125 print(NUMBER) # Variable a: int = 345 print(a) a = "Irgendwas" print(a) # Variable (Pipe-Symbol), ab Python 3.10 b : int|str = 567 print(b) b = "sonstiges" print(b) Ausgabe mit python: 123 125 345 Irgendwas 567 sonstiges Ausgabe mit mypy: test3.py:6: error: Cannot assign to final name "NUMBER" [misc] test3.py:12: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment] Found 2 errors in 1 file (checked 1 source file) Python kennt übrigens keine Konstanten. Man kann diese mittels Großbuchstaben andeuten. Das ist aber nur Konvention, hat aber keine sonstigen Auswirkungen. Oder man verwendet wie oben gezeigt <code>Final</code>. Dann werfen Typchecker Errors aus. ==pydoc== pydoc ist ein Werkzeug, um Python-Module, -Funktionen und -Klassen zu dokumentieren. Beispiel <code>test1.py</code>: """Rechen-Modul. Funktionen die von pydoc gelesen werden. """ def multiply(a, b): """Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a * b def add(a, b): """Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl """ return a + b if __name__ == '__main__': print(multiply(3, 5)) print(add(4, 6)) Ausgabe mit <code>python3.13 -m pydoc test1</code> auf der Konsole: Help on module test1: NAME test1 - Rechen-Modul. DESCRIPTION Funktionen die von pydoc gelesen werden. FUNCTIONS add(a, b) Addiert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl multiply(a, b) Multipliziert zwei Zahlen und gibt das Ergebnis zurück. Argumente: a -- erste Zahl b -- zweite Zahl FILE /home/xyz/tmp/test1.py Siehe zu diesem Thema z.B. auch [https://docs.python.org/3/library/pydoc.html]. Mittels <code>python3.13 -m pydoc -w test1</code> kann man auch eine HTML-Dokumentation erstellen. Wofür <code>if __name__ == '__main__':</code> steht, siehe z.B. etwas später im Abschnitt [[Ing_Mathematik:_Python#Doctests]]. == Sonstige Tools == Andere Tools für die {{W|Statische Code-Analyse|statische Codeanalyse}}, die aber für Ingenieure weniger interessant sein dürften, sind z.B. * Radon: Liefert verschiedene {{W|Softwaremetrik|Codemetriken}} (Komplexität, Wartbarkeitsindex ...) * Bandit: Findet Sicherheitslücken Tools für die {{W|Dynamisches Software-Testverfahren|dynamische Codeanalyse}}, z.B.: * DynaPyt (Framework zur dynamischen Programmanalyse) * cProfile (Profiler) * Memory Profiler (Speicheranalyse) * Memray (Speicheranalyse) * tracemalloc (Speicheranalyse) Paket- und Projektmanagement (pip-Ersatz etc.): * uv * Poetry * Conda * pipx Packaging-Tools (Freezer) und {{W|Compiler#Sonderformen|Transpiler}} : * pyinstaller ** erstellt eigenständige, ausführbare Binärdatei ** kein Cross-Compiler ** kein Schutz vor Reverse-Engineering ** langsam ** packt alles in eine Datei ** sehr große Datei ** Befehl, z.B.: <code>pyinstaller --onefile test1.py</code> ** GUI: <code>auto-py-to-exe</code> * cx_Freeze * nuitka ** Übersetzt Python-Code in C/C++-Code und weiter in eine ausführbare Datei ** kein Cross-Compiler ** Schutz vor Reverse-Engineering ** Befehl, z.B.: <code>nuitka --standalone --onefile test1.py</code> * cython = Einige Integrierte Entwicklungsumgebungen (IDEs)= Werden Programmtexte größer und umfangreicher, so ist das Arbeiten mit der interaktiven Programmierumgebung bzw. das direkte Ausführen von Python-Skripten mühsam. Man wünscht sich z.B. Hilfen zum Debuggen oder die automatische Code-Vervollständigung. Zu diesem Zweck wurden IDEs (Integrated Development Environments) geschaffen. Von diesen seinen nachfolgend auszugsweise einige kurz beschrieben. Testen Sie einfach aus, welche davon für Sie bzw. für Ihr Python-Projekt geeignet sind. == IDLE == IDLE ist die mit dem Python-Programmpaket mitgelieferte IDE. Der Name leitet sich einerseits ab vom Monty-Python-Mitglied Eric Idle, andererseits steht es als Abkürzung für "'''I'''ntegrated '''D'''evelopment and '''L'''earning '''E'''nvironment. IDLE ist einfach zu bedienen, bietet aber schon einen beachtlichen Leistungsumfang. Nachfolgend wird ein Screenshot zu IDLE geliefert. Rechts ist das Editor-Fenster zu sehen, links die interaktive Programmierumgebung. Um das Beispiel selbst nachvollziehen zu können, starten Sie IDLE. Das geht ähnlich, wie Sie die interaktive Programmierumgebung von Python starten (nur, dass Sie eben das IDLE-Icon doppelklicken und nicht das Python-Icon. Unter Linux geben Sie einfach in einem Terminal <code>idle3.13</code> o. Ä. ein). Weiter geht es mit "File - Open - ...". Die auszuführende Datei auswählen (im konkreten Fall ein "Hallo-Welt"-Programm). Es erscheint das rechte Fenster. Dort "Run - Run Module" auswählen. Und schon wird im linken Fenster "Hallo Welt!" ausgegeben. [[Datei:PythonIng_idle1.jpg | 600px]] Siehe auch {{W|IDLE}}. == PyCharm == PyCharm ist ein kommerzielles Produkt. Es gab aber auch eine kostenlose Community Edition. Seit 2025 sind beide Varianten vereint. Für die ersten 30 Tage sind die Pro-Funktionen frei verfügbar, danach nur noch die Kernfunktionalitäten (oder man bezieht kostenpflichtig die Pro-Version). Zu beziehen ist PyCharm unter dem Weblink [https://www.jetbrains.com/pycharm/]. Nachfolgend ein etwas abgewandeltes "Hallo Welt"-Programm, editiert und ausgeführt mit PyCharm. [[Datei:PyCharm_IDE_2023_screenshot.png | 600px]] Siehe auch {{W|PyCharm}}. == Eric == Auch eric ist Open Source und steht unter der GNU General Public License Version 3 oder später. Zu beziehen ist diese Software unter [https://eric-ide.python-projects.org/]. [[Datei:Screenshot_Eric_4.png | 600px]] Siehe auch {{W|eric (Software)}}. <small> Unter openSUSE Tumbleweed sollte sich eric auch mit YaST installieren lassen. Bei mir gibt es aber dann beim Ausführen des eric-Programms eine Fehlermeldung (Stand März 2026): ... ModuleNotFoundError: No module named 'PyQt6.QtPdfWidgets' Umgehen kann man dieses Problem aber wieder mit dem Erstellen einer virtuellen Umgebung, in etwa so python3.13 -m venv ~/tmp/venv1 cd ~/tmp/venv1/bin ./python3.13 -m pip install --upgrade --prefer-binary eric-ide ./eric7_ide </small> == PyScripter == Vom Funktionsumfang vergleichbar mit den vorherigen IDEs ist PyScripter. Auch PyScripter ist Open Source. Die Projekt-Homepage findet sich auf [https://sourceforge.net/projects/pyscripter/]. PyScripter ist nur für MS Windows verfügbar. [[Datei:PythonIng_pyscripter1.jpg | 600px]] == Spyder IDE == Spyder enthält bereits eine stabile Python-Version und etliche Module (z.B. matplotlib, numpy, control). Ansonsten kann dieses Softwarepaket vom Funktionsumfang her mit den anderen genannten IDEs locker mithalten. Spyder wurde unter der MIT-Lizenz veröffentlicht. Diese Software findet sich auf [https://www.spyder-ide.org]. [[Datei:Spyder-windows-screenshot.png | 600px]] Siehe auch {{W|Spyder (Software)}} == Eclipse IDE== Die {{W|Eclipse_(IDE)|Eclipse-IDE}} kann für Python aufgerüstet werden. Dazu gibt es das PyDev-Plugin. Installiert wird es über * Help > Eclipse Marketplace... * Find - PyDev - Install Danach muss noch der Pfad zum Python-Interpreter festgelegt werden * Window > Preferences > PyDev > Interpreters > Python Interpreter > New ... Das Ergebnis ist ähnlich wie im folgenden Bild, nur dass statt C/C++ Python Verwendung findet. [[Datei:Setting Up Eclipse CDT helloout.png | 600px]] == Sonstige == Die genannten IDEs sind nicht die Einzigen. Es gibt, um dem Image Pythons als beliebteste Programmiersprache gerecht zu werden, noch einige andere. Sowohl Open Source-Programme als auch kommerzielle Programme sind im Web zu finden, z.B. Thonny oder {{W|Visual Studio Code}}. Unter Linux kann man auch {{W|KDevelop}}, ausgestattet mit dem Python3-Plugin, einsetzen. Braucht man den Umfang von ausgewachsenen IDEs nicht, so kann man auch normale Texteditoren verwenden (z.B. {{W|Geany}} oder {{W|Kate_(Texteditor)|Kate}}). = Debuggen und Testen = Das Debuggen und Testen von Programmen sind wichtige Bestandteile der Programmierung. Syntaxfehler lassen sich i.A. leicht beheben. Schwieriger ist das Eingrenzen von logischen Fehlern, die ev. nur in bestimmten Situationen auftreten und keine explizite Fehlermeldung hervorrufen. Das Programm liefert falsche Ergebnisse oder es stürzt aus heiterem Himmel ab. Um das zu verhindern gibt es verschiedene Werkzeuge, die bei der Fehlersuche behilflich sein können. Vorerst siehe aber zwecks Begriffsklärung noch folgende Links: * {{W|Debuggen}} * {{W|Debugger}} * {{W|Softwaretest}} <gallery> First Computer Bug, 1947.jpg Test ganzheitlich.png V-Modell.svg </gallery> == Das Modul pdb == Python bringt schon ein Modul zum Debuggen mit. Siehe z.B. [https://docs.python.org/3/library/pdb.html pdb — The Python Debugger]. Komfortabler lässt sich das aber mittels Integrierter Entwicklungsumgebungen (IDEs) angehen. == Debuggen mit IDEs == Für die IDEs IDLE und Spyder sei kurz auf die entsprechenden Webseiten verwiesen: * [https://www.cs.uky.edu/~keen/help/debug-tutorial/debug.html Debugging under IDLE]. * [https://docs.spyder-ide.org/current/panes/debugging.html Spyder Debugger] Dort wird die Vorgehensweise auch mittels Screenshots erläutert. == assert == assert ... behaupten, zusichern ({{W|Assertion (Informatik)}}) Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10., 0.) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10., 0.) File "/home/hr/Develop/test1.py", line 4, in print1 assert y != 0.0 ^^^^^^^^ AssertionError Python-Code: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1("10.", "5.") File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Aber auch bei nachfolgendem Code gibt es eine Fehlermeldung: def print1(x, y): assert type(x) == float assert type(y) == float assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 Traceback (most recent call last): File "/home/hr/Develop/test1.py", line 8, in <module> print1(10, 5) File "/home/hr/Develop/test1.py", line 2, in print1 assert type(x) == float ^^^^^^^^^^^^^^^^ AssertionError Damit letzteres funktioniert, kann man den Programmcode so umschreiben: def print1(x, y): assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) print1(10., 5.) print1(10, 5) Ausgabe: 2.0 2.0 Und jetzt fangen wir den <code>AssertionError</code> auf: def print1(x, y): try: assert type(x) == float or type(x) == int assert type(y) == float or type(y) == int assert y != 0.0 print(x/y) except(AssertionError): print("Hallo") print1(10., 5.) print1("10.", "5.") Ausgabe: 2.0 Hallo Ich hoffe, es ist wenigstens im Ansatz klar geworden, wofür <code>assert</code> gut sein kann. Ausschalten kann man die <code>assert</code>-Überprüfung übrigens mit dem Python-Schalter <code>-O</code>. == Doctests == Innerhalb eines Docstrings kann die Arbeit im interaktiven Modus simuliert werden. Nach den Promptzeichen (>>>) erfolgen dann bei unserem Beispiel innerhalb des Docstrings simulierte Aufrufe der Funktion <code>print1()</code>. Danach folgen jeweils die Sollresultate. Wird das Modul oder die Datei als Hauptprogramm aufgerufen, so wird die Funktion <code>doctest.testmode()</code> aufgerufen und ein Bericht auf der Konsole ausgegeben. Wird das Modul nicht als Hauptprogramm aufgerufen, sondern importiert, dann wird diese <code>testmod</code>-Funktion nicht aufgerufen. D.h. dieser Code kann sowohl für Testzwecke als auch für den produktiven Einsatz verwendet werden. Das ist auch sinnvoll, weil wenn man Teile der Datei immer löschen bzw. einfügen müsste, so würden sich Fehlerquellen auftun. Das würde den Sinn und Zweck von Doctests konterkarieren. def print1(x=0., y=1.): """ Dividiere zwei Zahlen Autor: Intruder Datum: 12.08.2025 >>> print1(2., 1.) 2.0 >>> print1(5., 2.) 2.5 >>> print1(5.) 5.0 """ print(x/y) if __name__ == "__main__": import doctest doctest.testmod(verbose=True) Ausgabe: Trying: print1(2., 1.) Expecting: 2.0 ok Trying: print1(5., 2) Expecting: 2.5 ok Trying: print1(5.) Expecting: 5.0 ok 1 items had no tests: __main__ 1 items passed all tests: 3 tests in __main__.print1 3 tests in 2 items. 3 passed and 0 failed. Test passed. Das gezeigte Beispiel ist so ziemlich das einfachste, das es gibt. Für weiterführende Details siehe z.B.: * [https://peps.python.org/pep-0257/ PEP 257 – Docstring Conventions] * [https://docs.python.org/3/library/doctest.html doctest — Test interactive Python examples] ''Einschub:'' Ganz ähnlich kann man auch Klassen testen, z.B. in folgendem Code-Fragment class Fahrzeug: # siehe Abschnitt "Objektorientierte Programmierung" # ... if __name__ == "__main__": vauweh = Fahrzeug(170, 90) beemweh = Fahrzeug(200, 120) print(vauweh.convertGeschw()) print(beemweh.convertGeschw()) Wird das Script als Hauptprogramm ausgeführt (z.B. zu Testzwecken), so erfolgt die Ausgabe der zwei, via <code>convertGeschw()</code>, umgerechneten Geschwindigkeiten. Wird es aber als Modul eingebunden, so wird der letzte Programmabschnitt nicht ausgeführt (<code>__name__ == "__main__"</code> ergibt <code>False</code>). == pytest == Siehe zu diesem Thema auch {{W|Modultest}}. pytest ist ein externes Modul und muss vorab installiert werden, z.B. mittels pip install -U pytest pip install -U pytest-html Python-Code, Datei test1.py: def add(x, y): return x + y def test_answer(): assert add(1, 1) == 3 Starten von pytest in der Konsole: pytest test1.py Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py F [100%] ========================================================= FAILURES ========================================================== ________________________________________________________ test_answer ________________________________________________________ def test_answer(): > assert add(1, 1) == 3 E assert 2 == 3 E + where 2 = add(1, 1) test1.py:6: AssertionError ================================================== short test summary info ================================================== FAILED test1.py::test_answer - assert 2 == 3 ===================================================== 1 failed in 0.09s ===================================================== Hier erhalten wir einen Fehler, da 1+1 eindeutig ungleich 3 ist. Aber aus irgendeinem Grund wollte der Programmierer oder Tester in diesem Fall, dass dies so ist. Testfälle werden übrigens mit dem Präfix <code>test_</code> eingeleitet. Python-Code: def add(x, y): return x + y + 1 def test_answer(): assert add(1, 1) == 3 Ausgabe: ==================================================== test session starts ==================================================== platform linux -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 rootdir: /home/hr/Develop plugins: anyio-4.10.0, metadata-3.1.1, html-4.1.1 collected 1 item test1.py . [100%] ===================================================== 1 passed in 0.01s ===================================================== Jetzt ist alles in Ordnung. Weiterführendes siehe z.B. * [https://docs.pytest.org/en/stable/ pytest: helps you write better programs] == unittest == Auch unittest dient zur Durchführung von Testreihen, ist aber Bestandteil von Python. Hier wird vorerst nicht näher darauf eingegangen. Siehe z.B. * [https://docs.python.org/3/library/unittest.html unittest — Unit testing framework] Lt. ''Inden: Python Challenge; dpunkt, 2021, Seite 481'' soll unittest weniger komfortabel als pytest sein. Einen Vergleich von unittest mit pytest findet man in * [https://knapsackpro.com/testing_frameworks/difference_between/pytest/vs/unittest pytest vs unittest] = Python und Anwendungsprogramme = Bisher stand immer alleine die Programmiersprache Python (ev. unter Einbeziehung von Modulen) im Mittelpunkt der Betrachtungen. Aber Python kann auch als Makrosprache für Anwendungsprogramme auftreten. Als Beispiele seien {{W|FreeCAD}} und {{W|LibreOffice}} genannt. == FreeCAD == FreeCAD ist ein freies 3D-CAD-Programm. Hier soll nicht auf die Bedienung dieses CAD-Pakets eingegangen werden, sondern nur auf die Möglichkeit, mittels Python Makros zu schreiben. Als einfacher Einstieg soll ein Makro erstellt werden, welches eine Kugel (rot) und einen Quader (blau) zeichnet. Folgende Vorbereitungsschritte sind erforderlich (es sei vorausgesetzt, dass FreeCAD schon am Rechner installiert ist. Downloaden können Sie das Programm von der Website [https://www.freecad.org/downloads.php?lang=en]): * FreeCAD starten * Leere Datei erstellen * Makro > Makros > Erstellen ... Es öffnet sich ein leeres Editorfenster, in das Sie folgenden Code eingeben können: import FreeCAD import Part doc = FreeCAD.newDocument() # Kugel kugel = Part.makeSphere(10) form_element = doc.addObject("Part::Feature", "Kugel") form_element.Shape = kugel kug = FreeCAD.ActiveDocument.getObject("Kugel") kug.ViewObject.ShapeColor = (1.0, 0.0, 0.0) neuePosition = App.Vector(5, 2.5, 2.5) kug.Placement = App.Placement(neuePosition, kug.Placement.Rotation) # Quader quader = Part.makeBox(5, 5, 50) form_element = doc.addObject("Part::Feature", "Quader") form_element.Shape = quader quad = FreeCAD.ActiveDocument.getObject("Quader") quad.ViewObject.ShapeColor = (0.0, 0.0, 1.0) doc.recompute() Diesen Code können Sie nun ausführen: * Makro > Makro ausführen Es ergibt sich folgende Ausgabe (gedreht und gezoomt): [[Datei: PythonIng_freecad1.png|500px]] Siehe auch [https://wiki.freecad.org/Python_scripting_tutorial/de# Anleitung Skripterstellung mit Python]. Getestet wurde obiges Beispiel mit FreeCAD 1.1.3 unter Linux und 1.1.1 unter MS Windows. == LibreOffice == LibreOffice ist ein freies Officepaket ([https://de.libreoffice.org/]). Hier soll nur das Tabellenkalkulationsprogramm Calc kurz betrachtet werden. Es seinen in den ersten 3 Zellen (A1 bis A3) Zahlen gegeben. Diese sollen mit einem Python-Makro addiert und das Resultat in der Zelle A5 ausgegeben werden. Auch hier sind Vorbereitungsarbeiten nötig: * zuerst muss unter Linux das Verzeichnis <code>~/.config/libreoffice/4/user/Scripts/python</code> erstellt werden * für MS Windows ist es das Verzeichnis <code>%APPDATA%\LibreOffice\4\user\Scripts\python</code> ** drücken Sie zuerst Win + R (es öffnet sich das Ausführen-Fenster) ** geben Sie <code>%appdata%</code> ein, danach drücken Sie Enter (es öffnet sich der Explorer) ** navigieren Sie zu dem genannten Verzeichnis bzw. erstellen Sie das Verzeichnis * in diesem Verzeichnis wird dann mit einem beliebigen Texteditor das Python-Makro erstellt, in unserem Fall die Datei <code>summiere_zellen.py</code>: import uno def summiere_zellen(*args): # Zugriff auf das aktuelle Dokument und das aktive Tabellenblatt ctx = uno.getComponentContext() smgr = ctx.getServiceManager() desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) doc = desktop.getCurrentComponent() sheet = doc.getCurrentController().getActiveSheet() # Werte aus den Zellen A1 bis A3 auslesen w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value # Addition der drei Werte summe = w1 + w2 + w3 # Ergebnis in die Zelle A5 schreiben sheet.getCellRangeByName("A5").Value = summe * siehe dazu ggf. auch [https://help.libreoffice.org/latest/de/text/sbasic/python/python_locations.html?DbPAR=BASIC]. Weiter geht es in LibreOffice Calc mit dem Menü ''Extras > Makros > Makros verwalten > Python''. Dort wird das Makro <code>summiere_zellen</code> ausgeführt. Es ergibt sich z.B. folgendes Resultat [[Datei:PythonIng_libreoffice1.png]] Das Kürzel <code>uno</code> steht für '''U'''niversal '''N'''etwork '''O'''bjects. Etwas einfacher geht's auch so: def summiere_zellen(): desktop = XSCRIPTCONTEXT.getDesktop() model = desktop.getCurrentComponent() sheets = model.getSheets() sheet = sheets.getByIndex(0) w1 = sheet.getCellRangeByName("A1").Value w2 = sheet.getCellRangeByName("A2").Value w3 = sheet.getCellRangeByName("A3").Value cell = sheet.getCellRangeByName("A5") cell.setValue(w1 + w2 + w3) Empfohlen wird auch, das Erweiterungspaket APSO ('''A'''lternative '''P'''ython '''S'''cript '''O'''rganizer, apso.oxt) zu installieren. Die Vorgehensweise wird hier nicht gezeigt, sondern nur darauf hingewiesen, dass man das einfach "googeln" kann. Siehe zur Python-Programmierung für LibreOffice auch [https://wiki.documentfoundation.org/Macros/Python_Guide/de Makros/Python-Handbuch]. Getestet wurden obige Beispiele mit LibreOffice 26.2.5.1 unter Linux und 26.2.1.2 unter MS Windows. = Ausblick = Dies war eine kurze Einführung in die Berechnungs- und Darstellungsmöglichkeiten mit Python. Es sollten etliche relevante Themen behandelt, oder zumindest kurz angesprochen worden sein. Wem dieser Text nicht ausreichend ist, der sei auf die entsprechenden weiterführenden Weblinks, Bücher und die Python-Hilfefunktion verwiesen. Python kennt noch viel mehr Befehle, als hier dargestellt wurden. Das Themenspektrum ist auch durch die Einbindung externer Module fast beliebig erweiterbar. = Weblinks= == Python allgemein == * [https://www.python.org/ Python Homepage] == Externe mathematische Module == * [https://numpy.org/ NumPy] * [https://numpy.org/doc/stable/user/numpy-for-matlab-users.html NumPy for MATLAB users] * [https://scipy.org/ SciPy] * [https://www.sympy.org/en/index.html SymPy] * [https://pandas.pydata.org/ pandas] * [https://github.com/maroba/findiff findiff] * [https://mpmath.org/ mpmath] == Externe Module für Grafiken == * [https://matplotlib.org/ Matplotlib] * [https://vpython.org/ VPython] * [https://build123d.readthedocs.io/en/latest/ build123d] * [https://docs.vtk.org/en/latest/api/python.html VTK] == Erstellung von User Interfaces == * [https://docs.python.org/3/library/tkinter.html tkinter - Python interface to Tcl/Tk] * [https://docs.python.org/3/library/curses.html curses - Terminal handling for character-cell displays] * [https://wiki.qt.io/Qt_for_Python Qt for Python] * [https://www.gtk.org/docs/language-bindings/python GTK and Python] == Erstellen virtueller Umgebungen == * [https://docs.python.org/3/library/venv.html venv - Creation of virtual environments] == Sonstige == * [https://python-control.readthedocs.io/en/stable/ Python Control Systems Library] * [https://pypi.org/project/regex/ regex - Regular Expressions] * [http://pyromat.org/ PYroMat] * [https://coolprop.org/coolprop/wrappers/Python/index.html CoolProp] * [https://pypi.org/project/iapws/ iapws] * [https://tespy.readthedocs.io/en/main/getting_started/introduction.html TESPy - Thermal Engineering Systems in Python] = Bücher = == Gedruckte Bücher, OpenBooks, Magazine == * Diverse: c't Python Lernen, Verstehen, Anwenden; Heise, 2022 * Ernesti, Kaiser: Python3 - das umfassende Handbuch; 5. Aufl., Rheinwerk, [https://openbook.rheinwerk-verlag.de/python/ OpenBook] * Inden: Python Challenge; dpunkt, 2021, ISBN 978-3-86490-809-5 * Klein: Numerisches Python; 2. Aufl., Hanser, 2023, ISBN 978-3-446-47170-2 * Steinkamp: Der Python-Kurs für Ingenieure und Naturwissenschaftler; Rheinwerk, 2021, ISBN 978-3-8362-7316-9 * Weigend: Python 3 - Das umfassende Praxisbuch; 9. Aufl., mitp, 2022, ISBN 978-3-7475-0544-1 * Woyand: Python für Ingenieure und Naturwissenschaftler; 4. Aufl., Hanser, 2021, ISBN 978-3-446-46483-4 == Andere Wikibooks == * [[:en:Subject:Python_programming_language | Englische Wikibooks zum Thema Python]] * [[Python|Deutschsprachiges Python-Wikibook]] [[Bild:2von10.png|20%]] * [[Python unter Linux|Python 2.7 unter Linux]] [[Bild:10von10.png|100%]] {{Navigation_zurückhochvor_buch| zurücktext=Julia für Ingenieure| zurücklink=Ing Mathematik: Julia| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Landau-Notation| vorlink=Ing Mathematik: Landau}} b7ssmih38a96qfvkyyqhzavc2on87wn First Responder/Einsatzablauf 0 123023 1090716 1090094 2026-09-12T12:02:10Z 2ndoptimist 116642 FR Autozettel eingefügt 1090716 wikitext text/x-wiki == Anfahrt == First Responder haben keine besonderen Rechte wie z.B. Einsatzfahrzeuge mit Blaulicht. In der Regel wird ein Parkieren an unüblichen Orten toleriert, resp. allfällige Bussen nach Intervention der kantonalen Stelle erlassen. Um dieses Risiko im Voraus schon zu vermindern empfiehlt es sich, einen Zettel mit dem Hinweis "First Responder im Einsatz" und ggf. Handynummer sichtbar auf das Armaturenbrett zu legen. === Parkieren und Warnblinker === Das eigene Fahrzeug strategisch parken: Nicht einfach vor dem Einsatzort abstellen. Das eigene Auto dient auch als Wegweiser. Es hat sich etabliert, dass beim Abstellen des Fahrzeuges der Warnblinker eingeschaltet wird um den nachfolgenden Kräften die Orientierung zu erleichtern. Es muss so stehen, dass es den nachfolgenden Rettungsdienst oder der Feuerwehr nicht den Zugang versperrt. Es ist zu erwarten, dass noch weitere Fahrzeuge zur Hilfeleistung eintreffen.: * '''Der''' '''Krankenwagen:''' Braucht eine Zufahrt so nah wie möglich an den Patienten resp. den Hauseingang, aber er muss auch wieder wegkommen können (keine Sackgassen blockieren!). * '''Die Feuerwehr:''' Braucht Zugriff auf Hydranten (Hydranten dürfen nicht zugeparkt werden). * '''Der Hubretter''' '''oder eine Drehleiter''' brauchen einen massiven Stellplatz. Er benötigt eine ebene, tragfähige Fläche (keine Grünstreifen mit Kanaldeckeln darunter) und vor allem den '''Drehkreis'''. Stützen sind oft bis zu 3,50 Meter lang. Der Bereich rund um den Hubretter (ein Kreis von ca. 10-15 Metern Radius) muss absolut frei von Menschen und Fahrzeugen sein. * '''Der Notarztwagen:''' Muss nah an den Patienten, aber nicht im Weg der schweren Technik stehen. * '''Der''' '''Rettungshubschrauber:''' Braucht eine freie, waagerechte Fläche (mindestens 20x20 Meter), idealerweise ohne Laternenmasten oder Stromleitungen im Anflugbereich. Wenn man Passanten am Einsatzort hat: Diese ggf. anweisen, Fahrzeuge wegzufahren oder diese Passanten dazu zu bewegen, die Flächen freizuhalten und dem Krankenwagen den Weg zu weisen. Es wird emfpohlen das Fahrzeug mittels einem Zettel hinter der Windschutzscheibe zu versehen. Damit kann auf die Umstände hingewiesen werden und auf Verständnis bei Anwohnern sowie Vermeidung von unnötigen Bussen von der Polizei hingearbeitet werden. Druckvorlage: [[File:FirstResponderAutozettel.png|thumb|Zettel für First Responder Auto im Einsatz.|links]] === Einsatzkleidung === Die First-Responder-Weste gehört angezogen, so bist du einerseits für die Angehörigen und Anwesenden klar erkennbar, ebenso bist du so für nachfolgende Einsatzkräfte sichtbar. Für den Start von Zuhause empfiehlt es sich, praktische Kleidung permanent bereitzuhalten. Kleine Gewohnheiten verkürzen die Ausrückzeit. So hat es sich bewährt, zum Beispiel die Unterwäsche nicht am Abend schon in den Wäschekorb zu geben sondern für einen allfälligen Einsatz noch auf dem Kleiderstapel zu belassen. Auch Schuhe mit Reissverschluss, Klett oder Slip-Ins sind schneller angezogen als Trekkingschuhe mit Einfädelhaken. Wer sich wirklich was Gutes tun will – nicht nur für den First-Responder Einsatz, auch bei schwerer Gartenarbeit oder wenn Gefahr von Nageltritten oder schweren Lasten auf den Zehen besteht – kann sich z. B. auch ein VÖLKL Rescue Zip leisten. Durch den Reissverschluss ist er schnell angezogen, der hohe Schaft sorgt für Stabilität im Gelände und bei Treppen/Absätzen und die Sicherheitsmerkmale schützen vor weiteren Gefahren. == Ankunft == Wer zuerst da ist, bestimmt (bis jemand mit höherer Qualifikation das Kommando übernimmt), wo was passiert. === Lagebeurteilung === === Gefahren erkennen === === Zugang schaffen === === Haustiere === Beim Betreten der Wohnung ist damit zu rechnen, dass Hunde, Katzen oder gar Exotische Tiere wie Spinnen oder Schlangen sich in der Wohnung frei bewegen. Über die spezifischen Gefahren und den Umgang mit dieser Situation wird im Kapitel [[First Responder/Besondere Situationen und Gefahren]] eingegangen. Wichtig beim Betreten der Wohnung ist, dass verhindert wird, dass z. B. der Hund oder die Katze ins Freie entwischt.Wenn keine mit dem Tier vertraute Person anwesend ist, kann versucht werden, dieses in einen separaten Raum zu sperren, so dass die Massnahmen ungestört durchgeführt werden können und auch ein Patiententransport ohne das Risiko des Entwischen des Haustieres durchgeführt werden kann. === Schaulustige === == Einweisen weiterer Einsatzkräfte == Sichtbar werden: Tageslicht = Arme hoch und wedeln, Warnweste an. Bei Nacht, wenn vorhanden, Taschenlampe schwenken. Das am besten mit klarer Zeichengebung: Eindeutig auf die freigehaltene Fläche zeigen, auf die das Fahrzeug fahren soll. === Rettungswagen & Notarzt === === Feuerwehr === === Polizei === === Helikopter === === Handzeichen === == Zugang zum Patienten == === Mehrfamilienhäuser === ==== Türen offen halten ==== ==== Lift Reservieren ==== === Betriebe/Landwirtschaft === === Freies Gelände === s8fizwfoct010r4rfnb10bwku756yti 1090717 1090716 2026-09-12T12:06:56Z Intruder 1513 /* Parkieren und Warnblinker */ Buchstabendreher korr. 1090717 wikitext text/x-wiki == Anfahrt == First Responder haben keine besonderen Rechte wie z.B. Einsatzfahrzeuge mit Blaulicht. In der Regel wird ein Parkieren an unüblichen Orten toleriert, resp. allfällige Bussen nach Intervention der kantonalen Stelle erlassen. Um dieses Risiko im Voraus schon zu vermindern empfiehlt es sich, einen Zettel mit dem Hinweis "First Responder im Einsatz" und ggf. Handynummer sichtbar auf das Armaturenbrett zu legen. === Parkieren und Warnblinker === Das eigene Fahrzeug strategisch parken: Nicht einfach vor dem Einsatzort abstellen. Das eigene Auto dient auch als Wegweiser. Es hat sich etabliert, dass beim Abstellen des Fahrzeuges der Warnblinker eingeschaltet wird um den nachfolgenden Kräften die Orientierung zu erleichtern. Es muss so stehen, dass es den nachfolgenden Rettungsdienst oder der Feuerwehr nicht den Zugang versperrt. Es ist zu erwarten, dass noch weitere Fahrzeuge zur Hilfeleistung eintreffen.: * '''Der''' '''Krankenwagen:''' Braucht eine Zufahrt so nah wie möglich an den Patienten resp. den Hauseingang, aber er muss auch wieder wegkommen können (keine Sackgassen blockieren!). * '''Die Feuerwehr:''' Braucht Zugriff auf Hydranten (Hydranten dürfen nicht zugeparkt werden). * '''Der Hubretter''' '''oder eine Drehleiter''' brauchen einen massiven Stellplatz. Er benötigt eine ebene, tragfähige Fläche (keine Grünstreifen mit Kanaldeckeln darunter) und vor allem den '''Drehkreis'''. Stützen sind oft bis zu 3,50 Meter lang. Der Bereich rund um den Hubretter (ein Kreis von ca. 10-15 Metern Radius) muss absolut frei von Menschen und Fahrzeugen sein. * '''Der Notarztwagen:''' Muss nah an den Patienten, aber nicht im Weg der schweren Technik stehen. * '''Der''' '''Rettungshubschrauber:''' Braucht eine freie, waagerechte Fläche (mindestens 20x20 Meter), idealerweise ohne Laternenmasten oder Stromleitungen im Anflugbereich. Wenn man Passanten am Einsatzort hat: Diese ggf. anweisen, Fahrzeuge wegzufahren oder diese Passanten dazu zu bewegen, die Flächen freizuhalten und dem Krankenwagen den Weg zu weisen. Es wird empfohlen das Fahrzeug mittels einem Zettel hinter der Windschutzscheibe zu versehen. Damit kann auf die Umstände hingewiesen werden und auf Verständnis bei Anwohnern sowie Vermeidung von unnötigen Bussen von der Polizei hingearbeitet werden. Druckvorlage: [[File:FirstResponderAutozettel.png|thumb|Zettel für First Responder Auto im Einsatz.|links]] === Einsatzkleidung === Die First-Responder-Weste gehört angezogen, so bist du einerseits für die Angehörigen und Anwesenden klar erkennbar, ebenso bist du so für nachfolgende Einsatzkräfte sichtbar. Für den Start von Zuhause empfiehlt es sich, praktische Kleidung permanent bereitzuhalten. Kleine Gewohnheiten verkürzen die Ausrückzeit. So hat es sich bewährt, zum Beispiel die Unterwäsche nicht am Abend schon in den Wäschekorb zu geben sondern für einen allfälligen Einsatz noch auf dem Kleiderstapel zu belassen. Auch Schuhe mit Reissverschluss, Klett oder Slip-Ins sind schneller angezogen als Trekkingschuhe mit Einfädelhaken. Wer sich wirklich was Gutes tun will – nicht nur für den First-Responder Einsatz, auch bei schwerer Gartenarbeit oder wenn Gefahr von Nageltritten oder schweren Lasten auf den Zehen besteht – kann sich z. B. auch ein VÖLKL Rescue Zip leisten. Durch den Reissverschluss ist er schnell angezogen, der hohe Schaft sorgt für Stabilität im Gelände und bei Treppen/Absätzen und die Sicherheitsmerkmale schützen vor weiteren Gefahren. == Ankunft == Wer zuerst da ist, bestimmt (bis jemand mit höherer Qualifikation das Kommando übernimmt), wo was passiert. === Lagebeurteilung === === Gefahren erkennen === === Zugang schaffen === === Haustiere === Beim Betreten der Wohnung ist damit zu rechnen, dass Hunde, Katzen oder gar Exotische Tiere wie Spinnen oder Schlangen sich in der Wohnung frei bewegen. Über die spezifischen Gefahren und den Umgang mit dieser Situation wird im Kapitel [[First Responder/Besondere Situationen und Gefahren]] eingegangen. Wichtig beim Betreten der Wohnung ist, dass verhindert wird, dass z. B. der Hund oder die Katze ins Freie entwischt.Wenn keine mit dem Tier vertraute Person anwesend ist, kann versucht werden, dieses in einen separaten Raum zu sperren, so dass die Massnahmen ungestört durchgeführt werden können und auch ein Patiententransport ohne das Risiko des Entwischen des Haustieres durchgeführt werden kann. === Schaulustige === == Einweisen weiterer Einsatzkräfte == Sichtbar werden: Tageslicht = Arme hoch und wedeln, Warnweste an. Bei Nacht, wenn vorhanden, Taschenlampe schwenken. Das am besten mit klarer Zeichengebung: Eindeutig auf die freigehaltene Fläche zeigen, auf die das Fahrzeug fahren soll. === Rettungswagen & Notarzt === === Feuerwehr === === Polizei === === Helikopter === === Handzeichen === == Zugang zum Patienten == === Mehrfamilienhäuser === ==== Türen offen halten ==== ==== Lift Reservieren ==== === Betriebe/Landwirtschaft === === Freies Gelände === tg8nddj2vu20bb9s9c34ox4v9babfzb Gitarre: CAGED-Stammtöne - Erster Fingersatz 0 123107 1090728 2026-09-12T17:21:21Z Mjchael 2222 Neue Seite (vgl. [[WB:AZ]]) 1090728 wikitext text/x-wiki == Erster Fingersatz == === Eintaktige Sequenzen === Du wirst feststellen, dass sich die Sequenzen recht schnell lernen lassen. ==== 1. Fingersatz • C-Form (open) ==== Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • A- (Bb-)Form ==== Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 3.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 3 darkgrey ) (place-fret 4 3 4 yellow3 ) (place-fret 4 5 5 darkgrey ) (place-fret 5 2 "j7" yellow3 ) (place-fret 5 3 1 black ) (place-fret 5 5 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • G-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 3 darkgrey ) (place-fret 2 6 4 yellow3 ) (place-fret 2 8 5 darkgrey ) (place-fret 3 4 "j7" yellow3 ) (place-fret 3 5 1 black ) (place-fret 3 7 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger auf der G-Saite des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • E- (F-)Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 3 darkgrey ) (place-fret 5 8 4 yellow3 ) (place-fret 5 10 5 darkgrey ) (place-fret 6 7 "j7" yellow3 ) (place-fret 6 8 1 black ) (place-fret 6 10 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Den Grundton C auf der E-Saite kannst du dir vom C-Barré der E-Form (wie ein F- Barré) im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • D-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 3 darkgrey ) (place-fret 3 10 4 yellow3 ) (place-fret 3 12 5 darkgrey ) (place-fret 4 9 "j7" yellow3 ) (place-fret 4 10 1 black ) (place-fret 4 12 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Wenn du später mal einen herausfordernden Lick zwischen der G- und H-Saite hast, wäre eine weitere gangbare Strategie den Lick in eine fingertechnisch günstigere Lage zu verlegen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • C-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 3 darkgrey ) (place-fret 1 13 4 yellow3 ) (place-fret 1 15 5 darkgrey ) (place-fret 2 12 "j7" yellow3 ) (place-fret 2 13 1 black ) (place-fret 2 15 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === === Die Moldau (Hauptmotiv) === 18sjnmn1ulefe3aqx6sx2eimww07tvp 1090729 1090728 2026-09-12T17:28:45Z Mjchael 2222 /* "Das häßliche Entlein" oder "Alle meine Entchen"Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied. in A-Moll */ 1090729 wikitext text/x-wiki == Erster Fingersatz == === Eintaktige Sequenzen === Du wirst feststellen, dass sich die Sequenzen recht schnell lernen lassen. ==== 1. Fingersatz • C-Form (open) ==== Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • A- (Bb-)Form ==== Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 3.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 3 darkgrey ) (place-fret 4 3 4 yellow3 ) (place-fret 4 5 5 darkgrey ) (place-fret 5 2 "j7" yellow3 ) (place-fret 5 3 1 black ) (place-fret 5 5 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • G-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 3 darkgrey ) (place-fret 2 6 4 yellow3 ) (place-fret 2 8 5 darkgrey ) (place-fret 3 4 "j7" yellow3 ) (place-fret 3 5 1 black ) (place-fret 3 7 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger auf der G-Saite des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • E- (F-)Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 3 darkgrey ) (place-fret 5 8 4 yellow3 ) (place-fret 5 10 5 darkgrey ) (place-fret 6 7 "j7" yellow3 ) (place-fret 6 8 1 black ) (place-fret 6 10 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Den Grundton C auf der E-Saite kannst du dir vom C-Barré der E-Form (wie ein F- Barré) im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • D-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 3 darkgrey ) (place-fret 3 10 4 yellow3 ) (place-fret 3 12 5 darkgrey ) (place-fret 4 9 "j7" yellow3 ) (place-fret 4 10 1 black ) (place-fret 4 12 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Wenn du später mal einen herausfordernden Lick zwischen der G- und H-Saite hast, wäre eine weitere gangbare Strategie den Lick in eine fingertechnisch günstigere Lage zu verlegen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • C-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 3 darkgrey ) (place-fret 1 13 4 yellow3 ) (place-fret 1 15 5 darkgrey ) (place-fret 2 12 "j7" yellow3 ) (place-fret 2 13 1 black ) (place-fret 2 15 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === b339arl9lwy8fs7j8jl7z73j413wu41 1090730 1090729 2026-09-12T17:30:56Z Mjchael 2222 Mjchael verschob die Seite [[Gitarre: CAGED-Stammtöne - Erste Finersatz]] nach [[Gitarre: CAGED-Stammtöne - Erster Fingersatz]]: falsch geschriebener Name 1090729 wikitext text/x-wiki == Erster Fingersatz == === Eintaktige Sequenzen === Du wirst feststellen, dass sich die Sequenzen recht schnell lernen lassen. ==== 1. Fingersatz • C-Form (open) ==== Die erste Lage mit leeren Saiten stellt noch keine Herausforderung dar. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { % \set TabStaff.minimumFret = #2 % \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • A- (Bb-)Form ==== Du musst noch nicht einmal den C-Barré im 3. Bund bemühen, um den Grundton zu finden. Die C-Dur-Tonleiter in den ersten drei Bünden reicht. Natürlich kannst du auch den Startton G suchen. Die Tabulatur sagt dir "D-Saite 5. Bund". Erinnere dich daran, dass dies der Stimmton der D-Saite ist (beim Stimmen nach Bünden). Auch hier ist der Fingersatz leicht. <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • A- (Bb-)Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 3.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 4 2 3 darkgrey ) (place-fret 4 3 4 yellow3 ) (place-fret 4 5 5 darkgrey ) (place-fret 5 2 "j7" yellow3 ) (place-fret 5 3 1 black ) (place-fret 5 5 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (A- (Bb)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • G-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • G-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 2 5 3 darkgrey ) (place-fret 2 6 4 yellow3 ) (place-fret 2 8 5 darkgrey ) (place-fret 3 4 "j7" yellow3 ) (place-fret 3 5 1 black ) (place-fret 3 7 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Bei der G-Form kommt es zwischen der G- und H-Saite zu einem Lagewechsel. Du musst dir jedesmal eine Strategie zurechtlegen, wann und wie du am besten den Lagewechsel durchführst. Wenn du Glück hast, findest du im Notenbild einen Hinweis, wie man günstig die Lage wechseln kann. Ich empfehle dir dort wo die 2 über den Noten steht, den Mittelfinger zu nehmen. *(1 = Z, 2 = M, 3 = R, 4 = K, 0 = leere Saite) Betrachte solche Hinweis nur als Vorschlag, denn es gibt keine verbindliche Regel, wie der Lagewechsel zu erfolgen hat. Übst du die gleiche Sequenzen ein paar Saiten höher oder tiefer, geht es leichter von der Hand. Beachte den Lagewechsel zwischen der G- und H-Saite. Den Grundton C kannst du dir auch vom Ringfinger auf der G-Saite des C-Barrés ableiten. Du musst dir hier eine Strategie zurechtlegen, wann du den Lagewechsel durchführen möchtest. Ich empfehle hier, den Lagewechsel so früh wie möglich zu machen, damit du den Zeigefinger frei hast, um gleich hintereinander zwei Töne in einem Bund zu spielen. Betrachte die Angaben zum Fingersatz nur als Vorschlag. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d-4 e-2 f-3 d e f e d c d e c-1 d-4 e-2 d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Hier eine alternative Lösung. Du kannst einen kleinen Barré über die Noten C und E legen, und den Lagewechsel später ausführen. Das V unter dem C zeigt hier den 5. Bund an, und nicht etwa Abschläge. Der Lagewechsel erfolgt hier im letzten Takt. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (G-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #4 \set TabStaff.restrainOpenStrings = ##t \key c \major g8-4 f e f g e f g f e d e f d e f e d-2 \textSpannerDown \override TextSpanner.bound-details.left.text = "V" c-1\startTextSpan d e-1 c-1 d e-1\stopTextSpan d-4 c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • E- (F-)Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • E- (F-)Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 5 7 3 darkgrey ) (place-fret 5 8 4 yellow3 ) (place-fret 5 10 5 darkgrey ) (place-fret 6 7 "j7" yellow3 ) (place-fret 6 8 1 black ) (place-fret 6 10 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Den Grundton C auf der E-Saite kannst du dir vom C-Barré der E-Form (wie ein F- Barré) im 8. Bund ableiten. Der Fingersatz ist wieder einfach. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (E-(F)-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==== 1. Fingersatz • D-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • D-Form <score raw="1"> \version "2.14.2" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 3 9 3 darkgrey ) (place-fret 3 10 4 yellow3 ) (place-fret 3 12 5 darkgrey ) (place-fret 4 9 "j7" yellow3 ) (place-fret 4 10 1 black ) (place-fret 4 12 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div>Die Tonhöhe ist die selbe, wie in der G-Form, wo wir uns komplizierte Strategien für den Fingersatz zurechtlegen mussten. In dieser Lage ist alles einfacher. Wenn du später mal einen herausfordernden Lick zwischen der G- und H-Saite hast, wäre eine weitere gangbare Strategie den Lick in eine fingertechnisch günstigere Lage zu verlegen. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (D-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> ==== 1. Fingersatz • C-Form ==== <div style="float:left; padding:5px;margin:5px; border:black solid 1px; "> ;1. Fingersatz • C-Form <score raw="1"> \version "2.24.4" \markup { \override #'(size . 4.0) { \override #'(fret-diagram-details . ( (orientation . landscape ) (finger-code . in-dot ) (dot-color . #'black) (dot-radius . 0.4) (dot-position . 0.5) (top-fret-thickness . 6) (fret-count . 3) (number-type . roman-upper) )) \fret-diagram-verbose #'( (place-fret 1 12 3 darkgrey ) (place-fret 1 13 4 yellow3 ) (place-fret 1 15 5 darkgrey ) (place-fret 2 12 "j7" yellow3 ) (place-fret 2 13 1 black ) (place-fret 2 15 2 darkgreen ) ) }} \paper{ indent=0\mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f bookTitleMarkup = ##f scoreTitleMarkup = ##f} </score> </div> Hier wurde die C-Durtonleiter in den 12. Bund verlegt. Der Grundton ist auf der H-Saite im 13. Bund. (Eine Oktave höher als bei der C-Dur Tonleiter in den ersten drei Bünden.) Wer keine E-Gitarre hat oder wer keine Akkustik mit Cutaway hat, der kann die C-Form auch in einem niedrigeren Bund üben. <score sound="1" raw="1"> \version "2.20.0" \header { title="1. Fingersatz (C-Form) in C-Dur" subtitle="Eintaktige Sequenzen" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c''' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key c \major g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d \once \override NoteHead #'color = #red c1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { g8 f e f g e f g f e d e f d e f e d c d e c d e d c b c d b c d c } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === "Das häßliche Entlein" oder "Alle meine Entchen"<ref>Anspielung auf ein Märchen der Gebrüder Grimm nebst einem bekannten deutschen Kinderlied.</ref> in A-Moll === Die vorherige Übung war in Dur, und hier verwenden wir ein und den selben Fingersatz in Moll. Wie du siehst und hörst, lässt sich ein Fingersatz oder ein Pattern nicht eindeutig einer einzigen Tonart zuordnen. Der Schlusston oder der Schlussakkord (hier der Ton A bzw. der Akkord Am) bestimmt die Tonart. Der Grundton A ist hier die Sexte (6) des zugrunde liegenden C-Major-Pattern. Es bleibt dir überlassen, ob du zur Orientierung lieber den Grundton A (grün) bestimmst, oder das C aus dem Karré (rot). Wenn in einer Tabulatur über einer Ziffer zwei Notenhälse stehen, so ist das ein Zeichen für eine halbe Note, die zwei Schläge dauert. Da dieses für viele Gitarristen sehr ungewöhnlich aussieht, verzichtet man oft auf Taktstriche in der Tabulatur. In dem Fall lässt sich die Tondauer allein an den Notenwerten ablesen. :[[Datei:C-Major-Scale_on_the_fretboard_second_fingering.svg]] <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-/Am-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { % \set TabStaff.minimumFret = #5 % \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Der Lagewechsel zwischen der G- und H-Saite ist hier leicht zu bewältigen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Gm-/Bb-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d-1 e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2-4 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Auch hier ist es wieder einfacher das A (grün) zu suchen. <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (Em-/G-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c { \set TabStaff.minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (E- / F-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #7 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> Statt lange nach dem Grundton der D-Form zu suchen, erinneren wir uns kurz, wo der Grundton C auf der H- (B-)Saite sein muß (13. Bund). <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (D-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c'' { \set TabStaff.minimumFret = #9 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> <br> <score sound="1" raw="1"> \version "2.20.0" \header { title="2. Fingersatz (C-Form) in Am" subtitle="Das häßliche Entlein" subsubtitle="oder: Alle meine Entchen in Moll" } %% Diskant- bzw. Melodiesaiten Diskant = \relative c' { \set TabStaff.minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t \key a \minor \once \override NoteHead #'color = #green a4-1 b \once \override NoteHead #'color = #red c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 \bar "|." } %% Layout- bzw. Bildausgabe \score { << \new Voice { \clef "treble_8" \time 4/4 \tempo 4 = 120 \set Score.tempoHideNote = ##t \Diskant \addlyrics { a4 b c d e2 e f4 f f f e1 f4 f f f e1 d4 d d d c2 c b4 b b b a1 } } \new TabStaff { \tabFullNotation \Diskant } >> \layout {} } %% Midiausgabe mit Wiederholungen, ohne Akkorde \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 \time 4/4 \set Staff.midiInstrument = #"acoustic guitar (nylon)" \clef "G_8" \Diskant >> } >> \midi {} } %% unterdrückt im raw="!"-Modus das DinA4-Format. \paper { indent=0\mm %% DinA4 = 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Die Moldau (Hauptmotiv) === b339arl9lwy8fs7j8jl7z73j413wu41 Gitarre: CAGED-Stammtöne - Erste Finersatz 0 123108 1090731 2026-09-12T17:31:10Z Mjchael 2222 Mjchael verschob die Seite [[Gitarre: CAGED-Stammtöne - Erste Finersatz]] nach [[Gitarre: CAGED-Stammtöne - Erster Fingersatz]]: falsch geschriebener Name 1090731 wikitext text/x-wiki #WEITERLEITUNG [[Gitarre: CAGED-Stammtöne - Erster Fingersatz]] lydm4koe538jj0thzpje5d21nl9zd1k Traktorenlexikon: Allis-Chalmers 5040 0 123109 1090734 2026-09-12T18:41:01Z Baupit 56622 Neue Seite (vgl. [[WB:AZ]]) 1090734 wikitext text/x-wiki {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} {{:Traktorenlexikon: Modell-Infobox | HERSTELLER = ALLIS-CHALMERS | MODELLREIHE = 5000 er-Baureihe | MODELL = 5040 | BILD = | BILDBESCHREIBUNG = | BAUWEISE = Blockbauweise | PRODUKTIONSBEGINN = 1975 | PRODUKTIONSENDE = 1980 | STÜCKZAHL = | EIGENGEWICHT = 1.746 | LÄNGE = 2.946 | BREITE = 1.549 | HÖHE = 1.488 | RADSTAND = 1.885/1.918 | BODENFREIHEIT = 470 | SPURWEITE = | SPURWEITE VORNE = 1.295-1.981 | SPURWEITE HINTEN = 1.321-1.905 | WENDERADIUS MIT LENKBREMSE = 2.920 | WENDERADIUS OHNE LENKBREMSE = 3.200 | BEREIFUNG VORNE = 6.00-16 ASF | BEREIFUNG HINTEN = 13.6-28 AS | LEISTUNG KW = 31,6 | LEISTUNG PS = 43 | NENNDREHZAHL = 2.400/2.600 | ZYLINDER = 3 | HUBRAUM = 2.339 | DREHMOMENTANSTIEG = 14,6 | KRAFTSTOFF = Diesel | KÜHLSYSTEM = Wasserkühlung | ANTRIEBSTYP = Heckantrieb | GETRIEBE = 6 V/2 R, 9 V/3 R, 8 V/2 R und 12 V/3 R | HÖCHSTGESCHWINDIGKEIT = 25 | KATEGORIESORTIERUNG = }} Bisher importierte ALLIS-CHALMERS die kleinen Traktoren von RENAULT. Aus Kostengründen beschloss man im Herbst 1975 mit dem rumänischen Hersteller UNIVERSAL-TRAKTOR zusammenzuarbeiten. Der ALLIS-CHALMERS 5040 basierte dabei auf dem UNIVERSAL 445, der wiederum auf FIAT Technik basierte. Im wesentlichen wurde die Motorhaube, die Lackierung und die Farbe der Felgen an das ALLIS-CHALMERS Design angepasst. Die rotbraune Rahmenfarbe der UNIVERSAL-Traktoren blieb dagegen erhalten. Das wassergekühlte Dreizylinderaggregat war Anfangs mit einem 6/2-Gänge Getriebe verblockt, ab dem Jahr 1978 wurden daraus 8/2-Gänge. Beide Varianten konnten mittels optionalen Kriechgängen auf 9/3-Gänge bzw. 12/3-Gänge gesteigert werden. Zur Serienausstattung gehörten unter anderem Servolenkung, Differentialsperre und die Vorwärmung der Glühkerzen. ==Motor== * UTB, Typ: D-115, stehender-wassergekühlter Viertakt-Dreizylinder-Reihen-Saugmotor mit Direkteinspritzverfahren, C.A.V.-Fliehkraftregler, nassen Zylinderlaufbuchsen, Druckumlaufschmierung mittels Zahnradpumpe, Kraftstoffkolbenpumpe, C.A.V.-Reihen-Einspritzpumpe, C.A.V.-Mehrlochdüse, Zentrifugalölfilter, C.A.V.-Düsenhalter, vierfach-gelagerte Kurbelwelle, Ölbadluftfilter incl. Zyklon-Vorabscheider, Kühlwasser-Kreiselpumpe und Lamellenkühler incl. Lüfter. * Bohrung = 95 mm, Hub = 110 mm * Verdichtungsverhältnis = 17:1 * Max. Drehmoment = 140 Nm bei 1.200 U/min. * Öldruck = 0,69 bis 3,92 bar * Mittlere Kolbengeschwindigkeit = 8,8 m/sec. * Geregelter Drehzahlbereich = 600 bis 2.550 U/min. (Später = 600 bis 2.850 U/min.) * Einspritzdruck = 126 + 5 bar ==Kupplung== * Pedal-betätigte, zweistufige-trockene Doppelkupplung, Typ: 10" Erste Stufe Fahrkupplung mit 254,0 mm Scheibendurchmesser * Zweite Stufe Zapfwellenkupplung mit 254,0 mm Scheibendurchmesser "Ab 1978:" * Pedal-betätigte, zweistufige-trockene Doppelkupplung, Typ: 11" Erste Stufe Fahrkupplung mit 279,4 mm Scheibendurchmesser * Zweite Stufe Zapfwellenkupplung mit 279,4 mm Scheibendurchmesser ==Getriebe== * Im Ölbad laufendes teilsynchronisiertes Gruppengetriebe * Wechselgetriebe mit drei Vorwärts- und ein Rückwärtsgang * Zusätzlich unabhängiges zweistufiges Wandler-Getriebe, in einen langsamen und einen schnellen Bereich unterteilt * Die Gänge: 2, 3, 5 und 6 sind synchronisiert 6 Vorwärts- und 2 Rückwärtsgänge "Optional:" * Vorschaltgetriebe als Kriechganggetriebe ausgebildet * Die Gänge: 2, 3, 5, 6, 8 und 9 sind synchronisiert 9 Vorwärts- und 3 Rückwärtsgänge "Ab 1978:" * Im Ölbad laufendes teilsynchronisiertes Gruppengetriebe * Wechselgetriebe mit vier Vorwärts- und ein Rückwärtsgang * Zusätzlich unabhängiges zweistufiges Wandler-Getriebe, in einen langsamen und einen schnellen Bereich unterteilt * Die Gänge: 3, 4, 7 und 8 sind synchronisiert 8 Vorwärts- und 2 Rückwärtsgänge "Optional:" * Vorschaltgetriebe als Kriechganggetriebe ausgebildet * Die Gänge: 2, 3, 5, 6, 8 und 9 sind synchronisiert 12 Vorwärts- und 3 Rückwärtsgänge ==Geschwindigkeiten vor- und rückwärts== "Geschwindigkeiten des 6/2-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.400 |- ! Langsame Gruppe !! |- | 1.Gang || 2,57 km/h |- | 2.Gang || 4,67 km/h |- | 3.Gang || 7,40 km/h |- | 1.Rückwärtsgang || 3,86 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 9,50 km/h |- | 2.Gang || 17,06 km/h |- | 3.Gang || 26,88 km/h |- | 2.Rückwärtsgang || 13,84 km/h |- |} "Optional:" "Geschwindigkeiten des 9/3-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.400 |- ! Kriechgang - Gruppe !! |- | 1.Gang || 0,85 km/h |- | 2.Gang || 1,61 km/h |- | 3.Gang || 2,41 km/h |- | 1.Rückwärtsgang || 1,29 km/h |- ! Langsame Gruppe !! |- | 1.Gang || 2,57 km/h |- | 2.Gang || 4,67 km/h |- | 3.Gang || 7,40 km/h |- | 2.Rückwärtsgang || 3,86 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 9,50 km/h |- | 2.Gang || 17,06 km/h |- | 3.Gang || 26,88 km/h |- | 3.Rückwärtsgang || 13,84 km/h |- |} "Ab 1978:" "Geschwindigkeiten des 8/2-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.600 |- ! Kriechgang - Gruppe !! |- | 1.Gang || 0,80 km/h |- | 2.Gang || 1,13 km/h |- | 3.Gang || 2,61 km/h |- | 4.Gang || 2,25 km/h |- | 1.Rückwärtsgang || 1,13 km/h |- ! Langsame Gruppe !! |- | 1.Gang || 2,41 km/h |- | 2.Gang || 3,54 km/h |- | 3.Gang || 5,15 km/h |- | 4.Gang || 6,76 km/h |- | 2.Rückwärtsgang || 3,38 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 8,21 km/h |- | 2.Gang || 12,87 km/h |- | 3.Gang || 18,83 km/h |- | 4.Gang || 24,30 km/h |- | 3.Rückwärtsgang || 12,23 km/h |- |} "Geschwindigkeiten des 12/3-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.600 |- ! Langsame Gruppe !! |- | 1.Gang || 2,41 km/h |- | 2.Gang || 3,54 km/h |- | 3.Gang || 5,15 km/h |- | 4.Gang || 6,76 km/h |- | 1.Rückwärtsgang || 3,38 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 8,21 km/h |- | 2.Gang || 12,87 km/h |- | 3.Gang || 18,83 km/h |- | 4.Gang || 24,30 km/h |- | 2.Rückwärtsgang || 12,23 km/h |- |} ==Zapfwelle== * Pedal-betätigte, unabhängige Zapfwelle, auf Wunsch als gangabhängige Zapfwelle schaltbar * Stummel = 1 3/8" -6 Keile * Einfach schaltbar, 540 U/min. * 540 U/min. bei 1.966 U/min.- Motordrehzahl Übertragbare Leistung = 37,2 PS * Oder 659 U/min. mit 2.400 U/min.- Nenndrehzahl Übertragbare Leistung = 40,6 PS "Optional:" * Seitliche Riemenscheibe mit 250 mm Durchmesser und 150 mm Breite Drehzahl = 1.248 U/min. mit Nenndrehzahl * Riemengeschwindigkeit = 16,34 m/s ==Bremsen== * Pedal-betätigte, trockne Band-Trommelbremse auf die Seitenwellen wirkend, als Einzelradbremse ausgebildet * Handhebel-betätigte unabhängige Feststellbremse, auf eine Bremsscheibe wirkend ==Achsen== * Pendelnd-gelagerte, ausziehbare Stahlvorderachse Verstellbare Spurweite = 1.295 bis 1.981 mm * Starre Hinterachse mit Kegelradgetriebe und Stirnraduntersetzung * Pedal-betätigte Differentialsperre Verstellbare Spurweite mittels Radumschlag und verstellbaren Felgen = 1.321 bis 1.905 mm * Vordere Achslast = 658 kg Zul. vordere Achslast = 1.300 kg * Hintere Achslast = 1.184 kg Zul. hintere Achslast = 3.220 kg ==Lenkung== * Mechanische Lenkung incl. Power-Assisted ==Hydrauliksystem und Kraftheber== * Hydraulischer Kraftheber mit Dreipunktaufhängung * Ein doppelt-wirkender Hubzylinder mit 90 mm Zylinderbohrung und 90 mm Zylinderhub und Zusatzzylinder * Dreipunktaufhängung der Kategorie I/II "Funktionen:" * Heben, Senken, Schwimmstellung, Zugkraft- und Positionsregelung OPEN-CENTER Hydrauliksystem mit Zahnradpumpe * Förderleistung = 21,8 l/min. bei 147 bar Max. durchgehende Hubkraft 550 mm hinter den Koppelpunkten = 1.200 kg * Max. Hubkraft an den Koppelpunkten = 1.450 kg ==Steuergeräte== * Ein doppelt-wirkendes Steuergerät ==Elektrische Ausrüstung== "12 Volt- Einrichtung" * Lichtmaschine, 12 V-30 A ==Maße und Abmessungen== * Länge über alles = 2.946 mm (Mit Kriechganggetriebe = 2.979 mm) * Breite mit kleinster Spurweite = 1.549 mm * Höhe über Motorhaube = 1.346 mm * Höhe über Lenkrad = 1.488 mm * Höhe über Auspuff = 1.943 mm * Radstand = 1.885 mm (Mit Kriechganggetriebe = 1.918 mm) * Bodenfreiheit = 470 mm * Betriebsgewicht = 1.810 kg (Mit Kriechganggetriebe = 1.842 mm) ==Bereifung== "Standardbereifung" * Vorne = 6.00-16 AS Front * Hinten = 13.6-28 AS "Optional:" * Hinten = 11-28, 12.4-28 und 16.9-28 AS ==Füllmengen== * Tankinhalt = 54,0 l * Motoröl incl. Filter = 7,9 l * Kühlsystem = 13,2 l * Triebwerk und Differential = 18,0 l * Endantrieb je 1,7 l ==Verbrauch== * Kraftstoffverbrauch = 10,8 l/h bei 40,6 DIN-PS und 2.400 U/min. ==Kabine== * Fahrerstand mit Schutzrahmen, parallelgeführter-gepolsterter Sitz, Lade- und Öldruckanzeige, Kraftstoffanzeige, Traktormeter incl. Betriebsstundenzähler und Temperaturanzeige Optional mit Wetterverdeck ==Sonderausrüstung== * Radgewichte * Verdeck * Kriechganggetriebe * Riemenscheibe * Frontlader ==Literatur & Weblinks== * Allis-Chalmers Agricultural Equipment Brochure * digitalcommons.unl.edu (Test-Nr. 1230/76) * TractorData.com * koneviesti.fi <references /> {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} 0u8wdid7v7gsbayghrdcqv14e9kb7vo 1090737 1090734 2026-09-12T20:53:32Z Baupit 56622 /* Geschwindigkeiten vor- und rückwärts */ 1090737 wikitext text/x-wiki {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} {{:Traktorenlexikon: Modell-Infobox | HERSTELLER = ALLIS-CHALMERS | MODELLREIHE = 5000 er-Baureihe | MODELL = 5040 | BILD = | BILDBESCHREIBUNG = | BAUWEISE = Blockbauweise | PRODUKTIONSBEGINN = 1975 | PRODUKTIONSENDE = 1980 | STÜCKZAHL = | EIGENGEWICHT = 1.746 | LÄNGE = 2.946 | BREITE = 1.549 | HÖHE = 1.488 | RADSTAND = 1.885/1.918 | BODENFREIHEIT = 470 | SPURWEITE = | SPURWEITE VORNE = 1.295-1.981 | SPURWEITE HINTEN = 1.321-1.905 | WENDERADIUS MIT LENKBREMSE = 2.920 | WENDERADIUS OHNE LENKBREMSE = 3.200 | BEREIFUNG VORNE = 6.00-16 ASF | BEREIFUNG HINTEN = 13.6-28 AS | LEISTUNG KW = 31,6 | LEISTUNG PS = 43 | NENNDREHZAHL = 2.400/2.600 | ZYLINDER = 3 | HUBRAUM = 2.339 | DREHMOMENTANSTIEG = 14,6 | KRAFTSTOFF = Diesel | KÜHLSYSTEM = Wasserkühlung | ANTRIEBSTYP = Heckantrieb | GETRIEBE = 6 V/2 R, 9 V/3 R, 8 V/2 R und 12 V/3 R | HÖCHSTGESCHWINDIGKEIT = 25 | KATEGORIESORTIERUNG = }} Bisher importierte ALLIS-CHALMERS die kleinen Traktoren von RENAULT. Aus Kostengründen beschloss man im Herbst 1975 mit dem rumänischen Hersteller UNIVERSAL-TRAKTOR zusammenzuarbeiten. Der ALLIS-CHALMERS 5040 basierte dabei auf dem UNIVERSAL 445, der wiederum auf FIAT Technik basierte. Im wesentlichen wurde die Motorhaube, die Lackierung und die Farbe der Felgen an das ALLIS-CHALMERS Design angepasst. Die rotbraune Rahmenfarbe der UNIVERSAL-Traktoren blieb dagegen erhalten. Das wassergekühlte Dreizylinderaggregat war Anfangs mit einem 6/2-Gänge Getriebe verblockt, ab dem Jahr 1978 wurden daraus 8/2-Gänge. Beide Varianten konnten mittels optionalen Kriechgängen auf 9/3-Gänge bzw. 12/3-Gänge gesteigert werden. Zur Serienausstattung gehörten unter anderem Servolenkung, Differentialsperre und die Vorwärmung der Glühkerzen. ==Motor== * UTB, Typ: D-115, stehender-wassergekühlter Viertakt-Dreizylinder-Reihen-Saugmotor mit Direkteinspritzverfahren, C.A.V.-Fliehkraftregler, nassen Zylinderlaufbuchsen, Druckumlaufschmierung mittels Zahnradpumpe, Kraftstoffkolbenpumpe, C.A.V.-Reihen-Einspritzpumpe, C.A.V.-Mehrlochdüse, Zentrifugalölfilter, C.A.V.-Düsenhalter, vierfach-gelagerte Kurbelwelle, Ölbadluftfilter incl. Zyklon-Vorabscheider, Kühlwasser-Kreiselpumpe und Lamellenkühler incl. Lüfter. * Bohrung = 95 mm, Hub = 110 mm * Verdichtungsverhältnis = 17:1 * Max. Drehmoment = 140 Nm bei 1.200 U/min. * Öldruck = 0,69 bis 3,92 bar * Mittlere Kolbengeschwindigkeit = 8,8 m/sec. * Geregelter Drehzahlbereich = 600 bis 2.550 U/min. (Später = 600 bis 2.850 U/min.) * Einspritzdruck = 126 + 5 bar ==Kupplung== * Pedal-betätigte, zweistufige-trockene Doppelkupplung, Typ: 10" Erste Stufe Fahrkupplung mit 254,0 mm Scheibendurchmesser * Zweite Stufe Zapfwellenkupplung mit 254,0 mm Scheibendurchmesser "Ab 1978:" * Pedal-betätigte, zweistufige-trockene Doppelkupplung, Typ: 11" Erste Stufe Fahrkupplung mit 279,4 mm Scheibendurchmesser * Zweite Stufe Zapfwellenkupplung mit 279,4 mm Scheibendurchmesser ==Getriebe== * Im Ölbad laufendes teilsynchronisiertes Gruppengetriebe * Wechselgetriebe mit drei Vorwärts- und ein Rückwärtsgang * Zusätzlich unabhängiges zweistufiges Wandler-Getriebe, in einen langsamen und einen schnellen Bereich unterteilt * Die Gänge: 2, 3, 5 und 6 sind synchronisiert 6 Vorwärts- und 2 Rückwärtsgänge "Optional:" * Vorschaltgetriebe als Kriechganggetriebe ausgebildet * Die Gänge: 2, 3, 5, 6, 8 und 9 sind synchronisiert 9 Vorwärts- und 3 Rückwärtsgänge "Ab 1978:" * Im Ölbad laufendes teilsynchronisiertes Gruppengetriebe * Wechselgetriebe mit vier Vorwärts- und ein Rückwärtsgang * Zusätzlich unabhängiges zweistufiges Wandler-Getriebe, in einen langsamen und einen schnellen Bereich unterteilt * Die Gänge: 3, 4, 7 und 8 sind synchronisiert 8 Vorwärts- und 2 Rückwärtsgänge "Optional:" * Vorschaltgetriebe als Kriechganggetriebe ausgebildet * Die Gänge: 2, 3, 5, 6, 8 und 9 sind synchronisiert 12 Vorwärts- und 3 Rückwärtsgänge ==Geschwindigkeiten vor- und rückwärts== "Geschwindigkeiten des 6/2-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.400 |- ! Langsame Gruppe !! |- | 1.Gang || 2,57 km/h |- | 2.Gang || 4,67 km/h |- | 3.Gang || 7,40 km/h |- | 1.Rückwärtsgang || 3,86 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 9,50 km/h |- | 2.Gang || 17,06 km/h |- | 3.Gang || 26,88 km/h |- | 2.Rückwärtsgang || 13,84 km/h |- |} "Optional:" "Geschwindigkeiten des 9/3-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.400 |- ! Kriechgang - Gruppe !! |- | 1.Gang || 0,85 km/h |- | 2.Gang || 1,61 km/h |- | 3.Gang || 2,41 km/h |- | 1.Rückwärtsgang || 1,29 km/h |- ! Langsame Gruppe !! |- | 1.Gang || 2,57 km/h |- | 2.Gang || 4,67 km/h |- | 3.Gang || 7,40 km/h |- | 2.Rückwärtsgang || 3,86 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 9,50 km/h |- | 2.Gang || 17,06 km/h |- | 3.Gang || 26,88 km/h |- | 3.Rückwärtsgang || 13,84 km/h |- |} "Ab 1978:" "Geschwindigkeiten des 8/2-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.600 |- ! Langsame Gruppe !! |- | 1.Gang || 2,41 km/h |- | 2.Gang || 3,54 km/h |- | 3.Gang || 5,15 km/h |- | 4.Gang || 6,76 km/h |- | 1.Rückwärtsgang || 3,38 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 8,21 km/h |- | 2.Gang || 12,87 km/h |- | 3.Gang || 18,83 km/h |- | 4.Gang || 24,30 km/h |- | 2.Rückwärtsgang || 12,23 km/h |- |} "Geschwindigkeiten des 12/3-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.600 |- ! Kriechgang - Gruppe !! |- | 1.Gang || 0,80 km/h |- | 2.Gang || 1,13 km/h |- | 3.Gang || 2,61 km/h |- | 4.Gang || 2,25 km/h |- | 1.Rückwärtsgang || 1,13 km/h |- ! Langsame Gruppe !! |- | 1.Gang || 2,41 km/h |- | 2.Gang || 3,54 km/h |- | 3.Gang || 5,15 km/h |- | 4.Gang || 6,76 km/h |- | 2.Rückwärtsgang || 3,38 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 8,21 km/h |- | 2.Gang || 12,87 km/h |- | 3.Gang || 18,83 km/h |- | 4.Gang || 24,30 km/h |- | 3.Rückwärtsgang || 12,23 km/h |- |} ==Zapfwelle== * Pedal-betätigte, unabhängige Zapfwelle, auf Wunsch als gangabhängige Zapfwelle schaltbar * Stummel = 1 3/8" -6 Keile * Einfach schaltbar, 540 U/min. * 540 U/min. bei 1.966 U/min.- Motordrehzahl Übertragbare Leistung = 37,2 PS * Oder 659 U/min. mit 2.400 U/min.- Nenndrehzahl Übertragbare Leistung = 40,6 PS "Optional:" * Seitliche Riemenscheibe mit 250 mm Durchmesser und 150 mm Breite Drehzahl = 1.248 U/min. mit Nenndrehzahl * Riemengeschwindigkeit = 16,34 m/s ==Bremsen== * Pedal-betätigte, trockne Band-Trommelbremse auf die Seitenwellen wirkend, als Einzelradbremse ausgebildet * Handhebel-betätigte unabhängige Feststellbremse, auf eine Bremsscheibe wirkend ==Achsen== * Pendelnd-gelagerte, ausziehbare Stahlvorderachse Verstellbare Spurweite = 1.295 bis 1.981 mm * Starre Hinterachse mit Kegelradgetriebe und Stirnraduntersetzung * Pedal-betätigte Differentialsperre Verstellbare Spurweite mittels Radumschlag und verstellbaren Felgen = 1.321 bis 1.905 mm * Vordere Achslast = 658 kg Zul. vordere Achslast = 1.300 kg * Hintere Achslast = 1.184 kg Zul. hintere Achslast = 3.220 kg ==Lenkung== * Mechanische Lenkung incl. Power-Assisted ==Hydrauliksystem und Kraftheber== * Hydraulischer Kraftheber mit Dreipunktaufhängung * Ein doppelt-wirkender Hubzylinder mit 90 mm Zylinderbohrung und 90 mm Zylinderhub und Zusatzzylinder * Dreipunktaufhängung der Kategorie I/II "Funktionen:" * Heben, Senken, Schwimmstellung, Zugkraft- und Positionsregelung OPEN-CENTER Hydrauliksystem mit Zahnradpumpe * Förderleistung = 21,8 l/min. bei 147 bar Max. durchgehende Hubkraft 550 mm hinter den Koppelpunkten = 1.200 kg * Max. Hubkraft an den Koppelpunkten = 1.450 kg ==Steuergeräte== * Ein doppelt-wirkendes Steuergerät ==Elektrische Ausrüstung== "12 Volt- Einrichtung" * Lichtmaschine, 12 V-30 A ==Maße und Abmessungen== * Länge über alles = 2.946 mm (Mit Kriechganggetriebe = 2.979 mm) * Breite mit kleinster Spurweite = 1.549 mm * Höhe über Motorhaube = 1.346 mm * Höhe über Lenkrad = 1.488 mm * Höhe über Auspuff = 1.943 mm * Radstand = 1.885 mm (Mit Kriechganggetriebe = 1.918 mm) * Bodenfreiheit = 470 mm * Betriebsgewicht = 1.810 kg (Mit Kriechganggetriebe = 1.842 mm) ==Bereifung== "Standardbereifung" * Vorne = 6.00-16 AS Front * Hinten = 13.6-28 AS "Optional:" * Hinten = 11-28, 12.4-28 und 16.9-28 AS ==Füllmengen== * Tankinhalt = 54,0 l * Motoröl incl. Filter = 7,9 l * Kühlsystem = 13,2 l * Triebwerk und Differential = 18,0 l * Endantrieb je 1,7 l ==Verbrauch== * Kraftstoffverbrauch = 10,8 l/h bei 40,6 DIN-PS und 2.400 U/min. ==Kabine== * Fahrerstand mit Schutzrahmen, parallelgeführter-gepolsterter Sitz, Lade- und Öldruckanzeige, Kraftstoffanzeige, Traktormeter incl. Betriebsstundenzähler und Temperaturanzeige Optional mit Wetterverdeck ==Sonderausrüstung== * Radgewichte * Verdeck * Kriechganggetriebe * Riemenscheibe * Frontlader ==Literatur & Weblinks== * Allis-Chalmers Agricultural Equipment Brochure * digitalcommons.unl.edu (Test-Nr. 1230/76) * TractorData.com * koneviesti.fi <references /> {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} e050hjb4kvwwjjwhkzj08s9lffywnu0 Traktorenlexikon: Allis-Chalmers 5045 0 123110 1090735 2026-09-12T19:26:51Z Baupit 56622 Neue Seite (vgl. [[WB:AZ]]) 1090735 wikitext text/x-wiki {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} {{:Traktorenlexikon: Modell-Infobox | HERSTELLER = ALLIS-CHALMERS | MODELLREIHE = 5000 er-Baureihe | MODELL = 5045 | BILD = | BILDBESCHREIBUNG = | BAUWEISE = Blockbauweise | PRODUKTIONSBEGINN = 1981 | PRODUKTIONSENDE = 1983 | STÜCKZAHL = | EIGENGEWICHT = 1.746 | LÄNGE = 2.946 | BREITE = 1.549 | HÖHE = 1.488 | RADSTAND = 1.918 | BODENFREIHEIT = 470 | SPURWEITE = | SPURWEITE VORNE = 1.351-1.961 | SPURWEITE HINTEN = 1.321-1.905 | WENDERADIUS MIT LENKBREMSE = 3.058 | WENDERADIUS OHNE LENKBREMSE = 3.429 | BEREIFUNG VORNE = 6.00-16 ASF | BEREIFUNG HINTEN = 13.6-28 AS | LEISTUNG KW = 35,3 | LEISTUNG PS = 48 | NENNDREHZAHL = 2.600 | ZYLINDER = 3 | HUBRAUM = 2.592 | DREHMOMENTANSTIEG = | KRAFTSTOFF = Diesel | KÜHLSYSTEM = Wasserkühlung | ANTRIEBSTYP = Heckantrieb | GETRIEBE = 8 V/2 R | HÖCHSTGESCHWINDIGKEIT = 25 | KATEGORIESORTIERUNG = }} Im Jahr 1981 löste ALLIS-CHALMERS das Modell 5040 durch das in Italien gefertigte Modell 5045 ab. Der Allis-CHALMERS 5045 basierte weitgehend auf dem FIAT-Modell 480. ==Motor== * FIAT-IVECO, Typ: 8035.02 stehender, wassergekühlter Viertakt-Dreizylinder-Diesel-Saugmotor mit Direkteinspritzung, obenliegende Ventile, BOSCH-Kraftstoffpumpe, Druckumlaufschmierung mittels Zahnradpumpe, C.A.V.-Reihen-Einspritzpumpe mit integriertem-mechanischem Drehzahlregler, auswechselbare Zylinderlaufbuchsen, FRAM-Ölfilter, C.A.V.-Kraftstofffilter, Vierring-Leichtmetallkolben, BOSCH-Düsenhalter, vierfach-gelagerter Kurbelwelle, BOSCH-Mehrlochdüsen, FIAT-Ölbadluftfilter, zahnradgetriebene Nockenwelle, thermostatgesteuerte Wasserumlaufkühlung mit Lamellenkühler und Lüfter. * Bohrung = 100 mm, Hub = 110 mm * Verdichtungsverhältnis = 17:1 * Max. Drehmoment = 152 Nm bei 1.600 U/min. * Mittlere Kolbengeschwindigkeit = 9,53 m/s * Öldruck = 1,47 bis 3,94 bar * Geregelter Drehzahlbereich = 650 bis 2.850 U/min. * Einspritzdruck = 225 + 5 bar ==Kupplung== * Pedal-betätigte, zweistufige-trockene Doppelkupplung, Typ: 11" Erste Stufe Fahrkupplung mit 279,4 mm Scheibendurchmesser * Zweite Stufe Zapfwellenkupplung mit 279,4 mm Scheibendurchmesser ==Getriebe== * Im Ölbad laufendes teilsynchronisiertes Gruppengetriebe * Wechselgetriebe mit vier Vorwärts- und ein Rückwärtsgang * Zusätzlich unabhängiges zweistufiges Wandler-Getriebe, in einen langsamen und einen schnellen Bereich unterteilt * Die Gänge: 3, 4, 7 und 8 sind synchronisiert 8 Vorwärts- und 2 Rückwärtsgänge "Optional:" * Vorschaltgetriebe als Kriechganggetriebe ausgebildet * Die Gänge: 2, 3, 5, 6, 8 und 9 sind synchronisiert 12 Vorwärts- und 3 Rückwärtsgänge ==Geschwindigkeiten vor- und rückwärts== "Geschwindigkeiten des 8/2-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.600 |- ! Kriechgang - Gruppe !! |- | 1.Gang || 0,80 km/h |- | 2.Gang || 1,13 km/h |- | 3.Gang || 2,61 km/h |- | 4.Gang || 2,25 km/h |- | 1.Rückwärtsgang || 1,13 km/h |- ! Langsame Gruppe !! |- | 1.Gang || 2,41 km/h |- | 2.Gang || 3,54 km/h |- | 3.Gang || 5,15 km/h |- | 4.Gang || 6,76 km/h |- | 2.Rückwärtsgang || 3,38 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 8,21 km/h |- | 2.Gang || 12,87 km/h |- | 3.Gang || 18,83 km/h |- | 4.Gang || 24,30 km/h |- | 3.Rückwärtsgang || 12,23 km/h |- |} "Geschwindigkeiten des 12/3-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.600 |- ! Langsame Gruppe !! |- | 1.Gang || 2,41 km/h |- | 2.Gang || 3,54 km/h |- | 3.Gang || 5,15 km/h |- | 4.Gang || 6,76 km/h |- | 1.Rückwärtsgang || 3,38 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 8,21 km/h |- | 2.Gang || 12,87 km/h |- | 3.Gang || 18,83 km/h |- | 4.Gang || 24,30 km/h |- | 2.Rückwärtsgang || 12,23 km/h |- |} ==Zapfwelle== * Pedal-betätigte, unabhängige Zapfwelle, auf Wunsch als gangabhängige Zapfwelle schaltbar * Stummel = 1 3/8" -6 Keile * Einfach schaltbar, 540 U/min. * 540 U/min. bei 1.966 U/min.- Motordrehzahl Übertragbare Leistung = 41,2 PS * Oder 659 U/min. mit 2.400 U/min.- Nenndrehzahl Übertragbare Leistung = 44,6 PS ==Bremsen== * Pedal-betätigte, trockne Band-Trommelbremse auf die Seitenwellen wirkend, als Einzelradbremse ausgebildet * Handhebel-betätigte unabhängige Feststellbremse, auf eine Bremsscheibe wirkend ==Achsen== * Pendelnd-gelagerte, ausziehbare Stahlvorderachse Verstellbare Spurweite = 1.351 bis 1.961 mm * Starre Hinterachse mit Kegelradgetriebe und Stirnraduntersetzung * Pedal-betätigte Differentialsperre Verstellbare Spurweite mittels Radumschlag und verstellbaren Felgen = 1.321 bis 1.905 mm ==Lenkung== * Mechanische Lenkung incl. Power-Assisted ==Hydrauliksystem und Kraftheber== * Hydraulischer Kraftheber mit Dreipunktaufhängung * Ein doppelt-wirkender Hubzylinder mit 90 mm Zylinderbohrung und 90 mm Zylinderhub und Zusatzzylinder * Dreipunktaufhängung der Kategorie I/II "Funktionen:" * Heben, Senken, Schwimmstellung, Zugkraft- und Positionsregelung OPEN-CENTER Hydrauliksystem mit Zahnradpumpe * Förderleistung = 23,6 l/min. bei 147 bar Max. durchgehende Hubkraft 550 mm hinter den Koppelpunkten = 1.550 kg ==Steuergeräte== * Ein doppelt-wirkendes Steuergerät ==Elektrische Ausrüstung== "12 Volt- Einrichtung" * Lichtmaschine, 12 V-30 A ==Maße und Abmessungen== * Länge über alles = 2.979 mm * Breite mit kleinster Spurweite = 1.549 mm * Höhe über Motorhaube = 1.346 mm * Höhe über Lenkrad = 1.488 mm * Höhe über Auspuff = 1.943 mm * Radstand = 1.918 mm * Bodenfreiheit = 470 mm * Betriebsgewicht = 1.842 mm ==Bereifung== "Standardbereifung" * Vorne = 6.00-16 AS Front * Hinten = 13.6-28 AS "Optional:" * Hinten = 11-28, 12.4-28 und 16.9-28 AS ==Füllmengen== * Tankinhalt = 54,0 l * Motoröl incl. Filter = 7,9 l * Kühlsystem = 13,2 l * Triebwerk und Differential = 18,0 l * Endantrieb je 1,7 l ==Verbrauch== * Kraftstoffverbrauch = 10,3 l/h bei 43,2 DIN-PS und Nenndrehzahl ==Kabine== * Fahrerstand mit Schutzrahmen, parallelgeführter-gepolsterter Sitz, Lade- und Öldruckanzeige, Kraftstoffanzeige, Traktormeter incl. Betriebsstundenzähler und Temperaturanzeige Optional mit Wetterverdeck ==Sonderausrüstung== * Radgewichte * Verdeck * Kriechganggetriebe * Riemenscheibe * Frontlader ==Literatur & Weblinks== * Allis-Chalmers Agricultural Equipment Brochure * TractorData.com * koneviesti.fi <references /> {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} n0qu9mnszjbnalgnpxgi41y3cffcx6z 1090738 1090735 2026-09-12T20:55:28Z Baupit 56622 /* Geschwindigkeiten vor- und rückwärts */ 1090738 wikitext text/x-wiki {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} {{:Traktorenlexikon: Modell-Infobox | HERSTELLER = ALLIS-CHALMERS | MODELLREIHE = 5000 er-Baureihe | MODELL = 5045 | BILD = | BILDBESCHREIBUNG = | BAUWEISE = Blockbauweise | PRODUKTIONSBEGINN = 1981 | PRODUKTIONSENDE = 1983 | STÜCKZAHL = | EIGENGEWICHT = 1.746 | LÄNGE = 2.946 | BREITE = 1.549 | HÖHE = 1.488 | RADSTAND = 1.918 | BODENFREIHEIT = 470 | SPURWEITE = | SPURWEITE VORNE = 1.351-1.961 | SPURWEITE HINTEN = 1.321-1.905 | WENDERADIUS MIT LENKBREMSE = 3.058 | WENDERADIUS OHNE LENKBREMSE = 3.429 | BEREIFUNG VORNE = 6.00-16 ASF | BEREIFUNG HINTEN = 13.6-28 AS | LEISTUNG KW = 35,3 | LEISTUNG PS = 48 | NENNDREHZAHL = 2.600 | ZYLINDER = 3 | HUBRAUM = 2.592 | DREHMOMENTANSTIEG = | KRAFTSTOFF = Diesel | KÜHLSYSTEM = Wasserkühlung | ANTRIEBSTYP = Heckantrieb | GETRIEBE = 8 V/2 R | HÖCHSTGESCHWINDIGKEIT = 25 | KATEGORIESORTIERUNG = }} Im Jahr 1981 löste ALLIS-CHALMERS das Modell 5040 durch das in Italien gefertigte Modell 5045 ab. Der Allis-CHALMERS 5045 basierte weitgehend auf dem FIAT-Modell 480. ==Motor== * FIAT-IVECO, Typ: 8035.02 stehender, wassergekühlter Viertakt-Dreizylinder-Diesel-Saugmotor mit Direkteinspritzung, obenliegende Ventile, BOSCH-Kraftstoffpumpe, Druckumlaufschmierung mittels Zahnradpumpe, C.A.V.-Reihen-Einspritzpumpe mit integriertem-mechanischem Drehzahlregler, auswechselbare Zylinderlaufbuchsen, FRAM-Ölfilter, C.A.V.-Kraftstofffilter, Vierring-Leichtmetallkolben, BOSCH-Düsenhalter, vierfach-gelagerter Kurbelwelle, BOSCH-Mehrlochdüsen, FIAT-Ölbadluftfilter, zahnradgetriebene Nockenwelle, thermostatgesteuerte Wasserumlaufkühlung mit Lamellenkühler und Lüfter. * Bohrung = 100 mm, Hub = 110 mm * Verdichtungsverhältnis = 17:1 * Max. Drehmoment = 152 Nm bei 1.600 U/min. * Mittlere Kolbengeschwindigkeit = 9,53 m/s * Öldruck = 1,47 bis 3,94 bar * Geregelter Drehzahlbereich = 650 bis 2.850 U/min. * Einspritzdruck = 225 + 5 bar ==Kupplung== * Pedal-betätigte, zweistufige-trockene Doppelkupplung, Typ: 11" Erste Stufe Fahrkupplung mit 279,4 mm Scheibendurchmesser * Zweite Stufe Zapfwellenkupplung mit 279,4 mm Scheibendurchmesser ==Getriebe== * Im Ölbad laufendes teilsynchronisiertes Gruppengetriebe * Wechselgetriebe mit vier Vorwärts- und ein Rückwärtsgang * Zusätzlich unabhängiges zweistufiges Wandler-Getriebe, in einen langsamen und einen schnellen Bereich unterteilt * Die Gänge: 3, 4, 7 und 8 sind synchronisiert 8 Vorwärts- und 2 Rückwärtsgänge "Optional:" * Vorschaltgetriebe als Kriechganggetriebe ausgebildet * Die Gänge: 2, 3, 5, 6, 8 und 9 sind synchronisiert 12 Vorwärts- und 3 Rückwärtsgänge ==Geschwindigkeiten vor- und rückwärts== "Geschwindigkeiten des 8/2-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.600 |- ! Langsame Gruppe !! |- | 1.Gang || 2,41 km/h |- | 2.Gang || 3,54 km/h |- | 3.Gang || 5,15 km/h |- | 4.Gang || 6,76 km/h |- | 1.Rückwärtsgang || 3,38 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 8,21 km/h |- | 2.Gang || 12,87 km/h |- | 3.Gang || 18,83 km/h |- | 4.Gang || 24,30 km/h |- | 2.Rückwärtsgang || 12,23 km/h |- |} "Geschwindigkeiten des 12/3-Gänge Triebwerk, mit Bereifung 13.6-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.600 |- ! Kriechgang - Gruppe !! |- | 1.Gang || 0,80 km/h |- | 2.Gang || 1,13 km/h |- | 3.Gang || 2,61 km/h |- | 4.Gang || 2,25 km/h |- | 1.Rückwärtsgang || 1,13 km/h |- ! Langsame Gruppe !! |- | 1.Gang || 2,41 km/h |- | 2.Gang || 3,54 km/h |- | 3.Gang || 5,15 km/h |- | 4.Gang || 6,76 km/h |- | 2.Rückwärtsgang || 3,38 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 8,21 km/h |- | 2.Gang || 12,87 km/h |- | 3.Gang || 18,83 km/h |- | 4.Gang || 24,30 km/h |- | 3.Rückwärtsgang || 12,23 km/h |- |} ==Zapfwelle== * Pedal-betätigte, unabhängige Zapfwelle, auf Wunsch als gangabhängige Zapfwelle schaltbar * Stummel = 1 3/8" -6 Keile * Einfach schaltbar, 540 U/min. * 540 U/min. bei 1.966 U/min.- Motordrehzahl Übertragbare Leistung = 41,2 PS * Oder 659 U/min. mit 2.400 U/min.- Nenndrehzahl Übertragbare Leistung = 44,6 PS ==Bremsen== * Pedal-betätigte, trockne Band-Trommelbremse auf die Seitenwellen wirkend, als Einzelradbremse ausgebildet * Handhebel-betätigte unabhängige Feststellbremse, auf eine Bremsscheibe wirkend ==Achsen== * Pendelnd-gelagerte, ausziehbare Stahlvorderachse Verstellbare Spurweite = 1.351 bis 1.961 mm * Starre Hinterachse mit Kegelradgetriebe und Stirnraduntersetzung * Pedal-betätigte Differentialsperre Verstellbare Spurweite mittels Radumschlag und verstellbaren Felgen = 1.321 bis 1.905 mm ==Lenkung== * Mechanische Lenkung incl. Power-Assisted ==Hydrauliksystem und Kraftheber== * Hydraulischer Kraftheber mit Dreipunktaufhängung * Ein doppelt-wirkender Hubzylinder mit 90 mm Zylinderbohrung und 90 mm Zylinderhub und Zusatzzylinder * Dreipunktaufhängung der Kategorie I/II "Funktionen:" * Heben, Senken, Schwimmstellung, Zugkraft- und Positionsregelung OPEN-CENTER Hydrauliksystem mit Zahnradpumpe * Förderleistung = 23,6 l/min. bei 147 bar Max. durchgehende Hubkraft 550 mm hinter den Koppelpunkten = 1.550 kg ==Steuergeräte== * Ein doppelt-wirkendes Steuergerät ==Elektrische Ausrüstung== "12 Volt- Einrichtung" * Lichtmaschine, 12 V-30 A ==Maße und Abmessungen== * Länge über alles = 2.979 mm * Breite mit kleinster Spurweite = 1.549 mm * Höhe über Motorhaube = 1.346 mm * Höhe über Lenkrad = 1.488 mm * Höhe über Auspuff = 1.943 mm * Radstand = 1.918 mm * Bodenfreiheit = 470 mm * Betriebsgewicht = 1.842 mm ==Bereifung== "Standardbereifung" * Vorne = 6.00-16 AS Front * Hinten = 13.6-28 AS "Optional:" * Hinten = 11-28, 12.4-28 und 16.9-28 AS ==Füllmengen== * Tankinhalt = 54,0 l * Motoröl incl. Filter = 7,9 l * Kühlsystem = 13,2 l * Triebwerk und Differential = 18,0 l * Endantrieb je 1,7 l ==Verbrauch== * Kraftstoffverbrauch = 10,3 l/h bei 43,2 DIN-PS und Nenndrehzahl ==Kabine== * Fahrerstand mit Schutzrahmen, parallelgeführter-gepolsterter Sitz, Lade- und Öldruckanzeige, Kraftstoffanzeige, Traktormeter incl. Betriebsstundenzähler und Temperaturanzeige Optional mit Wetterverdeck ==Sonderausrüstung== * Radgewichte * Verdeck * Kriechganggetriebe * Riemenscheibe * Frontlader ==Literatur & Weblinks== * Allis-Chalmers Agricultural Equipment Brochure * TractorData.com * koneviesti.fi <references /> {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} ph7r3lupwpbh2o4zudbltg5bora6wbd Traktorenlexikon: Allis-Chalmers 5050 0 123111 1090736 2026-09-12T20:51:00Z Baupit 56622 Neue Seite (vgl. [[WB:AZ]]) 1090736 wikitext text/x-wiki {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} {{:Traktorenlexikon: Modell-Infobox | HERSTELLER = ALLIS-CHALMERS | MODELLREIHE = 5000 er-Baureihe | MODELL = 5050 | BILD = | BILDBESCHREIBUNG = | BAUWEISE = Blockbauweise | PRODUKTIONSBEGINN = 1976 | PRODUKTIONSENDE = 1983 | STÜCKZAHL = | EIGENGEWICHT = 1.880 (4 WD: 2.150) | LÄNGE = 3.030 | BREITE = 1.702 | HÖHE = 1.506 | RADSTAND = 1.920 (4 WD: 1.948) | BODENFREIHEIT = 508 (4 WD: 317) | SPURWEITE = | SPURWEITE VORNE = 1.351-1.961 (4 WD: 1.400/1.500) | SPURWEITE HINTEN = 1.321-1.905 (4 WD: 1.321-1.930) | WENDERADIUS MIT LENKBREMSE = 3.058 (4 WD: 3.302) | WENDERADIUS OHNE LENKBREMSE = 3.429 (4 WD: 4.293) | BEREIFUNG VORNE = 7.50-16 ASF (4 WD: 8.3-24 AS) | BEREIFUNG HINTEN = 14.9-28 AS (4 WD: 14.9-30 AS) | LEISTUNG KW = 40,5 | LEISTUNG PS = 55 | NENNDREHZAHL = 2.650 | ZYLINDER = 3 | HUBRAUM = 2.750 | DREHMOMENTANSTIEG = 18,3 | KRAFTSTOFF = Diesel | KÜHLSYSTEM = Wasserkühlung | ANTRIEBSTYP = Heckantrieb | GETRIEBE = 8 V/2 R | HÖCHSTGESCHWINDIGKEIT = 25 | KATEGORIESORTIERUNG = }} Nachdem die Fertigung des ALLIS-CHALMERS 170 eingestellt wurde, klaffte in der 50-PS Leistungsklasse eine Lücke. Als Ersatz griff man auf einen in Italien gefertigten FIAT-Schlepper zurück. Die Basis bildete dabei der FIAT 540, der allerdings das Aggregat des FIAT 580 erhielt. Somit war der ALLIS-CHALMERS 5050 geboren, den es auch als Allrad- und Plantagenausführung gab. ==Motor== * FIAT-IVECO, Typ: 8035.04 stehender, wassergekühlter Viertakt-Dreizylinder-Diesel-Saugmotor mit Direkteinspritzung, obenliegende Ventile, BOSCH-Kraftstoffpumpe, Druckumlaufschmierung mittels Zahnradpumpe, C.A.V.- oder BOSCH-Reihen-Einspritzpumpe mit integriertem-mechanischem oder hydraulischen Drehzahlregler, auswechselbare Zylinderlaufbuchsen, FRAM-Ölfilter, C.A.V.-Kraftstofffilter, Vierring-Leichtmetallkolben, BOSCH-Düsenhalter, vierfach-gelagerter Kurbelwelle, BOSCH-Dreilochdüsen, FIAT-Ölbadluftfilter, zahnradgetriebene Nockenwelle, thermostatgesteuerte Wasserumlaufkühlung mit Lamellenkühler und Lüfter. * Bohrung = 103 mm, Hub = 110 mm * Verdichtungsverhältnis = 17:1 * Kompressionsdruck = 25,5 bis 27,5 bar * Mittlere Kolbengeschwindigkeit = 9,72 m/s * Öldruck = 2,9 bis 3,9 bar * Max. Drehmoment = 179 Nm bei 1.700 U/min. * Drehmomentanstieg = 25 % bei 42 % der Nenndrehzahl * Geregelter Drehzahlbereich = 650 bis 2.930 U/min. * Max. Einspritzdruck = 230 + 5 bar ==Kupplung== * Pedal-betätigte, zweistufige-trockene Doppelkupplung, Typ: 11" Erste Stufe Fahrkupplung mit 279,4 mm Scheibendurchmesser * Zweite Stufe Zapfwellenkupplung mit 279,4 mm Scheibendurchmesser ==Getriebe== * Im Ölbad laufendes teilsynchronisiertes Gruppengetriebe * Wechselgetriebe mit vier Vorwärts- und ein Rückwärtsgang * Zusätzlich unabhängiges zweistufiges Wandler-Getriebe, in einen langsamen und einen schnellen Bereich unterteilt * Die Gänge: 3, 4, 7 und 8 sind synchronisiert 8 Vorwärts- und 2 Rückwärtsgänge "Optional:" * Vorschaltgetriebe als Kriechganggetriebe ausgebildet * Die Gänge: 3, 4, 7, 8, 10 und 11 sind synchronisiert 12 Vorwärts- und 3 Rückwärtsgänge ==Geschwindigkeiten vor- und rückwärts== "Geschwindigkeiten des 8/2-Gänge Triebwerk, mit Bereifung 14.9-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.650 |- ! Langsame Gruppe !! |- | 1.Gang || 2,41 km/h |- | 2.Gang || 3,70 km/h |- | 3.Gang || 5,47 km/h |- | 4.Gang || 7,08 km/h |- | 1.Rückwärtsgang || 3,54 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 9,01 km/h |- | 2.Gang || 13,52 km/h |- | 3.Gang || 19,96 km/h |- | 4.Gang || 25,91 km/h |- | 2.Rückwärtsgang || 13,04 km/h |- |} "Geschwindigkeiten des 12/3-Gänge Triebwerk, mit Bereifung 14.9-28 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.650 |- ! Kriechgang - Gruppe !! |- | 1.Gang || 0,64 km/h |- | 2.Gang || 1,13 km/h |- | 3.Gang || 2,61 km/h |- | 4.Gang || 2,09 km/h |- | 1.Rückwärtsgang || 0,97 km/h |- ! Langsame Gruppe !! |- | 1.Gang || 2,41 km/h |- | 2.Gang || 3,70 km/h |- | 3.Gang || 5,47 km/h |- | 4.Gang || 7,08 km/h |- | 2.Rückwärtsgang || 3,54 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 9,01 km/h |- | 2.Gang || 13,52 km/h |- | 3.Gang || 19,96 km/h |- | 4.Gang || 25,91 km/h |- | 3.Rückwärtsgang || 13,04 km/h |- |} "Allradausführung:" "Geschwindigkeiten des 8/2-Gänge Triebwerk, mit Bereifung 14.9-30 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.650 |- ! Langsame Gruppe !! |- | 1.Gang || 2,74 km/h |- | 2.Gang || 4,02 km/h |- | 3.Gang || 5,95 km/h |- | 4.Gang || 7,56 km/h |- | 1.Rückwärtsgang || 3,86 km/h |- ! Schnelle Gruppe !! |- | 1.Gang || 9,50 km/h |- | 2.Gang || 14,32 km/h |- | 3.Gang || 21,08 km/h |- | 4.Gang || 27,20 km/h |- | 2.Rückwärtsgang || 13,68 km/h |- |} ==Zapfwelle== * Pedal-betätigte, unabhängige Zapfwelle, auf Wunsch als gangabhängige Zapfwelle schaltbar * Stummel = 1 3/8" -6 Keile * Einfach schaltbar, 540 U/min. * 540 U/min. bei 2.159 U/min.- Motordrehzahl Übertragbare Leistung = 47,8 DIN-PS * Oder 675 U/min. mit 2.650 U/min.- Nenndrehzahl Übertragbare Leistung = 52,2 DIN-PS ==Bremsen== * Pedal-betätigte, trockne Band-Trommelbremse auf die Seitenwellen wirkend, als Einzelradbremse ausgebildet * Handhebel-betätigte unabhängige Feststellbremse, auf eine Bremsscheibe wirkend ==Achsen== * Pendelnd-gelagerte, ausziehbare Stahlvorderachse Verstellbare Spurweite = 1.351 mm bis 1.961 mm "Optional:" * Pendelnd-gelagerte Planeten-Lenktriebvorderachse mit zentraler Gelenkwelle Zwei Spurweiten mittels Radumschlag = 1.400 mm und 1.500 mm * Starre Hinterachse mit Kegelradgetriebe und Stirnraduntersetzung * Pedal-betätigte Differentialsperre Verstellbare Spurweite mittels Radumschlag und verstellbaren Felgen = 1.327 mm bis 2.007 mm * Allradausführung mit siebenfach-verstellbarer Spurweite = 1.321 mm, 1.422 mm, 1.524 mm, 1.626 mm, 1.727 mm, 1.829 mm und 1.930 mm * Vordere Achslast = 717 kg * Hintere Achslast = 1.284 kg ==Lenkung== * Mechanische Lenkung incl. POWER-ASSISTED ==Hydrauliksystem und Kraftheber== * Hydraulischer Kraftheber mit Dreipunktaufhängung * Ein doppelt-wirkender Hubzylinder mit 90 mm Zylinderbohrung und 90 mm Zylinderhub und Zusatzzylinder * Dreipunktaufhängung der Kategorie I/II "Funktionen:" * Heben, Senken, Schwimmstellung, Zugkraft- und Positionsregelung OPEN-CENTER Hydrauliksystem mit Zahnradpumpe * Förderleistung = 24,5 l/min. bei 150 bar Max. Hubkraft an den Koppelpunkten = 1.450 kg ==Steuergeräte== * Ein doppelt-wirkendes Steuergerät ==Elektrische Ausrüstung== "12 Volt- Einrichtung" * Lichtmaschine, 12 V-37 A ==Maße und Abmessungen== "Heckantrieb-Variante:" * Länge über alles = 3.030 mm (Mit Kriechganggetriebe = 3.063 mm) * Breite mit kleinster Spurweite = 1.702 mm * Höhe über Motorhaube = 1.430 mm * Höhe über Lenkrad = 1.506 mm * Höhe über Auspuff = 2.311 mm * Radstand = 1.920 mm (Mit Kriechganggetriebe = 1.953 mm) * Bodenfreiheit = 508 mm * Betriebsgewicht = 2.000 kg "Allrad-Variante:" "Heckantrieb-Variante:" * Länge über alles = 3.167 mm * Breite mit kleinster Spurweite = 1.702 mm * Höhe über Motorhaube = 1.455 mm * Höhe über Lenkrad = 1.532 mm * Höhe über Auspuff = 2.337 mm * Radstand = 1.948 mm * Bodenfreiheit = 317 mm * Betriebsgewicht = 2.150 kg ==Bereifung== "Standardbereifung" * Vorne = 6.00-16 AS Front (4 WD = 8.3-24 AS) * Hinten = 13.6-28 AS (4 WD = 14.9-30 AS) "Optional:" * Vorne = 6.00-16 und 6.50-16 AS Front * Hinten = 12.4-28 und 13.6-28 AS ==Füllmengen== * Tankinhalt = 54,0 l * Motoröl incl. Filter = 7,9 l * Kühlsystem = 13,2 l * Triebwerk und Differential = 18,0 l (4 WD = 19,5 l) * Endantrieb je 1,7 l * Lenktriebachse = 3,6 l * Endantrieb je 1,6 l ==Verbrauch== * Kraftstoffverbrauch = 13,3 l/h bei 52,2 DIN-PS und Nenndrehzahl ==Kabine== * Fahrerstand mit Schutzrahmen, parallelgeführter-gepolsterter Sitz, Lade- und Öldruckanzeige, Kraftstoffanzeige, Traktormeter incl. Betriebsstundenzähler und Temperaturanzeige Optional mit Wetterverdeck ==Sonderausrüstung== * Radgewichte * Verdeck * Kriechganggetriebe * Riemenscheibe * Frontlader ==Literatur & Weblinks== * Allis-Chalmers Agricultural Equipment Brochure * digitalcommons.unl.edu (Test-Nr. 1240/77) * TractorData.com * koneviesti.fi <references /> {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} avvz0ecjopoxvmevjcnkwcu67gqptqo