Wikibooks dewikibooks https://de.wikibooks.org/wiki/Hauptseite MediaWiki 1.47.0-wmf.18 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 Traktorenlexikon: Allis-Chalmers 0 7000 1090408 1016216 2026-09-06T11:48:53Z Baupit 56622 /* Serie 4-WD */ 1090408 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|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}} ri56iuqbad4n64h639ju18g933yp80x Tabellensammlung Chemie/ Tabelle der Isotope 0 14108 1090407 1090209 2026-09-06T11:26:13Z Picculo 116740 /* Wasserstoff */ Die Wasserstoffisotope mit den Massenzahlen 1, 2 und 3 haben die Namen Protium, Deuterium und Tritium und die Symbole H, D und T. 1090407 wikitext text/x-wiki {{EditSection}} {| id="closedNavBar" class="noprint" width="100%" |- | <div class="NavFrame" style="clear: both; padding: 2px; border: 1px solid #aaaaaa; text-align: center; border-collapse: collapse; font-size: 95%;"> <div style="height: 1.6em; font-weight: bold; font-size: 100%; background-color: #efefef;"><span style="color:green;">Inhalt</span></div> <div class="NavContent" style="font-size: 100%;"> {| align="center" style="font-size:small" id="toc" |- |style="text-align:center;background-color:#a0ffa0;color:red;border:1px solid black;"|[[#Wasserstoff|H]] |colspan="17"|<br /> |style="text-align:center;background-color:#c0ffff;color:red;border:1px solid black;"|[[#Helium|He]] |- |style="text-align:center;background-color:#ff6666;color:black;border:1px solid black;"|[[#Lithium|Li]] |style="text-align:center;background-color:#ffdead;color:black;border:1px solid black;"|[[#Beryllium|Be]] |colspan="11"|<br /> |style="text-align:center;background-color:#cccc99;color:black;border:1px solid black;"|[[#Bor|B]] |style="text-align:center;background-color:#a0ffa0;color:black;border:1px solid black;"|[[#Kohlenstoff|C]] |style="text-align:center;background-color:#a0ffa0;color:red;border:1px solid black;"|[[#Stickstoff|N]] |style="text-align:center;background-color:#a0ffa0;color:red;border:1px solid black;"|[[#Sauerstoff|O]] |style="text-align:center;background-color:#ffff99;color:red;border:1px solid black;"|[[#Fluor|F]] |style="text-align:center;background-color:#c0ffff;color:red;border:1px solid black;"|[[#Neon|Ne]] |- |style="text-align:center;background-color:#ff6666;color:black;border:1px solid black;"|[[#Natrium|Na]] |style="text-align:center;background-color:#ffdead;color:black;border:1px solid black;"|[[#Magnesium|Mg]] |colspan="11"|<br /> |style="text-align:center;background-color:#cccccc;color:black;border:1px solid black;"|[[#Aluminium|Al]] |style="text-align:center;background-color:#cccc99;color:black;border:1px solid black;"|[[#Silizium|Si]] |style="text-align:center;background-color:#a0ffa0;color:black;border:1px solid black;"|[[#Phosphor|P]] |style="text-align:center;background-color:#a0ffa0;color:black;border:1px solid black;"|[[#Schwefel|S]] |style="text-align:center;background-color:#ffff99;color:red;border:1px solid black;"|[[#Chlor|Cl]] |style="text-align:center;background-color:#c0ffff;color:red;border:1px solid black;"|[[#Argon|Ar]] |- |style="text-align:center;background-color:#ff6666;color:black;border:1px solid black;"|[[#Kalium|K]] |style="text-align:center;background-color:#ffdead;color:black;border:1px solid black;"|[[#Calcium|Ca]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Scandium|Sc]] |<br /> |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Titan|Ti]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Vanadium|V]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Chrom|Cr]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Mangan|Mn]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Eisen|Fe]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Kobalt|Co]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Nickel|Ni]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Kupfer|Cu]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Zink|Zn]] |style="text-align:center;background-color:#cccccc;color:black;border:1px solid black;"|[[#Gallium|Ga]] |style="text-align:center;background-color:#cccc99;color:black;border:1px solid black;"|[[#Germanium|Ge]] |style="text-align:center;background-color:#cccc99;color:black;border:1px solid black;"|[[#Arsen|As]] |style="text-align:center;background-color:#a0ffa0;color:black;border:1px solid black;"|[[#Selen|Se]] |style="text-align:center;background-color:#ffff99;color:green;border:1px solid black;"|[[#Brom|Br]] |style="text-align:center;background-color:#c0ffff;color:red;border:1px solid black;"|[[#Krypton|Kr]] |- |style="text-align:center;background-color:#ff6666;color:black;border:1px solid black;"|[[#Rubidium|Rb]] |style="text-align:center;background-color:#ffdead;color:black;border:1px solid black;"|[[#Strontium|Sr]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Yttrium|Y]] |<br /> |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Zirkonium|Zr]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Niob|Nb]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Molybdän|Mo]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px dashed black;"|[[#Technetium|Tc]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Ruthenium|Ru]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Rhodium|Rh]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Palladium|Pd]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Silber|Ag]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Cadmium|Cd]] |style="text-align:center;background-color:#cccccc;color:black;border:1px solid black;"|[[#Indium|In]] |style="text-align:center;background-color:#cccccc;color:black;border:1px solid black;"|[[#Zinn|Sn]] |style="text-align:center;background-color:#cccc99;color:black;border:1px solid black;"|[[#Antimon|Sb]] |style="text-align:center;background-color:#cccc99;color:black;border:1px solid black;"|[[#Tellur|Te]] |style="text-align:center;background-color:#ffff99;color:black;border:1px solid black;"|[[#Jod|I]] |style="text-align:center;background-color:#c0ffff;color:red;border:1px solid black;"|[[#Xenon|Xe]] |- |style="text-align:center;background-color:#ff6666;color:black;border:1px solid black;"|[[#Cäsium|Cs]] |style="text-align:center;background-color:#ffdead;color:black;border:1px solid black;"|[[#Barium|Ba]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Lanthan|La]] |style="vertical-align: top; text-align:center;background-color:#ffbfff;"|* |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Hafnium|Hf]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Tantal|Ta]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Wolfram|W]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Rhenium|Re]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Osmium|Os]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Iridium|Ir]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Platin|Pt]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px solid black;"|[[#Gold|Au]] |style="text-align:center;background-color:#ffc0c0;color:green;border:1px solid black;"|[[#Quecksilber|Hg]] |style="text-align:center;background-color:#cccccc;color:black;border:1px solid black;"|[[#Thallium|Tl]] |style="text-align:center;background-color:#cccccc;color:black;border:1px solid black;"|[[#Blei|Pb]] |style="text-align:center;background-color:#cccccc;color:black;border:1px solid black;"|[[#Bismut|Bi]] |style="text-align:center;background-color:#cccccc;color:black;border:1px dashed black;"|[[#Polonium|Po]] |style="text-align:center;background-color:#ffff99;color:black;border:1px dashed black;"|[[#Astat|At]] |style="text-align:center;background-color:#c0ffff;color:red;border:1px dashed black;"|[[#Radon|Rn]] |- |style="text-align:center;background-color:#ff6666;color:black;border:1px dashed black;"|[[#Francium|Fr]] |style="text-align:center;background-color:#ffdead;color:black;border:1px dashed black;"|[[#Radium|Ra]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px dotted black;"|[[#Actinium|Ac]] |style="vertical-align: top; text-align:center;background-color:#ff99cc;"|**<br /> |style="text-align:center;background-color:#ffc0c0;color:black;border:1px dotted black;"|[[#Rutherfordium|Rf]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px dotted black;"|[[#Dubnium|Db]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px dotted black;"|[[#Seaborgium|Sg]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px dotted black;"|[[#Bohrium|Bh]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px dotted black;"|[[#Hassium|Hs]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px dotted black;"|[[#Meitnerium|Mt]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px dotted black;"|[[#Darmstadtium|Ds]] |style="text-align:center;background-color:#ffc0c0;color:black;border:1px dotted black;"|[[#Roentgenium|Rg]] |style="text-align:center;background-color:#ffc0c0;color:green;border:1px dotted black;"|[[#Copernicium|Cn]] |style="text-align:center;background-color:#cccccc;color:black;border:1px dotted black;"|[[#Nihonium|Nh]] |style="text-align:center;background-color:#cccccc;color:black;border:1px dotted black;"|[[#Flerovium|Fl]] |style="text-align:center;background-color:#cccccc;color:black;border:1px dotted black;"|[[#Moscovium|Mc]] |style="text-align:center;background-color:#cccccc;color:black;border:1px dotted black;"|[[#Livermorium|Lv]] |style="text-align:center;background-color:#fcfecc;color:#cccccc;"|[[#Tenness|Ts]] |style="text-align:center;background-color:#ecfefc;color:#cccccc;"|[[#Oganesson|Og]] |- |colspan="21"|<br /> |- |colspan="4" style="text-align:right"|* |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Cer|Ce]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Praseodym|Pr]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Neodym|Nd]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px dashed black;"|[[#Promethium|Pm]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Samarium|Sm]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Europium|Eu]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Gadolinium|Gd]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Terbium|Tb]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Dysprosium|Dy]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Holmium|Ho]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Erbium|Er]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Thulium|Tm]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Ytterbium|Yb]] |style="text-align:center;background-color:#ffbfff;color:black;border:1px solid black;"|[[#Lutetium|Lu]] |- |colspan="4" style="text-align:right"|** |style="text-align:center;background-color:#ff99cc;color:black;border:1px solid black;"|[[#Thorium|Th]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dashed black;"|[[#Protactinium|Pa]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px solid black;"|[[#Uran|U]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dashed black;"|[[#Neptunium|Np]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px solid black;"|[[#Plutonium|Pu]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dotted black;"|[[#Americium|Am]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dotted black;"|[[#Curium|Cm]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dotted black;"|[[#Berkelium|Bk]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dotted black;"|[[#Californium|Cf]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dotted black;"|[[#Einsteinium|Es]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dotted black;"|[[#Fermium|Fm]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dotted black;"|[[#Mendelevium|Md]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dotted black;"|[[#Nobelium|No]] |style="text-align:center;background-color:#ff99cc;color:black;border:1px dotted black;"|[[#Lawrencium|Lr]] |} </div> </div> <div style="clear: both;"><!--/--></div> |} '''Legende''' {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! !! |- | α | Alpha-Zerfall (Emission eines Heliumatoms) |- | β- |Beta--Zerfall (Emission eines Elektrons) |- | β+ |Beta+-Zerfall (Emission eines Positrons) |- |ββ |Doppelter Betazerfall (gleichzeitige Emission zweier Elektronen) |- |K+ |Einfang eines Elektrons der inneren Elektronenhülle |- |IT |Isomerer Übergang |- |SF |Spontanspaltung |- |p |Zerfall unter Emission eines Protons |- |n |Zerfall unter Emission eines Neutrons |} ==Neutron== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Häufigkeit in % !! Zerfallsart(en) |- |<sup>1</sup>Nn<ref>S. W. Souci, Heinrich Thies: Praktikum der qualitativen Analyse. J. F. Bergmann-Verlag München, 1979. S. 242.</ref> | 614.6s |1/2+ | |β<sup>-</sup>=100% |} ==Wasserstoff== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Häufigkeit in % !! Zerfallsart(en) !! Symbol !! Alternativname |- |<sup>1</sup>H |stabil |1/2+ |99,985 | &mdash; | H | Protium |- |<sup>2</sup>H |stabil |1+ |0,015 | &mdash; | D | Deuterium |- |<sup>3</sup>H |12,33 a |1/2+ |künstlich |β<sup>-</sup> = 100% | T | Tritium |- |<sup>4</sup>H | |2- | | | |} ==Helium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>3</sup>He |stabil |1/2+ |%Häufigkeit = 0,000137 |- |<sup>4</sup>He |stabil |0+ |%Häufigkeit = 99,999863 |- |<sup>5</sup>He |0,60 MeV |3/2- |%n = 100 |- |<sup>6</sup>He |806,7 ms |0+ |%β<sup>-</sup> = 100 |- |<sup>7</sup>He |160 keV |(3/2)- |%n = 100 |- |<sup>8</sup>He |119 ms |0+ |%β<sup>-</sup> = 84, %β<sup>-</sup>n = 16 |- |<sup>9</sup>He |0,30 MeV |(1/2-) |%n = 100 |- |<sup>10</sup>He |0,3 MeV |0+ |%n = 100 |} ==Lithium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>4</sup>Li |7,58043·10<sup>-23</sup> s |2- |%p=100 |- |<sup>5</sup>Li |1.5 MeV |3/2- |%p=100 |- |<sup>6</sup>Li |stabil |1+ |%Häufigkeit=7.5 |- |<sup>7</sup>Li |stabil |3/2- |%Häufigkeit=92.5 |- |<sup>8</sup>Li |838 ms |2+ |%β-=100, %β-2α=100 |- |<sup>9</sup>Li |178.3 ms |3/2- |%β-=100, %β-n2α=49.5 |- |<sup>10</sup>Li |1.2 MeV | |%n=100 |- |<sup>11</sup>Li |8.5 ms |3/2- |%β-=100, %β-n=85 , %β-2n=4.1 , %β-2α3n=1.9 |} ==Beryllium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>6</sup>Be |5 zs |0+ |%2pα=100 |- |<sup>7</sup>Be |53.12 d |3/2- |%K=100 |- |<sup>8</sup>Be |81,9 as |0+ |%2α=100 |- |<sup>9</sup>Be |stabil |3/2- |%Häufigkeit=100 |- |<sup>10</sup>Be |1510000 a |0+ |%β-=100 |- |<sup>11</sup>Be |13.81 s |1/2+ |%β-=100, %β-α=3.1 |- |<sup>12</sup>Be |23.6 ms |0+ |%β-=100 |- |<sup>13</sup>Be |1 zs |(1/2,5/2)+ |%n=100 |- |<sup>14 </sup>Be |4.35 ms |0+ |%β-=100, %β-n=81 , %β-2n=5 |} ==Bor== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>7</sup>B || 1.4 MeV || (3/2-) || %XP=100 |- |<sup>8</sup>B || 770 ms || 2+ || %K+%β+=100, %K2α=100 |- |<sup>9</sup>B || 0.54 keV || 3/2- || 2αP=100% |- |<sup>10</sup>B || stabil || 3+ || %Häufigkeit=19.9 |- |<sup>11</sup>B || stabil || 3/2- || %Häufigkeit=80.1 |- |<sup>12</sup>B || 20.20 ms || 1+ || %β-=100, %β-3α=1.58 |- |<sup>13</sup>B || 17.36 ms || 3/2- || %β-=100, %β-n=0.28 |- |<sup>14</sup>B || 13.8 ms || 2- || %β-=100 |- |<sup>15</sup>B || 10.5 ms || || %β-=100 |- |<sup>16</sup>B || 200 ps || (0-) || %n=100 |- |<sup>17</sup>B || 5.08 ms || (3/2-) || %β-=100, %β-n=? |} ==Kohlenstoff== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>8</sup>C |230 keV |0+ |%Xp=100 |- |<sup>9</sup>C |126,5 ms |(3/2-) |%K+%β+=100, %Kp2α=? |- |<sup>10</sup>C |19.255 s |0+ |%K+%β+=100 |- |<sup>11</sup>C |20.39 m |3/2- |%K+%β+=100 |- |<sup>12</sup>C |stabil |0+ |%Häufigkeit=98.90 |- |<sup>13</sup>C |stabil |1/2- |%Häufigkeit=1.10 |- |<sup>14</sup>C |5730 a |0+ |%β-=100 |- |<sup>15</sup>C |2.449 s |1/2+ |%β-=100 |- |<sup>16</sup>C |0.747 s |0+ |%β-=100, %β-n > 98.8 |- |<sup>17</sup>C |0.193 s | |%β-=100, %β-n=32 |- |<sup>18</sup>C |0.095 s |0+ |%β-=100, %β-n ~ 25 |- |<sup>19</sup>C |0.046 s | |%β-=100, %β-n=47 |- |<sup>20</sup>C |0.014 s |0+ |%β-=100, %β-n=72 |} ==Stickstoff== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>11</sup>N || 740 keV || 1/2+ || %p=? |- |<sup>12</sup>N || 11.000 ms || 1+ || %K+%β+=100, %K3α=3.5 |- |<sup>13</sup>N || 9.965 m || 1/2- || %K+%β+=100 |- |<sup>14</sup>N || stabil || 1+ || %Häufigkeit=99.634 |- |<sup>15</sup>N || stabil || 1/2- || %Häufigkeit=0.366 |- |<sup>16</sup>N || 7.13 s || 2- || %β-=100, %β-α=0.00120 |- |<sup>17</sup>N || 4.173 s || 1/2- || %β-=100, %β-n=95.1 |- |<sup>18</sup>N || 624 ms || 1- || %β-=100, %β-α=12.2 , %β-n=14.3 |- |<sup>19</sup>N || 0.304 s || (1/2-) || %β-=100, %β-n=62.4 |- |<sup>20</sup>N || 100 ms || ||%β-=100, %β-n ~ 61 |- |<sup>21</sup>N || 85 ms || ||%β-=100, %β-n=84 |- |<sup>22</sup>N || 24 ms || || %β-=100, %β-n=35 |} ==Sauerstoff== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>12</sup>O|| 0.40 MeV || 0+ || %2p=60 |- |<sup>13</sup>O|| 8.58 ms || (3/2-) || %K+%β+=100, %Kp=12 |- |<sup>14</sup>O|| 70.606 s || 0+ || %K+%β+=100 |- |<sup>15</sup>O|| 122.24 s || 1/2- || %K+%β+=100 |- |<sup>16</sup>O|| stabil || 0+ || %Häufigkeit=99.762 |- |<sup>17</sup>O|| stabil || 5/2+ || %Häufigkeit=0.038 |- |<sup>18</sup>O|| stabil || 0+ || %Häufigkeit=0.200 |- |<sup>19</sup>O|| 26.91 s || 5/2+ || %β-=100 |- |<sup>20</sup>O|| 13.51 s || 0+ || %β-=100 |- |<sup>21</sup>O|| 3.42 s || (1/2,3/2,5/2)+ || %β-=100 |- |<sup>22</sup>O|| 2.25 s || 0+ || %β-=100 |- |<sup>23</sup>O|| 82 ms || || %β-=100, %β-n=31 |- |<sup>24</sup>O|| 61 ms || 0+ || %β-=100, %β-n=58 |} ==Fluor== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>14</sup>F || || (2-) || %p=100 |- |<sup>15</sup>F || 1.0 MeV || (1/2+) || %p=100 |- |<sup>16</sup>F || 40 keV || 0- || %p=100 |- |<sup>17</sup>F || 64.49 s || 5/2+ || %K+%β+=100 |- |<sup>18</sup>F || 109.77 m || 1+ || %K+%β+=100 |- |<sup>19</sup>F || stabil || 1/2+ || %Häufigkeit=100 |- |<sup>20</sup>F || 11.00 s || 2+ || %β-=100 |- |<sup>21</sup>F || 4.158 s || 5/2+ || %β-=100 |- |<sup>22</sup>F || 4.23 s || 4+,(3+) || %β-=100 |- |<sup>23</sup>F || 2.23 s || (3/2,5/2)+ || %β-=100 |- |<sup>24</sup>F || 0.34 s || (1,2,3)+ || %β-=100 |- |<sup>25</sup>F || 59 ms || || %β-=100, %β-n=15 |} ==Neon== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>16</sup>Ne || 122 keV || 0+ || %2p=100 |- |<sup>17</sup>Ne || 109.2 ms || 1/2- || %K+%β+=100, %Kp=95.8 , %Kα=2.7 |- |<sup>18</sup>Ne || 1672 ms || 0+ || %K+%β+=100 |- |<sup>19</sup>Ne || 17.22 s || 1/2+ || %K+%β+=100 |- |<sup>20</sup>Ne || stabil || 0+ || %Häufigkeit=90.48 |- |<sup>21</sup>Ne || stabil || 3/2+ || %Häufigkeit=0.27 |- |<sup>22</sup>Ne || stabil || 0+ || %Häufigkeit=9.25 |- |<sup>23</sup>Ne || 37.24 s || 5/2+ || %β-=100 |- |<sup>24</sup>Ne || 3.38 m || 0+ || %β-=100 |- |<sup>25</sup>Ne || 602 ms || (1/2,3/2)+ || %β-=100 |- |<sup>26</sup>Ne || 197 ms || 0+ || %β-=100, %β-n=0.13 |- |<sup>27</sup>Ne || 32 ms || || %β-=100, %β-n=2.0 |- |<sup>28</sup>Ne || 17 ms || 0+ || %β-=100, %β-n=22 |- |<sup>29</sup>Ne || 0.2 s || || %β-=100 |} ==Natrium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>19</sup>Na || || || %p=? |- |<sup>20</sup>Na || 447.9 ms || 2+ || %K+%β+=100, %Kα=20.5 |- |<sup>21</sup>Na || 22.49 s || 3/2+ || %K+%β+=100 |- |<sup>22</sup>Na || 2.6019 a || 3+ || %K+%β+=100 |- |<sup>23</sup>Na || stabil || 3/2+ || %Häufigkeit=100 |- |<sup>24</sup>Na || 14.9590 s || 4+ || %β-=100 |- |<sup>24m1</sup>Na || 20.20 ms || 1+ || %IT=99.95, %β-=0.05 |- |<sup>25</sup>Na || 59.1 s || 5/2+ || %β-=100 |- |<sup>26</sup>Na || 1.072 s || 3+ || %β-=100 |- |<sup>27</sup>Na || 301 ms || 5/2+ || %β-=100 , %β-n=0.13 |- |<sup>28</sup>Na || 30.5 ms || 1+ || %β-=100 , %β-n=0.58 |- |<sup>29</sup>Na || 44.9 ms || 3/2 || %β-=100 , %β-n=21.5 |- |<sup>30</sup>Na || 48 ms || 2+ || %β-=100 , %β-n=30 , %β-2n=1.17 , %β-α=5.5·10<sup>-5</sup> |- |<sup>31</sup>Na || 17.0 ms || 3/2+ || %β-=100, %β-n=37 , %β-2n=0.9 |- |<sup>32</sup>Na || 13.2 ms || (3-,4-) || %β-=100 , %β-n=24 , %β-2n=8.3 |- |<sup>33</sup>Na || 8.2 ms || || %β-=100, %β-n=52 , %β-2n=12 |- |<sup>34</sup>Na || 5.5 ms || || %β-=100, %β-n=?, %β-2n=? |- |<sup>35</sup>Na || 1.5 ms || || %β-=100, %β-n=? |} ==Magnesium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>20</sup>Mg || 95 ms || 0+ || %K+%β+=100, %Kp ~ 3 |- |<sup>21</sup>Mg || 122 ms || (3/2,5/2)+ || %K+%β+=100 , %Kp=29.3 |- |<sup>22</sup>Mg || 3.857 s || 0+ || %K+%β+=100 |- |<sup>23</sup>Mg || 11.317 s || 3/2+ || %K+%β+=100 |- |<sup>24</sup>Mg || stabil || 0+ || %Häufigkeit=78.99 |- |<sup>25</sup>Mg || stabil || 5/2+ || %Häufigkeit=10.00 |- |<sup>26</sup>Mg || stabil || 0+ || %Häufigkeit=11.01 |- |<sup>27</sup>Mg || 9.458 m || 1/2+ || %β-=100 |- |<sup>28</sup>Mg || 20.91 h || 0+ || %β-=100 |- |<sup>29</sup>Mg || 1.30 s || 3/2+ || %β-=100 |- |<sup>30</sup>Mg || 335 ms || 0+ || %β-=100 |- |<sup>31</sup>Mg || 230 ms || || %β-=100 , %β-n=1.7 |- |<sup>32</sup>Mg || 120 ms || 0+ || %β-=100 , %β-n=2.4 |- |<sup>33</sup>Mg || 90 ms || || %β-=100, %β-n=17 |- |<sup>34</sup>Mg || 20 ms || 0+ || %β-=100, %β-n=? |} ==Aluminium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>22</sup>Al || 70 ms || || %K+%β+=100 , %Kp+%K2p ~ 2.9 |- |<sup>23</sup>Al || 0.47 s || || %K+%β+=100, %Kp=? |- |<sup>24</sup>Al || 2.053 s || 4+ || %K+%β+=100, %Kα=0.035 |- |<sup>24m1</sup>Al || 131.3 ms || 1+ || %IT=82 , %K+%β+=18 , %Kα=0.028 |- |<sup>25</sup>Al || 7.183 s || 5/2+ || %K+%β+=100 |- |<sup>26</sup>Al || 7.17·10<sup>5</sup> a || 5+ || %K+%β+=100 |- |<sup>26m1</sup>Al || 6.3452 s || 0+ || %K+%β+=100 |- |<sup>27</sup>Al || stabil || 5/2+ || %Häufigkeit=100 |- |<sup>28</sup>Al || 2.2414 m || 3+ || %β-=100 |- |<sup>29</sup>Al || 6.56 m || 5/2+ || %β-=100 |- |<sup>30</sup>Al || 3.60 s || 3+ || %β-=100 |- |<sup>31</sup>Al || 644 ms || (3/2,5/2)+ || %β-=100 |- |<sup>32</sup>Al || 33 ms || 1+ || %β-=100 |} ==Silizium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>22</sup>Si || 6 ms || 0+ || %K+%β+=100, %Kp=? |- |<sup>23</sup>Si || || || |- |<sup>24</sup>Si || 102 ms || 0+ || %K+%β+=100, %Kp ~ 7 |- |<sup>25</sup>Si || 220 ms || 5/2+ || %K+%β+=100, %Kp=? |- |<sup>26</sup>Si || 2.234 s || 0+ || %K+%β+=100 |- |<sup>27</sup>Si || 4.16 s || 5/2+ || %K+%β+=100 |- |<sup>28</sup>Si || stabil || 0+ || %Häufigkeit=92.23 |- |<sup>29</sup>Si || stabil || 1/2+ || %Häufigkeit=4.67 |- |<sup>30</sup>Si || stabil || 0+ || %Häufigkeit=3.10 |- |<sup>31</sup>Si || 157.3 m || 3/2+ || %β-=100 |- |<sup>32</sup>Si || 150 a || 0+ || %β-=100 |- |<sup>33</sup>Si || 6.18 s || || %β-=100 |- |<sup>34</sup>Si || 2.77 s || 0+ || %β-=100 |- |<sup>35</sup>Si || 0.78 s || || %β-=100 |- |<sup>36</sup>Si || 0.45 s || 0+ || %β-=100, %β-n < 10 |} ==Phosphor== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>26</sup>P || 20 ms || (3+) || %K+%β+=100, %Kp+%K2p ~ 1.9 |- |<sup>27</sup>P || 260 ms || 1/2+ || %K+%β+=100, %Kp ~ 0.05 |- |<sup>28</sup>P || 270.3 ms || 3+ || %K+%β+=100, %Kp=0.0013 , %Kα=0.00086 |- |<sup>29</sup>P || 4.140 s || 1/2+ || %K+%β+=100 |- |<sup>30</sup>P || 2.498 m || 1+ || %K+%β+=100 |- |<sup>31</sup>P || stabil || 1/2+ || %Häufigkeit=100 |- |<sup>32</sup>P || 14.262 d || 1+ || %β-=100 |- |<sup>33</sup>P || 25.34 d || 1/2+ || %β-=100 |- |<sup>34</sup>P || 12.43 s || 1+ || %β-=100 |- |<sup>35</sup>P || 47.3 s || 1/2+ || %β-=100 |- |<sup>36</sup>P || 5.6 s || || %β-=100 |- |<sup>37</sup>P || 2.31 s || || %β-=100 |- |<sup>38</sup>P || 0.64 s || || %β-=100, %β-n < 10 |- |<sup>39</sup>P || 0.16 s || || %β-=100, %β-n=41 |- |<sup>40</sup>P || 260 ms || || %β-=100, %β-n=30 |- |<sup>41</sup>P || 120 ms || || %β-=100, %β-n=30 |- |<sup>42</sup>P || 110 ms || || %β-=100, %β-n=50 |- |<sup>43</sup>P || 33 ms || || %β-=100, %β-n=100 |} ==Schwefel== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>27</sup>S || 21 ms || || %K+%β+=100, %K2p=2.0, %Kp=? |- |<sup>28</sup>S || 125 ms || 0+ || %K+%β+=100, %Kp=21 |- |<sup>29</sup>S || 187 ms || 5/2+ || %K+%β+=100, %Kp=47 |- |<sup>30</sup>S || 1.178 s || 0+ || %K+%β+=100 |- |<sup>31</sup>S || 2.572 s || 1/2+ || %K+%β+=100 |- |<sup>32</sup>S || stabil || 0+ || %Häufigkeit=95.02 |- |<sup>33</sup>S || stabil || 3/2+ || %Häufigkeit=0.75 |- |<sup>34</sup>S || stabil || 0+ || %Häufigkeit=4.21 |- |<sup>35</sup>S || 87.32 d || 3/2+ || %β-=100 |- |<sup>36</sup>S || stabil || 0+ || %Häufigkeit=0.02 |- |<sup>37</sup>S || 5.05 m || 7/2- || %β-=100 |- |<sup>38</sup>S || 170.3 m || 0+ || %β-=100 |- |<sup>39</sup>S || 11.5 s || (3/2,5/2,7/2) - || %β-=100 |- |<sup>40</sup>S || 8.8 s || 0+ || %β-=100 |- |<sup>41</sup>S || || || |- |<sup>42</sup>S || 0.56 s || 0+ || %β-=100, %β-n < 4 |- |<sup>43</sup>S || 220 ms || || %β-=100, %β-n=40 |- |<sup>44</sup>S || 123 ms || 0+ || %β-=100, %β-n=18 |- |<sup>45</sup>S || 82 ms || || %β-=100, %β-n=54 |} ==Chlor== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>31</sup>Cl || 150 ms || || %K+%β+=100, %Kp=0.44 |- |<sup>32</sup>Cl || 298 ms || 1+ || %K+%β+=100 , %Kα=0.054 , %Kp=0.026 |- |<sup>33</sup>Cl || 2.511 s || 3/2+ || %K+%β+=100 |- |<sup>34</sup>Cl || 1.5264 s || 0+ || %K+%β+=100 |- |<sup>34m1</sup>Cl || 32.00 m || 3+ || %K+%β+=55.4 , %IT=44.6 |- |<sup>35</sup>Cl || stabil || 3/2+ || %Häufigkeit=75.77 |- |<sup>36</sup>Cl || 3.01·10<sup>5</sup> a || 2+ || %β-=98.10 , %K+%β+=1.90 |- |<sup>37</sup>Cl || stabil || 3/2+ || %Häufigkeit=24.23 |- |<sup>38</sup>Cl || 37.24 m || 2- || %β-=100 |- |<sup>38m1</sup>Cl || 715 ms || 5- || %IT=100 |- |<sup>39</sup>Cl || 55.6 m || 3/2+ || %β-=100 |- |<sup>40</sup>Cl || 1.35 m || 2- || %β-=100 |- |<sup>41</sup>Cl || 38.4 s || (1/2,3/2)+ || %β-=100 |- |<sup>42</sup>Cl || 6.8 s || || %β-=100 |- |<sup>43</sup>Cl || 3.3 s || || %β-=100 |- |<sup>44</sup>Cl || 434 ms || || %β-=100, %β-n < 8 |- |<sup>45</sup>Cl || 400 ms || || %β-=100, %β-n=24 |- |<sup>46</sup>Cl || 223 ms || || %β-=100, %β-n=60 |- |<sup>47</sup>Cl || || || %β-=100, %β-n < 3 |} ==Argon== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>30</sup>Ar || 20 ns || 0+ || %p=? |- |<sup>31</sup>Ar || 15.1 ms || || %K+%β+=100, %Kp=42 , %K2p=2.48 , %K3p=2.1 |- |<sup>32</sup>Ar || 98 ms || 0+ || %K+%β+=100, %Kp=43 |- |<sup>33</sup>Ar || 173.0 ms || 1/2+ || %K+%β+=100, %Kp=38.7 |- |<sup>34</sup>Ar || 844.5 ms || 0+ || %K+%β+=100 |- |<sup>35</sup>Ar || 1.775 s || 3/2+ || %K+%β+=100 |- |<sup>36</sup>Ar || stabil || 0+ || %Häufigkeit=0.337 |- |<sup>37</sup>Ar || 35.04 d || 3/2+ || %K=100 |- |<sup>38</sup>Ar || stabil || 0+ || %Häufigkeit=0.063 |- |<sup>39</sup>Ar || 269 a || 7/2- || %β-=100 |- |<sup>40</sup>Ar || stabil || 0+ || %Häufigkeit=99.600 |- |<sup>41</sup>Ar || 109.34 m || 7/2- || %β-=100 |- |<sup>42</sup>Ar || 32.9 a || 0+ || %β-=100 |- |<sup>43</sup>Ar || 5.37 m || (3/2,5/2) || %β-=100 |- |<sup>44</sup>Ar || 11.87 m || 0+ || %β-=100 |- |<sup>45</sup>Ar || 21.48 s || || %β-=100 |- |<sup>46</sup>Ar || 8.4 s || 0+ || %β-=100 |- |<sup>47</sup>Ar || 700 ms || || %β-=100, %β-n < 1 |} ==Kalium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>35</sup>K || 190 ms || 3/2+ || %K+%β+=100, %Kp=0.37 |- |<sup>36</sup>K || 342 ms || 2+ || %K+%β+=100, %Kp=0.048 , %Kα=0.0034 |- |<sup>37</sup>K || 1.226 s || 3/2+ || %K+%β+=100 |- |<sup>38</sup>K || 7.636 m || 3+ || %K+%β+=100 |- |<sup>38m1</sup>K || 923.9 ms || 0+ || %K+%β+=100 |- |<sup>39</sup>K || stabil || 3/2+ || %Häufigkeit=93.2581 |- |<sup>40</sup>K || 1.277·10<sup>9</sup> a || 4- || %Häufigkeit=0.0117, %β-=89.28 , %K+%β+=10.72 |- |<sup>41</sup>K || stabil || 3/2+ || %Häufigkeit=6.7302 |- |<sup>42</sup>K || 12.360 h || 2- || %β-=100 |- |<sup>43</sup>K || 22.3 h || 3/2+ || %β-=100 |- |<sup>44</sup>K || 22.13 m || 2- || %β-=100 |- |<sup>45</sup>K || 17.3 m || 3/2+ || %β-=100 |- |<sup>46</sup>K || 105 s || (2-) || %β-=100 |- |<sup>47</sup>K || 17.50 s || 1/2+ || %β-=100 |- |<sup>48</sup>K || 6.8 s || (2-) || %β-=100, %β-n=1.14 |- |<sup>49</sup>K || 1.26 s || (3/2+) || %β-=100, %β-n=86 |- |<sup>50</sup>K || 472 ms || (0-,1,2-) || %β-=100, %β-n=29 |- |<sup>51</sup>K || 365 ms || (1/2+,3/2+) || %β-=100 , %β-n=47 |- |<sup>52</sup>K || 105 ms || || %β-=100, %β-n=91 |- |<sup>53</sup>K || 30 ms || (3/2+) || %β-=100, %β-n=85 |- |<sup>54</sup>K || 10 ms || || %β-=100, %β-n=? |} ==Calcium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>35</sup>Ca || 50 ms || || %K+%β+=100, %K2p=? |- |<sup>36</sup>Ca || 102 ms || 0+ || %K+%β+=100, %Kp=57 |- |<sup>37</sup>Ca || 181.1 ms || 3/2+ || %K+%β+=100, %Kp=76 |- |<sup>38</sup>Ca || 440 ms || 0+ || %K+%β+=100 |- |<sup>39</sup>Ca || 859.6 ms || 3/2+ || %K+%β+=100 |- |<sup>40</sup>Ca || stabil || 0+ || %Häufigkeit=96.941 |- |<sup>41</sup>Ca || 1.03·10<sup>5</sup> a || 7/2- || %K=100 |- |<sup>42</sup>Ca || stabil || 0+ || %Häufigkeit=0.647 |- |<sup>43</sup>Ca || stabil || 7/2- || %Häufigkeit=0.135 |- |<sup>44</sup>Ca || stabil || 0+ || %Häufigkeit=2.086 |- |<sup>45</sup>Ca || 162.61 d || 7/2- || %β-=100 |- |<sup>46</sup>Ca || stabil || 0+ || %Häufigkeit=0.004 |- |<sup>47</sup>Ca || 4.536 d || 7/2- || %β-=100 |- |<sup>48</sup>Ca || 6·10<sup>18</sup> a || 0+ || %Häufigkeit=0.187, %β-=?, %ββ=? |- |<sup>49</sup>Ca || 8.718 m || 3/2- || %β-=100 |- |<sup>50</sup>Ca || 13.9 s || 0+ || %β-=100 |- |<sup>51</sup>Ca || 10.0 s || ( 3/2- ) || %β-=100, %β-n=? |- |<sup>52</sup>Ca || 4.6 s || 0+ || %β-=100 |- |<sup>53</sup>Ca || 90 ms || ( 3/2- ,5/2-) ||%β-=100, %β-n+%β-2n > 30 |} ==Scandium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>40</sup>Sc || 182.3 ms || 4- || %K+%β+=100, %Kα=0.017 , %Kp=0.44 |- |<sup>41</sup>Sc || 596.3 ms || 7/2- || %K+%β+=100 |- |<sup>42</sup>Sc || 681.3 ms || 0+ || %K+%β+=100 |- |<sup>42m1</sup>Sc || 61.7 s || 7+,(5+,6+) || %K+%β+=100 |- |<sup>43</sup>Sc || 3.891 h || 7/2- || %K+%β+=100 |- |<sup>44</sup>Sc || 3.927 h || 2+ || %K+%β+=100 |- |<sup>44m1</sup>Sc || 58.6 h || 6+ || %IT=98.80 , %K+%β+=1.20 |- |<sup>45</sup>Sc || stabil || 7/2- || %Häufigkeit=100 |- |<sup>45m1</sup>Sc || 318 ms || 3/2+ || %IT=100 |- |<sup>46</sup>Sc || 83.79 d || 4+ || %β-=100 |- |<sup>46m1</sup>Sc || 18.75 s || 1- || %IT=100 |- |<sup>47</sup>Sc || 3.3492 d || 7/2- || %β-=100 |- |<sup>48</sup>Sc || 43.67 h || 6+ || %β-=100 |- |<sup>49</sup>Sc || 57.2 m || 7/2- || %β-=100 |- |<sup>50</sup>Sc || 102.5 s || 5+ || %β-=100 |- |<sup>50m1</sup>Sc || 0.35 s || 2+,3+ || %IT > 97.5 < 100, %β-<2.5 |- |<sup>51</sup>Sc || 12.4 s || (7/2)- || %β-=100 |- |<sup>52</sup>Sc || 8.2 s || 3+ || %β-=100 |} ==Titan== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>39</sup>Ti || 26 ms || ( 3/2+ ) || %K=100, %Kp+%K2p ~ 14 |- |<sup>40</sup>Ti || 50 ms || 0+ || %K+%β+=100 |- |<sup>41</sup>Ti || 80 ms || 3/2+ || %K+%β+=100, %Kp ~ 100 |- |<sup>42</sup>Ti || 199 ms || 0+ || %K+%β+=100 |- |<sup>43</sup>Ti || 509 ms || 7/2- || %K+%β+=100 |- |<sup>44</sup>Ti || 63 a || 0+ || %K=100 |- |<sup>45</sup>Ti || 184.8 m || 7/2- || %K+%β+=100 |- |<sup>46</sup>Ti || stabil || 0+ || %Häufigkeit=8.0 |- |<sup>47</sup>Ti || stabil || 5/2- || %Häufigkeit=7.3 |- |<sup>48</sup>Ti || stabil || 0+ || %Häufigkeit=73.8 |- |<sup>49</sup>Ti || stabil || 7/2- || %Häufigkeit=5.5 |- |<sup>50</sup>Ti || stabil || 0+ || %Häufigkeit=5.4 |- |<sup>51</sup>Ti || 5.76 m || 3/2- || %β-=100 |- |<sup>52</sup>Ti || 1.7 m || 0+ || %β-=100 |- |<sup>53</sup>Ti || 32.7 s || (3/2)- || %β-=100 |- |<sup>54</sup>Ti || || 0+ || |- |<sup>55</sup>Ti || 320 ms || ( 3/2- ) || %β-=100 |- |<sup>56</sup>Ti || 160 ms || 0+ || %β-=100, %β-n=0.06 s ys |- |<sup>57</sup>Ti || 180 ms || (5/2-) || %β-=100, %β-n=0.04 sys |- |<sup>58</sup>Ti || || 0+ || |- |<sup>59</sup>Ti || || (5/2-) || %β-=? |- |<sup>60</sup>Ti || || 0+ || %β-=? |- |<sup>61</sup>Ti || || (1/2-) || %β-=?, %β-n=? |} ==Vanadium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>43</sup>V || 800 ms || ( 7/2- ) || %K+%β+=100 |- |<sup>44</sup>V || 90 ms || (2+) || %K+%β+=100, %Kα=? |- |<sup>44m1</sup>V || 150 ms || (6+) || %K+%β+=100 |- |<sup>45</sup>V || 547 ms || 7/2- || %K+%β+=100 |- |<sup>46</sup>V || 422.37 ms || 0+ || %K+%β+=100 |- |<sup>46m1</sup>V || 1.02 ms ||3+ || %IT=100 |- |<sup>47</sup>V || 32.6 m || 3/2- || %K+%β+=100 |- |<sup>48</sup>V || 15.9735 d || 4+ || %K+%β+=100 |- |<sup>49</sup>V || 330 d || 7/2- || %K=100 |- |<sup>50</sup>V || 1.4·10<sup>17</sup> a || 6+ || %Häufigkeit=0.250, %K+%β+=83 , %β-=17 |- |<sup>51</sup>V || stabil || 7/2- || %Häufigkeit=99.750 |- |<sup>52</sup>V || 3.743 m || 3+ || %β-=100 |- |<sup>53</sup>V || 1.61 m || 7/2- || %β-=100 |- |<sup>54</sup>V || 49.8 s || 3+ || %β-=100 |- |<sup>55</sup>V || 6.54 s || ( 7/2- ) || %β-=100 |- |<sup>56</sup>V || 230 ms || (3+) || %β-=100 |- |<sup>57</sup>V || 320 ms || ( 7/2- ) || %β-=100, %β-n=? |- |<sup>58</sup>V || 200 ms || (3+) || %β-=100 |- |<sup>59</sup>V || 130 ms || ( 7/2- ) || %β-=100 |- |<sup>60</sup>V || 200 ms || (3+) || %β-=100, %β-n=0.03 sys |- |<sup>61</sup>V || || || |- |<sup>62</sup>V || || (3+) || %β-=? |- |<sup>63</sup>V || || ( 7/2- ) || %β-=? |- |<sup>64</sup>V || || || %β-=? |} ==Chrom== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>43</sup>Cr || 21 ms || ( 3/2+ ) || %K+%β+=100, %Kp=?, %Kα=? |- |<sup>44</sup>Cr || 53 ms || 0+ || %K+%β+=100, %Kp<10 |- |<sup>45</sup>Cr || 50 ms || || %K+%β+=100, %Kp ~ 27 |- |<sup>46</sup>Cr || 0.26 s || 0+ || %K+%β+=100 |- |<sup>47</sup>Cr || 500 ms || 3/2- || %K+%β+=100 |- |<sup>48</sup>Cr || 21.56 h || 0+ || %K+%β+=100 |- |<sup>49</sup>Cr || 42.3 m || 5/2- || %K+%β+=100 |- |<sup>50</sup>Cr || 1.8·10<sup>17</sup> a || 0+ || %Häufigkeit=4.345, %KK=? |- |<sup>51</sup>Cr || 27.7025 d || 7/2- || %K=100 |- |<sup>52</sup>Cr || stabil || 0+ || %Häufigkeit=83.789 |- |<sup>53</sup>Cr || stabil || 3/2- || %Häufigkeit=9.501 |- |<sup>54</sup>Cr || stabil || 0+ || %Häufigkeit=2.365 |- |<sup>55</sup>Cr || 3.497 m || 3/2- || %β-=100 |- |<sup>56</sup>Cr || 5.94 m || 0+ || %β-=100 |- |<sup>57</sup>Cr || 21.1 s || 3/2-,5/2-, 7/2- || %β-=100 |- |<sup>58</sup>Cr || 7.0 s || 0+ || %β-=100 |- |<sup>59</sup>Cr || 0.74 s || || %β-=100 |- |<sup>60</sup>Cr || 0.57 s || 0+ || %β-=100 |- |<sup>61</sup>Cr || 270 ms || (5/2-) || %β-=100, %β-n=0.6 sys |- |<sup>62</sup>Cr || 190 ms || 0+ || %β-=100, %β-n=1.0 sys |- |<sup>63</sup>Cr || 110 ms || (1/2-) || %β-=100, %β-n=1.4 sys |- |<sup>64</sup>Cr || || 0+ || |- |<sup>65</sup>Cr || || (1/2-) || %β-=? |- |<sup>66</sup>Cr || || 0+ || %β-=100 |- |<sup>67</sup>Cr || || (1/2-) || %β-=? |} ==Mangan== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>46</sup>Mn || 41 ms || || %K=100, %Kp=32 |- |<sup>47</sup>Mn || 100 ms || || %K+%β+=100, %Kp > 3.4 |- |<sup>48</sup>Mn || 158.1 ms || 4+ || %K+%β+=100, %Kp=0.28 , %Kα<6·10<sup>-4</sup> |- |<sup>49</sup>Mn || 382 ms || 5/2- || %K+%β+=100 |- |<sup>50</sup>Mn || 283.88 ms || 0+ || %K+%β+=100 |- |<sup>50m1</sup>Mn || 1.75 m || 5+ || %K+%β+=100 |- |<sup>51</sup>Mn || 46.2 m || 5/2- || %K+%β+=100 |- |<sup>52</sup>Mn || 5.591 d || 6+ || %K+%β+=100 |- |<sup>52m1</sup>Mn || 21.1 m || 2+ || %K+%β+=98.25 , %IT=1.75 |- |<sup>53</sup>Mn || 3.74·10<sup>6</sup> a || 7/2- || %K=100 |- |<sup>54</sup>Mn || 312.3 d || 3+ || %K+%β+=100, %β- < 2.9·10<sup>-4</sup> |- |<sup>55</sup>Mn || stabil || 5/2- || %Häufigkeit=100 |- |<sup>56</sup>Mn || 2.5785 h || 3+ || %β-=100 |- |<sup>57</sup>Mn || 85.4 s || 5/2- || %β-=100 |- |<sup>58</sup>Mn || 3.0 s || 1+ || %β-=100 |- |<sup>58m1</sup>Mn || 65.2 s || (4)+ || %β- ~ 80, %IT ~ 20 |- |<sup>59</sup>Mn || 4.6 s || 3/2-,5/2- || %β-=100 |- |<sup>60</sup>Mn || 51 s || 0+ || %β-=100 |- |<sup>60m1</sup>Mn || 1.77 s || 3+ || %β-=88.5 , %IT=11.5 |- |<sup>61</sup>Mn || 0.71 s || (5/2-) || %β-=100 |- |<sup>62</sup>Mn || 0.88 s || (3+) || %β-=100 |- |<sup>63</sup>Mn || 0.25 s || || %β-=100 |- |<sup>64</sup>Mn || 140 ms || (3+) || %β-=100, %β-n=1.4 sys |- |<sup>65</sup>Mn || 110 ms || (5/2-) || %β-=100, %β-n=6.9 sys |- |<sup>66</sup>Mn || 90 ms || || %β-=100, %β-n=11 sys |} ==Eisen== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>46</sup>Fe || 20 ms || 0+ || %K=100, %Kp=? |- |<sup>47</sup>Fe || 27 ms || || %K+%β+=100, %Kp=? |- |<sup>48</sup>Fe || 44 ms || 0+ || %K+%β+=100, %Kp > 3.6 |- |<sup>49</sup>Fe || 70 ms || ( 7/2- ) || %K+%β+=100, %Kp > 62 |- |<sup>50</sup>Fe || 150 ms || 0+ || %K+%β+=100, %β+P ~ 0 |- |<sup>51</sup>Fe || 305 ms || 5/2- || %K+%β+=100 |- |<sup>52</sup>Fe || 8.275 h || 0+ || %K+%β+=100 |- |<sup>52m1</sup>Fe || 45.9 s || (12+) || %K+%β+=100 |- |<sup>53</sup>Fe || 8.51 m || 7/2- || %K+%β+=100 |- |<sup>53m1</sup>Fe || 2.58 m || 19/2- || %IT=100 |- |<sup>54</sup>Fe || stabil || 0+ || %Häufigkeit=5.8 |- |<sup>55</sup>Fe || 2.73 a || 3/2- || %K=100 |- |<sup>56</sup>Fe || stabil || 0+ || %Häufigkeit=91.72 |- |<sup>57</sup>Fe || stabil || 1/2- || %Häufigkeit=2.2 |- |<sup>58</sup>Fe || stabil || 0+ || %Häufigkeit=0.28 |- |<sup>59</sup>Fe || 44.503 d || 3/2- || %β-=100 |- |<sup>60</sup>Fe || 1.5·10<sup>6</sup> a || 0+ || %β-=100 |- |<sup>61</sup>Fe || 5.98 m || 3/2-,5/2- || %β-=100 |- |<sup>62</sup>Fe || 68 s || 0+ || %β-=100 |- |<sup>63</sup>Fe || 6.1 s || (5/2)- || %β-=100 |- |<sup>64</sup>Fe || 2.0 s || 0+ || %β-=100 |- |<sup>65</sup>Fe || 0.4 s || || %β-=100 |- |<sup>66</sup>Fe || 440 ms || 0+ || %β-=100 |- |<sup>67</sup>Fe || 470 ms || (1/2-) || %β-=100, %β-n=1.1 s ys |- |<sup>68</sup>Fe || 0.10 s || 0+ || %β-=100 |- |<sup>69</sup>Fe || 170 ms || (1/2-) || %β-=100, %β-n=6.9 sys |} ==Kobalt== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>50</sup>Co || 44 ms || (6+) || %K+%β+=100, %Kp > 42 |- |<sup>51</sup>Co || || ( 7/2- ) || |- |<sup>52</sup>Co || 18 ms || || %K+%β+=100 |- |<sup>53</sup>Co || 240 ms || ( 7/2- ) || %K+%β+=100 |- |<sup>53m1</sup>Co || 247 ms || (19/2-) || %K+%β+ ~ 98.5, %p ~ 1.5 |- |<sup>54</sup>Co || 193.23 ms || 0+ || %K+%β+=100 |- |<sup>54m1</sup>Co || 1.48 m || (7)+ || %K+%β+=100 |- |<sup>55</sup>Co || 17.53 h || 7/2- || %K+%β+=100 |- |<sup>56</sup>Co || 77.27 d || 4+ || %K+%β+=100 |- |<sup>57</sup>Co || 271.79 d || 7/2- || %K=100 |- |<sup>58</sup>Co || 70.86 d || 2+ || %K+%β+=100 |- |<sup>58m1</sup>Co || 9.04 h || 5+ || %IT=100 |- |<sup>59</sup>Co || stabil || 7/2- || %Häufigkeit=100 |- |<sup>60</sup>Co || 5.2714 a || 5+ || %β-=100 |- |<sup>60m1</sup>Co || 10.467 m || 2+ || %IT=99.76 , %β-=0.24 |- |<sup>61</sup>Co || 1.650 h || 7/2- || %β-=100 |- |<sup>62</sup>Co || 1.50 m || 2+ || %β-=100 |- |<sup>62m1</sup>Co || 13.91 m || 5+ || %β- ~ 100, %IT < 1 |- |<sup>63</sup>Co || 27.4 s || (7/2)- || %β-=100 |- |<sup>64</sup>Co || 0.30 s || 1+ || %β-=100 |- |<sup>65</sup>Co || 1.20 s || (7/2)- || %β-=100 |- |<sup>66</sup>Co || 0.233 s || (3+) || %β-=100 |- |<sup>67</sup>Co || 0.42 s || ( 7/2- ) || %β-=100 |- |<sup>68</sup>Co || 0.18 s || || %β-=100 |- |<sup>69</sup>Co || 0.27 s || || %β-=100 |- |<sup>70</sup>Co || 150 ms || || %β-=100, %β-n=2.5 sys |- |<sup>71</sup>Co || 210 ms || ( 7/2- ) || %β-=100, %β-n=2.6 sys |- |<sup>72</sup>Co || 90 ms || || %β-=100, %β-n=4.8 sys |- |<sup>73</sup>Co || || ( 7/2- ) || %β-=? |- |<sup>74</sup>Co || || || %β-=? |- |<sup>75</sup>Co || || ( 7/2- ) || %β-=? |} ==Nickel== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>52</sup>Ni || 38 ms || 0+ || %K+%β+=100, %Kp=17 |- |<sup>53</sup>Ni || 45 ms || ( 7/2- ) || %K+%β+=100, %Kp ~ 45 |- |<sup>54</sup>Ni || || 0+ || %K+%β+=100 |- |<sup>55</sup>Ni || 212.1 ms || 7/2- || %K+%β+=100 |- |<sup>56</sup>Ni || 6.077 d || 0+ || %K+%β+=100 |- |<sup>57</sup>Ni || 35.60 h || 3/2- || %K+%β+=100 |- |<sup>58</sup>Ni || stabil || 0+ || %Häufigkeit=68.077 |- |<sup>59</sup>Ni || 7.6·10<sup>4</sup> a || 3/2- || %K+%β+=100 |- |<sup>60</sup>Ni || stabil || 0+ || %Häufigkeit=26.223 |- |<sup>61</sup>Ni || stabil || 3/2- || %Häufigkeit=1.140 |- |<sup>62</sup>Ni || stabil || 0+ || %Häufigkeit=3.634 |- |<sup>63</sup>Ni || 100.1 a || 1/2- || %β-=100 |- |<sup>64</sup>Ni || stabil || 0+ || %Häufigkeit=0.926 |- |<sup>65</sup>Ni || 2.5172 h || 5/2- || %β-=100 |- |<sup>66</sup>Ni || 54.6 h || 0+ || %β-=100 |- |<sup>67</sup>Ni || 21 s || (1/2-) || %β-=100 |- |<sup>68</sup>Ni || 19 s || 0+ || %β-=100 |- |<sup>69</sup>Ni || 11.4 s || || %β-=100 |- |<sup>70</sup>Ni || || 0+ || |- |<sup>71</sup>Ni || 1.86 s || || %β-=100 |- |<sup>72</sup>Ni || 2.1 s || 0+ || %β-=100 |- |<sup>73</sup>Ni || 0.70 s || (7/2+) || %β-=100, %β-n=0.3 sys |- |<sup>74</sup>Ni || 0.54 s || 0+ || %β-=100, %β-n=4.5 sys |- |<sup>75</sup>Ni || 0.6 s || (7/2+) || %β-=100, %β-n=8.4 sys |- |<sup>76</sup>Ni || 0.24 s || 0+ || %β-=100, %β-n=? |} ==Kupfer== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>57</sup>Cu || 199.4 ms || 3/2- || %K+%β+=100 |- |<sup>58</sup>Cu || 3.204 s || 1+ || %K+%β+=100 |- |<sup>59</sup>Cu || 81.5 s || 3/2- || %K+%β+=100 |- |<sup>60</sup>Cu || 23.7 m || 2+ || %K+%β+=100 |- |<sup>61</sup>Cu || 3.333 h || 3/2- || %K+%β+=100 |- |<sup>62</sup>Cu || 9.74 m || 1+ || %K+%β+=100 |- |<sup>63</sup>Cu || stabil || 3/2- || %Häufigkeit=69.17 |- |<sup>64</sup>Cu || 12.700 h || 1+ || %K+%β+=61.0 , %β-=39.0 |- |<sup>65</sup>Cu || stabil || 3/2- || %Häufigkeit=30.83 |- |<sup>66</sup>Cu || 5.120 m || 1+ || %β-=100 |- |<sup>67</sup>Cu || 61.83 h || 3/2- || %β-=100 |- |<sup>68</sup>Cu || 31.1 s || 1+ || %β-=100 |- |<sup>68m1</sup>Cu || 3.75 m || (6-) || %IT=84 , %β-=16 |- |<sup>69</sup>Cu || 2.85 m || 3/2- || %β-=100 |- |<sup>70</sup>Cu || 4.5 s || (1+) || %β-=100 |- |<sup>70m1</sup>Cu || 47 s || (4)- || %β-=100 |- |<sup>71</sup>Cu || 19.5 s || ( 3/2- ) || %β-=100 |- |<sup>72</sup>Cu || 6.6 s || (1+) || %β-=100 |- |<sup>73</sup>Cu || 3.9 s || || %β-=100 |- |<sup>74</sup>Cu || 1.594 s || (1+,3+) || %β-=100 |- |<sup>75</sup>Cu || 1.224 s || || %β-=100, %β-n=3.5 |- |<sup>76</sup>Cu || 0.641 s || || %β-=100, %β-n=3 |- |<sup>76m1</sup>Cu || 1.27 s || || %β-=100 |- |<sup>77</sup>Cu || 469 ms || || %β-=100, %β-n=? |- |<sup>78</sup>Cu || 342 ms || || %β-=100 |- |<sup>79</sup>Cu || 188 ms || || %β-=100, %β-n=55 |} ==Zink== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>57</sup>Zn || 40 ms || ( 7/2- ) || %K+%β+=100, %Kp > 65 |- |<sup>58</sup>Zn || 65 ms || 0+ || %K+%β+=100 |- |<sup>59</sup>Zn || 182.0 ms || 3/2- || %K+%β+=100, %Kp=0.10 |- |<sup>60</sup>Zn || 2.38 m || 0+ || %K+%β+=100 |- |<sup>61</sup>Zn || 89.1 s || 3/2- || %K+%β+=100 |- |<sup>62</sup>Zn || 9.186 h || 0+ || %K+%β+=100 |- |<sup>63</sup>Zn || 38.47 m || 3/2- || %K+%β+=100 |- |<sup>64</sup>Zn || stabil || 0+ || %Häufigkeit=48.6 |- |<sup>65</sup>Zn || 244.26 d || 5/2- || %K+%β+=100 |- |<sup>66</sup>Zn || stabil || 0+ || %Häufigkeit=27.9 |- |<sup>67</sup>Zn || stabil || 5/2- || %Häufigkeit=4.1 |- |<sup>68</sup>Zn || stabil || 0+ || %Häufigkeit=18.8 |- |<sup>69</sup>Zn || 56.4 m || 1/2- || %β-=100 |- |<sup>69m1</sup>Zn || 13.76 h || 9/2+ || %IT=99.967 , %β-=0.033 |- |<sup>70</sup>Zn || 5·10<sup>14</sup> a || 0+ || %Häufigkeit=0.6 |- |<sup>71</sup>Zn || 2.45 m || 1/2- || %β-=100 |- |<sup>71m1</sup>Zn || 3.96 h || 9/2+ || %β-=100, %IT < 0.05 |- |<sup>72</sup>Zn || 46.5 h || 0+ || %β-=100 |- |<sup>73</sup>Zn || 23.5 s || (1/2)- || %β-=100 |- |<sup>73m1</sup>Zn || 5.8 s || (7/2+) || %β-=?, %IT=? |- |<sup>74</sup>Zn || 95.6 s || 0+ || %β-=100 |- |<sup>75</sup>Zn || 10.2 s || (7/2+) || %β-=100 |- |<sup>76</sup>Zn || 5.7 s || 0+ || %β-=100 |- |<sup>77</sup>Zn || 2.08 s || (7/2+) || %β-=100 |- |<sup>77m1</sup>Zn || 1.05 s || (1/2-) || %IT > 50, %β- < 50 |- |<sup>78</sup>Zn || 1.47 s || 0+ || %β-=100 |- |<sup>79</sup>Zn || 995 ms || (9/2+) || %β-=100, %β-n=1.3 |- |<sup>80</sup>Zn || 0.545 s || 0+ || %β-=100, %β-n=1.0 |- |<sup>81</sup>Zn || 0.29 s || || %β-=100, %β-n=7.5 |} ==Gallium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>61</sup>Ga || 0.15 s || (3/2- ) || %K+%β+=100 |- |<sup>62</sup>Ga || 116.12 ms|| 0+ || %K+%β+=100 |- |<sup>63</sup>Ga || 32.4 s || 3/2- ,5/2- || %K+%β+=100 |- |<sup>64</sup>Ga || 2.627 m || 0+ || %K+%β+=100 |- |<sup>65</sup>Ga || 15.2 m || 3/2- || %K+%β+=100 |- |<sup>66</sup>Ga || 9.49 h || 0+ || %K+%β+=100 |- |<sup>67</sup>Ga || 3.2612 d || 3/2- || %K=100 |- |<sup>68</sup>Ga || 67.629 m || 1+ || %K+%β+=100 |- |<sup>69</sup>Ga || stabil ||3/2- || %Häufigkeit=60.108 |- |<sup>70</sup>Ga || 21.14 m || 1+ || %β-=99.59 , %K=0.41 |- |<sup>71</sup>Ga || stabil ||3/2- || %Häufigkeit=39.892 |- |<sup>72</sup>Ga || 14.10 h || 3- || %β-=100 |- |<sup>72m1</sup>Ga || 39.68 ms|| ( 0+) || %IT=100 |- |<sup>73</sup>Ga || 4.86 h || 3/2- || %β-=100 |- |<sup>74</sup>Ga || 8.12 m || (3-) || %β-=100 |- |<sup>74m1</sup>Ga || 9.5 s || (0) || %IT > 50, %β- < 50 |- |<sup>75</sup>Ga || 126 s || 3/2- || %β-=100 |- |<sup>76</sup>Ga || 32.6 s || (2+,3+) || %β-=100 |- |<sup>77</sup>Ga || 13.2 s || (3/2- ) || %β-=100 |- |<sup>78</sup>Ga || 5.09 s || (3+) || %β-=100 |- |<sup>79</sup>Ga || 2.847 s || (3/2- ) || %β-=100, %β-n=0.089 |- |<sup>80</sup>Ga || 1.697 s || (3) || %β-=100, %β-n=0.89 |- |<sup>81</sup>Ga || 1.217 s || (5/2- ) || %β-=100 , %β-n=11.9 |- |<sup>82</sup>Ga || 0.599 s || (1,2,3) || %β-=100, %β-n=22.3 |- |<sup>83</sup>Ga || 0.31 s || || %β-=100, %β-n=40 |- |<sup>84</sup>Ga || 85 ms|| || %β-=100, %β-n=70 |} ==Germanium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>61</sup>Ge || 40 ms|| (3/2- ) || %K+%β+=100, %Kp ~ 80 |- |<sup>62</sup>Ge || || 0+ || %K+%β+=100 |- |<sup>63</sup>Ge || 95 ms|| || %K+%β+=100 |- |<sup>64</sup>Ge || 63.7 s || 0+ || %K+%β+=100 |- |<sup>65</sup>Ge || 30.9 s || (3/2) ||- %K+%β+=100, %Kp=0.011 |- |<sup>66</sup>Ge || 2.26 h || 0+ || %K+%β+=100 |- |<sup>67</sup>Ge || 18.9 m || 1/2- || %K+%β+=100 |- |<sup>68</sup>Ge || 270.8 d || 0+ || %K=100 |- |<sup>69</sup>Ge || 39.05 h || 5/2- || %K+%β+=100 |- |<sup>70</sup>Ge || stabil || 0+ || %Häufigkeit=21.23 |- |<sup>71</sup>Ge || 11.43 d || 1/2- || %K=100 |- |<sup>71m1</sup>Ge || 20.40 ms|| 9/2+ || %IT=100 |- |<sup>72</sup>Ge || stabil || 0+ || %Häufigkeit=27.66 |- |<sup>73</sup>Ge || stabil ||9/2+ || %Häufigkeit=7.73 |- |<sup>73m1</sup>Ge || 0.499 s || 1/2- || %IT=100 |- |<sup>74</sup>Ge || stabil || 0+ || %Häufigkeit=35.94 |- |<sup>75</sup>Ge || 82.78 m || 1/2- || %β-=100 |- |<sup>75m1</sup>Ge || 47.7 s || 7/2+ || %IT=99.970 , %β-=0.030 |- |<sup>76</sup>Ge || stabil || 0+ || %Häufigkeit=7.44 |- |<sup>77</sup>Ge || 11.30 h || 7/2+ || %β-=100 |- |<sup>77m1</sup>Ge || 52.9 s || 1/2- || %β-=81 , %IT=19 |- |<sup>78</sup>Ge || 88.0 m || 0+ || %β-=100 |- |<sup>79</sup>Ge || 18.98 s || (1/2 ) ||- %β-=100 |- |<sup>79m1</sup>Ge || 39.0 s || (7/2+) || %β-=96 , %IT=4 |- |<sup>80</sup>Ge || 29.5 s || 0+ || %β-=100 |- |<sup>81</sup>Ge || 7.6 s || (9/2+) || %β-=100 |- |<sup>81m1</sup>Ge || 7.6 s || (1/2+) || %β-=100 |- |<sup>82</sup>Ge || 4.60 s || 0+ || %β-=100 |- |<sup>83</sup>Ge || 1.85 s || (5/2+) || %β-=100 |} ==Arsen== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>65</sup>As || 0.19 s || || %K+%β+=100 |- |<sup>66</sup>As || 95.77 ms|| || %K+%β+=100 |- |<sup>67</sup>As || 42.5 s || (5/2- ) || %K+%β+=100 |- |<sup>68</sup>As || 151.6 s || 3+ || %K+%β+=100 |- |<sup>69</sup>As || 15.2 m || 5/2- || %K+%β+=100 |- |<sup>70</sup>As || 52.6 m || 4(+) || %K+%β+=100 |- |<sup>71</sup>As || 65.28 h || 5/2- || %K+%β+=100 |- |<sup>72</sup>As || 26.0 h || 2- || %K+%β+=100 |- |<sup>73</sup>As || 80.30 d || 3/2- || %K=100 |- |<sup>74</sup>As || 17.77 d || 2- || %β-=34 , %K+%β+=66 |- |<sup>75</sup>As || stabil ||3/2- || %Häufigkeit=100 |- |<sup>75m1</sup>As || 16.79 ms|| 9/2+ || %IT=100 |- |<sup>76</sup>As || 1.0778 d || 2- || %β-=100 |- |<sup>77</sup>As || 38.83 h || 3/2- || %β-=100 |- |<sup>78</sup>As || 90.7 m || 2- || %β-=100 |- |<sup>79</sup>As || 9.01 m || 3/2- || %β-=100 |- |<sup>80</sup>As || 15.2 s || 1+ || %β-=100 |- |<sup>81</sup>As || 33.3 s || 3/2- || %β-=100 |- |<sup>82</sup>As || 19.1 s || (1+) || %β-=100 |- |<sup>82m1</sup>As || 13.6 s || (5-) || %β-=100 |- |<sup>83</sup>As || 13.4 s || (5/2- ,3/2- ) || %β-=100 |- |<sup>84</sup>As || 4.5 s || (3-) || %β-=100, %β-n=0.28 |- |<sup>85</sup>As || 2.021 s || (3/2- ) || %β-=100, %β-n=59.4 |- |<sup>86</sup>As || 0.945 s || || %β-=100, %β-n=33 |- |<sup>87</sup>As || 0.48 s || (3/2- ) || %β-=100, %β-n=15.4 |} ==Selen== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>67</sup>Se || 60 ms|| || %K+%β+=100, %Kp=0.5 |- |<sup>68</sup>Se || 35.5 s || 0+ || %K+%β+=100 |- |<sup>69</sup>Se || 27.4 s || (3/2- ) || %K+%β+=100, %Kp=0.045 |- |<sup>70</sup>Se || 41.1 m || 0+ || %K+%β+=100 |- |<sup>71</sup>Se || 4.74 m || 3/2- ,5/2- || %K+%β+=100 |- |<sup>72</sup>Se || 8.40 d || 0+ || %K=100 |- |<sup>73</sup>Se || 7.15 h || 9/2+ || %K+%β+=100 |- |<sup>73m1</sup>Se || 39.8 m || 3/2- || %K+%β+=27.4 , %IT=72.6 |- |<sup>74</sup>Se || stabil || 0+ || %Häufigkeit=0.89 |- |<sup>75</sup>Se || 119.779 d || 5/2+ || %K=100 |- |<sup>76</sup>Se || stabil || 0+ || %Häufigkeit=9.36 |- |<sup>77</sup>Se || stabil ||1/2- || %Häufigkeit=7.63 |- |<sup>77m1</sup>Se || 17.36 s || 7/2+ || %IT=100 |- |<sup>78</sup>Se || stabil || 0+ || %Häufigkeit=23.78 |- |<sup>79</sup>Se || 1.13·10<sup>6</sup> a || 7/2+ || %β-=100 |- |<sup>79m1</sup>Se || 3.92 m || 1/2- || %IT=99.944 , %β-=0.056 |- |<sup>80</sup>Se || stabil || 0+ || %Häufigkeit=49.61 |- |<sup>81</sup>Se || 18.45 m || 1/2- || %β-=100 |- |<sup>81m1</sup>Se || 57.28 m || 7/2+ || %IT=99.948 , %β-=0.052 |- |<sup>82</sup>Se || 1.08·10<sup>20</sup> a || 0+ || %Häufigkeit=8.73, %ββ=100 |- |<sup>83</sup>Se || 22.3 m || 9/2+ || %β-=100 |- |<sup>83m1</sup>Se || 70.1 s || 1/2- || %β-=100 |- |<sup>84</sup>Se || 3.10 m || 0+ || %β-=100 |- |<sup>85</sup>Se || 31.7 s || (5/2+) || %β-=100 |- |<sup>86</sup>Se || 15.3 s || 0+ || %β-=100 |- |<sup>87</sup>Se || 5.29 s || (5/2+) || %β-=100, %β-n=0.36 |- |<sup>88</sup>Se || 1.53 s || 0+ || %β-=100, %β-n=0.99 |- |<sup>89</sup>Se || 0.41 s || (5/2+) || %β-=100, %β-n=7.8 |- |<sup>90</sup>Se || || 0+ || |- |<sup>91</sup>Se || 0.27 s || || %β-=100, %β-n=21 |} ==Brom== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>70</sup>Br || 79.1 ms|| || %K+%β+=100 |- |<sup>70m1</sup>Br || 2.2 s || || %K+%β+=100 |- |<sup>71</sup>Br || 21.4 s || 5/2- || %K+%β+=100 |- |<sup>72</sup>Br || 78.6 s || 3+ || %K+%β+=100 |- |<sup>72m1</sup>Br || 10.6 s || 1- || %IT ~ 100, %K+%β+=? |- |<sup>73</sup>Br || 3.4 m || 1/2- || %K+%β+=100 |- |<sup>74</sup>Br || 25.4 m || (0-) || %K+%β+=100 |- |<sup>74m1</sup>Br || 46 m || 4(+) || %K+%β+=100 |- |<sup>75</sup>Br || 96.7 m || 3/2- || %K+%β+=100 |- |<sup>76</sup>Br || 16.2 h || 1- || %K+%β+=100 |- |<sup>76m1</sup>Br || 1.31 s || (4) ||+ %IT > 99.4, %K+%β+ < 0.6 |- |<sup>77</sup>Br || 57.036 h || 3/2- || %K+%β+=100 |- |<sup>77m1</sup>Br || 4.28 m || 9/2+ || %IT=100 |- |<sup>78</sup>Br || 6.46 m || 1+ || %K+%β+=100, %β- < 0.01 |- |<sup>78m1</sup>Br || 119.2 μs || (4+) || |- |<sup>79</sup>Br || stabil || 3/2- || %Häufigkeit=50.69 |- |<sup>79m1</sup>Br || 4.86 s || 9/2+ || %IT=100 |- |<sup>80</sup>Br || 17.68 m || 1+ || %β-=91.7 , %K+%β+=8.3 |- |<sup>80m1</sup>Br || 4.4205 h || 5- || %IT=100 |- |<sup>81</sup>Br || stabil ||3/2- || %Häufigkeit=49.31 |- |<sup>82</sup>Br || 35.30 h || 5- || %β-=100 |- |<sup>82m1</sup>Br || 6.13 m || 2- || %IT=97.6 , %β-=2.4 |- |<sup>83</sup>Br || 2.40 h || 3/2- || %β-=100 |- |<sup>84</sup>Br || 31.80 m || 2- || %β-=100 |- |<sup>84m1</sup>Br || 6.0 m || 6- || %β-=100 |- |<sup>85</sup>Br || 2.90 m || 3/2- || %β-=100 |- |<sup>86</sup>Br || 55.1 s || (2- ) || %β-=100 |- |<sup>87</sup>Br || 55.60 s || 3/2- || %β-=100, %β-n=2.52 |- |<sup>88</sup>Br || 16.34 s || (1,2- ) || %β-=100, %β-n=6.58 |- |<sup>89</sup>Br || 4.348 s || (3/2- ,5/2- ) || %β-=100, %β-n=13.8 |- |<sup>90</sup>Br || 1.91 s || || %β-n=25.2 , %β-=100 |- |<sup>91</sup>Br || 0.541 s || || %β-=100, %β-n=18.3 |- |<sup>92</sup>Br || 0.343 s || (2- ) || %β-=100, %β-n=33 |- |<sup>93</sup>Br || 102 ms|| (5/2- ) || %β-=100, %β-n=10 +5-3 |- |<sup>94</sup>Br || 70 ms|| || %β-=100, %β-n=30 |} ==Krypton== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>71</sup>Kr || 64 ms || || %K+%β+=100, %Kp=5.2 |- |<sup>72</sup>Kr || 17.2 s || 0+ || %K+%β+=100 |- |<sup>73</sup>Kr || 27.0 s || 5/2- || %K+%β+=100, %Kp=0.68 |- |<sup>74</sup>Kr || 11.50 m || 0+ || %K+%β+=100 |- |<sup>75</sup>Kr || 4.3 m || (5/2) + || %K+%β+=100 |- |<sup>76</sup>Kr || 14.8 h || 0+ || %K+%β+=100 |- |<sup>77</sup>Kr || 74.4 m || 5/2+ || %K+%β+=100 |- |<sup>78</sup>Kr || stabil || 0+ || %Häufigkeit=0.35 |- |<sup>79</sup>Kr || 35.04 h || 1/2- || %K+%β+=100 |- |<sup>79m1</sup>Kr || 50 s || 7/2+ || %IT=100 |- |<sup>80</sup>Kr || stabil || 0+ || %Häufigkeit=2.25 |- |<sup>81</sup>Kr || 2.29·10<sup>5</sup> a || 7/2+ || %K=100 |- |<sup>81m1</sup>Kr || 13.10 s || 1/2- || %IT=99.9975 , %K=2.5·10<sup>-3</sup> |- |<sup>82</sup>Kr || stabil || 0+ || %Häufigkeit=11.6 |- |<sup>83</sup>Kr || stabil ||9/2+ || %Häufigkeit=11.5 |- |<sup>83m1</sup>Kr || 1.83 h || 1/2- || %IT=100 |- |<sup>84</sup>Kr || stabil || 0+ || %Häufigkeit=57.0 |- |<sup>85</sup>Kr || 10.756 a || 9/2+ || %β-=100 |- |<sup>85m1</sup>Kr || 4.480 h || 1/2- || %IT=21.4 , %β-=78.6 |- |<sup>86</sup>Kr || stabil || 0+ || %Häufigkeit=17.3 |- |<sup>87</sup>Kr || 76.3 m || 5/2+ || %β-=100 |- |<sup>88</sup>Kr || 2.84 h || 0+ || %β-=100 |- |<sup>89</sup>Kr || 3.15 m || (3/2+,5/2+) || %β-=100 |- |<sup>90</sup>Kr || 32.32 s || 0+ || %β-=100 |- |<sup>91</sup>Kr || 8.57 s || (5/2+) || %β-=100 |- |<sup>92</sup>Kr || 1.840 s || 0+ || %β-=100, %β-n=0.033 |- |<sup>93</sup>Kr || 1.286 s || (1/2+) || %β-=100, %β-n=1.95 |- |<sup>94</sup>Kr || 0.20 s || 0+ || %β-=100, %β-n=5.7 |- |<sup>95</sup>Kr || 0.78 s || 1/2 || %β-=100 |} ==Rubidium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>74</sup>Rb || 64.9 ms || (0+)|| %K+%β+=100 |- |<sup>75</sup>Rb || 19.0 s || (3/2- ,5/2-) || %K+%β+=100 |- |<sup>76</sup>Rb || 36.5 s || 1(-) || %K+%β+=100 |- |<sup>77</sup>Rb || 3.77 m || 3/2- || %K+%β+=100 |- |<sup>78</sup>Rb || 17.66 m || 0(+) || %K+%β+=100 |- |<sup>78m1</sup>Rb || 5.74 m || 4(-) || %K+%β+=90 , %IT=10 |- |<sup>79</sup>Rb || 22.9 m || 5/2+ || %K+%β+=100 |- |<sup>80</sup>Rb || 34 s || 1+ || %K+%β+=100 |- |<sup>81</sup>Rb || 4.576 h || 3/2- || %K+%β+=100 |- |<sup>81m1</sup>Rb || 30.5 m || 9/2+ || %IT=97.6 , %K+%β+ =2.4 |- |<sup>82</sup>Rb || 1.273 m || 1+ || %K+%β+=100 |- |<sup>82m1</sup>Rb || 6.472 h || 5- || %K+%β+=100, %IT<0.33 |- |<sup>83</sup>Rb || 86.2 d || 5/2- || %K=100 |- |<sup>83m1</sup>Rb || 7.8 ms || 9/2+ || %IT=?, %K+%β+=? |- |<sup>84</sup>Rb || 32.77 d || 2- || %β-=3.8 , %K+%β+=96.2 |- |<sup>84m1</sup>Rb || 20.26 m || 6- || %IT=100 |- |<sup>85</sup>Rb || stabil || 5/2- || %Häufigkeit=72.165 |- |<sup>86</sup>Rb || 18.631 d || 2- || %β-=99.9948 , %K=0.0052 |- |<sup>86m1</sup>Rb || 1.017 m || 6- || %IT=100 |- |<sup>87</sup>Rb || 4.75·10<sup>10</sup> a || 3/2- || %Häufigkeit=27.835, %β-=100 |- |<sup>88</sup>Rb || 17.78 m || 2- || %β-=100 |- |<sup>89</sup>Rb || 15.15 m || 3/2- || %β-=100 |- |<sup>90</sup>Rb || 158 s || 0- || %β-=100 |- |<sup>90m1</sup>Rb || 258 s || 3- || %β-=97.4 , %IT=2.6 |- |<sup>91</sup>Rb || 58.4 s || 3/2(-) || %β-=100 |- |<sup>92</sup>Rb || 4.492 s || 0- || %β-=100, %β-n=0.0107 |- |<sup>93</sup>Rb || 5.84 s || 5/2- || %β-=100, %β-n=1.39 |- |<sup>94</sup>Rb || 2.702 s || 3(-) || %β-=100, %β-n=10.4 |- |<sup>95</sup>Rb || 377.5 ms || 5/2- || %β-=100, %β-n=8.73 |- |<sup>96</sup>Rb || 0.199 s || 2+ || %β-=100, %β-n=13.8 |- |<sup>97</sup>Rb || 169.9 ms || 3/2(+) || %β-=100, %β-n=25.1 |- |<sup>98</sup>Rb || 114 ms || (1,0) || %β-=100, %β-n=13.6 , %β-2n=0.051 |- |<sup>98m1</sup>Rb || 96 ms || (4,5) || %β-=100 |- |<sup>99</sup>Rb || 50.3 ms || (5/2+ ) || %β-=100, %β-n=20.7 |- |<sup>100</sup>Rb || 51 ms || || %β-=100, %β-n=6 , %β-2n=0.16 |- |<sup>101</sup>Rb || 32 ms || (3/2+ ) || %β-=100, %β-n=28 |- |<sup>102</sup>Rb || 37 ms || || %β-=100 , %β-n=18 |} ==Strontium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>75</sup>Sr || 71 ms || || %K+%β+=100, %Kp=6.5 |- |<sup>76</sup>Sr || 8.9 s || 0+ || %K+%β+=100 |- |<sup>77</sup>Sr || 9.0 s || 5/2+ || %K+%β+=100 , %Kp < 0.25 |- |<sup>78</sup>Sr || 2.5 m || 0+ || %K+%β+=100 |- |<sup>79</sup>Sr || 2.25 m || 3/2(-) || %K+%β+=100 |- |<sup>80</sup>Sr || 106.3 m || 0+ || %K+%β+=100 |- |<sup>81</sup>Sr || 22.3 m || 1/2- || %K+%β+=100 |- |<sup>82</sup>Sr || 25.55 d || 0+ || %K=100 |- |<sup>83</sup>Sr || 32.41 h || 7/2+ || %K+%β+=100 |- |<sup>83m1</sup>Sr || 4.95 s || 1/2- || %IT=100 |- |<sup>84</sup>Sr || stabil || 0+ || %Häufigkeit=0.56 |- |<sup>85</sup>Sr || 64.84 d || 9/2+ || %K=100 |- |<sup>85m1</sup>Sr || 67.63 m || 1/2- || %IT=86.6 , %K+%β+=13.4 |- |<sup>86</sup>Sr || stabil || 0+ || %Häufigkeit=9.86 |- |<sup>87</sup>Sr || stabil || 9/2+ || %Häufigkeit=7.00 |- |<sup>87m1</sup>Sr || 2.803 h || 1/2- || %K=0.30 , %IT=99.70 |- |<sup>88</sup>Sr || stabil || 0+ || %Häufigkeit=82.58 |- |<sup>89</sup>Sr || 50.53 d || 5/2+ || %β-=100 |- |<sup>90</sup>Sr || 28.79 a || 0+ || %β-=100 |- |<sup>91</sup>Sr || 9.63 h || 5/2+ || %β-=100 |- |<sup>92</sup>Sr || 2.71 h || 0+ || %β-=100 |- |<sup>93</sup>Sr || 7.423 m || 5/2+ || %β-=100 |- |<sup>94</sup>Sr || 75.3 s || 0+ || %β-=100 |- |<sup>95</sup>Sr || 23.90 s || 1/2+ || %β-=100 |- |<sup>96</sup>Sr || 1.07 s || 0+ || %β-=100 |- |<sup>97</sup>Sr || 426 ms || 1/2+ || %β-=100, %β-n=0.005 |- |<sup>98</sup>Sr || 0.653 s || 0+ || %β-=100, %β-n=0.18 |- |<sup>99</sup>Sr || 0.269 s || 3/2+ || %β-=100, %β-n=0.100 |- |<sup>100</sup>Sr || 202 ms || 0+ || %β-=100, %β-n=0.78 |- |<sup>101</sup>Sr || 118 ms || (5/2-) || %β-=100, %β-n=2.37 |} ==Yttrium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>79</sup>Y || 14.8 s || (5/2+ ) || %K+%β+=100, %Kp=? |- |<sup>80</sup>Y || 35 s || (3,4,5) || %K+%β+=100 |- |<sup>81</sup>Y || 70.4 s || (5/2+ ) || %K+%β+=100 |- |<sup>82</sup>Y || 9.5 s || 1+ || %K+%β+=100 |- |<sup>83</sup>Y || 7.08 m || (9/2+ ) || %K+%β+=100 |- |<sup>83m1</sup>Y || 2.85 m || (3/2-) || %K+%β+=60 , %IT=40 |- |<sup>84</sup>Y || 4.6 s || 1+ || %K+%β+=100 |- |<sup>84m1</sup>Y || 39.5 m || (5-) || %K+%β+=100 |- |<sup>85</sup>Y || 2.68 h || (1/2) - || %K+%β+=100 |- |<sup>85m1</sup>Y || 4.86 h || 9/2+ || %K+%β+=100, %IT < 2·10<sup>-3</sup> |- |<sup>86</sup>Y || 14.74 h || 4- || %K+%β+=100 |- |<sup>86m1</sup>Y || 48 m || (8+ ) || %IT=99.31 , %K+%β+=0.69 |- |<sup>87</sup>Y || 79.8 h || 1/2- || %K+%β+=100 |- |<sup>87m1</sup>Y || 13.37 h || 9/2+ || %IT=98.43 , %K+%β+=1.57 |- |<sup>88</sup>Y || 106.65 d || 4- || %K+%β+=100 |- |<sup>88m1</sup>Y || 13.9 ms || (8) + || %IT=100 |- |<sup>89</sup>Y || stabil || 1/2- || %Häufigkeit=100 |- |<sup>89m1</sup>Y || 16.06 s || 9/2+ || %IT=100 |- |<sup>90</sup>Y || 64.00 h || 2- || %β-=100 |- |<sup>90m1</sup>Y || 3.19 h || 7+ || %IT=99.9982 , %β-=0.0018 |- |<sup>91</sup>Y || 58.51 d || 1/2- || %β-=100 |- |<sup>91m1</sup>Y || 49.71 m || 9/2+ || %IT=100, %β-<1.5 |- |<sup>92</sup>Y || 3.54 h || 2- || %β-=100 |- |<sup>93</sup>Y || 10.18 h || 1/2- || %β-=100 |- |<sup>93m1</sup>Y || 0.82 s || 7/2+ || %IT=100 |- |<sup>94</sup>Y || 18.7 m || 2- || %β-=100 |- |<sup>95</sup>Y || 10.3 m || 1/2- || %β-=100 |- |<sup>96</sup>Y || 5.34 s || 0- || %β-=100 |- |<sup>96m1</sup>Y || 9.6 s || (8+ ) || %β- ~ 100 |- |<sup>97</sup>Y || 3.75 s || (1/2-) || %β-=100, %β-n=0.055 |} ==Zirkonium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>81</sup>Zr || 15 s || || %K+%β+=100, %Kp=? |- |<sup>82</sup>Zr || 32 s || 0+ || %K+%β+=100 |- |<sup>83</sup>Zr || 44 s || (1/2-) || %K+%β+=100, %Kp=? |- |<sup>84</sup>Zr || 25.9 m || 0+ || %K+%β+=100 |- |<sup>85</sup>Zr || 7.86 m || 7/2+ || %K+%β+=100 |- |<sup>85m1</sup>Zr || 10.9 s || (1/2-) || %K+%β+ > 8, %IT < 92 |- |<sup>86</sup>Zr || 16.5 h || 0+ || %K+%β+=100 |- |<sup>87</sup>Zr || 1.68 h || (9/2) + || %K+%β+=100 |- |<sup>87m1</sup>Zr || 14.0 s || (1/2) - || %IT=100 |- |<sup>88</sup>Zr || 83.4 d || 0+ || %K=100 |- |<sup>89</sup>Zr || 78.41 h || 9/2+ || %K+%β+=100 |- |<sup>89m1</sup>Zr || 4.18 m || 1/2- || %K+%β+=6.23 , %IT=93.77 |- |<sup>90</sup>Zr || stabil || 0+ || %Häufigkeit=51.45 |- |<sup>90m1</sup>Zr || 809.2 ms || 5- || %IT=100 |- |<sup>91</sup>Zr || stabil || 5/2+ || %Häufigkeit=11.22 |- |<sup>92</sup>Zr || stabil || 0+ || %Häufigkeit=17.15 |- |<sup>93</sup>Zr || 1.53·10<sup>6</sup> a || 5/2+ || %β-=100 |- |<sup>94</sup>Zr || stabil || 0+ || %Häufigkeit=17.38 |- |<sup>95</sup>Zr || 64.02 d || 5/2+ || %β-=100 |- |<sup>96</sup>Zr || 3.8·10<sup>19</sup> a || 0+ || %Häufigkeit=2.80, %β- β-=100 |- |<sup>97</sup>Zr || 16.91 h || 1/2+ || %β-=100 |- |<sup>98</sup>Zr || 30.7 s || 0+ || %β-=100 |- |<sup>99</sup>Zr || 2.1 s || (1/2+ ) || %β-=100 |- |<sup>100</sup>Zr || 7.1 s || 0+ || %β-=100 |- |<sup>101</sup>Zr || 2.3 s || (3/2+ ) || %β-=100 |- |<sup>102</sup>Zr || 2.9 s || 0+ || %β-=100 |- |<sup>103</sup>Zr || 1.3 s || (5/2-) || %β-=100 |- |<sup>104</sup>Zr || 1.2 s || 0+ || %β-=100 |} ==Niob== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>83</sup>Nb || 4.1 s || (5/2+ ) || %K+%β+=100 |- |<sup>84</sup>Nb || 12 s || 3+ || %K+%β+=100, %Kp=? |- |<sup>85</sup>Nb || 20.9 s || (9/2+ ) || %K+%β+=100 |- |<sup>86</sup>Nb || 88 s || (5+ ) || %K+%β+=100 |- |<sup>86m1</sup>Nb || 56 s || || %K+%β+=100 |- |<sup>87</sup>Nb || 2.6 m || (9/2+ ) || %K+%β+=100 |- |<sup>87m1</sup>Nb || 3.7 m || (1/2-) || %K+%β+=100 |- |<sup>88</sup>Nb || 14.5 m || (8+ ) || %K+%β+=100 |- |<sup>88m1</sup>Nb || 7.8 m || (4-) || %K+%β+=100 |- |<sup>89</sup>Nb || 1.9 h || (9/2+ ) || %K+%β+=100 |- |<sup>89m1</sup>Nb || 1.18 h || (1/2) - || %K+%β+=100 |- |<sup>90</sup>Nb || 14.60 h || 8+ || %K+%β+=100 |- |<sup>90m1</sup>Nb || 18.81 s || 4- || %IT=100 |- |<sup>90m2</sup>Nb || 6.19 ms || 1+ || %IT=100 |- |<sup>91</sup>Nb || 680 a || 9/2+ || %K+%β+=100 |- |<sup>91m1</sup>Nb || 60.86 d || 1/2- || %IT=93 , %K+%β+=7 |- |<sup>92</sup>Nb || 3.47·10<sup>7</sup> a || (7) + || %K+%β+=100, %β- < 0.05 |- |<sup>92m1</sup>Nb || 10.15 d || (2) + || %K+%β+=100 |- |<sup>93</sup>Nb || stabil || 9/2+ || %Häufigkeit=100 |- |<sup>93m1</sup>Nb || 16.13 a || 1/2- || %IT=100 |- |<sup>94</sup>Nb || 2.03·10<sup>4</sup> a || (6) + || %β-=100 |- |<sup>94m1</sup>Nb || 6.263 m || 3+ || %IT=99.50 , %β-=0.50 |- |<sup>95</sup>Nb || 34.975 d || 9/2+ || %β-=100 |- |<sup>95m1</sup>Nb || 86.6 h || 1/2- || %β-=5.6 , %IT=94.4 |- |<sup>96</sup>Nb || 23.35 h || 6+ || %β-=100 |- |<sup>97</sup>Nb || 72.1 m || 9/2+ || %β-=100 |- |<sup>97m1</sup>Nb || 52.7 s || 1/2- || %IT=100 |- |<sup>98</sup>Nb || 2.86 s || 1+ || %β-=100 |- |<sup>98m1</sup>Nb || 51.3 m || (5+ ) || %β-=99.9 , %IT < 0.2 |- |<sup>99</sup>Nb || 15.0 s || 9/2+ || %β-=100 |} ==Molybdän== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>86</sup>Mo || 19.6 s || 0+ || %K+%β+=100 |- |<sup>87</sup>Mo || 13.4 s || (7/2+ ) || %K+%β+=100, %β+P=? |- |<sup>88</sup>Mo || 8.0 m || 0+ || %K+%β+=100 |- |<sup>89</sup>Mo || 2.04 m || (9/2+ ) || %K+%β+=100 |- |<sup>89m1</sup>Mo || 190 ms || (1/2-) || %IT=100 |- |<sup>90</sup>Mo || 5.56 h || 0+ || %K+%β+=100 |- |<sup>91</sup>Mo || 15.49 m || 9/2+ || %K+%β+=100 |- |<sup>91m1</sup>Mo || 65.0 s || 1/2- || %K+%β+=49.9 , %IT=50.1 |- |<sup>92</sup>Mo || stabil || 0+ || %Häufigkeit=14.84 |- |<sup>93</sup>Mo || 4.0·10<sup>3</sup> a || 5/2+ || %K=100 |- |<sup>93m1</sup>Mo || 6.85 h || 21/2+ || %IT=99.88 , %K+%β+=0.12 |- |<sup>94</sup>Mo || stabil || 0+ || %Häufigkeit=9.25 |- |<sup>95</sup>Mo || stabil || 5/2+ || %Häufigkeit=15.92 |- |<sup>96</sup>Mo || stabil || 0+ || %Häufigkeit=16.68 |- |<sup>97</sup>Mo || stabil || 5/2+ || %Häufigkeit=9.55 |- |<sup>98</sup>Mo || stabil || 0+ || %Häufigkeit=24.13 |- |<sup>99</sup>Mo || 65.94 h || 1/2+ || %β-=100 |- |<sup>100</sup>Mo || 1.00·10<sup>19</sup> a || 0+ || %Häufigkeit=9.63, %ββ=100 |- |<sup>101</sup>Mo || 14.61 m || 1/2+ || %β-=100 |- |<sup>102</sup>Mo || 11.3 m || 0+ || %β-=100 |- |<sup>103</sup>Mo || 67.5 s || (3/2+ ) || %β-=100 |- |<sup>104</sup>Mo || 60 s || 0+ || %β-=100 |- |<sup>105</sup>Mo || 35.6 s || (5/2-) || %β-=100 |- |<sup>106</sup>Mo || 8.4 s || 0+ || %β-=100 |- |<sup>107</sup>Mo || 3.5 s || || %β-=100 |- |<sup>108</sup>Mo || 1.09 s || 0+ || %β-=100 |- |<sup>109</sup>Mo || 0.53 s || || %β-=100 |- |<sup>110</sup>Mo || 0.30 s || 0+ || %β-=100 |} ==Technetium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>88</sup>Tc || 6.4 s || (6,7,8) || %K+%β+=100 |- |<sup>88m1</sup>Tc || 5.8 s || (2,3) || %K+%β+=100 |- |<sup>89</sup>Tc || 12.8 s || (9/2+ ) || %K+%β+=100 |- |<sup>89m1</sup>Tc || 12.9 s || (1/2-) || %K+%β+=100 |- |<sup>90</sup>Tc || 49.2 s || (8+ ) || %K+%β+=100 |- |<sup>90m1</sup>Tc || 8.7 s || 1+ || %K+%β+=100 |- |<sup>91</sup>Tc || 3.14 m || (9/2) + || %K+%β+=100 |- |<sup>91m1</sup>Tc || 3.3 m || (1/2) - || %K+%β+=100, %IT<1 |- |<sup>92</sup>Tc || 4.23 m || (8) + || %K+%β+=100 |- |<sup>93</sup>Tc || 2.75 h || 9/2+ || %K+%β+=100 |- |<sup>93m1</sup>Tc || 43.5 m || 1/2- || %IT=76.6 , %K+%β+=23.4 |- |<sup>94</sup>Tc || 293 m || 7+ || %K+%β+=100 |- |<sup>94m1</sup>Tc || 52.0 m || (2) + || %K+%β+=100, %IT<0.1 |- |<sup>95</sup>Tc || 20.0 h || 9/2+ || %K+%β+=100 |- |<sup>95m1</sup>Tc || 61 d || 1/2- || %K+%β+=96.12 , %IT=3.88 |- |<sup>96</sup>Tc || 4.28 d || 7+ || %K+%β+=100 |- |<sup>96m1</sup>Tc || 51.5 m || 4+ || %IT=98.0 , %K+%β+=2.0 |- |<sup>97</sup>Tc || 2.6·10<sup>6</sup> a || 9/2+ || %K=100 |- |<sup>97m1</sup>Tc || 90.1 d || 1/2- || %IT=100, %K<0.34 |- |<sup>98</sup>Tc || 4.2·10<sup>6</sup> a || (6) + || %β-=100 |- |<sup>99</sup>Tc || 2.111·10<sup>5</sup> a || 9/2+ || %β-=100 |- |<sup>99m1</sup>Tc || 6.01 h || 1/2- || %IT=99.9963 , %β-=0.0037 |- |<sup>100</sup>Tc || 15.8 s || 1+ || %β-=99.9982 , %K=0.0018 |- |<sup>101</sup>Tc || 14.22 m || 9/2+ || %β-=100 |- |<sup>102</sup>Tc || 5.28 s || 1+ || %β-=100 |- |<sup>102m1</sup>Tc || 4.35 m || (4,5) || %β-=98 , %IT=2 |- |<sup>103</sup>Tc || 54.2 s || 5/2+ || %β-=100 |- |<sup>104</sup>Tc || 18.3 m || (3+ ) || %β-=100 |- |<sup>105</sup>Tc || 7.6 m || (3/2-) || %β-=100 |} ==Ruthenium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>90</sup>Ru || 11 s || 0+ || %K+%β+=100 |- |<sup>91</sup>Ru || 9 s || (9/2+ ) || %K+%β+=100 |- |<sup>91m1</sup>Ru || 7.6 s || (1/2-) || %K+%β+=?, %Kp=?, %IT=? |- |<sup>92</sup>Ru || 3.65 m || 0+ || %K+%β+=100 |- |<sup>93</sup>Ru || 59.7 s || (9/2) + || %K+%β+=100 |- |<sup>93m1</sup>Ru || 10.8 s || (1/2) - || %IT=22.0 , %K+%β+=78.0 , %Kp=0.027 |- |<sup>94</sup>Ru || 51.8 m || 0+ || %K+%β+=100 |- |<sup>95</sup>Ru || 1.643 h || 5/2+ || %K+%β+=100 |- |<sup>96</sup>Ru || stabil || 0+ || %Häufigkeit=5.52 |- |<sup>97</sup>Ru || 2.9 d || 5/2+ || %K=100 |- |<sup>98</sup>Ru || stabil || 0+ || %Häufigkeit=1.88 |- |<sup>99</sup>Ru || stabil || 5/2+ || %Häufigkeit=12.7 |- |<sup>100</sup>Ru || stabil || 0+ || %Häufigkeit=12.6 |- |<sup>101</sup>Ru || stabil || 5/2+ || %Häufigkeit=17.0 |- |<sup>102</sup>Ru || stabil || 0+ || %Häufigkeit=31.6 |- |<sup>103</sup>Ru || 39.26 d || 3/2+ || %β-=100 |- |<sup>103m1</sup>Ru || 1.69 ms || 11/2- || %IT=100 |- |<sup>104</sup>Ru || stabil || 0+ || %Häufigkeit=18.7 |- |<sup>105</sup>Ru || 4.44 h || 3/2+ || %β-=100 |- |<sup>106</sup>Ru || 373.59 d || 0+ || %β-=100 |- |<sup>107</sup>Ru || 3.75 m || (5/2) + || %β-=100 |- |<sup>108</sup>Ru || 4.55 m || 0+ || %β-=100 |- |<sup>109</sup>Ru || 34.5 s || (5/2+ ) || %β-=100 |- |<sup>110</sup>Ru || 14.6 s || 0+ || %β-=100 |- |<sup>111</sup>Ru || 2.12 s || || %β-=100 |- |<sup>112</sup>Ru || 1.75 s || 0+ || %β-=100 |- |<sup>113</sup>Ru || 0.80 s || || %β-=100 |- |<sup>114</sup>Ru || 0.53 s || 0+ || %β-=100 |- |<sup>115</sup>Ru || 0.40 s || || %β-=100, %β-n=? |} ==Rhodium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>94</sup>Rh || 70.6 s || (3+ ) || %K+%β+=100, %Kp=1.8 |- |<sup>94m1</sup>Rh || 25.8 s || (8+ ) || %K+%β+=100 |- |<sup>95</sup>Rh || 5.02 m || (9/2) + || %K+%β+=100 |- |<sup>95m1</sup>Rh || 1.96 m || (1/2) - || %K+%β+=12 , %IT=88 |- |<sup>96</sup>Rh || 9.90 m || 6+ || %K+%β+=100 |- |<sup>96m1</sup>Rh || 1.51 m || 3+ || %IT=60 , %K+%β+=40 |- |<sup>97</sup>Rh || 30.7 m || (9/2) + || %K+%β+=100 |- |<sup>97m1</sup>Rh || 46.2 m || (1/2) - || %K+%β+=94.4 , %IT=5.6 |- |<sup>98</sup>Rh || 8.7 m || (2) + || %K+%β+=100 |- |<sup>98m1</sup>Rh || 3.5 m || (5+ ) || %K+%β+>0, %IT=? |- |<sup>99</sup>Rh || 16.1 d || 1/2- || %K+%β+=100 |- |<sup>99m1</sup>Rh || 4.7 h || 9/2+ || %K+%β+ > 99.84 , %IT<0.16 |- |<sup>100</sup>Rh || 20.8 h || 1- || %K+%β+=100 |- |<sup>100m1</sup>Rh || 4.6 m || (5+ ) || %IT ~ 98.3, %K+%β+ ~ 1.7 |- |<sup>101</sup>Rh || 3.3 a || 1/2- || %K=100 |- |<sup>101m1</sup>Rh || 4.34 d || 9/2+ || %K=92.80 , %IT=7.20 |- |<sup>102</sup>Rh || 207 d || (1- ,2-) || %β-=20 , %K+%β+=80 |- |<sup>102m1</sup>Rh || 2.9 a || 6(+) || %K+%β+=99.767 , %IT=0.233 |- |<sup>103</sup>Rh || stabil || 1/2- || %Häufigkeit=100 |- |<sup>103m1</sup>Rh || 56.12 m || 7/2+ || %IT=100 |- |<sup>104</sup>Rh || 42.3 s || 1+ || %β-= 99.55 , %K+%β+= 0.45 |- |<sup>104m1</sup>Rh || 4.34 m || 5+ || %IT=99.87 , %β-=0.13 |- |<sup>105</sup>Rh || 35.36 h || 7/2+ || %β-=100 |- |<sup>105m1</sup>Rh || 45 s || 1/2- || %IT=100 |- |<sup>106</sup>Rh || 29.80 s || 1+ || %β-=100 |- |<sup>106m1</sup>Rh || 131 m || (6) + || %β-=100 |- |<sup>107</sup>Rh || 21.7 m || 7/2+ || %β-=100 |- |<sup>108</sup>Rh || 16.8 s || 1+ || %β-=100 |- |<sup>108m1</sup>Rh || 6.0 m || (5+ ) || %β-=100 |- |<sup>109</sup>Rh || 80 s || 7/2+ || %β-=100 |} ==Palladium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>96</sup>Pd || 122 s || 0+ || %K+%β+=100 |- |<sup>97</sup>Pd || 3.10 m || (5/2+ ) || %K+%β+=100 |- |<sup>98</sup>Pd || 17.7 m || 0+ || %K+%β+=100 |- |<sup>99</sup>Pd || 21.4 m || (5/2) + || %K+%β+=100 |- |<sup>100</sup>Pd || 3.63 d || 0+ || %K=100 |- |<sup>101</sup>Pd || 8.47 h || 5/2+ || %K+%β+=100 |- |<sup>102</sup>Pd || stabil || 0+ || %Häufigkeit=1.02 |- |<sup>103</sup>Pd || 16.991 d || 5/2+ || %K=100 |- |<sup>104</sup>Pd || stabil || 0+ || %Häufigkeit=11.14 |- |<sup>105</sup>Pd || stabil || 5/2+ || %Häufigkeit=22.33 |- |<sup>106</sup>Pd || stabil || 0+ || %Häufigkeit=27.33 |- |<sup>107</sup>Pd || 6.5·10<sup>6</sup> a || 5/2+ || %β-=100 |- |<sup>107m1</sup>Pd || 21.3 s || 11/2- || %IT=100 |- |<sup>108</sup>Pd || stabil || 0+ || %Häufigkeit=26.46 |- |<sup>109</sup>Pd || 13.7012 h || 5/2+ || %β-=100 |- |<sup>109m1</sup>Pd || 4.696 m || 11/2- || %IT=100 |- |<sup>110</sup>Pd || stabil || 0+ || %Häufigkeit=11.72 |- |<sup>111</sup>Pd || 23.4 m || 5/2+ || %β-=100 |- |<sup>111m1</sup>Pd || 5.5 h || 11/2- || %IT=73 , %β-=27 |- |<sup>112</sup>Pd || 21.03 h || 0+ || %β-=100 |- |<sup>113</sup>Pd || 93 s || (5/2+ ) || %β-=100 |- |<sup>113m1</sup>Pd || 100 s || || %β-=? |- |<sup>113m2</sup>Pd || 0.3 s || (9/2-) || %IT=100 |- |<sup>114</sup>Pd || 2.42 m || 0+ || %β-=100 |- |<sup>115</sup>Pd || 25 s || (5/2+ ) || %β-=100 |- |<sup>115m1</sup>Pd || 50 s || (11/2-) || %β-=92.0 , %IT=8.0 |- |<sup>116</sup>Pd || 11.8 s || 0+ || %β-=100 |- |<sup>117</sup>Pd || 4.3 s || (5/2+ ) || %β-=100 |- |<sup>117m1</sup>Pd || 19.1 ms || (11/2-) || %IT=100 |- |<sup>118</sup>Pd || 1.9 s || 0+ || %β-=100 |- |<sup>119</sup>Pd || 0.92 s || || %β-=100 |- |<sup>120</sup>Pd || 0.5 s || 0+ || %β-=100 |} ==Silber== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>94</sup>Ag || 10 ms || 0+ || %K+%β+=100 |- |<sup>94m1</sup>Ag || 0.42 s || (9+ ) || %K+%β+=100, %Kp=? |- |<sup>95</sup>Ag || 2.0 s || || %K+%β+=100, %Kp=? |- |<sup>96</sup>Ag || 5.1 s || (8+ , 9+ ) || %K+%β+=100, %Kp=8.0 |- |<sup>97</sup>Ag || 19 s || (9/2+ ) || %K+%β+=100 |- |<sup>98</sup>Ag || 46.7 s || (5+ ) || %K+%β+=100 |- |<sup>99</sup>Ag || 124 s || (9/2) + || %K+%β+=100 |- |<sup>99m1</sup>Ag || 10.5 s || (1/2-) || %IT=100 |- |<sup>100</sup>Ag || 2.01 m || (5) + || %K+%β+=100 |- |<sup>100m1</sup>Ag || 2.24 m || (2) + || %K+%β+=?, %IT=? |- |<sup>101</sup>Ag || 11.1 m || 9/2+ || %K+%β+=100 |- |<sup>101m1</sup>Ag || 3.10 s || (1/2) - || %IT=100 |- |<sup>102</sup>Ag || 12.9 m || 5+ || %K+%β+=100 |- |<sup>102m1</sup>Ag || 7.7 m || 2+ || %IT=49 , %K+%β+=51 |- |<sup>103</sup>Ag || 65.7 m || 7/2+ || %K+%β+=100 |- |<sup>103m1</sup>Ag || 5.7 s || 1/2- || %IT=100 |- |<sup>104</sup>Ag || 69.2 m || 5+ || %K+%β+=100 |- |<sup>104m1</sup>Ag || 33.5 m || 2+ || %K+%β+=100, %IT < 0.07 |- |<sup>105</sup>Ag || 41.29 d || 1/2- || %K+%β+=100 |- |<sup>105m1</sup>Ag || 7.23 m || 7/2+ || %IT=99.66 , %K+%β+=0.34 |- |<sup>106</sup>Ag || 23.96 m || 1+ || %K+β+=99.5 , %β- < 1 |- |<sup>106m1</sup>Ag || 8.28 d || 6+ || %K+β+=100 |- |<sup>107</sup>Ag || stabil || 1/2- || %Häufigkeit=51.839 |- |<sup>107m1</sup>Ag || 44.3 s || 7/2+ || %IT=100 |- |<sup>108</sup>Ag || 2.37 m || 1+ || %β-=97.15 , %K+%β+=2.85 |- |<sup>108m1</sup>Ag || 418 a || 6+ || %IT=8.7 , %K+%β+=91.3 |- |<sup>109</sup>Ag || stabil || 1/2- || %Häufigkeit=48.161 |- |<sup>109m1</sup>Ag || 39.6 s || 7/2+ || %IT=100 |- |<sup>110</sup>Ag || 24.6 s || 1+ || %β-=99.70 , %K=0.30 |- |<sup>110m1</sup>Ag || 249.79 d || 6+ || %β-=98.64 , %IT=1.36 |- |<sup>111</sup>Ag || 7.45 d || 1/2- || %β-=100 |- |<sup>111m1</sup>Ag || 64.8 s || 7/2+ || %IT=99.3, %β-=0.7 |- |<sup>112</sup>Ag || 3.130 h || 2(-) || %β-=100 |- |<sup>113</sup>Ag || 5.37 h || 1/2- || %β-=100 |- |<sup>113m1</sup>Ag || 68.7 s || 7/2+ || %IT= 64 , %β-=36 |- |<sup>114</sup>Ag || 4.6 s || 1+ || %β-=100 |- |<sup>114m1</sup>Ag || 1.50 ms || (LE 6+ ) || %IT=100 |- |<sup>115</sup>Ag || 20.0 m || 1/2- || %β-=100 |- |<sup>115m1</sup>Ag || 18.0 s || 7/2+ || %β-=79.0 , %IT=21.0 |- |<sup>116</sup>Ag || 2.68 m || (2) - || %β-=100 |- |<sup>116m1</sup>Ag || 8.6 s || (5+ ) || %IT=6.0 , %β-=94.0 |- |<sup>117</sup>Ag || 72.8 s || (1/2-) || %β-=100 |- |<sup>117m1</sup>Ag || 5.34 s || (7/2+ ) || %β-=94.0 , %IT=6.0 |- |<sup>118</sup>Ag || 3.76 s || (1) - || %β-=100 |- |<sup>118m1</sup>Ag || 2.0 s || (4) + || %β-=59, %IT=41 |- |<sup>119</sup>Ag || 2.1 s || (7/2+ ) || %β-=100 |- |<sup>119m1</sup>Ag || 6.0 s || (1/2-) || %β-=100 |- |<sup>120</sup>Ag || 1.23 s || (3+ ) || %β-=100 |- |<sup>120m1</sup>Ag || 0.32 s || (6-) || %β- ~ 63, %IT ~ 37 |- |<sup>121</sup>Ag || 0.78 s || (7/2+ ) || %β-=100 , %β-n=0.080 |- |<sup>122</sup>Ag || 0.48 s || (3+ ) || %β-=100, %β-n=? |- |<sup>122m1</sup>Ag || 1.5 s || || %β-=100 |- |<sup>123</sup>Ag || 0.309 s || (7/2+ ) || %β-=100, %β-n=55 |- |<sup>124</sup>Ag || 0.172 s || || %β-=100 , %β-n > 0.1 |- |<sup>125</sup>Ag || 166 ms || || %β-=100, %β-n=? |- |<sup>126</sup>Ag || 107 ms || || %β-=100 |- |<sup>127</sup>Ag || 109 ms || || %β-=100 |- |<sup>128</sup>Ag || 58 ms || || %β-=100, %β-n=? |} ==Cadmium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>97</sup>Cd || 3 s || || %K+%β+=100, %Kp=? |- |<sup>98</sup>Cd || 9.2 s || 0+ || %K+%β+=100 |- |<sup>99</sup>Cd || 16 s || (5/2+ ) || %K+%β+=100, %Kp=0.17 +11-5, %Kα<1·10<sup>-4</sup> |- |<sup>100</sup>Cd || 49.1 s || 0+ || %K+%β+=100 |- |<sup>101</sup>Cd || 1.36 m || (5/2+ ) || %K+%β+=100 |- |<sup>102</sup>Cd || 5.5 m || 0+ || %K+%β+=100 |- |<sup>103</sup>Cd || 7.3 m || (5/2+ ) || %K+%β+=100 |- |<sup>104</sup>Cd || 57.7 m || 0+ || %K+%β+=100 |- |<sup>105</sup>Cd || 55.5 m || 5/2+ || %K+%β+ =100 |- |<sup>106</sup>Cd || stabil || 0+ || %Häufigkeit=1.25 |- |<sup>107</sup>Cd || 6.50 h || 5/2+ || %K+%β+=100 |- |<sup>108</sup>Cd || stabil || 0+ || %Häufigkeit=0.89 |- |<sup>109</sup>Cd || 462.6 d || 5/2+ || %K=100 |- |<sup>110</sup>Cd || stabil || 0+ || %Häufigkeit=12.49 |- |<sup>111</sup>Cd || stabil || 1/2+ || %Häufigkeit=12.80 |- |<sup>111m1</sup>Cd || 48.54 m || 11/2- || %IT=100 |- |<sup>112</sup>Cd || stabil || 0+ || %Häufigkeit=24.13 |- |<sup>113</sup>Cd || 7.7·10<sup>15</sup> a || 1/2+ || %Häufigkeit=12.22, %β-=100 |- |<sup>113m1</sup>Cd || 14.1 a || 11/2- || %β-=99.86, %IT=0.14 |- |<sup>114</sup>Cd || stabil || 0+ || %Häufigkeit=28.73 |- |<sup>115</sup>Cd || 53.46 h || 1/2+ || %β-=100 |- |<sup>115m1</sup>Cd || 44.6 d || 11/2- || %β-=100 |- |<sup>116</sup>Cd || stabil || 0+ || %Häufigkeit=7.49 |- |<sup>117</sup>Cd || 2.49 h || 1/2+ || %β-=100 |- |<sup>117m1</sup>Cd || 3.36 h || (11/2) - || %β-=100 |- |<sup>118</sup>Cd || 50.3 m || 0+ || %β-=100 |- |<sup>119</sup>Cd || 2.69 m || 3/2+ || %β-=100 |- |<sup>119m1</sup>Cd || 2.20 m || (11/2-) || %β-=100 |- |<sup>120</sup>Cd || 50.80 s || 0+ || %β-=100 |- |<sup>121</sup>Cd || 13.5 s || (3/2+ ) || %β-=100 |- |<sup>121m1</sup>Cd || 8.3 s || (11/2-) || %β-=100 |- |<sup>122</sup>Cd || 5.24 s || 0+ || %β-=100 |- |<sup>123</sup>Cd || 2.10 s || (3/2) + || %β-=100 |- |<sup>123m1</sup>Cd || 1.82 s || (11/2-) || %β-=100 |- |<sup>124</sup>Cd || 1.25 s || 0+ || %β-=100 |- |<sup>125</sup>Cd || 0.65 s || (3/2+ ) || %β-=100 |- |<sup>125m1</sup>Cd || 0.57 s || (11/2-) || %β-=100 |- |<sup>126</sup>Cd || 0.506 s || 0+ || %β-=100 |- |<sup>127</sup>Cd || 0.37 s || (3/2+ ) || %β-=100 |- |<sup>128</sup>Cd || 0.34 s || 0+ || %β-=100 |- |<sup>129</sup>Cd || 0.27 s || (3/2+ ) || %β-=100 |- |<sup>130</sup>Cd || 0.20 s || 0+ || %β-=100 , %β-n ~ 4 |} ==Indium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>100</sup>In || 7.0 s || || %K+%β+=100, %Kp>3.9 |- |<sup>101</sup>In || 15.1 s || || %K+%β+ ~ 100, %Kp=? |- |<sup>102</sup>In || 22 s || (6+ ) || %K+%β+=100, %Kp=0.0093 |- |<sup>103</sup>In || 65 s || (9/2) + || %K+%β+=100 |- |<sup>103m1</sup>In || 34 s || (1/2-) || %K+%β+=67, %IT=33 |- |<sup>104</sup>In || 1.80 m || (6+ ) || %K+%β+=100 |- |<sup>104m1</sup>In || 15.7 s || (3+ ) || %IT=80, %K+%β+=20 |- |<sup>105</sup>In || 5.07 m || (9/2) + || %K+%β+=100 |- |<sup>105m1</sup>In || 48 s || (1/2) - || %IT=100 |- |<sup>106</sup>In || 6.2 m || 7+ || %K+%β+=100 |- |<sup>106m1</sup>In || 5.2 m || (3+ ) || %K+%β+=100 |- |<sup>107</sup>In || 32.4 m || 9/2+ || %K+%β+=100 |- |<sup>107m1</sup>In || 50.4 s || 1/2- || %IT=100 |- |<sup>108</sup>In || 58.0 m || 7+ || %K+%β+=100 |- |<sup>108m1</sup>In || 39.6 m || 2+ || %K+%β+=100 |- |<sup>109</sup>In || 4.2 h || 9/2+ || %K+%β+=100 |- |<sup>109m1</sup>In || 1.34 m || 1/2- || %IT=100 |- |<sup>109m2</sup>In || 0.209 s || (19/2+ ) || %IT=100 |- |<sup>110</sup>In || 4.9 h || 7+ || %K+%β+=100 |- |<sup>110m1</sup>In || 69.1 m || 2+ || %K+%β+=100 |- |<sup>111</sup>In || 2.8047 d || 9/2+ || %K=100 |- |<sup>111m1</sup>In || 7.7 m || 1/2- || %IT=100 |- |<sup>112</sup>In || 14.97 m || 1+ || %β-=44 , %K+%β+=56 |- |<sup>112m1</sup>In || 20.56 m || 4+ || %IT=100 |- |<sup>113</sup>In || stabil || 9/2+ || %Häufigkeit=4.3 |- |<sup>113m1</sup>In || 1.6582 h || 1/2- || %IT=100 |- |<sup>114</sup>In || 71.9 s || 1+ || %β-=99.50 , %K+%β+=0.50 |- |<sup>114m1</sup>In || 49.51 d || 5+ || %IT=96.75 , %K+%β+=3.25 |- |<sup>114m2</sup>In || 43.1 ms || 8- || %IT=100 |- |<sup>115</sup>In || 4.41·10<sup>14</sup> a || 9/2+ || %Häufigkeit=95.7, %β-=100 |- |<sup>115m1</sup>In || 4.486 h || 1/2- || %IT=95.0 , %β-=5.0 |- |<sup>116</sup>In || 14.10 s || 1+ || %β- > 99.94 , %K < 0.06 |- |<sup>116m1</sup>In || 54.29 m || 5+ || %β-=100 |- |<sup>116m2</sup>In || 2.18 s || 8- || %IT=100 |- |<sup>117</sup>In || 43.2 m || 9/2+ || %β-=100 |- |<sup>117m1</sup>In || 116.2 m || 1/2- || %β-=52.9 , %IT=47.1 |- |<sup>118</sup>In || 5.0 s || 1+ || %β-=100 |- |<sup>118m1</sup>In || 4.45 m || 5+ || %β-=100 |- |<sup>118m2</sup>In || 8.5 s || 8- || %β-=1.4 , %IT=98.6 |- |<sup>119</sup>In || 2.4 m || 9/2+ || %β-=100 |- |<sup>119m1</sup>In || 18.0 m || 1/2- || %β-=94.4 , %IT=5.6 |- |<sup>120</sup>In || 3.08 s || 1+ || %β-=100 |- |<sup>120m1</sup>In || 46.2 s || (3,4,5) + || %β-=100 |- |<sup>120m2</sup>In || 47.3 s || (8-) || %β-=100 |- |<sup>121</sup>In || 23.1 s || 9/2+ || %β-=100 |- |<sup>121m1</sup>In || 3.88 m || 1/2- || %β-=98.8 , %IT=1.2 |- |<sup>122</sup>In || 1.5 s || 1+ || %β-=100 |- |<sup>122m1</sup>In || 10.3 s || 5+ || %β-=100 |- |<sup>122m2</sup>In || 10.8 s || 8- || %β-=100 |- |<sup>123</sup>In || 5.98 s || 9/2+ || %β-=100 |- |<sup>123m1</sup>In || 47.8 s || 1/2- || %β-=100 |- |<sup>124</sup>In || 3.11 s || 3+ || %β-=100 |- |<sup>124m1</sup>In || 3.7 s || (8-) || %β-=100 |- |<sup>125</sup>In || 2.36 s || 9/2(+) || %β-=100 |- |<sup>125m1</sup>In || 12.2 s || 1/2(-) || %β-=100 |- |<sup>126</sup>In || 1.60 s || 3(+) || %β-=100 |- |<sup>126m1</sup>In || 1.64 s || || 7- ,8- ,9- %β-=100 |- |<sup>127</sup>In || 1.09 s || (9/2+ ) || %β-=100, %β-n < 0.03 |- |<sup>127m1</sup>In || 3.67 s || (1/2-) || %β-=100, %β-n=0.69 |- |<sup>128</sup>In || 0.84 s || (3+ ) || %β-=100, %β-n < 0.04 |- |<sup>128m1</sup>In || 0.72 s || (8-) || %β-=100, %β-n < 0.04 |- |<sup>129</sup>In || 0.61 s || (9/2+ ) || %β-=100, %β-n=0.25 |- |<sup>129m1</sup>In || 1.23 s || (1/2-) || %β- > 99.7, %β-n=2.5 , %IT < 0.3 |- |<sup>130</sup>In || 0.32 s || 1(-) || %β-=100 , %β-n=0.90 |- |<sup>130m1</sup>In || 0.55 s || (10- ) || %β-=100 , %β-n < 1.67 |- |<sup>130m2</sup>In || 0.55 s || (5+ ) || %β-=100 , %β-n < 1.67 |- |<sup>131</sup>In || 0.282 s || (9/2+ ) || %β-=100, %β-n < 2.2 |- |<sup>131m1</sup>In || 0.35 s || (1/2-) || %β-=100, %β-n < 2.2 , %IT < 0.04 |- |<sup>131m2</sup>In || 0.32 s || (21/2+ ) || %β-=100, %β-n < 2.2 |- |<sup>132</sup>In || 0.201 s || (7-) || %β-=100 , %β-n=6.2 |- |<sup>133</sup>In || 180 ms || (9/2+ ) || %β-=100, %β-n=85 |- |<sup>134</sup>In || 138 ms || || %β-=100, %β-n=65 |} ==Zinn== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>100</sup>Sn || 0.94 s || 0+ || %K+%β+=100, %Kp < 17 |- |<sup>101</sup>Sn || 3 s || || %K+%β+=100, %Kp=? |- |<sup>102</sup>Sn || 4.5 s || 0+ || %K+%β+=100 |- |<sup>103</sup>Sn || 7 s || || %K+%β+=100 |- |<sup>104</sup>Sn || 20.8 s || 0+ || %K+%β+=100 |- |<sup>105</sup>Sn || 31 s || || %K+%β+=100, %β+P=? |- |<sup>106</sup>Sn || 115 s || 0+ || %K+%β+=100 |- |<sup>107</sup>Sn || 2.90 m || (5/2+ ) || %K+%β+=100 |- |<sup>108</sup>Sn || 10.30 m || 0+ || %K+%β+=100 |- |<sup>109</sup>Sn || 18.0 m || 5/2(+) || %K+%β+=100 |- |<sup>110</sup>Sn || 4.11 h || 0+ || %K=100 |- |<sup>111</sup>Sn || 35.3 m || 7/2+ || %K+%β+=100 |- |<sup>112</sup>Sn || stabil || 0+ || %Häufigkeit=0.97 |- |<sup>113</sup>Sn || 115.09 d || 1/2+ || %K+%β+=100 |- |<sup>113m1</sup>Sn || 21.4 m || 7/2+ || %IT=91.1 , %K+%β+=8.9 |- |<sup>114</sup>Sn || stabil || 0+ || %Häufigkeit=0.65 |- |<sup>115</sup>Sn || stabil || 1/2+ || %Häufigkeit=0.34 |- |<sup>116</sup>Sn || stabil || 0+ || %Häufigkeit=14.53 |- |<sup>117</sup>Sn || stabil || 1/2+ || %Häufigkeit=7.68 |- |<sup>117m1</sup>Sn || 13.60 d || 11/2- || %IT=100 |- |<sup>118</sup>Sn || stabil || 0+ || %Häufigkeit=24.23 |- |<sup>119</sup>Sn || stabil || 1/2+ || %Häufigkeit=8.59 |- |<sup>119m1</sup>Sn || 293.1 d || 11/2- || %IT=100 |- |<sup>120</sup>Sn || stabil || 0+ || %Häufigkeit=32.59 |- |<sup>121</sup>Sn || 27.06 h || 3/2+ || %β-=100 |- |<sup>121m1</sup>Sn || 55 a || 11/2- || %IT=77.6 , %β-=22.4 |- |<sup>122</sup>Sn || stabil || 0+ || %Häufigkeit=4.63 |- |<sup>123</sup>Sn || 129.2 d || 11/2- || %β-=100 |- |<sup>123m1</sup>Sn || 40.06 m || 3/2+ || %β-=100 |- |<sup>124</sup>Sn || stabil || 0+ || %Häufigkeit=5.79 |- |<sup>125</sup>Sn || 9.64 d || 11/2- || %β-=100 |- |<sup>125m1</sup>Sn || 9.52 m || 3/2+ || %β-=100 |- |<sup>126</sup>Sn || 1·10<sup>5</sup> a || 0+ || %β-=100 |- |<sup>127</sup>Sn || 2.10 h || (11/2-) || %β-=100 |- |<sup>127m1</sup>Sn || 4.13 m || (3/2+ ) || %β-=100 |- |<sup>128</sup>Sn || 59.07 m || 0+ || %β-=100 |- |<sup>128m1</sup>Sn || 6.5 s || (7-) || %IT=100 |- |<sup>129</sup>Sn || 2.23 m || (3/2+ ) || %β-=100 |- |<sup>129m1</sup>Sn || 6.9 m || (11/2-) || %β-=100, %IT ~ 2·10<sup>-4</sup> |- |<sup>130</sup>Sn || 3.72 m || 0+ || %β-=100 |- |<sup>130m1</sup>Sn || 1.7 m || (7-) || %β-=100 |- |<sup>131</sup>Sn || 56.0 s || (3/2+ ) || %β-=100 |- |<sup>131m1</sup>Sn || 58.4 s || (11/2-) || %β-=100, %IT < 0.009 |- |<sup>132</sup>Sn || 39.7 s || 0+ || %β-=100 |- |<sup>133</sup>Sn || 1.45 s || (7/2-) || %β-=100, %β-n=0.08 |- |<sup>134</sup>Sn || 1.12 s || 0+ || %β-=100, %β-n=17 |} ==Antimon== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>108</sup>Sb || 7.4 s || (4+ ) || %K+%β+=100, %Kp=? |- |<sup>109</sup>Sb || 17.0 s || (5/2+ ) || %K+%β+=100 |- |<sup>110</sup>Sb || 23.0 s || 3+ || %K+%β+=100 |- |<sup>111</sup>Sb || 75 s || (5/2+ ) || %K+%β+=100 |- |<sup>112</sup>Sb || 51.4 s || 3+ || %K+%β+=100 |- |<sup>113</sup>Sb || 6.67 m || 5/2+ || %K+%β+=100 |- |<sup>114</sup>Sb || 3.49 m || 3+ || %K+%β+=100 |- |<sup>115</sup>Sb || 32.1 m || 5/2+ || %K+%β+=100 |- |<sup>116</sup>Sb || 15.8 m || 3+ || %K+%β+=100 |- |<sup>116m1</sup>Sb || 60.3 m || 8- || %K+%β+=100 |- |<sup>117</sup>Sb || 2.80 h || 5/2+ || %K+%β+=100 |- |<sup>118</sup>Sb || 3.6 m || 1+ || %K+%β+=100 |- |<sup>118m1</sup>Sb || 5.00 h || 8- || %K+%β+=100 |- |<sup>119</sup>Sb || 38.19 h || 5/2+ || %K=100 |- |<sup>119m1</sup>Sb || 0.85 s || (25/2+ ) || %IT=100 |- |<sup>120</sup>Sb || 15.89 m || 1+ || %K+%β+=100 |- |<sup>120m1</sup>Sb || 5.76 d || 8- || %K+%β+=100 |- |<sup>121</sup>Sb || stabil || 5/2+ || %Häufigkeit=57.36 |- |<sup>122</sup>Sb || 2.7238 d || 2- || %β-=97.59 , %K+%β+=2.41 |- |<sup>122m1</sup>Sb || 4.191 m || (8) - || %IT=100 |- |<sup>123</sup>Sb || stabil || 7/2+ || %Häufigkeit=42.64 |- |<sup>124</sup>Sb || 60.20 d || 3- || %β-=100 |- |<sup>124m1</sup>Sb || 93 s || 5+ || %IT=75 , %β-=25 |- |<sup>124m2</sup>Sb || 20.2 m || (8) - || %IT=100 |- |<sup>125</sup>Sb || 2.7582 a || 7/2+ || %β-=100 |- |<sup>126</sup>Sb || 12.46 d || (8) - || %β-=100 |- |<sup>126m1</sup>Sb || 19.15 m || (5) + || %β-=86 , %IT=14 |- |<sup>126m2</sup>Sb || 11 s || (3) - || %IT=100 |- |<sup>127</sup>Sb || 3.85 d || 7/2+ || %β-=100 |- |<sup>128</sup>Sb || 9.01 h || 8- || %β-=100 |- |<sup>128m1</sup>Sb || 10.4 m || 5+ || %β-=96.4 , %IT=3.6 |- |<sup>129</sup>Sb || 4.40 h || 7/2+ || %β-=100 |- |<sup>129m1</sup>Sb || 17.7 m || (19/2-) || %β-=85, %IT=15 |- |<sup>130</sup>Sb || 39.5 m || (8-) || %β-=100 |- |<sup>130m1</sup>Sb || 6.3 m || (5) + || %β-=100 |- |<sup>131</sup>Sb || 23.03 m || (7/2+ ) || %β-=100 |- |<sup>132</sup>Sb || 2.79 m || (4+ ) || %β-=100 |- |<sup>132m1</sup>Sb || 4.10 m || (8-) || %β-=100 |- |<sup>133</sup>Sb || 2.5 m || (7/2+ ) || %β-=100 |- |<sup>134</sup>Sb || 0.78 s || (0- ) || %β-=100 |- |<sup>134m1</sup>Sb || 10.23 s || (7-) || %β-=100, %β-n=0.091 |- |<sup>135</sup>Sb || 1.71 s || (7/2+ ) || %β-=100 , %β-n=16.4 |- |<sup>136</sup>Sb || 0.82 s || || %β-=100, %β-n=24.0, %β-2n=? |} ==Tellur== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>106</sup>Te || 60 μs || 0+ || %α=100 |- |<sup>107</sup>Te || 3.1 ms || || %α > 70, %K+%β+ < 30 |- |<sup>108</sup>Te || 2.1 s || 0+ || %K+%β+=51 , %α=49 , %β+P=2.4 |- |<sup>109</sup>Te || 4.6 s || || %K+%β+=96.1 , %α=3.9 , %Kp=? |- |<sup>110</sup>Te || 18.6 s || 0+ || %K+%β+ ~ 100, %α ~ 0.003 |- |<sup>111</sup>Te || 19.3 s || (5/2+ ) || %K+%β+=100, %Kp=? |- |<sup>112</sup>Te || 2.0 m || 0+ || %K+%β+=100 |- |<sup>113</sup>Te || 1.7 m || (7/2+ ) || %K+%β+=100 |- |<sup>114</sup>Te || 15.2 m || 0+ || %K+%β+=100 |- |<sup>115</sup>Te || 5.8 m || 7/2+ || %K+%β+=100 |- |<sup>115m1</sup>Te || 6.7 m || (1/2) + || %K+%β+ < 100, %IT=? |- |<sup>116</sup>Te || 2.49 h || 0+ || %K+%β+=100 |- |<sup>117</sup>Te || 62 m || 1/2+ || %K+%β+=100 |- |<sup>117m1</sup>Te || 103 ms || 11/2- || %IT=100 |- |<sup>118</sup>Te || 6.00 d || 0+ || %K=100 |- |<sup>119</sup>Te || 16.03 h || 1/2+ || %K+%β+=100 |- |<sup>119m1</sup>Te || 4.70 d || 11/2- || %K+%β+=100, %IT < 0.008 |- |<sup>120</sup>Te || stabil || 0+ || %Häufigkeit=0.096 |- |<sup>121</sup>Te || 16.78 d || 1/2+ || %K+%β+=100 |- |<sup>121m1</sup>Te || 154 d || 11/2- || %IT=88.6 , %K+%β+=11.4 |- |<sup>122</sup>Te || stabil || 0+ || %Häufigkeit=2.603 |- |<sup>123</sup>Te || 1·10<sup>13</sup> a || 1/2+ || %Häufigkeit=0.908, %K=100 |- |<sup>123m1</sup>Te || 119.7 d || 11/2- || %IT=100 |- |<sup>124</sup>Te || stabil || 0+ || %Häufigkeit=4.816 |- |<sup>125</sup>Te || stabil || 1/2+ || %Häufigkeit=7.139 |- |<sup>125m1</sup>Te || 57.40 d || 11/2- || %IT=100 |- |<sup>126</sup>Te || stabil || 0+ || %Häufigkeit=18.95 |- |<sup>127</sup>Te || 9.35 h || 3/2+ || %β-=100 |- |<sup>127m1</sup>Te || 109 d || 11/2- || %IT=97.6 , %β-=2.4 |- |<sup>128</sup>Te || 2.2·10<sup>24</sup> a || 0+ || %Häufigkeit=31.69, %ββ=100 |- |<sup>129</sup>Te || 69.6 m || 3/2+ || %β-=100 |- |<sup>129m1</sup>Te || 33.6 d || 11/2- || %IT=63 , %β-=37 |- |<sup>130</sup>Te || 7.9·10<sup>20</sup> a || 0+ || %Häufigkeit=33.80, %β- β -=100 |- |<sup>131</sup>Te || 25.0 m || 3/2+ || %β-=100 |- |<sup>131m1</sup>Te || 30 h || 11/2- || %β-=77.8 , %IT=22.2 |- |<sup>132</sup>Te || 3.204 d || 0+ || %β-=100 |- |<sup>133</sup>Te || 12.5 m || (3/2+ ) || %β-=100 |- |<sup>133m1</sup>Te || 55.4 m || (11/2-) || %IT=17.5 , %β-=82.5 |- |<sup>134</sup>Te || 41.8 m || 0+ || %β-=100 |- |<sup>135</sup>Te || 19.0 s || (7/2-) || %β-=100 |- |<sup>136</sup>Te || 17.5 s || 0+ || %β-=100, %β-n=1.1 |- |<sup>137</sup>Te || 2.49 s || (7/2-) || %β-=100, %β-n=2.69 |- |<sup>138</sup>Te || 1.4 s || 0+ || %β-=100, %β-n=6.3 |} ==Jod== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>108</sup>I || 36 ms || (1) || %α=91 , %p < 1 |- |<sup>109</sup>I || 100 μs || || %p ~ 100 |- |<sup>110</sup>I || 0.65 s || || %K+%β+=83 , %α=17 , %Kp=11 , %Kα=1.1 |- |<sup>111</sup>I || 2.5 s || (5/2+ ) || %K+%β+=99.9, %α ~ 0.1 |- |<sup>112</sup>I || 3.42 s || || %K+%β+=100, %α ~ 0.0012 |- |<sup>113</sup>I || 6.6 s || (5/2+ ) || %K+%β+=100, %Kα=?, %α =3.310·10<sup>-7</sup> |- |<sup>114</sup>I || 2.1 s || 1+ || %K+%β+= 100, %Kp=? |- |<sup>114m1</sup>I || 6.2 s || (7) || %K+%β+=?, %IT=? |- |<sup>115</sup>I || 1.3 m || (5/2+ ) || %K+%β+=100 |- |<sup>116</sup>I || 2.91 s || 1+ || %K+%β+=100 |- |<sup>116m1</sup>I || 3.27 μs || (7-) || |- |<sup>117</sup>I || 2.22 m || (5/2) + || %K+%β+=100 |- |<sup>118</sup>I || 13.7 m || 2- || %K+%β+=100 |- |<sup>118m1</sup>I || 8.5 m || (7-) || %K+%β+<100, %IT>0 |- |<sup>119</sup>I || 19.1 m || 5/2+ || %K+%β+=100 |- |<sup>120</sup>I || 81.0 m || 2- || %K+%β+=100 |- |<sup>120m1</sup>I || 53 m || 4 bis 8 || %K+%β+=100 |- |<sup>121</sup>I || 2.12 h || 5/2+ || %K+%β+=100 |- |<sup>122</sup>I || 3.63 m || 1+ || %K+%β+=100 |- |<sup>122m1</sup>I || 80 μs || || |- |<sup>123</sup>I || 13.27 h || 5/2+ || %K+%β+=100 |- |<sup>124</sup>I || 4.1760 d || 2- || %K+%β+=100 |- |<sup>125</sup>I || 59.408 d || 5/2+ || %K=100 |- |<sup>126</sup>I || 13.11 d || 2- || %K+%β+=56.3 , %β-=43.7 |- |<sup>127</sup>I || stabil || 5/2+ || %Häufigkeit=100 |- |<sup>128</sup>I || 24.99 m || 1+ || %β-=93.1 , %K+%β+=6.9 |- |<sup>129</sup>I || 1.57·10<sup>7</sup> a || 7/2+ || %β-=100 |- |<sup>130</sup>I || 12.36 h || 5+ || %β-=100 |- |<sup>130m1</sup>I || 9.0 m || 2+ || %IT=84 , %β-=16 |- |<sup>131</sup>I || 8.02070 d || 7/2+ || %β-=100 |- |<sup>132</sup>I || 2.295 h || 4+ || %β-=100 |- |<sup>132m1</sup>I || 1.387 h || (8-) || %IT=86 , %β-=14 |- |<sup>133</sup>I || 20.8 h || 7/2+ || %β-=100 |- |<sup>133m1</sup>I || 9 s || (19/2-) || %IT=100 |- |<sup>134</sup>I || 52.5 m || (4) + || %β-=100 |- |<sup>134m1</sup>I || 3.60 m || (8) - || %IT=97.7 , %β-=2.3 |- |<sup>135</sup>I || 6.57 h || 7/2+ || %β-=100 |- |<sup>136</sup>I || 83.4 s || (1-) || %β-=100 |- |<sup>136m1</sup>I || 46.9 s || (6-) || %β-=100 |- |<sup>137</sup>I || 24.5 s || (7/2+ ) || %β-=100, %β-n=6.97 |- |<sup>138</sup>I || 6.49 s || (2-) || %β-=100, %β-n=5.5 |- |<sup>139</sup>I || 2.29 s || (7/2+ ) || %β-=100, %β-n=9.9 |- |<sup>140</sup>I || 0.86 s || (4) || %β-=100 , %β-n=9.3 |- |<sup>141</sup>I || 0.43 s || || %β-=100, %β-n=21.2 |} ==Xenon== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>110</sup>Xe || 0.60 μs || 0+ || %K+β+=?, %α=? |- |<sup>111</sup>Xe || 0.74 s || || %K+%β+=?, %α=? |- |<sup>112</sup>Xe || 2.7 s || 0+ || %K+%β+=99.2, %α=0.8 +11- 5 |- |<sup>113</sup>Xe || 2.74 s || || %K+%β+ ~ 100, %α ~ 0.011, %Kp=7 , %Kα ~ 0.007 |- |<sup>114</sup>Xe || 10.0 s || 0+ || %K+%β+=100 |- |<sup>115</sup>Xe || 18 s || (5/2+ ) || %K+%β+=100, %Kp=0.34 , %Kα=0.0003 |- |<sup>116</sup>Xe || 59 s || 0+ || %K+%β+=100 |- |<sup>117</sup>Xe || 61 s || 5/2(+) || %K+%β+=100, %Kp=0.0029 |- |<sup>118</sup>Xe || 3.8 m || 0+ || %K+%β+=100 |- |<sup>119</sup>Xe || 5.8 m || (5/2+ ) || %K+%β+=100 |- |<sup>120</sup>Xe || 40 m || 0+ || %K+%β+=100 |- |<sup>121</sup>Xe || 40.1 m || 5/2(+) || %K+%β+=100 |- |<sup>122</sup>Xe || 20.1 h || 0+ || %K=100 |- |<sup>123</sup>Xe || 2.08 h || (1/2) + || %K+%β+=100 |- |<sup>124</sup>Xe || 1.6·10<sup>14</sup> a || 0+ || %Häufigkeit=0.10, %KEC=100 |- |<sup>125</sup>Xe || 16.9 h || (1/2) + || %K+%β+=100 |- |<sup>125m1</sup>Xe || 57 s || (9/2) - || %IT=100 |- |<sup>126</sup>Xe || stabil || 0+ || %Häufigkeit=0.09 |- |<sup>127</sup>Xe || 36.4 d || 1/2+ || %K=100 |- |<sup>127m1</sup>Xe || 69.2 s || 9/2- || %IT=100 |- |<sup>128</sup>Xe || stabil || 0+ || %Häufigkeit=1.91 |- |<sup>129</sup>Xe || stabil || 1/2+ || %Häufigkeit=26.4 |- |<sup>129m1</sup>Xe || 8.88 d || 11/2- || %IT=100 |- |<sup>130</sup>Xe || stabil || 0+ || %Häufigkeit=4.1 |- |<sup>131</sup>Xe || stabil || 3/2+ || %Häufigkeit=21.2 |- |<sup>131m1</sup>Xe || 11.84 d || 11/2- || %IT=100 |- |<sup>132</sup>Xe || stabil || 0+ || %Häufigkeit=26.9 |- |<sup>132m1</sup>Xe || 8.39 ms || (10+)|| %IT=100 |- |<sup>133</sup>Xe || 5.243 d || 3/2+ || %β-=100 |- |<sup>133m1</sup>Xe || 2.19 d || 11/2- || %IT=100 |- |<sup>134</sup>Xe || stabil || 0+ || %Häufigkeit=10.4 |- |<sup>134m1</sup>Xe || 290 ms || 7- || %IT=100 |- |<sup>135</sup>Xe || 9.14 h || 3/2+ || %β-=100 |- |<sup>135m1</sup>Xe || 15.29 m || 11/2- || %IT=99.996 , %β-=0.004 |- |<sup>136</sup>Xe || 2.36·10<sup>21</sup> a || 0+ || %Häufigkeit=8.9 |- |<sup>137</sup>Xe || 3.818 m || 7/2- || %β-=100 |- |<sup>138</sup>Xe || 14.08 m || 0+ || %β-=100 |- |<sup>139</sup>Xe || 39.68 s || 3/2- || %β-=100 |- |<sup>140</sup>Xe || 13.60 s || 0+ || %β-=100 |- |<sup>141</sup>Xe || 1.73 s || 5/2(-) || %β-=100, %β-n=0.044 |- |<sup>142</sup>Xe || 1.22 s || 0+ || %β-=100, %β-n=0.406 |- |<sup>143</sup>Xe || 0.30 s || 5/2- || %β-=100 |- |<sup>144</sup>Xe || 1.15 s || 0+ || %β-=100 |- |<sup>145</sup>Xe || 0.9 s || || %β-=100, %β-n=? |- |<sup>146</sup>Xe || || 0+ || %β-=100 |} ==Caesium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>113</sup>Cs || 17 μs || (5/2+ ) || %p ~ 100, %K+%β+ ~ 0.03 |- |<sup>114</sup>Cs || 0.57 s || (1+ ) || %K+%β+ ~ 100, %α=0.018 , %Kp=7 , %Kα=0.16 |- |<sup>115</sup>Cs || 1.4 s || || %K+%β+=100, %Kp ~ 0.07 |- |<sup>116</sup>Cs || 3.84 s || >4+ || %K+%β+=100, %Kp=0.44 , %Kα=0.08 |- |<sup>116m1</sup>Cs || 0.70 s || (1+ ) || %K+%β+=100, %Kp=0.28 , %Kα=0.049 |- |<sup>117</sup>Cs || 8.4 s || (9/2+ ) || %K+%β+=100 |- |<sup>117m1</sup>Cs || 6.5 s || (3/2+ ) || %K+%β+=100 |- |<sup>118</sup>Cs || 14 s || 2 || %K+%β+=100, %Kp<4.2·10<sup>-2</sup> , %Kα<2.4·10<sup>-3</sup> |- |<sup>118m1</sup>Cs || 17 s || (7-) || %K+%β+=100, %Kp<4.2·10<sup>-2</sup> , %Kα<2.4·10<sup>-3</sup> |- |<sup>119</sup>Cs || 43.0 s || 9/2+ || %K+%β+=100 |- |<sup>119m1</sup>Cs || 30.4 s || 3/2(+) || %K+%β+=100 |- |<sup>120</sup>Cs || 64 s || 2 || %K+%β+=100 |- |<sup>120m1</sup>Cs || 57 s || || %K+%β+=100, %Kp=7·10<sup>-6</sup> , %Kα=2.0·10<sup>-5</sup> |- |<sup>121</sup>Cs || 155 s || 3/2(+) || %K+%β+=100 |- |<sup>121m1</sup>Cs || 122 s || 9/2(+) || %K+%β+=83, %IT=17 |- |<sup>122</sup>Cs || 21.0 s || 1+ || %K+%β+=100 |- |<sup>122m1</sup>Cs || 3.70 m || 8- || %K+%β+=100 |- |<sup>122m2</sup>Cs || 0.36 s || (5) - || %IT=100 |- |<sup>123</sup>Cs || 5.94 m || 1/2+ || %K+%β+=100 |- |<sup>123m1</sup>Cs || 1.64 s || (11/2) - || %IT=100 |- |<sup>124</sup>Cs || 30.8 s || 1+ || %K+%β+=100 |- |<sup>124m1</sup>Cs || 6.3 s || (7) + || %IT=100 |- |<sup>125</sup>Cs || 45 m || (1/2+ ) || %K+%β+=100 |- |<sup>126</sup>Cs || 1.64 m || 1+ || %K+%β+=100 |- |<sup>127</sup>Cs || 6.25 h || 1/2+ || %K+%β+=100 |- |<sup>128</sup>Cs || 3.66 m || 1+ || %K+%β+=100 |- |<sup>129</sup>Cs || 32.06 h || 1/2+ || %K+%β+=100 |- |<sup>130</sup>Cs || 29.21 m || 1+ || %K+%β+=98.4, %β-=1.6 |- |<sup>130m1</sup>Cs || 3.46 m || 5- || %IT=99.84 , %K+%β+=0.16 |- |<sup>131</sup>Cs || 9.689 d || 5/2+ || %K=100 |- |<sup>132</sup>Cs || 6.479 d || 2+ || %K+%β+=98.13 , %β-=1.87 |- |<sup>133</sup>Cs || stabil || 7/2+ || %Häufigkeit=100 |- |<sup>134</sup>Cs || 2.0648 a || 4+ || %β-=99.9997 , %K=0.0003 |- |<sup>134m1</sup>Cs || 2.903 h || 8- || %IT=100 |- |<sup>135</sup>Cs || 2.3·10<sup>6</sup> a || 7/2+ || %β-=100 |- |<sup>135m1</sup>Cs || 53 m || 19/2- || %IT=100 |- |<sup>136</sup>Cs || 13.16 d || 5+ || %β-=100 |- |<sup>136m1</sup>Cs || 19 s || 8- || %IT=?, %β-=? |- |<sup>137</sup>Cs || 30.07 a || 7/2+ || %β-=100 |- |<sup>138</sup>Cs || 33.41 m || 3- || %β-=100 |- |<sup>138m1</sup>Cs || 2.91 m || 6- || %β-=19 , %IT=81 |- |<sup>139</sup>Cs || 9.27 m || 7/2+ || %β-=100 |- |<sup>140</sup>Cs || 63.7 s || 1- || %β-=100 |- |<sup>141</sup>Cs || 24.94 s || 7/2+ || %β-=100, %β-n=0.029 |- |<sup>142</sup>Cs || 1.70 s || 0- || %β-=100, %β-n=0.091 |- |<sup>143</sup>Cs || 1.78 s || 3/2+ || %β-=100, %β-n=1.62 |- |<sup>144</sup>Cs || 1.01 s || 1 || %β-=100, %β-n=3.17 |- |<sup>144m1</sup>Cs || 1 s || (GE 4) || %β-=? |- |<sup>145</sup>Cs || 0.594 s || 3/2+ || %β-=100, %β-n=13.8 |- |<sup>146</sup>Cs || 0.321 s || 1- || %β-=100 , %β-n=14.2 |- |<sup>147</sup>Cs || 0.225 s || (3/2+ ) || %β-=100, %β-n=43 |- |<sup>148</sup>Cs || 158 ms || || %β-=100, %β-n=25 |} ==Barium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>114</sup>Ba || 0.43 s || 0+ || %K+%β+ ~ 100, %α=?, %12C ~ 3·10<sup>-5</sup> |- |<sup>115</sup>Ba || 0.4 s || || %K+%β+=100 |- |<sup>116</sup>Ba || 0.3 s || 0+ || %K+%β+=100 |- |<sup>117</sup>Ba || 1.75 s || (3/2) || %K+%β+=100, %Kp=?, %Kα=? |- |<sup>118</sup>Ba || 5.5 s || 0+ || %K+%β+=100 |- |<sup>119</sup>Ba || 5.4 s || (5/2+ ) || %K+%β+=100, %Kp < 25 |- |<sup>120</sup>Ba || 32 s || 0+ || %K+%β+=100 |- |<sup>121</sup>Ba || 29.7 s || 5/2(+) || %K+%β+=100, %Kp=0.02 |- |<sup>122</sup>Ba || 1.95 m || 0+ || %K+%β+=100 |- |<sup>123</sup>Ba || 2.7 m || 5/2+ || %K+%β+=100 |- |<sup>124</sup>Ba || 11.0 m || 0+ || %K+%β+=100 |- |<sup>125</sup>Ba || 3.5 m || 1/2(+) || %K+%β+=100 |- |<sup>126</sup>Ba || 100 m || 0+ || %K+%β+ =100 |- |<sup>127</sup>Ba || 12.7 m || 1/2+ || %K+%β+=100 |- |<sup>127m1</sup>Ba || 1.9 s || 7/2- || %IT=100 |- |<sup>128</sup>Ba || 2.43 d || 0+ || %K=100 |- |<sup>129</sup>Ba || 2.23 h || 1/2+ || %K+%β+=100 |- |<sup>129m1</sup>Ba || 2.16 h || 7/2+ || %K+%β+ < 100, %IT=? |- |<sup>130</sup>Ba || stabil || 0+ || %Häufigkeit=0.106 |- |<sup>130m1</sup>Ba || 11 ms || 8- || %IT=100 |- |<sup>131</sup>Ba || 11.50 d || 1/2+ || %K+%β+=100 |- |<sup>131m1</sup>Ba || 14.6 m || 9/2- || %IT=100 |- |<sup>132</sup>Ba || stabil || 0+ || %Häufigkeit=0.101 |- |<sup>133</sup>Ba || 10.51 a || 1/2+ || %K=100 |- |<sup>133m1</sup>Ba || 38.9 h || 11/2- || %K=0.0096 , %IT=99.9904 |- |<sup>134</sup>Ba || stabil || 0+ || %Häufigkeit=2.417 |- |<sup>134m1</sup>Ba || 2.63 μs || (10+) || |- |<sup>135</sup>Ba || stabil || 3/2+ || %Häufigkeit=6.592 |- |<sup>135m1</sup>Ba || 28.7 h || 11/2- || %IT=100 |- |<sup>136</sup>Ba || stabil || 0+ || %Häufigkeit=7.854 |- |<sup>136m1</sup>Ba || 0.3084 s || 7- || %IT=100 |- |<sup>137</sup>Ba || stabil || 3/2+ || %Häufigkeit=11.23 |- |<sup>137m1</sup>Ba || 2.552 m || 11/2- || %IT=100 |- |<sup>138</sup>Ba || stabil || 0+ || %Häufigkeit=71.70 |- |<sup>139</sup>Ba || 83.06 m || 7/2- || %β-=100 |- |<sup>140</sup>Ba || 12.752 d || 0+ || %β-=100 |- |<sup>141</sup>Ba || 18.27 m || 3/2- || %β-=100 |- |<sup>142</sup>Ba || 10.6 m || 0+ || %β-=100 |- |<sup>143</sup>Ba || 14.33 s || 5/2- || %β-=100 |- |<sup>144</sup>Ba || 11.5 s || 0+ || %β-=100, %β-n=3.6 |- |<sup>145</sup>Ba || 4.31 s || 5/2- || %β-=100 |- |<sup>146</sup>Ba || 2.22 s || 0+ || %β-=100 |- |<sup>147</sup>Ba || 0.893 s || (3/2+ ) || %β-=100, %β-n=0.06 |- |<sup>148</sup>Ba || 0.607 s || 0+ || %β-=100, %β-n=0.4 |- |<sup>149</sup>Ba || 0.344 s || || %β-=100, %β-n=0.43 |- |<sup>150</sup>Ba || 0.3 s || 0+ || %β-=100, %β-n=? |} ==Lanthan== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>120</sup>La || 2.8 s || || %K+%β+=100 |- |<sup>121</sup>La || 5.3 s || || %K+%β+=100, %Kp=? |- |<sup>122</sup>La || 8.7 s || || %K+%β+=100, %Kp=? |- |<sup>123</sup>La || 17 s || || %K+%β+=100 |- |<sup>124</sup>La || 29 s || || %K+%β+=100 |- |<sup>124m1</sup>La || 1 s || || %K+%β+=100 |- |<sup>125</sup>La || 76 s || (11/2-) || %K+%β+=100 |- |<sup>126</sup>La || 54 s || || %K+%β+=100 |- |<sup>127</sup>La || 5.1 m || (11/2-) || %K+%β+=100 |- |<sup>127m1</sup>La || 3.7 m || (3/2+ ) || %K+%β+=100, %IT=? |- |<sup>128</sup>La || 5.0 m || (5+ ) || %K+%β+=100 |- |<sup>128m1</sup>La || 560 ms || (1+ , 2+ ) || %K+%β+=100 |- |<sup>129</sup>La || 11.6 m || 3/2+ || %K+%β+=100 |- |<sup>129m1</sup>La || 0.56 s || 11/2- || %IT=100 |- |<sup>130</sup>La || 8.7 m || 3(+) || %K+%β+=100 |- |<sup>131</sup>La || 59 m || 3/2+ || %K+%β+=100 |- |<sup>132</sup>La || 4.8 h || 2- || %K+%β+=100 |- |<sup>132m1</sup>La || 24.3 m || 6- || %IT=76, %K+%β+=24 |- |<sup>133</sup>La || 3.912 h || 5/2+ || %K+%β+=100 |- |<sup>134</sup>La || 6.45 m || 1+ || %K+%β+=100 |- |<sup>135</sup>La || 19.5 h || 5/2+ || %K+%β+=100 |- |<sup>136</sup>La || 9.87 m || 1+ || %K+%β+=100 |- |<sup>136m1</sup>La || 114 ms || || %IT=100 |- |<sup>137</sup>La || 6·10<sup>4</sup> a || 7/2+ || %K=100 |- |<sup>138</sup>La || 1.05·10<sup>11</sup> a || 5+ || %Häufigkeit=0.0902, %β-=33.6 , %K+%β+=66.4 |- |<sup>139</sup>La || stabil || 7/2+ || %Häufigkeit=99.9098 |- |<sup>140</sup>La || 1.6781 d || 3- || %β-=100 |- |<sup>141</sup>La || 3.92 h || (7/2+ ) || %β-=100 |- |<sup>142</sup>La || 91.1 m || 2- || %β-=100 |- |<sup>143</sup>La || 14.2 m || (7/2) + || %β-=100 |- |<sup>144</sup>La || 40.8 s || (3-) || %β-=100 |- |<sup>145</sup>La || 24.8 s || (5/2+ ) || %β-=100 |- |<sup>146</sup>La || 6.27 s || 2- || %β-=100 |- |<sup>146m1</sup>La || 10.0 s || (6-) || %β-=100 |- |<sup>147</sup>La || 4.015 s || (5/2+ ) || %β-=100, %β-n=0.035 |- |<sup>148</sup>La || 1.05 s || (2-) || %β-=100 , %β-n=0.11 |- |<sup>149</sup>La || 1.05 s || || %β-=100, %β-n=1.43 |- |<sup>150</sup>La || 0.86 s || || %β-=100, %β-n=2.7 |} ==Cer== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>123</sup>Ce || 3.2 s || (5/2) || %K+%β+=100, %Kp=? |- |<sup>124</sup>Ce || 6 s || 0+ || %K+%β+=100 |- |<sup>125</sup>Ce || 9.0 s || (5/2+ ) || %K+%β+=100, %Kp=? |- |<sup>126</sup>Ce || 50 s || 0+ || %K+%β+=100 |- |<sup>127</sup>Ce || 31 s || (5/2+ ) || %K+%β+=100 |- |<sup>128</sup>Ce || 4.1 s || 0+ || %K+%β+=100 |- |<sup>129</sup>Ce || 3.5 m || 5/2+ || %K+%β+=100 |- |<sup>130</sup>Ce || 25 m || 0+ || %K+%β+=100 |- |<sup>131</sup>Ce || 10.2 m || (7/2+ ) || %K+%β+=100 |- |<sup>131m1</sup>Ce || 5.0 m || (1/2+ ) || %K+%β+=100 |- |<sup>132</sup>Ce || 3.51 h || 0+ || %K+%β+=100 |- |<sup>132m1</sup>Ce || 13 ms || (8- ,9-) || %IT=100 |- |<sup>133</sup>Ce || 97 m || 1/2+ || %K+%β+=100 |- |<sup>133m1</sup>Ce || 4.9 h || 9/2- || %K+%β+=100 |- |<sup>134</sup>Ce || 3.16 d || 0+ || %K=100 |- |<sup>135</sup>Ce || 17.7 h || 1/2(+) || %K+%β+=100 |- |<sup>135m1</sup>Ce || 20 s || 11/2(-) || %IT=100 |- |<sup>136</sup>Ce || stabil || 0+ || %Häufigkeit=0.19 |- |<sup>137</sup>Ce || 9.0 h || 3/2+ || %K+%β+=100 |- |<sup>137m1</sup>Ce || 34.4 h || 11/2- || %IT=99.22 , %K+%β+=0.78 |- |<sup>138</sup>Ce || stabil || 0+ || %Häufigkeit=0.25 |- |<sup>138m1</sup>Ce || 8.65 ms || 7- || %IT=100 |- |<sup>139</sup>Ce || 137.640 d || 3/2+ || %K=100 |- |<sup>139m1</sup>Ce || 54.8 s || 11/2- || %IT=100 |- |<sup>140</sup>Ce || stabil || 0+ || %Häufigkeit=88.48 |- |<sup>141</sup>Ce || 32.501 d || 7/2- || %β-=100 |- |<sup>142</sup>Ce || 5·10<sup>16</sup> a || 0+ || %Häufigkeit=11.08 |- |<sup>143</sup>Ce || 33.039 h || 3/2- || %β-=100 |- |<sup>144</sup>Ce || 284.893 d || 0+ || %β-=100 |- |<sup>145</sup>Ce || 3.01 m || (3/2) - || %β-=100 |- |<sup>146</sup>Ce || 13.52 m || 0+ || %β-=100 |- |<sup>147</sup>Ce || 56.4 s || (5/2-) || %β-=100 |- |<sup>148</sup>Ce || 56 s || 0+ || %β-=100 |- |<sup>149</sup>Ce || 5.3 s || (3/2-) || %β-=100 |- |<sup>150</sup>Ce || 4.0 s || 0+ || %β-=100 |- |<sup>151</sup>Ce || 1.02 s || || %β-=100 |- |<sup>152</sup>Ce || 1.4 s || 0+ || %β-=100 |} ==Praseodym== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>124</sup>Pr || 1.2 s || || %K+%β+=100, %Kp=? |- |<sup>125</sup>Pr || 3.3 s || || %K+%β+=100 |- |<sup>126</sup>Pr || 3.14 s || (3,4,5) || %K+%β+=100, %Kp=? |- |<sup>127</sup>Pr || 4.2 s || (11/2-) || %K+%β+=100 |- |<sup>128</sup>Pr || 3.1 s || 4,5,6 || %K+%β+=100, %Kp=? |- |<sup>129</sup>Pr || 30 s || (3/2+ ) || %K+%β+=100 |- |<sup>130</sup>Pr || 40.0 s || || %K+%β+=100 |- |<sup>131</sup>Pr || 1.53 m || (3/2+ ) || %K+%β+=100 |- |<sup>131m1</sup>Pr || 5.7 s || (11/2-) || %IT=95 , %K+%β+=5 |- |<sup>132</sup>Pr || 1.6 m || || %K+%β+=100 |- |<sup>133</sup>Pr || 6.5 m || (3/2+ ) || %K+%β+=100 |- |<sup>134</sup>Pr || 17 m || 2- || %K+%β+=100 |- |<sup>134m1</sup>Pr || 11 m || (5-) || %K+%β+=100 |- |<sup>135</sup>Pr || 24 m || 3/2(+) || %K+%β+=100 |- |<sup>136</sup>Pr || 13.1 m || 2+ || %K+%β+=100 |- |<sup>137</sup>Pr || 1.28 h || 5/2+ || %K+%β+=100 |- |<sup>138</sup>Pr || 1.45 m || 1+ || %K+%β+=100 |- |<sup>138m1</sup>Pr || 2.12 h || 7- || %K+%β+=100 |- |<sup>139</sup>Pr || 4.41 h || 5/2+ || %K+%β+=100 |- |<sup>140</sup>Pr || 3.39 m || 1+ || %K+β+=100 |- |<sup>141</sup>Pr || stabil || 5/2+ || %Häufigkeit=100 |- |<sup>142</sup>Pr || 19.12 h || 2- || %β-=99.9836 , %K=0.0164 |- |<sup>142m1</sup>Pr || 14.6 m || 5- || %IT=100 |- |<sup>143</sup>Pr || 13.57 d || 7/2+ || %β-=100 |- |<sup>144</sup>Pr || 17.28 m || 0- || %β-=100 |- |<sup>144m1</sup>Pr || 7.2 m || 3- || %IT=99.93, %β-=0.07 |- |<sup>145</sup>Pr || 5.984 h || 7/2+ || %β-=100 |- |<sup>146</sup>Pr || 24.15 m || (2) - || %β-=100 |- |<sup>147</sup>Pr || 13.4 m || (3/2+ ) || %β-=100 |- |<sup>148</sup>Pr || 2.27 m || 1- || %β-=100 |- |<sup>148m1</sup>Pr || 2.0 m || (4) || %β-=100 |- |<sup>149</sup>Pr || 2.26 m || (5/2+ ) || %β-=100 |- |<sup>150</sup>Pr || 6.19 s || (1) - || %β-=100 |- |<sup>151</sup>Pr || 18.90 s || (3/2-) || %β-=100 |- |<sup>152</sup>Pr || 3.63 s || (4-) || %β-=100 |- |<sup>153</sup>Pr || 4.28 s || || %β-=100 |- |<sup>154</sup>Pr || 2.3 s || (3+ , 2+ ) || %β-=100 |} ==Neodym== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>127</sup>Nd || 1.8 s || || %K+%β+=100, %Kp=? |- |<sup>128</sup>Nd || 4 s || 0+ || %K+%β+=100, %Kp=? |- |<sup>129</sup>Nd || 7 s || (5/2+ ) || %K+%β+=100, %Kp=? |- |<sup>130</sup>Nd || 28 s || 0+ || %K+%β+=100 |- |<sup>131</sup>Nd || 27 s || (5/2) || %K+%β+=100 , %Kp=? |- |<sup>132</sup>Nd || 1.75 m || 0+ || %β+=100 |- |<sup>133</sup>Nd || 70 s || (7/2+ ) || %K+%β+=100 |- |<sup>133m1</sup>Nd || 70 s || (1/2) + || %K+%β+=?, %IT=? |- |<sup>134</sup>Nd || 8.5 m || 0+ || %K+%β+=100 |- |<sup>134m1</sup>Nd || 410 μs || (8) - || |- |<sup>135</sup>Nd || 12.4 m || 9/2(-) || %K+%β+=100 |- |<sup>135m1</sup>Nd || 5.5 m || (1/2+ ) || %K+%β+=100 |- |<sup>136</sup>Nd || 50.65 m || 0+ || %K+%β+=100 |- |<sup>137</sup>Nd || 38.5 m || 1/2+ || %K+%β+=100 |- |<sup>137m1</sup>Nd || 1.60 s || 11/2- || %IT=100 |- |<sup>138</sup>Nd || 5.04 h || 0+ || %K=100 |- |<sup>139</sup>Nd || 29.7 m || 3/2+ || %K+%β+=100 |- |<sup>139m1</sup>Nd || 5.50 h || 11/2- || %K+%β+=88.2 , %IT=11.8 |- |<sup>140</sup>Nd || 3.37 d || 0+ || %K=100 |- |<sup>141</sup>Nd || 2.49 h || 3/2+ || %K+%β+=100 |- |<sup>141m1</sup>Nd || 62.0 s || 11/2- || %IT > 99.95, %K+%β+ < 0.05 |- |<sup>142</sup>Nd || stabil || 0+ || %Häufigkeit=27.13 |- |<sup>143</sup>Nd || stabil || 7/2- || %Häufigkeit=12.18 |- |<sup>144</sup>Nd || 2.29·10<sup>15</sup> a || 0+ || %Häufigkeit=23.80, %α=100 |- |<sup>145</sup>Nd || stabil || 7/2- || %Häufigkeit=8.30 |- |<sup>146</sup>Nd || stabil || 0+ || %Häufigkeit=17.19 |- |<sup>147</sup>Nd || 10.98 d || 5/2- || %β-=100 |- |<sup>148</sup>Nd || stabil || 0+ || %Häufigkeit=5.76 |- |<sup>149</sup>Nd || 1.728 h || 5/2- || %β-=100 |- |<sup>150</sup>Nd || 1.1·10<sup>19</sup> a || 0+ || %Häufigkeit=5.64, %β- β-=? |- |<sup>151</sup>Nd || 12.44 m || 3/2+ || %β-=100 |- |<sup>152</sup>Nd || 11.4 m || 0+ || %β-=100 |- |<sup>153</sup>Nd || 31.6 s || (3/2) - || %β-=100 |- |<sup>154</sup>Nd || 25.9 s || 0+ || %β-=100 |- |<sup>155</sup>Nd || 8.9 s || || %β-=100 |- |<sup>156</sup>Nd || 5.47 s || 0+ || %β-=100 |} ==Promethium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>132</sup>Pm || 6.3 s || (3+ ) || %K+%β+=100 , %Kp ~ 5·10<sup>-5</sup> |- |<sup>133</sup>Pm || || 3/2+ || %K+%β+=100 |- |<sup>133m1</sup>Pm || 15 s || 11/2- || %K+%β+=100, %IT=? |- |<sup>134</sup>Pm || 5 s || (2+ ) || %K+%β+=100 |- |<sup>134m1</sup>Pm || 22 s || (5+ ) || %K+%β+=100 |- |<sup>135</sup>Pm || 45 s || (11/2-) || %K+%β+=100 |- |<sup>135m1</sup>Pm || 49 s || (3/2+ , 5/2+ ) || %K+%β+=100 |- |<sup>136</sup>Pm || 47 s || (2+ ) || %K+%β+=100 |- |<sup>136m1</sup>Pm || 107 s || (5-) || %K+%β+=100 |- |<sup>137</sup>Pm || 2.4 m || 11/2- || %K+%β+=100 |- |<sup>138</sup>Pm || 10 s || 1+ || %K+%β+=100 |- |<sup>138m1</sup>Pm || 3.24 m || (5-) || %K+%β+=?, %IT=? |- |<sup>139</sup>Pm || 4.15 m || (5/2) + || %K+%β+=100 |- |<sup>139m1</sup>Pm || 180 ms || (11/2) - || %IT=99.94 +5-20, %K+%β+=0.06 +20-5 |- |<sup>140</sup>Pm || 9.2 s || 1+ || %K+%β+=100 |- |<sup>140m1</sup>Pm || 5.95 m || 7- || %K+%β+=100 |- |<sup>140m2</sup>Pm || 5.95 m || 8- || %K+%β+=100 |- |<sup>141</sup>Pm || 20.90 m || 5/2+ || %K+%β+=100 |- |<sup>142</sup>Pm || 40.5 s || 1+ || %K+%β+=100 |- |<sup>142m1</sup>Pm || 2.0 ms || (8) - || %IT=100 |- |<sup>143</sup>Pm || 265 d || 5/2+ || %K+%β+=100 |- |<sup>144</sup>Pm || 363 d || 5- || %K+%β+=100 |- |<sup>145</sup>Pm || 17.7 a || 5/2+ || %K=100, %α=2.8·10<sup>-7</sup> |- |<sup>146</sup>Pm || 5.53 a || 3- || %K=66.0 , %β-=34.0 |- |<sup>147</sup>Pm || 2.6234 a || 7/2+ || %β-=100 |- |<sup>148</sup>Pm || 5.370 d || 1- || %β-=100 |- |<sup>148m1</sup>Pm || 41.29 d || 6- || %β-=95.0 , %IT=5.0 |- |<sup>149</sup>Pm || 53.08 h || 7/2+ || %β-=100 |- |<sup>150</sup>Pm || 2.68 h || (1-) || %β-=100 |- |<sup>151</sup>Pm || 28.40 h || 5/2+ || %β-=100 |- |<sup>152</sup>Pm || 4.12 m || 1+ || %β-=100 |- |<sup>152m1</sup>Pm || 7.52 m || 4- || %β-=100 |- |<sup>152m2</sup>Pm || 13.8 m || (8) || %β- < 100, %IT > 0 |- |<sup>153</sup>Pm || 5.25 m || 5/2- || %β-=100 |- |<sup>154</sup>Pm || 1.73 m || (0,1) || %β-=100 |- |<sup>154m1</sup>Pm || 2.68 m || (3,4) || %β-=100 |- |<sup>155</sup>Pm || 41.5 s || (5/2-) || %β-=100 |- |<sup>156</sup>Pm || 26.70 s || 4(-) || %β-=100 |- |<sup>157</sup>Pm || 10.56 s || (5/2-) || %β-=100 |- |<sup>158</sup>Pm || 4.8 s || || %β-=100 |} ==Samarium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>131</sup>Sm || 1.2 s || || %K+%β+=100, %Kp=? |- |<sup>132</sup>Sm || 4.0 s || 0+ || %K+%β+=100 , %Kp=? |- |<sup>133</sup>Sm || 3.7 s || (5/2+ ) || %K+%β+=100, %Kp=? |- |<sup>134</sup>Sm || 10 s || 0+ || %K+%β+=100 |- |<sup>135</sup>Sm || 10.3 s || (7/2+ ) || %K+%β+=100, %Kp=0.02 |- |<sup>136</sup>Sm || 47 s || 0+ || %K+%β+=100 |- |<sup>137</sup>Sm || 45 s || (9/2-) || %K+%β+=100 |- |<sup>138</sup>Sm || 3.1 m || 0+ || %K+%β+=100 |- |<sup>139</sup>Sm || 2.57 m || (1/2) + || %K+%β+=100 |- |<sup>139m1</sup>Sm || 10.7 s || (11/2) - || %IT=93.7 , %K+%β+=6.3 |- |<sup>140</sup>Sm || 14.82 m || 0+ || %K+%β+=100 |- |<sup>141</sup>Sm || 10.2 m || 1/2+ || %K+%β+=100 |- |<sup>141m1</sup>Sm || 22.6 m || 11/2- || %K+%β+=99.69 , %IT=0.31 |- |<sup>142</sup>Sm || 72.49 m || 0+ || %K+%β+=100 |- |<sup>143</sup>Sm || 8.83 m || 3/2+ || %K+%β+=100 |- |<sup>143m1</sup>Sm || 66 s || 11/2- || %IT=99.76 , %K+%β+=0.24 |- |<sup>143m2</sup>Sm || 30 ms || 23/2(-) || %IT=100 |- |<sup>144</sup>Sm || stabil || 0+ || %Häufigkeit=3.1 |- |<sup>145</sup>Sm || 340 d || 7/2- || %K=100 |- |<sup>146</sup>Sm || 1.03·10<sup>8</sup> a || 0+ || %α=100 |- |<sup>147</sup>Sm || 1.06·10<sup>11</sup> a || 7/2- || %Häufigkeit=15.0, %α=100 |- |<sup>148</sup>Sm || 7·10<sup>15</sup> a || 0+ || %Häufigkeit=11.3 , %α=100 |- |<sup>149</sup>Sm || 2·10<sup>15</sup> a || 7/2- || %Häufigkeit=13.8 |- |<sup>150</sup>Sm || stabil || 0+ || %Häufigkeit=7.4 |- |<sup>151</sup>Sm || 90 a || 5/2- || %β-=100 |- |<sup>152</sup>Sm || stabil || 0+ || %Häufigkeit=26.7 |- |<sup>153</sup>Sm || 46.284 h || 3/2+ || %β-=100 |- |<sup>153m1</sup>Sm || 10.6 ms || 11/2- || %IT=100 |- |<sup>154</sup>Sm || stabil || 0+ || %Häufigkeit=22.7 |- |<sup>155</sup>Sm || 22.3 m || 3/2- || %β-=100 |- |<sup>156</sup>Sm || 9.4 h || 0+ || %β-=100 |- |<sup>157</sup>Sm || 482 s || (3/2-) || %β-=100 |- |<sup>158</sup>Sm || 5.30 m || 0+ || %β-=100 |- |<sup>159</sup>Sm || 11.37 s || (5/2-) || %β-=100 |- |<sup>160</sup>Sm || 9.6 s || 0+ || %β-=100 |} ==Europium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>134</sup>Eu || 0.5 s || || %K+%β+=100, %Kp > 0 |- |<sup>135</sup>Eu || 1.5 s || || %K+%β+=100, %Kp=? |- |<sup>136</sup>Eu || 3.3 s || (7+ ) || %K+%β+=100, %Kp=0.09 |- |<sup>136m1</sup>Eu || 3.7 s || (3+ ) || %K+%β+=100, %Kp=0.09 |- |<sup>137</sup>Eu || 11 s || (11/2-) || %K+%β+=100 |- |<sup>138</sup>Eu || 12.1 s || (6-) || %K+%β+=100 |- |<sup>139</sup>Eu || 17.9 s || (11/2) - || %K+%β+=100 |- |<sup>140</sup>Eu || 1.51 s || 1+ || %K+%β+=100 |- |<sup>140m1</sup>Eu || 125 ms || (5-) || %IT=100 , %K+%β+ < 1 |- |<sup>141</sup>Eu || 40.7 s || 5/2+ || %K+%β+=100 |- |<sup>141m1</sup>Eu || 2.7 s || 11/2- || %K+%β+=13 +4-2 , %IT=87 +2-4 |- |<sup>142</sup>Eu || 2.34 s || 1+ || %K+%β+=100 |- |<sup>142m1</sup>Eu || 1.22 m || 8- || %K+%β+=100 |- |<sup>143</sup>Eu || 2.63 m || 5/2+ || %K+%β+=100 |- |<sup>144</sup>Eu || 10.2 s || 1+ || %K+%β+=100 |- |<sup>145</sup>Eu || 5.93 d || 5/2+ || %K+%β+=100 |- |<sup>146</sup>Eu || 4.61 d || 4- || %K+%β+=100 |- |<sup>147</sup>Eu || 24.1 d || 5/2+ || %K+β+=100, %α=0.0022 |- |<sup>148</sup>Eu || 54.5 d || 5- || %K+%β+=100, %α=9.4·10<sup>-7</sup> |- |<sup>149</sup>Eu || 93.1 d || 5/2+ || %K=100 |- |<sup>150</sup>Eu || 36.9 a || 5(-) || %K+%β+=100 |- |<sup>150m1</sup>Eu || 12.8 h || 0- || %K+%β+=11 , %β-=89 , %IT < 5·10<sup>-8</sup> |- |<sup>151</sup>Eu || stabil || 5/2+ || %Häufigkeit=47.8 |- |<sup>152</sup>Eu || 13.537 a || 3- || %K=72.1 , %β-=27.9 |- |<sup>152m1</sup>Eu || 9.3116 h || 0- || %K+%β+=28 , %β-=72 |- |<sup>152m2</sup>Eu || 96 m || 8- || %IT=100 |- |<sup>153</sup>Eu || stabil || 5/2+ || %Häufigkeit=52.2 |- |<sup>154</sup>Eu || 8.593 a || 3- || %β-=99.98 , %K+%β+=0.02 |- |<sup>154m1</sup>Eu || 46.3 m || (8-) || %IT=100 |- |<sup>155</sup>Eu || 4.7611 a || 5/2+ || %β-=100 |- |<sup>156</sup>Eu || 15.19 d || 0+ || %β-=100 |- |<sup>157</sup>Eu || 15.18 h || 5/2+ || %β-=100 |- |<sup>158</sup>Eu || 45.9 m || (1-) || %β-=100 |- |<sup>159</sup>Eu || 18.1 m || 5/2+ || %β-=100 |- |<sup>160</sup>Eu || 38 s || 1(-) || %β-=100 |- |<sup>161</sup>Eu || 26 s || || %β-=100 |- |<sup>162</sup>Eu || 10.6 s || || %β-=100 |} ==Gadolinium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>139</sup>Gd || 4.9 s || 9/2- || %K+%β+=?, %β+P=? |- |<sup>140</sup>Gd || 15.8 s || 0+ || %K+%β+=100 |- |<sup>141</sup>Gd || 14 s || (1/2+ ) || %K+%β+=100, %Kp=0.03 |- |<sup>141m1</sup>Gd || 24.5 s || (11/2-) || %K+%β+=89 , %IT=11 |- |<sup>142</sup>Gd || 70.2 s || 0+ || %K+%β+=100 |- |<sup>143</sup>Gd || 39 s || (1/2) + || %K+%β+=100, %Kp < 0.001 |- |<sup>143m1</sup>Gd || 112 s || (11/2-) || %K+%β+=100 |- |<sup>144</sup>Gd || 4.5 m || 0+ || %K+%β+=100 |- |<sup>145</sup>Gd || 23.0 m || 1/2+ || %K+%β+=100 |- |<sup>145m1</sup>Gd || 85 s || 11/2- || %IT=94.3 , %K+%β+=5.7 |- |<sup>146</sup>Gd || 48.27 d || 0+ || %K=100 |- |<sup>147</sup>Gd || 38.06 h || 7/2- || %K+%β+=100 |- |<sup>148</sup>Gd || 74.6 a || 0+ || %α=100 |- |<sup>149</sup>Gd || 9.28 d || 7/2- || %K+%β+=100, %α=4.3·10<sup>-4</sup> |- |<sup>150</sup>Gd || 1.79·10<sup>6</sup> a || 0+ || %α=100 |- |<sup>151</sup>Gd || 124 d || 7/2- || %K=100, %α ~ 8·10<sup>-7</sup> |- |<sup>152</sup>Gd || 1.08·10<sup>14</sup> a || 0+ || %Häufigkeit=0.20, %α=100 |- |<sup>153</sup>Gd || 240.4 d || 3/2- || %K=100 |- |<sup>154</sup>Gd || stabil || 0+ || %Häufigkeit=2.18 |- |<sup>155</sup>Gd || stabil || 3/2- || %Häufigkeit=14.80 |- |<sup>155m1</sup>Gd || 31.97 ms || 11/2- || %IT=100 |- |<sup>156</sup>Gd || stabil || 0+ || %Häufigkeit=20.47 |- |<sup>157</sup>Gd || stabil || 3/2- || %Häufigkeit=15.65 |- |<sup>158</sup>Gd || stabil || 0+ || %Häufigkeit=24.84 |- |<sup>159</sup>Gd || 18.479 h || 3/2- || %β-=100 |- |<sup>160</sup>Gd || stabil || 0+ || %Häufigkeit=21.86 |- |<sup>161</sup>Gd || 3.66 m || 5/2- || %β-=100 |- |<sup>162</sup>Gd || 8.4 m || 0+ || %β-=100 |- |<sup>163</sup>Gd || 68 s || (5/2-) || %β-=100 |- |<sup>164</sup>Gd || 45 s || 0+ || %β-=100 |} ==Terbium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>140</sup>Tb || 2.4 s || 5 || %K+%β+=100, %p=0.26 |- |<sup>141</sup>Tb || 3.5 s || (5/2-) || %K+%β+=100 |- |<sup>142</sup>Tb || 597 ms || 1+ || %K+%β+=100 , %Kp=0.0022 |- |<sup>142m1</sup>Tb || 303 ms || (5-) || %IT=100, %K+%β+ < 0.5 |- |<sup>143</sup>Tb || 12 s || (11/2-) || %K+%β+=100 |- |<sup>143m1</sup>Tb || 21 s || (5/2+ ) || |- |<sup>144</sup>Tb || 1 s || (1+ ) || %K+%β+=100 |- |<sup>144m1</sup>Tb || 4.25 s || (6-) || %IT=66 , %K+%β+=34 |- |<sup>145</sup>Tb || || (1/2+ ) || |- |<sup>145m1</sup>Tb || 29.5 s || (11/2-) || %K+%β+=100 |- |<sup>146</sup>Tb || 8 s || 1+ || %K+%β+=100 |- |<sup>146m1</sup>Tb || 23 s || 5- || %K+%β+=100 |- |<sup>146m2</sup>Tb || 1.18 ms || (10+)|| %IT=100 |- |<sup>147</sup>Tb || 1.7 h || (1/2+ ) || %K+%β+=100 |- |<sup>147m1</sup>Tb || 1.83 m || (11/2) - || %K+%β+=100 |- |<sup>148</sup>Tb || 60 m || 2- || %K+%β+=100 |- |<sup>148m1</sup>Tb || 2.20 m || 9+ || %K+%β+=100 |- |<sup>149</sup>Tb || 4.118 h || 1/2+ || %K+%β+=83.3 , %α=16.7 |- |<sup>149m1</sup>Tb || 4.16 m || 11/2- || %K+%β+=99.978 , %α=0.022 |- |<sup>150</sup>Tb || 3.48 h || (2-) || %K+%β+=100, %α<0.05 |- |<sup>150m1</sup>Tb || 5.8 m || 9+ || %K+%β+=100 |- |<sup>151</sup>Tb || 17.609 h || 1/2(+) || %K+%β+=100 , %α=9.5·10<sup>-3</sup> |- |<sup>151m1</sup>Tb || 25 s || (11/2-) || %IT=93.8 , %K+%β+=6.2 |- |<sup>152</sup>Tb || 17.5 h || 2- || %K+%β+=100, %α < 7·10<sup>-7</sup> |- |<sup>152m1</sup>Tb || 4.2 m || 8+ || %IT=78.8 , %K+%β+=21.2 |- |<sup>153</sup>Tb || 2.34 d || 5/2+ || %K+%β+=100 |- |<sup>154</sup>Tb || 21.5 h || 0 || %K+%β+=100, %β- < 0.1 |- |<sup>154m1</sup>Tb || 9.4 h || 3- || %K+%β+=78.2 , %IT=21.8 , %β- < 0.1 |- |<sup>154m2</sup>Tb || 22.7 h || 7- || %K+%β+=98.2 , %IT=1.8 |- |<sup>154m3</sup>Tb || 513 ns || || |- |<sup>155</sup>Tb || 5.32 d || 3/2+ || %K=100 |- |<sup>156</sup>Tb || 5.35 d || 3- || %K+%β+=100 , %β-=? |- |<sup>156m1</sup>Tb || 24.4 h || (7-) || %IT=100 |- |<sup>156m2</sup>Tb || 5.3 h || (0+)|| %IT=?, %K+%β+=? |- |<sup>157</sup>Tb || 71 a || 3/2+ || %K=100 |- |<sup>158</sup>Tb || 180 a || 3- || %K+%β+=83.4 , %β-=16.6 |- |<sup>158m1</sup>Tb || 10.70 s || 0- || %IT=100, %β- < 0.6, %K+%β+ < 0.01 |- |<sup>159</sup>Tb || stabil || 3/2+ || %Häufigkeit=100 |- |<sup>160</sup>Tb || 72.3 d || 3- || %β-=100 |- |<sup>161</sup>Tb || 6.88 d || 3/2+ || %β-=100 |- |<sup>162</sup>Tb || 7.60 m || 1- || %β-=100 |- |<sup>163</sup>Tb || 19.5 m || 3/2+ || %β-=100 |- |<sup>164</sup>Tb || 3.0 m || (5+ ) || %β-=100 |- |<sup>165</sup>Tb || 2.11 m || (3/2+ ) || %β-=100 |} ==Dysprosium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>141</sup>Dy || 0.9 s || (9/2-) || %K+%β+=100 , %Kp=? |- |<sup>142</sup>Dy || 2.3 s || 0+ || %K+%β+=100, %Kp=0.06 |- |<sup>143</sup>Dy || 4.1 s || (1/2+ ) || %K+%β+=100, %Kp=? |- |<sup>144</sup>Dy || 9.1 s || 0+ || %K+%β+=100, %Kp=? |- |<sup>145</sup>Dy || 10 s || (1/2+ ) || %K+%β+=100 |- |<sup>145m1</sup>Dy || 13.6 s || (11/2-) || %K+%β+=100 |- |<sup>146</sup>Dy || 29 s || 0+ || %K+%β+=100 |- |<sup>146m1</sup>Dy || 150 ms || (10+)|| %IT=100 |- |<sup>147</sup>Dy || 40 s || 1/2+ || %K+%β+=100, %Kp=? |- |<sup>147m1</sup>Dy || 55 s || 11/2- || %K+%β+=65 , %IT=35 |- |<sup>148</sup>Dy || 3.1 m || 0+ || %K+%β+=100 |- |<sup>149</sup>Dy || 4.20 m || (7/2-) || %K+%β+=100 |- |<sup>149m1</sup>Dy || 490 ms || (27/2-) || %IT=99.3 , %K+%β+=0.7 |- |<sup>150</sup>Dy || 7.17 m || 0+ || %α=36 , %K+%β+=64 |- |<sup>151</sup>Dy || 17.9 m || 7/2(-) || %K+%β+=94.4 , %α=5.6 |- |<sup>152</sup>Dy || 2.38 h || 0+ || %α=0.100 , %K=99.900 |- |<sup>153</sup>Dy || 6.4 h || 7/2(-) || %K+%β+=99.9906 , %α=0.0094 |- |<sup>154</sup>Dy || 3.0·10<sup>6</sup> a || 0+ || %α=100 |- |<sup>155</sup>Dy || 9.9 h || 3/2- || %K+%β+=100 |- |<sup>156</sup>Dy || stabil || 0+ || %Häufigkeit=0.06 |- |<sup>157</sup>Dy || 8.14 h || 3/2- || %K+%β+=100 |- |<sup>157m1</sup>Dy || 21.6 ms || 11/2- || %IT=100 |- |<sup>158</sup>Dy || stabil || 0+ || %Häufigkeit=0.10 |- |<sup>159</sup>Dy || 144.4 d || 3/2- || %K=100 |- |<sup>160</sup>Dy || stabil || 0+ || %Häufigkeit=2.34 |- |<sup>161</sup>Dy || stabil || 5/2+ || %Häufigkeit=18.9 |- |<sup>162</sup>Dy || stabil || 0+ || %Häufigkeit=25.5 |- |<sup>163</sup>Dy || stabil || 5/2- || %Häufigkeit=24.9 |- |<sup>164</sup>Dy || stabil || 0+ || %Häufigkeit=28.2 |- |<sup>165</sup>Dy || 2.334 h || 7/2+ || %β-=100 |- |<sup>165m1</sup>Dy || 1.257 m || 1/2- || %IT=97.76 , %β-=2.24 |- |<sup>166</sup>Dy || 81.6 h || 0+ || %β-=100 |- |<sup>167</sup>Dy || 6.20 m || (1/2-) || %β-=100 |- |<sup>168</sup>Dy || 8.7 m || 0+ || %β-=100 |- |<sup>169</sup>Dy || 39 s || (5/2-) || %β-=100 |} ==Holmium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>144</sup>Ho || 0.7 s || || %K+%β+=100, %Kp=? |- |<sup>145</sup>Ho || 2.4 s || (11/2-) || %K+%β+=100 |- |<sup>146</sup>Ho || 3.6 s || (10+)|| %K+%β+=100, %Kp=? |- |<sup>147</sup>Ho || 5.8 s || (11/2-) || %K+%β+=100, %Kp=? |- |<sup>148</sup>Ho || 2.2 s || 1+ || %K+%β+=100 |- |<sup>148m1</sup>Ho || 9.59 s || 6- || %K+%β+=100, %Kp=0.08 |- |<sup>148m2</sup>Ho || 2.35 ms || (10+)|| %IT=100 |- |<sup>149</sup>Ho || 21.1 s || (11/2-) || %K+%β+=100 |- |<sup>149m1</sup>Ho || 56 s || (1/2+ ) || %K+%β+=100 |- |<sup>150</sup>Ho || 72 s || 2- || %K+%β+=100 |- |<sup>150m1</sup>Ho || 23.3 s || (9) + || %K+%β+=100 |- |<sup>151</sup>Ho || 35.2 s || (11/2-) || %K+%β+=78 , %α=22 |- |<sup>151m1</sup>Ho || 47.2 s || (1/2+ ) || %α=80 +15-20, %K+%β+=20 +20- 15 |- |<sup>152</sup>Ho || 161.8 s || 2- || %α=12 , %K+%β+=88 |- |<sup>152m1</sup>Ho || 50.0 s || 9+ || %α=10.8 , %K+%β+=89.2 |- |<sup>153</sup>Ho || 2.01 m || 11/2- || %K+%β+=99.949 , %α=0.051 |- |<sup>153m1</sup>Ho || 9.3 m || 1/2+ || %K+%β+=99.82 , %α=0.18 |- |<sup>154</sup>Ho || 11.76 m || (2) - || %K+%β+=99.981 , %α=0.019 |- |<sup>154m1</sup>Ho || 3.10 m || 8+ || %K+%β+=100, %α < 0.001 |- |<sup>155</sup>Ho || 48 m || 5/2+ || %K+%β+=100 |- |<sup>156</sup>Ho || 56 m || (4+ ) || %K+%β+=100 |- |<sup>156m1</sup>Ho || 9.5 s || (1+ ) || %IT=?, %K+%β+=? |- |<sup>157</sup>Ho || 12.6 m || 7/2- || %K+%β+=100 |- |<sup>158</sup>Ho || 11.3 m || 5+ || %K+%β+=100 |- |<sup>158m1</sup>Ho || 28 m || 2- || %K+%β+ < 19, %IT > 81 |- |<sup>158m2</sup>Ho || 21.3 m || (9+ ) || %K+%β+ > 93, %IT < 7 |- |<sup>159</sup>Ho || 33.05 m || 7/2- || %K+%β+=100 |- |<sup>159m1</sup>Ho || 8.30 s || 1/2+ || %IT=100 |- |<sup>160</sup>Ho || 25.6 m || 5+ || %K+%β+=100 |- |<sup>160m1</sup>Ho || 5.02 h || 2- || %IT=65 , %K+%β+=35 |- |<sup>160m2</sup>Ho || 3 s || (9+ ) || %IT=100 |- |<sup>161</sup>Ho || 2.48 h || 7/2- || %K=100 |- |<sup>161m1</sup>Ho || 6.76 s || 1/2+ || %IT=100 |- |<sup>162</sup>Ho || 15.0 m || 1+ || %K+%β+=100 |- |<sup>162m1</sup>Ho || 67.0 m || 6- || %IT=62, %K+%β+=38 |- |<sup>163</sup>Ho || 4570 a || 7/2- || %K=100 |- |<sup>163m1</sup>Ho || 1.09 s || 1/2+ || %IT=100 |- |<sup>164</sup>Ho || 29 m || 1+ || %K=60 , %β-=40 |- |<sup>164m1</sup>Ho || 37.5 m || 6- || %IT=100 |- |<sup>165</sup>Ho || stabil || 7/2- || %Häufigkeit=100 |- |<sup>166</sup>Ho || 26.83 h || 0- || %β-=100 |- |<sup>166m1</sup>Ho || 1.20·10<sup>3</sup> a || (7) - || %β-=100 |- |<sup>167</sup>Ho || 3.1 h || 7/2- || %β-=100 |- |<sup>168</sup>Ho || 2.99 m || 3+ || %β-=100 |- |<sup>168m1</sup>Ho || 132 s || (6+ ) || %IT > 99.5, %β- < 0.5 |- |<sup>169</sup>Ho || 4.7 m || 7/2- || %β-=100 |- |<sup>170</sup>Ho || 2.76 m || (6+ ) || %β-=100 |- |<sup>170m1</sup>Ho || 43 s || (1+ ) || %β-=100 |- |<sup>171</sup>Ho || 53 s || (7/2-) || %β-=100 |- |<sup>172</sup>Ho || 25 s || ? || %β-=100 |} ==Erbium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>145</sup>Er || 0.9 s || (11/2-) || %K+%β+=100, %Kp=? |- |<sup>146</sup>Er || 1.7 s || 0+ || %K+%β+=100, %Kp=? |- |<sup>147</sup>Er || 2.5 s || (11/2-) || %K+%β+=100, %Kp=? |- |<sup>147m1</sup>Er || 2.5 s || (1/2+ ) || %K+%β+=100, %Kp=? |- |<sup>148</sup>Er || 4.6 s || 0+ || %K+%β+=100, %Kp ~ 0.15 |- |<sup>149</sup>Er || 4 s || (1/2+ ) || %K+%β+=100, %Kp=7 |- |<sup>149m1</sup>Er || 8.9 s || (11/2-) || %K+%β+=96.5 , %IT=3.5 , %Kp=0.18 |- |<sup>150</sup>Er || 18.5 s || 0+ || %K+%β+=100 |- |<sup>151</sup>Er || 23.5 s || (7/2-) || %K+%β+=100 |- |<sup>151m1</sup>Er || 0.58 s || (27/2-) || %IT=95.3 , %K+%β+=4.7 |- |<sup>152</sup>Er || 10.3 s || 0+ || %K+%β+=10 , %α=90 |- |<sup>153</sup>Er || 37.1 s || (7/2-) || %α=53 , %K+%β+=47 |- |<sup>154</sup>Er || 3.73 m || 0+ || %K+%β+=99.53 , %α=0.47 |- |<sup>155</sup>Er || 5.3 m || 7/2- || %K+%β+=99.978 , %α=0.022 |- |<sup>156</sup>Er || 19.5 m || 0+ || %K+%β+=100 |- |<sup>157</sup>Er || 18.65 m || 3/2- || %K+%β+=100 |- |<sup>157m1</sup>Er || 76 ms || (9/2+ ) || %IT=100 |- |<sup>158</sup>Er || 2.29 h || 0+ || %K=100 |- |<sup>159</sup>Er || 36 m || 3/2- || %K+%β+=100 |- |<sup>160</sup>Er || 28.58 h || 0+ || %K=100 |- |<sup>161</sup>Er || 3.21 h || 3/2- || %K+%β+=100 |- |<sup>162</sup>Er || stabil || 0+ || %Häufigkeit=0.14 |- |<sup>163</sup>Er || 75.0 m || 5/2- || %K+%β+=100 |- |<sup>164</sup>Er || stabil || 0+ || %Häufigkeit=1.61 |- |<sup>165</sup>Er || 10.36 h || 5/2- || %K=100 |- |<sup>166</sup>Er || stabil || 0+ || %Häufigkeit=33.6 |- |<sup>167</sup>Er || stabil || 7/2+ || %Häufigkeit=22.95 |- |<sup>167m1</sup>Er || 2.269 s || 1/2- || %IT=100 |- |<sup>168</sup>Er || stabil || 0+ || %Häufigkeit=26.8 |- |<sup>169</sup>Er || 9.40 d || 1/2- || %β-=100 |- |<sup>170</sup>Er || stabil || 0+ || %Häufigkeit=14.9 |- |<sup>171</sup>Er || 7.516 h || 5/2- || %β-=100 |- |<sup>172</sup>Er || 49.3 h || 0+ || %β-=100 |- |<sup>173</sup>Er || 1.4 m || (7/2-) || %β-=100 |- |<sup>174</sup>Er || 3.3 m || 0+ || %β-=100 |- |<sup>175</sup>Er || 1.2 m || (9/2+ ) || %β-=100 |} ==Thulium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>146</sup>Tm || 235 ms || (10+) || %K+%β+ ~ 55, %p ~ 45 |- |<sup>146m1</sup>Tm || 72 ms || (5- ,6-) || %p=100, %K+%β+=? |- |<sup>147</sup>Tm || 0.56 s || (11/2-) || %K+%β+ ~ 90, %p ~ 10 |- |<sup>147m1</sup>Tm || 360 μs || (1/2+,3/2+ ) || |- |<sup>148</sup>Tm || 0.7 s || (10+ ) || %K+%β+=100 |- |<sup>149</sup>Tm || 0.9 s || (11/2-) || %K+%β+=100, %Kp=0.2 +2-1 |- |<sup>150</sup>Tm || 2.2 s || (6-) || %K+%β+=100, %Kp=1.2 |- |<sup>150m1</sup>Tm || 5.2 ms || (10+) || %IT=100 |- |<sup>151</sup>Tm || 4.17 s || (11/2-) || %K+%β+=100 |- |<sup>151m1</sup>Tm || 6.6 s || (1/2+ ) || %K+%β+=100 |- |<sup>152</sup>Tm || 8.0 s || (2) - || %K+%β+=100 |- |<sup>152m1</sup>Tm || 5.2 s || (9) + || %K+%β+=100 |- |<sup>153</sup>Tm || 1.48 s || (11/2-) || %α=91 , %K+%β+=9 |- |<sup>153m1</sup>Tm || 2.5 s || (1/2+ ) || %α=92 , %K+%β+=8 |- |<sup>154</sup>Tm || 8.1 s || (2-) || %K+%β+=56 , %α=44 |- |<sup>154m1</sup>Tm || 3.30 s || (9+ ) || %α=90 sys%K+%β+=10 sys%IT=? |- |<sup>155</sup>Tm || 21.6 s || (11/2-) || %K+%β+=98.1 , %α=1.9 |- |<sup>155m1</sup>Tm || 45 s || (1/2+ ) || %K+%β+>92, %α<8 |- |<sup>156</sup>Tm || 83.8 s || 2- || %K+%β+=99.936 , %α=0.064 |- |<sup>156m1</sup>Tm || 19 s || || %α=? |- |<sup>157</sup>Tm || 3.63 m || 1/2+ || %K+%β+=100 |- |<sup>158</sup>Tm || 3.98 m || 2- || %K+%β+=100 |- |<sup>158m1</sup>Tm || 20 ns || (5+ ) || |- |<sup>158m2</sup>Tm || 16 ns || (9-) || |- |<sup>159</sup>Tm || 9.13 m || 5/2+ || %K+%β+=100 |- |<sup>160</sup>Tm || 9.4 m || 1- || %K+%β+=100 |- |<sup>160m1</sup>Tm || 74.5 s || 5 || %K+%β+=15 , %IT=85 |- |<sup>161</sup>Tm || 33 m || 7/2+ || %K+%β+=100 |- |<sup>162</sup>Tm || 21.70 m || 1- || %K+%β+=100 |- |<sup>162m1</sup>Tm || 24.3 s || 5+ || %IT=82 , %K+%β+=18 |- |<sup>163</sup>Tm || 1.810 h || 1/2+ || %K+%β+=100 |- |<sup>164</sup>Tm || 2.0 m || 1+ || %K+%β+=100 |- |<sup>164m1</sup>Tm || 5.1 m || 6- || %IT ~ 80, %K+%β+ ~ 20 |- |<sup>165</sup>Tm || 30.06 h || 1/2+ || %K+%β+=100 |- |<sup>166</sup>Tm || 7.70 h || 2+ || %K+%β+=100 |- |<sup>166m1</sup>Tm || 350 ms || 6- || %IT=100 |- |<sup>167</sup>Tm || 9.25 d || 1/2+ || %K=100 |- |<sup>168</sup>Tm || 93.1 d || 3(+) || %K+%β+=99.990 , %β-=0.010 |- |<sup>169</sup>Tm || stabil || 1/2+ || %Häufigkeit=100 |- |<sup>170</sup>Tm || 128.6 d || 1- || %K=0.131 , %β-=99.869 |- |<sup>171</sup>Tm || 1.92 a || 1/2+ || %β-=100 |- |<sup>172</sup>Tm || 63.6 h || 2- || %β-=100 |- |<sup>173</sup>Tm || 8.24 h || (1/2+ ) || %β-=100 |- |<sup>174</sup>Tm || 5.4 m || (4) - || %β-=100 |- |<sup>175</sup>Tm || 15.2 m || 1/2+ || %β-=100 |- |<sup>176</sup>Tm || 1.9 m || (4+ ) || %β-=100 |- |<sup>177</sup>Tm || 85 s || (1/2+ ) || %β-=100 |} ==Ytterbium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>151</sup>Yb || 1.6 s || (1/2+ ) || %K+%β+=100, %Kp=? |- |<sup>151m1</sup>Yb || 1.6 s || (11/2-) || %K+%β+ ~ 100, %Kp=? |- |<sup>152</sup>Yb || 3.04 s || 0+ || %K+%β+=100, %Kp=? |- |<sup>153</sup>Yb || 4.2 s || 7/2- || %α=50 sys %K+%β+=50 sys |- |<sup>154</sup>Yb || 0.409 s || 0+ || %α=92.6 , %K+%β+=7.4 |- |<sup>155</sup>Yb || 1.800 s || (7/2-) || %α=89 , %K+%β+=11 |- |<sup>156</sup>Yb || 26.1 s || 0+ || %K+%β+=90 , %α=10 |- |<sup>157</sup>Yb || 38.6 s || 7/2- || %K+%β+=99.5, %α=0.5 |- |<sup>158</sup>Yb || 1.49 m || 0+ || %α ~ 0.0021 , %K+%β+=100 |- |<sup>159</sup>Yb || 1.58 m || 5/2(-) || %K+%β+=100 |- |<sup>160</sup>Yb || 4.8 m || 0+ || %K+%β+=100 |- |<sup>161</sup>Yb || 4.2 m || 3/2- || %K+%β+=100 |- |<sup>162</sup>Yb || 18.87 m || 0+ || %K+%β+=100 |- |<sup>163</sup>Yb || 11.05 m || 3/2- || %K+%β+=100 |- |<sup>164</sup>Yb || 75.8 m || 0+ || %K=100 |- |<sup>165</sup>Yb || 9.9 m || 5/2- || %K+%β+=100 |- |<sup>166</sup>Yb || 56.7 h || 0+ || %K=100 |- |<sup>167</sup>Yb || 17.5 m || 5/2- || %K+%β+=100 |- |<sup>168</sup>Yb || stabil || 0+ || %Häufigkeit=0.13 |- |<sup>169</sup>Yb || 32.026 d || 7/2+ || %K=100 |- |<sup>169m1</sup>Yb || 46 s || 1/2- || %IT=100 |- |<sup>170</sup>Yb || stabil || 0+ || %Häufigkeit=3.05 |- |<sup>171</sup>Yb || stabil || 1/2- || %Häufigkeit=14.3 |- |<sup>171m1</sup>Yb || 5.25 ms || 7/2+ || %IT=100 |- |<sup>172</sup>Yb || stabil || 0+ || %Häufigkeit=21.9 |- |<sup>173</sup>Yb || stabil || 5/2- || %Häufigkeit=16.12 |- |<sup>174</sup>Yb || stabil || 0+ || %Häufigkeit=31.8 |- |<sup>175</sup>Yb || 4.185 d || 7/2- || %β-=100 |- |<sup>175m1</sup>Yb || 68.2 ms || 1/2- || %IT=100 |- |<sup>176</sup>Yb || stabil || 0+ || %Häufigkeit=12.7 |- |<sup>176m1</sup>Yb || 11.4 s || (8-) || %IT > 90, %β- < 10 |- |<sup>177</sup>Yb || 1.911 h || (9/2+ ) || %β-=100 |- |<sup>177m1</sup>Yb || 6.41 s || (1/2-) || %IT=100 |- |<sup>178</sup>Yb || 74 m || 0+ || %β-=100 |- |<sup>179</sup>Yb || 8.0 m || (1/2-) || %β-=100 |- |<sup>180</sup>Yb || 2.4 m || 0+ || %β-=100 |} ==Lutetium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>150</sup>Lu || 35 ms || || %p=80 , %K+%β+=20 |- |<sup>151</sup>Lu || 88 ms || (11/2-) || %p=70 |- |<sup>152</sup>Lu || 0.7 s || (5- ,6-) || %K+%β+=100, %Kp=15 |- |<sup>153</sup>Lu || 0.9 s || 11/2- || %α ~ 70 , %K+%β+ ~ 30 |- |<sup>154</sup>Lu || || (2-) || |- |<sup>154m1</sup>Lu || 1.12 s || (9+ ) || %K+%β+ ~ 100 |- |<sup>154m2</sup>Lu || 35 μs || (17+ ) || |- |<sup>155</sup>Lu || 140 ms || (1/2+ , 3/2+ ) || %α=? |- |<sup>155m1</sup>Lu || 68 ms || (11/2-) || %α=79 , %K+%β+=21 |- |<sup>155m2</sup>Lu || 2.60 ms || (25/2-) || %α ~ 100 |- |<sup>156</sup>Lu || 198 ms || (9+ ) || %α ~ 95 , %K+%β+=5 |- |<sup>156m1</sup>Lu || 494 ms || (2-) || %α=79 , %K+%β+=21 |- |<sup>157</sup>Lu || 6.8 s || (1/2+ , 3/2+ ) || %α > 0 |- |<sup>157m1</sup>Lu || 4.79 s || (11/2-) || %α=6 , %K+%β+=94 |- |<sup>158</sup>Lu || 10.6 s || || %α=0.91 , %K+%β+=99.09 |- |<sup>159</sup>Lu || 12.1 s || || %K+%β+=99.96 sys%α=0.04 sys |- |<sup>160</sup>Lu || 36.1 s || || %K+%β+=100, %α < 1·10<sup>-4</sup> |- |<sup>160m1</sup>Lu || 40 s || || %K+%β+ < 100, %α=? |- |<sup>161</sup>Lu || 77 s || (5/2+ ) || %K+%β+=100 |- |<sup>161m1</sup>Lu || 7.3 ms || (9/2-) || %IT=100 |- |<sup>162</sup>Lu || 1.37 m || (1-) || %K+%β+=100 |- |<sup>162m1</sup>Lu || 1.5 m || (4-) || %K+%β+ < 100 |- |<sup>162m2</sup>Lu || 1.9 m || || %K+%β+ < 100 |- |<sup>163</sup>Lu || 238 s || (1/2-) || %K+%β+=100 |- |<sup>164</sup>Lu || 3.14 m || || %K+%β+=100 |- |<sup>165</sup>Lu || 10.74 m || (7/2+ ) || %K+%β+=100 |- |<sup>165m1</sup>Lu || 12 m || 1/2+ || |- |<sup>166</sup>Lu || 2.65 m || (6-) || %K+%β+=100 |- |<sup>166m1</sup>Lu || 1.41 m || (3-) || %K+%β+=58 , %IT=42 |- |<sup>166m2</sup>Lu || 2.12 m || (0- ) || %K+%β+>80, %IT<20 |- |<sup>167</sup>Lu || 51.5 m || 7/2+ || %K+%β+=100 |- |<sup>168</sup>Lu || 5.5 m || (6-) || %K+%β+=100 |- |<sup>168m1</sup>Lu || 6.7 m || 3+ || %K+%β+ > 95, %IT < 5 |- |<sup>169</sup>Lu || 34.06 h || 7/2+ || %K+%β+=100 |- |<sup>169m1</sup>Lu || 160 s || 1/2- || %IT=100 |- |<sup>170</sup>Lu || 2.012 d || 0+ || %K+%β+=100 |- |<sup>170m1</sup>Lu || 0.67 s || (4) - || %IT=100 |- |<sup>171</sup>Lu || 8.24 d || 7/2+ || %K+%β+=100 |- |<sup>171m1</sup>Lu || 79 s || 1/2- || %IT=100 |- |<sup>172</sup>Lu || 6.70 d || 4- || %K+%β+=100 |- |<sup>172m1</sup>Lu || 3.7 m || 1- || %IT=100 |- |<sup>173</sup>Lu || 1.37 a || 7/2+ || %K=100 |- |<sup>174</sup>Lu || 3.31 a || (1) - || %K+%β+=100 |- |<sup>174m1</sup>Lu || 142 d || (6) - || %IT=99.38 , %K=0.62 |- |<sup>175</sup>Lu || stabil || 7/2+ || %Häufigkeit=97.41 |- |<sup>176</sup>Lu || 3.78·10<sup>10</sup> a || 7- || %Häufigkeit=2.59, %β-=100 |- |<sup>176m1</sup>Lu || 3.635 h || 1- || %β-=99.905 , %K=0.095 |- |<sup>177</sup>Lu || 6.734 d || 7/2+ || %β-=100 |- |<sup>177m1</sup>Lu || 160.4 d || 23/2- || %β-=78.3 , %IT=21.7 |- |<sup>178</sup>Lu || 28.4 m || 1(+) || %β-=100 |- |<sup>178m1</sup>Lu || 23.1 m || (9-) || %β-=100 |- |<sup>179</sup>Lu || 4.59 h || 7/2(+) || %β-=100 |- |<sup>179m1</sup>Lu || 3.1 ms || 1/2(+) || %IT=100 |- |<sup>180</sup>Lu || 5.7 m || (5) + || %β-=100 |- |<sup>181</sup>Lu || 3.5 m || (7/2+ ) || %β-=100 |- |<sup>182</sup>Lu || 2.0 m || (0,1,2) || %β-=100 |- |<sup>183</sup>Lu || 58 s || (7/2+ ) || %β-=100 |- |<sup>184</sup>Lu || 20 s || (2+ ) || %β-=100 |} ==Hafnium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>154</sup>Hf || 2 s || 0+ || %K+%β+=100 |- |<sup>155</sup>Hf || 0.89 s || || %K+%β+=100, %α=? |- |<sup>156</sup>Hf || 25 ms || 0+ || %α > 81 |- |<sup>156m1</sup>Hf || 444 μs || || |- |<sup>157</sup>Hf || 110 ms || 7/2- || %α=86 , %K+%β+=14 |- |<sup>158</sup>Hf || 2.85 s || 0+ || %α=44 , %K+%β+=56 |- |<sup>159</sup>Hf || 5.6 s || || %K+%β+=59 , %α=41 |- |<sup>160</sup>Hf || 13.6 s || 0+ || %K+%β+=99.3 , %α=0.7 |- |<sup>161</sup>Hf || 16.8 s || (13/2+ ) || %K+%β+=99.71 , %α=0.29 |- |<sup>162</sup>Hf || 37.6 s || 0+ || %K+%β+=99.9937 , %α=0.0063 |- |<sup>163</sup>Hf || 40.0 s || || %K+%β+=100 |- |<sup>164</sup>Hf || 111 s || 0+ || %K+%β+=100 |- |<sup>165</sup>Hf || 76 s || (5/2-) || %K+%β+=100 |- |<sup>166</sup>Hf || 6.77 m || 0+ || %K+%β+=100 |- |<sup>167</sup>Hf || 2.05 m || (5/2-) || %K+%β+=100 |- |<sup>168</sup>Hf || 25.95 m || 0+ || %K+%β+=100 |- |<sup>169</sup>Hf || 3.24 m || (5/2) - || %K+%β+=100 |- |<sup>170</sup>Hf || 16.01 h || 0+ || %K=100 |- |<sup>171</sup>Hf || 12.1 h || (7/2+ ) || %K+%β+=100 |- |<sup>172</sup>Hf || 1.87 a || 0+ || %K=100 |- |<sup>173</sup>Hf || 23.6 h || 1/2- || %K+%β+=100 |- |<sup>174</sup>Hf || 2.0·10<sup>15</sup> a || 0+ || %Häufigkeit=0.162, %α=100 |- |<sup>175</sup>Hf || 70 d || 5/2- || %K=100 |- |<sup>176</sup>Hf || stabil || 0+ || %Häufigkeit=5.206 |- |<sup>177</sup>Hf || stabil || 7/2- || %Häufigkeit=18.606 |- |<sup>177m1</sup>Hf || 1.08 s || 23/2+ || %IT=100 |- |<sup>177m2</sup>Hf || 51.4 m || 37/2- || %IT=100 |- |<sup>178</sup>Hf || stabil || 0+ || %Häufigkeit=27.297 |- |<sup>178m1</sup>Hf || 4.0 s || 8- || %IT=100 |- |<sup>178m2</sup>Hf || 31 a || 16+ || %IT=100 |- |<sup>179</sup>Hf || stabil || 9/2+ || %Häufigkeit=13.629 |- |<sup>179m1</sup>Hf || 18.67 s || 1/2- || %IT=100 |- |<sup>179m2</sup>Hf || 25.05 d || 25/2- || %IT=100 |- |<sup>180</sup>Hf || stabil || 0+ || %Häufigkeit=35.100 |- |<sup>180m1</sup>Hf || 5.5 h || 8- || %IT=99.7 , %β-=0.3 |- |<sup>181</sup>Hf || 42.39 d || 1/2- || %β-=100 |- |<sup>182</sup>Hf || 9·10<sup>6</sup> a || 0+ || %β-=100 |- |<sup>182m1</sup>Hf || 61.5 m || 8- || %β-=58 , %IT=42 |- |<sup>183</sup>Hf || 1.067 h || (3/2-) || %β-=100 |- |<sup>184</sup>Hf || 4.12 h || 0+ || %β-=100 |- |<sup>184m1</sup>Hf || 48 s || (8-) || %IT=100 |- |<sup>185</sup>Hf || 3.5 m || || %β-=100 |} ==Tantal== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>156</sup>Ta || 144 ms || (2-) || %p ~ 100 |- |<sup>156m1</sup>Ta || 375 ms || (9+ ) || %K+%β+=95.8 , %p=4.2 |- |<sup>157</sup>Ta || 10.1 ms || 1/2+ || %α=96.6 , %p=3.4 |- |<sup>157m1</sup>Ta || 4.3 ms || 11/2- || %K+%β+ ~ 5 |- |<sup>158</sup>Ta || 36.5 ms || (2-) || %α=93 , %K+%β+=7 |- |<sup>158m1</sup>Ta || 49 ms || (9+ ) || %α ~ 100 |- |<sup>159</sup>Ta || 0.57 s || || %α=80 , %K+%β+=20 |- |<sup>160</sup>Ta || 1.55 s || (9+ ) || %K+%β+=66, %α=34 |- |<sup>160m1</sup>Ta || 1.7 s || (2-) || %α=? |- |<sup>161</sup>Ta || 2.7 s || || %K+%β+ ~ 95, %α ~ 5 |- |<sup>162</sup>Ta || 3.52 s || || %K+%β+=99.926 , %α=0.074 |- |<sup>163</sup>Ta || 10.6 s || || %K+%β+ ~ 99.8, %α ~ 0.2 |- |<sup>164</sup>Ta || 14.2 s || (3+ ) || %K+%β+=100 |- |<sup>165</sup>Ta || 31.0 s || || %K+%β+=100 |- |<sup>166</sup>Ta || 34.4 s || (2) + || %K+%β+=100 |- |<sup>167</sup>Ta || 1.4 m || (3/2+ ) || %K+%β+=100 |- |<sup>168</sup>Ta || 2.0 m || (3+ ) || %K+%β+=100 |- |<sup>169</sup>Ta || 4.9 m || (5/2-) || %K+%β+=100 |- |<sup>170</sup>Ta || 6.76 m || (3+ ) || %K+%β+=100 |- |<sup>171</sup>Ta || 23.3 m || (5/2-) || %K+%β+=100 |- |<sup>172</sup>Ta || 36.8 m || (3+ ) || %K+%β+=100 |- |<sup>173</sup>Ta || 3.14 h || 5/2- || %K+%β+=100 |- |<sup>174</sup>Ta || 1.05 h || 3+ || %K+%β+=100 |- |<sup>174m1</sup>Ta || 250 ns || || |- |<sup>175</sup>Ta || 10.5 h || 7/2+ || %K+%β+=100 |- |<sup>176</sup>Ta || 8.09 h || (1) - || %K+%β+=100 |- |<sup>176m1</sup>Ta || 1.1 ms || (+) || %IT=100 |- |<sup>176m2</sup>Ta || 1.4 ms || (20- ) || |- |<sup>177</sup>Ta || 56.56 h || 7/2+ || %K+%β+=100 |- |<sup>178</sup>Ta || 9.31 m || 1+ || %K+%β+=100 |- |<sup>178m1</sup>Ta || 2.36 h || (7) - || %K+%β+=100 |- |<sup>178m2</sup>Ta || 60 ms || (15-) || %IT=100 |- |<sup>179</sup>Ta || 1.82 a || 7/2+ || %K=100 |- |<sup>179m1</sup>Ta || 9.0 ms || (25/2+ ) || |- |<sup>179m2</sup>Ta || 52 ms || (37/2+ ) || |- |<sup>180</sup>Ta || 8.152 h || 1+ || %Häufigkeit=0.012, %K=86 , %β-=14 |- |<sup>180m1</sup>Ta || 1.2·10<sup>15</sup> a || 9- || |- |<sup>181</sup>Ta || stabil || 7/2+ || %Häufigkeit=99.988 |- |<sup>182</sup>Ta || 114.43 d || 3- || %β-=100 |- |<sup>182m1</sup>Ta || 283 ms || 5+ || %IT=100 |- |<sup>182m2</sup>Ta || 15.84 m || 10- || %IT=100 |- |<sup>183</sup>Ta || 5.1 d || 7/2+ || %β-=100 |- |<sup>184</sup>Ta || 8.7 h || (5-) || %β-=100 |- |<sup>185</sup>Ta || 49.4 m || (7/2+ ) || %β-=100 |- |<sup>186</sup>Ta || 10.5 m || (2- ,3-) || %β-=100 |} ==Wolfram== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>158</sup>W || 0.9 ms || 0+ || %α=100 |- |<sup>158m1</sup>W || 0.16 ms || 8+ || |- |<sup>159</sup>W || 7.3 ms || || %α ~ 99.5, %K+%β+ ~ 0.5 |- |<sup>160</sup>W || 91 ms || 0+ || %α=87 , %K+%β+=? |- |<sup>161</sup>W || 410 ms || || %α=82 |- |<sup>162</sup>W || 1.39 s || 0+ || %K+%β+=53 , %α=47 |- |<sup>163</sup>W || 2.75 s || || %K+%β+=59 , %α=41 |- |<sup>164</sup>W || 6.0 s || 0+ || %K+%β+=95.6 , %α=4.4 |- |<sup>165</sup>W || 5.1 s || || %K+%β+=100 , %α < 0.2 |- |<sup>166</sup>W || 18.8 s || 0+ || %K+%β+=99.965 , %α=0.035 |- |<sup>167</sup>W || 19.9 s || (7/2-) || %K+%β+=?, %α=? |- |<sup>168</sup>W || 53 s || 0+ || %K+%β+ ~ 100, %α=2.7·10<sup>-3</sup> |- |<sup>169</sup>W || 76 s || (5/2-) || %K+%β+=100 |- |<sup>170</sup>W || 2.42 m || 0+ || %K+%β+=100 |- |<sup>171</sup>W || 2.38 m || (5/2-) || %K+%β+=100 |- |<sup>172</sup>W || 6.6 m || 0+ || %K+%β+=100 |- |<sup>173</sup>W || 7.6 m || 5/2- || %K+%β+=100 |- |<sup>174</sup>W || 31 m || 0+ || %K+%β+=100 |- |<sup>175</sup>W || 35.2 m || (1/2-) || %K+%β+=100 |- |<sup>176</sup>W || 2.5 h || 0+ || %K=100 |- |<sup>177</sup>W || 135 m || (1/2-) || %K+%β+=100 |- |<sup>178</sup>W || 21.6 d || 0+ || %K=100 |- |<sup>179</sup>W || 37.05 m || (7/2) - || %K+%β+=100 |- |<sup>179m1</sup>W || 6.40 m || (1/2) - || %IT=99.72 , %K+%β+=0.28 |- |<sup>180</sup>W || stabil || 0+ || %Häufigkeit=0.13 |- |<sup>180m1</sup>W || 5.47 ms || 8- || %IT=100 |- |<sup>181</sup>W || 121.2 d || 9/2+ || %K=100 |- |<sup>182</sup>W || stabil || 0+ || %Häufigkeit=26.3 |- |<sup>183</sup>W || 1.1·10<sup>17</sup> a || 1/2- || %Häufigkeit=14.3 |- |<sup>183m1</sup>W || 5.2 s || 11/2+ || %IT=100 |- |<sup>184</sup>W || 3·10<sup>17</sup> a || 0+ || %Häufigkeit=30.67 |- |<sup>185</sup>W || 75.1 d || 3/2- || %β-=100 |- |<sup>185m1</sup>W || 1.67 m || 11/2+ || %IT=100 |- |<sup>186</sup>W || stabil || 0+ || %Häufigkeit=28.6 |- |<sup>187</sup>W || 23.72 h || 3/2- || %β-=100 |- |<sup>188</sup>W || 69.4 d || 0+ || %β-=100 |- |<sup>189</sup>W || 11.5 m || (3/2-) || %β-=100 |- |<sup>190</sup>W || 30.0 m || 0+ || %β-=100 |} ==Rhenium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>160</sup>Re || 0.79 ms || || %p=91 , %α=9 |- |<sup>161</sup>Re || 0.37 ms || (1/2+ ) || %p=100 |- |<sup>161m1</sup>Re || 16 ms || (11/2-) || %α=95.2 , %p=4.8 |- |<sup>162</sup>Re || 107 ms || (2-) || %α=94 |- |<sup>162m1</sup>Re || 75 ms || (9+ ) || %α=91 |- |<sup>163</sup>Re || 260 ms || || %α=64 , %K+%β+=36 |- |<sup>164</sup>Re || 0.38 s || || %K+%β+ ~ 100 |- |<sup>164m1</sup>Re || 0.88 s || || %α=? |- |<sup>165</sup>Re || 2.4 s || || %K+%β+=87 , %α=13 |- |<sup>166</sup>Re || 2.8 s || || %α < 8 |- |<sup>167</sup>Re || 6.1 s || || %K+%β+ ~ 99.3, %α ~ 0.7 |- |<sup>168</sup>Re || 4.4 s || (6+ ) || %K+%β+ ~ 100, %α ~ 5·10<sup>-3</sup> |- |<sup>169</sup>Re || || || |- |<sup>169m1</sup>Re || 12.9 s || || %α ~ 0.2 |- |<sup>170</sup>Re || 9.2 s || (5+ ) || %K+%β+=100 |- |<sup>171</sup>Re || 15.2 s || (9/2-) || %K+%β+=100 |- |<sup>172</sup>Re || 15 s || (5) || %K+%β+=100 |- |<sup>172m1</sup>Re || 55 s || (2) || %K+%β+=100 |- |<sup>173</sup>Re || 1.98 m || (5/2-) || %K+%β+=100 |- |<sup>174</sup>Re || 2.40 m || || %K+%β+=100 |- |<sup>175</sup>Re || 5.89 m || (5/2-) || %K+%β+=100 |- |<sup>176</sup>Re || 5.3 m || 3(+) || %K+%β+=100 |- |<sup>177</sup>Re || 14 m || (5/2-) || %K+%β+=100 |- |<sup>178</sup>Re || 13.2 m || (3+ ) || %K+%β+=100 |- |<sup>179</sup>Re || 19.5 m || (5/2) + || %K+%β+=100 |- |<sup>180</sup>Re || 2.44 m || (1) - || %K+%β+=100 |- |<sup>181</sup>Re || 19.9 h || 5/2+ || %K+%β+=100 |- |<sup>182</sup>Re || 64.0 h || 7+ || %K+%β+=100 |- |<sup>182m1</sup>Re || 12.7 h || 2+ || %K+%β+=100 |- |<sup>183</sup>Re || 70.0 d || 5/2+ || %K=100 |- |<sup>183m1</sup>Re || 1.04 ms || (25/2) + || %IT=100 |- |<sup>184</sup>Re || 38.0 d || 3(-) || %K+%β+=100 |- |<sup>184m1</sup>Re || 169 d || 8(+) || %IT=75.4 , %K=24.6 |- |<sup>185</sup>Re || stabil || 5/2+ || %Häufigkeit=37.40 |- |<sup>186</sup>Re || 3.7183 d || 1- || %K=7.47 , %β-=92.53 |- |<sup>186m1</sup>Re || 2.0·10<sup>5</sup> a || (8+ ) || %IT=100 |- |<sup>187</sup>Re || 4.35·10<sup>10</sup> a || 5/2+ || %Häufigkeit=62.60, %β-=100, %α < 0.0001 |- |<sup>188</sup>Re || 17.005 h || 1- || %β-=100 |- |<sup>188m1</sup>Re || 18.6 m || (6) - || %IT=100 |- |<sup>189</sup>Re || 24.3 h || 5/2+ || %β-=100 |- |<sup>190</sup>Re || 3.1 m || (2) - || %β-=100 |- |<sup>190m1</sup>Re || 3.2 h || (6-) || %β-=54.4 , %IT=45.6 |- |<sup>191</sup>Re || 9.8 m || (3/2+ , 1/2+ ) || %β-=100 |- |<sup>192</sup>Re || 16 s || || %β-=100 |} ==Osmium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>162</sup>Os || 1.9 ms || 0+ || %α=100 |- |<sup>163</sup>Os || || || %α=?, %K+%β+=? |- |<sup>164</sup>Os || 21 ms || 0+ || %α ~ 98 , %K+%β+ ~ 2 |- |<sup>165</sup>Os || 71 ms || (7/2-) || %α > 60 , %K+%β+ < 40 |- |<sup>166</sup>Os || 181 ms || 0+ || %α=72 , %K+%β+=28 |- |<sup>167</sup>Os || 0.83 s || || %α=67 , %K+%β+=33 |- |<sup>168</sup>Os || 2.1 s || 0+ || %K+%β+=56 , %α=44 |- |<sup>169</sup>Os || 3.4 s || || %K+%β+=89 , %α=11 |- |<sup>170</sup>Os || 7.3 s || 0+ || %K+%β+=88 , %α=12 |- |<sup>171</sup>Os || 8.0 s || (5/2-) || %K+%β+=98.3 , %α=1.7 |- |<sup>172</sup>Os || 19.2 s || 0+ || %K+%β+=99.0 , %α=1.0 |- |<sup>173</sup>Os || 16 s || (5/2-) || %K+%β+=99.979 , %α=0.021 |- |<sup>174</sup>Os || 44 s || 0+ || %K+%β+=99.980 +4-10, %α=0.020 +10-4 |- |<sup>175</sup>Os || 1.4 m || (5/2-) || %K+%β+=100 |- |<sup>176</sup>Os || 3.6 m || 0+ || %K+%β+=100 |- |<sup>177</sup>Os || 2.8 m || (1/2-) || %K+%β+=100 |- |<sup>178</sup>Os || 5.0 m || 0+ || %K+%β+=100 |- |<sup>179</sup>Os || 6.5 m || (1/2-) || %K+%β+=100 |- |<sup>180</sup>Os || 21.5 m || 0+ || %K+%β+=100 |- |<sup>181</sup>Os || 105 m || 1/2- || %K+%β+=100 |- |<sup>181m1</sup>Os || 2.7 m || (7/2) - || %K+%β+=100 |- |<sup>182</sup>Os || 22.10 h || 0+ || %K=100 |- |<sup>183</sup>Os || 13.0 h || 9/2+ || %K+%β+=100 |- |<sup>183m1</sup>Os || 9.9 h || 1/2- || %K+%β+=85 , %IT=15 |- |<sup>184</sup>Os || 5.6·10<sup>13</sup> a || 0+ || %Häufigkeit=0.02 |- |<sup>185</sup>Os || 93.6 d || 1/2- || %K=100 |- |<sup>186</sup>Os || 2.0·10<sup>15</sup> a || 0+ || %Häufigkeit=1.58, %α=100 |- |<sup>187</sup>Os || stabil || 1/2- || %Häufigkeit=1.6 |- |<sup>188</sup>Os || stabil || 0+ || %Häufigkeit=13.3 |- |<sup>189</sup>Os || stabil || 3/2- || %Häufigkeit=16.1 |- |<sup>189m1</sup>Os || 5.8 h || 9/2- || %IT=100 |- |<sup>190</sup>Os || stabil || 0+ || %Häufigkeit=26.4 |- |<sup>190m1</sup>Os || 9.9 m || (10) - || %IT=100 |- |<sup>191</sup>Os || 15.4 d || 9/2- || %β-=100 |- |<sup>191m1</sup>Os || 13.10 h || 3/2- || %IT=100 |- |<sup>192</sup>Os || stabil || 0+ || %Häufigkeit=41.0 |- |<sup>192m1</sup>Os || 5.9 s || (10- ) || %IT > 87, %β- < 13 |- |<sup>193</sup>Os || 30.11 h || 3/2- || %β-=100 |- |<sup>194</sup>Os || 6.0 a || 0+ || %β-=100 |- |<sup>195</sup>Os || 6.5 m || || %β-=100 |- |<sup>196</sup>Os || 34.9 m || 0+ || %β-=100 |} ==Iridium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>165</sup>Ir || 300 μs || (11/2-) || %p=87 , %α=13 |- |<sup>166</sup>Ir || 10.5 ms || (2-) || %α=93 , %p=7 |- |<sup>166m1</sup>Ir || 15.1 ms || (9+ ) || %α=98.2 , %p=1.8 |- |<sup>167</sup>Ir || 5 ms || || %α=? |- |<sup>168</sup>Ir || 161 ms || || %α=? |- |<sup>169</sup>Ir || 0.4 s || || %α ~ 100, %K+%β+=?, %p=? |- |<sup>170</sup>Ir || 1.05 s || || %K+%β+=25 sys%α=75 sys |- |<sup>171</sup>Ir || 1.5 s || || %α ~ 100, %K+%β+=?, %p=? |- |<sup>172</sup>Ir || 4.4 s || (3+ ) || %α ~ 2, %K+%β+=98 |- |<sup>172m1</sup>Ir || 2.0 s || (7+ ) || %α=23 , %K+%β+=77 |- |<sup>173</sup>Ir || 9.0 s || (3/2+ , 5/2+ ) || %K+%β+ > 93, %α < 7 |- |<sup>173m1</sup>Ir || 2.20 s || (11/2-) || %K+%β+=88 , %α=12 |- |<sup>174</sup>Ir || 9 s || (3+ ) || %K+%β+=99.53 , %α=0.47 |- |<sup>174m1</sup>Ir || 4.9 s || (7+ ) || %K+%β+=97.5 , %α=2.5 |- |<sup>175</sup>Ir || 9 s || (5/2-) || %K+%β+=99.15 , %α=0.85 |- |<sup>176</sup>Ir || 8 s || || %K+%β+=97.9 , %α=2.1 |- |<sup>177</sup>Ir || 30 s || (5/2-) || %K+%β+=99.94 , %α=0.06 |- |<sup>178</sup>Ir || 12 s || || %K+%β+=100 |- |<sup>179</sup>Ir || 79 s || (5/2) - || %K+%β+=100 |- |<sup>180</sup>Ir || 1.5 m || || %K+%β+=100 |- |<sup>181</sup>Ir || 4.90 m || (5/2) - || %K+%β+=100 |- |<sup>182</sup>Ir || 15 m || (5+ ) || %K+%β+=100 |- |<sup>183</sup>Ir || 58 m || 5/2- || %K+%β+=100 |- |<sup>184</sup>Ir || 3.09 h || 5- || %K+%β+=100 |- |<sup>185</sup>Ir || 14.4 h || 5/2- || %K+%β+=100 |- |<sup>186</sup>Ir || 16.64 h || 5+ || %K+%β+=100 |- |<sup>186m1</sup>Ir || 1.90 h || 2- || %K+%β+ ~ 75, %IT ~ 25 |- |<sup>187</sup>Ir || 10.5 h || 3/2+ || %K+%β+=100 |- |<sup>187m1</sup>Ir || 30.3 ms || 9/2- || %IT=100 |- |<sup>188</sup>Ir || 41.5 h || 1- || %K+%β+=100 |- |<sup>188m1</sup>Ir || 4.2 ms || || |- |<sup>189</sup>Ir || 13.2 d || 3/2+ || %K=100 |- |<sup>189m1</sup>Ir || 13.3 ms || 11/2- || %IT=100 |- |<sup>189m2</sup>Ir || 3.7 ms || (25/2) + || %IT=100 |- |<sup>190</sup>Ir || 11.78 d || (4-) || %K+%β+=100, %β- < 0.002 |- |<sup>190m1</sup>Ir || 1.2 h || (1-) || %IT=100 |- |<sup>190m2</sup>Ir || 3.25 h || (11) - || %K+%β+=94.4 , %IT=5.6 |- |<sup>191</sup>Ir || stabil || 3/2+ || %Häufigkeit=37.3 |- |<sup>191m1</sup>Ir || 4.94 s || 11/2- || %IT=100 |- |<sup>191m2</sup>Ir || 5.5 s || || %IT=100 |- |<sup>192</sup>Ir || 73.831 d || 4(+) || %β-=95.24 , %K=4.76 |- |<sup>192m1</sup>Ir || 1.45 m || 1(-) || %IT=99.982, %β-=0.018 |- |<sup>192m2</sup>Ir || 241 a || (9) || %IT=100 |- |<sup>193</sup>Ir || stabil || 3/2+ || %Häufigkeit=62.7 |- |<sup>193m1</sup>Ir || 10.53 d || 11/2- || %IT=100 |- |<sup>194</sup>Ir || 19.28 h || 1- || %β-=100 |- |<sup>194m1</sup>Ir || 31.85 ms || (4+ ) || %IT=100 |- |<sup>194m2</sup>Ir || 171 d || (10,11) || %β-=100 |- |<sup>195</sup>Ir || 2.5 h || 3/2+ || %β-=100 |- |<sup>195m1</sup>Ir || 3.8 h || 11/2- || %β-=95 , %IT=5 |- |<sup>196</sup>Ir || 52 s || (0- ) || %β-=100 |- |<sup>196m1</sup>Ir || 1.40 h || (10,11-) || %β- ~ 100 , %IT < 0.3 |- |<sup>197</sup>Ir || 5.8 m || 3/2+ || %β-=100 |- |<sup>197m1</sup>Ir || 8.9 m || 11/2- || %β-=99.75 , %IT=0.25 |- |<sup>198</sup>Ir || 8 s || || %β-=100 |} ==Platin== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>168</sup>Pt || 2.0 ms || 0+ || %α=100 |- |<sup>169</sup>Pt || 5 ms || || %α=? |- |<sup>170</sup>Pt || 6 ms || 0+ || %α=100 |- |<sup>171</sup>Pt || 25 ms || || %α ~ 99, %K+%β+ ~ 1 |- |<sup>172</sup>Pt || 0.096 s || 0+ || %α=94 +6-32 , %K+%β+=6 +32-6 |- |<sup>173</sup>Pt || 342 ms || || %K+%β+=16 , %α=84 |- |<sup>174</sup>Pt || 0.90 s || 0+ || %α=75 , %K+%β+=25 |- |<sup>175</sup>Pt || 2.52 s || || %α=64 , %K+%β+=36 |- |<sup>176</sup>Pt || 6.33 s || 0+ || %K+%β+=62 , %α=38 |- |<sup>177</sup>Pt || 11 s || (5/2-) || %K+%β+=94.4 , %α=5.6 |- |<sup>178</sup>Pt || 21.1 s || 0+ || %K+%β+=95.4 , %α=4.6 |- |<sup>179</sup>Pt || 21.2 s || 1/2- || %K+%β+=99.76 , %α=0.24 |- |<sup>180</sup>Pt || 52 s || 0+ || %K+%β+=100, %α ~ 0.3 |- |<sup>181</sup>Pt || 51 s || 1/2- || %K+%β+=100, %α ~ 0.06 |- |<sup>182</sup>Pt || 3.0 m || 0+ || %K+%β+=99.969 , %α=0.031 |- |<sup>183</sup>Pt || 6.5 m || 1/2- || %K+%β+ ~ 100, %α ~ 0.0013 |- |<sup>183m1</sup>Pt || 43 s || (7/2) - || %K+%β+=100, %α=? |- |<sup>184</sup>Pt || 17.3 m || 0+ || %K+%β+=100, %α ~ 0.001 |- |<sup>184m1</sup>Pt || 1.01 ms || 8- || %IT=100 |- |<sup>184m2</sup>Pt || 1.1 ms || 8- || |- |<sup>185</sup>Pt || 70.9 m || 9/2+ || %K+%β+=100, %α=0.0050 |- |<sup>185m1</sup>Pt || 33.0 m || 1/2- || %K+%β+=99 , %IT < 2 |- |<sup>186</sup>Pt || 2.2 h || 0+ || %K+%β+=100, %α ~ 0.00010 |- |<sup>187</sup>Pt || 2.35 h || 3/2- || %K+%β+=100 |- |<sup>188</sup>Pt || 10.2 d || 0+ || %K=100, %α=2.9·10<sup>-5</sup> |- |<sup>189</sup>Pt || 10.87 h || 3/2- || %K+%β+=100 |- |<sup>190</sup>Pt || 6.5·10<sup>11</sup> a || 0+ || %Häufigkeit=0.01, %α=100 |- |<sup>191</sup>Pt || 2.802 d || 3/2- || %K=100 |- |<sup>192</sup>Pt || stabil || 0+ || %Häufigkeit=0.79 |- |<sup>193</sup>Pt || 50 a || 1/2- || %K=100 |- |<sup>193m1</sup>Pt || 4.33 d || 13/2+ || %IT=100 |- |<sup>194</sup>Pt || stabil || 0+ || %Häufigkeit=32.9 |- |<sup>195</sup>Pt || stabil || 1/2- || %Häufigkeit=33.8 |- |<sup>195m1</sup>Pt || 4.02 d || 13/2+ || %IT=100 |- |<sup>196</sup>Pt || stabil || 0+ || %Häufigkeit=25.3 |- |<sup>197</sup>Pt || 19.8915 h || 1/2- || %β-=100 |- |<sup>197m1</sup>Pt || 95.41 m || 13/2+ || %IT=96.7 , %β-=3.3 |- |<sup>198</sup>Pt || stabil || 0+ || %Häufigkeit=7.2 |- |<sup>199</sup>Pt || 30.80 m || 5/2- || %β-=100 |- |<sup>199m1</sup>Pt || 13.6 s || (13/2) + || %IT=100 |- |<sup>200</sup>Pt || 12.5 h || 0+ || %β-=100 |- |<sup>201</sup>Pt || 2.5 m || (5/2-) || %β-=100 |- |<sup>202</sup>Pt || 44 h || 0+ || %β-=100 |} ==Gold== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>172</sup>Au || 6.3 ms || || %α ~ 100, %p < 2 |- |<sup>173</sup>Au || 59 ms || || %α < 100 |- |<sup>174</sup>Au || 120 ms || || %α=? |- |<sup>175</sup>Au || 200 ms || || %α=94 +6-25, %K+%β+=6 +25-6 |- |<sup>176</sup>Au || 1.08 s || || %α=?, %K+%β+=? |- |<sup>177</sup>Au || 1.18 s || || %α < 40 |- |<sup>178</sup>Au || 2.6 s || || %K+%β+ < 60, %α > 40 |- |<sup>179</sup>Au || 7.1 s || || %K+%β+=78.0 , %α=22.0 |- |<sup>180</sup>Au || 8.1 s || || %K+%β+ < 98.2, %α > 1.8 |- |<sup>181</sup>Au || 11.4 s || 5/2- || %K+%β+=98.7 , %α=1.3 |- |<sup>182</sup>Au || 15.6 s || || %K+%β+=99.87 , %α=0.13 |- |<sup>183</sup>Au || 42.0 s || (5/2) - || %K+%β+=99.70 , %α=0.30 |- |<sup>184</sup>Au || 53.0 s || 3+ || %K+%β+=99.978, %α=0.022 |- |<sup>185</sup>Au || 4.25 m || 5/2- || %K+%β+=99.74 , %α=0.26 |- |<sup>185m1</sup>Au || 6.8 m || || %K+%β+ < 100, %IT=? |- |<sup>186</sup>Au || 10.7 m || 3- || %K+%β+=100, %α=8·10<sup>-4</sup> |- |<sup>187</sup>Au || 8.4 m || 1/2+ || %K+%β+=100, %α=0.003 sys |- |<sup>187m1</sup>Au || 2.3 s || 9/2- || %IT=100 |- |<sup>188</sup>Au || 8.84 m || 1(-) || %K+%β+=100 |- |<sup>189</sup>Au || 28.7 m || 1/2+ || %K+%β+=100, %α < 3·10<sup>-5</sup> |- |<sup>189m1</sup>Au || 4.59 m || 11/2- || %K+%β+ ~ 100, %IT > 0 |- |<sup>190</sup>Au || 42.8 m || 1- || %K+%β+=100, %α < 1·10<sup>-6</sup> |- |<sup>190m1</sup>Au || 125 ms || (11-) || %IT=?, %K+%β+=? |- |<sup>191</sup>Au || 3.18 h || 3/2+ || %K+%β+=100 |- |<sup>191m1</sup>Au || 0.92 s || (11/2-) || %IT=100 |- |<sup>192</sup>Au || 4.94 h || 1- || %K+%β+=100 |- |<sup>192m1</sup>Au || 29 ms || (5) + || %IT=100 |- |<sup>192m2</sup>Au || 160 ms || (11-) || %IT=100 |- |<sup>193</sup>Au || 17.65 h || 3/2+ || %K+%β+=100 |- |<sup>193m1</sup>Au || 3.9 s || 11/2- || %IT=99.97, %K+%β+ ~ 0.03 |- |<sup>194</sup>Au || 38.02 h || 1- || %K+%β+=100 |- |<sup>194m1</sup>Au || 600 ms || (5+ ) || %IT=100 |- |<sup>194m2</sup>Au || 420 ms || (11-) || %IT=100 |- |<sup>195</sup>Au || 186.09 d || 3/2+ || %K=100 |- |<sup>195m1</sup>Au || 30.5 s || 11/2- || %IT=100 |- |<sup>196</sup>Au || 6.183 d || 2- || %K+%β+=92.80 , %β- =7.20 |- |<sup>196m1</sup>Au || 8.1 s || 5+ || %IT=100 |- |<sup>196m2</sup>Au || 9.6 h || 12- || %IT=100 |- |<sup>197</sup>Au || stabil || 3/2+ || %Häufigkeit=100 |- |<sup>197m1</sup>Au || 7.73 s || 11/2- || %IT=100 |- |<sup>198</sup>Au || 2.69517 d || 2- || %β-=100 |- |<sup>198m1</sup>Au || 2.27 d || (12-) || %IT=100 |- |<sup>199</sup>Au || 3.139 d || 3/2+ || %β-=100 |- |<sup>200</sup>Au || 48.4 m || 1(-) || %β-=100 |- |<sup>200m1</sup>Au || 18.7 h || 12- || %β-=82 , %IT=18 |- |<sup>201</sup>Au || 26 m || 3/2+ || %β-=100 |- |<sup>202</sup>Au || 28.8 s || (1-) || %β-=100 |- |<sup>203</sup>Au || 53 s || 3/2+ || %β-=100 |- |<sup>204</sup>Au || 39.8 s || (2-) || %β-=100 |- |<sup>205</sup>Au || 31 s || (3/2+ ) || %β-=100 |} ==Quecksilber== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>175</sup>Hg || 20 ms || || %α=100 |- |<sup>176</sup>Hg || 18 ms || 0+ || %α ~ 100 |- |<sup>177</sup>Hg || 0.130 s || || %α=85, %K+%β+=15 |- |<sup>178</sup>Hg || 266 ms || 0+ || %K+%β+=?, %α ~ 100 |- |<sup>179</sup>Hg || 1.09 s || || %K+%β+ ~ 47, %α ~ 53, %Kp ~ 0.15 |- |<sup>180</sup>Hg || 2.8 s || 0+ || %K+%β+=52 , %α=48 |- |<sup>181</sup>Hg || 3.6 s || 1/2(-) || %K+%β+=64 , %α=36 , %Kp=0.014 , %Kα=9·10<sup>-6</sup> |- |<sup>182</sup>Hg || 10.83 s || 0+ || %K+%β+=84.8 , %α=15.2 |- |<sup>183</sup>Hg || 9.4 s || 1/2- || %K+%β+=88.3 , %α=11.7 , %Kp=0.00056 |- |<sup>184</sup>Hg || 30.9 s || 0+ || %K+%β+=98.74 , %α=1.26 |- |<sup>185</sup>Hg || 49.1 s || 1/2- || %K+%β+=94 , %α=6 |- |<sup>185m1</sup>Hg || 21.6 s || 13/2+ || %IT=54 , %K+%β+=46 , %α ~ 0.03 |- |<sup>186</sup>Hg || 1.38 m || 0+ || %K+%β+=99.982 , %α=0.018 |- |<sup>187</sup>Hg || 2.4 m || 13/2+ || %K+%β+=100, %α>1.2·10<sup>-4</sup> |- |<sup>187m1</sup>Hg || 1.9 m || 3/2- || %K+%β+=100, %α>2.5·10<sup>-4</sup> |- |<sup>188</sup>Hg || 3.25 m || 0+ || %K+%β+=100, %α=4.0·10<sup>-5</sup> |- |<sup>189</sup>Hg || 7.6 m || 3/2- || %K+%β+=100, %α < 3·10<sup>-5</sup> |- |<sup>189m1</sup>Hg || 8.6 m || 13/2+ || %K+%β+=100, %α < 3·10<sup>-5</sup> |- |<sup>190</sup>Hg || 20.0 m || 0+ || %K+%β+=100, %α < 5·10<sup>-5</sup> |- |<sup>191</sup>Hg || 49 m || (3/2-) || %K+%β+=100 |- |<sup>191m1</sup>Hg || 50.8 m || 13/2+ || %K+%β+=100 |- |<sup>192</sup>Hg || 4.85 h || 0+ || %K=100, %α < 4·10<sup>-6</sup> |- |<sup>193</sup>Hg || 3.80 h || 3/2- || %K+%β+=100 |- |<sup>193m1</sup>Hg || 11.8 h || 13/2+ || %K+%β+=92.8 , %IT=7.2 |- |<sup>194</sup>Hg || 444 a || 0+ || %K=100 |- |<sup>195</sup>Hg || 9.9 h || 1/2- || %K+%β+=100 |- |<sup>195m1</sup>Hg || 41.6 h || 13/2+ || %IT=54.2 , %K+%β+=45.8 |- |<sup>196</sup>Hg || stabil || 0+ || %Häufigkeit=0.15 |- |<sup>197</sup>Hg || 64.14 h || 1/2- || %K=100 |- |<sup>197m1</sup>Hg || 23.8 h || 13/2+ || %K=8.6 , %IT=91.4 |- |<sup>198</sup>Hg || stabil || 0+ || %Häufigkeit=9.97 |- |<sup>199</sup>Hg || stabil || 1/2- || %Häufigkeit=16.87 |- |<sup>199m1</sup>Hg || 42.6 m || 13/2+ || %IT=100 |- |<sup>200</sup>Hg || stabil || 0+ || %Häufigkeit=23.10 |- |<sup>201</sup>Hg || stabil || 3/2- || %Häufigkeit=13.18 |- |<sup>202</sup>Hg || stabil || 0+ || %Häufigkeit=29.86 |- |<sup>203</sup>Hg || 46.612 d || 5/2- || %β-=100 |- |<sup>204</sup>Hg || stabil || 0+ || %Häufigkeit=6.87 |- |<sup>205</sup>Hg || 5.2 m || 1/2- || %β-=100 |- |<sup>205m1</sup>Hg || 1.10 ms || (13/2+ ) || %IT=100 |- |<sup>206</sup>Hg || 8.15 m || 0+ || %β-=100 |- |<sup>207</sup>Hg || 2.9 m || (9/2+ ) || %β-=100 |- |<sup>208</sup>Hg || 42 m || 0+ || %β-=100 |} ==Thallium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>179</sup>Tl || 0.16 s || || %α ~ 100 |- |<sup>179m1</sup>Tl || 1.4 ms || (9/2-) || %α ~ 100 |- |<sup>180</sup>Tl || 0.70 s || || %K+%β+=?, %KSF ~ 1.0·10<sup>-4</sup> |- |<sup>181</sup>Tl || || (1/2+ ) || |- |<sup>181m1</sup>Tl || 3.4 s || (9/2-) || %α=? |- |<sup>182</sup>Tl || 3.1 s || (7+ ) || %K+%β+ > 96, %α < 4 |- |<sup>183</sup>Tl || || (1/2+ ) || |- |<sup>183m1</sup>Tl || 60 ms || (9/2-) || %α < 0.010 |- |<sup>184</sup>Tl || 11 s || || %K+%β+=97.9 , %α=2.1 |- |<sup>185</sup>Tl || 19.5 s || (1/2+ ) || %K+%β+=? |- |<sup>185m1</sup>Tl || 1.83 s || (9/2-) || %IT=?, %α=? |- |<sup>186</sup>Tl || 27.5 s || (7+ ) || %K+%β+=100, %α ~ 0.006 |- |<sup>186m1</sup>Tl || 2.9 s || (10- ) || %IT=100 |- |<sup>187</sup>Tl || 51 s || (1/2+ ) || %K+%β+=?, %α=? |- |<sup>187m1</sup>Tl || 15.60 s || (9/2-) || %α=?, %K+%β+=?, %IT=? |- |<sup>188</sup>Tl || 71 s || (2-) || %K+%β+=100 |- |<sup>188m1</sup>Tl || 71 s || (7+ ) || %K+%β+=100 |- |<sup>188m2</sup>Tl || 41 ms || (9-) || %IT=100 |- |<sup>189</sup>Tl || 2.3 m || (1/2+ ) || %K+%β+=100 |- |<sup>189m1</sup>Tl || 1.4 m || (9/2-) || %K+%β+=100, %IT<4 |- |<sup>190</sup>Tl || 2.6 m || (2) - || %K+%β+=100 |- |<sup>190m1</sup>Tl || 3.7 m || (7+ ) || %K+%β+=100 |- |<sup>191</sup>Tl || || (1/2+ ) || |- |<sup>191m1</sup>Tl || 5.22 m || 9/2(-) || %K+%β+=100 |- |<sup>192</sup>Tl || 9.6 m || (2-) || %K+%β+=100 |- |<sup>192m1</sup>Tl || 10.8 m || (7+ ) || %K+%β+=100 |- |<sup>193</sup>Tl || 21.6 m || 1/2+ || %K+%β+=100 |- |<sup>193m1</sup>Tl || 2.11 m || 9/2- || %IT=75, %K+%β+=25 |- |<sup>194</sup>Tl || 33.0 m || 2- || %K+%β+=100 , %α < 1·10<sup>-7</sup> |- |<sup>194m1</sup>Tl || 32.8 m || (7+ ) || %K+%β+=100 |- |<sup>195</sup>Tl || 1.16 h || 1/2+ || %K+%β+=100 |- |<sup>195m1</sup>Tl || 3.6 s || 9/2- || %IT=100 |- |<sup>196</sup>Tl || 1.84 h || 2- || %K+%β+=100 |- |<sup>196m1</sup>Tl || 1.41 h || (7+ ) || %K+%β+=95.5 , %IT=4.5 |- |<sup>197</sup>Tl || 2.84 h || 1/2+ || %K+%β+=100 |- |<sup>197m1</sup>Tl || 0.54 s || 9/2- || %IT=100 |- |<sup>198</sup>Tl || 5.3 h || 2- || %K+%β+=100 |- |<sup>198m1</sup>Tl || 1.87 h || 7+ || %IT=46 , %K+%β+=54 |- |<sup>198m2</sup>Tl || 32.1 ms || (10- ) || %IT=100 |- |<sup>199</sup>Tl || 7.42 h || 1/2+ || %K+%β+=100 |- |<sup>199m1</sup>Tl || 28.4 ms || 9/2- || %IT=100 |- |<sup>200</sup>Tl || 26.1 h || 2- || %K+%β+=100 |- |<sup>200m1</sup>Tl || 34.3 ms || 7+ || %IT=100 |- |<sup>201</sup>Tl || 72.912 h || 1/2+ || %K=100 |- |<sup>201m1</sup>Tl || 2.035 ms || (9/2-) || %IT=100 |- |<sup>202</sup>Tl || 12.23 d || 2- || %K+%β+=100 |- |<sup>202m1</sup>Tl || 572 μs || 7+ || |- |<sup>203</sup>Tl || stabil || 1/2+ || %Häufigkeit=29.524 |- |<sup>204</sup>Tl || 3.78 a || 2- || %β-=97.10 , %K+%β+=2.90 |- |<sup>205</sup>Tl || stabil || 1/2+ || %Häufigkeit=70.476 |- |<sup>206</sup>Tl || 4.199 m || 0- || %β-=100 |- |<sup>206m1</sup>Tl || 3.74 m || (12-) || %IT=100 |- |<sup>207</sup>Tl || 4.77 m || 1/2+ || %β-=100 |- |<sup>207m1</sup>Tl || 1.33 s || 11/2- || %IT=100, %β- < 0.1 |- |<sup>208</sup>Tl || 3.053 m || 5(+) || %β-=100 |- |<sup>209</sup>Tl || 2.20 m || (1/2+ ) || %β-=100 |- |<sup>210</sup>Tl || 1.30 m || (5+ ) || %β-=100, %β-n=0.007 +7- 4 |} ==Blei== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>181</sup>Pb || 45 ms || (13/2+ ) || %α ~ 98 |- |<sup>182</sup>Pb || 55 ms || 0+ || %α=? |- |<sup>183</sup>Pb || 300 ms || (1/2-) || %α ~ 94, %K+%β+ ~ 6 |- |<sup>184</sup>Pb || 0.55 s || 0+ || %α=? |- |<sup>185</sup>Pb || 4.1 s || || %α < 100 |- |<sup>186</sup>Pb || 4.83 s || 0+ || %α=54 , %K+%β+=46 |- |<sup>187</sup>Pb || 18.3 s || (13/2+ ) || %K+%β+=98.0, %α=2.0 |- |<sup>187m1</sup>Pb || 15.2 s || || %α=?, %K+%β+=? |- |<sup>188</sup>Pb || 24 s || 0+ || %K+%β+=91.5 , %α=8.5 |- |<sup>189</sup>Pb || 51 s || || %K+%β+ > 99, %α ~ 0.4 |- |<sup>190</sup>Pb || 1.2 m || 0+ || %K+%β+=99.79 , %α=0.21 |- |<sup>191</sup>Pb || 1.33 m || (3/2-) || %K+%β+=99.987 , %α=0.013 |- |<sup>191m1</sup>Pb || 2.18 m || (13/2+ ) || %K+%β+=100, %α ~ 0.02 |- |<sup>192</sup>Pb || 3.5 m || 0+ || %K+%β+=99.9941 , %α=0.0059 |- |<sup>193</sup>Pb || 2 m || (3/2-) || %K+%β+=? |- |<sup>193m1</sup>Pb || 5.8 m || (13/2+ ) || %K+%β+=100 |- |<sup>194</sup>Pb || 12.0 m || 0+ || %K+%β+=100, %α=7.3·10<sup>-6</sup> |- |<sup>195</sup>Pb || 15 m || 3/2- || %K+%β+=100 |- |<sup>195m1</sup>Pb || 15.0 m || 13/2+ || %K+%β+=100 |- |<sup>196</sup>Pb || 37 m || 0+ || %K+%β+=100, %α < 3·10<sup>-5</sup> |- |<sup>197</sup>Pb || 8 m || 3/2- || %K+%β+=100 |- |<sup>197m1</sup>Pb || 43 m || 13/2+ || %K+%β+=81 , %IT=19 |- |<sup>198</sup>Pb || 2.40 h || 0+ || %K+%β+=100 |- |<sup>199</sup>Pb || 90 m || 3/2- || %K+%β+=100 |- |<sup>199m1</sup>Pb || 12.2 m || 13/2+ || %IT=93, %K+%β+=7 |- |<sup>200</sup>Pb || 21.5 h || 0+ || %K=100 |- |<sup>201</sup>Pb || 9.33 h || 5/2- || %K+%β+=100 |- |<sup>201m1</sup>Pb || 61 s || 13/2+ || %IT>99, %K+%β+<1 |- |<sup>202</sup>Pb || 5.25·10<sup>4</sup> a || 0+ || %K=100, %α<1 |- |<sup>202m1</sup>Pb || 3.53 h || 9- || %IT=90.5 , %K+%β+=9.5 |- |<sup>203</sup>Pb || 51.873 h || 5/2- || %K=100 |- |<sup>203m1</sup>Pb || 6.3 s || 13/2+ || %IT=100 |- |<sup>203m2</sup>Pb || 0.48 s || 29/2- || %IT=100 |- |<sup>204</sup>Pb || 1.4·10<sup>17</sup> a || 0+ || %Häufigkeit=1.4 |- |<sup>204m1</sup>Pb || 67.2 m || 9- || %IT=100 |- |<sup>205</sup>Pb || 1.53·10<sup>7</sup> a || 5/2- || %K=100 |- |<sup>205m1</sup>Pb || 5.54 ms || 13/2+ || %IT=100 |- |<sup>206</sup>Pb || stabil || 0+ || %Häufigkeit=24.1 |- |<sup>207</sup>Pb || stabil || 1/2- || %Häufigkeit=22.1 |- |<sup>207m1</sup>Pb || 0.805 s || 13/2+ || %IT=100 |- |<sup>208</sup>Pb || stabil || 0+ || %Häufigkeit=52.4 |- |<sup>209</sup>Pb || 3.253 h || 9/2+ || %β-=100 |- |<sup>210</sup>Pb || 22.3 a || 0+ || %β-=100, %α=1.9·10<sup>-6</sup> |- |<sup>211</sup>Pb || 36.1 m || 9/2+ || %β- =100 |- |<sup>212</sup>Pb || 10.64 h || 0+ || %β-=100 |- |<sup>213</sup>Pb || 10.2 m || (9/2+ ) || %β-=100 |- |<sup>214</sup>Pb || 26.8 m || 0+ || %β-=100 |- |<sup>215</sup>Pb || 36 s || (5/2+ ) || %β-=100 |} ==Bismut== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>185</sup>Bi || 44 μs || (1/2+ ) || %p ~ 100 |- |<sup>186</sup>Bi || 15.0 ms || (3+ ) || %α ~ 100 |- |<sup>186m1</sup>Bi || 9.8 ms || (10- ) || %α ~ 100 |- |<sup>187</sup>Bi || 35 ms || (9/2-) || %α>50 |- |<sup>187m1</sup>Bi || 0.8 ms || (1/2+ ) || |- |<sup>188</sup>Bi || 0.21 s || || %α=?, %K+%β+=? |- |<sup>188m1</sup>Bi || 44 ms || || %α=?, %K+%β+=? |- |<sup>189</sup>Bi || 680 ms || (9/2-) || %α > 50, %K+%β+ < 50 |- |<sup>189m1</sup>Bi || 5 ms || (1/2+ ) || %α > 50, %K+%β+ < 50 |- |<sup>190</sup>Bi || 6.3 s || (3+ ) || %α=80 , %K+%β+=20 |- |<sup>190m1</sup>Bi || 6.2 s || (10- ) || %α=70 , %K+%β+=30 |- |<sup>191</sup>Bi || 12 s || (9/2-) || %α=60 , %K+%β+=40 |- |<sup>191m1</sup>Bi || 150 ms || (1/2+ ) || %α > 50, %K+%β+ < 50 |- |<sup>192</sup>Bi || 37 s || (2+ , 3+ ) || %K+%β+=82 , %α=18 |- |<sup>192m1</sup>Bi || 39.6 s || (10- ) || %K+%β+=90.8 , %α=9.2 |- |<sup>193</sup>Bi || 67 s || (9/2-) || %K+%β+=96.5 , %α=3.5 |- |<sup>193m1</sup>Bi || 3.2 s || (1/2+ ) || %α=90 +10-20, %K+%β+=10 +20-10 |- |<sup>194</sup>Bi || 95 s || (3+ ) || %K+%β+=99.54 , %α=0.46 |- |<sup>194m1</sup>Bi || 115 s || (10- ) || %K+%β+=99.80 , %α=0.20 |- |<sup>194m2</sup>Bi || 125 s || (6+ , 7+ ) || %K+%β+=100 |- |<sup>195</sup>Bi || 183 s || (9/2-) || %K+%β+=99.967 , %α=0.033 |- |<sup>195m1</sup>Bi || 87 s || (1/2+ ) || %K+%β+=67 , %α=33 |- |<sup>196</sup>Bi || 308 s || (3+ ) || %K+%β+=100, %α=0.00115 |- |<sup>196m1</sup>Bi || 0.6 s || (7+ ) || %IT=100 |- |<sup>196m2</sup>Bi || 240 s || (10- ) || %K+%β+=74.2 , %IT=25.8 , %α=0.00038 |- |<sup>197</sup>Bi || 9.33 m || (9/2-) || %K+%β+=100, %α=1·10<sup>-4</sup> sys |- |<sup>197m1</sup>Bi || 5.04 m || (1/2+ ) || %K+%β+=45 , %α=55 , %IT < 0.3 |- |<sup>198</sup>Bi || 10.3 m || (2+ , 3+ ) || %K+%β+=100 |- |<sup>198m1</sup>Bi || 11.6 m || (7+ ) || %K+%β+=100 |- |<sup>198m2</sup>Bi || 7.7 s || (10- ) || %IT=100 |- |<sup>199</sup>Bi || 27 m || 9/2- || %K+%β+=100 |- |<sup>199m1</sup>Bi || 24.70 m || (1/2+ ) || %K+%β+=99 , %α ~ 0.01, %IT < 2 |- |<sup>200</sup>Bi || 36.4 m || 7+ || %K+%β+=100 |- |<sup>200m1</sup>Bi || 31 m || (2+ ) || %K+%β+ > 90, %IT < 10 |- |<sup>200m2</sup>Bi || 0.40 s || (10- ) || %IT=100 |- |<sup>201</sup>Bi || 108 m || 9/2- || %K+%β+=100, %α < 1·10<sup>-4</sup> |- |<sup>201m1</sup>Bi || 59.1 m || 1/2+ || %K > 93, %IT < 6.8, %α ~ 0.3 |- |<sup>202</sup>Bi || 1.72 h || 5+ || %K+%β+=100, %α<1·10<sup>-5</sup> |- |<sup>203</sup>Bi || 11.76 h || 9/2- || %K+%β+=100, %α ~ 1·10<sup>-5</sup> |- |<sup>203m1</sup>Bi || 303 ms || 1/2+ || %IT=100 |- |<sup>204</sup>Bi || 11.22 h || 6+ || %K+%β+=100 |- |<sup>204m1</sup>Bi || 13.0 ms || 10- || %IT=100 |- |<sup>204m2</sup>Bi || 1.07 ms || (17+ ) || %IT=100 |- |<sup>205</sup>Bi || 15.31 d || 9/2- || %K+%β+=100 |- |<sup>206</sup>Bi || 6.243 d || 6(+) || %K+%β+=100 |- |<sup>207</sup>Bi || 31.55 a || 9/2- || %K+%β+=100 |- |<sup>208</sup>Bi || 3.68·10<sup>5</sup> a || (5) + || %K+%β+=100 |- |<sup>208m1</sup>Bi || 2.58 ms || (10) - || %IT=100 |- |<sup>209</sup>Bi || 1.9·10<sup>19</sup> a || 9/2- || %Häufigkeit=100, %α=100 |- |<sup>210</sup>Bi || 5.013 d || 1- || %β-=100, %α=1.32·10<sup>-4</sup> |- |<sup>210m1</sup>Bi || 3.04·10<sup>6</sup> a || 9- || %α=100 |- |<sup>211</sup>Bi || 2.14 m || 9/2- || %α=99.724 , %β-=0.276 |- |<sup>212</sup>Bi || 60.55 m || 1(-) || %β-=64.06 , %α=35.94 , %β-α=0.023 |- |<sup>212m1</sup>Bi || 25.0 m || (9-) || %α=67 , %β-=33 , %β-α=30 |- |<sup>212m2</sup>Bi || 7.0 m || || %β- ~ 100 |- |<sup>213</sup>Bi || 45.59 m || 9/2- || %β-=97.91 , %α=2.09 |- |<sup>214</sup>Bi || 19.9 m || 1- || %β-=99.979 , %α=0.021 |- |<sup>215</sup>Bi || 7.6 m || || %β-=100 |- |<sup>216</sup>Bi || 3.6 m || (1-) || %β- ~ 100 |- |<sup>217</sup>Bi || 97 s || (9/2-) || %β-=100 |} ==Polonium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>190</sup>Po || 2.0 ms || 0+ || %α=100, %K+%β+=0.1 sys |- |<sup>191</sup>Po || 15.5 ms || || %α=? |- |<sup>192</sup>Po || 0.0332 s || 0+ || %α=100 |- |<sup>193</sup>Po || 0.42 s || (3/2- ) || %α=? |- |<sup>193m1</sup>Po || 0.24 s || (13/2+ ) || %α=? |- |<sup>194</sup>Po || 0.392 s || 0+ || %α=93 |- |<sup>195</sup>Po || 4.64 s || (3/2- ) || %α=75 , %K+%β+=25 |- |<sup>195m1</sup>Po || 1.92 s || (13/2+ ) || %α ~ 90, %K+%β+ ~ 10, %IT < 0.01 |- |<sup>196</sup>Po || 5.8 s || 0+ || %α ~ 98, %K+%β+ ~ 2 |- |<sup>197</sup>Po || 53.6 s || (3/2- ) || %K+%β+=56 , %α=44 |- |<sup>197m1</sup>Po || 25.8 s || (13/2+ ) || %α=84 , %K+%β+=16 , %IT=0.01 sys |- |<sup>198</sup>Po || 1.77 m || 0+ || %α=57 , %K+%β+=43 |- |<sup>199</sup>Po || 5.48 m || 3/2- || %K+%β+=88 , %α=12 |- |<sup>199m1</sup>Po || 4.13 m || 13/2+ || %K+%β+=59 , %α=39 , %IT=2.1 |- |<sup>200</sup>Po || 11.5 m || 0+ || %α=11.1 , %K+%β+=88.9 |- |<sup>201</sup>Po || 15.3 m || 3/2- || %K+%β+=98.4 , %α=1.6 |- |<sup>201m1</sup>Po || 8.9 m || 13/2+ || %IT=56 , %K=41 , %α ~ 2.9 |- |<sup>202</sup>Po || 44.7 m || 0+ || %K+%β+=98.08 , %α=1.92 |- |<sup>202m1</sup>Po || 85 ns || 8+ || |- |<sup>202m2</sup>Po || 200 ns || 11- || |- |<sup>202m3</sup>Po || 19 ns || 12+ || |- |<sup>202m4</sup>Po || 11 ns || (15-) || |- |<sup>203</sup>Po || 36.7 m || 5/2- || %K+%β+=99.89 , %α=0.11 |- |<sup>203m1</sup>Po || 45 s || 13/2+ || %IT ~ 100 , %α ~ 0.04 sys |- |<sup>204</sup>Po || 3.53 h || 0+ || %K+%β+=99.34 , %α=0.66 |- |<sup>205</sup>Po || 1.66 h || 5/2- || %K+%β+=99.96 , %α=0.04 |- |<sup>205m1</sup>Po || 58 ms || 19/2- || %IT=100 |- |<sup>206</sup>Po || 8.8 d || 0+ || %K+%β+=94.55 , %α=5.45 |- |<sup>207</sup>Po || 5.80 h || 5/2- || %K+%β+=99.979 , %α=0.021 |- |<sup>207m1</sup>Po || 2.8 s || 19/2- || %IT=100 |- |<sup>208</sup>Po || 2.898 a || 0+ || %α=99.9958 , %K+%β+=0.0042 |- |<sup>209</sup>Po || 102 a || 1/2- || %α=99.52 , %K+%β+=0.48 |- |<sup>210</sup>Po || 138.376 d || 0+ || %α=100 |- |<sup>211</sup>Po || 0.516 s || 9/2+ || %α=100 |- |<sup>211m1</sup>Po || 25.2 s || (25/2+ ) || %α=99.984 , %IT=0.016 |- |<sup>212</sup>Po || 0.299 μs || 0+ || %α=100 |- |<sup>212m1</sup>Po || 45.1 s || (18+) || %α=99.93 , %IT=0.07 |- |<sup>213</sup>Po || 4.2 μs || 9/2+ || %α=100 |- |<sup>214</sup>Po || 164.3 μs || 0+ || %α=100 |- |<sup>215</sup>Po || 1.781 ms || 9/2+ || %α=99.99977 , %β-=2.3·10<sup>-4</sup> |- |<sup>216</sup>Po || 0.145 s || 0+ || %α=100 |- |<sup>217</sup>Po || 10 s || || %α > 95, %β- < 5 |- |<sup>218</sup>Po || 3.10 m || 0+ || %α=99.980 , %β-=0.020 |} ==Astat== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>193</sup>At || 40 ms || || %α=? |- |<sup>194</sup>At || 40 ms || || %α=? |- |<sup>194m1</sup>At || 250 ms || || %α=? |- |<sup>195</sup>At || 0.63 s || || %α > 75, %K+%β+ < 25 |- |<sup>196</sup>At || 0.253 s || || %α ~ 100 |- |<sup>197</sup>At || 0.35 s || (9/2- ) || %α=96 , %K+%β+=4 |- |<sup>197m1</sup>At || 3.7 s || (1/2+ ) || %α=?, %K+%β+=? |- |<sup>198</sup>At || 4.2 s || (3+ ) || %α=90 , %K+%β+=10 |- |<sup>198m1</sup>At || 1.0 s || (10- ) || %α=84 , %K+%β+=16 |- |<sup>199</sup>At || 7.2 s || (9/2- ) || %α=90 , %K+%β+=10 |- |<sup>200</sup>At || 43 s || (3+ ) || %α=57 , %K+%β+=43 |- |<sup>200m1</sup>At || 47 s || (7+) || %α=43 , %K+%β+ < 57 |- |<sup>200m2</sup>At || 3.5 s || (10- ) || %α ~ 10.5, %IT ~ 85, %K ~ 4.5 |- |<sup>201</sup>At || 89 s || (9/2- ) || %α=71 , %K+%β+=29 |- |<sup>202</sup>At || 184 s || (2,3)+ || %K+%β+=82 , %α=18 |- |<sup>202m1</sup>At || 182 s || (7+) || %K+%β+=91.3, %α=8.7 |- |<sup>202m2</sup>At || 0.46 s || (10- ) || %IT=99.7 , %K+%β+=0.25 sys %α=0.096 |- |<sup>203</sup>At || 7.4 m || 9/2- || %K+%β+=69 , %α=31 |- |<sup>204</sup>At || 9.2 m || 7+ || %K+%β+=96.2 , %α=3.8 |- |<sup>204m1</sup>At || 108 ms || (10- ) || %IT=100 |- |<sup>205</sup>At || 26.2 m || 9/2- || %K+%β+=90 , %α=10 |- |<sup>206</sup>At || 30.0 m || (5)+ || %K+%β+=99.11 , %α=0.89 |- |<sup>207</sup>At || 1.80 h || 9/2- || %K+%β+=91.4 , %α=8.6 |- |<sup>208</sup>At || 1.63 h || 6+ || %K+%β+=99.45 , %α=0.55 |- |<sup>209</sup>At || 5.41 h || 9/2- || %K+%β+=95.9 , %α=4.1 |- |<sup>210</sup>At || 8.1 h || (5)+ || %K+%β+=99.825 , %α=0.175 |- |<sup>211</sup>At || 7.214 h || 9/2- || %α=41.80 , %K=58.20 |- |<sup>212</sup>At || 0.314 s || (1- ) || %α=100, %β- < 2·10<sup>-6</sup>, %K+%β+ < 3·10<sup>-2</sup> |- |<sup>212m1</sup>At || 0.119 s || (9-) || %α > 99, %IT < 1 |- |<sup>213</sup>At || 125 ns || 9/2- || %α=100 |- |<sup>214</sup>At || 558 ns || 1- || %α=100 |- |<sup>214m1</sup>At || 265 ns || || |- |<sup>214m2</sup>At || 760 ns || 9- || |- |<sup>215</sup>At || 0.10 ms || 9/2- || %α=100 |- |<sup>216</sup>At || 0.30 ms || 1- || %α=100, %K<3·10<sup>-7</sup>, %β-<6·10<sup>-3</sup> |- |<sup>216m1</sup>At || 0.1 ms || (9-) || |- |<sup>217</sup>At || 32.3 ms || 9/2- || %α=99.988 , %β-=0.012 |- |<sup>218</sup>At || 1.5 s || || %α=99.9 , %β-=0.1 |- |<sup>219</sup>At || 56 s || || %α ~ 97, %β- ~ 3 |- |<sup>220</sup>At || 3.71 m || 3 || %α=8 , %β-=92 |- |<sup>221</sup>At || 2.3 m || || %β-=100 |- |<sup>222</sup>At || 54 s || || %β-=100 |- |<sup>223</sup>At || 50 s || || %β-=100, %α=0.008 sys |} ==Radon== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>196</sup>Rn || 3 ms || 0+ || %α ~ 100 |- |<sup>197</sup>Rn || 65 ms || (3/2- ) || %α ~ 100 |- |<sup>197m1</sup>Rn || 19 ms || (13/2+ ) || %α ~ 100 |- |<sup>198</sup>Rn || 64 ms || 0+ || %α=100 |- |<sup>199</sup>Rn || 0.62 s || (3/2- ) || %α=94 sys, %K+%β+=6 sys |- |<sup>199m1</sup>Rn || 0.32 s || (13/2+ ) || %α=97 sys, %K+%β+=3 sys |- |<sup>200</sup>Rn || 0.96 s || 0+ || %α=86 +14-4, %K+%β+<18 |- |<sup>201</sup>Rn || 7.0 s || (3/2- ) || %α ~ 80 , %K+%β+ ~ 20 |- |<sup>201m1</sup>Rn || 3.8 s || (13/2+ ) || %α ~ 90, %K+%β+ ~ 10, %IT ~ 0 |- |<sup>202</sup>Rn || 10.0 s || 0+ || %α=86 , %K+%β+=14 |- |<sup>203</sup>Rn || 45 s || (3/2,5/2)- || %α=66 , %K+%β+=34 |- |<sup>203m1</sup>Rn || 28 s || (13/2+ ) || %α ~ 80 sys%K+%β+ ~ 20 sys |- |<sup>204</sup>Rn || 1.24 m || 0+ || %α=73 , %K+%β+=27 |- |<sup>205</sup>Rn || 2.8 m || 5/2- || %K+%β+=77 , %α=23 |- |<sup>206</sup>Rn || 5.67 m || 0+ || %α=63 , %K+%β+=37 |- |<sup>207</sup>Rn || 9.25 m || 5/2- || %K+%β+=79 , %α=21 |- |<sup>208</sup>Rn || 24.35 m || 0+ || %α=62 , %K+%β+=38 |- |<sup>209</sup>Rn || 28.5 m || 5/2- || %K+%β+=83 , %α=17 |- |<sup>210</sup>Rn || 2.4 h || 0+ || %α=96 , %K+%β+=4 |- |<sup>211</sup>Rn || 14.6 h || 1/2- || %K=72.6 , %α=27.4 |- |<sup>212</sup>Rn || 23.9 m || 0+ || %α=100 |- |<sup>213</sup>Rn || 25.0 ms || (9/2+ ) || %α=100 |- |<sup>214</sup>Rn || 0.27 μs || 0+ || %α=100 |- |<sup>214m1</sup>Rn || 0.69 ns || 6+ || |- |<sup>214m2</sup>Rn || 6.5 ns || 8+ || |- |<sup>215</sup>Rn || 2.30 μs || 9/2+ || %α=100 |- |<sup>216</sup>Rn || 45 μs || 0+ || %α=100 |- |<sup>217</sup>Rn || 0.54 ms || 9/2+ || %α=100 |- |<sup>218</sup>Rn || 35 ms || 0+ || %α=100 |- |<sup>219</sup>Rn || 3.96 s || 5/2+ || %α=100 |- |<sup>220</sup>Rn || 55.6 s || 0+ || %α=100 |- |<sup>221</sup>Rn || 25 m || 7/2(+) || %β-=78 , %α=22 |- |<sup>222</sup>Rn || 3.8235 d || 0+ || %α=100 |- |<sup>223</sup>Rn || 23.2 m || 7/2 || %β-=100, %α=0.0004 sys |- |<sup>224</sup>Rn || 107 m || 0+ || %β-=100 |- |<sup>225</sup>Rn || 4.5 m || 7/2- || %β-=100 |- |<sup>226</sup>Rn || 7.4 m || 0+ || %β-=100 |- |<sup>227</sup>Rn || 22.5 s || || %β-=100 |- |<sup>228</sup>Rn || 65 s || 0+ || %β-=100 |} ==Francium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>200</sup>Fr || 19 ms || (3+ ) || %α=100 |- |<sup>200m1</sup>Fr || 0.57 s || (10- ) || %α=100 |- |<sup>201</sup>Fr || 48 ms || (9/2- ) || %α=100 , %K+%β+ < 1 |- |<sup>202</sup>Fr || 0.34 s || (3+ ) || %α ~ 97 , %K+%β+ ~ 3 |- |<sup>202m1</sup>Fr || 0.34 s || (10- ) || %α ~ 97 , %K+%β+ ~ 3 |- |<sup>203</sup>Fr || 0.55 s || (9/2- ) || %α ~ 95 , %K+%β+ ~ 5 |- |<sup>204</sup>Fr || 1.7 s || (3+ ) || %α ~ 80, %K+%β+ ~ 20 |- |<sup>204m1</sup>Fr || 2.6 s || (7+) || %α=? |- |<sup>204m2</sup>Fr || 1 s || (10- ) || %α=? |- |<sup>205</sup>Fr || 3.85 s || (9/2- ) || %α > 99, %K+%β+ < 1 |- |<sup>206</sup>Fr || 15.9 s || (5+) || %α=84 , %K+%β+=16 |- |<sup>206m1</sup>Fr || 0.7 s || (10- ) || %α=0.3 , %IT=? |- |<sup>207</sup>Fr || 14.8 s || 9/2- || %α=95 , %K+%β+=5 |- |<sup>208</sup>Fr || 59.1 s || 7+ || %α=90 , %K+%β+=10 |- |<sup>209</sup>Fr || 50.0 s || 9/2- || %α=89 , %K+%β+=11 |- |<sup>210</sup>Fr || 3.18 m || 6+ || %α=60 , %K+%β+=40 |- |<sup>211</sup>Fr || 3.10 m || 9/2- || %α>80, %K<20 |- |<sup>212</sup>Fr || 20.0 m || 5+ || %K+%β+=57 , %α=43 |- |<sup>213</sup>Fr || 34.6 s || 9/2- || %α=99.45 , %K+%β+=0.55 |- |<sup>214</sup>Fr || 5.0 ms || (1- ) || %α=100 |- |<sup>214m1</sup>Fr || 3.35 ms || (8-) || %α=100 |- |<sup>215</sup>Fr || 86 ns || 9/2- || %α=100 |- |<sup>215m1</sup>Fr || 3.5 ns || (23/2)- || |- |<sup>216</sup>Fr || 0.70 μs || (1- ) || %α=100, %K<2·10<sup>-7</sup> sys |- |<sup>217</sup>Fr || 22 μs || 9/2- || %α=100 |- |<sup>218</sup>Fr || 1.0 ms || 1- || %α=100 |- |<sup>218m1</sup>Fr || 22.0 ms || || %α < 100 , %IT=? |- |<sup>219</sup>Fr || 20 ms || 9/2- || %α=100 |- |<sup>220</sup>Fr || 27.4 s || 1+ || %α=99.65 , %β-=0.35 |- |<sup>221</sup>Fr || 4.9 m || 5/2- || %α=100, %γ=8.8·10<sup>-11</sup> |- |<sup>222</sup>Fr || 14.2 m || 2- || %β-=100 |- |<sup>223</sup>Fr || 21.8 m || 3/2(-) || %β-=99.994, %α=0.006 |- |<sup>224</sup>Fr || 3.33 m || 1- || %β-=100 |- |<sup>225</sup>Fr || 4.0 m || 3/2- || %β-=100 |- |<sup>226</sup>Fr || 49 s || 1- || %β-=100 |- |<sup>227</sup>Fr || 2.47 m || 1/2+ || %β-=100 |- |<sup>228</sup>Fr || 38 s || 2- || %β-=100 |- |<sup>229</sup>Fr || 50 s || || %β-=100 |- |<sup>230</sup>Fr || 19.1 s || || %β-=100 |- |<sup>231</sup>Fr || 17.5 s || || %β-=100 |- |<sup>232</sup>Fr || 5 s || || %β-=100 |} ==Radium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>202</sup>Ra || 0.7 ms || 0+ || %α=100 |- |<sup>203</sup>Ra || 1.0 ms || (3/2- ) || %α ~ 100 |- |<sup>203m1</sup>Ra || 33 ms || (13/2+ ) || %α ~ 100 |- |<sup>204</sup>Ra || 59 ms || 0+ || %α ~ 100 |- |<sup>205</sup>Ra || 210 ms || (3/2- ) || %α=? |- |<sup>205m1</sup>Ra || 170 ms || (13/2+ ) || %α=? |- |<sup>206</sup>Ra || 0.24 s || 0+ || %α ~ 100 |- |<sup>207</sup>Ra || 1.3 s || (5/2,3/2)- || %α ~ 90, %K+%β+ ~ 10 |- |<sup>207m1</sup>Ra || 55 ms || (13/2+ ) || %IT=85 sys%α=15 sys %K+%β+ ~ 0.55 |- |<sup>208</sup>Ra || 1.3 s || 0+ || %α=95 sys %K+%β+=5 sys |- |<sup>209</sup>Ra || 4.6 s || 5/2- || %α ~ 90, %K+%β+ ~ 10 |- |<sup>210</sup>Ra || 3.7 s || 0+ || %α ~ 96, %K+%β+ ~ 4 |- |<sup>211</sup>Ra || 13 s || 5/2(-) || %α > 93, %K < 7 |- |<sup>212</sup>Ra || 13.0 s || 0+ || %α ~ 85, %K+%β+ ~ 15 |- |<sup>213</sup>Ra || 2.74 m || 1/2- || %α=80 , %K+%β+=20 |- |<sup>213m1</sup>Ra || 2.1 ms || || %IT ~ 99, %α ~ 1 |- |<sup>214</sup>Ra || 2.46 s || 0+ || %α=99.941 , %K=0.059 |- |<sup>215</sup>Ra || 1.59 ms || (9/2+ ) || %α=100 |- |<sup>216</sup>Ra || 182 ns || 0+ || %α=100, %K<1·10<sup>-8</sup> |- |<sup>217</sup>Ra || 1.6 μs || (9/2+ ) || %α=100 |- |<sup>218</sup>Ra || 25.6 μs || 0+ || %α=100 |- |<sup>219</sup>Ra || 10 ms || (7/2)+ || %α=100 |- |<sup>220</sup>Ra || 18 ms || 0+ || %α=100 |- |<sup>221</sup>Ra || 28 s || 5/2+ || %α=100, %γ=1.2·10<sup>-10</sup> |- |<sup>222</sup>Ra || 38.0 s || 0+ || %α=100, %14C=3.0·10<sup>-8</sup> |- |<sup>223</sup>Ra || 11.435 d || 3/2+ || %α=100, %14C=6.4·10<sup>-8</sup> |- |<sup>224</sup>Ra || 3.66 d || 0+ || %α=100, %14C=4.3·10<sup>-9</sup> |- |<sup>225</sup>Ra || 14.9 d || 1/2+ || %β-=100 |- |<sup>226</sup>Ra || 1600 a || 0+ || %α=100, %14C=3.2·10<sup>-9</sup> |- |<sup>227</sup>Ra || 42.2 m || 3/2+ || %β-=100 |- |<sup>228</sup>Ra || 5.75 a || 0+ || %β-=100 |- |<sup>229</sup>Ra || 4.0 m || 5/2(+) || %β-=100 |- |<sup>230</sup>Ra || 93 m || 0+ || %β-=100 |- |<sup>231</sup>Ra || 103 s || (7/2-,1/2+ ) || %β-=100 |- |<sup>232</sup>Ra || 250 s || 0+ || %β-=100 |- |<sup>233</sup>Ra || 30 s || || %β-=100 |- |<sup>234</sup>Ra || 30 s || 0+ || %β-=100 |} ==Actinium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>206</sup>Ac || 22 ms || (3+ ) || %α=? |- |<sup>206m1</sup>Ac || 33 ms || (10- ) || |- |<sup>207</sup>Ac || 22 ms || (9/2- ) || %α ~ 100 |- |<sup>208</sup>Ac || 95 ms || (3+ ) || %α=? |- |<sup>208m1</sup>Ac || 25 ms || (10- ) || %α=? |- |<sup>209</sup>Ac || 0.10 s || (9/2- ) || %α ~ 99, %K+%β+ ~ 1 |- |<sup>210</sup>Ac || 0.35 s || || %α ~ 96, %K+%β+ ~ 4 |- |<sup>211</sup>Ac || 0.25 s || || %α ~ 100 |- |<sup>212</sup>Ac || 0.93 s || || %α ~ 97, %K+%β+ ~ 3 |- |<sup>213</sup>Ac || 0.80 s || || %α < 100 |- |<sup>214</sup>Ac || 8.2 s || || %α > 89 , %K < 11 |- |<sup>215</sup>Ac || 0.17 s || 9/2- || %α=99.91 , %K+%β+=0.09 |- |<sup>216</sup>Ac || 0.33 ms || (1- ) || %α=100 |- |<sup>216m1</sup>Ac || 0.33 ms || (9-) || |- |<sup>217</sup>Ac || 69 ns || 9/2- || %α=100, %K+%β+ < 2 |- |<sup>217m1</sup>Ac || 740 ns || (29/2)+ || |- |<sup>218</sup>Ac || 1.08 μs || (1- ) || %α=100 |- |<sup>219</sup>Ac || 11.8 μs || 9/2- || %α=100, %K+%β+ ~ 1·10<sup>-6</sup> |- |<sup>220</sup>Ac || 26.4 ms || (3-) || %α=100 |- |<sup>221</sup>Ac || 52 ms || (3/2- ) || %α=100 |- |<sup>222</sup>Ac || 5.0 s || 1- || %α=99 , %K+%β+=1 |- |<sup>222m1</sup>Ac || 63 s || || %α > 88, %IT < 10 , %K+%β+ < 2 |- |<sup>223</sup>Ac || 2.10 m || (5/2- ) || %α=99, %K=1 |- |<sup>224</sup>Ac || 2.78 h || 0- || %K=90.9 +14-20, %α=9.1 +20-14, %β- < 1.6 sys |- |<sup>225</sup>Ac || 10.0 d || (3/2- ) || %α=100, %14C=6.0·10<sup>-10</sup> |- |<sup>226</sup>Ac || 29.37 h || (1) || %α=6·10<sup>-3</sup> , %β-=83 , %K=17 |- |<sup>227</sup>Ac || 21.773 a || 3/2- || %β-=98.620 , %α=1.380 |- |<sup>228</sup>Ac || 6.15 h || 3+ || %β-=100 |- |<sup>229</sup>Ac || 62.7 m || (3/2+ ) || %β-=100 |- |<sup>230</sup>Ac || 122 s || (1+ ) || %β-=100 |- |<sup>231</sup>Ac || 7.5 m || (1/2+ ) || %β-=100 |- |<sup>232</sup>Ac || 119 s || (1+ ) || %β-=100 |- |<sup>233</sup>Ac || 145 s || (1/2+ ) || %β-=100 |- |<sup>234</sup>Ac || 44 s || || %β-=100 |} ==Thorium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>210</sup>Th || 9 ms || 0+ || %α ~ 100 |- |<sup>211</sup>Th || 37 ms || || %α=?, %K=? |- |<sup>212</sup>Th || 30 ms || 0+ || %α=100, %K+%β+ ~ 0.3 |- |<sup>213</sup>Th || 140 ms || || %α < 100 |- |<sup>214</sup>Th || 100 ms || 0+ || %α=100 |- |<sup>215</sup>Th || 1.2 s || (1/2- ) || %α=100 |- |<sup>216</sup>Th || 0.028 s || 0+ || %α=100, %K+%β+ ~ 0.01 sys |- |<sup>216m1</sup>Th || 180 μs || (8+,11- ) || |- |<sup>217</sup>Th || 0.252 ms || (9/2+ ) || %α=100 |- |<sup>218</sup>Th || 109 ns || 0+ || %α=100 |- |<sup>219</sup>Th || 1.05 μs || || %α=100, %K+%β+ ~ 1·10<sup>-7</sup> |- |<sup>220</sup>Th || 9.7 μs || 0+ || %α=100, %K=2·10<sup>-7</sup> sys |- |<sup>221</sup>Th || 1.68 ms || (7/2+ ) || %α=100 |- |<sup>222</sup>Th || 2.8 ms || 0+ || %α=100 |- |<sup>223</sup>Th || 0.60 s || (5/2)+ || %α=100 |- |<sup>224</sup>Th || 1.05 s || 0+ || %α=100 |- |<sup>225</sup>Th || 8.72 m || (3/2)+ || %α ~ 90, %K ~ 10 |- |<sup>226</sup>Th || 30.57 m || 0+ || %α=100 |- |<sup>227</sup>Th || 18.72 d || (1/2+ ) || %α=100 |- |<sup>228</sup>Th || 1.9116 a || 0+ || %α=100, %20O=1.13·10<sup>-11</sup> |- |<sup>229</sup>Th || 7340 a || 5/2+ || %α=100 |- |<sup>230</sup>Th || 7.538·10<sup>4</sup> a || 0+ || %α=100, %24NE=5.6·10<sup>-11</sup> , %SF < 3.8·10<sup>-12</sup> |- |<sup>231</sup>Th || 25.52 h || 5/2+ || %β-=100, %α ~ 1·10<sup>-8</sup> |- |<sup>232</sup>Th || 1.405·10<sup>10</sup> a || 0+ || %Häufigkeit=100, %α=100 , %SF<1.8·10<sup>-9</sup> |- |<sup>233</sup>Th || 22.3 m || 1/2+ || %β-=100 |- |<sup>234</sup>Th || 24.10 d || 0+ || %β-=100 |- |<sup>235</sup>Th || 7.1 m || (1/2+ ) || %β-=100 |- |<sup>236</sup>Th || 37.5 m || 0+ || %β-=100 |- |<sup>237</sup>Th || 5.0 m || || %β-=100 |} ==Protactinium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>212</sup>Pa || 5.1 ms || (3+ ) || %α=? |- |<sup>213</sup>Pa || 5.3 ms || || %α=? |- |<sup>214</sup>Pa || 17 ms || || %α=? |- |<sup>215</sup>Pa || 14 ms || || %α=100 |- |<sup>216</sup>Pa || 0.20 s || || %K ~ 2 sys %α ~ 98 sys |- |<sup>217</sup>Pa || 4.9 ms || || %α =100 |- |<sup>217m1</sup>Pa || 1.6 ms || || %α < 100 |- |<sup>218</sup>Pa || 0.12 ms || || %α=100 |- |<sup>219</sup>Pa || 53 ns || 9/2- || %α=100, %K+%β+ ~ 5·10<sup>-9</sup> |- |<sup>220</sup>Pa || 0.78 μs || || %α=100, %K+%β+=3·10<sup>-7</sup> sys |- |<sup>221</sup>Pa || 5.9 μs || 9/2- || %α=100 |- |<sup>222</sup>Pa || 2.9 ms || || %α=100 |- |<sup>223</sup>Pa || 6.5 ms || || %α=100, %K+%β+ < 1.0·10<sup>-3</sup> |- |<sup>224</sup>Pa || 0.79 s || || %α=100 |- |<sup>225</sup>Pa || 1.7 s || || %α=100 |- |<sup>226</sup>Pa || 1.8 m || || %α=74 , %K+%β+=26 |- |<sup>227</sup>Pa || 38.3 m || (5/2- ) || %α=85 , %K=15 |- |<sup>228</sup>Pa || 22 h || 3+ || %K+%β+=98.0 , %α=2.0 |- |<sup>229</sup>Pa || 1.50 d || (5/2+ ) || %K=99.52 , %α=0.48 |- |<sup>230</sup>Pa || 17.4 d || (2- ) || %K+%β+=91.6 , %β-=8.4 , %α=0.0032 |- |<sup>231</sup>Pa || 32760 a || 3/2- || %α=100, %SF < 1.6·10<sup>-11</sup> |- |<sup>232</sup>Pa || 1.31 d || (2- ) || %β-=99.997 , %K=0.003 |- |<sup>233</sup>Pa || 26.967 d || 3/2- || %β-=100 |- |<sup>234</sup>Pa || 6.70 h || 4+ || %β-=100, %SF < 3·10<sup>-10</sup> |- |<sup>234m1</sup>Pa || 1.17 m || (0- ) || %β-=99.84 , %IT=0.16 , %SF < 1·10<sup>-9</sup> |- |<sup>235</sup>Pa || 24.5 m || (3/2- ) || %β-=100 |- |<sup>236</sup>Pa || 9.1 m || 1(-) || %β-=100 |- |<sup>237</sup>Pa || 8.7 m || (1/2+ ) || %β-=100 |- |<sup>238</sup>Pa || 2.3 m || (3-) || %β-=100, %SF < 2.6·10<sup>-6</sup> |} ==Uran== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>218</sup>U || 1.5 ms || 0+ || %α=100 |- |<sup>219</sup>U || 42 μs || || %α=? |- |<sup>220</sup>U || || || |- |<sup>221</sup>U || || || |- |<sup>222</sup>U || 1.0 μs || 0+ || %α=100 |- |<sup>223</sup>U || 18 μs || || %α=? |- |<sup>224</sup>U || 0.9 ms || 0+ || %α=100 |- |<sup>225</sup>U || 95 ms || || %α=100 |- |<sup>226</sup>U || 0.35 s || 0+ || %α=100 |- |<sup>227</sup>U || 1.1 m || (3/2+ ) || %α=100, %K+%β+ < 0.001 |- |<sup>228</sup>U || 9.1 m || 0+ || %K<5, %α>95 |- |<sup>229</sup>U || 58 m || (3/2+ ) || %K+%β+ ~ 80, %α ~ 20 |- |<sup>230</sup>U || 20.8 d || 0+ || %α=100, %SF < 1.4·10<sup>-10</sup> |- |<sup>231</sup>U || 4.2 d || (5/2- ) || %K=100, %α ~ 0.0055 |- |<sup>232</sup>U || 68.9 a || 0+ || %α=100, %24NE=9·10<sup>-11</sup> |- |<sup>233</sup>U || 1.592·10<sup>5</sup> a || 5/2+ || %α=100, %SF < 6·10<sup>-11</sup>, %24NE < 9.5·10<sup>-11</sup> |- |<sup>234</sup>U || 2.455·10<sup>5</sup> a || 0+ || %Häufigkeit=0.0055, %α=100, %SF=1.64·10<sup>-9</sup> , %nE=9·10<sup>-12</sup> , %MG=1.4·10<sup>-11</sup> |- |<sup>235</sup>U || 7.038·10<sup>8</sup> a || 7/2- || %Häufigkeit=0.7200, %α=100, %SF=7.0·10<sup>-9</sup> , %20NE=8·10<sup>-10</sup> |- |<sup>235m1</sup>U || 25 m || 1/2+ || %IT=100 |- |<sup>236</sup>U || 2.342·10<sup>7</sup> a || 0+ || %α=100, %SF=9.4·10<sup>-8</sup> |- |<sup>237</sup>U || 6.75 d || 1/2+ || %β-=100 |- |<sup>238</sup>U || 4.468·10<sup>9</sup> a || 0+ || %Häufigkeit=99.2745, %α=100, %SF=5.45·10<sup>-5</sup> , %ββ=2.2·10<sup>-10</sup> |- |<sup>238m1</sup>U || 225 ns || 0+ || |- |<sup>238m2</sup>U || 1 ns || || |- |<sup>239</sup>U || 23.45 m || 5/2+ || %β-=100 |- |<sup>240</sup>U || 14.1 h || 0+ || %β-=100 |- |<sup>241</sup>U || || || |- |<sup>242</sup>U || 16.8 m || 0+ || %β-=100 |} ==Neptunium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>225</sup>Np || 6 ms || || %α=? |- |<sup>226</sup>Np || 35 ms || || %α=100 |- |<sup>227</sup>Np || 0.51 s || || %α=100, %K+%β+ ~ 0.05 |- |<sup>228</sup>Np || 61.4 s || || %K=60 , %α=40 , %KSF=0.020 |- |<sup>229</sup>Np || 4.0 m || || %α > 50, %K < 50 |- |<sup>230</sup>Np || 4.6 m || || %K+%β+ < 97, %α > 3 |- |<sup>231</sup>Np || 48.8 m || (5/2) || %K=98 , %α=2 |- |<sup>232</sup>Np || 14.7 m || (4+ ) || %K+%β+=100 |- |<sup>233</sup>Np || 36.2 m || (5/2+ ) || %K=100, %α < 0.001 |- |<sup>234</sup>Np || 4.4 d || (0+ ) || %K+%β+=100 |- |<sup>235</sup>Np || 396.1 d || 5/2+ || %K=99.99740 , %α=0.00260 |- |<sup>236</sup>Np || 1.54·10<sup>5</sup> a || (6-) || %K=87.3 , %β-=12.5 , %α=0.16 |- |<sup>236m1</sup>Np || 22.5 h || 1 || %K=52 , %β-=48 |- |<sup>237</sup>Np || 2.144·10<sup>6</sup> a || 5/2+ || %α=100, %SF < 2·10<sup>-10</sup> |- |<sup>237m1</sup>Np || 45 ns || || |- |<sup>238</sup>Np || 2.117 d || 2+ || %β-=100 |- |<sup>238m1</sup>Np || 112 ns || || |- |<sup>239</sup>Np || 2.3565 d || 5/2+ || %β-=100 |- |<sup>240</sup>Np || 61.9 m || (5+) || %β-=100 |- |<sup>240m1</sup>Np || 7.22 m || 1(+) || %β-=99.89 , %IT=0.11 |- |<sup>241</sup>Np || 13.9 m || (5/2+ ) || %β-=100 |- |<sup>242</sup>Np || 5.5 m || (6) || %β-=100 |- |<sup>242m1</sup>Np || 2.2 m || (1+ ) || %β-=100 |- |<sup>243</sup>Np || 1.8 m || (5/2- ) || %β-=100 |- |<sup>244</sup>Np || 2.29 m || (7-) || %β-=100 |} ==Plutonium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>228</sup>Pu || 4 ms || 0+ || %α=100 |- |<sup>229</sup>Pu || || || %α=? |- |<sup>230</sup>Pu || || 0+ || %α=? |- |<sup>231</sup>Pu || || || |- |<sup>232</sup>Pu || 34.1 m || 0+ || %K=77 , %α=23 |- |<sup>233</sup>Pu || 20.9 m || || %K+%β+=99.88 , %α=0.12 |- |<sup>234</sup>Pu || 8.8 h || 0+ || %K ~ 94, %α ~ 6 |- |<sup>234m1</sup>Pu || 3 ns || || |- |<sup>235</sup>Pu || 25.3 m || (5/2+ ) || %K+%β+=99.9973 , %α=0.0027 |- |<sup>235m1</sup>Pu || 25 ns || || |- |<sup>236</sup>Pu || 2.858 a || 0+ || %α=100, %SF=1.37·10<sup>-7</sup> |- |<sup>236m1</sup>Pu || 37 ps (0+ ) || || |- |<sup>236m2</sup>Pu || 34 ns || || |- |<sup>237</sup>Pu || 45.2 d || 7/2- || %α=0.0042 , %K=99.9958 |- |<sup>237m1</sup>Pu || 0.18 s || 1/2+ || %IT=100 |- |<sup>237m2</sup>Pu || 85 ns || || |- |<sup>237m3</sup>Pu || 1.1 μs || || |- |<sup>238</sup>Pu || 87.7 a || 0+ || %α=100, %SF=1.85·10<sup>-7</sup> , %MG ~ 6·10<sup>-15</sup>, %SI ~ 1.4·10<sup>-14</sup> |- |<sup>238m1</sup>Pu || 0.6 ns || || |- |<sup>238m2</sup>Pu || 6.0 ns || (0+ ) || |- |<sup>239</sup>Pu || 24110 a || 1/2+ || %α=100, %SF=3.0·10<sup>-10</sup> |- |<sup>239m1</sup>Pu || 7.5 μs || (5/2+ ) || |- |<sup>239m2</sup>Pu || 2.6 ns || (9/2- ) || |- |<sup>240</sup>Pu || 6563 a || 0+ || %α=100 , %SF=5.75·10<sup>-6</sup> |- |<sup>241</sup>Pu || 14.35 a || 5/2+ || %β-=99.998, %α=0.00245 , %SF ~ 2.4·10<sup>-14</sup> |- |<sup>241m1</sup>Pu || 21 μs || || |- |<sup>241m2</sup>Pu || 32 ns || || |- |<sup>242</sup>Pu || 3.733·10<sup>5</sup> a || 0+ || %α=100 , %SF=5.54·10<sup>-4</sup> |- |<sup>243</sup>Pu || 4.956 h || 7/2+ || %β-=100 |- |<sup>243m1</sup>Pu || 45 ns || || |- |<sup>244</sup>Pu || 8.08·10<sup>7</sup> a || 0+ || %α=99.879 , %SF=0.121 , %ββ < 3·10<sup>-11</sup> |- |<sup>245</sup>Pu || 10.5 h || (9/2- ) || %β-=100 |- |<sup>245m1</sup>Pu || 90 ns || || |- |<sup>246</sup>Pu || 10.84 d || 0+ || %β-=100 |- |<sup>247</sup>Pu || 2.27 d || ? || %β-=100 |} ==Americium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>232</sup>Am || 79 s || || %K ~ 98, %α ~ 2, %KSF=0.069 |- |<sup>233</sup>Am || || || |- |<sup>234</sup>Am || 2.32 m || || %K=99.961 , %α=0.039 , %KSF=0.0066 |- |<sup>235</sup>Am || 15 m || || %K+%β+=?, %α=? |- |<sup>236</sup>Am || || || %K=?, %α=? |- |<sup>237</sup>Am || 73.0 m || 5/2(-) || %α=0.025 , %K=99.975 |- |<sup>237m1</sup>Am || 5 ns || || |- |<sup>238</sup>Am || 98 m || 1+ || %K+%β+>99.99, %α=1.0·10<sup>-4</sup> |- |<sup>238m1</sup>Am || 35 μs || || |- |<sup>239</sup>Am || 11.9 h || (5/2)- || %K=99.990 , %α=0.010 |- |<sup>239m1</sup>Am || 163 ns || (7/2+ ) || |- |<sup>240</sup>Am || 50.8 h || (3-) || %K=100, %α=1.9·10<sup>-4</sup> |- |<sup>241</sup>Am || 432.2 a || 5/2- || %α=100, %SF=4.3·10<sup>-10</sup> |- |<sup>241m1</sup>Am || 1.2 μs || || |- |<sup>242</sup>Am || 16.02 h || 1- || %β-=82.7 , %K=17.3 |- |<sup>242m1</sup>Am || 141 a || 5- || %IT=99.541 , %α=0.459 , %SF < 4.7·10<sup>-9</sup> |- |<sup>242m2</sup>Am || 14.0 ms || || %SF=?, %IT=? |- |<sup>243</sup>Am || 7370 a || 5/2- || %α=100, %SF=3.7·10<sup>-9</sup> |- |<sup>243m1</sup>Am || 5.5 μs || || |- |<sup>244</sup>Am || 10.1 h || (6-) || %β-=100 |- |<sup>244m1</sup>Am || 26 m || 1+ || %β-=99.9639 , %K=0.0361 |- |<sup>245</sup>Am || 2.05 h || (5/2)+ || %β-=100 |- |<sup>245m1</sup>Am || 0.64 μs || || |- |<sup>246</sup>Am || 39 m || (7-) || %β-=100 |- |<sup>246m1</sup>Am || 25.0 m || 2(-) || %β-=100, %IT<0.01 |- |<sup>246m2</sup>Am || 73 μs || || |- |<sup>247</sup>Am || 23.0 m || (5/2) || %β-=100 |} ==Curium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>238</sup>Cm || 2.4 h || 0+ || %K=96.16 , %α=3.84 |- |<sup>239</sup>Cm || 2.9 h || (7/2- ) || %K= 100, %α < 0.1 |- |<sup>240</sup>Cm || 27 d || 0+ || %α > 99.5 , %K < 0.5 , %SF=3.9·10<sup>-6</sup> |- |<sup>241</sup>Cm || 32.8 d || 1/2+ || %K=99.0 , %α=1.0 |- |<sup>241m1</sup>Cm || 15.3 ns || || |- |<sup>242</sup>Cm || 162.8 d || 0+ || %α=100, %SF=6.37·10<sup>-6</sup> |- |<sup>242m1</sup>Cm || 40 ps || || |- |<sup>242m2</sup>Cm || 0.18 μs || || |- |<sup>243</sup>Cm || 29.1 a || 5/2+ || %α=99.71 , %K=0.29 , %SF=5.3·10<sup>-9</sup> |- |<sup>243m1</sup>Cm || 42 ns || || |- |<sup>244</sup>Cm || 18.10 a || 0+ || %α=100, %SF=1.371·10<sup>-4</sup> |- |<sup>244m1</sup>Cm || 34 ms || 6+ || %IT=100, %SF < 7.7·10<sup>-10</sup> |- |<sup>245</sup>Cm || 8500 a || 7/2+ || %α=100, %SF=6.1·10<sup>-7</sup> |- |<sup>245m1</sup>Cm || 13.2 ns || || |- |<sup>246</sup>Cm || 4730 a || 0+ || %α=99.9737 , %SF=0.0263 |- |<sup>247</sup>Cm || 1.56·10<sup>7</sup> a || 9/2- || %α=100 |- |<sup>248</sup>Cm || 3.40·10<sup>5</sup> a || 0+ || %α=91.61 , %SF=8.39 |- |<sup>249</sup>Cm || 64.15 m || 1/2(+) || %β-=100 |- |<sup>250</sup>Cm || 9000 a || 0+ || %SF ~ 86, %α ~ 8, %β- ~ 6 |- |<sup>251</sup>Cm || 16.8 m || (1/2+ ) || %β-=100 |- |<sup>252</sup>Cm || 2 d || 0+ || %β-=100 |} ==Berkelium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>238</sup>Bk || 144 s || || %K+%β+=100, %KSF=0.048 |- |<sup>239</sup>Bk || || (7/2+ ) || |- |<sup>240</sup>Bk || 4.8 m || || %K+%β+=100, %KSF=1·10<sup>-3</sup> sys |- |<sup>241</sup>Bk || || (7/2+ ) || |- |<sup>242</sup>Bk || 7.0 m || || %K+%β+=100 |- |<sup>242m1</sup>Bk || 9.5 ns || || |- |<sup>242m2</sup>Bk || 0.60 μs || || |- |<sup>243</sup>Bk || 4.5 h || (3/2- ) || %K ~ 99.85, %α ~ 0.15 |- |<sup>243m1</sup>Bk || 5 ns || || |- |<sup>244</sup>Bk || 4.35 h || (1- ) || %K=99.994 , %α=0.006 |- |<sup>245</sup>Bk || 4.94 d || 3/2- || %K=99.88 , %α=0.12 |- |<sup>245m1</sup>Bk || 2 ns || || |- |<sup>246</sup>Bk || 1.80 d || 2(-) || %K=100, %α<0.2 sys |- |<sup>247</sup>Bk || 1380 a || (3/2- ) || %α < 100 |- |<sup>248</sup>Bk || 9 a || (6+) || %α>70 |- |<sup>248m1</sup>Bk || 23.7 h || 1(-) || %β-=70 , %K=30 , %α<0.001 |- |<sup>249</sup>Bk || 320 d || 7/2+ || %β-=99.99855 , %α=0.00145 , %SF=4.76·10<sup>-8</sup> |- |<sup>250</sup>Bk || 3.217 h || 2- || %β-=100 |- |<sup>251</sup>Bk || 55.6 m || (3/2- ) || %β-=100, %α ~ 1·10<sup>-5</sup> |} ==Californium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>237</sup>Cf || 2.1 s || || %SF ~ 10 sys |- |<sup>238</sup>Cf || 21 ms || 0+ || %SF ~ 100 sys |- |<sup>239</sup>Cf || 39 s || || %α=? |- |<sup>240</sup>Cf || 1.06 m || 0+ || %α=87 , %SF ~ 13 |- |<sup>241</sup>Cf || 3.78 m || || %K ~ 75, %α ~ 25 |- |<sup>242</sup>Cf || 3.49 m || 0+ || %α=65 , %SF < 1.4·10<sup>-2</sup> |- |<sup>243</sup>Cf || 10.7 m || (1/2+ ) || %K ~ 86, %α ~ 14 |- |<sup>244</sup>Cf || 19.4 m || 0+ || %α=70 |- |<sup>245</sup>Cf || 45.0 m || (5/2+ ) || %K=64 , %α=36 |- |<sup>246</sup>Cf || 35.7 h || 0+ || %α=99.9996 , %SF=2.3·10<sup>-4</sup> , %K<5·10<sup>-4</sup> |- |<sup>246m1</sup>Cf || 45 ns || || |- |<sup>247</sup>Cf || 3.11 h || (7/2+ ) || %K=99.965 , %α=0.035 |- |<sup>248</sup>Cf || 333.5 d || 0+ || %α=99.9971 , %SF=0.0029 |- |<sup>249</sup>Cf || 351 a || 9/2- || %α=100, %SF=4.4·10<sup>-7</sup> |- |<sup>250</sup>Cf || 13.08 a || 0+ || %α=99.923 , %SF=0.077 |- |<sup>251</sup>Cf || 898 a || 1/2+ || %α=100 |- |<sup>252</sup>Cf || 2.645 a || 0+ || %α=96.908 , %SF=3.092 |- |<sup>253</sup>Cf || 17.81 d || (7/2+ ) || %β-=99.69 , %α=0.31 |- |<sup>254</sup>Cf || 60.5 d || 0+ || %SF=99.69 , %α=0.31 |- |<sup>255</sup>Cf || 85 m || (9/2+ ) || %β-=100 |- |<sup>256</sup>Cf || 12.3 m || 0+ || %SF=100, %β-<1 sys %α ~ 1·10<sup>-6</sup> sys |} ==Einsteinium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>241</sup>Es || 9 s || || %α=100 |- |<sup>242</sup>Es || 40 s || || %α ~ 100, %KSF=1.4 |- |<sup>243</sup>Es || 21 s || || %K < 70, %α > 30 |- |<sup>244</sup>Es || 37 s || || %K=96 , %α=4 , %KSF=0.01 sys |- |<sup>245</sup>Es || 1.1 m || (3/2- ) || %K=60 , %α=40 |- |<sup>246</sup>Es || 7.7 m || (4-,6+) || %K=90.1 , %α=9.9 , %KSF=0.003 sys |- |<sup>247</sup>Es || 4.55 m || (7/2+ ) || %K ~ 93, %α ~ 7 |- |<sup>248</sup>Es || 27 m || (2-,0+ ) || %K>99, %α ~ 0.25, %KSF=3·10<sup>-5</sup> sys |- |<sup>249</sup>Es || 102.2 m || 7/2(+) || %K=99.43 , %α=0.57 |- |<sup>250</sup>Es || 8.6 h || (6+) || %K > 97, %α < 3 sys |- |<sup>250m1</sup>Es || 2.22 h || 1(-) || %K > 99, %α < 1 sys |- |<sup>251</sup>Es || 33 h || (3/2- ) || %K=99.51 , %α=0.49 |- |<sup>252</sup>Es || 471.7 d || (5-) || %α=76 , %K=24 , %β- ~ 0.01 |- |<sup>253</sup>Es || 20.47 d || 7/2+ || %α=100, %SF=8.9·10<sup>-6</sup> |- |<sup>254</sup>Es || 275.7 d || (7+) || %α=100, %K<1·10<sup>-4</sup>, %β-=1.74·10<sup>-6</sup> , %SF<3·10<sup>-6</sup> |- |<sup>254m1</sup>Es || 39.3 h || 2+ || %β-=98 , %α=0.33 , %IT<3, %K=0.078 , %SF<0.045 |- |<sup>255</sup>Es || 39.8 d || (7/2+ ) || %β-=92.0 , %α=8.0 , %SF=0.0045 |- |<sup>256</sup>Es || 25.4 m || (1+ ) || %β-=100 |- |<sup>256m1</sup>Es || 7.6 h || (8+) || %β- ~ 100, %β-SF=0.002 |} ==Fermium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>242</sup>Fm || 0.8 ms || 0+ || %SF=100 |- |<sup>243</sup>Fm || 0.18 s || || %α < 100, %SF < 0.5, %K=? |- |<sup>244</sup>Fm || 3.3 ms || 0+ || %SF=100 |- |<sup>245</sup>Fm || 4.2 s || || %α=100, %SF < 0.11 |- |<sup>246</sup>Fm || 1.1 s || 0+ || %α=92 , %SF=7.3 , %K<1 sys |- |<sup>247</sup>Fm || 35 s || || %α > 50, %K+%β+ < 50 |- |<sup>247m1</sup>Fm || 9.2 s || || %α < 100 |- |<sup>248</sup>Fm || 36 s || 0+ || %α=93 , %K ~ 7, %SF=0.10 |- |<sup>249</sup>Fm || 2.6 m || (7/2+ ) || %K ~ 85 sys %α ~ 15 sys |- |<sup>250</sup>Fm || 30 m || 0+ || %α>90, %K<10, %SF=0.0069 |- |<sup>250m1</sup>Fm || 1.8 s || || %IT>80, %SF < 8·10<sup>-5</sup> |- |<sup>251</sup>Fm || 5.30 h || (9/2- ) || %K=98.20 , %α=1.80 |- |<sup>252</sup>Fm || 25.39 h || 0+ || %α=99.9977 , %SF=0.00232 |- |<sup>253</sup>Fm || 3.00 d || 1/2+ || %K=88 , %α=12 |- |<sup>254</sup>Fm || 3.240 h || 0+ || %α=99.9408 , %SF=0.0592 |- |<sup>255</sup>Fm || 20.07 h || 7/2+ || %α=100, %SF=2.3·10<sup>-5</sup> |- |<sup>256</sup>Fm || 157.6 m || 0+ || %SF=91.9 , %α=8.1 |- |<sup>257</sup>Fm || 100.5 d || (9/2+ ) || %α=99.790 , %SF=0.210 |- |<sup>258</sup>Fm || 370 μs || 0+ || %SF=100 |- |<sup>259</sup>Fm || 1.5 s || || %SF=100 |} ==Mendelevium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>245</sup>Md || 0.35 s || (7/2) || %α=100 |- |<sup>245m1</sup>Md || 0.90 ms || (1/2- ) || |- |<sup>246</sup>Md || 1.0 s || || %α=100 |- |<sup>247</sup>Md || 1.12 s || || %α=80 , %SF=20 |- |<sup>248</sup>Md || 7 s || || %K=80 , %α=20 , %SF < 0.05 |- |<sup>249</sup>Md || 24 s || || %K=80 , %α=20 |- |<sup>250</sup>Md || 52 s || || %K=93 , %α=7 , %KSF=0.02 sys |- |<sup>251</sup>Md || 4.0 m || || %K > 90, %α < 10 |- |<sup>252</sup>Md || 2.3 m || || %K>50, %α<50 |- |<sup>253</sup>Md || 6 m || || %K+%β+=100 |- |<sup>254</sup>Md || 10 m || || %K < 100 |- |<sup>254m1</sup>Md || 28 m || || %K < 100 |- |<sup>255</sup>Md || 27 m || (7/2- ) || %K=92 , %α=8 , %SF < 1.4 |- |<sup>256</sup>Md || 78.1 m || (0-,1- ) || %K=90.7 , %α=9.3 , %SF < 2.8 |- |<sup>257</sup>Md || 5.52 h || (7/2- ) || %K=85 , %α=15 , %SF<1 |- |<sup>258</sup>Md || 51.5 d || (8-) || %α=100, %SF < 0.003, %β- < 0.003, %K < 0.003 |- |<sup>258m1</sup>Md || 57.0 m || (1- ) || %K > 70, %SF < 30, %α < 1.2, %β- < 30 |- |<sup>259</sup>Md || 96 m || (7/2- ) || %SF ~ 100, %α<1.3 |- |<sup>260</sup>Md || 31.8 d || || %SF>73, %α < 25, %β- < 10 |} ==Nobelium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>250</sup>No || 0.25 ms || 0+ || %SF=100, %α ~ 0.05 sys |- |<sup>251</sup>No || 0.8 s || || %α ~ 100, %K ~ 1 sys%SF < 8 |- |<sup>252</sup>No || 2.30 s || 0+ || %α=73.1 , %SF=26.9 |- |<sup>253</sup>No || 1.7 m || (9/2- ) || %α ~ 80, %K ~ 20 sys |- |<sup>254</sup>No || 55 s || 0+ || %α=90 , %K=10 , %SF=0.17 |- |<sup>254m1</sup>No || 0.28 s || || %IT>80 |- |<sup>255</sup>No || 3.1 m || (1/2+ ) || %α=61.4 , %K=38.6 |- |<sup>256</sup>No || 2.91 s || 0+ || %α=99.5 , %SF=0.53 +8-4 |- |<sup>257</sup>No || 25 s || (7/2+ ) || %α ~ 100 |- |<sup>258</sup>No || 1.2 ms || 0+ || %SF=100, %α ~ 1·10<sup>-3</sup> sys |- |<sup>259</sup>No || 58 m || (9/2+ ) || %α=75 , %K=25 , %SF<10 |- |<sup>260</sup>No || 106 ms || 0+ || %SF=100 |- |<sup>261</sup>No || || || |- |<sup>262</sup>No || 5 ms || 0+ || %SF=? |} ==Lawrencium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>253</sup>Lr || 1.3 s || || %α=98 , %K ~ 1 sys%SF < 1 |- |<sup>254</sup>Lr || 13 s || || %α=78 , %K=22 , %SF < 0.16 |- |<sup>255</sup>Lr || 22 s || || %α=85 , %K<30, %SF<0.10 |- |<sup>256</sup>Lr || 28 s || || %α>80, %K<20, %SF<0.026 |- |<sup>257</sup>Lr || 0.646 s || (9/2+ ) || %α=100, %SF < 6.5·10<sup>-4</sup> |- |<sup>258</sup>Lr || 3.9 s || || %α>95, %K<5, %SF < 5.0 |- |<sup>259</sup>Lr || 6.3 s || || %α=77 , %SF=23 , %K<0.5 |- |<sup>260</sup>Lr || 180 s || || %α=75 , %K=25 |- |<sup>261</sup>Lr || 39 m || || %SF < 100 |- |<sup>262</sup>Lr || 216 m || || %SF<10 |} ==Rutherfordium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>253</sup>Rf || 1.8 s || || %SF ~ 50, %α ~ 50 |- |<sup>253m1</sup>Rf || 50 μs || || |- |<sup>254</sup>Rf || 0.5 ms || 0+ || %SF=100, %α ~ 0.3 sys |- |<sup>254m1</sup>Rf || 23 μs || || |- |<sup>255</sup>Rf || 1.5 s || (9/2- ) || %SF=52 , %α=48 |- |<sup>256</sup>Rf || 6.7 ms || 0+ || %SF=98 +2- 7 , %α=2.2 +73-18 |- |<sup>257</sup>Rf || 4.7 s || (7/2+ ) || %α=79.6 , %K=18 , %SF=2.4 |- |<sup>258</sup>Rf || 12 ms || 0+ || %SF ~ 87, %α ~ 13 |- |<sup>259</sup>Rf || 3.1 s || || %α=93 , %SF=7 , %K ~ 0.3 |- |<sup>260</sup>Rf || 20.1 ms || 0+ || %SF=100 |- |<sup>261</sup>Rf || 65 s || || %α>80, %SF<10, %K < 10 sys |- |<sup>262</sup>Rf || 2.1 s || 0+ || %SF=100 |- |<sup>262m1</sup>Rf || 47 ms || [2+ ] || |} ==Dubnium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>255</sup>Db || 1.6 s || || %α>47, %SF < 53 |- |<sup>256</sup>Db || 2.6 s || || %SF < 40, %α ~ 70, %K ~ 10 sys |- |<sup>257</sup>Db || 1.3 s || || %α=82 , %SF=17 , %K=1 sys |- |<sup>258</sup>Db || 4.4 s || || %α=67 +5-9 , %K=33 +9-5, %SF<34 |- |<sup>258m1</sup>Db || 20 s || || %K ~ 100 |- |<sup>259</sup>Db || || || |- |<sup>260</sup>Db || 1.52 s || || %α > 90.4 , %SF ~ 9.6 , %K<2.5 |- |<sup>261</sup>Db || 1.8 s || || %α>50, %SF<50 |- |<sup>262</sup>Db || 34 s || || %α ~ 64, %SF ~ 33, %K ~ 3 sys |- |<sup>263</sup>Db || 27 s || || %SF=57 , %α=43 |} ==Seaborgium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>258</sup>Sg || 2.9 ms || 0+ || %SF=100 |- |<sup>259</sup>Sg || 0.48 s || (1/2+ ) || %α=90 , %SF < 20 |- |<sup>260</sup>Sg || 3.6 ms || 0+ || %α=50 +30-20 , %SF=50 +20-30 |- |<sup>261</sup>Sg || 0.23 s || || %α=95 , %SF<10 |- |<sup>262</sup>Sg || || 0+ || |- |<sup>263</sup>Sg || 0.8 s || || %SF ~ 70, %α ~ 30 |- |<sup>263m1</sup>Sg || 0.31 s || [9/2+] || |- |<sup>264</sup>Sg || || 0+ || |- |<sup>265</sup>Sg || 10 s || [1/2+ ] || %α>50, %SF<50 |- |<sup>266</sup>Sg || 21 s || 0+ || %α=50 , %SF=50 |} ==Bohrium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>261</sup>Bh || 11.8 ms || || %α=95 , %SF<10 |- |<sup>262</sup>Bh || 102 ms || || %α > 80, %SF < 20 |- |<sup>262m1</sup>Bh || 8.0 ms || || %α > 70, %SF < 30 |- |<sup>263</sup>Bh || || || |- |<sup>264</sup>Bh || 0.44 s || || %α=100 |} ==Hassium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>264</sup>Hs || 0.85 ms || 0+ || %α ~ 100, %SF < 1.5 |- |<sup>265</sup>Hs || 0.9 ms || || %α=? |- |<sup>265m1</sup>Hs || 1.55 ms || [1/2+ ] || %α ~ 100, %SF<9 |- |<sup>266</sup>Hs || || 0+ || |- |<sup>267</sup>Hs || 26 ms || [9/2+ ] || %α=100 |- |<sup>268</sup>Hs || || 0+ || |- |<sup>269</sup>Hs || 9 s || [3/2+ ] || %α=100 |} ==Meitnerium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>266</sup>Mt || 0.8 ms || || %α=100 |- |<sup>266m1</sup>Mt || 3.8 ms || || %α=100, %SF < 5.5 |- |<sup>267</sup>Mt || || || |- |<sup>268</sup>Mt || 0.07 s || [5+,6+] || %α=100 |} ==Darmstadtium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>267</sup>Ds || 3 μs || [11/2- ] || %α=100 |- |<sup>268</sup>Ds || || 0+ || |- |<sup>269</sup>Ds || 0.17 ms || [1/2+ ] || %α=100 |- |<sup>270</sup>Ds || || 0+ || |- |<sup>271</sup>Ds || 0.06 s || [3/2+ ] || %α=100 |- |<sup>271m1</sup>Ds || 1.1 ms || [9/2+ ] || %α=100 |- |<sup>272</sup>Ds || || 0+ || |- |<sup>273</sup>Ds || 0.18 ms || [3/2+ ] || %α=100 |- |<sup>273m1</sup>Ds || 120 ms || [13/2- ] || %α=100 |} ==Roentgenium== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>272</sup>Rg || 1.5 ms || [5+,6+] || %α=100 |} ==[[w:Copernicium|Copernicium]]== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>277</sup>Cn || 0.24 ms || [3/2+ ] || |} ==[[w:Flerovium|Flerovium]]== {| {{prettytable}} |- {{:Tabellensammlung Chemie/_highlight1}} ! Isotop !! Halbwertszeit !! Spinparität !! Zerfallsart(en) oder Häufigkeit |- |<sup>285</sup>Fl || || || %α=? |- |<sup>286</sup>Fl || 0,13<sup style="font-size: 65%">+0,04</sup><sub style="margin-left: -2.9em; font-size: 65%">−0,02</sub> s || || %α=? |- |<sup>287</sup>Fl || 0,48<sup style="font-size: 65%">+0,16</sup><sub style="margin-left: -2.9em; font-size: 65%">−0,09</sub> s || || %α=? |- |<sup>288</sup>Fl || 0,8<sup style="font-size: 65%">+0,27</sup><sub style="margin-left: -2.9em; font-size: 65%">−0,16</sub> s || || %α=? |- |<sup>289</sup>Fl || 2,6<sup style="font-size: 65%">+1,2</sup><sub style="margin-left: -2.3em; font-size: 65%">−0,7</sub> s || || %α=? |} '''Quellen (Flerovium):''' * <span style="font-variant: small-caps;">Oganessian, Yuri</span>: J. Phys. G: Nucl. Part. Phys., 34, (2007) R165–R242 – <span style="font-size: 90%;">Für die Isotope 286 - 289</span> * <span style="font-variant: small-caps;">Loss, Robert D./Corish, John</span>: Pure Appl. Chem., Vol. 84, No. 7, (2012), pp. 1669–1672 – <span style="font-size: 90%;">Zur Namensgebung</span> * <span style="font-variant: small-caps;">Ellison, P. A. et. Al.</span>: ''New Superheavy Element Isotopes: ²⁴²Pu(⁴⁸Ca,5n)²⁸⁵114'', Phys. Rev. Lett. 105, 182701, (26 Oktober 2010) – <span style="font-size: 90%;">Für Isotop 285</span> ju75te2zrp6i171t34fyirutedmyw4b Traktorenlexikon: Deutz-Fahr DX 230 0 87337 1090403 969341 2026-09-06T08:14:15Z ~2026-48305-80 116846 /* */ Stimmt nicht kein V Motor verbaut 1090403 wikitext text/x-wiki {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Deutz-Fahr |HERSTELLER= Deutz-Fahr}} {{:Traktorenlexikon: Modell-Infobox | HERSTELLER = Deutz-Fahr | MODELLREIHE = DX-Reihe | MODELL = DX 230 | BILD = Deutz DX 230.jpg | BILDBESCHREIBUNG = Deutz DX 230 | BAUWEISE = | PRODUKTIONSBEGINN = 1980 | PRODUKTIONSENDE = 1982 | STÜCKZAHL = 41 | EIGENGEWICHT = 9.250 | LÄNGE = 5.427 | BREITE = 2.500 | HÖHE = 3.190 | RADSTAND = 3.012 | BODENFREIHEIT = 525 | SPURWEITE VORNE = 1.900 und 2.224 | SPURWEITE HINTEN = 1.880 und 2.192 | WENDERADIUS MIT LENKBREMSE = | WENDERADIUS OHNE LENKBREMSE = 6.800 | BEREIFUNG VORNE = 18.4-30 AS | BEREIFUNG HINTEN = 20.8 R 42 AS | LEISTUNG KW = 146,4 | LEISTUNG PS = 200 | NENNDREHZAHL = 2.200 | ZYLINDER = 6 | HUBRAUM = 9.572 | DREHMOMENTANSTIEG = 15 | KRAFTSTOFF = Diesel | KÜHLSYSTEM = Luftkühlung | ANTRIEBSTYP = Allradantrieb | GETRIEBE = 18V / 6R | HÖCHSTGESCHWINDIGKEIT = 25 oder 30 | KATEGORIESORTIERUNG = Deutz-Fahr DX 230 }} Nur sehr wenige Fahrzeuge, verglichen mit anderen DX-Modellen, wurden vom '''DX 230''' gebaut. Konzipiert als Großtraktor für härteste Anforderungen und die größten Betriebe, sollte der Schlepper, welcher als erster Deutz-Traktor in die 200 PS-Klasse vordrang, auch im Export eine wichtige Position für KHD einnehmen. Innerhalb der DX-Baureihe verfügte er über ein ZF-Lastschalt-Getriebe und war zugleich von Anfang an mit zentralem Vorderachsantrieb ausgerüstet. Er wurde ausschließlich als 30 km/h- und Allrad-Ausführung angeboten. Die 25 km/h-Ausführung war dem Export vorbehalten. Bereits 1982 wurde der DX 230 durch den [[Traktorenlexikon: Deutz-Fahr DX 250|DX 250]] abgelöst. ==Motor== * KHD, Typ: BF6L 413 FR, stehender-luftgekühlter Viertakt-Sechszylinder-Reihen-Saugmotor mit Direkteinspritzverfahren, integrierter Motorölkühler, hängenden Ventilen, Bosch-Reihen-Einspritzpumpe, zahnradgetriebener Nockenwelle, Bosch-Mehrloch-Düse, siebenfach-gelagerter Kurbelwelle, Druckumlaufschmierung mittels Zahnradpumpe, Trockenluftfilter mit Zyklon-Vorabscheider, Dreiring-Leichtmetall-Kolben, Kolbenkühlung, Bosch-Fliehkraft-Verstellregler und Axialgebläse. * Hubraum = 9572 cm³ * Bohrung = 125 mm, Hub = 130 mm * Verdichtung = 16,5:1 * Leerlaufdrehzahl = 650 bis 750 U/min. * Max. Einspritzdruck = 175 + 8 bar * Max. Drehmoment = 750 Nm bei 1750 U/min ==Kupplung== * ZF-Einfachkupplung als nasse Lamellenkupplung ausgebildet, in Verbindung mit ölhydraulischer Voith-TD-Turbokupplung ==Getriebe== * Im Ölbad laufendes ZF-Powermatic-S-Getriebe, Typ: T-6636 mit Seitenschaltung * Synchronisiertes Wechselgetriebe mit sechs Gängen * Dreifache Lastschaltung mit drei Vorwärts- und einer Rückwärtsgruppe, in die Bereiche L - M - H und R unterteilt * 18 Vorwärts- und 6 Rückwärtsgänge ==Geschwindigkeiten vor- und rückwärts== Geschwindigkeiten mit Bereifung 20.8 R 42 AS "Lastschaltstufe-L" * 1.Gang = 2,4 km/h * 2.Gang = 4,4 km/h * 3.Gang = 6,0 km/h * 4.Gang = 8,4 km/h * 5.Gang = 12,3 km/h * 6.Gang = 17,1 km/h "Lastschaltstufe-M" * 1.Gang = 3,0 km/h * 2.Gang = 5,6 km/h * 3.Gang = 7,6 km/h * 4.Gang = 10,6 km/h * 5.Gang = 15,5 km/h * 6.Gang = 21,6 km/h "Lastschaltstufe-H" * 1.Gang = 3,8 km/h * 2.Gang = 7,0 km/h * 3.Gang = 9,5 km/h * 4.Gang = 13,3 km/h * 5.Gang = 19,5 km/h * 6.Gang = 27,4 km/h "Lastschaltstufe-R" * 1.Gang = 3,0 km/h * 2.Gang = 5,6 km/h * 3.Gang = 7,6 km/h * 4.Gang = 10,6 km/h * 5.Gang = 15,5 km/h * 6.Gang = 21,6 km/h ==Zapfwelle== * Elektrohydraulisch-betätigte, unabhängige und lastschaltbare Zapfwelle * Stummel = 1 3/4"- 20 teilig * 923 U/min. mit Nenndrehzahl ==Bremsen== * Hydraulisch-betätigte, nasse Scheibenbremse auf den Planetenendtrieb wirkend, als Einzelrad-Bremse zu verwenden * Mechanisch-betätigte Feststellbremse als Trommelbremse ausgebildet, auf den Planetenendtrieb wirkend * Optional mit Zweikreis-Druckluftbremsanlage, oder kombiniert als Ein- und Zweikreis-Druckluftbremslanlage ==Achsen== * Elektrohydraulisch-betätigte, pendelnd-gelagerte und lastschaltbare ZF-Lenktriebachse, Typ: APL-5051 oder APL-5052 * Zentrale Gelenkwelle und Optitrac-Selbstsperrdifferential Zwei Spurweiten durch Radumschlag = 1.900 und 2.224 mm * Hinterachse mit Kegelradgetriebe, Ritzel, Tellerrad und Doppel-Planetenendgetriebe * Elektrohydraulisch-betätigte Differentialsperre Zwei Spurweiten durch Radumschlag = 1.880 und 2.192 mm * Vorderachslast = 4.440 kg Zul. Vorderachslast = 4.500 kg * Hinterachslast = 4.810 kg Zul. Hinterachslast = 8.460 kg ==Lenkung== * Hydrostatische ZF-Lenkung * Gemeinsamer Ölkreislauf mit Hydraulik * Förderleistung je Pumpenumdrehung = 19 cm³ * Fördermenge = 46 l/min. bei 150 bar ==Hydrauliksystem und Kraftheber== * Hydraulischer Bosch-Kraftheber in aufgelöster Bauweise, mit zwei Hubzylindern und EHR * Zwei Hubzylinder mit je 100 mm Durchmesser und 192 mm Kolbenhub * Dreipunktkupplung der Kategorie III, auf Wunsch mit Walterscheid-Schnellkupplern Sieben Funktionen: * Heben, Senken, Neutral-und Schwimmstellung, Zugwiderstands-und Lageregelung sowie stufenlose Mischregelung * Hubhöhenbegrenzung, Senkdrossel, Seitenstabilisierung und Transportsicherung * Offenes System mit Bosch-Zahnrad-Tandempumpe mit 81 l/min. bei 175 bar und Nenndrehzahl * Förderleistung je Pumpenumdrehung = 33,5 cm³ * Max. Hubkraft an den Koppelpunkten = 8.842 kg ==Steuergeräte== * Serie: 2 ==Elektrische Ausrüstung== * Zwei Batterien je 12 V-140 Ah * Bosch-Anlasser, 24 V-4,4 kW * Bosch-Lichtmaschine mit integriertem Regler, 14 V-65 A * Beru-Glühkerzen, 701 G 9.5 V ==Maße und Abmessungen== * Länge = 5.427 mm * Breite bei kleinster Spurweite = 2.500 mm * Höhe über Auspuff = 3.230 mm * Radstand = 3.012 mm * Bodenfreiheit unter den Differential = 525 mm * Eigengewicht = 9.250 kg * Zul. Gesamtgewicht = 12.000 kg ==Bereifung== [[Datei: Kabine.jpg|thumb|Bedienelemente in der MasterCab des DX 230]] Vorne/Hinten: 18.4-34 / 20.8-42 (Serie) * Optional vorne: 18,4 - 26 / hinten: 20.8 - 38 ==Füllmengen== * Tankinhalt = 400 liter * Motoröl incl. Filter = 23 l * Getriebe incl. Hydraulik = 90 l * Planetenendtriebe je 10 l ==Verbrauch== * 171 g/PSh ==Kabine== * Gummigelagerte, staub-und schallisolierte Deutz-MasterCab-Kabine mit ebenen Boden, Grammer-Komfortsitz, ausstellbaren Seiten-und Heckscheibe, dreistufen Heizungs-und Belüftungsgebläse, Traktormeter, Kraftstoffanzeige, klappbarem Beifahrersitz und zwei Außenspiegeln. * Optional mit Super-Komfort-Sitz, Zusatz-Heizung, Klimaanlage und Arbeitsscheinwerfern ==Sonderausrüstung== * Klimaanlage * Super-Komfort-Fahrersitz * Front-und Radgewichte * Arbeitsscheinwerfer * Zusatz-Steuergeräte * Druckluftbremsanlage * Zugpendel * Zusatz-Heizung ==Neupreis== * 1980: '''190.363 DM''' (Grundausstattung) ==Literatur== Hummel,Oertle: Typenkompass Deutz-Traktoren seit 1978, Motor-Buch-Verlag * Vom DX bis zum Agrostar (Karel Vermoesen/Michael Bruse) Seite 582 ==Quellen== Hummel,Oertle: Typenkompass Deutz-Traktoren seit 1978, Motor-Buch-Verlag <references /> ==Weblinks== {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Deutz-Fahr |HERSTELLER= Deutz-Fahr}} i12vhi4dm5rmowaj92ammcjrhax3h65 Ing Mathematik: Numerische Mathematiksysteme am Beispiel von Octave 0 109787 1090396 1090151 2026-09-05T13:18:01Z Intruder 1513 /* Variablen */ 1090396 wikitext text/x-wiki {{Navigation_zurückhochvor_buch| zurücktext=Maxima| zurücklink=Ing Mathematik: Computeralgebrasysteme am Beispiel von Maxima| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Julia für Ingenieure| vorlink=Ing Mathematik: Julia}} = Hallo Welt und allgemeine Hinweise = == Was ist Octave == * Octave ist eine Software zur numerischen Lösung mathematischer Probleme. * Octave ist Open-Source (GPL-Lizenz). * Octave ist für viele Betriebssysteme erhältlich (z.B. für Linux, MS Windows, macOS). * Octave ist weitgehend kompatibel zum Numerik-Standardprogramm MATLAB. * Octave ist ein Interpreter. * Octave als Programmiersprache ist case-sensitive - d.h. Groß- und Kleinschreibung ist relevant bei der Eingabe von Befehlen. {{Wikipedia | GNU Octave}} == Octave installieren == === MS Windows === Laden Sie das aktuelle Octave-Paket von der Webseite [https://octave.org/download] 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 Octave bereits standardmäßig installiert, ansonsten ist die Installation mittels Paketmanagementsystem einfach möglich. Dazu gehen Sie auf die Seite [https://wiki.octave.org/Category:Installation], wählen die vorhandene Linux-Variante und folgen der angegebenen Beschreibung (z.B. <code>zypper ... </code> für openSUSE. Oder Sie benutzen unter openSUSE Tumbleweed direkt das Setup-Programm YaST). == Octave starten == === MS Windows === Das Icon für das Octave-Programm doppelklicken (für das Konsolenprogramm ... CLI, für die grafische Benutzeroberfläche ... GUI). Und schon startet das Programm. [[Datei:octavestart1.jpg]] === Linux === In einer Linux-Konsole den Befehl "octave" eintippen, mit der RETURN-Taste bestätigen, und das Programm (CLI) startet: GNU Octave (x86_64-suse-linux-gnu) version 11.1.0 Copyright (C) 1993-2026 The Octave Project Developers. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> This is free software; see the source code for copying conditions. There is NO WARRANTY, to the extent permitted by law. For details, type 'warranty'. Home page: <https://octave.org> Support resources: <https://octave.org/support> Improve Octave: <https://octave.org/get-involved> For changes from previous versions, type 'news'. octave:1> Um Octave mit der eingebauten GUI zu starten, kann der Befehl <code>octave --force-gui</code> verwendet werden: [[File:Gnu_Octave_IDE.png|600px]] == Ein paar Worte zur Erklärung == Im Folgenden wird immer das Konsolenprogramm (CLI ... Command Line Interface) für die Eingabe von Befehlen benutzt. Erst gegen Ende dieses Textes wird auch kurz auf das GUI von Octave eingegangen. Teilweise werden Ergebnisse der älteren Octave-Version 3.0.3 dargestellt. Die dargestellten Grafiken und Ausgabetexte können je nach Version leicht voneinander abweichen. Der Text wurde ursprünglich mit der Octave-Version 3.0.3 erstellt und anschließend auf die Versionen 5.2 bis 11.1.0 aktualisiert. Dieser Mischmasch sollte aber kein Problem darstellen. Getestet wurden die Beispiele ursprünglich unter dem Betriebssystem MS Windows 10, später auch mit MS Windows 11, bzw. mit openSUSE Leap 15.6 (Octave 6.4.0, nur vereinzelt) und ab März 2026 auch mit openSUSE Tumbleweed (ab Octave 10.3.0, nur vereinzelt). == Ein erstes Programm == Kommentare werden in Octave mit dem Prozentzeichen (%) oder alternativ mit der Raute (#) eingeleitet. Sie werden vom Octave-Interpreter ignoriert. Will man kompatibel mit MATLAB bleiben, so ist die Version mit dem %-Zeichen vorzuziehen. Text kann mit der disp-Funktion ausgegeben werden. Starten Sie Octave und geben sie folgende Anweisungen zeilenweise ein octave-3.0.3.exe:1> % Das ist ein Kommentar octave-3.0.3.exe:2> # und das auch octave-3.0.3.exe:3> disp "Hallo Welt!" Als Ergebnis erhalten Sie Hallo Welt! Der Prompt (z.B. octave-3.0.3.exe:1>) ist natürlich abhängig von der Octave-Version und den schon eingegebenen Zeilen. Er ist selbstverständlich nicht einzutippen, sondern wird vom Octave-System geliefert. Strings können in Octave entweder in Anführungszeichen (") gesetzt werden oder in Hochkommatas('). In diesem Text wird die erste Variante bevorzugt eingesetzt. = Octave als Taschenrechner = == Allgemeines == Wir wollen 3 * 5 berechnen. Dazu starten wir Octave. Geben Sie dann die Formel octave-3.0.3.exe:1> 3 * 5 ein, drücken die Taste ENTER/RETURN und erhalten als Ergebnis ans = 15 Auch kompliziertere Ausdrücke sind möglich. Beispielsweise mit Winkelfunktionen, Quadratwurzeln etc. Wir wollen nun den Ausdruck <math>\sin\sqrt{15}</math> berechnen : octave-3.0.3.exe:2> sin(sqrt(15)) ans = -0.6679 Octave kennt eine Handvoll von Konstanten, z.B.: Zeilenweise Eingabe: % Die Kreiszahl PI pi % Die Eulersche Zahl e % Zur Maschinengenauigkeit eps Ausgabe: ans = 3.1416 ans = 2.7183 ans = 2.2204e-016 "ans" steht übrigens für den Begriff "answer" (auf Deutsch "Antwort"). Mit "ans" kann wie mit jeder anderen Variable oder Konstanten weitergerechnet werden, z.B.: Eingabe: % Der Kreisradius sei 10 10 % Der Kreis-Umfang mit diesem Radius sei folgendes 2 * pi * ans Ausgabe: ans = 10 ans = 62.832 Die Ausgabe eines Befehls am Bildschirm (das "Echo") kann übrigens durch Anwendung des Semikolons (;) unterdrückt werden. Gezeigt werden soll dies nun mit Hilfe des obigen Beispiels. Es soll nur der Umfang ausgegeben werden, nicht der Radius. Eingabe: % Der Kreisradius sei 10 10; % Der Kreis-Umfang mit diesem Radius sei folgendes 2 * pi * ans Ausgabe: ans = 62.832 Vielleicht ist manchem die Genauigkeit, mit der Echo bzw. der Befehl disp Werte ausgibt, nicht ausreichend. Dem kann Abhilfe verschafft werden und zwar so: Eingabe: format short pi format long pi format longe pi % usw. Ausgabe: ans = 3.1416 ans = 3.14159265358979 ans = 3.14159265358979e+00 Beenden lässt sich das Octave-Programm durch Eingabe von quit oder exit (und natürlich zur Bestätigung die RETURN-Taste drücken). == Die Hilfefunktion von Octave == Die Eingabe von help mit Angabe eines Funktionsnamens liefert detaillierte Infos zu der gesuchten Funktion. Eingabe: help sin Ausgabe: 'sin' is a built-in function from the file libinterp/corefcn/mappers.cc -- Y = sin (X) Compute the sine for each element of X in radians. See also: asin, sind, sinh. Additional help for built-in functions and operators is available in the online version of the manual. Use the command 'doc <topic>' to search the manual index. Help and information about Octave is also available on the WWW at https://www.octave.org and via the help@octave.org mailing list. Auch gibt es die doc-Funktion für eine vollständige Dokumentation des Octave-Systems, z.B.: Eingabe: doc Ausgabe: [[Datei:Octave_730_doc_screenshot.jpg]] == Aufgaben == * Berechnen Sie mit Octave den Ausdruck <math>\frac{1}{2}\cdot e^2 \cdot \tan(\pi/3)</math>. * Berechnen Sie mit Octave den Ausdruck <math>2\; \text{cosd}(60) - 3\sin(\pi/5)</math>. Anmerkung: cosd erwartet den Parameter im Gradmaß (d für "degree"), sin erwartet den Parameter im Bogenmaß. * Erkunden Sie die Fehlerfunktion "erf" mittels Octave-Hilfe. = Octave 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.m % Das ist ein Kommentar # und das auch disp "Hallo Welt!" Skriptdateien müssen mit der Dateiendung .m versehen werden. In der Octave-Konsole fügen Sie den Dateipfad mittels octave-3.0.3.exe:1> addpath("c:/tmp") hinzu (es ist der UNIX-spezifische Slash (/) zu benutzen). Alternativ können Sie zumindest unter MS Windows auch einen Doppel-Backslash (\\) einsetzen. Oder Sie wechseln mittels <code>cd c:/tmp</code> direkt ins Verzeichnis <code>c:/tmp</code>. Danach bringen Sie die Skriptdatei test1.m (sozusagen das Hauptprogramm) zur Ausführung octave-3.0.3.exe:2> test1 Achtung: Die Datei (die Funktion oder das Hauptprogramm) ist in der Octave-Kommandozeile ohne .m-Dateiendung anzugeben. Wie erwartet ergibt sich folgende Ausgabe am Bildschirm Hallo Welt! Zumindest unter Linux können Sie z.B. auch komfortabel den {{W|Shebang|Shebang}} (<code>#!</code>) nutzen. Gegeben sei das Octave-Script #!/usr/bin/octave disp("Hallo Welt!"); Gepeichert sei es ebenfalls als <code>test1.m</code>. Starten Sie ein Terminal, wechseln Sie in das entsprechende Arbeitsverzeichnis und geben Sie ./test1.m ein, so erhalten Sie wieder Hallo Welt! als Ausgabe auf dem Terminal. Die Zugriffsberechtigung muss natürlich mittels <code>chmod</code> richtig gesetzt werden. Oder Sie führen direkt Octave mit der Datei <code>test1.m</code> aus: octave test1.m Sie sehen, mehrere Wege führen zum Ziel. == Blockkommentare == In neueren Octave-Versionen ab dem Jahr 2009 sind auch Blockkommentare möglich. Blockkommentare werden wie normale Kommentare vom Octave-Interpreter ignoriert. %{ Das ist ein Blockkommentar %} #{ und das auch #} == Variablen == Variablenbezeichner können aus Buchstaben (A-Za-z), Ziffern (0-9) und Underscores (_) bestehen, dürfen aber nicht mit einer Zahl beginnen. Gültige Variablenbezeichner wären also: xyz x1 _wert name_anzahl Da Octave 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.m gespeichert. x = 5 y = 10 z = x*y Bringen Sie die Datei test1.m zur Ausführung, so erhalten Sie folgende Bildschirmausgabe x = 5 y = 10 z = 50 Normalerweise will man aber nur z anzeigen, die Werte von x und y sind ja bereits bekannt. Dazu fügen Sie an den Anweisungsenden, wie bereits weiter oben erwähnt, bei x und y jeweils ein Semikolon (;) an, um das Anweisungsende explizit zu markieren. x = 5; y = 10; z = x*y Nun erhalten Sie als Ergebnis nur noch z = 50 Sie können auch mehrere Anweisungen in einer Zeile durch Semikolon getrennt schreiben. x = 5; y = 10; z = x*y Ausgabe: z = 50 Auch aus der Programmiersprache C/C++ oder Java bekannte Konstrukte können Sie verwenden, z.B. x = 5; % inkrementiere x ++x % x = x - 2 x -= 2 Bildschirmausgabe: ans = 6 x = 4 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. Soll eine Anweisung auf mehrere Zeilen verteilt werden, z.B. weil sie zu lang ist, so kann dies durch Verwendung von drei Punkten (...) geschehen, wie nachfolgend dargestellt. x = 5; y = 1000 * x + ... sin(x/2) Ausgabe: y = 5000.6 Diese Drei-Punkte-Methode soll nicht für in Anführungszeichen (") eingeschlossene Strings verwendet werden. Diese Methode ist seit geraumer Zeit "deprecated" und funktioniert mit der Version 9.1.0 gar nicht mehr. Benutzen Sie statt dessen den Backslash (\): txt = "xxxxxxxxxxxxxxxxxxxx\ yyyyyyyyyyyyyyyyy" Ausgabe: txt = xxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyy Variablen sind nicht an einen bestimmten Datentyp gebunden, folgendes ist in Octave problemlos möglich: wert = 10 wert = 35.5 wert = "Hallo" wert = pi Ausgabe: wert = 10 wert = 35.500 wert = Hallo wert = 3.1416 Der Befehl <code>who</code>, bzw. <code>whos</code> listet die gegenwärtig definierten Variablen, z.B.: clear; a = 10.5; v = [1 2 3 4 5 12 13]; m = ["s1", "s2"; "s3", "s4"]; disp "***** Der Befehl who *****" who disp "***** Der Befehl whos *****" whos Ausgabe: ***** Der Befehl who ***** Variables visible from the current scope: a m v ***** Der Befehl whos ***** Variables visible from the current scope: variables in scope: top scope Attr Name Size Bytes Class ==== ==== ==== ===== ===== a 1x1 8 double m 2x4 8 char v 1x7 56 double Total is 16 elements using 72 bytes ==Hexadezimale und binäre Zahlen== % Hexadezimale Zahl disp( 0xABC ) % Binäre Zahl disp( 0b1000011 ) Ausgabe (als Dezimalzahlen): 2748 67 Octave kann auch dezimale in binäre Zahlen etc. umwandeln: dec2bin( 214 ) Ausgabe: ans = 11010110 Siehe dazu in der Octave-Hilfe auch folgende Funktionen: bin2dec, dec2base, dec2hex, hex2dec, base2dec == Zahlenkolonnen == Eine Zahlenkolonne (oder ein Vektor) mit gleichen Abständen der Werte kann folgendermaßen erzeugt werden: % a ... Startwert % b ... Schrittweite % c ... Endwert a = 0; b = 10; c = 100; x = a : b : c; disp(x); Ausgabe: 0 10 20 30 40 50 60 70 80 90 100 Ähnliche Resultate lassen sich auch durch Anwendung der linspace-Funktion erhalten, z.B.: % a ... Startwert % b ... Endwert % c ... Anzahl der Werte a = 0; b = 100; c = 11; v = linspace(a, b, c) Ausgabe: v = 0 10 20 30 40 50 60 70 80 90 100 == Verzweigungen == === Die IF-Verzweigung === Die IF-Verzweigung ist aus anderen Programmiersprachen bereits bekannt. In Pseudocode lässt sie sich folgendermaßen darstellen: WENN bedingung TRUE führe block1 aus SONST führe block2 aus ENDE Die test1.m-Datei laute also wie folgt: x = 5; if x < 4 disp "x ist kleiner als 4"; else disp "Der else-Zweig wird ausgefuehrt"; disp "x ist groesser oder gleich 4"; end Ausgabe: Der else-Zweig wird ausgefuehrt x ist groesser oder gleich 4 Octave kennt eine Reihe von Vergleichs- und Verknüpfungsoperatoren: * <, <= ... kleiner (gleich) * >, >= ... größer (gleich) * == ... gleich * ~=, != ... ungleich * &, && ... AND * |, || ... OR * ~, ! ... NOT Beispielsweise: a = 5; b = 9; if a<=10 & b!=7 disp("OK"); else disp("Nicht OK"); end Ausgabe: OK === Die SWITCH-Verzweigung === In Pseudocode: WECHSLE ZU var FALLS wert1 == var führe block1 aus FALLS wert2 == var führe block2 aus ... SONST führe blockn aus ENDE Eine Beispielsimplementierung in Octave könnte so aussehen: x = "g"; switch(x) case "k" disp("klein"); case "g" disp("gross"); otherwise disp("sonstiges") end Ausgabe: gross Anmerkungen für C-Programmierer: * in Octave darf zum Abschluß von ''case'' kein Doppelpunkt folgen (würde einen Syntaxfehler auslösen). * ein ''break'' als Abschluß eines ''case''-Blocks ist nicht erlaubt (würde in Octave einen parse error auslösen). ''break'' ist Schleifen vorbehalten. ''switch'' hat in Octave keinen "Durchfall" und ähnelt somit eher der Fortran-Anweisung ''select case''. Mehrere Fälle in einem ''case'' können wie nachfolgend behandelt werden: x = "K"; switch(x) case {"k" "K"} disp("klein"); case {"g" "G"} disp("gross"); otherwise disp("sonstiges") end Ausgabe: klein == Schleifen == === Die WHILE-Schleife === Die WHILE-Schleife ist kopfgesteuert. Sie funktioniert wie aus anderen Programmiersprachen bekannt. In Pseudocode: SOLANGE bedingung TRUE führe block aus ENDE In Octave: x = 0; while x <= 10 disp(x); x++; end Ausgabe: 0 1 2 3 4 5 6 7 8 9 10 === Die DO-UNTIL-Schleife === Die DO-UNTIL-Schleife ist fußgesteuert. Beachte: Diese Schleife ist nicht äquivalent zu der aus anderen Programmiersprachen bekannten DO-WHILE-Schleife. DO-WHILE bedeutet "TUE SOLANGE", DO-UNTIL bedeutet "TUE BIS". Sie wird mindestens einmal ausgeführt. Pseudocode: TUE führe block aus BIS bedingung TRUE Mittels Octave: x = 0; do disp(x); x++; until(x >= 5) Ausgabe: 0 1 2 3 4 === Die FOR-Schleife === for x = 0 : 2 : 10 disp(x); end Ausgabe: 0 2 4 6 8 10 Der FOR-Schleifenkopf ist in Form einer Zahlenkolonne folgendermaßen aufgebaut: for variable = startwert : schrittweite : endwert Man beachte, dass Vektorisierung gegenüber einem Schleifendurchlauf eine erhebliche Zeiteinsparung bewirken kann (man siehe in der [https://docs.octave.org/latest/Vectorization-and-Faster-Code-Execution.html Octave-Dokumentation das Kapitel 19 "Vectorization and Faster Code Execution"]). Folgendes Beispiel ist an genanntes Octave-Kapitel angelehnt. Zuerst wird eine Berechnung mittels Schleifendurchlauf durchgeführt und der Zeitbedarf ausgegeben. Dieser Zeitbedarf hängt natürlich auch von der verwendeten Hardware etc. ab. Eingabe: n = m = 500; a = b = eye(500); t1 = time(); for i = 1:n for j = 1:m c(i,j) = a(i,j) + b(i,j); endfor endfor t2 = time(); t_diff = t2-t1 Ausgabe: t_diff = 3.7566 Der Zeitverbrauch beträgt hier also ca. 4 Sekunden. Im Gegensatz dazu Eingabe: a = b = eye(500); t1 = time(); c = a + b; t2 = time(); t_diff = t2-t1 Ausgabe: t_diff = 1.5974e-05 ist der Zeitverbrauch hier sehr gering. Vektoren und Matrizen werden etwas später in diesem Text detailliert behandelt. Hier nur soviel: Mittels ''eye'' wird eine Einheitsmatrix kreiert. === Schleifen abbrechen === Zum Abbrechen einer Schleife gibt es den Befehl "break". for var = 0 : 1 : 100 disp (var); if var == 5 break; end end Ausgabe: 0 1 2 3 4 5 "continue" setzt mit dem nächsten Schleifendurchlauf fort, z.B. for var = 0 : 1 : 10 if var == 5 continue; end disp (var); end Ausgabe: 0 1 2 3 4 6 7 8 9 10 == Aufgaben == * Berechnen Sie die Summe der ersten 10000 natürlichen Zahlen (bei 1 beginnend) ** in Form einer WHILE-Schleife ** in Form einer DO-UNTIL-Schleife ** in Form einer FOR-Schleife ** mittels sum-Befehl (siehe dazu auch die von Octave zur Verfügung gestellte Hilfefunktion). ** mittels gaußscher Summenformel (<math>\sum_{i=1}^n{i} = 1+2+...+n = n(n+1) / 2</math>) * Schreiben Sie für obige Alternativen Programme mit denen der Zeitbedarf der Schleifen, Befehle bzw. Formeln gemessen werden kann. Welche Alternativen sind aus Zeitgründen (minimale Laufzeit) empfehlenswert? = Grafiken zeichnen = == 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: x = -3 : .1: 3; y = cosh(x); plot(x,y); grid on; Ausgabe: [[Datei:octave_cosh.jpg]] Der Code ist quasi selbsterklärend. x läuft von -3 bis +3. y wird für jeden x-Wert per Formel ausgerechnet. "plot" ist der Zeichenbefehl. "grid on" schaltet ein Zeichengitter ein. 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. Sie könnten nun auf die Idee kommen, obiges Script unter Linux mit der Shebang-Zeile zu erweitern, um es direkt als Programm auszuführen. #!/usr/bin/octave x = -3 : .1: 3; y = cosh(x); plot(x,y); grid on; Die Enttäuschung folgt auf dem Fuß. Außer einem kurzen Aufblinken des Grafikfensters ist nicht viel zu sehen. Das Programm läuft einfach durch und wird nach der letzten Anweisung beendet. Abhilfe kann z.B. der <code>input</code>-Befehl schaffen: #!/usr/bin/octave x = -3 : .1: 3; y = cosh(x); plot(x,y); grid on; refresh(); input("Zum Beenden RETURN-Taste drücken"); Das Programm wartet somit, bis Sie im Terminal die RETURN-Taste drücken. <code>refresh()</code> dient dazu, das Grafikfenster unmittelbar zu aktualisieren. Sonst würde das Ausgabefenster leer bleiben, bis es durch externe Anreize aktualisiert wird (z.B. durch Fenster minimieren/maximieren). Gleiches gilt für die <code>octave test1.m</code>-Variante. Ein etwas komplexeres Beispiel ist Folgendes x = -3 : .1: 3; y = cosh(x) + 2.^x; plot(x,y); grid on; Man beachte den Punkt bei 2.^x (2 hoch x). Vergisst man den Punkt, dann erhält man eine Fehlermeldung (ähnlich dieser): error: for x^y, only square matrix arguments are permitted and one argument must be scalar. Use .^ for elementwise power. error: called from test1 at line 2 column 3 Ausgabe: [[Datei:octave_cosh2.jpg]] Der Funktionsgraph kann auch als Fläche eingefärbt werden: x = -3 : .1: 3; y = cosh(x) + 2.^x; fill (x, y, "b"); Ausgabe: [[Datei:octave_cosh3.jpg | 500px]] === Graphen mehrerer Funktionen und weiteres === Mehrere Graphen lassen sich folgendermaßen in ein Fenster zeichnen: x = -3 : .1: 3; y1 = cosh(x) + 2.^x; y2 = sin(x) .* cos(x); plot(x,y1, x,y2); title("Funktionsgraphen"); legend("cosh ...", "sin ..."); xlabel("x"); ylabel("y"); grid on; [[Bild:octave_cosh14.jpg|600px]] Um die Linienstile etwas individueller zu gestalten, ist folgender Programmcode gedacht: x = -3 : .1: 3; y1 = cosh(x) + 2.^x; y2 = sin(x) .* cos(x); plot(x,y1,"*r", x,y2,"ob"); title("Funktionsgraphen"); legend("cosh ...", "sin ..."); xlabel("x"); ylabel("y"); grid on; [[Datei:octave_cosh4.jpg]] Bei plot kann auch der Linienstil des jeweiligen Graphen angegeben werden, z.B. steht * für Sternchenlinie o für Kreise in der Linie r für rot b für blau Ein ähnliches Resultat liefert der Code: x = -3 : .1: 3; y1 = cosh(x) + 2.^x; y2 = sin(x) .* cos(x); plot(x,y1, "Color", "red", "*", x,y2, "Color", "blue", "o"); title("Funktionsgraphen"); legend("cosh ...", "sin ..."); xlabel("x"); ylabel("y"); grid on; Will man mehrere Graphen in ein Fenster zeichnen, aber nicht alles in einen plot-Befehl quetschen, so kann die "hold on"-Anweisung die Lösung des Problems sein: %Lösche alle benutzerdefinierten Variablen aus der Symboltabelle clear; %Schließe alle Fenster close all; %Lösche Konsolenfenster und setze Cursor zurück clc; x = -3 : .1: 3; y1 = cosh(x) + 2.^x; y2 = sin(x) .* cos(x); plot(x,y1, "Color", "red"); hold on; plot(x,y2, "Color", "blue"); title("Funktionsgraphen"); legend("cosh ...", "sin ..."); xlabel("x"); ylabel("y"); grid on; [[Datei:octave_coshsin1.jpg]] Bei diesem Program wurden auch einige Möglichkeiten (clear, close, clc) gezeigt, um das System aufzuräumen. Ein "hold off" würde natürlich die hold-Funktion wieder ausschalten. === 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. clear; close all; clc; t = 0 : .1: 6*pi; x = t .* cos(t); y = t .* sin(t); plot(x,y); grid on; [[Datei:octave_spirale1.jpg]] Diese Darstellung erscheint verzerrt. Will man gleiche Achsenskalierungen, so kann man den axis-Befehl verwenden (axis muss nach plot erscheinen). t = 0 : .1: 6*pi; x = t .* cos(t); y = t .* sin(t); plot(x,y); grid on; axis equal; [[Datei:octave_spirale222.jpg]] === Strichstärke === Für manche Zwecke ist es sinnvoll die Strichstärke des Graphen zu erhöhen. Dies kann über den Parameter "LineWidth" der plot-Funktion geschehen. t = 0 : .1: 6*pi; x = t .* cos(t); y = t .* sin(t); plot(x,y, "LineWidth", 2); grid on; axis equal; Ausgabe: [[Datei:octave_spirale3.jpg]] === Beliebigen Text ausgeben === x = -10:0.1:10; plot (x, sin (x), "LineWidth", 2); text (2.7, 0.8, "Das ist die sin-Funktion"); Ausgabe: [[Datei:octave_text1.jpg]] === Logarithmische Achseneinteilung === x = -3 : .1: 3; y = cosh(x) + 2.^x; % Halblogarithmische Darstellung semilogy(x,y); grid on; Ausgabe: [[Datei:octave_semilog1.jpg]] Auch die x-Achse kann mit "semilogx" logarithmisch skaliert werden. Mit "loglog" werden beide Achsen logarithmisch skaliert. === 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 (Hinweis: Siehe dazu auch die Octave-Hilfefunktion für den plot-Befehl). * Testen Sie bei den obigen Übungsaufgaben verschiedene Werte für a, c, r und R. * Erkunden Sie in der Octave-Hilfe den ezplot-Befehl. == 3D == === Räumliche Kurven === Mittels "plot3" lassen sich Raumkurven zeichnen. t = 0 : .1 : 9*pi; x = cos(t); y = sin(t); z = 1.3 .^ t; plot3(x,y,z); grid on; [[Datei:octave_raumkurve1.jpg]] === Flächen === ==== ezsurf ==== Die wahrscheinlich einfachste Möglichkeit 3D-Flächen zu erzeugen, besteht in der Verwendung des ezsurf-Befehls. Beachten Sie beim folgenden Beispiel auch wieder den Punkt beim Multiplikationssymbol (elementweise Multiplikation soll verwendet werden, keine Matrizenmultiplikation) in der anonymen Funktion. Was eine anonyme Funktion ist, wird weiter hinten in diesem Text kurz erklärt. Fürs Erste reicht es zu wissen, dass die Funktion f(x, y) jeweils im Intervall [0, 10] gezeichnet werden soll. clear; close all; clc; clf; f = @(x, y) sin(x) + 3.*cos(y); ezsurf (f, [0, 10]); [[Bild:octave_ezsurf1.jpg|600px]] Dieses Bild wurde mit der Octave-Version 5.2 erstellt. Es ist im Prinzip identisch zu jenen des folgenden Abschnitts, die mit der Version 3.0.3 erstellt wurden, nur die Farbschattierung ist anders. Ändern lässt sich diese Eigenschaft mit dem colormap-Befehl (siehe auch Octave-Hilfe): clear; close all; clc; clf; colormap(hot); f = @(x, y) sin(x) + 3.*cos(y); ezsurf (f, [0, 10]); [[Bild:octave_colormap_hot.jpg|600px]] ==== surf und mesh ==== Für das Zeichnen von Flächen existiert der surf-Befehl. Der meshgrid-Befehl kreiert ein Netz in der xy-Zeichenebene. Beachten Sie beim folgenden Beispiel auch wieder den Punkt beim Multiplikationssymbol der Formel für z. x = 0 : .1 : 10; y = 0 : .1 : 10; [x_grid, y_grid] = meshgrid(x, y); z = sin(x_grid) + 3.*cos(y_grid); surf(x_grid, y_grid, z); [[Datei:octave_flaeche1.jpg]] Auch ein Farbstreifen kann via "colorbar" zur Grafik hinzugefügt werden. x = 0 : .1 : 10; y = 0 : .1 : 10; [x_grid, y_grid] = meshgrid(x, y); z = sin(x_grid) + 3.*cos(y_grid); surf(x_grid, y_grid, z); colorbar("East"); [[Datei:octave_flaeche2.jpg]] Das Ganze in Netzdarstellung läßt sich so programmieren: x = 0 : .2 : 10; y = 0 : .2 : 10; [x_grid, y_grid] = meshgrid(x, y); z = sin(x_grid) + 3.*cos(y_grid); mesh(x_grid, y_grid, z); Ausgabe: [[Datei:octave_mesh1.jpg]] ==== Ellipsoide und Kegel ==== Für das Zeichnen von Kugeln oder Ellipsoiden stellt Octave den "sphere"-Befehl bzw. den "ellipsoid"-Befehl zur Verfügung. clear; close all; clc; % Ellipsoiden zeichnen [x, y, z] = sphere(30); surf(5*x, 4*y, 3*z); hold on; [x, y, z] = ellipsoid(5, 5, 5, 6, 3, 2, 30); surf(x, y, z); axis equal; [[Bild:octave_ellipsoid2.jpg|600px]] Für Zylinder und Kegel ist der "cylinder"-Befehl zuständig. clear; close all; clc; % Kegel und Zylinder zeichnen [x, y, z] = cylinder([1 2], 100); surf(x, y, z*3); hold on; [x, y, z] = cylinder([0.5 0.5], 50); surf(x+3, y, z*2); axis equal; [[Bild:octave_cylinder2.jpg|600px]] === 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>. Das Ganze sollte etwa wie folgt aussehen: [[Datei:octave_kurve10.jpg]] * Zeichnen Sie die Fläche <math>z = \log(x) + \cos(y)</math>. Das Ganze sollte etwa wie folgt aussehen: [[Datei:octave_flaeche10.jpg]] == Weiteres == === subplot === Zeichnen mit Untergrafiken: Hier wird z.B. ein Fenster mit drei Untergrafiken gezeichnet. Eingabe: t = 0 : .5 : 10; [x_grid, y_grid] = meshgrid(t, t); subplot(311); surf(x_grid, y_grid, sin(x_grid) + cos(y_grid) ); subplot(312); surf(x_grid, y_grid, sin(x_grid) + log(y_grid) ); subplot(313); surf(x_grid, y_grid, x_grid + cos(y_grid) ); Ausgabe: [[Datei:octave_subplot2.jpg]] Die dreistellige Ziffer beim subplot-Befehl bedeutet folgendes: * Die erste Ziffer ist die Zeilenanzahl * Die zweite Ziffer ist die Reihenanzahl und * Die dritte Ziffer ist der Index. Nun sei ein Beispiel mit 3x2-Untergrafiken angeführt. clear; close all; clc; x = 0 : .1 : 10; subplot(321); plot(x, sin(x)); text(2, -0.5, "Index 1"); subplot(322); plot(x, tan(x)); text(2, 2, "Index 2"); subplot(323); plot(x, cosh(x) ); text(2, 3000, "Index 3"); subplot(324); plot(x, gamma(x) ) text(2, 100000, "Index 4"); subplot(325); plot(x, log(x) ); text(2, 0, "Index 5"); subplot(326); plot(x, exp(x) ); text(2, 10000, "Index 6"); Ausgabe: [[Datei:octave_subplot3.jpg]] Hier ist sehr gut zu sehen, in welcher Reihenfolge der Index läuft. === figure === Zeichnen in verschiedene Fenster, z.B. clear; close all; clc; x = 0 : .1 : 10; y = 0 : .1 : 10; [x_grid, y_grid] = meshgrid(x, y); figure(1) surf(x_grid, y_grid, sin(x_grid) + cos(y_grid)); figure(2) surf(x_grid, y_grid, sin(x_grid) + log(y_grid)); Ausgabe: [[Datei:octave_figure111.jpg|700px]] === Linien zeichnen === Zeichnen Sie eine Linie von der Koordinate [-15, 0] zu [15, 5]: clear; close all; clc; x = line([-15 15], [0, 5], "Color", "black", "LineWidth", 2); Ausgabe: [[Datei:octave_linie1.jpg]] Man beachte, dass Octave nicht Punkte P1(x1, y1), P2(x2, y2) erwartet, sondern einen x-Vektor [x1 x2] und einen y-Vektor [y1 y2]. Ein allgemeines Viereck wird z.B. mit folgendem Befehl gezeichnet. line([-15 15 10 -5, -15], [0, 5, 20, 15, 0], "LineWidth", 2); [[Datei:octave_viereck2.jpg]] Auch dreidimensionale Formen lassen sich mit dem line-Befehl zeichnen: clear; close all; clc; line([-15 15 10 -5, -15], [0, 5, 20, 15, 0], [10, 20, 30, 40, 50], "LineWidth", 2); [[Datei:octave_dreidim2.jpg]] === Aufgaben === * Zeichnen Sie mittels "subplot" die Funktionsgrafen <math>y_1=\tan(x), y_2=\tan(2x), y_3=\tan\sqrt x, y_4=x\cdot \tan(x)</math> in folgender Form in ein Fenster: ** in 2x2-Darstellung ** in 1x4-Darstellung. * Zeichnen Sie die im obigen Beispiel angegebenen Funktionsgrafen mittels "figure" jeweils in ein eigenes Fenster. = Vektoren und Matrizen = == Vektoren == Vektoren sollten jedem aus der Linearen Algebra bekannt sein. === Zeilen- und Spaltenvektoren === % Ein Zeilenvektor v1 = [1, 2, 3] % Ein Spaltenvektor v2 = [6; 7; 8] Ausgabe: v1 = 1 2 3 v2 = 6 7 8 Alternative Schreibweisen: % Ein Zeilenvektor v1 = [1 2 3] % Ein Spaltenvektor v2 = [6 7 8] Die Ausgabe entspricht der obigen Darstellung. === Zugriff auf Vektorelemente === Nachfolgend seien einige Zugriffsmöglichkeiten auf die einzelnen Vektorelemente erläutert. Auf ein einzelnes Element kann via Index zugegriffen werden. Der Index startet bei 1: v1 = [1 2 4 8 16]; v2 = v1(3) Ausgabe: v2 = 4 Mehrere Elemente werden folgendermaßen angesprochen: v1 = [1 2 4 8 16]; v2 = v1(3:4) Ausgabe: v2 = 4 8 Liefere den Teilvektor von einem gegebenen Index bis zum letzten Element: v1 = [1 2 4 8 16]; v2 = v1(3:end) Ausgabe: v2 = 4 8 16 === Addition und Subtraktion von Vektoren === v1 = [1, 2, 3]; v2 = [5, 7, 9]; res = v1 + v2 res = v1 - v2 Ausgabe: res = 6 9 12 res = -4 -5 -6 === Multiplikation mit Skalaren === faktor = 3; v = [1, 2, 3]; res = faktor * v Ausgabe: res = 3 6 9 === Skalarprodukt === Das Skalarprodukt ist bekanntermaßen als <math>v_1 \cdot v_2 = |v_1| |v_2| \cos(\angle(v_1, v_2))</math> definiert. In Octave sieht das so aus: v1 = [1, 2, 3]; v2 = [5, 6, 7]; res = dot(v1, v2) Ausgabe: res = 38 === Vektorprodukt === v1 = [1, 2, 3]; v2 = [5, 6, 7]; res = cross(v1, v2) Ausgabe: res = -4 8 -4 Enger an die mathematische Darstellung lehnt sich folgender Code an. Die zu multiplizierenden Vektoren seien in Form von Spaltenvektoren gegeben. Mathematisch: <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> Octave-Code: a = [1 2 3]; b = [5 6 7]; res = cross(a, b) Ausgabe: res = -4 8 -4 === Transponierter Vektor === v1 = [1, 2, 3]; v2 = [5; 6; 7]; res1 = v1' res2 = v2' Ausgabe: res1 = 1 2 3 res2 = 5 6 7 === Einige weitere Vektorfunktionen === Beispiel: % 1 + 2 + 3 v = [1 2 3]; sum(v) Ausgabe: ans = 6 Beispiel: % 1 * 2 * 3 * 4 v = [1 2 3 4]; prod(v) Ausgabe: ans = 24 Beispiel: % 1^2 + 2^2 + 3^2 v = [1 2 3]; sumsq (v) Ausgabe: ans = 14 == Matrizen == Gegeben sei folgende 2x3-Matrix <math>m=\left(\begin{array}{ccc} 1 & 2 & 3\\ 4 & 5 & 6 \end{array}\right)</math>. Eingabe: m = [1, 2, 3; 4, 5, 6] Ausgabe: m = 1 2 3 4 5 6 Alternativ und anschaulicher kann diese 2x3-Matrix auch so eingegeben werden: m = [1 2 3 4 5 6] Dies ist schon sehr nahe an der mathematischen Darstellungsweise. === Zugriff auf Matrizenelemente === m = [1 2 3 4 5 6]; % Element aus Zeile 2 und Spalte 3 m(2,3) Ausgabe: ans = 6 Eine andere Zugriffsmöglichkeit ist diese: m = [1 2 3 4 5 6]; % Auf das fünfte Element soll zugegriffen werden m(5) Ausgabe: ans = 3 Die Matrix wird also spaltenweise durchlaufen (nicht zeilenweise). Dies ist vielleicht auf den ersten Blick etwas ungewöhnlich, wird aber z.B. auch in Fortran so gehandhabt. Auch Teilmatrizen können einfach gebildet werden: m = [1 2 3 4 5 6]; m(2:end, 2:end) Ausgabe: ans = 5 6 Siehe zu diesem Thema auch etwas weiter hinten in diesem Text den Abschnitt "Teilmatrizen". === Addition und Subtraktion von Matrizen === m1 = [1, 2, 3; 4, 5, 6]; m2 = [-4, -2, 0; 2, 4, 6]; m1 + m2 m1 - m2 Ausgabe: ans = -3 0 3 6 9 12 ans = 5 4 3 2 1 0 === Transponierte Matrix === m = [1, 2, 3; 4, 5, 6]; m' Ausgabe: ans = 1 4 2 5 3 6 === Rang einer Matrix === Der Rang einer Matrix Rg(M) ist die maximale Anzahl der linear unabhängigen Zeilenvektoren (Spaltenvektoren). m1 = [1, 2, 3; 4, 5, 6]; m2 = [1, 2; 2, 4]; rank(m1) rank(m2) Ausgabe: ans = 2 ans = 1 Regulär ist eine nxn-Matrix, wenn der Rg(M) = n. D.h. die erste Matrix m1 ist regulär, die zweite m2 singulär. === Inverse Matrix === m1 = [1, 3; 0, -5 ]; m2 = [1, 2; 2, 4]; inv(m1) inv(m2) Ausgabe: ans = 1.00000 0.60000 0.00000 -0.20000 warning: matrix singular to machine precision warning: called from test1 at line 4 column 1 ans = Inf Inf Inf Inf Die Matrix m2 in diesem Beispiel ist singulär (d.h. die Determinante ist 0). Determinanten werden etwas weiter unten in diesem Text behandelt. Inf steht für Infinity (= Unendlich). === Multiplikation von Matrizen (falksches Schema) === m1 = [1, 3, 4; 0, -5, 1]; m2 = [1, 2; 2, 3; 0, 2]; m1 * m2 Ausgabe: ans = 7 19 -10 -13 === Determinante einer Matrix === m1 = [1, 3; 0, -5 ]; m2 = [1, 2; 2, 4]; det(m1) det(m2) Ausgabe: ans = -5 ans = 0 m1 ist regulär, m2 ist singulär. Determinanten können nur von quadratischen Matrizen gebildet werden. === Teilmatrizen === m = [1, 2, 3; 0, 5, 1]; % Die Matrix in einen Spaltenvektor umwandeln m1 = m(:) % Das Element aus der 1. Zeile und der 2. Spalte extrahieren m2 = m(1,2) % Erste Zeile extrahieren m3 = m(1, 1:3) m4 = m(1, :) % Zweite Spalte extrahieren m5 = m(1:2, 2) m6 = m(:, 2) Ausgabe: m1 = 1 0 2 5 3 1 m2 = 2 m3 = 1 2 3 m4 = 1 2 3 m5 = 2 5 m6 = 2 5 === Einheitsmatrizen === eye(3,2) Ausgabe: ans = 1 0 0 1 0 0 === Nullmatrizen === zeros(2,3) Ausgabe: ans = 0 0 0 0 0 0 === Diagonalmatrizen === diag([1, 2, 3]) Ausgabe: ans = 1 0 0 0 2 0 0 0 3 === Spur einer Matrix === trace([1,2,3; 6,9, 0]) Ausgabe: ans = 10 === LR-Zerlegung einer Matrix === Führen Sie die LR-Faktorisierung (LR ... links/rechts bzw. LU ... left/upper) einer Matrix m aus. l sei die linke Dreiecksmatrix, r die rechte Dreiecksmatrix und p die Permutationsmatrix m = [1 0 5 -1 1 -2 0 0 3]; [l, r, p] = lu(m) Ausgabe: l = 1 0 0 -1 1 0 0 0 1 r = 1 0 5 0 1 3 0 0 3 p = 1 0 0 0 1 0 0 0 1 === Eigenwerte === a = [5 8 1 3]; % Eigenvektoren und Eigenwerte [ev, ew] = eig(a) Ausgabe: ev = 0.9701 -0.8944 0.2425 0.4472 ew = Diagonal Matrix 7 0 0 1 Die Eigenwerte sind hier <math>\lambda_1 = 7</math> und <math>\lambda_2 = 1</math>. Die Eigenvektoren sind [0.9701 0.2425] bzw. [-0.8944 0.4472]. Da das Gleichungssystem <math>(A - \lambda_i E) x_i = 0</math> singulär ist, sind alle Lösungsvektoren Vielfache dieser Eigenvektoren. === Schwach besetzte Matrizen === {{Wikipedia | Dünnbesetzte Matrix}} Gegeben sei die schwach besetzte Matrix m = [0 1 0 0 0 0 0 0 3 0 4 0 0 2 0 0 0 1 0 0 0 0 0 1 7] Mittels dem sparse-Befehl kann man einfach die Elemente != 0 nach folgendem Schema eingeben. sparse ([zeilenindizes] [spaltenindizes] [werte]) also in unserem Fall: ms = sparse([1 2 3 3 4 5 5], [2 4 1 4 3 4 5], [1 3 4 2 1 1 7]) Ausgabe: ms = Compressed Column Sparse (rows = 5, cols = 5, nnz = 7) (3, 1) -> 4 (1, 2) -> 1 (4, 3) -> 1 (2, 4) -> 3 (3, 4) -> 2 (5, 4) -> 1 (5, 5) -> 7 Die volle Matrix erhält man mit dem Befehl full: m = full(ms) Ausgabe: m = 0 1 0 0 0 0 0 0 3 0 4 0 0 2 0 0 0 1 0 0 0 0 0 1 7 Grafisch anzeigen lassen kann man sich die Besetzung von Matrizen mit dem spy-Befehl: spy(ms); oder (für allgemeine Matrizen auch mittels) spy(m); Ausgabe: [[Datei:octave_sparse1.jpg]] Wirklich interessant ist der spy-Befehl für größere Matrizen, z.B. um die Bandstruktur zu visualisieren. e = eye(200); es = sparse(e); % Auf sparse-Matrizen kann genauso zugegriffen werden wie auf normalen Matrizen es(100, 15) = 100; spy(es); Ausgabe: [[Datei:octave_sparse2.jpg]] === Matrizen mit Zufallswerten === Insbesondere für Testzwecke kann es manchmal sinnvoll sein größere Matrizen mit Zufallswerten zu bilden. Dazu stellt Octave u.a. den rand-Befehl zur Verfügung. m = rand(5, 6) Ausgabe: m = 0.86605 0.61108 0.71347 0.97119 0.52428 0.21993 0.74059 0.49062 0.56073 0.68592 0.74737 0.62680 0.20790 0.84874 0.36834 0.31102 0.25813 0.28933 0.84732 0.98777 0.91512 0.42240 0.87891 0.63757 0.76823 0.80367 0.24639 0.78208 0.77170 0.95281 Die Zufallszahlen liegen gleichverteilt zwischen 0 und 1 und werden nach dem Mersenne-Twister-Verfahren mit einer Periode von <math>2^{19937}-1</math> gebildet. Andere Verfahren sind: * randn: Normalverteilte Pseudozufallselemente mit Mittelwert=0 und Varianz=1 * rande: Exponentialverteilte Zufallselemente * randg: Gammaverteilte Zufallselemente * randp: Poissonverteilte Zufallselemente Details dazu siehe in der Octave-Hilfefunktion. == Aufgaben == * Berechnen Sie den Winkel zwischen den beiden Vektoren a = [1 2 0] und b = [2 1 1]. Hinweis: Siehe diesbezüglich auch im Oktave-Hilfesystem den Befehl "norm". * Gegeben seien Vektoren a = [1 2 5], b = [0 0 -1] und c = [-1 -2 2]. Berechnen Sie das Spatprodukt aus diesen drei Vektoren. * Multiplizieren Sie die beiden Matrizen A und B (mit Octave und zur Kontrolle händisch) A = [0 0 1 1 2 1] B = [1 1 1 2 0 4] * Ist die Matrix C regulär? Wenn ja, dann bilden Sie die inverse Matrix. C = [-1 0 0 -4 2 0 1 5 7 6 2 0 3 0 2 6] * Ist die Matrix D regulär? Wenn ja, dann bilden Sie die inverse Matrix. D = [2 1 0 0 0 0 2 1 0 0 0 2 1 1 0 0] * Berechnen Sie die Konditionszahl der folgenden Matrix. Hinweis: Siehe diesbezüglich im Oktave-Hilfesystem den Befehl cond [3 4 -5 6 0 3 1 1 2] * Berechnen Sie die Eigenwerte und Eigenvektoren der folgenden Matrix [6 -3 4 0 0 7 -1 1 0 10 -3 -2 0 1 -2 1] = Komplexe Zahlen = Die imaginäre Einheit wird in Octave durch den Buchstaben i, j, I oder J symbolisiert. Darstellen kann man eine komplexe Zahl bekannterweise in mehreren Formen: * Kartesische Darstellung <math>z = \Re(z) + i \cdot \Im(z)</math> * Polardarstellungen <math>z = r \cdot (\cos(\phi) + i \cdot \sin(\phi)) = r \cdot e^{i\cdot \phi}</math> Die konjugiert komplexe Zahl ist <math>z^* = \Re(z) - i \cdot \Im(z)</math> == Mit komplexen Zahlen rechnen == z1 = 2 + 5i; % kartesische Darstellung z2 = 3 * exp(3j); % Polardarstellung % Addition res = z1 + z2; disp("z1 + z2 = "); disp(res); % Multiplikation res = z1 * z2; disp("z1 * z2 = "); disp(res); % Realteil res = real(z2); disp("Realteil von z2 = "); disp(res); % Imaginärteil res = imag(z2); disp("Imaginaerteil von z2 = "); disp(res); % Betrag res = abs(z1); disp("Betrag von z1 = "); disp(res); % Argument res = angle(z1); disp("Argument von z1 = "); disp(res); % Konjugiert komplexe Zahl res = conj(z1); disp("Konjugiert komplexe Zahl von z1 = "); disp(res); Ausgabe: z1 + z2 = -0.96998 + 5.42336i z1 * z2 = -8.0568 - 14.0032i Realteil von z2 = -2.9700 Imaginaerteil von z2 = 0.42336 Betrag von z1 = 5.3852 Argument von z1 = 1.1903 Konjugiert komplexe Zahl von z1 = 2 - 5i == Die gaußsche Zahlenebene == clear; close all; clc; z1 = 3 + 5i; z2 = 5 * exp(0.5i); hold on; plot(z1, "*"); compass(z1); plot(z2, "o"); compass(z2); grid on; [[Datei:octave_komplex1.jpg]] == Aufgaben == * Berechnen Sie die Quadratwurzel der komplexen Zahl <math>z = 3 + 2i</math>. * Verwandeln Sie folgende Zahlen in die Polarkoordinatendarstellung: <math>-11 - 3i</math> und <math>(1+i)^{10}</math> * Verwandeln Sie folgende Zahlen in die Normaldarstellung: <math>12 \cdot e^{i\cdot \pi / 4}</math> und <math>3 \cdot (\cos(\pi / 3) + i \cdot \sin(\pi / 3))</math> * Zeichnen Sie die Zahl <math>3 + 5i</math> in der gaußschen Zahlenebene als Zeiger. = Funktionen = Um Programme zu strukturieren und einfacher zu gestalten können Programmteile in Funktionen ausgelagert werden. Eingebaute Funktionen haben wir schon kennengelernt (z.B. die Sinus-Funktion sin). Nun wollen wir sehen, wie man selbst solche Funktionen schreiben kann. == Eine einfache Funktion schreiben == Datei addiere.m: function res = addiere(a, b) % Addiere zwei Zahlen a + b res = a + b; end Datei test1.m: addiere(10, 15) Ausgabe: ans = 25 * Jede Funktion sollte in einer eigenen m-Datei stehen. * Der Dateiname sollte mit dem Funktionsnamen (natürlich ohne Dateiendung .m) übereinstimmen. * Der Kommentar unter dem Funktionskopf wird als Hilfstext angezeigt, wenn die help-Funktion (hier "help addiere") aufgerufen wird. == Inline-Funktionen == Kurze Funktionen können auch als Inline-Funktionen geschrieben werden. addiere = inline("a + b"); x = 5; y = 10; z = addiere(x, y) Oder in diesem Fall noch kürzer addiere = inline("a + b"); z = addiere(5, 10) Ausgabe: z = 15 Bei neueren Octave-Versionen kann bei der Verwendung von Inline-Funktionen die Warnung warning: inline is obsolete; use anonymous functions instead erscheinen. Ein Blick in die Hilfe-Funktion help inline zeigt das selbe Ergebnis. Es sollen also anonyme Funktionen (siehe etwas weiter unten in diesem Text) anstelle von Inline-Funktionen verwendet werden. == Funktionsstring == addiere = "a + b"; a = 5; b = 10; z = eval(addiere) Ausgabe: z = 15 == Anonyme Funktionen == {{Wikipedia | Anonyme Funktion}} addiere = @(a, b) a + b; x = 10; y = 20; z = addiere(x, y) oder kürzer addiere = @(a, b) a + b; z = addiere(10, 20) Ausgabe: z = 30 == Nullstellen von Funktionen bestimmen == sinh2 = @(x) sinh(x) + 2; z = fzero(sinh2, 1) Ausgabe: z = -1.4436 Zur Kontrolle soll hier der Graph der Funktion dargestellt werden clear; close all; clc; sinh2 = @(x) sinh(x) + 2; x = -2 : 0.1 : 0; y = sinh2(x); z = fzero(sinh2, 1) plot(x, y); hold on; plot(z, 0, "o", "Color", "red", "LineWidth", 2); text (-1.8, 0.8, "Nullstelle"); line([z -1.7], [0, .7], "Color", "black"); grid on; Ausgabe: [[Datei:octave_funktion5.jpg]] Weiter unten im Text wird die ähnliche Funktion "fsolve" beschrieben. "fzero" benutzt zwei verschiedene Funktionen zur Problemlösung, darunter eben auch "fsolve". Für die Nullstellenbestimmung von Polynomen gibt es die Funktion "roots". Näheres dazu folgt im nächsten Kapitel. == Globale Variablen == Datei addiere.m: function res = addiere() global a b; res = a + b; end Datei test1.m: clear; close all; clc; global a b; a = 5; b = 3; addiere() Ausgabe: ans = 8 == Aufgaben == * Schreiben Sie eine Funktion "ellipse", welche eine Ellipse am Bildschirm darstellt. Zur Erinnerung: Die Parameterdarstellung der Ellipse lautet <math>x = a\cdot\cos(t), y = b\cdot\sin(t), 0 \leq t \leq 2\pi</math>, Funktionsargumente seien a und b. * Schreiben Sie <math>y = 2\cdot\sin(x) + 3\cdot\cos(x/2)</math> ** als normale Funktion ** als Funktionsstring ** als Inlinefunktion ** als anonyme Funktion ** stellen Sie diese Funktion grafisch am Bildschirm dar. = Polynome = == Einzelne Polynomwerte berechnen == % y = 2*x^3 + 5*x^2 + 4 für x = 2 berechnen p = [2, 5, 0, 4]; polyval(p, 2) Ausgabe: ans = 40 == Polynome zeichnen == % y = 2*x^3 - 5*x^2 + 4 für das Intervall -5 <= x <= 5 grafisch darstellen x = -5 : .1 : 5; p = [2, 5, 0, 4]; y = polyval(p, x); plot(x,y); grid on; Ausgabe: [[Datei:octave_polynom1.jpg]] == Nullstellen bestimmen == Für Polynome existiert die Funktion "roots" zur Nullstellenbestimmung. % Nullstellen für y = 2*x^3 - 5*x^2 + 4 bestimmen p = [2, 5, 0, 4]; r = roots(p) Ausgabe: r = -2.76214 + 0.00000i 0.13107 + 0.84077i 0.13107 - 0.84077i Dieses Polynom hat nur eine reelle Nullstelle. Diese liegt, wie am obigen Grafen zu ersehen ist, in der Nähe von -2.762. Die beiden anderen Nullstellen sind konjugiert komplex zueinander (wie es auch sein sollte). == Aufgaben == * Berechnen Sie den Wert für x = 3 des Polynoms <math>y = 2x^4 - 3x^3 - x + 7</math>. * Berechnen Sie die Nullstellen von <math>y = 7x^5 - 3x^2 + 12</math>. * Zeichnen Sie das Polynom <math>y = 12x^4 - 70x</math> im Intervall <math>-5 \leq x \leq 5</math>. = 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. == Einfache Berechnung mittels Gauß-Verfahren == {{Wikipedia | Gaußsches Eliminationsverfahren}} Beispiel: A = [5 1 0 2]; b = [1 2]; x = A \ b Ausgabe: x = 0 1 == Das gmres-Verfahren == gmres steht für Generalized Minimal Residual. {{Wikipedia | GMRES-Verfahren}} A = [5 1 0 2]; b = [1 2]; x = gmres(A, b) Ausgabe: gmres converged at iteration 2 to a solution with relative residual 2.22045e-16 x = -1.6653e-16 1.0000e+00 Das Ergebnis weicht etwas vom gaußschen Verfahren ab, ist aber trotzdem im Rahmen der Näherung korrekt. Weiters kennt Octave noch andere iterative Verfahren, z.B. cgs (Conjugate Gradient Squared) oder bicgstab (Bi-Conjugate Gradient Stabilized). Näheres zu diesen Verfahren siehe in der weiterführenden Literatur (z.B. bei Meister: Numerik linearer Gleichungssysteme, Vieweg+Teubner, 2011) {{Wikipedia | CGS-Verfahren}} == Aufgabe == * Lösen Sie folgendes Gleichungssystem mittels Octave (und zur Kontrolle auch händisch): 5x + 6y - 2z = 12 3x - y - 3z = 6 2x + 2y + 4z = 5 = Nichtlineare Gleichungssysteme = == fsolve und fzero == Löse eine beliebige Gleichung f(x) = 0, z.B. <math> f(x) = x^2 - 5\cos(x) - 10 = 0 </math>: f = @(x) x^2 - 5*cos(x) - 10; xstart = 1; [x, fval, info] = fsolve(f, xstart) Ausgabe: x = 2.4681 fval = -1.7764e-015 info = 1 * x ist eine Nullstelle in der Nähe vom Startwert xstart. * fval ist die Abweichung, den f bei x aufweist. * info ist ein "Fehlercode": 1 bedeutet, dass der relative Fehler in der spezifizierten Toleranz liegt (wie es sein soll). 3 würde bedeuten, dass der Algorithmus nicht konvergiert (z.B. weil keine Nullstelle existiert). Zur Kontrolle plotten wir den Funktionsgraphen: x = - 1 : .1 : 3; y = x.^2 - 5.*cos(x) - 10; plot(x,y, "LineWidth", 2); grid on; Ausgabe: [[Datei:octave_nichtlin1.jpg]] Und siehe da, die gesuchte Nullstelle liegt wie berechnet bei einem Wert nahe 2,5. Die Funktion <math>x^2 - 5\cos(x) - 10</math> hat noch eine zweite Nullstelle, wie in der folgenden Abbildung zu erkennen ist. [[Datei:octave_nichtlin2.jpg]] Diese zweite Nullstelle erhalten wir, wenn der Startwert in der Nähe dieser zweiten Nullstelle liegt, also z.B. bei -1. Ändern Sie einfach den entsprechenden Startwert im obigen Programmcode, und das Programm sollte die Nullstelle in der Nähe von -2.5 liefern. Auch die Funktion ''fzero'' kann zur Lösung einer nichtlinearen Gleichung verwendet werden. Die Hilfe-Funktion von Octave empfiehlt dies sogar eindringlich für den Fall einer nichtlinearen Gleichung in einer Variablen. Für das gleiche Beispiel wie oben kann der Programmcode folgendermaßen aussehen: Eingabe: f = @(x) x^2 - 5*cos(x) - 10; [x0, y0] = fzero (f, [0, 3]) Ausgabe: x0 = 2.4681 y0 = -1.2434e-14 == Gleichungssysteme == 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> Lösung: f.m: function y = f(x) y(1) = 2*x(1) + 4*x(2); y(2) = 4*x(1) + 8*x(2)^3; end test1.m: clear; close all; clc; [x, fval, info] = fsolve (@f, [0, 1]) [x, fval, info] = fsolve (@f, [0, -1]) [x, fval, info] = fsolve (@f, [0, 0]) Ausgabe: x = -2 1 fval = 0 7.4930e-09 info = 1 x = 2 -1 fval = 0 -7.4930e-09 info = 1 x = 0 0 fval = 0 0 info = 1 == Aufgaben == * Bestimmen Sie die Nullstellen von <math>f(x) = x^2 - 3</math>. Plotten Sie den Grafen. * Bestimmen Sie die Nullstelle von <math>f(x) = sin(x) - x - 1</math>. Plotten Sie den Grafen. * Lösen Sie das folgende Gleichungssystem (und stellen Sie das Ganze grafisch am Bildschirm dar): <math> f_1 = x_1 + x_2 = 0; f_2 = x_1 + \sin{x_2} = 0</math> = Interpolation = == Eindimensionale Interpolation == {{Wikipedia | Interpolation (Mathematik)}} Bezüglich eindimensionaler Interpolation sei auf die [https://docs.octave.org/v11.1.0/One_002ddimensional-Interpolation.html Octave-Dokumentation und Hilfefunktion zum Befehl " interp1"] verwiesen. Dort findet sich auch ein Programmbeispiel, das als Grundlage des folgenden Plots dient: [[Datei:octave_interpol1.jpg]] == Mehrdimensionale Interpolation == Bezüglich mehrdimensionaler Interpolation siehe die [https://docs.octave.org/v11.1.0/Multi_002ddimensional-Interpolation.html Hilfefunktion zu "interp2", "interp3" und "interpn"]. == Aufgabe == * Gegeben seinen die fünf Stützpunkte p1 = [1, 0], p2 = [2, -5], p3 = [3, 2], p4 = [4, 7], p5 = [5, 6]. Legen Sie eine Funktion (die Interpolierende) durch diese Stützpunkte. Eine Lösungsmöglichkeit: xp = [1 2 3 4 5]; yp = [0, -5, 2, 7, 6]; xf = 1 : .1 : 5; spl = interp1(xp, yp, xf, "spline"); pch = interp1(xp, yp, xf, "pchip"); plot(xp, yp, "or", "LineWidth", 2, xf, spl, "LineWidth", 2, ... xf, pch, "LineWidth", 2); legend("stuetzpunkte", "spline", "pchip", "location", "southeast"); [[Datei:octave_interpol3.jpg]] = Differenzialrechnung = == Polynome differenzieren == Es soll das Polynom <math>y = 2x^3 - 5x^2 + 7</math> differenziert werden. % Differenzieren des Polynoms y = 2*x^3 - 5*x^2 + 7 p = [2, -5, 0, 7]; polyder(p) Ausgabe: ans = 6 -10 0 D.h. also, die Ableitung von <math>y = 2x^3 - 5x^2 + 7</math> ist <math>y' = 6x^2 - 10x</math>. == Sonstige Funktionen differenzieren == Als Beispiel differenzieren wir <math>y = 5x\sin{x}</math> und stellen das Ganze grafisch dar. clear; close all; clc; x = 0 : 0.01 : 10; y = 5 .* x .* sin(x); y_strich = diff(y) / 0.01; plot(x, y, "Color", "red", "LineWidth", 2); hold on; plot(x(1:length(x)-1), y_strich, "Color", "blue", "LineWidth", 2); legend("y", "y'"); grid on; Ausgabe: [[Datei:octave_diff1.jpg]] diff(y) ist der Vektor aus den Differenzen y(2)-y(1), ..., y(n)-y(n-1). Für die genaue Arbeitsweise der diff-Funktion siehe "help diff". == Aufgaben == * Differenzieren Sie das Polynom <math>y = 5y^5 - y^4 + 6y - 4</math>. * 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 = == Polynome integrieren == Berechnen Sie das unbestimmte Integral von <math>y = 2x^3 - 7x^2 + 7</math> p = [2, -7, 0, 7]; p_int = polyint(p) Ausgabe: p_int = 0.50000 -2.33333 0.00000 7.00000 0.00000 Das Ergebnis lautet also <math>\int{y dx} = 0.5x^4 - 2.33333x^3 + 7x + C</math> (auf die Integrationskonstante C darf nicht vergessen werden!). == Gauß-Quadratur == {{Wikipedia | Gauß-Quadratur}} Berechnen Sie das Integral <math>\int_{0}^{3}x^2 dx</math> mittels Gauß-Quadratur. Datei f.m: function y = f(x) y = x^2; end Datei test1.m: [v, ier, nfun, err] = quad ("f", 0, 3) Ausgabe: v = 9.0000 ier = 0 nfun = 21 err = 9.9920e-014 Erläuterung zur Ausgabe: * v ... Resultat der Integration * ier ... integer error code * nfun ... Anzahl der Funktionsaufrufe * err ... Fehler in der Lösung == Quadratur mittels adaptiver Lobatto-Regel == Berechnen Sie diesmal das Integral <math>\int_{0}^{3}x^2 dx</math> mittels Lobatto-Quadratur. f = inline("x.^2"); v = quadl (f, 0, 3) Ausgabe: v = 9 Wie weiter oben bereits angesprochen kann bei der Ausgabe eine Warnung erfolgen. Inline-Funktionen sind inzwischen als obsolet erklärt und es sollen stattdessen anonyme Funktionen verwendet werden. Zwecks Übung sei nachfolgend nochmals dieses Beispiel berechnet. Diesmal wird aber eine anonyme Funktion verwendet. v = quadl (@(x) x.^2, 0, 3) == Aufgaben == * Integrieren Sie das Polynom <math>y = 5y^5 - y4 + 6y - 4</math>. * Integrieren Sie die Funktion <math>y = \log(x) + 10x</math> von -5 bis 5. * Integrieren Sie die Funktion <math>y = x^3</math> von 0 bis 4. Verwenden Sie hierzu die Simpsonregel (siehe dazu in der Hilfefunktion den Befehl "quadv"). = Gewöhnliche Differenzialgleichungen = == ode23, ode45 und lsode == Für die Lösung von Differenzialgleichungen stehen die Funktionen * ode23 bzw. * ode45 zur Verfügung. Diese Funktionen implementieren das Runge-Kutta-Verfahren. "ode" steht für "Ordinary Differential Equation" (also auf Deutsch für "Gewöhnliche Differentialgleichung"). Die Zahlen bei ode23 oder ode45 stehen für die Ordnung. {{Wikipedia | Runge-Kutta-Verfahren}} Beispiel <math>y' = x^2 + y^3</math>: clear; close all; clc; [x, y] = ode45(@(x,y) (x^2+y^3), [0 1], 0); plot(x, y, "LineWidth", 2); Ausgabe: [[Datei:octave_ode1.jpg]] Bezüglich der genauen Funktionsweise von "ode45" (oder "ode23") siehe die Octave-Hilfe. Auch die Funktion "lsode" steht zur Lösung von ODEs zur Verfügung. Beispiel <math>y' = x + y</math>: clear; close all; clc; t = 0 : .1 : 5; [y2, istate, msg] = lsode(@(x,y) (x + y), 1, t); istate msg plot(t, y2); Ausgabe: istate = 2 msg = successful exit [[Datei:octave_lsode1.jpg]] Bezüglich der genauen Funktionsweise von "lsode" siehe die Octave-Hilfe. == Aufgaben == * Lösen Sie die Differenzialgleichung <math>y' = \frac{1}{x\cdot y}</math> mit Octave. 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>. = Die Fast-Fourier-Transformation = {{Wikipedia | Schnelle Fourier-Transformation}} Für die Funktion "fft" siehe das Octave-Hilfesystem. = Mengenrechnung = == Vereinigungsmenge == v1 = [1 2 3 4]; v2 = [2 4 6]; union(v1, v2) Ausgabe: ans = 1 2 3 4 6 == Schnittmenge == v1 = [1 2 3 4]; v2 = [2 4 6]; intersect(v1, v2) Ausgabe: ans = 2 4 = Logik = Logische Operatoren werden oft benötigt, z.B. bei Schleifen und Verzweigungen. Octave kennt die logischen Operatoren <code>or, and, not</code> und <code>xor</code>. Als Beispiel sei die Wahrheitstabelle für den Operator <code>or</code> dargestellt. A B A or B -------------------- true true true true false true false true true false false false In Octave kann das so ausgedrückt werden: or( true, true ) or( true, false ) or( false, true ) or( false, false ) Ausgabe: ans = 1 ans = 1 ans = 1 ans = 0 Zahlen ungleich 0 stehen für true, 0 für false. Z.B.: or( 22, 0) Ausgabe: ans = 1 Äquivalent zu <code>or</code> ist der Operator <code>|</code>: 22 | 0 Ausgabe: ans = 1 Zwecks näheren Informationen zu den Operatoren <code>and (&, &&), not (~, !)</code> und <code>xor</code> bemühe man Octaves Help-Funktion. Bitweise logische Funktionen kennt Octave auch, so kann man z.B. zwei Zahlen mit dem bitweisen OR-Operator verknüpfen: 0b1100101 0b0110001 --------- 0b1110101 Oder in Dezimalzahlen: 101 49 --- 117 In Octave: bitor( 0b1100101, 0b0110001 ) dec2bin( ans ) Ausgabe: ans = 117 ans = 1110101 Zu <code>bitand, bitxor</code> usw. siehe die Octave-Hilfe-Funktion. = Stochastik = ==Deskriptive Statistik == === Lageparameter === Arithmetischer Mittelwert: vec = [1 2 3 4 5 12 13]; mw = mean(vec) Ausgabe: mw = 5.7143 Der Median oder Zentralwert läßt sich folgendermaßen berechnen: vec = [1 2 3 4 5 12 13]; median(vec) Ausgabe: ans = 4 Der Modus oder häufigste Wert läßt sich mittels "mode"-Funktion eruieren: vec = [1 2 1 3 5 1 2 7]; [m, f, c] = mode (vec); disp(m); disp(f); disp(c); Ausgabe: 1 3 { [1,1] = 1 } m (erste Zeile der Ausgabe) ist der Modus. f (zweite Zeile) ist die Häufigkeit. Näheres dazu siehe im Octave-Hilfesystem. === Streuungsparameter === Varianz: vec = [1 2 3 1 1 6 7]; v = var(vec) Ausgabe: v = 6.3333 Standardabweichung: vec = [1 2 3 1 1 6 7]; s = std(vec) Ausgabe: s = 2.5166 === Grafiken erzeugen === Histogramme: v = [1 1 2 3 1 6 7 6 1 1 1 2]; hist(v, max(v)); Ausgabe: [[Datei:octave_histo2.jpg]] Balkendiagramme: v = [1 1 2 3 1 6 7 6]; bar(v); Ausgabe: [[Datei:octave_bar111.jpg]] Treppendiagramm: v = [1 1 2 3 1 6 7 6]; stairs(v); Ausgabe: [[Datei:octave_stairs1.jpg]] Stabdiagramm: v = [1 1 2 3 1 6 7 6]; stem(v); Ausgabe: [[Datei:octave_stem1.jpg]] === Aufgaben === Gegeben sei folgende Datentabelle mit den Werten: v1 = [3 4 1 1 7 2 1 9 2 5 9 7 2 2 9 2 2 1 2 8] v2 = [1 1 0 2 3 4 1 2 7 0 2 1 5 5 5 4 5 2 5 0] * Berechnen Sie die Lageparameter und Streuungsparameter des Vektors v1. * Berechnen Sie Kovarianz und Korrelationskoeffizient der beiden zugeordneten Vektoren v1 und v2. * Zeichnen Sie das Histogramm des Vektors v1. == Wahrscheinlichkeitsrechnung == === Kombinatorik === Der Binomialkoeffizient: <math>\binom{n}{k}=\frac{n!}{k!(n-k)!}</math> In Octave z.B.: n = 30; k = 4; n_ueber_k = nchoosek (n, k) Ausgabe: n_ueber_k = 27405 Permutationen sind die verschiedenen Anordnungsmöglichkeiten mit der Anzahl n! = n * (n-1) * ... * 2 * 1. Beispiel: v = [1, 2, 3]; p = perms(v) Ausgabe: p = 1 2 3 2 1 3 1 3 2 2 3 1 3 1 2 3 2 1 n! (n-Fakultät) selbst kann so berechnet werden: % 10! n = 10; factorial (n) Ausgabe: ans = 3628800 === Verteilungen === Octave kennt eine ganze Reihe von Dichte- und Verteilungsfunktionen und zwar * Probability Density Functions (PDF, Dichtefunktionen) * Cumulative Distribution Functions (CDF, Verteilungsfunktionen) Z.B.: * Binomialverteilung: ** binopdf ** binocdf * Hypergeometrische Verteilung: ** hygepdf ** hygecdf * Normalverteilung: ** normpdf ** normcdf * Studentverteilung: ** tpdf ** tcdf * Weibullverteilung: ** wblpdf ** wblcdf Ein Codebeispiel zur Binomialverteilung: clear; close all; clc; x = 0 : 1 : 10; n = 10; p = 0.1; b1 = binopdf (x, n, p); b2 = binocdf (x, n, p); subplot(221); bar(x, b1); title("binopdf"); text(1, 0.1, "n=10; p=0.1"); subplot(222); bar(x, b2); title("binocdf"); text(1, 0.5, "n=10; p=0.1"); n = 10; p = 0.5; b1 = binopdf (x, n, p); b2 = binocdf (x, n, p); subplot(223); bar(x, b1); text(1, 0.1, "n=10; p=0.5"); subplot(224); bar(x, b2); text(1, 0.1, "n=10; p=0.5"); Ausgabe: [[Datei:octave_bino3.jpg]] Möglicherweise erhalten Sie bei diesem Beispiel eine Fehlermeldung in der Form error: 'binopdf' undefined near line 8, column 6 The 'binopdf' function belongs to the statistics package from Octave Forge which you have installed but not loaded. To load the package, run 'pkg load statistics' from the Octave prompt. Laden Sie einfach das Paket für die Statistikfunktionen, wie in der Fehlermeldung beschrieben. Ein Codebeispiel zur Normalverteilung: clear; close all; clc; x = -4 : .1 : 4; b1 = normpdf(x); b2 = normcdf(x); subplot(121); plot(x, b1); title("normpdf"); grid on; subplot(122); plot(x, b2); title("normcdf"); grid on; Ausgabe: [[Datei:octave_norm111.jpg]] == Zufallszahlengeneratoren == Octave kann Zufallszahlen aus einer großen Anzahl von Verteilungen generieren, z.B. * Chi-Quadrat-Verteilung: chi2rnd * Log-Normal-Verteilung: lognrnd * Normalverteilung: normrnd Codebeispiel: mean = 0; standardabweichung = 1; zufallszahl = normrnd (mean, standardabweichung) Ausgabe (gibt eine Zufallszahl rund um den Mittelwert 0 aus), z.B. zufallszahl = 1.0451 Auch Zufallsvektoren (oder Zufallsmatrizen) können erstellt werden: mean = [0 0 0 0 0]; standardabweichung = 1; zufallsvektor = normrnd (mean, standardabweichung) Ausgabe, z.B.: zufallsvektor = 1.47108 -0.51280 0.52726 0.31730 -1.04422 = Einfache Benutzeroberflächen erstellen= == Input == fflush (stdout); x = input("Gib eine Zahl ein: "); disp(2 * x); Ein-/Ausgabe: Gib eine Zahl ein: 12 24 Der "fflush"-Befehl sollte immer vor dem Aufruf des input-Befehls aufgerufen werden. Näheres zu "fflush" siehe im Octave-Hilfesystem. == Diverse einfache vorgefertigte Dialoge == Fehlermeldung: errordlg("Fehlermeldung"); [[Bild:octave_fehlermeldung1.jpg]] Warnung: warndlg("Warnung"); [[Bild:octave_warnung1.jpg]] Hilfedialog: helpdlg [[Bild:octave_hilfe1.jpg]] Abfragedialog: button = questdlg ("Frage") [[Bild:octave_abfrage1.jpg]] Eingabedialog: in = inputdlg("Eingabe") [[Bild:octave_eingabe1.jpg]] Messagebox: h = msgbox ("Eine Mitteilung!"); [[Bild:octave_messagebox1.jpg]] == Komplexere vorgefertigte Dialogboxen == === Menübox === auswahl = menu("Auswahl", "Affe", "Elefant", "Loewe", "Sonstiges"); switch(auswahl) case 1 disp "Affe quietscht" case 2 disp "Elefant trompetet" case 3 disp "Loewe bruellt" otherwise disp "Sonstiges" end Ausgabe: [[Bild:octave_menu1.jpg]] Es werde beispielsweise die Nummer 2 gewählt. Ausgabe: Elefant trompetet === Dialogliste === clear; close all; clc; opt = {"Eins", "Zwei", "Drei"}; [sel, ok] = listdlg ("ListString", opt, "SelectionMode", "Multiple"); if (ok == 1) for i = 1 : numel(sel) disp(opt{sel(i)}); end else disp("Cancel"); end [[Bild:octave_dialog1.jpg]] Es werden beispielsweise alle Optionen ausgewählt. Ausgabe: Eins Zwei Drei === Fortschrittsbalken === h = waitbar ([0.5]) [[Bild:octave_fortschritt1.jpg]] === Datei- und Verzeichnisdialoge === Dateidialog: [fname, fpath, fltidx] = uigetfile () [[Bild:octave_dateidialog2.jpg]] Ähnlich sind die Befehle "uiputfile" und "uigetdir". Dazu sei auf die Octave-Hilfe verwiesen. == Eigene Dialoge kreieren == Dieses Thema sei hier nicht näher vertieft. Wer mehr dazu wissen will, sei auf die Octave-Dokumentation verwiesen. Insbesondere siehe auch * dialog * uicontrol * uipanel * uibuttongroup * uitable * uimenu * uitoolbar = Fehlerhandling mit try/catch = Die try/catch-Anweisung entspricht weitgehend jener, die aus höheren Programmiersprachen wie C++ oder Java bekannt sind. Aufgebaut ist diese Anweisungsfolge so: try BODY catch CLEANUP end Beispiel: clear; close all; clc; try a = 10 / "zahl"; disp(a); disp("Weiter im try-Block"); catch disp("Catch: Kann nicht durch einen String dividieren"); end Ausgabe: Catch: Kann nicht durch einen String dividieren Sinnvoll ist die try/catch-Folge, wenn z.B. auch in einem Fehlerfall Dateien wieder geschlossen werden sollen. = Ein- und Ausgabe = == Formatierte Ausgabe am Bildschirm, formatiertes Lesen von der Tastatur == Folgendes Beispiel ist der Octave-Hilfe (von Octave 3.0.3) entnommen: pct = 37; filename = "foo.txt"; printf ("Processed %d%% of `%s'.\nPlease be patient.\n", pct, filename); Ausgabe: Processed 37% of `foo.txt'. Please be patient. "printf" gibt einen formatierten String am Bildschirm (genauer in den Stream stdout) aus. Wie man sieht, orientiert sich das Format an der Programmiersprache C. Für das formatierte Lesen vom Stream stdin (normalerweise also von der Tastatur) steht das Pendant "scanf" bereit. == Von einem String lesen bzw. in einen String schreiben == Bezüglich der Funktionen * sprintf und * sscanf sei auf die Octave-Hilfefunktion verwiesen. == Lesen und Schreiben von einer Datei == === Datei schreiben === % Datei c:\tmp\datei.test zum Schreiben öffnen datei = fopen ("c:/tmp/datei.test", "w"); % Etwas in die Datei schreiben fprintf(datei, "Hallo, Welt!"); % Datei schließen fclose(datei); === Datei lesen === % Datei c:\tmp\datei.test zum Lesen öffnen datei = fopen ("c:/tmp/datei.test", "r"); % Etwas aus der Datei lesen [string] = fscanf(datei, "%s"); disp(string); % Datei schließen fclose(datei); Ausgabe: Hallo,Welt! === Dateiende prüfen === Mittels des Befehls feof(FID); kann das Dateiende geprüft werden. Wenn die EOF-Bedingung zutrifft, dann wird 1 zurückgegeben, wenn nicht dann 0. Ein Beispiel folgt später als Lösung einer Aufgabe. === warning und error === Eine Warnung kann man am stderr-Stream ausgeben. Die warning-Funktion entspricht ansonsten der printf-Funktion. Nach Ausgabe der Warnung wird das Programm normal fortgesetzt. m = [1 2 3 6]; if(det(m) == 0) warning("Matrix ist singulaer"); end disp("Weiter geht's"); Ausgabe: warning: Matrix ist singulaer warning: called from test1 at line 5 column 3 Weiter geht's Schärfer ist der error-Befehl. Die Fehlermeldung wird am stderr-Stream ausgegeben. Vom Format her entspricht diese Funktion dem printf-Befehl. Nach Ausgabe der Fehlermeldung wird das Programm beendet. m = [1 2 3 6]; if(det(m) == 0) error("Matrix ist singulaer"); end disp("Weiter geht's"); Ausgabe: error: Matrix ist singulaer error: called from test1 at line 5 column 3 == Aufgaben == * Schreiben Sie ein Programm, das die Zahlen 1 bis 10 zeilenweise in eine Datei ausgibt. * Lesen Sie diese Zeilen wieder von der Datei ein und geben Sie sie am Bildschirm aus. * Gegeben sei eine Datei. Lesen Sie die Daten aus dieser Datei ein und rechnen Sie per Octave-Programm den Gesamtpreis für alle Tiere aus. Die Anzahl der Zeilen und der genaue Dateinhalt sei Ihnen vorab nicht bekannt. Bekannt ist nur das Datenformat wie folgt: Nr. Name Einzelpreis Stueck 1 Affe 15000.50 2 2 Loewe 11000.90 1 3 Nashorn 45000.10 1 4 Elefant 51245.90 3 5 Tiger 9000.70 2 6 Maus 34.90 12 Eine einfache Lösung ohne Schnickschnack (Fehlerüberprüfungen etc.) für dieses Beispiel könnte wie folgt aussehen: clear; close all; clc; datei = fopen ("c:/tmp/daten1.txt", "r"); gesamtpreis = 0; % Kopfzeile einlesen [nr, name, preis, stk] = fscanf(datei, "%s %s %s %s", "C"); while(feof(datei) == 0) % Datensätze einlesen [nr, name, preis, stk] = fscanf(datei, "%d %s %f %d", "C"); gesamtpreis += preis*stk; end fclose(datei); disp("Gesamtpreis = "); format long; disp(gesamtpreis); Ausgabe: Gesamtpreis = 258159.900000000 = Datencontainer = == Datenstrukturen == Pseudocode: STRUKTUR s ZAHL a VEKTOR b STRING c END Octave-Code: s.a = 45.9; s.b = [1 2 3 4 5]; s.c = "Hallo!"; s Ausgabe: s = scalar structure containing the fields: a = 45.90000000000000 b = 1 2 3 4 5 c = Hallo! Um ein paar weitere Möglichkeiten zum Handling mit Datenstrukturen aufzuzeigen, sei folgender Code aufgeführt. Datei addsub.m function res = addsub(a, b) res.x = a + b; res.y = a - b; end Datei test1.m clear; clc; addsub(10, 50) r = addsub(30, 70) r.x r.y ++r.x Ausgabe: ans = scalar structure containing the fields: x = 60 y = -40 r = scalar structure containing the fields: x = 100 y = -40 ans = 100 ans = -40 ans = 101 Die Funktion "addsub" liefert die Struktur res mit zwei Zahlenwerten. Die Elemente der Datenstruktur können auch außerhalb der Funktion angesprochen werden. Auch gerechnet werden kann mit diesen Elementen. == Cell Arrays == Manchmal kann es sinnvoll sein mehrere Variablen verschiedenen Typs und Größe in einer Variablen zu speichern. Dies funktioniert ähnlich wie bei Vektoren. Es werden aber geschweifte Klammern verwendet. Eingabe: c = {"Hallo Welt!", [2 2], 44} c{1} c{1:2} Ausgabe: c = { [1,1] = Hallo Welt! [1,2] = 2 2 [1,3] = 44 } ans = Hallo Welt! ans = Hallo Welt! ans = 2 2 Elemente des Cell Arrays können auch wieder mit Variablen anderen Typs überschrieben werden. c = {"Hallo Welt!", [2 2], 44}; c{1} = 5; c Ausgabe: c = { [1,1] = 5 [1,2] = 2 2 [1,3] = 44 } = Objektorientierte Programmierung = Octave unterstützt auch objektorientierte Programmierung mit dem Schlüsselwort <code>classdef</code> (ab Version 4.0). Dieses Thema ist aber etwas für fortgeschrittene Anwender und wird hier nicht behandelt. Wen es trotzdem interessiert, der sei auf die [https://docs.octave.org/latest/Object-Oriented-Programming.html Octave-Dokumentation] verwiesen. = Octave GUI = Das GUI-Programm von Octave entspricht im Wesentlichen anderen Programmier-Benutzeroberflächen, wie z.B. Eclipse oder Code::Blocks. Nachfolgend ist ein Screenshot des Octave-GUI mit einigen Anmerkungen dargestellt. [[Bild:octave_gui2.jpg|600px]] Probieren Sie einfach die Möglichkeiten der zur Verfügung gestellten GUI aus. = Komplexere Aufgaben = * Berechnen Sie die Fläche, den Umfang, die Seitenlängen, den Inkreis und den Umkreis eines Dreiecks. Stellen Sie das Dreieck inklusive In- und Umkreis grafisch dar. Speichern Sie die Daten in einer Datei. Die drei Eckpunkte dieses Dreiecks sollen vom Benutzer beliebig vorgegeben werden. * Die Werte einer beliebig großen quadratischen Matrix seien in einer Datei gespeichert. Lesen Sie diese Datei ein und berechnen Sie daraus die Determinante der Matrix, die inverse Matrix, die Eigenvektoren und -werte, die Spur. Führen Sie die LR-Zerlegung durch. Geben Sie diese Werte am Bildschirm aus. = Ausblick = Dies war eine kurze Einführung in die Berechnungs- und Darstellungsmöglichkeiten mit Octave. Es sollten etliche relevante Themen behandelt, oder zumindest kurz angesprochen worden sein. Wem dieser Text nicht ausreichend ist, der sei auf die entsprechende weiterführende Literatur, die Octave-Hilfefunktion und die Octave-Dokumentation verwiesen. Octave kennt noch viel mehr Befehle, als hier dargestellt wurden. Aber auch Octave selbst ist erweiterbar. Man siehe z.B. Octave Packages (https://gnu-octave.github.io/packages/) oder man schreibt selbst Erweiterungen. {{Navigation_zurückhochvor_buch| zurücktext=Maxima| zurücklink=Ing Mathematik: Computeralgebrasysteme am Beispiel von Maxima| hochtext=Gesamtinhaltsverzeichnis| hochlink=Ing:_Mathematik_für_Ingenieure| vortext=Julia für Ingenieure| vorlink=Ing Mathematik: Julia}} gzaigcqj2hsga1o0uezgm9hzonjrbwv Gödel 0 117878 1090399 1090394 2026-09-05T18:34:48Z Santiago 19191 /* Kurt GÖDEL und der sog. ‚ontologische Gottesbeweis‘ */ Zusatz 1090399 wikitext text/x-wiki [[Kategorie: Buch]] {{Regal|ort=Philosophie}} {{Vorlage:StatusBuch|9}} ==<div class="center"><span style="color:#660066">'''Kurt GÖDEL und der sog. ‚ontologische Gottesbeweis‘'''</span></div>== <span style="font-family: Times;"><big><div class="center">לַמְנַצֵּ֗חַ לְדָ֫וִ֥ד אָ֘מַ֤ר נָבָ֣ל בְּ֭לִבּוֹ אֵ֣ין אֱלֹהִ֑ים הִֽשְׁחִ֗יתוּ הִֽתְעִ֥יבוּ עֲלִילָ֗ה אֵ֣ין עֹֽשֵׂה־טֽוֹב׃ (Psalm 14,1)</div></big></span> ---- ===<div class="center"><span style="color:#660066">Vorwort</span></div>=== Zur Orientierung ''':''' Die Diskussion um GOTT läuft schon über zweitausend Jahren. Vor etwa tausend Jahren hat sich ein gewisser ANSELM gesagt ''':''' <span style="color:#FF6000">»''Ich glaube an GOTT'' … <span style="color:#00B000">[ sonst wäre er sicher nicht Erzbischof von Canterbury geworden ]</span> … ''aber ich möchte auch wissen und verstehen, ob das stimmt und sinnvoll ist, was ich da glaube '''!''''' «</span> Dann hat er seine Überlegungen dazu aufgeschrieben, und das kann man in seinen Schriften auch heute noch lesen. Der sehr geschätzte deutsche Professor und Philosoph aus Königsberg, Immanuel KANT, hat das, was ANSELM da aufgeschrieben hat, gelesen, <span style="color:#00B000">(vermittelt durch CARTESIUS)</span>, und das dann den <span style="color:#FF6000">„ontologischen Gottesbeweis“</span> genannt, <span style="color:#00B000">(obwohl es in Wirklichkeit gar kein Gottesbeweis ist; genauer ''':''' es ist kein Beweis für die Existenz GOTTES)</span>, und dieser große KANT hat dann großartig bewiesen, das, was ANSELM da aufgeschrieben hat, sei falsch. Es sei <span style="color:#FF6000">„ja gar kein“</span> Gottesbeweis '''!''' <span style="color:#00B000">( Naja, was denn sonst '''?''' )</span> Wobei er den Fehler gemacht hat, dass er den, an sich, unvergleichbaren GOTT mit hundert Talern in seinem Vermögenszustande verglichen hat. <span style="color:#00B000">(Das ist aber eine andere Geschichte.)</span> Hundert Taler und GOTT haben ,an sich‘ nichts gemeinsam, außer, wenn KANT ,wirklich‘ hundert Taler hat, und GOTT auch ,wirklich‘ existiert, <span style="color:#00B000">(wie ANSELM und gläubige Menschen glauben)</span>, dann gibt es GOTT und die Taler eben ,wirklich‘. Aber damit ist man nicht schlauer geworden. Seit KANT läuft die ganze Diskussion um GOTT immer nur als Diskussion um den <span style="color:#00B000">(von KANT)</span> so genannten <span style="color:#FF6000">„ontologischen, <span style="color:#00B000">[ kosmologischen, teleologischen etc. ]</span> Gottesbeweis“</span> —, obwohl es niemals einen Beweis für die Existenz GOTTES geben kann und niemals geben wird. <span style="color:#00B000">(Das haben Wissenschaftler jeder Richtung und Philosophen aller Weltanschauungen uns immer wieder nachdrücklich versucht zu sagen, weil keiner dieser sog. Beweise für die Existenz eines GOTTES stringent ist.)</span> Beweisen kann man die Existenz von Naturgesetzen. Die sind unveränderlich und fix, immer und überall. Jeder vernünftige Mensch muss sie akzeptieren. Man kann darüber nicht diskutieren und sie dann mit Mehrheitenbeschlüsse verändern. Wenn GOTT ebenso bewiesen werden könnte, dann wäre jeder vernünftige Mensch gezwungen, die Existenz GOTTES wie ein Naturgesetz anzunehmen. Gott ist aber kein Naturgesetz. GOTT ist <span style="color:#FF6000">„Person“</span>, — für Christgläubige ''':''' <span style="color:#FF6000">„ein GOTT in drei Personen“</span>. Und GOTT ist <span style="color:#FF6000">„Geist“</span>. Das besagt, dass GOTT nicht mit materiellen Dingen aus unserer Welt verglichen werden darf; <span style="color:#00B000">(was sowohl THOMAS von Aquin als auch Immanuel KANT doch getan haben)</span>. Und ganz wesentlich ''':''' der Zugang zu GOTT läuft nicht über den Beweis, sondern immer nur über den Glauben. Wer an GOTT glauben will, dem antwortet GOTT auf seine Weise — nämlich <span style="color:#FF6000">„geistig“</span> bzw. <span style="color:#FF6000">„geistlich“</span>. Wer nicht an GOTT glauben will, dessen Entscheidung respektiert GOTT, und drängt sich nicht auf. Glaube ist immer eine freie Entscheidung des Menschen für GOTT. Niemand darf gezwungen werden. Wenn es einen Beweis für GOTT gäbe, wäre jeder vernünftige Mensch gezwungen, an GOTT zu glauben. Und das widerspricht ganz entschieden der Freiheit des Glaubens. Daher gibt es nie und nimmermehr einen Existenzbeweis für GOTT '''!!!''' ... Daher darf man das Kalkül des Logiker GÖDEL, <span style="color:#00B000">(und damit auch das Theorem ANSELMS)</span>, nicht als einen Existenzbeweis für GOTT lesen. Sowohl ANSELM als auch GÖDEL setzen die Existenz GOTTES notwendig als gegeben schon voraus. Das GÖDEL-System, und auch das Theorem ANSELMS, sind bloß die logische Bestätigung der Widerspruchsfreiheit der Glaubensüberzeugung eines Menschen, der sich schon entschieden hat, an GOTT zu glauben; und nicht der Grund für seine Entscheidung. Alle sogenannten ,Gottesbeweise‘, sind in Wirklichkeit nichts anderes, als nachträgliche Evaluierungen eines GOTT-Glaubens, bzw. ,Wege‘, <span style="color:#00B000">(bei THOMAS von Aquin)</span>, die aufzeigen, dass der GOTT-Glaube widerspruchsfrei, sinnvoll, und <span style="color:#FF6000">»''mit allen bekannten Tatsachen durchaus vereinbar ist''«</span>, wie GÖDEL sagt. GOTT hat es nicht nötig, ,bewiesen‘ <span style="color:#00B000">( ╞ )</span> zu werden. ===<div class="center"><span style="color:#660066">Einleitung</span></div>=== Eine Studie zum GÖDEL-Kalkül. Der Logiker Kurt GÖDEL <span style="color:#00B000">(1906-1978)</span> hat mit diesem Kalkül eine moderne Rekonstruktion des, <span style="color:#00B000">(von KANT)</span>, so genannten ‚ontologischen Gottesbeweises‘ nach ANSELM von Canterbury auf modal-logischer Basis vorgelegt. Damit hat er die <span style="color:#FF6000">„Rede von GOTT“</span> auf eine ‚vernünftige Basis‘ gestellt, d.h. sie soll für jeden Menschen nachvollziehbar sein, <span style="color:#FF6000">»''rein verstandesmäßig, (ohne sich auf den Glauben an irgendeine Religion zu stützen)''«</span>, wie er sagt. GÖDEL ,nimmt‘ als Logiker, angeregt durch den Philosophen und Mathematiker Gottfried Wilhelm LEIBNIZ, rein theoretisch, fürs Erste, einmal ‚an‘, <span style="color:#00B000">(als Prämisse, d.i. der Term :01: im 3. Beweisgang zum Theorem ANSELMS im Anhang)</span>, dass es GOTT gibt ''':''' d.i. ein sog. ,methodologischer GOTT-Glaube‘, und untersucht die logischen Konsequenzen. Dabei zeigt sich, beim genaueren Hinsehen, dass der ‚Nicht-GOTT-Glaube‘, der ‚dezidierte‘ Atheismus, <span style="color:#00B000">(im Beweisgang ,Widerlegung‘ im Anhang)</span>, überraschender Weise, zu einem Widerspruch führt, und damit logisch ,falsch‘ ist. Jedoch, GÖDEL kann und will mit seinem Kalkül keinen ,GOTT-Glauben‘ ,erzeugen‘, d.h. das GÖDEL-Kalkül ist kein <span style="color:#FF6000">„Existenz-Beweis"</span> für den GOTT der Bibel, sondern, es setzt die Existenz eines GOTTES, einfach als gegeben, schon voraus. GÖDEL beweist dann mit seinem System, dass der traditionelle abendländische ,GOTT-Glaube‘, <span style="color:#FF6000">»''die theologische Weltanschauung''«</span>, <span style="color:#00B000">(d.i. die Kalkül-Prämisse, und das, daraus ,regulär‘ (├ ) abgeleitete, Theorem ANSELMS)</span>, mit den Maßstäben der modernen Logik <span style="color:#FF6000">»''durchaus vereinbar''«</span> <span style="color:#00B000">(d.h. logisch ,richtig‘)</span> ist, im Gegensatz zum ,Nicht-GOTT-Glauben‘, der davon ausgeht, dass es keinen GOTT gibt. GÖDEL beweist mit seinem System ''':''' der traditionelle GOTT-Glaube ist, — mit mathematisch-logischer Evidenz —, widerspruchfrei und wahr. <span style="color:#00B000">(Der Beweis aus dem Widerspruch des Gegenteils ist ein ,indirekter Beweis‘ und kein ,Zirkelbeweis‘ '''!''' )</span> GÖDEL blieb bis zu seinem Tod ohne ein dezidiertes religiöses Bekenntnis. <span style="color:#00B000">(Das Leben ist nicht immer ,logisch‘.)</span> Entsprechend der <span style="color:#FF6000">»''theologischen Weltanschauung''«</span> ist GOTT der Größte, <span style="color:#FF6000">»''über dem nichts Größeres mehr gedacht werden kann''«</span>, <span style="color:#00B000">(ANSELM)</span>; bzw. <span style="color:#FF6000">»''GOTT ist ein Wesen von äußerster Größe und Vollkommenheit, das alle Grade derselben in sich schließt''«</span>, <span style="color:#00B000">(LEIBNIZ)</span>, und der für uns immer schon ,da‘ ist. Das ist die methodologische Prämisse des GÖDEL-Kalküls. Davon ausgehend, zeigen seine Axiome und Definitionen, dass es zu einem Widerspruch führt, falls man ,annimmt‘, es sei nicht möglich, dass es <span style="color:#FF6000">„GOTT“</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span> gibt. Aus dem Widerspruch des Gegenteils wird von GÖDEL, mit dem <span style="color:#4C58FF">[ Modus tollendo tollens ] :: [ A → B, ¬B ├ ¬A ]</span>, dann ,bewiesen‘ <span style="color:#00B000">( ╞ )</span> ''':''' es ist doch möglich, dass es <span style="color:#FF6000">„GOTT“</span> wirklich gibt. Somit ist der Glaube an <span style="color:#FF6000">„GOTT“</span>, — weil widerspruchsfrei —, mit den Worten GÖDELS ''':''' <span style="color:#FF6000">»''mit allen bekannten Tatsachen durchaus vereinbar''«</span>. Immanuel KANT <span style="color:#00B000">(1724-1804)</span> scheint diesen Fall vorausgesehen zu haben, dass versucht werden könnte, die ,Möglichkeit‘ GOTTES aus einem Widerspruch zu ,beweisen‘ ''':''' ::<span style="color:#FF6000">»</span> <span style="color:#00B000">[ Angenommen, es gibt ]</span> ''doch einen und zwar nur diesen '''Einen''' Begriff'' <span style="color:#00B000">[ ,GOTT‘, so dass ]</span> ''das Nichtsein oder das Aufheben seines Gegenstandes'' <span style="color:#00B000">[ GOTT ]</span>, ''in ,sich selbst‘ widersprechend sei; und dieses ist der Begriff des allerrealsten Wesens. Es hat, sagt ihr, alle Realität'', <span style="color:#00B000">[ bzw. alle Vollkommenheit ]</span>, ''und ihr seid berechtigt, ein solches Wesen als ,möglich‘ anzunehmen'' ... <span style="color:#00B000">[ denn das GÖDEL-Kalkül ,beweist‘ ( ╞ ) in der ,Widerlegung‘ im Anhang, wie auch im 1. Beweisgang, aus einem Widerspruch, dass die Existenz GOTTES definitiv logisch ,möglich‘ ist. ]</span> … ''obgleich der sich nicht widersprechende'', <span style="color:#00B000">[ ,mögliche‘ ]</span>, ''Begriff'', <span style="color:#00B000">[ ,GOTT‘ ]</span>, ''noch lange nicht die'' <span style="color:#00B000">[ reale ]</span> ''Möglichkeit des Gegenstandes'', <span style="color:#00B000">[ GOTT ]</span>, ''beweiset. … Das ist eine Warnung, von der Möglichkeit der Begriffe (logische)'', <span style="color:#4C58FF">— '''◇''' —</span>, ''nicht sofort auf die Möglichkeit der Dinge (reale)'', <span style="color:#4C58FF">— '''□''' —</span>, ''zu schließen''<ref>vgl. ‚''<span style="font-family: Times;"><big>Kritik der reinen Vernunft</big></span>''‘, Seite 399; https://www.korpora.org/kant/aa03/399.html</ref>. <span style="color:#00B000">[ Trotz dieser Warnung, wird dieser Schluss dennoch im Theorem ANSELMS vollzogen, bzw. mit GÖDEL im 3. Beweisgang ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx→□∃xGx'''‘ —</span> '''!''' ]</span>. <span style="color:#FF6000">«</span> Warum das <span style="color:#FF6000">»''mit allen bekannten Tatsachen durchaus vereinbar''«</span> ist, und inwieweit KANT sich irrt, wird in dieser Studie gezeigt. ===<div class="center"><span style="color:#660066">Der Schlüsselbegriff im Kalkül</span></div>=== Der ‚Schlüsselbegriff‘ in diesem Kalkül ist <span style="color:#FF6000">„positive Eigenschaft“</span>, bzw. <span style="color:#FF6000">„Perfektion“, „Vollkommenheit“</span> ''':''' <span style="color:#4C58FF">— ‚'''P'''‘ —</span>. Für diesen wichtigen Begriff gibt es aber im Kalkül selbst keine explizite Definition, sondern er wird nur durch seine Verwendung innerhalb des Kalküls indirekt ‚definiert‘. <span style="color:#00B000">(Das heißt ''':''' <span style="color:#4C58FF"> — ‚'''P'''‘ — </span> bezeichnet ein System von ,Eigenschaften‘, die ,positiv‘, bzw. ,vollkommen‘ | ,perfekt‘ | genannt werden, von denen im Kalkül wohl beweisbar ist, dass sie sich gegenseitig ,nicht widersprechen‘, weil sie im System als solche ,gleichwertig‘, bzw. gleich ,wahr‘ sind, jedoch ohne sie erschöpfend aufzählen zu können, oder auch nur sagen zu können, was sie alle im einzelnen bedeuten, außer, dass sie kompatibel sind.)</span> Mit der Wahl dieses Schlüsselbegriffes hat GÖDEL eine wesentliche Vorentscheidung für die Ergebnisse des Kalküls getroffen '''!''' In seinen Notizen zum ‚ontologischen Beweis‘ vom 10. Februar 1970 gibt GÖDEL, — für die nachträgliche Interpretation dieses Begriffes <span style="color:#00B000">(und auch für das Kalkül selbst)</span> —, die richtungsweisende Erklärung ''':''' ::<span style="color:#FF6000">»''Positiv bedeutet positiv im moralisch ästhetischen Sinne...''«</span> ::Und er fügt in Klammer hinzu ''':''' ::<span style="color:#FF6000">»...''(unabhängig von der zufälligen Struktur der Welt). Nur dann sind die Axiome wahr''.«</span><ref>GÖDEL, Kurt, ''<span style="font-family: Times;"><big>‚Ontological proof‘</big></span>'' in ''<span style="font-family: Times;"><big>‚Collected Works‘</big></span>'', vol. III, ed. S.FEFERMAN et al., Oxford (U.P.), 1995; 403–404.</ref> GÖDEL-Axiom-1 ''':''' <span style="color:#4C58FF">— ‚('''PX <small><math>{ \color{Blue} \dot\lor}</math></small> P¬X''')‘ ↔<span style="color:#00B000"> ‚('''¬PX ↔ P¬X''')‘</span> — </span> ''':''' <span style="color:#FF6000"> »''Entweder die Eigenschaft'' <span style="color:#4C58FF">‚'''X'''‘</span> ''oder ihre Negation'' <span style="color:#4C58FF">‚'''¬X'''‘</span> ''ist positiv''«</span>. Hier ist der Hauptkritikpunkt, dass es Eigenschaften gibt, die ,an sich‘ weder positiv noch negativ sind. Beispiele wären ''':''' ‚rothaarig‘ oder ‚schwerwiegend‘; solche Eigenschaften können aber ,für mich‘ entweder positiv oder negativ sein, abhängig von meiner Betrachtungsweise und subjektiven Vorlieben. Diese Eigenschaften, wie ‚rothaarig‘ an sich, oder meine positiv-negativen ‚Betrachtungsweisen‘, sind jedoch der <span style="color:#FF6000">»''zufälligen Struktur der Welt''«</span> entnommen und treffen nicht den <span style="color:#FF6000">»''moralisch ästhetischen Sinn''«</span> von <span style="color:#FF6000">»''positiv''«</span> bei GÖDEL. Er orientierte sich an LEIBNIZ, welcher im Bezug zum ‚ontologischen Beweis‘ definiert ''':''' ::<span style="color:#FF6000">»''Vollkommenheit'' <span style="color:#00B000">[ GOTTES ]</span> ''nenne ich jede einfache Eigenschaft, die sowohl positiv als auch absolut ist, oder dasjenige, was sie ausdrückt, ohne jede Begrenzung ausdrückt''.«</span><ref>Zitiert nach Thomas GAWLICK, in ''<span style="font-family: Times;"><big>‚Was sind und was sollen mathematische Gottesbeweise ?‘</big></span>'', Predigt vom 8.1.2012 in der Kreuzkirche zu Hannover. https://web.archive.org/web/20130524164359/http://www.idmp.uni-hannover.de/fileadmin/institut/IDMP-Studium-Mathematik/downloads/Gawlick/Predigt_Gawlick_Gottesbeweise.pdf</ref> Die Seins-Eigentümlichkeiten <span style="color:#00B000">(Daseinsmodi, Perfektionen)</span> wie ‚wahr‘, ‚gut‘, ‚edel‘ usw. entsprechen dem <span style="color:#FF6000">»''moralisch ästhetischen Sinn''«</span> von <span style="color:#FF6000">»''positiv''«</span> bei GÖDEL. Das sind Beispiele für ‚absolut‘ positive Begriffe aus der Lehre der Seinsanalogie ''':''' <span style="font-family: Times;"><big>‚verissimum‘, ‚optimum‘, ‚nobilissimum‘</big></span>, usw., die, an sich, <span style="color:#FF6000">»''ohne jede Begrenzung gelten''«</span>; zu finden in der <span style="font-family: Times;"><big>‚Via quarta‘</big></span>, bei THOMAS von Aquin, über die <span style="color:#FF6000">„analoge"</span> Abstufung im ‚Sein‘ der Dinge. Diese <span style="color:#FF6000">„analoge"</span> ‚Abstufung‘ ist dann die faktische Begrenztheit <span style="color:#00B000">(d.h. Unvollkommenheit)</span> im <span style="color:#FF6000">»''zufälligen''«</span> ‚Sein‘ der Dinge —. Die <span style="color:#FF6000">„positiven Eigenschaften“</span> GÖDELS ''':''' <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, wie Wahrheit, Einheit, Gutheit, <span style="color:#00B000">(von ,Güte‘)</span>, Schönheit, Adel, <span style="color:#00B000">(von ,edel‘)</span>, Gleichheit, Andersheit, Wirklichkeit, ,Sein‘ im Sinne von Etwas-sein, etc. werden <span style="color:#FF6000">„Perfektionen“</span>, oder auch <span style="color:#FF6000">„Transzendentalia“</span> genannt, <span style="color:#00B000">(von lateinisch ''':''' <span style="font-family: Times;"><big>transcendere</big></span>, <span style="color:#FF6000">„übersteigen“</span>)</span>. In der mittelalterlichen Scholastik sind Transzendentalien die Grundbegriffe, die allem Seienden als <span style="color:#FF6000">„Modus“</span>, <span style="color:#00B000">(d.h. ,Eigentümlichkeit‘, als allgemeine Seinsweisen)</span>, zukommen. Wegen ihrer Allgemeinheit ,übersteigen‘ sie die besonderen Seinsweisen, welche ARISTOTELES die ,Kategorien‘ nannte. Ontologisch betrachtet, werden die Transzendentalien als das allem Seienden Gemeinsame aufgefasst, da sie von allem ausgesagt werden können. Von der KI werden sie, nicht unpassend, als <span style="color:#FF6000">„ultimative Eigenschaften des Seins“</span> bezeichnet, die <span style="color:#FF6000">„jenseits der materiellen Welt existieren“</span>, <span style="color:#00B000">(da sie ,ultimativ‘ nur von GOTT, als den unbegrenzt Vollkommenen, ausgesagt werden können, die jedoch, auch von allen übrigen Seienden, wegen deren seinsmäßigen Unvollkommenheit und Begrenztheit, abgestuft, d.h. <span style="color:#FF6000">„analog"</span>, ausgesagt werden)</span>. Diese Transzendentalien sind ,inakzident‘, das heißt, sie entstehen nicht aus anderen Begriffen, sondern sind erste, unteilbare Bestimmungen <span style="color:#4C58FF">— ‚'''X'''‘ —</span> des Denkens und des Seins, die allen Seienden ''':''' <span style="color:#4C58FF">— ‚'''□∀xXx'''‘ —</span>, unabhängig von ihren speziellen Eigenschaften, als ,relative‘ Vollkommenheiten, <span style="color:#00B000">(bzw. Unvollkommenheiten)</span>, mit ,modaler‘ Notwendigkeit, <span style="color:#4C58FF">— ‚□‘ —</span>, <span style="color:#FF6000">„analogisch"</span> zukommen, d.h. sie sind in allen Seienden, seinsmäßig abgestuft und abgegrenzt, ,relativ‘ zum unbegrenzt Unendlichen ihrer selbst, und <span style="color:#FF6000">»''dasjenige, was sie ausdrücken, drücken sie ohne jede Begrenzung aus''«</span>, <span style="color:#00B000">(LEIBNIZ)</span>; und damit stehen sie ontologisch in einer <span style="color:#FF6000">„analogen"</span> ,Beziehung‘ zu GOTT, dem absolut Vollkommenen und unbegrenzt Unendlichen. In der Erkenntnisordnung wirken sie als die ersten Begriffe des menschlichen Verstehens, die eine Basis für alle weiteren wissenschaftlichen Erkenntnisse bilden. In der Seinsordnung sind die Transzendentalien ontologisch eins, gleichwertig, <span style="color:#00B000">(,mathematisch äquivalent‘)</span>, und daher konvertierbar, d.h. austauschbar, <span style="color:#00B000">(vgl. z. B. den scholastischen ,Merksatz‘ ''':''' <span style="font-family: Times;"><big>,ens et verum convertuntur‘</big></span>)</span>. Damit sind sie auch von einander abhängig, was GÖDEL sowohl im Axiom-2 ''':''' <span style="color:#4C58FF">— ‚'''PX ∧ □∀x(Xx→Yx)→PY'''‘ —</span>, für positive Eigenschaften, als auch in der Definition-2 ''':''' <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>'''x ↔ Xx ∧ ∀Y(Yx→ □∀y(Xy→Yy))'''‘ —</span>, für die Wesenseigenschaften, syntaktisch formalisiert hat mit dem Term-Element ''':''' <span style="color:#4C58FF">— ‚'''□∀x(Xx→Yx)'''‘ —</span>, weil sie sich gegenseitig, — mit ,modaler‘ Notwendigkeit —, gleichwertig ,implizieren‘, d.h. einschließen, <span style="color:#00B000">(im Axiom-2 mit der Individuum-Variable <span style="color:#4C58FF"> — ‚'''x'''‘ —</span>, und in der Definition-2 mit der Individuum-Variable <span style="color:#4C58FF"> — ‚'''y'''‘ — </span>)</span>. Man kann die Transzendentalia, <span style="color:#00B000">(wie GÖDEL)</span>, auch ,Wesenseigenschaften‘ ''':''' <span style="color:#4C58FF"> — ‚'''X'''<sub>ess</sub>‘ —</span>, nennen, weil sie allem Seienden <span style="color:#FF6000">„wesentlich analog"</span> zukommen. Weil Transzendentalien miteinander austauschbar sind, sind sie auch widerspruchsfrei, was GÖDEL mit Axiom-1 syntaktisch darstellt. Die Gültigkeit und Wahrheit, d.h. die mathematisch-logische Evidenz von Axiom-1 und Axiom-2, beruht auf der ontologischen Allgemeinheit und Gültigkeit der Transzendentalia, die GÖDEL mit Definition-2, in sein Kalkül explizit eingeführt und als Wesenseigenschaften ,bestimmt‘ hat. <span style="color:#00B000">(Definitionen werden formal-syntaktisch durch das Äquivalenzzeichen <span style="color:#4C58FF">,'''↔'''‘</span> angezeigt, gelesen als <span style="color:#FF6000">„...ist genau dann ... wenn...“</span>)</span> Die GÖDEL-Axiome und -Definitionen werden jedoch sofort <span style="color:#FF6000">„modal falsch"</span>, wenn ihre Eigenschafts-Variablen, <span style="color:#4C58FF">— ‚'''X'''‘ —</span> und <span style="color:#4C58FF">— ‚'''Y'''‘ —</span>, mit ,Nicht-Transzendentalia‘, wie z. B. ,rot‘ oder ,schwer‘, belegt werden. <span style="color:#00B000">(Dieser ,Sachverhalt‘ wird von Kritikern des GÖDEL-Systems, — zu vorschnell —, verwendet, um ihre Behauptungen zu ,belegen‘, das GÖDEL-Kalkül und seine Konsequenzen seien ,falsch‘.)</span> Zum Überblick ''':''' <span style="color:#FF6000">„Transzendentalia“</span> sind universale, alles Seiende charakterisierende Begriffe, die über kategoriale Einteilungen hinausgehen, und sowohl in der klassischen Scholastik, als auch in der modernen Philosophie, <span style="color:#00B000">(KANT, Uwe MEIXNER<ref>vgl. die ,transzendentalen‘ Bedingungen möglicher Erkenntnisse bei KANT; und auch in der ,Axiomatischen Ontologie‘ bei Uwe MEIXNER</ref>)</span>, als Grundlage der Metaphysik und Erkenntnistheorie dienen. Sie sind die <span style="color:#FF6000">„ersten Begriffe des Seins“</span>, die jedem Ding als ,relative‘ Vollkommenheiten, <span style="color:#00B000">(Perfektionen)</span>, inhärent sind, <span style="color:#FF6000">„analogisch"</span> abgestuft, auf einen ,ultimativ‘-unbegrenzten Bezugspunkt ausgerichtet, und die sich im Denken, <span style="color:#00B000">(für uns als wahr)</span>, und in der moralischen Wertung, <span style="color:#00B000">(für uns als gut und edel)</span>, manifestieren, relativ zum ,ultimativ‘-unbegrenzten Bezugspunkt ihrer selbst. Die faktische, zusätzliche Unvollkommenheit, die sich generell in der notwendigen, und unausweichlichen Vergänglichkeit aller Dinge zeigt, ist einem ontologischen Defekt ,geschuldet‘, der stark zeitabhängig ist, d.h. der einen Anfang und ein Ende hat. Das GÖDEL-Axiom-5 ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span> ''':''' <span style="color:#FF6000">»''Notwendige Existenz ist eine positive Eigenschaft''«</span>, ist immer falsch, wenn es auf etwas aus der <span style="color:#FF6000">»''zufälligen Struktur der Welt''«</span> angewendet wird, wie z. B. auf einen <span style="color:#FF6000">„Tsunami“</span>, dessen ‚Existenz‘ für uns nicht ‚positiv‘ ist. KANT hat schon festgestellt ''':''' <span style="color:#FF6000">„Existenz ist keine Eigenschaft“</span>. Das gilt für alles, was <span style="color:#FF6000">„existiert“</span>. Das Axiom-5 hat nur dann seine Gültigkeit, ist nur dann ,wahr‘, wenn <span style="color:#FF6000">„Dasein“</span> <span style="color:#00B000">(Existenz)</span> und <span style="color:#FF6000">„Wesenseigenschaften“</span> <span style="color:#00B000">(Essenz)</span> in eins zusammenfallen. Bei allen Dingen, die ‚da‘ sind, ist ihr ‚Da-Sein‘ ontologisch immer verschieden zu dem ‚was‘ sie sind ''':''' zu ihrem ,Was-Sein‘. In der philosophischen Tradition, seit ARISTOTELES, wird die ontologische Identität, d.i. die Koinzidenz, der innere Zusammenhang von ‚Sein‘ und ‚Wesen‘ allein nur dem <span style="color:#FF6000">„selbst ‚unbewegten‘ Erstbewegenden“</span> zugeschrieben, dem <span style="color:#FF6000">„<span style="font-family: Times;"><big>πρῶτον κινοῦν ἀκίνητον</big></span>“</span><span style="color:#00B000"> | ,prôton kinoûn akinêton‘</span>, von dem ARISTOTELES etwas später sagt ''':''' <span style="color:#FF6000">»''denn dies ist der Gott''«</span> und dann hinzufügt ''':''' <span style="color:#FF6000">»''so sagen wir ja''«</span>; d.h. das ist eine Interpretation aus dem Glaubenskontext des ARISTOTELES. Er war ein Gott-gläubiger Grieche. Wer an GOTT glaubt, kann das nachvollziehen. GÖDEL musste dieses Axiom-5 postulieren, sonst wäre sein Kalkül nicht aufgegangen, ohne dass er deswegen schon an GOTT glauben müsste. Er hat für sein Kalkül das ontologische Theorem von der Identität von ‚Sein‘ und ‚Wesen‘ im ‚unbewegten Erstbeweger‘ des ARISTOTELES benutzt, ohne diese Herkunft explizit referenziert zu haben. <span style="color:#00B000">(Gilt auch für Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span> ''':''' <span style="color:#FF6000">»''Göttlichkeit, das GOTT-Sein, das ‚Dasein‘ GOTTES, ist eine positive Wesenseigenschaft, eine Perfektion; d.h. ist das ‚Wesen‘ GOTTES ''':''' GOTT ist perfekt''«</span>)</span>. Die ontologische Identität von Sein und Wesen, Existenz und Essenz, wie auch die Koinzidenz von Möglichkeit und Wirklichkeit, von Ursache und Wirkung, sowie auch die ontologische Einheit von <span style="color:#00B000">(Erkenntnis-)</span>Subjekt und <span style="color:#00B000">(Erkenntnis-)</span>Objekt im <span style="color:#FF6000">»''Erkennen seiner Erkenntnis''<span style="color:#00B000">[-Tätigkeit ]</span>«<span style="color:#00B000"> | </span>„<span style="font-family: Times;"><big>νοήσεως νόησις</big></span>“</span><span style="color:#00B000"> | ,noêseôs noêsis‘ <small>(<span style="font-family: Times;"><big>,''Metaphysik''‘</big></span> XII 9, 1074b34)</small></span>, und der innere Zusammenhang der <span style="color:#FF6000">„ultimativen Transzendentalia“</span>, gilt nur in der <span style="color:#FF6000">„unverursachten Letztursache"</span>, auf die ARISTOTELES bei seiner Prinzipienforschung gestoßen ist. Es gibt verschiedene Versuche, die GÖDEL-Axiome durch sog. ,Modelle‘, relativ zu einfacheren ,Welten‘, zu verifizieren, um damit ihre relative Konsistenz nachzuweisen. Für GÖDEL aber <span style="color:#FF6000">»''sind die Axiome nur dann'' <span style="color:#00B000">[ in unserer ,realen‘ Welt ]</span> ''wahr'' <span style="color:#00B000">[ und annehmbar ]</span>«</span>, wenn sie <span style="color:#FF6000">»''unabhängig von der zufälligen Struktur der Welt'' <span style="color:#00B000">[ d.h. jeder auch nur ,möglichen‘ Welt ]</span> ''sind''«</span>. Diese Bedingung verweist jede Verifikation und jede Interpretation der Axiome auf das ,Nicht-Zufällige‘, das ,Notwendige‘, ,Absolute‘, in dem die Axiome und Definitionen des GÖDEL-Kalküls erst dadurch ihren Sinn und ihre Bedeutung bekommen, wenn sie vom ,Absoluten‘ und ,Unendlichen‘ her erklärt und verstanden werden. Damit insistiert GÖDEL auf eine genuin <span style="color:#4C58FF">,theologische‘</span> Interpretation seines Kalküls, mit der <span style="color:#4C58FF">„Theologie“</span> zum Begriff GOTT, dem unbegrenzt Unendlichen, als Verifikationskriterium. Das entspricht auch der ,methodologischen‘ Prämisse seines Kalküls. Die wichtigsten Axiome und Definitionen im GÖDEL-Kalkül sind jedoch bloße ,Annahmen‘, deren Evidenz, sowohl die ,mathematische‘ als auch die <span style="color:#4C58FF">,theologische‘</span>, erst evaluiert, d.h. ,bewiesen‘ <span style="color:#00B000">( ╞ )</span> werden muss. Das bedeutet ''':''' die logische Verifikation der Axiome und Definitionen von GOTT und seinen Vollkommenheiten kann nur Kalkül-intern durch den Aufweis ihrer Widerspruchsfreiheit erfolgen, d.i. <span style="color:#FF6000">»''unabhängig von der zufälligen Struktur der Welt''«</span>. Logisch evaluierte und verifizierte Axiome und Definitionen sind die ,modal‘ notwendigen, d.h. die ,transzendentalen‘ Voraussetzungen für die Ergebnisse eines Kalküls, damit seine Theoreme und Korollare in unserer ,realen‘ Welt als logisch ,wahr‘ und damit für uns auch als ,annehmbar‘ gelten können, während die Prämissen eines Kalküls, <span style="color:#00B000">(die Argument Einführung, <span style="color:#4C58FF">— '''AE:''' —</span> )</span>, nicht notwendige, und somit ,modal‘ frei gewählte ,Annahmen‘ sind. Jedoch aus diesen ,modal‘ frei gewählten, ,möglichen‘ <span style="color:#00B000">( <span style="color:#4C58FF">'''◇'''</span> )</span> Prämissen folgen mit Hilfe der ,bewiesenen‘ <span style="color:#00B000">( ╞ )</span> Axiome und Definitionen die Ergebnisse mit ,modaler‘ Notwendigkeit <span style="color:#00B000">( <span style="color:#4C58FF">'''□'''</span> )</span>. Die Logik des GÖDEL-Systems ist eine ,Prädikatenlogik‘ zweiter Stufe, in der die Quantoren nicht nur Individuum-Variable, sondern auch Eigenschafts-Variable, <span style="color:#00B000">(als noch ,unbestimmte‘ Prädikate im Allgemeinen)</span>, binden können. Die formale Struktur des GÖDEL-Kalküls besteht aus fünf Axiomen und drei Definitionen, mit deren Hilfe in drei Beweisgängen drei Theoreme und mehrere Korollare aus seiner ,methodologischen‘ Prämisse ,regulär‘ <span style="color:#00B000">(├ )</span> abgeleitet werden können, wobei die beiden ersten Beweisgänge, mit ihren Ergebnissen, den dritten vorbereiten, in dem es dann um das Theorem ANSELMS geht. Die Prämisse des GÖDEL-Kalküls in allen Beweisgängen ist der traditionelle ,GOTT-Glaube‘, in der Formulierung speziell nach LEIBNIZ. Ein Axiom, eine Definition, zwei Theoreme und alle Korollare im GÖDEL-Kalkül sind Aussagen über <span style="color:#FF6000">„GOTT“</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>. Alle fünf Axiome, eine Definition und ein Theorem, <span style="color:#00B000">(und das Korollar aus Axiom-4)</span>, sind auch Aussagen über die Eigenschaft <span style="color:#FF6000">„Vollkommenheit“, „Perfektion“</span>, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, die in der <span style="color:#FF6000">»''theologischen Weltanschauung''«</span> als die Wesenseigenschaft GOTTES gilt ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, <span style="color:#FF6000">»''GOTT ist vollkommen''«</span> bzw. <span style="color:#FF6000">»''GOTT ist das Vollkommenste der Wesen''«</span>, <span style="color:#00B000">(DESCARTES)</span>. Zwei Definitionen sind Aussagen über die allgemeinen Wesenseigenschaften aller Seienden, <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>‘ —</span>, die Transzendentalien, die, als notwendige Existenz, <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>‘ —</span>, auch GOTT zugeordnet werden, mit der Besonderheit bei GOTT, dass sowohl alle Eigenschaften, als auch alle anderen Zuordnungen, wie Sein und Wesen, wie Ursache und Wirkung, usw., im Unendlichen, GOTT, <span style="color:#FF6000">„koinzident“</span> sind, d.h. in GOTT paarweise perspektivisch in ,eins‘ zusammenfallen, und die auch, als Transzendentalia, konvertierbar, d.h. austauschbar sind. Diese Sachverhalte machen deutlich, dass eine spezifische ,Verifikation‘ und sachgerechte ,Evaluierung‘ der GÖDEL-Axiomatik nur genuin <span style="color:#4C58FF">,theologisch‘</span> erfolgen kann. Die Evaluierung der <span style="color:#FF6000">»''mathematischen Evidenz''«</span> des GÖDEL-Systems, im Allgemeinen, muss jedoch entsprechend der Maßstäbe einer modalen Prädikatenlogik zweiter Stufe durchgeführt werden. Das GÖDEL-Kalkül unterscheidet <span style="color:#00B000">(in Definition-3 ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x ↔ ∀X(X'''<sub>ess</sub>'''x →□∃yXy)'''‘ —</span>)</span> formal-syntaktisch zwischen der Eigenschaft ,Existenz‘, <span style="color:#4C58FF"> — ‚'''E'''‘ —</span>, die nur GOTT zugeordnet werden kann, und dem Existenz-Operator, <span style="color:#4C58FF">— ‚'''∃'''‘ —</span>, der auch allem Übrigen, das nicht GOTT ist, zugeordnet wird. Es gibt hier auch den formal-syntaktischen Unterschied zwischen der, <span style="color:#00B000">(von mir notierten, jedoch von GÖDEL schon intendierten und angesprochenen)</span>, speziellen ,Notwendigkeit‘, <span style="color:#4C58FF"> — <sub>not</sub> —</span>, die nur der Existenz GOTTES zugeordnet ist, und der modalen ,Notwendigkeit‘, <span style="color:#4C58FF">— ‚'''□'''‘ —</span>, die auf Verschiedenes bezogen werden kann. Diese Unterschiede sind Hinweise, dass GÖDEL in seiner Kalkül-Logik und -Syntax, die Außerordentlichkeit und Eigenständigkeit GOTTES berücksichtigt, der, als Schöpfer der Welt, prinzipiell und absolut <span style="color:#FF6000">»''unabhängig von der zufälligen Struktur der Welt''«</span> ist, die erst durch GOTT auch das ist, was sie ist. ===<div class="center"><span style="color:#660066">Die Genese des Kalküls</span></div>=== Wie kommt GÖDEL zu seinem Kalkül '''?''' Sein Gewährsmann war Gottfried Wilhelm LEIBNIZ, <span style="color:#00B000">(1646-1716)</span>, den er sehr schätzte. Die rekonstruierbare Genese seines Kalküls findet man in LEIBNIZ ''':''' ''<span style="font-family: Times;"><big>‚Neue Abhandlungen über den menschlichen Verstand‘</big></span>'', <span style="color:#00B000">(1704)</span>‚ ''<span style="font-family: Times;"><big>Viertes Buch, Kapitel X ''':''' ‚Von unserer Erkenntnis des Daseins Gottes‘</big></span>'', Seite 475f. Hier der <span style="color:#00B000">[ kommentierte ]</span> Textausschnitt zum sog. ontologischen ‚Gottesbeweis‘''':''' ::<span style="color:#FF6000">»</span>''Folgendes etwa ist der Gang seines'' <span style="color:#00B000">[ d.h. ANSELMS, Erzbischof von Canterbury; 1033-1109, ]</span> ''Beweises ''':''' GOTT ist das Größte'', <span style="color:#00B000">[ ANSELM spricht vom biblischen GOTT des Glaubens, als ''':''' <span style="color:#FF6000">»''den, über dem ,Größeres‘'' | <span style="font-family: Times;"><big>‚maius‘</big></span> | ''nicht mehr gedacht werden kann''«</span> ]</span>, ''oder, wie DESCARTES es ausdrückt ''':''' das Vollkommenste der Wesen oder auch ein Wesen von äußerster Größe und Vollkommenheit'' ''':''' <span style="color:#00B000"> [ GÖDEL ''':''' </span><span style="color:#4C58FF">‚'''P'''‘</span> <span style="color:#00B000">:= ‚Perfektion‘, ‚positive Eigenschaft‘ ]</span>, ''das alle Grade derselben in sich schließt.''<span style="color:#00B000"> [ GÖDEL-Definition-1 ''':''' <span style="color:#4C58FF">— ‚'''Gx↔∀X(PX→Xx)'''‘ —</span> ''':''' <span style="color:#FF6000">»''Das Individuum'' <span style="color:#4C58FF">,'''x'''‘</span> ''ist genau dann GOTT'', <span style="color:#4C58FF">,'''G'''‘</span>, ''wenn'' <span style="color:#4C58FF">,'''x'''‘</span> ''alle Vollkommenheiten'', <span style="color:#4C58FF">,'''P'''‘</span>, ''in sich schließt''«</span>. Definition-1 bildet die traditionelle Vorstellung von GOTT ab. ]</span> ''Dies also ist der Begriff GOTTES.'' <span style="color:#00B000">[ Der Term <span style="color:#4C58FF">— ,'''G'''‘ —</span> steht hier für den biblischen ‚Begriff‘ <span style="color:#FF6000">„GOTT“</span> als ,Individuumname‘ '''!''' ]</span> ''Sehen wir nun, wie aus diesem Begriff das ‚Dasein’ folgt.''<span style="color:#00B000"> [ GÖDEL ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span> ''':''' <span style="color:#FF6000">»''GOTT ist notwendig aus sich ‚da‘''«</span> ''':''' Term :10:, 1. Hauptergebnis im 3. Beweisgang. ]</span> ''Es ist etwas <u>mehr</u>, ‚da‘ zu sein, als nicht ‚da‘ zu sein, oder auch das ‚Dasein‘ fügt der Größe oder der Vollkommenheit'' <span style="color:#00B000">[ GOTTES ]</span> ''einen Grad hinzu, und wie DESCARTES es ausspricht, das ‚Dasein‘ ist selbst eine Vollkommenheit.''<span style="color:#FF6000">«</span> <span style="color:#00B000">(Diesen Ausspruch DESCARTES übernimmt GÖDEL im Axiom-5 ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span> ''':''' <span style="color:#FF6000">»''notwendige Existenz''</span> [ alias ‚Dasein GOTTES’ ] <span style="color:#FF6000">''ist eine positive Eigenschaft''</span> [ alias Vollkommenheit ]<span style="color:#FF6000">«</span>. Dem widerspricht KANT ''':''' <span style="color:#FF6000">„Existenz ist keine Eigenschaft“</span>, bzw. <span style="color:#FF6000">»''Sein ist kein reales Prädikat''«</span>. Das Axiom-5 ist daher nur dann ‚wahr‘, wenn ‚Wirklichsein‘ | <span style="color:#FF6000">„<span style="font-family: Times;"><big>ἐνέργεια οὖσα</big></span>“</span> | ‚enérgeia oúsa‘ | d.h. ‚Dasein‘ und ‚Wesen‘ | <span style="color:#FF6000">„<span style="font-family: Times;"><big>οὐσία</big></span>“</span> | ‚ousía‘ | — genauer ''':''' ‚Wesenseigenschaften’ —, ontologisch ,eins‘ sind, d.h. wenn <span style="color:#FF6000">„Existieren“</span> immer schon die <span style="color:#FF6000">„Wesenseigenschaft“</span> GOTTES ist. Was nach ARISTOTELES nur im <span style="color:#FF6000">„unbewegten Erstbeweger“</span> der Fall ist; bzw. mit LEIBNIZ ''':''' <span style="color:#FF6000">»''was das Privilegium der Gottheit allein ist''«</span> '''!''' Aus der ,methodologischen‘ ,Annahme‘ im 2. Beweisgang GÖDELS ''':''' <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span> ''':''' <span style="color:#FF6000">»''das'' <span style="color:#4C58FF">‚'''x'''‘</span> ''steht für den GOTT der Christen''«</span>, und mit Hilfe von Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span> ''':''' <span style="color:#FF6000">»''Göttlichkeit ist eine positive Eigenschaft''«</span>, bzw. <span style="color:#FF6000">»''GOTT ist perfekt''«</span>, mit Axiom-4 ''':''' <span style="color:#4C58FF">— ‚'''PX → □PX'''‘ —</span> ''':''' <span style="color:#FF6000">»''Positive Eigenschaften sind notwendig aus sich, — von Natur aus —, positiv''«</span>, mit Definition-2 ''':''' <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>'''x ↔ Xx ∧ ∀Y(Yx→ □∀y(Xy→Yy))'''‘ —</span> ''':''' <span style="color:#FF6000">»''Zum Wesen gehören notwendig auch alle Konsequenzen aus einer Wesenseigenschaft''«</span>, und mit Axiom-1 und der Definition für GOTT, folgt nach einigen logischen Umformungen das GÖDEL-Theorem-2 ''':''' <span style="color:#4C58FF">— ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ —</span> ''':''' <span style="color:#FF6000">»''Das'' <span style="color:#4C58FF">‚'''x'''‘</span> ''ist genau dann der GOTT der Christen, wenn das Wesen dieses GOTTES sein eigenes Sein ist''«</span>. Dasein und Wesen sind im Unendlichen, GOTT <span style="color:#FF6000">„koinzident“</span> ,eins‘, übereinstimmend mit dem Theorem des ARISTOTELES. Mit diesem, im Kalkül <u>ohne</u> Axiom-5 ,regulär‘ (├ ) abgeleiteten Theorem, widerlegt er KANT für den individuellen Spezialfall <span style="color:#4C58FF">‚'''G'''‘</span> := <span style="color:#FF6000">„GOTT“</span>. Nachprüfbar im Anhang ''':''' im ‚ontologischen‘ Beweis für das Basis-Theorem-2. Somit ist Axiom-5 ,wahr‘, und KANT, der <span style="color:#FF6000">»''eine Abneigung gegen das Gebet hatte''«</span> und auch <span style="color:#FF6000">»''nie zu den sonntäglichen Kirchgängern zählte''«</span><ref>Uwe SCHULTZ ''':''' ‚''<span style="font-family: Times;"><big>Immanuel Kant</big></span>''‘, Rowohlt Monographie 50659, Seite 12</ref>, hat sich hier, im Bezug auf GOTT, geirrt. <span style="color:#4C58FF">„Theologie“</span>, als Wissenschaft von GOTT, war für KANT nie eine ernstzunehmende Option. Die <span style="color:#4C58FF">„Theologie“</span>, als Wissenschaft von GOTT, die natürlich immer auch verbunden sein muss mit der täglichen ,Erfahrung‘ einer Glaubens-Praxis, im Gebet und in den Gottesdienst-Feiern des <span style="color:#4C58FF">„Theologen“</span>, und die daraus entsteht, ist eine ziemlich ,ausgereifte‘ Disziplin. Es haben sich, durch Jahrhunderte hindurch, viele gläubige und auch gescheite Menschen, schon im Judentum, und dann im Christentum, und ebenfalls im Islam, darum bemüht.)</span> :: <span style="color:#FF6000">»</span>''Darum ist dieser Grad von Größe und Vollkommenheit oder auch diese Vollkommenheit, welche im ‚Dasein‘ besteht, in diesem höchsten, durchaus großen, ganz vollkommenen Wesen, denn sonst würde ihm ein Grad fehlen, was gegen seine Definition wäre. Und folglich ist dies höchste Wesen ‚da‘. Die Scholastiker, ohne selbst ihren'' <span style="font-family: Times;"><big>doctor angelicus</big></span> <span style="color:#00B000">[ := THOMAS von Aquin ]</span> ''auszunehmen, haben diesen Beweis verachtet'', <span style="color:#00B000">[ wie später auch Immanuel KANT ]</span>, ''und ihn als einen Paralogismus'' <span style="color:#00B000">[ := Fehlschluss ]</span> ''betrachtet, worin sie sehr unrecht gehabt haben; und DESCARTES, welcher die scholastische Philosophie im Kolleg der Jesuiten zu La Flèche lange genug studiert hatte, hat sehr recht gehabt, ihn wieder zu Ehren zu bringen. Es ist nicht ein Paralogismus, sondern ein unvollständiger Beweis'', <span style="color:#00B000">[ den GÖDEL vervollständigt hat ]</span>, ''der etwas voraussetzt, was man noch hätte beweisen sollen, um ihm mathematische Evidenz zu verleihen — nämlich, dass man dabei stillschweigend voraussetzt, diese Vorstellung des durchaus großen oder durchaus vollkommenen Wesens sei möglich und enthalte keinen Widerspruch'' <span style="color:#00B000">[ '''::''' <span style="color:#4C58FF">— '''◇''' —</span> '''::''' ,möglich‘, ,konsistent‘, ,denkbar‘; GÖDEL beweist im 1. Beweisgang aus Theorem-1 ''':''' <span style="color:#4C58FF">— ‚'''PX→◇∃xXx'''‘ —</span>, <span style="color:#FF6000">»''positive Eigenschaften'', <span style="color:#00B000">[ die allgemeinen Transzendentalien ]</span>, ''sind widerspruchsfrei''«</span>, mit Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, folgt Korollar-1 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, <span style="color:#FF6000">»''GOTT ist widerspruchsfrei möglich''«</span> ]</span>. ''Und es ist schon etwas, dass man durch diese Bemerkung beweist ''':''' gesetzt, dass GOTT'' <span style="color:#00B000">['' <span style="color:#FF6000">»widerspruchsfrei«</span> '']</span> '',möglich‘ ist, so ‚ist‘ er'' <span style="color:#00B000">[ ,notwendig‘ '''::''' <span style="color:#4C58FF">— '''□''' —</span> '''::''' für jede mögliche Welt auch wirklich aus sich ‚da‘ ]</span>, ''was das Privilegium der Gottheit allein ist'' ''':''' <span style="color:#00B000">[ Im 3. Beweisgang, Theorem-3 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx→□∃xGx'''‘ —</span> ''':''' ‚ANSELMS Prinzip‘ ''':''' <span style="color:#FF6000">»''Weil GOTT widerspruchsfrei ,möglich‘ ist, darum ist auch der Glaube widerspruchsfrei, der annimmt, dass GOTT aus sich ,notwendig‘ da ist''«</span>; mit Korollar-3 ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx ∧ □∀y(Gy→x=y)'''‘ —</span>, <span style="color:#FF6000">»''Es gibt notwendig nur einen einzigen GOTT''«</span>. Damit ist auch der Monotheïsmus bewiesen. ]</span> ''Man hat recht, die Möglichkeit eines jeden Wesens anzunehmen und vor allem die GOTTES, bis ein anderer das Gegenteil beweist''. <span style="color:#00B000">[ Das Gegenteil besagt, dass GOTT ,unmöglich‘ ist. Hier setzt der Möglichkeitsbeweis im GÖDEL-Kalkül an, und beweist, dass diese Aussage zu einem Widerspruch führt. ]</span> ''Somit gibt dieser metaphysische Beweis schon einen moralischen zwingenden Schluss ab, wonach wir dem gegenwärtigen Stande unserer Erkenntnisse zufolge urteilen müssen, dass GOTT ‚da‘ sei, und demgemäß handeln.'' <span style="color:#00B000">[ Aber nicht logisch zwingend '''!''' Denn die Interpretation <span style="color:#4C58FF">— ‚'''G'''‘ —</span> mit dem GOTT der Bibel, als ,methodologische‘ Kalkül-Prämisse, ist nicht zwingend, jedoch ,modal‘ möglich, <span style="color:#4C58FF">— '''◇''' —</span>, und im christlichen Glaubenskontext sinnvoll, was mit einer stimmigen <span style="color:#4C58FF">„theologischen“</span> Interpretation des GÖDEL-Kalküls gezeigt werden kann. Damit wäre dann auch die Frage beantwortet, ob das GÖDEL-System sich plausibel als eine Theorie von GOTT und seinen Eigenschaften interpretieren lässt, bzw. als eine <span style="color:#FF6000">»''axiomatische''«</span> <span style="color:#4C58FF">„Theologie“</span>, wie sie André FUHRMANN apostrophiert. Das <span style="color:#4C58FF">— ‚'''G'''‘ —</span> ist der ,Individuumname‘ für den GOTT der Bibel, — ,GOTT‘ groß geschrieben —, im monotheïstischen, christlichen Glaubenskontext, den auch LEIBNIZ teilt. Dann steht der ,Name‘ auch synonym für das ,existierende‘ Individuum, d.h. für dessen ,Existenz‘. ]</span> ''Es wäre aber doch zu wünschen, dass gescheite Männer'' <span style="color:#00B000">[ sic ! ]</span> ''den Beweis mit der Strenge einer mathematischen Evidenz vollendeten'', <span style="color:#00B000">[ was GÖDEL veranlasst hat, seine Version eines ‚ontologischen Beweises’ zu kreieren, dessen <span style="color:#FF6000">»''mathematische Evidenz''«</span> man heute mit Computerprogrammen<ref>siehe Fußnote 12</ref> schon nachgewiesen hat ]</span> ... <span style="color:#FF6000">«</span>. Für GÖDEL war dieser Text eine intellektuelle Herausforderung, und er hat sie angenommen. Das war für GÖDEL sicher keine Glaubensangelegenheit. GOTT hat es ja auch nicht nötig, ‚bewiesen‘ zu werden. Wer <span style="color:#4C58FF">— ‚'''G'''‘ —</span> z. B. mit dem sog. ‚Urknall‘ gleich setzt, macht die <span style="color:#FF6000">»''zufällige Struktur der Welt''«</span> im ‚Urknall‘, <span style="color:#00B000">(pantheistisch)</span> zu einem ,Gott‘, was GÖDEL dezidiert für sein Kalkül ausgeschlossen haben wollte. Kurt GÖDEL schreibt 1961 in einem Brief, in Anlehnung an den obigen Text ''':''' ::<span style="color:#FF6000">»...''ich glaube, schon heute dürfte es möglich sein, rein verstandesmäßig ''<span style="color:#00B000">[ sic '''!''' ]</span>, ''(ohne sich auf den Glauben an irgendeine Religion zu stützen) einzusehen, dass die theologische Weltanschauung'', <span style="color:#00B000">[ dass es GOTT gibt ]</span>, ''mit allen bekannten Tatsachen'', <span style="color:#00B000">[ z. B. mit den Maßstäben einer modernen Logik ]</span>, ''durchaus vereinbar ist. Das hat schon vor 250 Jahren der berühmte Philosoph und Mathematiker LEIBNIZ versucht''.«</span><ref>Zitiert nach SCHIMANOVICH-GALIDESCU, M.-E. ''':''' ‚''<span style="font-family: Times;"><big>Princeton–Wien 1946–1966. Briefe an die Mutter</big></span>''‘, in ‚''<span style="font-family: Times;"><big>Kurt Gödel – Leben und Werk</big></span>''‘, Hg. B.BULDT et alia, Wien (HÖLDER–PICHLER–TEMSKY), 2001, Band 1</ref> ===<div class="center"><span style="color:#660066">Die Interpretation des Kalküls</span></div>=== Wenn man sich das GÖDEL-Kalkül ansieht, wie es heute formalisiert vorliegt, stellt sich die Frage ''':''' <span style="color:#FF6000">„Lässt sich dieses System plausibel als eine Theorie von GOTT <span style="color:#00B000">(als eine ‚Rede von GOTT’ := <span style="color:#4C58FF">,Theologie’</span>)</span> und seiner Eigenschaften verstehen '''?''' “ — „Ist hier eine genuin <span style="color:#4C58FF">,theologische’</span> Interpretation möglich '''?''' “</span> Seine Herkunft aus der intellektuellen Auseinandersetzung des Logikers GÖDEL mit dem GOTT-gläubigen Philosophen LEIBNIZ und dem christlichen Theologen und Erzbischof ANSELM rechtfertigt diese Frage. Die <span style="color:#FF6000">„mathematische Evidenz“</span> des GÖDEL-Formalismus, <span style="color:#00B000">(im Anhang nachgestellt)</span>, ist allgemein anerkannt, <span style="color:#00B000">(Vorbehalte dagegen gibt es nur bei der Interpretation seiner Syntax, d.h. ob die Axiome und Definitionen, wie GÖDEL sie konzipiert hat, bzw. ob die Theoreme und Korollare, die aus diesen Axiomen ,regulär’ (├ ) abgeleitet werden, auch in unserer realen Welt ,wahr’ und ,annehmbar’ sind)</span>. Die <span style="color:#FF6000">„theologische Evidenz“</span> des GÖDEL-Systems wird durch eine ,Verankerung’ der Axiome und Definitionen in den <span style="color:#4C58FF">,theologisch’</span>-philosophischen Diskurs über GOTT evaluiert, der schon seit zweieinhalbtausend Jahren läuft. In diesen zweieinhalbtausend Jahren hat sich, — gegen ARISTOTELES und die antike Philosophie —, die Erkenntnis durchgesetzt, dass GOTT <span style="color:#FF6000">»''unabhängig''«</span> von der <span style="color:#FF6000">»''zufälligen''«</span> Raum-Zeit-Struktur unserer vergänglichen Welt ist. In meiner Darstellung des GÖDEL-Kalküls folge ich, <span style="color:#00B000">(im Unterschied zum Autographen GÖDELS, vom 10. Feb 1970)</span>, in der Axiom-Formulierung und -Nummerierung, in der Syntax, und in der Beweis-Struktur, der Arbeit von André FUHRMANN ''':''' ''<span style="font-family: Times;"><big>‚Existenz und Notwendigkeit. Kurt Gödels axiomatische Theologie‘</big></span>'' in ''<span style="font-family: Times;"><big>‚Logik in der Philosophie‘</big></span>'' Hg. SCHROEDER-HEISTER, SPOHN und OLSSON, 2005, Synchron, Heidelberg, Seite 349–374. <span style="color:#00B000">(Die tiefer gestellte Notation der spezifischen ,Eigenschaft‘ einer Eigenschaft ist meine Ergänzung zur formalen Syntax, z. B. ''':''' <span style="color:#4C58FF"> — ‚'''G'''<sub>ess</sub>'''x'''‘ — </span>, angeregt durch die indizierende Schreibweise GÖDELS ''':''' <span style="color:#4C58FF">— ,'''G''' Ess. '''x'''’ —</span>.)</span> Die Erkenntnisse zur Straffung und Präzisierung der GÖDEL-Syntax, <span style="color:#00B000">(besonders im Möglichkeitsbeweis)</span>, stammen aus der Arbeit von Günther J. WIRSCHING ''':''' ,''<span style="font-family: Times;"><big>Der Gödelsche Gottesbeweis</big></span>''‘, im Web <ref>https://edoc.ku.de/id/eprint/10243/1/OntBw.pdf</ref>. <span style="color:#00B000">(Auch der Hinweis auf AVICENNA kommt von WIRSCHING.)</span> Die Zitate von THOMAS von Aquin´s Stellungnahme zum Theorem ANSELMS, und von Georg Wilhelm Friedrich HEGEL zur Immanuel KANTS Ablehnung des Theorem ANSELMS, befinden sich in Franz SCHUPP, ,<span style="font-family: Times;"><big>''Geschichte der Philosophie im Überblick''</big></span>‘, Band 2 ‚<span style="font-family: Times;"><big>''Christliche Antike, Mittelalter''</big></span>‘, Hamburg 2003, Seite 168 und Seite 170. Meines Erachtens ist der entscheidende Ansatzpunkt einer <span style="color:#4C58FF">„theologischen“</span> Interpretation das GÖDEL-Axiom-5 ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ —</span>, <span style="color:#FF6000">»''notwendige Existenz ist eine positive Eigenschaft''«</span>. ‚Frei‘ nach KANT ‚formuliere‘ ich ‚kurz‘ ''':''' <span style="color:#FF6000">„Existenz ist keine Eigenschaft“</span>. Hier die Positionen KANTS zum Thema ‚Existenz‘ und ‚Eigenschaften‘ ''':''' ::<span style="color:#FF6000">»</span>''… unbeschadet der wirklichen Existenz äußerer Dinge'', <span style="color:#00B000">[ kann man ]</span> ''von einer Menge ihrer Prädikate'', <span style="color:#00B000">[ d.h. Eigenschaften ],</span> ''sagen'' … ''':''' ''sie gehöreten nicht zu diesen ‚Dingen an sich selbst‘, sondern nur zu ihren Erscheinungen, und hätten außer unserer Vorstellung'' <span style="color:#00B000">[ ihrer, als ,wirklich‘ gedachten Erscheinung, ]</span> ''keine eigene Existenz, … weil ich finde, dass … '''alle Eigenschaften, die die Anschauung eines Körpers ausmachen''', bloß zu seiner Erscheinung gehören; denn die Existenz des Dinges, was erscheint, wird dadurch nicht … aufgehoben, sondern nur gezeigt, dass wir es'', <span style="color:#00B000">[ das Ding ]</span>, ''wie es ‚an sich selbst‘ sei'', <span style="color:#00B000">[ d.h. existiert ]</span>, ''durch Sinne gar nicht erkennen können''.<span style="color:#FF6000">«</span><ref>vgl. ‚''<span style="font-family: Times;"><big>Prolegomena zu einer jeden künftigen Metaphysik, die als Wissenschaft wird auftreten können</big></span>''‘, Seite 289; https://www.korpora.org/kant/aa04/289.html</ref> <span style="color:#00B000"><small>(Hervorhebung durch KANT.)</small> [ Seine Prädikate, d.h. Eigenschaften, jedoch können wir mit unseren Sinnen ,anschauen‘, aber nur in Kombination mit unserer Vorstellung ihrer, als ,wirklich‘ gedachten Erscheinung, vermittelt durch den sog. ,transzendentalen Schematismus‘ unserer Einbildungskraft ''':'''</span> <span style="color:#FF6000">»</span>''Eine verborgene Kunst in den Tiefen der menschlichen Seele''<span style="color:#FF6000">«</span>, <span style="color:#00B000">jedoch auch eines der ,dunkelsten‘ Kapitel in der K.d.r.V., bedingt durch KANTS Konzept von ,Wirklichkeit‘, bzw. ,Sein‘. ]</span> Mit anderen Worten, man kann die ‚Existenz‘, bzw. das ‚Sein‘ der Dinge, <span style="color:#00B000">(das ‚Ding an sich’ bei KANT)</span>, nicht unter dem Mikroskop finden. Die ‚Existenz‘ bzw. das ‚Sein‘ ist keine sinnlich registrierbare ‚Eigenschaft‘ z. B. des rekonstruierten ‚Stadt-Schlosses‘ in Berlin. <span style="color:#00B000">(‚Sein‘ ist kein reales ‚Prädikat‘.)</span> Dafür haben wir andere Fähigkeiten ''':''' Ich kann seine ‚Existenz‘ mit meinem Verstand einsehen, weil auch ich selbst ‚existiere‘. Seine ‚Ansicht‘, wie ‚gefällig‘ es ist, und auch weitere ‚Eigenschaften‘, die mir auffallen, kann ich mit einem Handy-Foto dokumentieren. Diese ‚Eigenschaften‘ sind nicht die Ursache, dass das ‚Berliner Schloss‘ existiert. Wohl aber die Rekonstruktion dieses Schlosses ist die ‚Ursache‘, dass es ,existiert‘, und jetzt so aussieht. Insofern ist ‚Existenz‘ keine ‚Eigenschaft‘, sondern die ‚Existenz‘ des Dinges ist die Voraussetzung, der ‚Grund‘, dass ich die ‚Eigenschaften‘ des Dinges mit meinen Sinnen feststellen kann. In einer Auseinandersetzung mit CARTESIUS schreibt KANT, philosophisch ‚tiefgründig‘ und logisch ‚exakt‘, über dessen <span style="color:#FF6000"><span style="font-family: Times;"><big>„Cogito, ergo sum“</big></span></span> ''':''' ::<span style="color:#FF6000">»</span>''Das ‚Ich denke‘ ist ein empirischer Satz, und hält den Satz ‚Ich existiere‘ in sich. Ich kann aber nicht sagen ''':''' ‚Alles, was denkt, existiert‘; denn da würde die Eigenschaft des Denkens'', <span style="color:#00B000">[ eine essentielle Eigenschaft ]</span>, ''alle Wesen, die sie besitzen, zu notwendigen'' <span style="color:#00B000">[ d.h. notwendig existierenden ]</span> ''Wesen machen''. <span style="color:#00B000">[ Was allein nur von GOTT ausgesagt werden kann; mit AVICENNA, als anerkannter ARISTOTELES-Kommentator ''':''' <span style="color:#FF6000">»''GOTT ist das einzige Sein, bei dem Essenz'' <span style="color:#00B000">[ ‚Wesenseigenschaften‘ ]</span> ''und Existenz'' <span style="color:#00B000">[ ‚Dasein‘ ]</span> ''nicht zu trennen sind und das daher notwendig an sich da ist''«, <span style="color:#00B000">— konform mit GÖDEL ''':'''</span> »''notwendige Existenz ist eine positive'' <span style="color:#00B000">[ essentielle ]</span> ''Eigenschaft''«</span> ].</span> ''Daher kann meine Existenz auch nicht aus dem Satz, ‚Ich denke‘, als'' <span style="color:#00B000">[ logisch ]</span> ''gefolgert angesehen werden, wie CARTESIUS dafür hielt (weil sonst der Obersatz : ‚Alles, was denkt, existiert‘, vorausgehen müsste), sondern ist mit ihm identisch.'' <span style="color:#00B000">[ Eine einfache Schlussfolgerung ''':''' meine ‚Existenz‘ ist auch nicht von meiner ‚Eigenschaft‘ Denken ‚verursacht‘. ,Existenz‘ ist nicht bloß ein ,Gedanke‘ von mir. ]</span><span style="color:#FF6000">«</span> <span style="color:#00B000">(Aus der Anmerkung 41 zu den ‚''<span style="font-family: Times;"><big>Paralogismen der reinen Vernunft</big></span>''‘, in ‚''<span style="font-family: Times;"><big>Kritik der reinen Vernunft</big></span>''‘, Seite 275,<ref>https://korpora.org/kant/aa03/275.html</ref> mit meinem Einschub des AVICENNA-Zitat aus Wikipedia.<ref>{{w|Avicenna#Metaphysik}}</ref>)</span> Mit anderen Worten ''':''' <span style="color:#FF6000">„Die Eigenschaft, dass ich denken kann, ist nicht die Ursache meiner ‚Existenz‘“</span>, sondern, <span style="color:#FF6000">„Die Liebe meiner Eltern und ihre Entscheidung füreinander ist die Ursache meiner ‚Existenz‘. Daher ‚bin’ ich. Und weil ich ein Mensch ‚bin‘, kann ich denken.“</span> Auch mit diesen Anmerkungen ist leicht einsehbar, dass ‚Existenz‘ keine ‚Eigenschaft‘ ist — außer bei GOTT. In GOTT ist ‚Dasein‘ die ‚Wesenseigenschaft‘ GOTTES, d.h. ‚Dasein‘ und ‚Wesen‘ sind in GOTT untrennbar verbunden; sind <span style="color:#FF6000">„koinzident“</span> ‚eins‘. Das ist die Einzigartigkeit im Wesen GOTTES, dass GOTT immer schon ‚da‘ ist. Die Frage nach dem ‚Wesen‘ GOTTES lautet ''':''' <span style="color:#FF6000">„Was bist du ? “</span>/<span style="color:#CC66FF">„Wer bist Du ? “</span> Antwort, Exodus 3,14 ''':''' <span style="color:#CC66FF">»''Ich bin der ‚Ich-Bin-Da‘'' <span style="color:#00B000">[ für euch und für immer ]</span>«.</span> Weil GOTT für uns immer schon ‚da‘ ist, — <span style="color:#CC66FF">„von Ewigkeit zu Ewigkeit“</span> —, hat GOTT es nicht nötig, ‚bewiesen‘ zu werden. <span style="color:#00B000">(In der Mathematik ist ein ‚Satz‘ erst dann ‚wahr‘ und ‚existent‘, wenn er bewiesen ist. Bei GOTT ist es jedoch nicht so ''':''' GOTTES ‚Existenz‘ ist nicht erst dann ‚wahr‘, wenn seine ‚Existenz‘ von uns ‚bewiesen‘ ist. Sein ‚Dasein‘ ist jedem unserer ‚Beweisversuche‘ immer schon voraus. Der Zugang zu GOTT ist nicht der ,Beweis‘, sondern der ,Glaube‘. Wer an GOTT glauben ,will‘, dem antwortet GOTT. Wer nicht an GOTT glauben ,will‘, dessen Entscheidung respektiert GOTT, und drängt sich nicht auf. Die Glaubens-Entscheidung hat jedoch für jeden Menschen eine existenzielle Konsequenz ''':''' <span style="color:#CC66FF">»''Wer glaubt und sich taufen lässt, wird gerettet; wer aber nicht glaubt'', <span style="color:#00B000">[ und diese Entscheidung auch im Augenblick der ,Wahrheit‘, im Tod, in der sog. ,Endentscheidung‘, nicht widerruft ]</span>, ''wird verurteilt werden''«,</span> <small>({{Bibel | Markus Evangelium |16|16|EU}})</small>. Das Urteil lautet ''':''' <span style="color:#CC66FF">»''zweiter Tod ''':''' der Feuersee''«</span>, <small>({{Bibel | Offenbarung |20|14f|EU}})</small>, ohne Berufungsmöglichkeit. <span style="color:#CC66FF">»''Ohne Glauben aber ist es unmöglich, Gott zu gefallen; denn wer zu Gott kommen will, muss glauben, dass er ist und dass er denen, die ihn suchen, ihren Lohn geben wird''«.</span> <small>({{Bibel | Hebräer Brief |11|6|LUT}})</small>)</span> Das GÖDEL-Axiom-5 ist m.E. der entscheidende Ansatzpunkt einer stimmigen <span style="color:#4C58FF">„theologischen“</span> Interpretation der GÖDEL-Axiomatik. ===<div class="center"><span style="color:#660066">Das Kalkül ist kein Existenz-Beweis für GOTT</span></div>=== Die allgemeine <span style="color:#FF6000">»''mathematische Evidenz''«</span> des GÖDEL-Formalismus, d.h. seine ‚Schlusskraft‘, ist von kompetenten Leuten<ref>„GÖDELS Argumentationskette ist nachweisbar korrekt – so viel hat der Computer nach Ansicht der Wissenschaftler Christoph BENZMÜLLER und Bruno WOLTZENLOGEL-PALEO nun gezeigt;“ vgl. https://www.fu-berlin.de/presse/informationen/fup/2013/fup_13_308/index.html</ref> schon festgestellt worden, <span style="color:#00B000">(im Anhang ‚nachrechenbar‘ mit den Regeln und Gesetzen einer modalen Prädikatenlogik 2. Stufe)</span>. Das GÖDEL-Kalkül ist jedoch kein ‚moderner‘<span style="color:#FF6000">„Existenz-Beweis“</span> für GOTT, wofür es gehalten oder meistens bezweifelt wird, sondern setzt, <span style="color:#00B000">(theoretisch methodisch)</span>, den <span style="color:#FF6000">„Glauben an die Existenz GOTTES“</span> schon voraus, ohne ihn zu hinterfragen. Das <span style="color:#FF6000">„Dasein“</span> bzw. die <span style="color:#FF6000">„Existenz“</span> GOTTES wird mit der Definition-1 für <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, bzw. mit dem Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ — </span>, im Kalkül ‚definitorisch‘ bzw. ‚axiomatisch‘ als Kalkül-,Annahme‘, als <span style="color:#FF6000">„Prämisse“</span>, eingeführt, unter der Voraussetzung, dass die ‚Eigenschaft‘ <span style="color:#4C58FF">‚'''G'''‘ := </span><span style="color:#FF6000">„Göttlichkeit“</span> <span style="color:#00B000">(Essenz)</span> und das <span style="color:#FF6000">„Dasein GOTTES“</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span> <span style="color:#00B000">(Existenz)</span>, ontologisch ‚identisch‘, genauer ''':''' <span style="color:#FF6000">„koinzident“</span> sind, was GÖDEL im Axiom-5 definitiv für sein System vorschreibt ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ — </span> ''':''' <span style="color:#FF6000">»''notwendige Existenz ist eine positive Eigenschaft''«</span>. Das <span style="color:#FF6000">„Dasein GOTTES“</span> ist faktisch äquivalent zur <span style="color:#FF6000">„notwendigen Existenz als GOTT“</span>; und <span style="color:#FF6000">„Göttlichkeit“</span> ist die <span style="color:#FF6000">„positive Eigenschaft in GOTT“</span>. Beides ist nach Axiom-5 ‚identisch‘, d.h. dem ‚Sein nach‘ dasselbe, und daher konvertierbar. Beide, <span style="color:#00B000">(sowohl die Essenz, als auch die Existenz GOTTES)</span>, werden daher auch mit demselben Term ''':''' <span style="color:#4C58FF">— ‚'''G'''‘ —</span> im Kalkül dargestellt. Der traditionelle, christliche ,GOTT-Glaube‘ wird zugleich mit diesem Term <span style="color:#4C58FF">‚'''G'''‘ := </span> <span style="color:#FF6000">„GOTT“ <span style="color:#00B000">|</span> „göttlich“</span>, im 2. Beweisgang, dem Basisbeweis, und im 3. Beweisgang für das Theorem ANSELMS, jeweils als ,methodologische‘ Prämisse :01: <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span> regulär <span style="color:#00B000">( ├ )</span> und explizit eingeführt ''':''' <span style="color:#FF6000">»''Das'' <span style="color:#4C58FF">,'''x'''‘</span> ''steht für den GOTT'' <span style="color:#4C58FF">‚'''G'''‘</span> ''der Christen''«</span>. Das ist die ,modal‘-frei gewählte, <span style="color:#4C58FF">„theologische“</span> Kalkül-,Annahme‘, <span style="color:#00B000">(als ,Argument-Einführung‘ := <span style="color:#4C58FF">‚'''AE:'''‘</span> )</span>, und wird dann mit Definition-1 näher ,bestimmt‘ ''':''' <span style="color:#4C58FF">— ‚'''Gx↔∀X(PX→Xx)'''‘ — </span> ''':''' <span style="color:#FF6000"> »''Das'' <span style="color:#4C58FF">,'''x'''‘</span> ''steht genau dann für ‚GOTT‘'' <span style="color:#00B000">|</span> ''‚göttlich‘'', <span style="color:#4C58FF">‚'''G'''‘</span>, ''wenn'' <span style="color:#4C58FF">,'''x'''‘</span> ''alle positiven Eigenschaften, bzw. Vollkommenheiten'', <span style="color:#4C58FF">‚'''PX'''‘</span>, ''hat''«</span>, entsprechend dem ‚Quelltext‘ bei LEIBNIZ. <span style="color:#00B000">(Das ,postulierte‘ Axiom-3 ''':''' <span style="color:#4C58FF"> — ‚'''PG'''‘ —</span>, wird standardmäßig gelesen als <span style="color:#FF6000">»''Göttlichkeit ist eine positive Eigenschaft''«</span>, hat aber auch die alternative Leseart ''':''' <span style="color:#FF6000">»''GOTT ist perfekt d.h. vollkommen''«</span>, was <span style="color:#4C58FF">„theologisch“</span> auch richtig ist; mit <span style="color:#4C58FF">‚'''P'''‘ </span> := <span style="color:#FF6000">„Perfektion“/„Vollkommenheit“</span> ist dann die Summe aller <span style="color:#FF6000">„positiven Eigenschaften“</span>.)</span> Mit Axiom-3, — in dieser <span style="color:#4C58FF">„theologischen“</span> Leseart —, ist der ‚Wenn-Satz‘ in Definition-1 ‚aufgelöst‘ ''':''' <span style="color:#FF6000">»''GOTT hat alle positiven Eigenschaften, weil er ‚perfekt‘ ist''«</span>. In Definition-3 ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x ↔ ∀X(X'''<sub>ess</sub>'''x →□∃yXy)'''‘ —</span>, wird die ,für uns‘ <span style="color:#FF6000">„notwendige Existenz“</span> ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>‘ —, </span> durch die ,aus sich‘ <span style="color:#FF6000">„notwendig“</span> <span style="color:#4C58FF">— '''□''' —</span> instanziierten <span style="color:#FF6000">„Wesenseigenschaften“</span>, <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>‘ —</span>, <span style="color:#00B000">(als zu den Transzendentalia gehörig)</span>, bestimmt. Das GÖDEL-Kalkül setzt sowohl in Definition-3 als auch im Axiom-5 das Theorem des ARISTOTELES von der ontologischen ‚Identität‘, d.i. die Koinzidenz von <span style="color:#FF6000">„Dasein“</span>, <span style="color:#00B000">(Existenz)</span> und <span style="color:#FF6000">„Wesenseigenschaften“</span>, <span style="color:#00B000">(Essenz)</span> im prinzipiell <span style="color:#FF6000">„unbewegten Erstbewegenden“</span> voraus. Ohne diese Annahme bzw. ohne Axiom-5, würde das GÖDEL-Kalkül nicht ‚funktionieren‘. Das GÖDEL-Theorem-2.1 ''':''' <span style="color:#4C58FF">— ‚'''Gx→G'''<sub>ess</sub>'''x'''‘ —</span>, kann unter dieser Voraussetzung dann, <span style="color:#4C58FF">„theologisch“</span> richtig und eindeutig, so gelesen werden ''':''' <span style="color:#FF6000">»''Wenn'' <span style="color:#4C58FF">‚'''x'''‘</span> ''für GOTT'', <span style="color:#4C58FF">‚'''G'''‘</span>, ''als Individuum steht, dann ist GOTT-Sein'', <span style="color:#4C58FF">‚'''G'''‘</span>, <span style="color:#00B000">(,Existenz‘)</span>, ''das Wesen'', <span style="color:#4C58FF">—<sub>ess</sub>—, </span> <span style="color:#00B000">(,Essenz‘)</span>, ''GOTTES'' <span style="color:#4C58FF">‚'''x'''‘</span>«</span><ref>vgl. z.B. THOMAS von Aquin ''':''' ,''<span style="font-family: Times;"><big>De Ente et Essentia</big></span>''’, Kapitel 5 ''':''' „Deus, cuius essentia est ipsummet suum esse“ ''':''' „GOTT, dessen Wesen sein eigenes Sein ist“.</ref>, statt der <span style="color:#4C58FF">„theologisch“</span> unrichtigen Lesearten in der Wikipedia ''':''' <span style="color:#FF6000">»''Göttlich ist eine essentielle Eigenschaft jedes göttlichen Wesens''«</span><ref>{{w|Gottesbeweis#Kurt_Gödel|Gottesbeweis 2.1.2, Theorem 2}}; Version vom 10.09.2025</ref>, oder bei Christoph BENZMÜLLER et alia, im sog. ,Theorembeweiser‘ ''':''' <span style="color:#FF6000">»''Gottähnlich zu sein ist eine Essenz von jeder gottähnlichen Entität''«</span><ref>[https://www.fu-berlin.de/presse/informationen/fup/2013/fup_13_308/index.html ‚Gödels „Gottesbeweis“ bestätigt’, Theorem 2]</ref>, mit der suggestiven Annahme, es gäbe polytheïstisch, mehrere ,göttliche Wesen‘, bzw. ,gottähnliche Entitäten‘, was der monotheïstischen, abendländischen Tradition, bzw. dem <span style="color:#4C58FF">„theologischen“</span> Theorem von der ,Unvergleichlichkeit‘ und ,Einzigartigkeit‘ GOTTES widerspricht, das im GÖDEL-Kalkül mit Korollar-3 bestätigt wird. <span style="color:#00B000">(Die Interpretation <span style="color:#4C58FF">‚'''G'''‘ :=</span> <span style="color:#FF6000">„GOTT“</span>, als ,Individuumname‘, ist synonym zum <span style="color:#FF6000">„Dasein <span style="color:#00B000">(Existenz)</span> GOTTES“</span>, und äquivalent zur ‚positiven Eigenschaft‘ <span style="color:#FF6000">„Göttlichkeit“</span>, alias <span style="color:#FF6000">„göttlich zu sein“</span> = <span style="color:#FF6000">„GOTT zu sein“</span> = <span style="color:#FF6000">„GOTT-Sein“</span>; und mit dem GÖDEL-Term ''':''' <span style="color:#4C58FF">‚'''G'''<sub>ess</sub>‘ :=</span> <span style="color:#FF6000">„das Wesen <span style="color:#00B000">(Essenz)</span> GOTTES“</span>.)</span> <div class="center"><span style="color:#FF6000"><span style="color:#4C58FF">‚'''G'''‘ :=</span> „'''G'''öttlichkeit“ <span style="color:#4C58FF">↔</span> „'''G'''OTT“ <span style="color:#4C58FF">↔</span> „'''G'''OTT-Sein“</span> </div> Die Rechtfertigung für diese <span style="color:#4C58FF">„theologische“</span> Dreifach-Äquivalenz für <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, im GÖDEL-Kalkül, gibt Axiom-5 ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ — </span> ''':''' <span style="color:#FF6000">»''die positive <u>Eigenschaft</u>'', <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, ''Göttlichkeit'', <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, ''äquivalent zu GOTT als Individuum-Name'', <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, ''ist auch äquivalent zum Dasein GOTTES'', <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, ''gleichbedeutend mit notwendiger <u>Existenz</u>'', <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>‘ —</span>'', dem <u>Sein</u> GOTTES für uns''«</span>. Hier hat GÖDEL explizit <span style="color:#FF6000">„Eigenschaft“</span> mit <span style="color:#FF6000">„Existenz“</span> bzw. <span style="color:#FF6000">„Sein“</span> gleichgesetzt; <span style="color:#00B000">(was jedoch nach KANT für alles, was in unserer Welt ‚existiert‘, bzw. für alles, was zur <span style="color:#FF6000">»''zufälligen Struktur der Welt''«</span> gehört, wie GÖDEL selbst sagt, in jedem Fall ‚unstatthaft‘ ist ''':''' <span style="color:#FF6000">„Existenz ist keine Eigenschaft“</span>, bzw. <span style="color:#FF6000">»''Sein ist kein reales Prädikat''«</span>)</span>. Jedoch wegen dieser ‚Gleichsetzung‘, die einzig und allein, der aristotelisch-<span style="color:#4C58FF">,theologischen‘</span> Tradition entsprechend, singulär nur in GOTT ‚statthaft‘ ist, kann jetzt die ‚positive Eigenschaft‘ <span style="color:#00B000">(Essenz)</span> <span style="color:#FF6000">„Göttlichkeit“</span> <span style="color:#00B000">(ontologisch korrekt)</span> gelesen werden als <span style="color:#FF6000">„das, was GOTT zu dem macht, ‚was‘ GOTT an sich selbst ist“</span>, nämlich zu seinem <span style="color:#FF6000">„GOTT-Sein“</span> <span style="color:#00B000">(Existenz)</span>, zu seinem <span style="color:#FF6000">„Dasein als GOTT“</span>; zur Tatsache, dass <span style="color:#FF6000">„GOTT GOTT ist“</span>, d.h. dass <span style="color:#FF6000">„GOTT als GOTT ‚da‘ ist“</span>. Das ist, <span style="color:#00B000">(und da folgt ARISTOTELES seinem Lehrer PLATO)</span>, nach traditioneller Auslegung, die übliche, ontologische Funktion des ‚Wesens‘<span style="color:#00B000"> | <span style="color:#FF6000">„<span style="font-family: Times;"><big>οὐσία</big></span>“</span> | ‚ousía‘ |</span> eines Seienden ''':''' es ‚macht‘ das Seiende zu dem, ‚was‘ es ist; es ist die ‚Ursache‘ dafür, dass das Seiende, das ‚ist‘, ‚was‘ es ist | ‚Was-Sein‘ — ‚Wesen‘. <span style="color:#00B000">(ARISTOTELES lokalisiert jedoch das ,Wesen‘ im Seienden, im Gegensatz zu PLATO, der das ,Wesen‘, — ,getrennt‘ vom Seienden —, in den allgemeinen ,Ideen‘ lokalisiert.)</span> Da aber in ‚Gott‘, <span style="color:#00B000">(dem <span style="color:#FF6000">„unbewegten, ‚unverursachten‘ Erstbeweger“</span>)</span>, Prozesshaftes, ‚Ursächliches‘ auszuschließen ist, ist die übliche prozesshafte, ‚ursächliche‘ Funktion von <span style="color:#FF6000">„<span style="font-family: Times;"><big>οὐσία</big></span>“</span><span style="color:#00B000"> | ‚ousía‘ |</span> ,Wesen‘ im <span style="color:#FF6000">„Erstbewegenden“</span> nach ARISTOTELES, sozusagen, schon ‚zum Abschluss‘ gekommen, schon ‚verwirklicht‘, — <span style="color:#FF6000">„<span style="font-family: Times;"><big>ἐν-έργεια οὖσα</big></span>“</span><span style="color:#00B000"> | ‚en-érgeia oúsa‘</span> —, schon ‚ins-Werk‘ gesetzt; <span style="color:#00B000">(<span style="color:#FF6000">„<span style="font-family: Times;"><big>τὸ ἔργον</big></span>“</span> | ‚to érgon‘ | ‚das Werk‘; <span style="color:#FF6000">„<span style="font-family: Times;"><big>ἐνέργεια</big></span>“</span> | ‚enérgeia‘ | ,Wirksamkeit‘, ,Wirklichkeit‘, ,Aktualität‘, ,Energie‘; und <span style="color:#FF6000">„<span style="font-family: Times;"><big>οὖσα</big></span>“</span> | ,oúsa‘ | feminin Nominativ Singular von <span style="color:#FF6000">„<span style="font-family: Times;"><big>ὤν</big></span>“</span> | ‚ón‘ | ‚seiend‘)</span>. Sein ,Wesen‘ ist im ,Dasein‘ vollendet, ist ,wirkliches, verwirklichendes Sein‘, ‚seiende Aktualität‘, <span style="color:#FF6000">„<span style="font-family: Times;"><big>actus purus</big></span>“</span> ''':''' sein Wesen ist ‚reine Tätigkeit‘, ,reine verwirklichende Gegenwärtigkeit‘, d.h. ,existent‘, ohne jede prozesshafte ‚Potenzialität‘. Aus der wichtigen und richtigen Erkenntnis, dass GOTT <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>''Struktur unserer Welt''«</span> ist, folgt mit der ontologischen Identität von ,Dasein‘ und ,Wesen‘ in GOTT ''':''' Der zeitlos ewige GOTT ist <span style="color:#FF6000">»''notwendig aus sich'' <span style="color:#00B000">(von Natur aus)</span> ''immer schon da''«</span>, m.a.W. ist <span style="color:#FF6000">„zeitlos-ursprungslos“</span>. Insofern ist <span style="color:#FF6000">„Göttlichkeit“</span> die <span style="color:#FF6000">„Wesenseigenschaft“</span>, die im <span style="color:#FF6000">„Dasein GOTTES“</span> d.h. in <span style="color:#FF6000">„GOTT“</span>, schon ihr ‚Ziel‘, ihre Vollendung, — <span style="color:#FF6000">„Perfektion“</span>, Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, erreicht hat. GOTT ist <span style="color:#FF6000">»''vollkommen''«</span> und darum auch <span style="color:#FF6000">»''notwendig für uns immer schon ‚da‘''«</span> ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x'''‘ — </span>. GOTT ist in seinem ‚zeitlosen Wesen‘ <span style="color:#FF6000">„unverursacht“</span>, da er <span style="color:#FF6000">»''notwendig aus sich'' <span style="color:#00B000">(von Natur aus)</span> ''vollkommen''«</span> ist ''':''' <span style="color:#4C58FF">— ‚'''□PG'''‘ —</span>, <span style="color:#00B000">(eine Instanz von Axiom-4)</span>. <span style="color:#FF6000">„Vollkommenheit“</span>, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, ist die <span style="color:#FF6000">„Wesenseigenschaft“</span>, bzw. das <span style="color:#FF6000">„Wesen GOTTES“</span> ''':''' <span style="color:#4C58FF"> — ‚'''G'''<sub>ess</sub>‘ —</span>. <span style="color:#FF6000">»''GOTT ist ,der‘ Vollkommenste''«</span> ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, d.h. <span style="color:#4C58FF">— ‚'''G'''‘ —</span> ''':''' <span style="color:#FF6000">»''GOTT ist die unbegrenzte Summe der unendlichen Vollkommenheiten''«</span>. Und zur absoluten <span style="color:#FF6000">„Vollkommenheit“</span> gehört <span style="color:#FF6000">„notwendig“</span> auch das <span style="color:#FF6000">„Existieren“</span> ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ — </span>. <span style="color:#FF6000">„Notwendige Existenz“</span> gehört zu den ,ultimativen‘ Transzendentalia in GOTT, was GÖDEL mit Definition-3 ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x ↔ ∀X(X'''<sub>ess</sub>'''x →□∃yXy)'''‘ —</span>, syntaktisch formalisiert hat, wenn sowohl das <span style="color:#4C58FF">— ‚'''x'''‘ —</span>, als auch alle <span style="color:#4C58FF">— ‚'''∀y'''‘ —</span> im Kalkül, für den Dreifaltigen GOTT der Christen stehen, was dann im Korollar-3, mit der Identität, <span style="color:#4C58FF">— ‚'''x=y'''‘ —</span>, bzw. der Koinzidenz beider Individuum-Variablen, explizit gezeigt wird. Entscheidend für diese Interpretation des GÖDEL-Systems ist ''':''' nur unter der ,modal‘ notwendigen Voraussetzung der ontologischen ‚Identität‘ von <span style="color:#FF6000">„Sein“</span> und <span style="color:#FF6000">„Wesen“</span> in GOTT, Theorem-2 ''':''' <span style="color:#4C58FF"> — '''Gx↔G'''<sub>ess</sub>'''x'''‘ —</span>, bzw. der ‚Gleichsetzung‘, <span style="color:#00B000">(Koinzidenz)</span>, von <span style="color:#FF6000">„notwendiger Existenz“</span> mit den ‚positiven‘ Wesenseigenschaften, der <span style="color:#FF6000">„Essenz“</span> in GOTT, Axiom-5 ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ —</span>, ‚funktioniert‘ die GÖDEL-Axiomatik '''!''' Diese ‚Identität‘, bzw. ,Koinzidenz‘ wird in ARISTOTELES, ‚''<span style="font-family: Times;"><big>Metaphysik</big></span>''‘, Buch XII 7, in einem Indizienbeweis erbracht, der mit der Methode der philosophischen Induktion zum Ergebnis kommt ''':''' ::<span style="color:#FF6000">» … ''es muss'' <span style="color:#00B000">[ notwendig ]</span> ''etwas geben, das, ohne selbst ‚bewegt‘'' <span style="color:#00B000">[ </span>''worden''<span style="color:#00B000"> ]</span> ''zu sein'', <span style="color:#00B000">[ ‚unentstanden‘ ]</span>, ''alles Übrige wie ein Geliebtes ‚bewegt‘'' <span style="color:#00B000">[ ‚entstehen lässt‘ ]</span>«</span>, das darum selbst ‚zugleich‘ <span style="color:#FF6000">„<span style="font-family: Times;"><big>αἴδιον καί οὐσία καί ἐνέργεια οὖσα</big></span>“ <span style="color:#00B000">| ,aídion kai ousía kai enérgeia oúsa‘ |</span> »<span style="color:#00B000">[ zeitlich-]</span>''ewig, sowohl <u>Wesen</u>'', <span style="color:#00B000">[ etwas Konkretes, Essentielles ]</span>, ''als auch seiende Wirksamkeit — ''<span style="color:#00B000">[ </span>„<span style="font-family: Times;"><big>actus purus</big></span>“, „reine Tätigkeit“<span style="color:#00B000"> ]</span> ''— verwirklichendes, wirkliches <u>Sein</u> ist'', <span style="color:#00B000">[ ein Existierendes, das alles Übrige ,zur Existenz‘ bringen kann ]</span> «</span>, bzw. <span style="color:#FF6000">„<span style="font-family: Times;"><big>ὀρεκτόν καί νοητόν</big></span>“ <span style="color:#00B000"> | ,orektón kai noêtón‘ | </span>»''das ersehnt und erkennbar ist''.«</span> <span style="color:#00B000">(''<span style="font-family: Times;"><big>vgl. ,Metaphysik</big></span>''‘ XII 7, 1072a,23 – 1072b,4)</span> Was <span style="color:#FF6000">»''alles Übrige''«</span> ,zur Existenz‘ bringen kann, bzw. ,verwirklichen‘ kann, ohne selbst ,entstanden‘ zu sein, muß auch selbst, als etwas Konkretes, Essentielles, immer schon ,existieren‘, bzw. ,wirklich sein‘. Die, daraus abgeleitete, und damit ,erkannte‘, ontologische ‚Identität‘, — ,Koinzidenz‘ —, von ‚Wesen‘ und ‚Sein‘, <span style="color:#00B000">(Ziel aller Sehnsucht und jedes Erkenntnisstrebens)</span>, <span style="color:#FF6000">»''ist das Privilegium der Gottheit allein''«</span> ''':''' mit Gottfried Wilhelm LEIBNIZ interpretiert, entsprechend einer adäquaten, aristotelisch-<span style="color:#4C58FF">,theologischen‘</span> Tradition. Dieses induktive, ‚ontologisch‘ a-posteriori Ergebnis aus der ‚Prinzipienforschung‘ des ARISTOTELES ist die metaphysische und logische Voraussetzung, dass GÖDEL seine Axiomatik im Kalkül des sog. ‚ontologischen Gottesbeweises‘ a-priori des ANSELM von Canterbury, und nach LEIBNIZ, deduktiv korrekt formulieren konnte; <span style="color:#00B000">(vgl. 3. Beweisgang)</span>. Angenommen, die Variable <span style="color:#4C58FF">— ‚'''x'''‘ —</span> steht für den <span style="color:#FF6000">„GOTT“</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, der Christen, <span style="color:#00B000">(siehe Anhang, Term :01: im 2. Beweisgang)</span>, dann ist, — auf Grund von diesem Beweisgang —, in unserer Welt ,wahr‘ und evident ''':''' sowohl die ‚positive Eigenschaft‘ <span style="color:#FF6000">»''Göttlichkeit''«</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, als auch das faktische <span style="color:#FF6000">»''‚Da‘-Sein'' <span style="color:#00B000">[ Existenz ]</span> ''GOTTES''«</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, ‚benennen‘, ontologisch ident, denselben Sachverhalt ''':''' nämlich das, was wir das <span style="color:#FF6000">»''Wesen'' <span style="color:#00B000">[ Essenz ]</span> ''GOTTES''«</span>, <span style="color:#4C58FF"> — ‚'''G'''<sub>ess</sub>‘ —</span>, nennen. <span style="color:#FF6000">»''Göttlichkeit'', bzw. ''GOTT-‚Sein‘ ist das Wesen GOTTES''«</span>, <span style="color:#00B000">(Theorem-2.1)</span>, und dann umgedreht und äquivalent ''':''' <span style="color:#FF6000">»''Das Wesen GOTTES ist sein ‚Da‘-Sein als GOTT'', bzw. ''seine Göttlichkeit''«</span>, <span style="color:#00B000">(Theorem-2.2)</span>, m.a.W. ''':''' <span style="color:#FF6000">»''GOTT ist wesentlich ‚grundlos‘'' <span style="color:#00B000">[ d.h. </span> ''notwendig aus sich''<span style="color:#00B000"> ]</span> ''‚da‘''«</span>. Das ist das Einzigartige im <span style="color:#FF6000">»''Wesen GOTTES''«</span> ''':''' GOTT ist ohne zeitlichen Anfang, zeitlos-ewig, für uns immer schon ‚da‘, und das ‚ist‘ sein <span style="color:#FF6000">»''Wesen''«</span>; vorausgesetzt, ,angenommen‘, man glaubt an GOTT ''':''' Term :01:. <span style="color:#00B000">(Der schon von GÖDEL indizierte Term <span style="color:#4C58FF"> — ‚'''G'''<sub>ess</sub>‘ — </span> ,expliziert‘ nur eine der drei Lesearten, die der Term <span style="color:#4C58FF"> — ‚'''G'''‘ — „theologisch“</span> ,impliziert‘.)</span> Theorem-2 hat somit die syntaktische Form einer Definition ''':''' <div class="center"><span style="color:#4C58FF"> — ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ — </span></div> Somit kann GOTT ‚explizit‘ <span style="color:#00B000">(aus einer bewiesenen Kalkül-Definition)</span> <span style="color:#4C58FF">„theologisch“</span> genauer ‚bestimmt‘ werden ''':''' <span style="color:#FF6000">»''GOTT ist gerade deswegen GOTT, weil sein überzeitlich-ewiges und an sich ‚grundloses‘'' <span style="color:#00B000">[ aber für uns notwendiges ]</span> ''Dasein'' <span style="color:#00B000">[ Existenz ]</span> ''als GOTT, ontologisch, — dem Sein nach —, identisch ist mit seinem persönlichen und für uns liebevollen Wesen'' <span style="color:#00B000">[ Essenz ]</span> ''als GOTT; diese Identität von Dasein und Wesen gilt einzig und allein nur bei GOTT.''«</span> Die philosophische Frage nach dem <span style="color:#FF6000">„Wesen GOTTES“</span> lautet, <span style="color:#00B000">(auf die Person bezogen)</span> ''':''' <span style="color:#FF6000">„Was bist du ? “</span> Sie ist äquivalent zur <span style="color:#4C58FF">,theologisch’</span>-biblischen Frage des MOSE ''':''' <span style="color:#CC66FF">„Wer bist Du ? “</span> Die bekannte Antwort des GOTTES-JHWH aus ‚Exodus 3,14‘, im Dornbusch, thematisiert das persönliche, für uns liebevolle und für immer notwendige <span style="color:#FF6000">„Dasein GOTTES“</span> ''':''' <span style="font-family: Times;"><big>‘אֶֽהְיֶ֖ה אֲשֶׁ֣ר אֶֽהְיֶ֑ה‚</big></span> <span style="color:#00B000">| ‚eh'jeh asher eh'jeh‘ |</span> <span style="color:#CC66FF">»''Ich bin der ‚Ich-Bin-Da‘'', <span style="color:#00B000">[ für euch und für immer ]</span>«.</span> Mit diesem Zitat aus der Bibel ist die GÖDEL-Axiomatik, sozusagen, <span style="color:#4C58FF">„theologisch“</span> ‚verifiziert‘. Sie hat einerseits im Theorem-2 ihren philosophischen ‚Abschluss’ erreicht, und andererseits damit formal-syntaktisch den ‚Anschluss‘ an eine allgemeine Basis-Glaubensaussage gefunden, die ‚an sich‘ für jeden CHRIST-gläubigen Menschen ‚selbstverständlich‘ ist. Was in der Metaphysik des ARISTOTELES das Ergebnis einer philosophischen ,Induktion‘ a-posteriori ist ''':''' <span style="color:#FF6000">„,Dasein‘ ist das ,Wesen‘ GOTTES“</span>, — <span style="color:#00B000">(das mit Theorem-2, auch ein Ergebnis der deduktiven GÖDEL-Axiomatik a-priori ist ''':''' die Beweisgrundlage für den Konsequenz-Teil im Theorem AMSELMS)</span>, — das ist in der Bibel die Grundüberzeugung jedes Menschen, der an GOTT glaubt ''':''' GOTT ist für uns immer schon <span style="color:#FF6000">„da“</span>, weil er uns liebt. Das ist das, <span style="color:#FF6000">„was“</span> GOTT für uns als GOTT ausmacht, — sein Wesen ''':''' <span style="color:#CC66FF">»''Wir haben die Liebe, die GOTT zu uns hat, erkannt und gläubig angenommen. GOTT ist Liebe, und wer in der Liebe bleibt, bleibt in GOTT und GOTT bleibt in ihm''«</span>, <small>({{Bibel | 1. Johannesbrief |4|16|EU}})</small>. Das eigentliche Ergebnis der GÖDEL-Axiomatik ist somit die ‚triviale‘ Erkenntnis, dass GOTT, <span style="color:#FF6000">„unverursacht“ <span style="color:#00B000">|</span> „grundlos“</span>, für uns immer schon ‚da‘ ist, — <span style="color:#CC66FF">„von Ewigkeit zu Ewigkeit“</span> —, vorausgesetzt <span style="color:#00B000">(‚angenommen‘)</span>, man ‚glaubt‘ an den zeitlos-ewigen GOTT ''':''' <span style="color:#CC66FF">»''Ehe die Berge geboren wurden, ehe die Erde entstand und das Weltall erschaffen wurden, bist du, o GOTT, von Ewigkeit zu Ewigkeit''«</span>, <small>({{Bibel | Psalm |90|2|LUT}})</small>. <span style="color:#00B000">(Der Glaube an die Zeitlosigkeit GOTTES ist mit der ‚Annahme‘ von Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span> ''':''' <span style="color:#FF6000">»''GOTT ist perfekt''«</span>, und der ‚Annahme‘ der Definition-1 für <span style="color:#4C58FF"> ‚'''Gx'''‘ := </span> den <span style="color:#FF6000">„GOTT der Christen“</span>, im Kalkül ‚implizit‘ schon eingeführt, da die Axiome und Definitionen, — nach GÖDEL —, nur dann <span style="color:#FF6000">»''wahr''«</span> sind, wenn sie <span style="color:#FF6000">»''unabhängig von der zufälligen''</span> [ Raum-Zeit-]<span style="color:#FF6000">''Struktur''«</span> unserer Welt sind. Das ,impliziert‘ auch, dass der GOTT von Axiom-3 und Definition-1 ebenfalls <span style="color:#FF6000">»''unabhängig''«</span> von Raum und Zeit, d.h. zeitlos-ewig ist '''!''' )</span> Wer an den GOTT der Bibel glaubt, kann sich von der ‚Vernünftigkeit‘ seines Glaubens mit Hilfe des sog. ,ontologischen‘ Gottesbeweises nach ANSELM von Canterbury, mit Kurt GÖDEL <span style="color:#FF6000">»''rein verstandesmäßig''«</span>, überzeugen. <span style="color:#00B000">(Das war auch die Absicht ANSEMS '''!''' )</span> Die Annahme, es sei ‚unmöglich‘, dass es GOTT gibt ''':''' <span style="color:#4C58FF">— ‚'''¬◇∃xGx'''‘ —</span>, <span style="color:#00B000">(dezidierter Atheismus)</span>, führt im GÖDEL-Kalkül formal zu einem logischen Widerspruch; vgl. z. B. ‚''<span style="font-family: Times;"><big>Gödels Möglichkeitsbeweis</big></span>''‘, in ‚''<span style="font-family: Times;"><big>Der Gödelsche Gottesbeweis</big></span>''‘, Seite 17, von Günther J. WIRSCHING; (https://edoc.ku.de/id/eprint/10243/1/OntBw.pdf), d.h. es ist also nicht ‚unmöglich‘, dass es GOTT gibt. Der GOTT-Glaube ist mit den Maßstäben einer modernen Logik <span style="color:#FF6000">»''durchaus vereinbar''«</span> und darum ,vernünftig‘. Damit steht fest ''':''' das GÖDEL-Kalkül ist kein moderner ‚Existenz-Beweis‘ für den GOTT der Bibel, sondern es setzt, <span style="color:#FF6000">»''rein verstandesmäßig''«</span>, ,methodologisch‘, den Glauben an die Existenz eines zeitlos-ewigen GOTTES voraus, der, — <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>''Struktur unserer '' <span style="color:#00B000">[ vergänglichen ]</span> ''Welt''«</span> —, für uns immer schon ‚da‘ ist. Wenn aber einmal als fix ‚angenommen‘ worden ist, <span style="color:#00B000">(als Prämisse)</span>, dass es wahr ist, dass GOTT ‚existiert‘, dann ist natürlich die ‚Annahme‘, dass GOTT ‚nicht existiert‘, falsch. Aber sie ist auch ,unlogisch‘ und ,unsinnig‘, weil die Annahme ''':''' <span style="color:#FF6000">»''Es ist unmöglich, dass es einen GOTT gibt''«</span>, offensichtlich und eindeutig zu einem Widerspruch führt; was z. B. Günther J. WIRSCHING mit seiner Version des <span style="color:#00B000">(nicht umkehrbaren)</span> ‚Möglichkeitsbeweises‘ für ,GOTT‘, explizit vorexerziert hat; <span style="color:#00B000">( nachgestellt im Anhang ''':''' GÖDELS ‚Möglichkeitsbeweis‘ als ,Widerlegung‘ eines Nicht-GOTT-Glaubens; in Entsprechung zu Psalm 14,1 und Psalm 53,2 ''':''' <span style="color:#CC66FF">»''Der'' <span style="color:#00B000">[ ,unvernünftige‘ ]</span> ''Tor sagt in seinem Herzen ''':''' Es gibt keinen Gott. Sie handeln verderbt, handeln abscheulich; da ist keiner, der Gutes tut''«</span>. Historischer Hintergrund zu diesem Psalm-Text ''':''' Die Zerstörung des Tempels in Jerusalem 586 v.Ch. durch die Truppen des NEBUKADNEZAR II.)</span> Der Logiker GÖDEL hat in seinem System zum ,ontologischen Beweis‘ keine ‚formale Unentscheidbarkeit‘ <span style="color:#00B000">(Agnostizismus)</span> feststellen können, wie auf einem anderen Feld seiner Forschungsarbeiten. Das GÖDEL-Konsequenz-Teil von der ‚Notwendigkeit‘ GOTTES ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, <span style="color:#00B000">(die ‚Konsequenz’ aus dem ‚widerspruchsfreien‘ Korollar-1 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —,</span>)</span> im ‚Theorem ANSELMS‘, ist <span style="color:#00B000">(im 3. Beweisgang, Term :10:)</span> dann auch eine weitere Explikation des Basis-Theorems-2 des Kalküls ''':''' <span style="color:#4C58FF"> — ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ — </span>, über die ‚ontologische Identität‘ vom <span style="color:#FF6000">„Dasein GOTTES“</span> ''':''' <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, mit seinem <span style="color:#FF6000">„Wesen“</span> ''':''' <span style="color:#4C58FF"> — <sub>ess</sub> —</span>, nach einem <span style="color:#4C58FF">[ Modus ponens ]</span>, dargestellt mit Term :09:. <span style="color:#00B000">(Die ontologische Identität von Dasein und Wesen in GOTT, ist die, für uns, <span style="color:#FF6000">„notwendige Präsenz <span style="color:#00B000">[ das Sein, <span style="color:#4C58FF">— ‚'''E'''‘ —</span>]</span> GOTTES“</span> ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x'''‘ —</span>, die äquivalent, bzw. koinzident ist zur <span style="color:#FF6000">„Vollkommenheit <span style="color:#00B000">[ das Wesen, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>]</span> GOTTES“</span> ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>. Diese Identität von Sein und Wesen in GOTT ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub> —</span>, bedeutet <span style="color:#4C58FF">,theologisch‘</span> konkret ''':''' die, für uns, notwendige Gegenwärtigkeit GOTTES, [ sein Dasein ], ist verwirklicht worden in der liebevollen [ Wesens-]Zuwendung GOTTES zu uns Menschen, in seiner Kindwerdung in Bethlehem, durch die Jungfrau MARIA ''':''' GOTTES Wesen ist ,Sein-mit-uns‘ ''':''' <span style="color:#CC66FF">»''sein Name'', <span style="color:#00B000">[ sein Wesen ]</span>, ''ist IMMANUEL, das heiß übersetzt ''':''' GOTT-mit-uns''«, <small>({{Bibel | Matthäus Evangelium |1|23|EU}})</small></span>, der unsere Not-,wenden‘-wird, d.h. der uns und die Welt von der Korruption der Sünde und des Todes <span style="color:#4C58FF">,erlösen‘</span> will und wird; jedoch nicht ohne uns. Die <span style="color:#4C58FF">„Menschwerdung“</span> GOTTES in JESUS CHRISTUS, die <span style="color:#4C58FF">„Hypostatische Union“</span>, bzw. diese außergewöhnliche und einzigartige <span style="color:#FF6000">„Koinzidenz“</span> von GOTT und Mensch, ist der wirkliche und historische Beginn der <span style="color:#4C58FF">„Erlösung“</span> des Menschen und der Welt; vergegenwärtigt für jede Generation der Menschen in und durch die <span style="color:#4C58FF">„Kirche“</span> JESU CHRISTI.)</span> Die, von GÖDEL im 1. Beweisgang, als Prämissen schon vorausgesetzten und ,angenommenen‘ Perfektionen, bzw. Vollkommenheiten, <span style="color:#00B000">(das sind die allgemeinen ,Transzendentalia‘ für alles Nicht-Göttliche in der Welt)</span>, werden im ersten Teil des 2. Beweisganges, mit Term :13: <span style="color:#4C58FF">— ‚'''PY'''‘ —</span>, dann auch als <span style="color:#FF6000">„positive Wesenseigenschaften“</span>, <span style="color:#00B000">(als die ultimativen ,Transzendentalia‘)</span>, in GOTT ‚definitiv‘ <span style="color:#00B000">( ╞ )</span> bestätigt; <span style="color:#00B000">(siehe Anhang, 2. Beweisgang, Anmerkung-2)</span>. Im 3. Beweisgang ist das Basis-Theorem-2 die ,modal‘ notwendige, bzw. transzendentale, Voraussetzung, sowohl für das <span style="color:#FF6000">„an sich notwendige Dasein GOTTES“</span>, <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, im Term :10:, als auch für die <span style="color:#FF6000">„für uns notwendige Existenz GOTTES“</span>, <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>‘ —</span>, in den Ressourcen dieses Beweisganges ''':''' in der Definition-3, und im Axiom-5; <span style="color:#00B000">(das <span style="color:#4C58FF">— ‚'''E'''‘ —</span> wird nur GOTT zugeordnet; vgl. auch Anhang, 3. Beweisgang, Anmerkung-4)</span>. Dieses Basis-Theorem-2 ist auch zugleich die Antwort auf die Frage nach dem ‚Ursprung‘ GOTTES ''':''' GOTT ist <span style="color:#FF6000">„unverursacht“ <span style="color:#00B000">|</span> „ursprungslos“</span> ‚da‘, von <span style="color:#CC66FF">„Ewigkeit zu Ewigkeit“</span>, denn es ‚ist‘ sein <span style="color:#FF6000">„Wesen“</span>, <span style="color:#00B000">(überzeitlich-ewig)</span> für uns immer schon ‚da‘ zu sein. Weitere ‚Einzelheiten‘ über Wesen und Eigenschaften GOTTES gehören in die Mystik, bzw. in die <span style="color:#4C58FF">„Theologie“</span>. ===<div class="center"><span style="color:#660066">Die Bedeutung des Kalküls</span></div>=== <div class="center">Immanuel KANT und Kurt GÖDEL im ‚Dialog‘</div> KANT sagt ''':''' ::<span style="color:#FF6000">»</span>'''''Sein''' ist offenbar kein reales Prädikat''. ... ''Es ist bloß die'' <span style="color:#00B000">[ gedachte ]</span>'' Position'' <span style="color:#00B000">[ latinisiert, deutsch für ''':''' ,Setzung‘ ]</span> ''eines Dinges ... Nehme ich nun das Subjekt (Gott) mit allen seinen Prädikaten'' <span style="color:#00B000">[ d.h. Eigenschaften ]</span> ''(worunter auch die Allmacht gehört) zusammen, und sage ''':''' ‚'''Gott ist'''‘'', <span style="color:#00B000">[ ,GOTT existiert wirklich‘ ]</span>, ''oder ‚es ist ein Gott‘, so <u>setze</u> ich kein neues Prädikat'' <span style="color:#00B000">[ keine neue Eigenschaft ]</span> ''zum ‚Begriffe‘ von Gott ''':''''' <span style="color:#00B000">[ <span style="color:#0000FF; background-color:#FFFF00">‚Sein’ ist kein ‚reales Prädikat’ in GOTT</span>; ‚Existenz‘ ist in GOTT keine ‚Eigenschaft‘ ],</span> ... ''es kann daher zu dem Begriffe'', <span style="color:#00B000">[ ,GOTT‘ ]</span>, ''der bloß die'' <span style="color:#00B000">[ gedachte ]</span>'' Möglichkeit ausdrückt, darum, dass ich dessen Gegenstand'', <span style="color:#00B000">[ GOTT ]</span>, ''als schlechthin gegeben (durch den Ausdruck ''':''' er ist'', <span style="color:#00B000">[ GOTT ist wirklich ]</span>'' ) <u>denke</u>, nichts weiter hinzukommen.'' <span style="color:#00B000">[ Beides ist ,bloß gedacht‘ '''!''' ]</span> ''Und so enthält das Wirkliche nichts mehr als das bloß Mögliche. Hundert ‚wirkliche‘ Taler enthalten nicht das mindeste <u>mehr</u>, als hundert ‚mögliche‘. Denn, da diese den'' <span style="color:#00B000">[ gedachten ]</span>'' ‚Begriff‘, jene aber den Gegenstand und dessen'' <span style="color:#00B000">[ gedachte ]</span>'' Position an sich selbst bedeuten, so würde, im Fall dieser'', <span style="color:#00B000">[ die 100, als ,wirklich‘ bloß gedachten Taler ]</span>, ''<u>mehr</u> enthielte als jener,'' <span style="color:#00B000">[ als ihr ‚gedachter‘ Begriff im Verstand, wie ΑNSELM von Canterbury für GOTT, als ‚wirklich‘ Existierenden, argumentierte, …''so würde'' ]</span> ''mein ‚Begriff‘'' <span style="color:#00B000">[ die 100 im Verstand ‚gedachten‘ Taler ]</span> ''nicht den ganzen Gegenstand ausdrücken, und also auch <u>nicht der angemessene Begriff</u> von ihm sein. Aber in meinem Vermögenszustande ist <u>mehr</u> bei hundert ‚wirklichen‘ Talern, als bei dem bloßen Begriffe derselben'', <span style="color:#00B000">[ als bei 100 bloß ‚gedachten‘ Talern ]</span> ... <span style="color:#FF6000">«</span> <span style="color:#00B000"><ref>‚''<span style="font-family: Times;"><big>Kritik der reinen Vernunft</big></span>''‘, Seite 401; https://www.korpora.org/kant/aa03/401.html</ref></span>. GÖDEL würde darauf <span style="color:#00B000">(korrespondierend zur aristotelisch-<span style="color:#4C58FF">,theologischen‘</span> Tradition von der Identität von Sein und Wesen in GOTT)</span> antworten ''':''' ::<span style="color:#FF6000">»</span>Die <span style="color:#FF6000">„100 Taler“</span> sind der <span style="color:#FF6000">»''zufälligen Struktur der'' <span style="color:#00B000">[ vergänglichen ]</span> ''Welt''«</span> entnommen, und sind daher nicht mit GOTT vergleichbar, der, <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>''Struktur''«</span> unserer Welt, <span style="color:#FF6000">„über“</span> dieser Welt steht. Einzig und allein nur von GOTT gilt ''':''' Der mit Dingen aus unserer Welt ,nicht vergleichbare‘ GOTT, <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, <span style="color:#FF6000">„existiert notwendig für uns“</span>, <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x'''‘ —</span>, und <span style="color:#FF6000">„notwendiges Existieren, <u>Sein</u>“</span> ,ist‘ eine <span style="color:#FF6000">„positive <u>Wesen</u>seigenschaft“</span> in GOTT, <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ —</span>, weil GOTT aus sich <span style="color:#FF6000">„vollkommen“ <span style="color:#00B000">|</span> „perfekt“</span> ist, <span style="color:#4C58FF">— ‚'''PG'''‘ —</span> ''':''' <span style="color:#0000FF; background-color:#FFFF00">‚Sein‘ ist in GOTT ein ‚reales Prädikat‘</span>; <span style="color:#00B000">(notwendige ‚Existenz’ ist eine positive ‚Wesenseigenschaft’ in GOTT)</span>, und nur bei GOTT '''!''' Zum zeitlos-ewigen GOTT der Christen ''':''' <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, <span style="color:#00B000">(als methodologische Kalkül-Prämisse)</span>, kann man sagen ''':''' Weil es, wegen Axiom-1 und Axiom-2, <span style="color:#FF6000">„widerspruchsfrei möglich"</span> ist, dass es GOTT gibt ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, darum ist GOTT auch das ‚einzige‘ <span style="color:#FF6000">„Wesen“</span>, <span style="color:#4C58FF">— ‚'''x'''‘ —</span>, von dem ein Christ sagen kann, dass es <span style="color:#FF6000">„notwendig aus sich“</span> ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, d.h. <span style="color:#FF6000">„grundlos“ <span style="color:#00B000">|</span> „unverursacht“</span>, für uns immer schon ‚da’ ist, und immer ,da’ sein wird; und zusätzlich gilt ''':''' Es gibt für jede mögliche Welt ‚nur‘ diesen einen GOTT ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx ∧ □∀y(Gy→x=y)'''‘ — </span><span style="color:#00B000">(Monotheïsmus, Korollar-3)</span>; vorausgesetzt, man geht von der ,Existenz’ dieses GOTTES aus, wobei diese Annahme für GÖDEL <span style="color:#FF6000">»''mit allen bekannten Tatsachen durchaus vereinbar''«</span> ist.<span style="color:#FF6000">«</span> Eine Beobachtung ''':''' KANT sagt, gleichsam als ,krönenden‘ Abschluss seiner Widerlegung des, — von ihm so genannten —, ,ontologischen Gottesbeweises‘ ''':''' <span style="color:#FF6000">»</span>''Aber in meinem Vermögenszustande ist <u>mehr</u> bei hundert ‚wirklichen‘ Talern, als bei dem bloßen Begriffe derselben, (d.i. ihrer Möglichkeit).''<span style="color:#FF6000">«</span> Diese Feststellung KANTS entspricht jedoch genau der Argumentation ANSELMS ''':''' GOTT <span style="color:#FF6000">„<span style="font-family: Times;"><big>esse et in re</big></span>“</span>, d.h. GOTT ,existiert auch in Wirklichkeit‘, <span style="color:#FF6000">„<span style="font-family: Times;"><big>quod maius est</big></span>“</span>, was <u>mehr</u> ist, als <span style="color:#FF6000">„<span style="font-family: Times;"><big>esse solo in intellectu</big></span>“</span>, als nur ein bloßer Begriff ,im Verstand zu sein‘. Der ,Mehr-Wert‘ ergibt sich in beiden Fällen, sowohl bei den Talern als auch bei GOTT, aus der ,Wirklichkeit‘ ihrer Existenz, im Gegensatz zur bloßen, <span style="color:#00B000">(im Begriff gedachten)</span>, ,Möglichkeit‘ ihrer Existenz, so dass, in jedem Fall, der ,Begriff‘ im Verstand ohne Abstriche <span style="color:#FF6000">»</span>''den ganzen Gegenstand ausdrückt''<span style="color:#FF6000">«</span>, und von diesem auch <span style="color:#FF6000">»</span>''der angemessene Begriff''<span style="color:#FF6000">«</span> ist. Alles andere wäre eine ,Lüge‘. Mit dieser ,Beobachtung‘ ist das implizit ,Widersprüchliche‘ in KANTS Argumentation aufgedeckt ''':''' Das Wirkliche in KANTS Vermögenszustande enthält <span style="color:#FF6000">,doch mehr‘</span> als das bloß Mögliche, konträr zu seiner vorigen Behauptung ''':''' <span style="color:#FF6000">»</span>''das Wirkliche''<span style="color:#FF6000">«</span> enthalte <span style="color:#FF6000">»'',nichts mehr‘</span> als das bloß Mögliche''<span style="color:#FF6000">«</span>. Diese Behauptung ist offensichtlich falsch. Das ist somit ein indirekter Beweis und damit eine Bestätigung für die analoge Argumentation ANSELMS aus dem Wiederspruch des Gegenteils, am Beispiel KANTS <span style="color:#FF6000">»</span>''Vermögenzustandes bei hundert wirklichen Talern''<span style="color:#FF6000">«</span>, in dem in Wirklichkeit <span style="color:#FF6000">,doch mehr‘</span> ist, <span style="color:#FF6000">»</span>''als bei dem bloßen Begriffe derselben''<span style="color:#FF6000">«</span>. <span style="color:#00B000">(Diese ,Beobachtung‘ ist zugleich auch das entscheidende Indiz dafür, dass das systembedingte Konzept KANTS von der ,Existenz‘, bzw. vom ,Sein‘ eines jeden Gegenstandes, als</span> <span style="color:#FF6000">»</span>''dessen bloße Position''<span style="color:#FF6000">«</span>, <span style="color:#00B000">d.i. als seine ,Setzung‘ bloß im- und durch den Verstand, ,falsch‘ ist, — d.h. im Klartext ''':''' für KANT ist das ,Sein‘ eines Gegenstandes bloß ein ,Gedanke‘ in uns, wenn er meint, dass uns ein Gegenstand erst dann wirklich ,gegeben‘ sei, wenn wir uns den</span> <span style="color:#FF6000">»</span>''Gegenstand als schlechthin gegeben (durch den Ausdruck : <u>er ist</u>) <u>denken</u>''<span style="color:#FF6000">«</span>, <span style="color:#00B000">was nur dem Irrtum einer falschen System-Konzeption geschuldet sein kann. Auf Grund dieser Konzeption ist das</span> <span style="color:#FF6000">»</span>''Ding, wie es an sich selbst ist''<span style="color:#FF6000">«</span>, <span style="color:#00B000">für KANT systembedingt weder ,anschaubar‘, noch ,erkennbar‘. Diese falsche Konzeption über die ,Existenz‘, bzw. das ,Sein‘ eines Dinges, als</span> <span style="color:#FF6000">»</span>''dessen bloße Position''<span style="color:#FF6000">«</span>, <span style="color:#00B000">ist für KANT letztendlich auch die Beweisgrundlage und Voraussetzung für seine Ablehnung des ontologischen Argumentes für GOTT im Theorem ANSELMS. Wenn das ,wirkliche‘ Sein eines Dinges nichts anderes ist, als</span> <span style="color:#FF6000">»</span>''dessen'' <span style="color:#00B000">[ bloß gedachte ]</span> ''Position''<span style="color:#FF6000">«</span>, <span style="color:#00B000">d.h. als seine ,mögliche‘ Setzung bloß im- und durch den Verstand, — das ist das, als ,wirklich‘ bloß nur ,gedachte‘ Ding —, dann</span> <span style="color:#FF6000">»</span>''enthält''<span style="color:#FF6000">«</span> <span style="color:#00B000">natürlich</span> <span style="color:#FF6000">»</span>''das Wirkliche''<span style="color:#00B000">, [ als die bloß gedachte Existenz ],</span> ''nichts mehr als das bloß Mögliche''<span style="color:#00B000">, [ als der gedachte Begriff ]<span style="color:#FF6000">«</span>, was offensichtlich unhaltbar ist. <span style="color:#4C58FF">[ Modus tollendo tollens ] </span> ''':''' Wenn die Konsequenz einer Wenn-Dann-Folgerung ,falsch‘ ist, dann ist auch ihre Voraussetzung, das System-Konzept KANTS, ,falsch‘ ''':''' d.i. seine ,Kopernikanische Wende‘ für die Metaphysik, soweit sie KANTS ,Sein’-Konzept betrifft. Korrekt und ,wahr‘ ist in jedem Fall ''':''' Das Wirkliche enthält <span style="color:#FF6000">,doch mehr‘</span> als das bloß Mögliche, und die Dinge ,existieren‘ schon immer unabhängig von unserem Denken. ,Existenz‘, das ,Sein‘, ist <span style="color:#FF6000">,doch mehr‘</span>, als bloß ein ,Gedanke‘ von uns.)</span> Somit ist die Argumentation KANTS gegen den ontologischen Beweis ANSELMS für GOTT ,falsch‘ und unhaltbar, weil sie auf der ,falschen‘ Voraussetzung beruht ''':''' die ,Existenz‘, bzw. das ,Sein‘ eines jeden ,Gegenstandes‘, — wie z. B. auch die Existenz bei GOTT —, sei bloß dessen gedachte ,Position‘ an sich selbst, d.h. bloß seine ,Setzung‘ im- und durch den Verstand. Damit ,macht‘ er GOTT außerdem zu einem ,Ding‘ unter den vielen ,Dingen‘ dieser Welt, und verkennt so, — wie vor ihm THOMAS von Aquin —, auch die Einzigartigkeit und Exklusivität GOTTES im Theorem ANSELMS. <div class="center">Die <span style="color:#FF6000">„Rede von GOTT“</span> in der philosophischen Tradition</div> Wenn man die philosophische Tradition der <span style="color:#FF6000">„Rede von GOTT“</span> im Lichte der Ergebnisse der <span style="color:#4C58FF">„axiomatischen Theologie“</span> GÖDELS liest, dann stellt sie sich am Beispiel bei ARISTOTELES, — AVICENNA, — ANSELM, und bei GÖDEL wie folgt dar ''':''' <span style="color:#FF6000">»''Das Erstbewegende,'' (<span style="font-family: Times;"><big>,πρῶτον κινοῦν‘</big></span>), ''das, ohne selbst ‚bewegt‘ zu sein'', (<span style="font-family: Times;"><big>,ἀκίνητον‘</big></span> <span style="color:#00B000">| ''unverursacht, ,entstehungslos‘'' |</span> ), ''alles Übrige wie ein Geliebtes ‚bewegt‘'', (<span style="font-family: Times;"><big>,κινεῖ δὴ ὡς ἐρώμενον‘</big></span> <span style="color:#00B000"> | ''-verursacht, ,entstehen‘ lässt'' |</span> ), ''ist sowohl'' <span style="color:#00B000">[ zeitlich-]</span>''ewiges ‚Wesen‘'', (<span style="font-family: Times;"><big>,ἀΐδιον καί οὐσία‘</big></span> <span style="color:#00B000">| ''‚Substanz‘'' |</span> ), ''als auch'' <span style="color:#00B000">[ zeitlich-]</span>''ewiges ‚wirksames, verwirklichendes Sein‘'', (<span style="font-family: Times;"><big>‚ἀΐδιον καί ἐνέργεια οὖσα‘ = ‚actus purus‘</big></span><span style="color:#00B000"> | '',reine Tätigkeit‘'' |</span> ), … ''ersehnt'', (<span style="font-family: Times;"><big>,ὀρεκτόν‘</big></span>), ''und erkennbar'', (<span style="font-family: Times;"><big>,νοητόν‘</big></span>), ... ''denn dies ist der ‚Gott‘'', (<span style="font-family: Times;"><big>,τοῦτο γὰρ ὁ θεός‘</big></span>), <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, ''der'' <span style="color:#00B000">[ zeitlich-]</span>''Ewige'', (<span style="font-family: Times;"><big>,ἀΐδιον‘</big></span>), — ''der Unvergleichliche'', (<span style="font-family: Times;"><big>,ἄριστον‘</big></span> <span style="color:#00B000">| ''‚der Beste‘'' |</span> ), — ''der Lebendige'', (<span style="font-family: Times;"><big>,ζῷον‘</big></span> <span style="color:#00B000">| ,''das Leben selbst‘'' |</span> ), — ... ''so sagen wir ja'', (<span style="font-family: Times;"><big>,φαμὲν δὴ‘</big></span>), — ...«</span> ''':''' <span style="color:#00B000">(ARISTOTELES — Grieche)</span>. Der ‚Begriff’ <span style="color:#FF6000">„GOTT“</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, als ,Individuumname‘, ist synonym mit <span style="color:#FF6000">„göttliches ‚Da-Sein’“</span>, das sowohl <span style="color:#FF6000">„aus sich vollkommen“</span>, als auch <span style="color:#FF6000">„notwendig für uns“</span> ‚da‘ ist; <span style="color:#00B000">(das ist das, an sich, vollkommene ‚Was-Sein‘ GOTTES ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ — </span>, das zugleich, für uns, das notwendige ‚Da-Sein‘ GOTTES ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x'''‘</span> — ist)</span>; <span style="color:#CC66FF">„von Ewigkeit zu Ewigkeit“</span>. Das ist der <u>angemessene Begriff</u> von GOTT, und gilt ‚nur‘ von GOTT. Weil GOTT <span style="color:#FF6000">„vollkommen“</span> ist, ist <span style="color:#FF6000">„Da-Sein“ <span style="color:#00B000">|</span> „GOTT-Sein“ <span style="color:#00B000">|</span> „Göttlichkeit“</span> das <span style="color:#FF6000">„Wesen“</span> GOTTES ''':''' <span style="color:#4C58FF">— ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ —</span>. Im Unendlichen, GOTT, sind <span style="color:#FF6000">„Essenz“</span> und <span style="color:#FF6000">„Existenz“</span> koinzident ,eins‘, und daher untrennbar, und <span style="color:#FF6000">»''darum ist GOTT das einzige ‚Sein’, das notwendig an sich ‚da‘ ist''«</span> ''':''' <span style="color:#00B000">(ABU ALI SINA alias AVICENNA — Muslim)</span>. Der <span style="color:#00B000">(gedachte)</span> ‚Eigenschafts-Begriff‘ <span style="color:#FF6000">„Vollkommenheit (die Größe) GOTTES“</span>, <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, <span style="color:#00B000">(‚Perfektion‘, die unbegrenzte Summe aller ‚positiven Eigenschaften‘ in GOTT)</span> schließt koinzident die ‚Eigenschaft’ <span style="color:#FF6000">„notwendige Existenz für uns“</span> mit ein ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ —</span>. GOTT wäre nicht <span style="color:#FF6000">„vollkommen“</span>, wenn er nicht auch real für uns ‚da‘ wäre, wenn er nicht ,immer schon’ <span style="color:#FF6000">„existierte“</span>. ‚Sein’ ist <u>mehr</u> als ‚Nicht-Sein’. ,Sein’, bzw. ,Existenz’ gehört zu den ,Transzendentalia’ in GOTT. Das sind die <span style="color:#00B000">(ultimativen)</span> ,Wesenseigenschaften’ in GOTT. Der unbegrenzt Unendliche, GOTT, ist daher das <span style="color:#FF6000">»''vollkommenste Wesen, über das nichts ,Größeres‘ d.h. Vollkommeneres <u>mehr</u> ‚gedacht‘ werden kann''«</span> ''':''' <span style="color:#00B000">(ANSELM von Canterbury — Christ)</span>. Der ‚Begriff’ <span style="color:#FF6000">„Perfektion GOTTES“</span>, <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, schließt koinzident das <span style="color:#FF6000">„notwendige Dasein GOTTES“</span>, <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x'''‘</span> —, für uns mit ein, ohne einen zeitlichen Anfang und ohne ein zeitliches Ende. Das ist die ‚zeitlos-ewige‘, an sich absolute, und <span style="color:#FF6000">„für uns notwendige Existenz GOTTES“</span> ''':''' <span style="color:#4C58FF">— ‚'''Gx→E'''<sub>not</sub>'''x'''‘ —</span> ''':''' <span style="color:#00B000">(Das ist ein ,regulär‘-mögliches Korollar im 2. Beweisgang aus Term :16: ''':''' <span style="color:#4C58FF">— ‚'''Gy→Yy'''‘ —</span>, mit der <span style="color:#4C58FF">[ Instanz(Y:=E<sub>not</sub>) ]</span>, und der <span style="color:#4C58FF">[ FUB(y:=x) ]</span>; und auch ein ,regulär‘-mögliches Korollar im 3. Beweisgang ''':''' entsprechend der <span style="color:#FF6000">„logischen Implikation”</span> :: <span style="color:#4C58FF">[├ A ├ B ╞ A → B ]</span> von Term :01: <span style="color:#4C58FF">— ‚'''Gx'''‘ — </span> und Term :05: <span style="color:#4C58FF"> —‚'''E'''<sub>not</sub>'''x'''‘ —</span> aus diesem Beweisgang. In Worten ''':''' <span style="color:#FF6000">»</span>''Angenommen, '' <span style="color:#4C58FF">— ‚'''x'''‘ —</span> ''steht für den GOTT der Christen'' ''':''' <span style="color:#4C58FF">— ‚'''G'''‘ — </span>, ''dann existiert dieser GOTT'', <span style="color:#4C58FF">— ‚'''x'''‘ —</span>, ''für uns notwendig'', <span style="color:#4C58FF">— <sub>not</sub> —</span> <span style="color:#FF6000">«</span>.)</span> Der Unendliche, GOTT, ist <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>''Struktur''«</span> unserer ‚vergänglichen‘, ,endlichen‘ Welt, welche prinzipiell vom dreidimensionalen Raum und von der unwiederbringlich ‚vergehenden‘ Zeit geprägt ist. Der ,GOTT der Christen‘ ist <span style="color:#FF6000">»''unabhängig''«</span> von dieser <span style="color:#FF6600">„vergehenden Raum-Zeit“, — »''jenes rätselhafte und anscheinend in sich widersprüchliche Etwas''« <span style="color:#00B000">(GÖDEL)<ref>Kurt GÖDEL, ‚''<span style="font-family: Times;"><big>Eine Bemerkung über die Beziehungen zwischen der Relativitätstheorie und der idealistischen Philosophie‘</big></span>'', in P.A.SCHILPP (Hg.): ‚''<span style="font-family: Times;"><big>Albert Einstein, Philosoph und Naturforscher‘</big></span>'', Seite 406</ref></span> —</span>. Ohne ‚Zeit‘ gibt es keinen zeitlichen Unterschied zwischen ‚Ursache‘ und ‚Wirkung‘, <span style="color:#00B000">(beides ist zeitlos ,eins‘)</span>, und so ist der zeitlos-ewige GOTT, der <span style="color:#FF6000">»''notwendig aus sich ,existiert‘'' «</span> ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ — </span>, <span style="color:#FF6000">„unverursacht“ <span style="color:#00B000">|</span> „ursprungslos“</span> für uns immer schon ‚da‘ ''':''' <span style="color:#00B000">(GÖDEL — ohne religiöses Bekenntnis)</span>. Mit dem GÖDEL-Kalkül ist die <span style="color:#FF6000">„Rede von GOTT“</span> auf eine ‚vernünftige Basis‘ gestellt worden, und ist somit für jeden Menschen nachvollziehbar, <span style="color:#FF6000">»''rein verstandesmäßig, (ohne sich auf den Glauben an irgendeine Religion zu stützen)''«</span>, wie obige Beispiele zeigen. '''Resümee :''' Das GÖDEL-Kalkül zeigt mit <span style="color:#FF6000">»''mathematischer Evidenz''«</span>, was notwendig folgt, wenn die Axiome ‚wahr‘ sind, <span style="color:#00B000">(die Axiome bilden formal-syntaktisch <span style="color:#FF6000">»''die theologische Weltanschauung''«</span> ab)</span>, unter der Voraussetzung, dass die Axiome <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>'' Struktur''«</span> unserer Welt sind. Die ,Verifikation‘ der Axiome und Definitionen von GOTT und seiner Vollkommenheiten gelingt GÖDEL, — entsprechend seiner Unabhängigkeits-Bedingung —, durch den Aufweis ihrer Widerspruchsfreiheit ''':''' sie sind somit ,wahr‘ und, — im Kontext einer <span style="color:#FF6000">»''theologischen Weltanschauung''«</span> —, auch ,annehmbar‘ in unserer ,realen‘ Welt ''':''' <span style="color:#00B000">(siehe Anhang, 2. Beweisgang und Anmerkung-2)</span>. Er vermeidet damit den Fehler, der immer wieder im Diskurs über Gottesbeweise gemacht wird ''':''' GOTT mit seinen Geschöpfen zu vergleichen. Diese logisch-philosophische Rede von GOTT <span style="color:#00B000">(<span style="color:#FF6000">»''ohne sich auf den Glauben an irgendeine Religion zu stützen''«</span>)</span> hat eine <u>mehr</u> als zweitausendjährige Tradition hinter sich. Der <span style="color:#FF6000">„100-Taler-Gott“</span> des Philosophen KANT, hat heute, nachdem der Logiker und Systemtheoretiker GÖDEL sein System vorgelegt hat, an ‚Strahlkraft‘ verloren. Kurt GÖDEL ''':''' ::<span style="color:#FF6000">» ''Die theologische Weltanschauung'', <span style="color:#00B000">[ dass GOTT für uns immer schon ‚da‘ ist ]</span>, ''ist rein verstandesmäßig mit allen bekannten Tatsachen durchaus vereinbar'';«</span> <span style="color:#00B000">[ d.h. sie ist das ,Resultat‘ der, — vom Glauben geleiteten —, ‚theoretischen Vernunft‘, alias ‚reinen Vernunft‘, und nicht bloß das ‚Postulat‘ einer ‚praktischen Vernunft‘, wie KANT meint ]. <span style="color:#FF6000">»''Der'' <span style="color:#00B000">[ christliche ]</span> ''Glaube ist die ‚Pupille‘ im ‚Auge‘ unseres Verstandes.''«</span> (Heilige KATHARINA von Siena, Lehrerin der Kirche, Patronin Europas<ref>vgl. <span style="font-family: Times;"><big>''Gebet 7 ‚Für die neuen Kardinäle‘, Rom, 21. Dezember 1378,''</big></span> aus <span style="font-family: Times;"><big>''Caterina von Siena ,Die Gebete‘.''</big></span> Kleinhain 2019, online: https://caterina.at/werke/gebete/gebete-detailansicht/gebet-7.html</ref> )</span> Der sonst so rationale KANT, hier doch etwas emotionell, <span style="color:#00B000">(als wolle er die Ergebnisse im GÖDEL-Kalkül nicht wahr haben, die belegen, dass er sich bei GOTT geirrt, und die Funktion des christlichen Glaubens für die Philosophie falsch eingeschätzt hat)</span> ''':''' ::<span style="color:#FF6000">»</span> ''Es war etwas ganz Unnatürliches und eine bloße Neuerung des Schulwitzes, aus einer ganz willkürlich entworfenen Idee das Dasein des ihr entsprechenden Gegenstandes selbst ausklauben zu wollen''<ref>vgl. ‚''<span style="font-family: Times;"><big>Kritik der reinen Vernunft</big></span>''‘, Seite 403. https://www.korpora.org/kant/aa03/403.html</ref>.<span style="color:#FF6000">«</span> Für KANT, für die Scholastiker, <span style="color:#00B000">(und auch für uns)</span>, ist es natürlich ‚logisch‘, dass aus einem als ‚möglich’ gedachten Begriff, <span style="color:#FF6000">»</span>''aus einer ganz willkürlich entworfenen Idee''<span style="color:#FF6000">«</span>, keine Existenzaussage abgeleitet werden kann. <span style="color:#00B000">(Aus dem bloß gedachten Begriff ,goldene Berge‘ folgt natürlich nicht, dass es solche in Wirklichkeit auch gibt.)</span> In der philosophisch-<span style="color:#4C58FF">,theologischen’</span> Tradition, die von ARISTOTELES herkommt, ist der Begriff <span style="color:#FF6000">»''GOTT''«</span> jedoch von allen anderen Begriffen so verschieden, so dass für GOTT diese Logik KANTS nicht mehr gilt. GOTT ist ,unvergleichlich‘ und ,einzigartig‘. Dazu der Kommentar von HEGEL ''':''' ::<span style="color:#FF6000">»''Wenn KANT sagt, man könne aus dem Begriff'' <span style="color:#00B000">[ ‚GOTT‘ ]</span> ''die Realität nicht ,herausklauben‘, so ist da der Begriff als endlich gefasst''.« <span style="color:#00B000">[ In der Endlichkeit unserer Welt trifft die Logik KANTS zu, dass dem ‚Begriff‘ nicht ,notwendig‘ das ‚Sein‘ folgt, denn es gibt in ihr die ,Lüge‘, die das ,Wirklich-Sein‘ im Begriff bloß behauptet, ohne dass es ,in Wirklichkeit‘ zutrifft, was sie behauptet. Es gilt hier nach KANT ''':''' »''Sein ist kein reales Prädikat''«. Somit ist ]</span> »''...der Begriff ohne'' <span style="color:#00B000">[ reales ]</span> ''Sein ein Einseitiges und Unwahres, und ebenso das Sein, in dem kein Begriff ist'', <span style="color:#00B000">[ ist ]</span> ''das begrifflose Sein,'' <span style="color:#00B000">[ d.i. das relative ,Noch-Nicht-Begriffene‘ ]</span>.'' Dieser Gegensatz, der in die Endlichkeit fällt'' <span style="color:#00B000">[ im Endlichen zutrifft ]</span>, ''kann bei dem Unendlichen, GOTT, gar nicht statthaben''<ref>Georg Wilhelm Friedrich HEGEL, ‚<span style="font-family: Times;"><big>''Ausführungen des ontologischen Beweises''</big></span>‘ in den ‚<span style="font-family: Times;"><big>''Vorlesungen über die Philosophie der Religion vom Jahr 1831''</big></span>‘ . Hamburg 1966, Seiten 175 bzw. 174</ref>; <span style="color:#00B000">[ denn ,Begriff‘, bzw. ,Denken‘ und ,Sein‘ sind in dem Unendlichen, GOTT, untrennbar und real immer dasselbe. Auf Grund dieser ontologischen Identität ,personifiziert‘ und ,repräsentiert‘ GOTT die ,Wahrheit‘ ''':''' GOTT ist die ,Wahrheit‘. In GOTT, dem <span style="color:#FF6000">„Schöpfer der Welt“</span>, folgt dem ,Begriff‘ immer ,notwendig‘ das ,Sein‘ ''':''' <span style="color:#CC66FF">»''GOTT sprach ''':''' Es werde ,Licht‘. Und es wurde Licht''«, <small>{{Bibel | Genesis |1|3|EU}}</small>;</span> oder auch ''':''' <span style="color:#CC66FF">»''Der Herr sprach, und sogleich geschah es; er gebot, und alles war da''«,</span> <small>{{Bibel | Psalm |33|9|EU}}</small>.]</span>«</span> Das Entscheidende bei der <span style="color:#4C58FF">„theologischen“</span> Interpretation des GÖDEL-Kalküls ist, dass der <span style="color:#00B000">(Begriff)</span> GOTT der Christen ''':''' <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, nicht auf die Ebene seiner ,endlichen‘ Geschöpfe und unserer Welt gestellt wird, <span style="color:#00B000">(d.i. das ‚Universum‘ im ,Urknall‘, die ‚100-Taler‘, ein ‚Tsunami‘, auch ,einfache Modelle‘ von unserer Welt, etc.)</span>, und damit verglichen wird, sondern, dass der GOTT der Christen in seiner Einzigartigkeit und Besonderheit als <span style="color:#FF6000">»''der Unendliche''«</span> belassen und als <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>''Struktur''«</span> unserer vergänglichen Welt, — als <span style="color:#FF6000">»''der Unvergleichliche''«</span> —, verstanden wird. <span style="color:#00B000">(Alle Kritiken des sog. ,ontologischen‘ Gottesbeweises übersehen die Einzigartigkeit und Besonderheit des <span style="color:#FF6000">»''Unendlichen''«</span>, und/oder wollen diese nicht ,wahr‘ haben.)</span> Auch THOMAS von Aquin ,verortet‘ den GOTT ANSELMS, — in seiner Kritik an dessen Theorem —, irrtümlich unter die ,Dinge‘ der uns umgebenden ,Natur‘, wenn er sagt ''':''' GOTT <span style="color:#FF6000">„<span style="font-family: Times;"><big>esse in rerum natura</big></span>“</span>, d.h. wörtlich, dass der GOTT ANSELMS <span style="color:#FF6000">»</span>''in der Natur der Dinge'' <span style="color:#00B000">(unserer Welt)</span> ''existiert''<span style="color:#FF6000">«</span>, und verkennt somit, — wie nach ihm auch KANT —, die ,Unvergleichlichkeit‘ GOTTES, <span style="color:#00B000">(vgl. STh I q.2 a.1 ad 2<ref>„Deus … illud quo maius cogitari non potest; non tamen propter hoc sequitur quod intelligat id quod significatur per nomen, esse in rerum natura; sed in apprehensione intellectus tantum.“ ——— »''GOTT ist'' (nach ANSELM) ''der, über den Größeres nicht mehr gedacht werden kann. Aber nicht deswegen, weil er'', (der Narr von Psalm 14.1, den ANSELM zitiert), ''das versteht, was durch diesen Namen,'' (d.h. mit dem Begriff ,GOTT‘, als der ,Größte‘, im Theorem ANSELMS), ''bezeichnet wird, folgt daraus'', (wie ANSELM meint), ''dass er auch versteht, dass er'', (der GOTT ANSELMS), ''auch in der ,Natur‘ der Dinge'' (unserer Welt) ''existiert''; <span style="color:#00B000">[ was ANSELM so nie gesagt hat ]</span>. ''Daraus folgt nur, dass er'', (als ,GOTT‘), ''bloß in der Auffassung seines Verstandes'', (d.h. nur im Denken des Narren als ,Begriff‘), ''existiert.''« ——— Hier ,verortet‘ THOMAS einerseits den unendlichen GOTT, von dem das Theorem ANSELMS spricht, irrtümlich unter die endlichen Dinge der uns umgebenden ,Natur‘, was sachlich dem theologischen Theorem der Unvergleichlichkeit GOTTES widerspricht, der nicht unter die Dinge unserer Welt eingereiht werden darf. Anderseits verliert er dadurch auch den ,Blick‘ für die Außerordentlichkeit und Besonderheit GOTTES, dessen Natur völlig verschieden und unabhängig von der ,Natur‘ unserer raum-zeitlichen Welt ist. GÖDEL beweist jedoch, mit ANSELM, weil es notwendig, ohne Widerspruch, (»''bloß in der Auffassung unseres Verstandes''«), möglich ist, dass GOTT existiert, ist es korrekt, daraus auch mit Notwendigkeit zu folgern, dass der Glaube des Erzbischofs ANSELM, und der Glaube seiner Anvertrauten, von der Wirklichkeit GOTTES, widerspruchsfrei, logisch richtig, und damit sinnvoll ist; denn Möglichkeit und Wirklichkeit sind in GOTT koinzident ,eins‘. Das ist das Privilegium GOTTES allein, der einzigartig und unvergleichlich ist. Damit zeigt er auf, dass THOMAS die Unvergleichlichkeit und Einzigartigkeit GOTTES in seinem Vorhalt nicht bedacht hat; und außerdem ANSELM missverstanden hat.</ref>)</span>; jedenfalls hier in der Auseinandersetzung mit ANSELM. Dagegen spricht ANSELM im ,''<span style="font-family: Times;"><big>Proslogion</big></span>''‘, Seite 85f, nur von einem <span style="color:#FF6000">„<span style="font-family: Times;"><big>esse et in re</big></span>“</span> GOTTES, d.h. dass GOTT ,auch in Wirklichkeit existiert‘, <span style="color:#FF6000">„<span style="font-family: Times;"><big>quod maius est</big></span>“</span>, was ,größer‘, bzw. ,mehr‘ ist, als <span style="color:#FF6000">„<span style="font-family: Times;"><big>esse solo in intellectu</big></span>“</span>, als nur ,im Verstand zu sein‘; wobei die ,zeitlose-überzeitliche‘ Wirklichkeit, <span style="color:#00B000">(Natur)</span>, GOTTES jedoch völlig verschieden und <span style="color:#FF6000">»''unabhängig von der zufälligen''«</span> Wirklichkeit <span style="color:#00B000">(die ,Natur‘)</span> der ,raum-zeitlichen‘ Welt der Dinge ist. Daher ist sie mit dieser auch nicht vergleichbar. GOTT ist <span style="color:#FF6000">„vollkommen“</span> und alle <span style="color:#FF6000">„Vollkommenheiten“</span> in GOTT, <span style="color:#00B000">(die ultimativen ,Transzendentalia‘)</span>, sind koinzident ,eins‘, — ,fallen <span style="color:#FF6000">„notwendig“</span> perspektivisch in eins zusammen‘, und sind daher konvertierbar. Darum ist auch die Wirklichkeit, <span style="color:#00B000">(Natur)</span>, GOTTES ,einzigartig‘ und ,unvergleichlich‘. Mit Korollar-3 ist die Exklusivität und Außerordentlichkeit GOTTES definitiv im Kalkül ,bewiesen‘ <span style="color:#00B000">( ╞ )</span>. Der abendländische Monotheïsmus ist somit eine ,logische‘ Konsequenz aus den GÖDEL-Axiomen. <span style="color:#00B000">(Das <span style="color:#4C58FF">„theologische“</span> Theorem von der ,Einzigartigkeit‘ und Exklusivität GOTTES, d.h. hier im Kontext ''':''' die exklusive Einheit von GOTT und Mensch in JESUS CHRISTUS; von Vater, Sohn und Geist im <span style="color:#4C58FF">„Dreifaltigen“</span>; von Essenz und Existenz, von Begriff und Sein, von Ursache und Wirkung, von Subjekt und Objekt, von Möglichkeit und Wirklichkeit, und die unbegrenzte Summeneinheit und Koinzidenz der unendlichen Transzendentalien in GOTT, ist, — mit HEGEL —, die Voraussetzung und Bedingung jeder Philosophie ''':''' <span style="color:#FF6000">»''Die Einheit muss am Anfang der Philosophie stehen''«</span>; und ist zugleich auch ihr gesuchtes und bewiesenes Endergebnis und Ziel ''':''' <span style="color:#FF6000">»''Diese Einheit muss auch das Resultat der Philosophie sein''«</span><ref>https://hegel-system.de/de/gottesbeweis.htm#hegels-kritik-an-kant</ref>, was hier im GÖDEL-Kalkül ,logisch‘ mit Korollar-3 verifiziert wird ''':''' <span style="color:#4C58FF">— ‚'''□(∃xGx ∧ ∀y(Gy→x=y))'''‘ —</span> ''':''' <span style="color:#FF6000">»''GOTT ist exklusiv einzigartig''«</span>.)</span> Die Einzigartigkeit GOTTES bedingt die Koinzidenz, den inneren Zusammenhang aller seiner Vollkommenheiten und Zuschreibungen, <span style="color:#00B000">(Axiom-2)</span>, d.h. ihr paarweise, perspektivisches ,Zusammenfallen in eins‘ im Unendlichen, GOTT. ——— Aus der Notwendigkeit aller positiven Eigenschaften und Zuschreibungen, <span style="color:#00B000">(d.h. aus den, an sich, notwendigen, ultimativen Transzendentalien, Axiom-4)</span>, die in GOTT paarweise, als ,Wesenseigenschaften‘ koinzident ,eins‘ sind, <span style="color:#00B000">(Definition-2)</span>, ist die Einzigkeit GOTTES für uns erschließbar, <span style="color:#00B000">(Korollar-3)</span>. Axiom-4 ist die erste, ,modal‘ <span style="color:#FF6000">„notwendige“</span>, d.h. die transzendentale Voraussetzung für Korollar-3. Wenn im Korollar-3 das <span style="color:#4C58FF">— ‚'''x'''‘ —</span> z. B. für GOTT, dem ,Vater‘ der Christen, und das <span style="color:#4C58FF">— ‚'''y'''‘ —</span> für GOTT, dem ,Sohn‘, d.h. für ,JESUS CHRISTUS‘ steht, oder für den ,HEILIGEN GEIST‘, <span style="color:#00B000">(den ,Dreifaltigen GOTT‘ der Christenheit)</span>; oder auch für die Gottesbezeichnung ,GOTT-ADONAI‘ der Juden, oder für die Gottesbezeichnung ,ALLAH‘ der Muslime steht, dann weist dieses Korollar, für <span style="color:#4C58FF">— ‚'''∀y'''‘ —</span>, mit der ,ontologischen Identität‘ ''':''' <span style="color:#4C58FF">— ‚'''x=y'''‘ —</span>, auf die ,Koinzidenz‘ des <span style="color:#4C58FF">„Dreifaltigen“</span>, und auf die <span style="color:#4C58FF">„Hypostatische Union“</span> der Naturen von GOTT und Mensch in JESUS CHRISTUS, bzw. auch auf den inneren Zusammenhang der drei Buch-Religionen hin. ===<div class="center"><span style="color:#660066">Anhang : das GÖDEL-Kalkül</span></div>=== In der ,Legende zum GÖDEL-Kalkül‘ wird an einige Basics erinnert, und diese für die operative Praxis im anstehenden Kalkül, mit Hilfe von logischen Meta-Terme, adaptiert. Zusätzliche, notwendige Regeln und Gesetze werden dann ,benannt‘, wenn sie in der Kalkül-Durchführung auftreten. {|class="wikitable" |- ! <div class="center"><span style="color:#660066">Legende zum GÖDEL-Kalkül</span></div> |- | <small> <math>\begin{align} {\color{blue}\text{ ◇}} \text{ :: konsistent ↔ widerspruchsfrei ↔ möglich ↔ denkbar, } & {\color{blue}\text{ □}} \text{ :: notwendig ↔ wirklich, für jede mögliche Welt ↔ exklusiv} \\ \text{logischer Meta-Term ::} {\color{blue}\text{ [ A ├ B ]}} \text{ ::} & \text{ „aus A folgt im Kalkül ,regulär‘ (├ ) B.“} \\ \text{ A, B sind Aussagen über Eigenschaften, (A ist keine Eigenschaft);} & \text{ die Aussage, z.B. in der Kalkül-Zeile 10, wird als ,Term :10:‘ bezeichnet} \\ {\color{blue}\text{ AE}} \text{ ::} & \text{ Argument Einführung, Prämisse, Postulat } \\ {\color{blue}\text{ Xx}} \text{ ::} & \text{ „X ist eine Eigenschaft der Individuum-Variable x.“ } \\ {\color{blue}\text{ ¬PX}} \text{ ::} & \text{ „X ist keine positive Eigenschaft, ist keine Perfektion, ist nicht vollkommen.“ } \\ {\color{blue}\text{ Instanz(X := Y)}} \text{ ::} & \text{ Substitution der Eigenschaft X durch die ,bestimmte‘ Eigenschaft Y } \\ \text{ (Eine ,Instanz‘ ist ein Exemplar aus einer Menge gleichartiger Dinge;} & \text{ hier die ,bestimmte‘ Eigenschaft Y, als Ersatz für das unbestimmte X.) } \\ {\color{blue}\text{ FUB(x := y)}} \text{ ::} & \text{ Freie-Um-Benennung der Individuum-Variable x in y } \\ \text{ ,modal‘-frei gewählte Kalkül-Prämisse ::} {\color{blue}\text{ Gx}} \text{ ::} & \text{ „Die Variable x steht für den GOTT der Christen.“ } \\ {\color{blue}\text{ [ G(y) ├ ⱯyG(y) ]}} \text{ ::} & \text{ All-Operator-Einführung der Variable y für GOTT } \\ \text{ „Angenommen, die Variable y steht für GOTT, dann } & \text{folgt ,regulär‘ (├ ), dass auch jedes y im Kalkül für GOTT steht.“}\\ {\color{blue}\text{[ ⱯXA(X) ├ A(X) ]}} \text{ ::} & \text{ All-Operator-Beseitigung für die substituierte Eigenschaft X } \\ \text{ „Wenn X durch eine ,bestimmte‘ Eigenschaft ,instanziiert‘ ist oder } & \text{wird, dann kann der All-Operator von X ,regulär‘ (├ ) beseitigt werden.}\\ {\color{blue}\text{ KOMM(↔)}} \text{ ::} & \;{\color{blue}\text{[ (A↔ B) ↔ (B ↔ A) ]}} \text{ :: Kommutativgesetz für ( ↔ )}\\ {\color{blue}\text{ DIST(□∧)}} \text{ ::} & \;{\color{blue}\text{[ (□A ∧ □B) ↔ □(A ∧ B) ]}} \text{ :: Distributivgesetz für (□∧ )} \\ \text{ (hypothetischer Syllogismus, häufige logische Schlussregel) ::} & \;{\color{blue}\text{[ A → B, A ├ B ]}} \text{ :: (Modus ponendo ponens) :: Abtrennregel.} \\ \text{ „Wenn es wahr ist, dass aus A ein B folgt, und wenn A wahr ist, } & \text{dann ist im Kalkül ,regulär‘ (├ ) ableitbar, dass auch B wahr ist.“} \\ \text{ (negativer hypothetischer Syllogismus) ::} & \;{\color{blue}\text{[ A → B, ¬B ├ ¬A ]}} \text{ :: (Modus tollendo tollens)} \\ \text{ „Wenn es wahr ist, dass aus A ein B folgt, und wenn B falsch ist, } & \text{dann ist im Kalkül ,regulär‘ (├ ) ableitbar, dass auch A falsch ist.“} \\ \text{''KONDITIONALER BEWEIS“ ::} & \;{\color{blue}\text{[ ├ A ├ B ╞ A → B ]}} \text{ :: (logische Implikation)} \\ \text{ „Angenommen, A ist ,regulär‘ Axiom oder Prämisse, und B ist im } & \text{Kalkül ,regulär‘ abgeleitet, dann ist ,bewiesen‘ ( ╞ ) : A impliziert B, ist wahr.“} \\ \text{''INDIREKTER BEWEIS“ ::} & \;{\color{blue}\text{[ ├ ¬A → F ╞ A ]}} \text{ :: (Reductio ad absurdum)} \\ \text{ „Wenn im Kalkül aus ¬A ,regulär‘ eine Kontradiktion } & \text{F folgt, dann ist A ,bewiesen‘ ( ╞ ) : A ist ,wahr‘.“} \\ \end{align}</math> </small> |} A. FUHRMANN ''':''' <span style="color:#FF6000">»</span> ''Eine Prädikatenlogik zweiter Stufe ist eine Logik, in der die Quantoren auch Eigenschaftsausdrücke <span style="color:#00B000">(<span style="color:#FF6000">„Prädikate”</span>)</span> binden können''. <span style="color:#00B000">[ Die ,Prädikate‘ werden in einem Kalkül dieser Logik durch Definitionen ,bestimmt‘ ]</span>. ''Wir werden uns im folgenden recht frei einer dafür geeigneten formalen Sprache bedienen. Äußere Quantoren werden meist weggelassen und wir schreiben kurz'' <span style="color:#4C58FF">— ‚'''Xx'''‘ — </span> ''bzw.'' <span style="color:#4C58FF">— ‚'''PX'''‘ — </span> ''um auszudrücken, dass das Individuum'' <span style="color:#4C58FF">— ‚'''x'''‘ — </span> ''die Eigenschaft'' <span style="color:#4C58FF">— ‚'''X'''‘ — </span> ''hat, bzw. dass die Eigenschaft'' <span style="color:#4C58FF">— ‚'''X'''‘ — </span> ''die höherstufige Eigenschaft'' <span style="color:#4C58FF">— ‚'''P'''‘ — </span> ''<span style="color:#00B000">(für <span style="color:#FF6000">„positiv”</span>)</span> hat;'' <span style="color:#00B000"> [ wobei die Eigenschaft <span style="color:#4C58FF">— ‚'''P'''‘ — </span> als einzige im Kalkül ,unbestimmt‘ bleibt ]</span>. <span style="color:#FF6000">«</span><ref>A. FUHRMANN ‚''<span style="font-family: Times;"><big>‚G‘ wie Gödel. Kurt Gödels axiomatische Theologie</big></span>''‘, Seite 6, Anmerkung 3. Konform mit seinem Artikel in ‚''<span style="font-family: Times;"><big>Logik in der Philosophie</big></span>''‘ hg. v. P. SCHROEDER-HEISTER, W. SPOHN und E. OLSSON. 2005, Synchron, Heidelberg.</ref> Der All-Quantor für Eigenschaften, hier im GÖDEL-Kalkül der ,modalen‘ Prädikatenlogik zweiter Stufe, bindet die ,unbestimmte‘ Eigenschafts-Variable <span style="color:#4C58FF">— ‚'''X'''‘ —</span> ausschließlich nur in den Definitionen im 2. und 3. Beweisgang . <span style="color:#00B000"> (Im ersten Beweisgang gibt es keine Definition.)</span> Dieser All-Quantor wird dann jedes Mal in der Beweis-Durchführung durch die Substitution ''':''' <span style="color:#4C58FF"> [ Instanz(X:= ..) ]</span> mit ,bestimmte‘ Eigenschafts-Konstanten wie <span style="color:#4C58FF">— (X:= G) —</span>, bzw. <span style="color:#4C58FF">— (X:= ¬Y) —</span>, oder <span style="color:#4C58FF">— (X:= E<sub>not</sub>) —</span> ,regulär‘ <span style="color:#00B000">(├ )</span> beseitigt ''':''' <span style="color:#4C58FF"> [ ⱯXA(X) ├ A(X) ]</span>; wobei die Eigenschafts-Konstante im Kalkül entweder als Zwischenergebnis ,regulär‘ abgeleitet, <span style="color:#00B000">(,errechnet‘)</span>, oder mit einer Definition schon ,bestimmt‘ worden ist. Die spezifische ‚Eigenschaft‘ einer Eigenschaft wird hier, in der formalen Syntax der ,modalen‘ Prädikatenlogik zweiter Stufe, als eine tiefer gestellte Abkürzung <span style="color:#00B000">(als Index)</span> an ihre Trägereigenschaft angehängt, wie z. B. ‚wesentlich‘, bzw. ‚essentiell‘ durch <span style="color:#4C58FF"> — <sub>ess</sub> —</span>, oder ‚notwendig‘ durch <span style="color:#4C58FF"> — <sub>not</sub> —</span>. In der Definition-3 steht der Term ''':''' <span style="color:#4C58FF"> —‚'''E'''<sub>not</sub>'''x'''‘ —</span>, um auszudrücken, dass das Individuum <span style="color:#4C58FF">— ‚'''x'''‘ —</span> notwendig <span style="color:#4C58FF">— <sub>not</sub> —</span> die Eigenschaft ''':''' <span style="color:#4C58FF">— ‚'''E'''‘ —</span>, für ,Existenz‘, hat, d.h. <span style="color:#FF6000">»''das <span style="color:#4C58FF">‚'''x'''‘</span> existiert notwendig''«</span>. Der schon von GÖDEL indizierte Term ''':''' <span style="color:#4C58FF">—‚'''G'''<sub>ess</sub>'''x'''‘ —</span> kann gelesen werden als ''':''' <span style="color:#FF6000">»''Das Individuum <span style="color:#4C58FF">‚'''x'''‘</span> hat die Wesenseigenschaft, <span style="color:#4C58FF"> — <sub>ess</sub> — </span> ''':''' GOTT zu sein, <span style="color:#4C58FF">‚'''G'''‘ </span>''«</span>, statt der ,an sich‘ konformen, aber <span style="color:#4C58FF">„theologisch“</span> etwas ungenauen Formulierung ''':''' <span style="color:#FF6000">»''das'' <span style="color:#4C58FF">‚'''x'''‘</span> ''ist wesentlich göttlich''«</span>; oder mit der Voraussetzung ''':''' <span style="color:#4C58FF">— ‚'''Gx'''→'''G'''<sub>ess</sub>'''x'''‘ — </span> deutlicher und <span style="color:#4C58FF">„theologisch“</span> korrekt ''':''' <span style="color:#FF6000">»''Wenn'' <span style="color:#4C58FF">‚'''x'''‘</span> ''für den GOTT der Christen'', <span style="color:#4C58FF">‚'''G'''‘</span>, ''steht, dann ist GOTT-Sein'', <span style="color:#4C58FF">‚'''G'''‘</span>, <span style="color:#00B000">(,Existenz‘)</span> ''das Wesen dieses GOTTES'', <span style="color:#4C58FF">— <sub>ess</sub>‚'''x'''‘ —</span>, <span style="color:#00B000">(,Essenz‘)</span>«</span>; wobei, — entsprechend der ,methodologischen‘ Prämisse des Kalküls <span style="color:#00B000">(<span style="color:#4C58FF">— ‚'''Gx'''‘ — </span> ''':''' das <span style="color:#4C58FF">‚'''x'''‘</span> steht für den ,GOTT der Christen‘)</span> —, bei der Interpretation der Terme dieses besonderen Kalküls, die <span style="color:#4C58FF">„christliche Theologie”</span> für den Begriff <span style="color:#FF6000">„GOTT”</span>, Korrektur und die leitende Instanz ist. Dabei muss die Dreifach-Äquivalenz von <span style="color:#4C58FF"><span style="color:#4C58FF">— ‚'''G'''‘ — </span></span>berücksichtigt werden. Welche der drei Äquivalenzen, bzw. Lesearten von <span style="color:#4C58FF">— ‚'''G'''‘ — </span> bei einem bestimmten Term im Kalkül zulässig ist, muss <span style="color:#4C58FF">„theologisch”</span> überprüft und evaluiert werden. Bei manchen können sogar alle drei Lesearten <span style="color:#4C58FF">„theologisch”</span> zulässig sein. Warum es in der modalen Prädikatenlogik zweiter Stufe, im GÖDEL-System, ,Definitionen‘ gibt, erklärt GÖDEL formal-syntaktisch ''':''' <span style="color:#FF6000">»''Definitionen dienen ja nur der kürzeren Schreibwelse und sind daher prinzipiell überflüssig.''«</span> <span style="color:#00B000">(Aus der Anmerkung 6 in seinem Hauptwerk ''':''' ,''<span style="font-family: Times;"><big>Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme I</big></span>''‘.)</span> Für die <span style="color:#4C58FF">„theologische”</span> Interpretation und Hermeneutik seines Kalküls, sind die ,Definitionen‘ im GÖDEL-System jedoch wesentlich, und letztlich entscheidend. Erst dadurch wird sein Axiomensystem zur <span style="color:#4C58FF">„axiomatischen Theologie”</span>. GÖDEL gibt selbst den hermeneutischen Hinweis dazu, wenn er über den höherstufigen Eigenschaftsbegriff <span style="color:#FF6000">»''positiv''«</span> sagt, der nur ,indirekt‘ definiert wird, jedoch mit seinem gesamten Axiomensystem ''':''' <span style="color:#FF6000">»''Positiv bedeutet positiv im moralisch ästhetischen Sinne, (unabhängig von der zufälligen Struktur der Welt). Nur dann sind die Axiome wahr''.«</span> Die Deutung dieses ,höherstufigen‘ Begriffs als ein anderes Wort für <span style="color:#FF6000">„Transzendentalia“</span> ergibt sich aus der <span style="color:#4C58FF">„theologischen”</span> Evaluierung, d.h. der Einordnung des GÖDEL-Systems in die ,laufende‘ <span style="color:#FF6000">„Rede von GOTT“</span>, seit Menschen, sich über den Sinn der Welt und unseres Lebens in ihr, Gedanken machen. GOTT, der ,transzendent‘, — unabhängig —, zur Welt ist, ist Thema im Theorem ANSELMS, um das es ja im GÖDEL-Kalkül geht. Eine <span style="color:#4C58FF">„theologische”</span> Hermeneutik des GÖDEL-Systems ist daher legitim, die, als ein Bemühen um ein überzeugendes Verstehen, aus dem <span style="color:#4C58FF">„theologischen”</span> Vorwissen vieler Generationen schöpft. Um philosophische, und sogar <span style="color:#4C58FF">„theologische”</span> Theoreme exakt zu formulieren, und untersuchen zu können, hat der Ausnahmelogiker GÖDEL, im 20. Jahrhundert, ein Tor aufgestoßen, das uns ermöglichen kann, <span style="color:#FF6000">»''mathematisch evident''«</span>, und logisch objektiv nachprüfbar, in diesen Disziplinen zu argumentieren. Mit seiner modalen Prädikatenlogik zweiter Stufe, hat GÖDEL dem alten Wunsch eines Raimundus LULLUS, eines Gottfried Wilhelm LEIBNIZ, eines Immanuel KANT, und anderer, nach einer nachprüfbaren ,Universalsprache‘ in den Geisteswissenschaften, entsprochen; analog zur Mathematik, als Universalsprache in den Naturwissenschaften. Der sog. ,Theorembeweiser‘ der Wissenschaftler Christoph BENZMÜLLER und Bruno WOLTZENLOGEL-PALEO, mit Hilfe eines Computers, im 21. Jahrhundert, ist die kongeniale und logische Folge aus diesem Quanten-Schritt GÖDELS. In der folgenden Neu-Kalkülisierung, wird jeder einzelne operative Logik-Schritt des Kalküls in der '''linken Spalte''' nummeriert und als Term-Ergebnis angezeigt, und in der '''rechten Spalte''' werden die dafür benötigten Term-Komponenten und die dabei angewendeten Logik-Regeln und -Gesetze, mit Meta-Terme, dokumentiert. Am Anfang stehen die Ressourcen und das angestrebte Ziel des Beweisganges, <span style="color:#00B000">(das Theorem)</span>. Die GÖDEL Axiome und Definitionen, die Theoreme und Korollare, die Zwischenergebnisse, das Endergebnis, und die logischen Meta-Terme, <span style="color:#00B000">[ in eckigen Klammern ]</span>, werden kontextabhängig, <span style="color:#00B000">(durch ''„Benennungen“'')</span>, interpretiert, <span style="color:#00B000">(angezeigt durch ,Interpretationspunkte‘ — '''::''' —, falls nötig)</span>. Der jeweilige Beweisgang wird in den Anmerkungen ausführlich und umfassend kommentiert. Die Kalkül-Prämissen, <span style="color:#00B000">(<span style="color:#4C58FF">'''AE:'''</span> Argument Einführung)</span>, sind der modal-frei gewählte Einstieg in das Kalkül. Sie dokumentieren, zusammen mit dem angestrebten Beweis-Ziel, eine bestimmte Problemlage in einem externen Diskurs, der mit dem modalen Logik-System hier, formal-syntaktisch überprüft, und gegebenenfalls, verifiziert oder falsifiziert werden soll. Korollare sind einfache, logische Folgerungen aus dem jeweiligen Beweisgang. Theoreme und Korollare sind ,modal‘ gleichwertig. ====<div class="center"><span style="color:#660066">1. Beweisgang</span></div>==== {|class="wikitable" |- ! <div class="center"><span style="color:#660066">GÖDELS ontologischer Beweis für Theorem 1, (Möglichkeitsbeweis)</span></div> |- ! <span style="color:#00B000">''Terme der erweiterten Prädikatenlogik zweiter Stufe__________ „Benennungen“ und durchgeführte Logik-Operationen''</span> |- | <small> <math>\begin{align} \text{(Axiom 1.1)} & \quad P \neg X \;\Longrightarrow\;\ \neg P\ X\ & \ & \text{„Wenn die Negation von X positiv ist, dann ist die Eigenschaft X nicht positiv“} \\ \text{(Axiom 2)} & \quad (P\ X \wedge \;\Box \;\forall x (\ X\ x \Longrightarrow \ Y\ x)) \Longrightarrow \ P\ Y & \ & \text{„Die Eigenschaften Y, die aus einer positiven Eigenschaft X modal} \\ \text{ } & \quad & \ & \; \; \text{notwendig folgen, sind auch positive Eigenschaften“} \\ \text{(Axiom 3)} & \quad P\ G \ & \ & \text{„Göttlichkeit, GOTT-Sein, ist eine pos. Eigenschaft“ ↔ „GOTT ist perfekt“} \\ \text{[RK]} &\quad \Box\; \forall x A \;\Longrightarrow\;\Box\; \forall x B\; \text{ ├ }\;\Box \; \forall x (A \Longrightarrow\; B)\ & \ & \; \text{( :: Modales Prinzip KRIPKE-Γ-Ɐx)} \\ \text{(Theorem 1)} &\quad P\ X \;\Longrightarrow\; \Diamond \; \exists x \ X \ x \ & \ & \text{ (◇ :: „möglich“ ↔ „konsistent“ ↔ „denkbar“; □ :: „notwendig“) } \\ \text{ } & \text{„Positive Eigenschaften sind konsistent“} & \ & \Longleftarrow\; \text{was zu beweisen ist !} \\ \text{01} & \quad P\ X \ & \ & \text{ AE: „Angenommen, es gibt positive Eigenschaften, Perfektionen“} \\ \text{02} & \quad P\ X \;\Rightarrow\; \neg \Diamond \; \exists x \ X \ x \ & \ & \text{ AE: „Angenommen, positive Eigenschaften sind nicht konsistent“} \\ \text{03} & \quad (\neg x = .. )\ & \ & \text{ AE: „Es gibt die Eigenschaft, nicht mit x identisch zu sein“ :: (ungleich)} \\ \text{04} & \quad (\ x = .. )\ & \ & \text{ AE: „Es gibt die Eigenschaft, mit x identisch zu sein“ :: (gleich)} \\ \text{05} & \quad \text{ ├ }\; \neg \Diamond \; \exists x \ X \ x \ & \ & \text{:01:02:[Modus ponendo ponens] :: [A, A → B├ B] :AE:} \\ \text{06} & \quad \neg\neg \Box \neg \exists x \ X \ x \ & \ & \text{:05:[ ◇A ↔ ¬□¬A] :: (Modalregel)} \\ \text{07} & \quad \neg\neg \Box \neg\neg \forall x \neg X \ x \ & \ & \text{:06:[∃xA ↔ ¬Ɐx¬A] :: (Quantoren Regel)} \\ \text{08} & \quad \text{ ├ }\; \Box \; \forall x \neg X \ x \ & \ & \text{:07:NEG :: [¬¬A↔A] :: (Gesetz der Aussagenlogik)} \\ \text{09} & \quad \Box \; \forall x \neg X \ x \Leftrightarrow\ W & \ & \text{:02:08:[(:02:↔W) → (├:08:↔W)] :: (Kalkülregel)} \\ \text{10} & \quad \Box \; \forall x \ X \ x \Leftrightarrow\ F & \ & \text{:09:[(¬A↔W)↔(A↔F)] :: (Regel für Wahrheitswerte)} \\ \text{11} & \quad \Box \; \forall x (\neg x = x ) \Leftrightarrow \ F \; \ & \text{ } & \text{□ⱯxXx:03:Instanz(X:=(¬x=..)) ⇒ Kontradiktion !} \\ \text{12} & \quad \Box \; \forall x (\ X \ x \Rightarrow\; (\neg x = x)) & \text{ } & \text{:10:11:[(:10:↔F) → (:11:↔F)] :: „ex falso sequitur quotlibet“ :[RK]} \\ \text{13} & \quad \ P\ X \wedge \;\Box \; \forall x (\ X \ x \Rightarrow\; (\neg x = x)) & \ & \text{:01:12:[Konjunktion] :: [A, B ├ A∧B]} \\ \text{14} & \quad \ (P\ X \wedge \;\Box \; \forall x (\ X \ x \Rightarrow \; (\neg x = x))) \Rightarrow \; P (\neg x = .. ) & \ & \text{(A2):Instanz(Y:=( ¬x= ..)) :: (Substitution für Eigenschaften)} \\ \text{15} & \quad \ P (\neg x = .. ) & \ & \text{:13:14:[Modus ponens] :: (logische Schlussregel)} \\ \text{16} & \quad \ P (\neg x = .. )\;\Rightarrow\ \neg P (\ x = .. )\ & \ & \text{(A1.1):Instanz(X:=(x=..))}\\ \text{17} & \quad \neg P (\ x = .. )\ & \ & \text{:15:16:[Modus ponens]}\\ \text{18} & \quad \Box \; \forall x \ (x = x ) \Leftrightarrow \ W \; \ & \ & \text{□ⱯxXx:04:Instanz(X:=(x=..)) ⇒ Tautologie !} \\ \text{19} & \quad \Box \; \forall x (\ X \ x \Rightarrow\; (x = x)) & \text{ } & \text{:10:18:[(:10:↔F) → (:18:↔W)] :: „ex falso sequitur etiam verum“ :[RK]} \\ \text{20} & \quad \ P\ X \wedge \;\Box \; \forall x (\ X \ x \Rightarrow\; (x = x)) & \ & \text{:01:19:[Konjunktion] } \\ \text{21} & \quad \ (P\ X \wedge \;\Box \; \forall x (\ X \ x \Rightarrow\; (x = x))) \Rightarrow \ P (x = .. ) & \ & \text{(A2):Instanz(Y:=(x=..))} \\ \text{22} & \quad \ P (\ x = .. )\ & \ & \text{:20:21:[Modus ponens]}\\ \text{23} & \quad \text{ ├ }\; (\neg P (\ x = .. )\ \wedge \ P (\ x = .. )) \Leftrightarrow\ F & \ & \text{:17:22:[Konjunktion] ⇒ Kontradiktion !}\\ \text{24} & \quad \neg \Diamond \; \exists x \ X \ x \Rightarrow (\neg P (\ x = .. )\ \wedge \ P (\ x = .. )) & \ & \text{:05:23:[├A├B╞ A→B] :: ''KONDITIONALER BEWEIS''}\\ \text{25} & \quad \neg\neg \Diamond \; \exists x \ X \ x & \ & \text{:24:23:[Modus tollendo tollens] :: [A→B,¬B ├ ¬A]}\\ \text{26} & \quad \text{ ├ }\; \Diamond \; \exists x \ X \ x & \ & \text{:25:NEG; bzw. :05:23:[├¬A→F ╞ A] :: ''INDIREKTER BEWEIS''}\\ \text{27} & \quad \ P\ X \;\Longrightarrow\; \Diamond \; \exists x \ X \ x \ & \ & \text{:01:26:[├A├B ╞ A→B]} \\ \text{(Theorem 1)} & \;\text{„Positive Eigenschaften sind konsistent“} & \ & \Longleftarrow\; \text{was zu beweisen war !} \\ \text{28} & \quad \ P\ G \;\Longrightarrow\; \Diamond \; \exists x \ G \ x \ & \ & \text{:27:Instanz(X:=G) } \\ \text{29} & \quad \Diamond \; \exists x \ G \ x \ & \ & \text{(A3):28:[Modus ponens]} \\ \text{(Korollar 1)} & \;\text{„Das Dasein GOTTES ist definitiv denkbar“} & \ & \text{„Es ist widerspruchsfrei möglich, dass es GOTT gibt“} \\ \end{align}</math> </small> |} Anmerkung-1 ''':''' <span style="color:#00B000">(Der GÖDEL-Term <span style="color:#4C58FF">— ‚'''PX'''‘ —</span>, im Axiom-2 ist an sich überflüssig, da dieser hier als Prämisse :01: ohnehin ,angenommen‘ wird. Der Beweisgang kommt mit Axiom-2 auch ohne diesen GÖDEL-Term zum selben Ergebnis, und verkürzt sich damit sogar um zwei Schritte ''':''' Zeile 13 und Zeile 20 sind dann unnötig.)</span> Der Beweisgang geht mit Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, als Kalkül-Ressource, prinzipiell von der Existenz eines GOTTES aus. Mit der Prämisse :01: <span style="color:#00B000">(hier im 1. Beweisgang)</span> postuliert GÖDEL vorerst allgemein, dass es <span style="color:#FF6000">»''Vollkommenheit, d.h. positive Eigenschaften''«</span> in unserer Welt gibt ''':''' <span style="color:#4C58FF">— ‚'''PX'''‘ —</span>, ohne im Kalkül zu definieren, was darunter zu verstehen ist. Definiert wird dann <span style="color:#00B000">(im 2. Beweisgang)</span>, was eine <span style="color:#FF6000">»''wesentliche Eigenschaft''«</span> ist ''':''' <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>‘ —</span>, <span style="color:#00B000">(im Sinne von ,Transzendentalia‘)</span>; und mit Hilfe dieser Eigenschaft definiert GÖDEL <span style="color:#00B000">(im 3. Beweisgang)</span>, was eine <span style="color:#FF6000">»''notwendige Existenz''«</span> ist ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>‘ —</span>, die er <span style="color:#00B000">(im selben Beweisgang)</span> axiomatisch mit den <span style="color:#FF6000">»''positiven Eigenschaften in GOTT''«</span> gleich setzt ''':''' Axiom-5 ''':''' <span style="color:#4C58FF"> —‚'''PE'''<sub>not</sub>‘ —</span>. Erst im 2. Beweisgang wird mit Term :13:, nach einer <span style="font-family: Times;"><big>,Reductio ad absurdum‘</big></span>, definitiv bewiesen <span style="color:#00B000">( ╞ )</span>, dass die, von GÖDEL, hier postulierten, <span style="color:#00B000">(allgemeinen)</span>, positiven Eigenschaften, <span style="color:#4C58FF">— ‚'''PX'''‘ —</span>, tatsächlich auch in GOTT <span style="color:#FF6000">»''positive Eigenschaften''«</span>, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, sind; <span style="color:#00B000">(das sind die ultimativen ,Transzendentalia‘ in GOTT)</span>. Jetzt aber muss vorerst der ,Wunsch‘, bzw. die LEIBNIZ-Frage beantwortet werden ''':''' Ob, mit <span style="color:#FF6000">»''mathematischer Evidenz''«</span>, <span style="color:#FF6000">»''GOTT''«</span> ,möglich‘ ist, der, nach traditioneller Auffassung, <span style="color:#FF6000">»''ein Wesen von äußerster Größe und Vollkommenheit'' <span style="color:#00B000">[ ist ]</span>, ''das alle Grade derselben in sich schließt''«</span>, <span style="color:#00B000">(nach LEIBNIZ; was GÖDEL mit Definition-1 ,abbildet‘)</span>. Wenn man also beweisen will, dass die Existenz eines solchen ''<span style="color:#FF6000">»GOTTES«</span>'' ,möglich‘ sein soll, dann muss man beweisen, dass dieses postulierte System der <span style="color:#FF6000">»''positiven Eigenschaften in GOTT''«</span> möglich und formal ,widerspruchsfrei‘ ist. Das Ergebnis des 1. Beweisganges, das ,Theorem-1‘, <span style="color:#00B000">(,Erster Satz‘)</span>, fasst A. FUHRMANN zusammen als ''':''' <span style="color:#FF6000">»''Positive Eigenschaften sind konsistent''«</span>. Wenn sie nicht konsistent wären, käme es zu unlösbaren Widersprüchen, <span style="color:#00B000">(Term :24:)</span>. Term :27: ,besagt‘ ''':''' <span style="color:#FF6000">»''Es ist definitiv, d.h. ohne Widerspruch möglich, dass es positive Eigenschaften gibt''«</span>; denn die Behauptung, es sei nicht möglich, dass es positive Eigenschaften, <span style="color:#00B000">(das sind die ,Transzendentalia‘)</span>, in unserer Welt gibt, führt zu einem Widerspruch, und ist daher falsch und ,unlogisch’. Einmal Axiom-1 und zweimal Axiom-2, <span style="color:#00B000">(das die Gleichwertigkeit aller positiven Eigenschaften nachdrücklich klarstellt)</span>, sichern hier die Konsistenz <span style="color:#FF6000">»''aller positiven Eigenschaften in der Welt'', <span style="color:#00B000">[ die ,Transzendentalien‘ ]</span>, ''und damit auch die, die in GOTT sind''«</span>. <span style="color:#00B000">(Der 2. Beweisgang bestätigt, dass es in GOTT tatsächlich positive Eigenschaften gibt.)</span> Die ,Gleichwertigkeit‘ aller Transzendentalia, <span style="color:#00B000">(ihre ,Äquivalenz‘)</span>, ist formal-syntaktisch daran erkennbar, dass die beiden Eigenschafts-Variablen <span style="color:#4C58FF">— ‚'''X'''‘ —</span> und <span style="color:#4C58FF">— ‚'''Y'''‘ —</span> im Axiom-2 für beliebige, unterschiedliche ,positive‘ Eigenschaften gegenseitig austauschbar, <span style="color:#00B000">(,konvertierbar‘)</span>, sind. Das heißt, dass beliebige, unterschiedliche ,positive‘ Eigenschaften, für die diese Variablen stehen, sich paarweise, wechselseitig ,implizieren‘, einschließen, und damit notwendig voneinander abhängen, d.h. koinzident ,eins‘ sind, konvertierbar, und somit gleichwertig sind; entsprechend dem Theorem von den Transzendentalia. Zu Term :29:, dem Korollar zu Theorem-1, notiert GÖDEL am 10. Feb. 1970, <span style="color:#00B000">(übersetzt von Joachim BROMAND)</span> ''':''' <span style="color:#FF6000">»''◇∃xG(x) besagt, dass das System aller positiver Eigenschaften kompatibel ist'',</span> <span style="color:#00B000">[ d.h. miteinander verträglich, weil ohne Widersprüche ].</span> <span style="color:#FF6000">''Dies ist ,wahr‘ auf Grund von Axiom-2,'' <span style="color:#00B000">[ weil alle positiven Eigenschaften, d.h. die Transzendentalien, koinzident gleichwertig und konvertierbar sind ]</span>.«</span> Darum ist es definitiv ,möglich‘, dass es diesen GOTT gibt, der <span style="color:#FF6000">»''alle Grade der Vollkommenheit in sich schließt''«</span> und <span style="color:#FF6000">»''über dem ,Größeres‘ nicht mehr gedacht werden kann''«</span>, und, in weiterer Konsequenz, ist der GOTT-Glaube deshalb ,notwendig‘ widerspruchsfrei und sinnvoll, nach Theorem-3 ''':''' <u>Wenn</u> es ,ohne Widerspruch‘ ''<span style="color:#FF6000">»möglich, bzw. denkbar«</span>'' ist, dass es ''<span style="color:#FF6000">»GOTT«</span>'' gibt, <u>dann</u> folgt daraus ''<span style="color:#FF6000">»notwendig«</span>'' ''':''' es ist auch ,widerspruchsfrei‘, wenn man als Voraussetzung ,annimmt‘, dass es ''<span style="color:#FF6000">»GOTT wirklich, für jede mögliche Welt«</span>'' gibt ''':''' Term :11: im 3. Beweisgang. Der Wenn-Satz ist hier mit Korollar-1 bewiesen; der Dann-Satz wird im 3. Beweisgang bewiesen <span style="color:#00B000">( ╞ )</span>, d.i. die Widerspruchsfreiheit und Sinnhaftigkeit des GOTT-Glaubens. Die ontologische ,Identität‘, d.h. die ,Gleichsetzung‘, bzw. die ,Koinzidenz‘ von Strukturen, die in der Endlichkeit für uns verschieden sind, jedoch in dem unbegrenzt Unendlichen, GOTT, paarweise, perspektivisch in eins zusammenfallen, wie ,Sein‘ und ,Wesen‘, wie ,Ursache‘ und ,Wirkung‘ usw., und auch die Äquivalenz und Austauschbarkeit der Transzendentalien, haben im GÖDEL-Kalkül die logisch-syntaktische Form einer, aus sich, ,modal‘ notwendigen Implikation zwischen zwei verschiedenen, gegenseitig austauschbaren Eigenschafts-Variablen ''':''' <span style="color:#4C58FF">— ‚'''□∀x(Xx→Yx)'''‘ —</span>. Dieses Term-Element stellt formal-syntaktisch die Gleichwertigkeit, <span style="color:#00B000">(Äquivalenz)</span>, bzw. die paarweise Koinzidenz aller positiven Eigenschaften und Zuordnungen in GOTT dar; sowohl hier im Axiom-2, als auch in der Definition-2 über die ,Wesenseigenschaften‘, im 2. Beweisgang, mit jeweils verschiedenen, frei umbenennbaren, Individuum-Variablen. Dieses Term-Element ,gilt‘ allgemein jedoch nur für positive Eigenschaften, alias ,Transzendentalia‘, und wird sofort <span style="color:#FF6000">„modal falsch“</span>, wenn für <span style="color:#4C58FF">— ‚'''X'''‘ —</span>, oder <span style="color:#4C58FF">— ‚'''Y'''‘ —</span>, Eigenschaften eingesetzt werden, die, — von Natur aus —, weder positiv noch negativ sind, wie z. B. ,rot‘ oder ,schwer‘. Die wechselseitige Austauschbarkeit der noch ,unbestimmten‘ Eigenschafts-Variablen, für beliebige positive Eigenschaften, ist formal äquivalent zur freien Umbenennung der noch ,unbestimmten‘ Individuum-Variablen ''':''' <span style="color:#4C58FF">[ FUB(x:=y) ]</span>. Der formale, gegenseitige, allgemeine Austausch der positiven Eigenschafts-Variablen, bzw. die formale Gleichsetzung beliebiger positiver Eigenschaften, kann, auf Grund der Äquivalenz aller Vollkommenheiten, bzw. ,Transzendentalia‘, auch dann noch durchgeführt werden, wenn eine, von zwei Eigenschafts-Variablen, durch eine Definition oder eine Schlussfolgerung ,bestimmt‘ worden ist, und dadurch zu einer positiven Eigenschafts-Konstante, d.h. zu einer ,bestimmten‘, positiven Eigenschaft geworden ist. Das ist z. B. bei einer instanziierenden Substitution der Fall ''':''' <span style="color:#4C58FF">[ Instanz(X:=..) ]</span>. Das ist eine spezifische Eigenheit der GÖDEL-Axiomatik, weil alle relevanten, positiven Eigenschaften und Zuordnungen in GOTT, als <span style="color:#FF6000">„ultimative Transzendentalia“</span>, immer auch miteinander kompatibel sind. Mit dem Term-Element ''':''' <span style="color:#4C58FF">— ‚'''□∀x(Xx→Yx)'''‘ —</span>, wird formal die <span style="color:#FF6000">„Koinzidenz“</span> aller ,Transzententalia‘ in der Welt, und auch der ,Zusammenfall‘ aller Gegensätze in GOTT, abgebildet. Da die Variable <span style="color:#4C58FF">‚'''x'''‘</span> für GOTT steht, <span style="color:#4C58FF">‚'''G'''‘</span>, <span style="color:#00B000">(im Korollar-1)</span>, ist die Eigenschaft ''':''' ''<span style="color:#FF6000">„nicht mit x identisch zu sein“</span>'' ''':''' <span style="color:#4C58FF">(¬x=..)</span>, d.h. das <span style="color:#FF6000">„Ungleichsein“</span>, das <span style="color:#FF6000">„Anderssein“</span> GOTTES, <span style="color:#00B000">(Prämisse :03:)</span>, die entscheidende Voraussetzung und Norm für jeden Diskurs über GOTT ''':''' um der <span style="color:#FF6000">„Unvergleichlichkeit“</span> GOTTES gerecht zu werden, darf GOTT niemals mit etwas aus der ''<span style="color:#FF6000">»zufälligen Struktur der Welt«</span>'' verglichen, d.h. gleich gesetzt werden. Der Term :18: <span style="color:#4C58FF">(x=x) ↔ W</span> erinnert an die Selbstbezeichnung des GOTTES-JHWH in Exodus 3,14 ''':''' <span style="color:#CC66FF">»''Ich bin der ‚Ich-Bin‘''«</span>. <span style="color:#00B000">(In der mystischen Tradition, im ''<span style="font-family: Times;"><big>‚Dialog über die Vorsehung‘</big></span>'', dem Hauptwerk der Heiligen KATHARINA von Siena, Mystikerin und Lehrerin der Kirche, sagt GOTT-VATER zur KATHARINA ''':''' <span style="color:#FF6000">»''ICH BIN der IST'', <span style="color:#00B000">[ aus mir selbst ]</span>, ''du bist, die nicht ist'', <span style="color:#00B000">[ aus dir selbst ]</span>.«</span> Das ist eine wichtige, deutende Ergänzung, und die authentische <span style="color:#4C58FF">,theologische‘</span> Interpretation dieser Exodus Text-Stelle. Das ist er Grund für die <span style="color:#FF6000">„Unvergleichlichkeit“</span> GOTTES.)</span> Zum Term :03: notiert A. FUHRMANN ''':''' <span style="color:#FF6000">»</span> ''Die Notation'' <span style="color:#4C58FF">(¬x=..)</span> ''für die Eigenschaft ''':''' <span style="color:#FF6000">„nicht mit x identisch zu sein“</span>'', <span style="color:#00B000">[ d.h. <span style="color:#FF6000">„Ungleichheit“, „Anderssein“</span>, bzw. die Notation <span style="color:#4C58FF">(x=..)</span> für den Existenzmodus-Perfektion ''':''' <span style="color:#FF6000">„Gleichheit“, „Idendität“</span> ]</span>, ''ist suggestiv und informell und ersetzt hier einen formal korrekten Abstraktionsausdruck wie'' <span style="color:#4C58FF">λy.(¬x=y)</span>, <span style="color:#00B000">[ bzw. <span style="color:#4C58FF">λy.(x=y)</span> ]</span>. ''Für die formal korrektere Notation bedarf es der zusätzlichen Vereinbarung, dass der Ausdruck'' <span style="color:#4C58FF">λy.(¬x=y)</span> ''gleichbedeutend sei mit dem Ausdruck'' <span style="color:#4C58FF">¬λy.(x=y)</span>. ''Diese Vereinbarung ist harmlos, da wir aufgrund der Regel der λ–Konversion'' ''':''' <span style="color:#4C58FF">λy.Xy.x ↔ Xx</span>, <span style="color:#00B000">[ mit der <span style="color:#4C58FF">Instanz(X:=(¬x=..))</span> ]</span>, ''so schließen dürfen'' ''':''' <span style="color:#4C58FF">λy.(¬x=y).x ↔ ¬x=x ↔ <span style="color:#00B000">¬(x=x)</span> ↔ ¬λy.(x=y).x</span> .<span style="color:#FF6000">«</span> <ref>A. FUHRMANN a.a.O. Seite 7, Anmerkung 4 (von mir korrigiert und ergänzt)</ref> In der Kalkül-Zeile 29 wird das Möglichkeits-Korollar-1 durch einen <span style="color:#4C58FF">[ Modus ponens ]</span> mit Axiom-3 von der Kalkül-Prämisse-Term :01: ,abgekoppelt‘, d.h. es ist nicht mehr vom Term :01: <span style="color:#4C58FF">— ‚'''PX'''‘ —</span> logisch abhängig. Das Möglichkeits-Korollar-1 behält jedoch die bewiesene Widerspruchsfreiheit von Theorem-1, und ist damit nur mehr von Axiom-1 und Axiom-2 abhängig, was für das Theorem-ANSELMS am Schluss entscheidend ist. Erklärung zu Term :05: Das Ergebnis einer Logik-Operation zwischen Prämissen ist ,regulär‘ <span style="color:#00B000">(├ )</span> den Prämissen zuzurechnen. Das Modale-Prinzip KRIPKE-Γ-Ɐx, <span style="color:#4C58FF">['''RK''']</span>, in Worten ''':''' <span style="color:#FF6000">»''Wenn mit ,modaler‘ Notwendigkeit'' <span style="color:#00B000">( □ )</span>, ''für alle'' <span style="color:#4C58FF">‚'''x'''‘</span> ''die Aussage'' <span style="color:#4C58FF">‚'''A'''‘</span> ''gilt, und daraus logisch folgt, dass mit ,modaler‘ Notwendigkeit'' <span style="color:#00B000">( □ )</span>, ''für alle'' <span style="color:#4C58FF">‚'''x'''‘</span> ''auch die Aussage'' <span style="color:#4C58FF">‚'''B'''‘</span> ''gilt, dann ist in einem Kalkül regulär'' <span style="color:#00B000">( ├ )</span> ''ableitbar'' ''':''' ''es ist wahr, dass mit ,modaler‘ Notwendigkeit'' <span style="color:#00B000">( □ )</span>, ''für alle'' <span style="color:#4C58FF">‚'''x'''‘</span> ''aus der Aussage'' <span style="color:#4C58FF">‚'''A'''‘</span> ''die Aussage'' <span style="color:#4C58FF">‚'''B'''‘</span> ''logisch folgt''«</span>. Der Term <span style="color:#4C58FF">— ‚'''□∀xXx'''‘ —</span> steht formal-syndaktisch, allgemein für ,Transzendentalia‘, und ist für alle ,Nicht-Transzendentalia‘ <span style="color:#FF6000">„modal falsch“</span>. ====<div class="center"><span style="color:#660066">2. Beweisgang</span></div>==== {|class="wikitable" |- ! <div class="center"><span style="color:#660066">GÖDELS ontologischer Beweis für Theorem 2, (,Basisbeweis‘)</span></div> |- ! <span style="color:#00B000">''Terme der erweiterten Prädikatenlogik zweiter Stufe____________„Benennungen“ und durchgeführte Logik-Operationen''</span> |- | <small> <math>\begin{align} \text{(Axiom 1.2)} & \quad \neg P\ X \;\Longrightarrow\;\ P\neg X\ & \ & \text{„Wenn X nicht positiv ist, dann ist die Negation ¬X positiv“} \\ \text{(Axiom 3)} & \quad \ P\ G \ & \ & \text{„Göttlichkeit, GOTT-Sein, ist eine pos. Eigenschaft“ ↔ „GOTT ist perfekt“} \\ \text{(Axiom 4)} & \quad \ P\ X \;\Longrightarrow\; \Box \; \ P\ X \ & \ & \text{„Positive Eigenschaften sind notwendig aus sich positiv“} \\ \text{(Definition 1)} &\quad \ G\ x \;\Longleftrightarrow\; \forall X(\ P \ X \Longrightarrow \ X \ x)\ & \ & \text{„x ist genau dann GOTT, wenn x alle positiven Eigenschaften hat“} \\ \text{(Definition 2)} & \quad \ X_{ess}\ x \;\Leftrightarrow X\ x \wedge \forall Y \left(\ Y\ x \Rightarrow \Box \; \forall y (\ X\ y \Rightarrow \ Y\ y)\right) & \ & \text{„X ist genau dann eine wesentliche Eigenschaft von x, wenn x sie hat, und} \\ \text{ } & \quad & \text { } & \;\;\text{alle anderen Eigenschaften Y von x notwendig aus dieser Eigenschaft X folgen“} \\ \text{[RM]} &\quad \ A \;\Longrightarrow\;\ B\; \text{ ├ }\;\Box \; A \Longrightarrow\;\Box\; \ B\ & \ & \text{( :: Modales Prinzip)} \\ \text{(Theorem 2)} &\quad \ G\ x \;\Longleftrightarrow\; \ G_{ess}\ x \ & \ & \text{(,G‘ :: „Göttlichkeit“ ↔ „GOTT“ ↔ „Dasein GOTTES“)} \\ \text{ } &\;\text{„Das Wesen GOTTES ist sein Dasein“} & \ & \Longleftarrow\; \text{was zu beweisen ist !} \\ \text{01} &\quad \ G\ x \ & \ & \text{ AE: „Angenommen, x steht für den GOTT der Christen“} \\ \text{02} &\quad \ Y\ x \ & \ & \text{ AE: „Angenommen, GOTT hat die Eigenschaften Y“} \\ \text{03} &\quad \neg P\ Y & \ & \text{ AE: „Angenommen, die Y in GOTT sind nicht positiv“} \\ \text{04} &\quad \neg P \ Y \Rightarrow \ P \neg Y\ & \ &\text{(A1.2):Instanz(X:=Y) :: (Substitution für Eigenschaften) } \\ \text{05} &\quad \ P \neg Y \ & \ & \text {:03:04:[Modus ponens] :: [A, A → B├ B] } \\ \text{06} &\quad \forall X(\ P \ X \Rightarrow \ X \ x)\ & \ &\text{(D1):01:[Modus ponens] :: (logische Schlussregel)} \\ \text{07} &\quad \ P \ X \Rightarrow \ X \ x\ & \ &\text{:06:[ⱯXA(X) ├ A(X)] :: (Quantorenregel)} \\ \text{08} &\quad \ P \neg Y \Rightarrow \neg Y \ x\ & \ &\text{:07:Instanz(X:=¬Y)} \\ \text{09} &\quad \neg Y \ x\ & \ &\text{:05:08:[Modus ponens]} \\ \text{10} &\quad \text{ ├ }\; (Y\ x \wedge \neg Y \ x) \;\Leftrightarrow\;\ F\ & \ & \text{:02:09:[Konjunktion] ⇒ Kontradiktion !} \\ \text{11} &\quad \neg P\ Y \; \Rightarrow \; (Y\ x \wedge \neg Y \ x )\ & \ &\text{:03:10:[├A├B ╞ A → B] :: ''KONDITIONALER BEWEIS''} \\ \text{12} &\quad \neg\neg P\ Y \ & \ &\text{:11:10:[Modus tollendo tollens] :: [A → B,¬B├ ¬A]} \\ \text{13} &\quad \text{ ├ }\; P\ Y \ & \ &\text{:12:NEG; bzw. :03:10:[├¬A→F ╞ A] :: ''INDIREKTER BEWEIS'' :AE:} \\ \text{14} &\quad \ P\ Y \;\Rightarrow\;\Box \; \ P\ Y \ & \ & \text{(A4):Instanz(X:=Y)} \\ \text{15} &\quad \Box \; \ P\ Y \ & \ & \text{:13:14:[Modus ponens]} \\ \text{16} &\quad \ G \ y \Rightarrow \ Y \ y\ & \ &\text{:01:02:[├A├B ╞ A→B]:FUB(x:=y)} \\ \text{17} &\quad \text{ ├ }\; \forall y(\ G \ y \Rightarrow \ Y \ y)\ & \ &\text{:16:[G(y) ├ ⱯyG(y)]} \\ \text{18} &\quad \Box \; \ P\ Y \;\Rightarrow\; \Box \; \forall y(\ G \ y \Rightarrow \ Y \ y)\ & \ &\text{:13:17:[├A├B ╞ A→B]:[RM]} \\ \text{19} &\quad \text{ ├ }\; \Box \; \forall y(\ G \ y \Rightarrow \ Y \ y)\ & \ &\text{:15:18:[Modus ponens]} \\ \text{20} &\quad \ Y\ x \;\Rightarrow\; \Box \; \forall y(\ G \ y \Rightarrow \ Y \ y)\ & \ &\text{:02:19:[├A├B ╞ A→B]} \\ \text{21} &\quad \ (Y\ x \;\Rightarrow\; \Box \; \forall y(\ G \ y \Rightarrow \ Y \ y)) \wedge \ G \ x & \ &\text{:20:01:[Konjunktion] :: [A, B├ A ∧ B]} \\ \text{22} &\quad \ (Y\ x \;\Rightarrow\; \Box \; \forall y(\ X \ y \Rightarrow \ Y \ y)) \wedge \ X \ x\;\Leftrightarrow\; X_{ess}\ x \ & \ &\text{(D2):KOMM(↔):KOMM(∧):[ⱯYA(Y) ├ A(Y)] wegen :13:} \\ \text{23} &\quad \ (Y\ x \;\Rightarrow\; \Box \; \forall y(\ G \ y \Rightarrow \ Y \ y)) \wedge \ G \ x\;\Leftrightarrow\; G_{ess}\ x \ & \ &\text{:22:Instanz(X:=G)} \\ \text{24} & \quad \text{ ├ }\; G_{ess}\ x \ & \ &\text{:21:23:[Modus ponens]:AE: wegen :30:} \\ \text{25} &\quad \ G\ x \;\Rightarrow\; \ G_{ess}\ x \ & \ & \text{:01:24:[├A├B ╞ A→B] :: Theorem 2.1} \\ \text{26} &\quad \forall X(\ P \ X \Rightarrow \ X \ x)\ & \ &\text{(D1):01:[Modus ponens] } \\ \text{27} &\quad \ P \ X \Rightarrow \ X \ x\ & \ &\text{:26:[ⱯXA(X) ├ A(X)]} \\ \text{28} &\quad \ P \ G \Rightarrow \ G \ x\ & \ &\text{:27:Instanz(X:=G)} \\ \text{29} &\quad \text{ ├ }\; G \ x\ & \ &\text{(A3):28:[Modus ponens]} \\ \text{30} &\quad \ G_{ess}\ x \;\Rightarrow \ G \ x\ & \ &\text{:24:29:[├A├B ╞ A→B] :: Theorem 2.2 } \\ \text{31} &\quad \ G\ x \;\Longleftrightarrow\; \ G_{ess}\ x \ & \ & \text{:25:30:[Konjunktion]:BIKONDITIONAL :: [(A→B) ∧ (B→A) ↔ (A↔B)] } \\ \text{(Theorem 2)} &\; \text{„Dasein, GOTT-Sein, ist das Wesen GOTTES“} & \ & \Longleftarrow\; \text{was zu beweisen war ! } \\ \text{32} &\quad \text{ ├ }\; \Box \; \forall y(\ G \ y \Rightarrow \ (x = y))\ & \ & \text{:19:Instanz(Y:=(x=..))} \\ \text{33} &\quad \ G\ x \;\Rightarrow\; \Box \; \forall y(\ G \ y \Rightarrow \ (x = y))\ & \ & \text{:01:32:[├A├B ╞ A→B]} \\ \text{(Korollar 2)} & \;\text{„Es gibt notwendig höchstens einen GOTT“} & \ & \text{„Wenn es GOTT gibt, dann gibt es für jede mögliche Welt nur einen GOTT“} \\ \end{align}</math> </small> |} <span style="color:#00B000"><small>(In den Kalkül-Zeilen 16, 18, 31 mussten zwei-, und in Zeile 22 drei Kalkül-Schritte, d.h. Logik-Operationen in eine Zeile zusammengezogen werden, weil der Parser dieser speziellen Mathematik-Funktion in Wikibooks jedes Mal wegen Puffer-Überlauf abstürzt, wenn zu den bestehenden Zeilen noch eine neue Zeile, oder ein Text-Element, zusätzlich eingefügt wird. Das vermindert etwas die Transparenz des Kalküls.)</small></span> Anmerkung-2 ''':''' <span style="color:#00B000">(Dieser Beweisgang kommt auch ohne das ,unbestimmte‘ Konjunkt <span style="color:#4C58FF"> — ‚'''Xx'''‘ —</span> in der Definition-2 zum gleichen Ergebnis, und wird dadurch um eine Zeile verkürzt ''':''' Zeile 21 entfällt, und <span style="color:#4C58FF">[ KOMM(∧) ]</span> ist dann unnötig. Dieses Konjunkt wird hier ebenfalls schon in der Kalkül-Prämisse :01: <span style="color:#4C58FF"> — ‚'''Gx'''‘ —</span>, als ,Annahme‘ gesetzt, vorentschieden und ,bestimmt‘ mit der <span style="color:#4C58FF">[ Instanz(X:=G) ]</span>. Es war also logisch korrekt, dass GÖDEL, in seiner Notiz vom 10. Feb. 1970 zum ontologischen Beweis, dieses Konjunkt weggelassen hat, was ihm von Kommentatoren als ein Flüchtigkeitsfehler angerechnet worden war. Der gesamte 2. Beweisgang bewegt sich im Geltungsbereich der Prämisse Term :01:, d.h. ist in jeder Zeile von der Annahme abhängig ''':''' die Variable <span style="color:#4C58FF"> — ‚'''x'''‘ —</span> steht für den GOTT der Christen. In der Kalkül-Zeile 33 wird mit Korollar-2 diese Abhängigkeit, für den Term :32:, explizit dargestellt.)</span> Der Beweisgang geht mit der Prämisse :01: prinzipiell, als ,modal‘ freigewählte Voraussetzung, von der Existenz eines GOTTES aus. Im 1. Beweisgang wurde bewiesen, dass die von GÖDEL ,postulierten‘ <span style="color:#FF6000">»''allgemeinen positiven Eigenschaften, Vollkommenheiten, Perfektionen'', <span style="color:#00B000">[ die sog. ,Transzendentalien‘ ]</span> ''konsistent''«</span>, d.i. widerspruchsfrei sind. Hier, in diesem Beweisgang wird nun die Prämisse vom 1. Beweisgang, <span style="color:#4C58FF"> — ‚'''PX'''‘ —</span>, im Bezug auf GOTT hinterfragt ''':''' Gibt es auch in GOTT so Etwas, wie <span style="color:#FF6000">»''Vollkommenheit, Positives, Perfektes''«</span> '''?''' Die ,Annahme‘ jedoch, dass es <span style="color:#FF6000">»''in GOTT keine Vollkommenheit, nichts Positives, nichts Perfektes''«</span> <span style="color:#00B000">(keine Transzendentalien)</span> gibt, <span style="color:#00B000">(Prämisse Term :03:)</span>,<span style="color:#4C58FF"> — ‚'''¬PY'''‘ —</span>, d.h. dass die <span style="color:#00B000">(wesentlichen)</span> Eigenschaften in GOTT keine <span style="color:#FF6000">„Vollkommenheiten“</span> seien, führt aber zu einem unlösbaren Widerspruch, <span style="color:#00B000">(Term :10:)</span>. Mit Term :13:, als 1. Hauptergebnis, ist damit, — als ,neue‘ Prämisse, <span style="color:#00B000">(ersetzt Term :03:)</span> —, definitiv ,bewiesen‘ <span style="color:#00B000">( ╞ , d.h. es ist ,wahr‘ und ,widerspruchsfrei‘)</span>, dass alle Eigenschaften, die hier mit <span style="color:#4C58FF">— ‚'''Y'''‘ —</span> symbolisiert werden, <span style="color:#FF6000">„positive Eigenschaften“</span>, d.h. <span style="color:#FF6000">„Perfektionen“</span> sind, von denen das Kalkül ,annimmt‘, <span style="color:#00B000">(Prämissen Term :01:, Term :02: und speziell Term :16:)</span>, dass der GOTT der Christen sie besitzt. Alle ,Wesenseigenschaften‘ in GOTT ''':''' <span style="color:#4C58FF">— ‚'''Y'''<sub>ess</sub>‘ —</span>, die durch den Term :13:, <span style="color:#4C58FF">— ‚'''PY'''‘ —, </span> dargestellt werden, sind somit <span style="color:#FF6000">„Vollkommenheiten“</span> ''':''' <span style="color:#4C58FF">— ‚'''P'''‘ —</span><span style="color:#00B000">, (,ultimative Transzendentalien‘, aller ,Grade‘)</span>. Damit ist definitiv ‚bestätigt‘, <span style="color:#00B000">( ╞ , es ist ,wahr‘ und ,widerspruchsfrei‘)</span>, was mit Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, schon ‚angenommen‘ worden ist ''':''' <span style="color:#FF6000">»''GOTT ist perfekt; er hat alle positiven Eigenschaften''«</span>; und auch Definition-1 ist damit ,verifiziert‘ ''':''' <span style="color:#FF6000">»''GOTT ist genau deswegen GOTT, weil er, als GOTT, positive Eigenschaften aller Grade in sich schließt''«</span>; entsprechend dem Quelltext bei LEIBNIZ ''':''' <span style="color:#FF6000">»''GOTT ist ein Wesen von äußerster Größe und Vollkommenheit, das alle Grade derselben in sich schließt''«</span>. Immer vorausgesetzt, <span style="color:#00B000">(,angenommen‘)</span>, man glaubt an GOTT ''':''' <span style="color:#00B000">(Term :01:)</span>. <span style="color:#00B000">(Der ,Schlüsselbegriff‘ <span style="color:#4C58FF">— ‚'''P'''‘ —</span> ist der ,Schlüssel‘ zur Erkenntnis, dass GOTT ,notwendig‘, sowohl ,wesentlich‘ für uns, als auch an sich ,grundlos‘, immer schon ,da‘ ist.)</span> Hier, <span style="color:#00B000">(im 2. Beweisgang)</span>, hat Axiom-1, <span style="color:#00B000">(im Term :04:)</span>, sicher gestellt, dass die Eigenschaften in GOTT, <span style="color:#00B000">(Definition-1; Term :06:)</span>, tatsächlich <span style="color:#FF6000">„ultimativ positiv, perfekt und vollkommen“</span> sind ''':''' <span style="color:#4C58FF">— ‚'''PY'''‘ —</span>. Das GÖDEL-Axiom-1 bezieht seine ,Potenz‘ aus dem Prinzip vom ,auszuschließenden‘ Widerspruch ''':''' eine Eigenschaft kann nicht zugleich ,positiv‘ und ,nicht positiv‘ sein '''!''' Formal lässt sich das 2. Hauptergebnis, Theorem-2 ''':''' <span style="color:#4C58FF">— ‚'''Gx'''↔'''G'''<sub>ess</sub>'''x'''‘ — </span> ''':''' schon aus Term :23: in diesem Beweisgang mit der <span style="color:#4C58FF">[ Vereinfachung ] :: [ A∧B ├ B ]</span> ohne Weiteres ,regulär‘ ableiten, — analog zu den Vorgehensweisen bei A. FUHRMANN und G.J. WIRSCHING. <span style="color:#00B000">(Beide Aussagen dieser ,Konjunktion‘ sind ,gleichwertig‘, daher partizipiert das Theorem-2 auch am Ergebnis der Widerspruchsfreiheit von Term :13:, <span style="color:#4C58FF">— ‚'''PY'''‘ —</span>, dem 1. Hauptergebnis.)</span> Der hier gewählte, etwas längere Weg zum Ergebnis, soll die innere Struktur und Abhängigkeit der Ergebnisse von bestimmten Voraussetzungen offen legen, und ihren ,Zweck‘ verdeutlichen. Die beiden Hauptergebnisse im Basisbeweis gehen vom vorgefundenen und traditionell vorgegebenen Begriff von ,GOTT‘ aus, <span style="color:#00B000">(Term :06:, Term :16: und Term :26:)</span>. Das ,bewiesene‘ <span style="color:#00B000">( ╞ )</span> 1. Hauptergebnis, hier im 2. Beweisgang, Term :13: <span style="color:#4C58FF">— ‚'''PY'''‘ —</span> ''':''' <span style="color:#FF6000">»''die Eigenschaften in GOTT sind vollkommen, d.h. sind die ultimativen Transzendentalia''«</span>, rechtfertigt, bzw. verifiziert sowohl Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, als auch die Definition-1 ''':''' <span style="color:#4C58FF">— ‚'''Gx↔∀X(PX→Xx)'''‘ —</span>, für die Annahme ''':''' den ,GOTT der Christen‘, der deswegen GOTT ist, weil er alle Grade der Vollkommenheit in sich schließt. Und das ebenfalls ,bewiesene‘ <span style="color:#00B000">( ╞ )</span> 2. Hauptergebnis, hier im selben Beweisgang, Theorem-2 ''':''' <span style="color:#4C58FF">— ‚'''Gx'''↔'''G'''<sub>ess</sub>'''x'''‘ —</span> ''':''' <span style="color:#FF6000">»''das Wesen GOTTES ist sein eigenes Sein''«</span>, rechtfertigt, bzw. verifiziert sowohl Axiom-5 ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span>, als auch die Definition-3 ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x ↔ ∀X(X'''<sub>ess</sub>'''x →□∃yXy)'''‘ —</span>, für die Wesenseigenschaft ''':''' ,notwendige Existenz‘, und widerlegt den Einwand KANTS, für den Spezialfall ''':''' <span style="color:#4C58FF">— ‚'''x'''‘ —</span> steht für ,GOTT‘. Zwei Axiome und zwei Definitionen von GOTT und seinen Vollkommenheiten werden durch die Ergebnisse im Basisbeweis des GÖDEL-Kalküls in unserer realen Welt als ,wahr‘, <span style="color:#00B000">(genauer als ,widerspruchsfrei‘)</span>, und, — im Rahmen des christlichen Glaubens —, als ,annehmbar‘ bestätigt. <span style="color:#00B000">(Anmerkung zu Term :24: ''':''' eine Prämisse ist regulär-,modal‘ immer ,frei‘ wählbar.)</span> Zusammengefasst heißt das ''':''' die ,strittige‘ Begründung der ,methodologischen‘ Prämisse des GÖDEL-Kalküls ''':''' <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span> ''':''' <span style="color:#00B000">(Prämisse, Term :01:)</span>, weil <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span> ''':''' <span style="color:#00B000">(Korollar-1)</span> ''':''' <span style="color:#FF6000">»''Das <span style="color:#4C58FF">‚'''x'''‘</span> steht für den GOTT der Christen, für den es ohne Widerspruch denkbar ist, dass es ihn gibt''«</span>, <span style="color:#00B000">(ANSELMS Prinzip, trotz der ,Warnung‘ KANTS)</span>, ist ,wahr‘ und für uns ,annehmbar, denn es ist auch, auf Grund der Ergebnisse des 2. Beweisganges, in unserer realen Welt ,wahr‘ und ,annehmbar‘, weil schon als ,widerspruchsfrei‘ verifiziert ''':''' <span style="color:#FF6000">»''Der GOTT der Christen'' <span style="color:#00B000">(Term :01:)</span> '',existiert‘ für uns ,notwendig‘''«</span> ''':''' <span style="color:#4C58FF"> — ‚'''Gx→E'''<sub>not</sub>'''x'''‘ —</span>, <span style="color:#00B000">(d.i. das ,regulär‘-mögliche Korollar sowohl im 2. als auch im 3. Beweisgang)</span>, denn dieser GOTT ist aus sich ,vollkommen‘ ''':''' <span style="color:#4C58FF"> — ‚'''PG'''‘ —</span>, und zu seiner ,Vollkommenheit‘ <span style="color:#4C58FF">— ‚'''P'''‘ —</span> gehört auch notwendig sein ,Existieren‘ ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span>. <span style="color:#00B000">(Jeder dieser Terme ist im-, und durch den 2. Beweisgang, im Geltungsbereich der Prämisse Term :01:, als ,wahr‘ und ,annehmbar‘ bewiesen, bzw. verifiziert.)</span> Das ist der ,Kern‘ des ontologischen Arguments, und somit ist auch diese ,strittige‘ Begründung der Prämisse des GÖDEL-Kalküls mit den Maßstäben der modernen Logik <span style="color:#FF6000">»''durchaus vereinbar''«</span>, d.h. sie ist logisch ,richtig‘ und, im Kontext des christlichen Glaubens, vernünftig. Die Annahme des Gegenteils zu dieser Prämisse ''':''' <span style="color:#4C58FF">— ‚'''¬◇∃xGx'''‘ —</span> ''':''' <span style="color:#FF6000">»''Es ist undenkbar, dass es diesen GOTT gibt''«</span>, führt jedoch, unabhängig von jeder Glaubensüberzeugung, zu einem Widerspruch — ist unlogisch und daher ,falsch‘, <span style="color:#00B000">(siehe Anhang ''':''' Widerlegung)</span>. Die Behauptung einer ,formalen Unentscheidbarkeit‘ zu den Annahmen über die Existenz GOTTES, ob oder nicht, <span style="color:#00B000">(d.h. ein ,methodologischer‘ Agnostizismus)</span>, ist gegen jede ,Logik‘; und ist auch ,falsch‘, d.h. der Agnostizismus ist einfach nur ein ,logischer Irrtum‘. Denn aus dem, im Kalkül abgeleiteten, Widerspruch aus der einen Annahme, und damit ihrer Unrichtigkeit, folgt notwendig die Richtigkeit der gegenteiligen Annahme. Damit ist eine klare Entscheidung getroffen. Das Modale-Prinzip <span style="color:#4C58FF">['''RM''']</span> in Worten ''':''' <span style="color:#FF6000">»''Wenn es wahr ist, dass aus'' <span style="color:#4C58FF"> — ‚'''A'''‘ —</span> ''ein'' <span style="color:#4C58FF"> — ‚'''B'''‘ —</span> ''logisch folgt, dann ist in einem Kalkül regulär'' <span style="color:#00B000">( ├ )</span> ''ableitbar, dass, wenn'' <span style="color:#4C58FF"> — ‚'''A'''‘ —</span> '',modal‘ notwendig'' <span style="color:#00B000">( □ )</span> ''ist, auch'' <span style="color:#4C58FF"> — ‚'''B'''‘ —</span> '',modal‘ notwendig'' <span style="color:#00B000">( □ )</span> ''ist''«</span>. <span style="color:#00B000">(Das <span style="color:#4C58FF"> — ‚'''A'''‘ —</span> in Term :18: ist als ,modal notwendig‘ durch den Term :15: verifiziert '''!''' )</span> Mit dem 2. Hauptergebnis, Theorem-2 ''':''' <span style="color:#FF6000">»'',Dasein‘ ist das ,Wesen‘ GOTTES''«</span>, folgt die GÖDEL-Axiomatik der philosophisch-<span style="color:#4C58FF">,theologischen‘</span> Tradition der ,Rede von GOTT‘ seit ARISTOTELES, und schließt sich damit formal-syntaktisch zugleich auch der religiösen Überzeugung der Christen an, die glauben, dass GOTT, als unser Vater, aus Liebe, in seinem Sohn, JESUS CHRISTUS, für uns immer schon <span style="color:#FF6000">»''da''«</span> ist, <span style="color:#00B000">(der Sohn ist koinzident ,eins‘ mit GOTT, dem Vater und dem GEIST)</span>, wirksam in und durch seine <span style="color:#4C58F0">„Kirche“</span>, im HEILIGEN GEIST, bis ans Ende der Zeit. Das ist das, <span style="color:#FF6000">»''was''«</span> GOTT eigentlich für uns ausmacht, — die Selbstmitteilung seines unergründlichen Wesens in den Sakramenten der <span style="color:#4C58F0">„Kirche“</span> ''':''' <span style="font-family: Times;"><big>‘אֶֽהְיֶ֖ה אֲשֶׁ֣ר אֶֽהְיֶ֑ה‚</big></span> <span style="color:#00B000">| ‚eh'jeh asher eh'jeh‘ |</span> <span style="color:#CC66FF">»''Ich bin da für euch und für immer, als der ich ''<span style="color:#00B000">[ immer schon gewesen ]</span> ''bin''«</span>; <span style="color:#00B000">(d.i. das <span style="color:#4C58FF">,theologisch‘</span>-exegetische ,Axiom‘ der Christen, und eine <span style="color:#4C58FF">,theologisch‘</span> korrekte Explikation der ,regulären‘ Kalkül-Prämisse Term :01: <span style="color:#4C58FF"> — ‚'''Gx'''‘ —</span>, jeweils im 2. und 3. Beweisgang)</span>. Das heißt aber nicht, dass der Autor des Kalküls sich mit diesem Glauben identifiziert hat, <span style="color:#00B000">(,hat‘ er auch nicht)</span>, oder dass der Leser des ontologischen Beweises von Kurt GÖDEL sich damit identifizieren muss, wenn er dessen <span style="color:#FF6000">»''mathematische Evidenz''«</span> anerkennt. Zur erweiterten <span style="color:#4C58FF">„theologischen“</span> Explikation der Kalkül-Prämisse ''':''' Die <span style="color:#4C58F0">„Kirche“</span> ist das ,Meisterwerk‘ GOTTES ''':''' In ihr ist es GOTT gelungen, etwas Göttliches und Unzerstörbares in unsere korrupte Welt einzupflanzen ''':''' <span style="color:#4C58FF"> — ‚'''Gx→E'''<sub>not</sub>'''x'''‘ —</span> ''':''' <span style="color:#FF6000">»''Etwas Göttliches existiert notwendig, d.h. ,unzerstörbar‘ in unserer Welt''«</span>. Sie ist, durch die Menschwerdung des GOTTES Sohnes, JESUS CHRISTUS, dessen <span style="color:#4C58F0">„Leib“</span> die <span style="color:#4C58F0">„Kirche“</span> ist, untrennbar mit Menschen verbunden, die schon, von allem Anfang an, und jetzt immer noch, durch die Sünde korrumpiert sind. Mit ihr will und wird GOTT unsere Welt und die Menschheit, bis ans Ende der Zeit, von der Sünde und von deren Konsequenz, dem <span style="color:#00B000">(ewigen)</span> Tod <span style="color:#4C58FF">„erlösen“</span>, <span style="color:#00B000">(jedoch nicht ohne die Zustimmung des Menschen)</span>. Mit dieser Explikation wird die Tragweite des ontologischen Arguments ANSELMS, und damit auch die <span style="color:#4C58FF">„theologische“</span> Relevanz der GÖDEL-Axiomatik erkennbar. Immer vorausgesetzt, <span style="color:#00B000">(,angenommen‘)</span>, man glaubt an GOTT, <span style="color:#00B000">(Term :01:)</span>. ====<div class="center"><span style="color:#660066">3. Beweisgang</span></div>==== {|class="wikitable" |- ! <div class="center"><span style="color:#660066">GÖDELS ontologischer Beweis für Theorem 3, (ANSELMS Theorem)</span></div> |- ! <span style="color:#00B000">''Terme der erweiterten Prädikatenlogik zweiter Stufe___________________„Benennungen“ und durchgeführte Logik-Operationen''</span> |- | <small> <math>\begin{align} \text{(Axiom 5)} & \quad P\ E_{not}\; \ & \text { } & \text{„Notwendige Existenz ist eine positive Eigenschaft“} \\ \text{ } & \text{( :: Das ist nur dann wahr, wenn ,Dasein‘ und ,Wesen‘ } & \ & \text{( :: dagegen KANT : ,Existenz‘ ist keine ,Eigenschaft‘,} \\ \text{ } & \;\;\text{in eins zusammenfallen ! ARISTOTELES : Theorem-2)}\ & \ & \;\;\text{,Sein‘ ist für alles, was existiert, kein ,reales Prädikat‘ ! )} \\ \text{(Definition 1)} &\quad \ G\ x \;\Longleftrightarrow\; \forall X(\ P \ X \Longrightarrow \ X \ x)\ & \ & \text{„x ist genau dann GOTT, wenn x alle positiven Eigenschaften hat“} \\ \text{(Definition 3)} & \quad \ E_{not}\ x \;\Longleftrightarrow\;\ \forall X \left(\ X_{ess}\ x \Longrightarrow \Box \; \exists y \ X\ y \right) & \ & \text{„Notwendige Existenz ist genau dann eine Eigenschaft von x, wenn} \\ \text{ } & \quad & \ & \;\;\text{alle wesentl. Eigenschaften von x notwendig instanziiert sind“} \\ \text{(Korollar 1)} & \quad \Diamond \; \exists x \ G \ x \ & \ & \text{„Es ist widespruchsfrei möglich, dass es GOTT gibt“} \\ \text{(Theorem 2)} &\quad \ G\ x \;\Longleftrightarrow\; \ G_{ess}\ x \ & \ &\text{„Dasein, GOTT-Sein, Existenz ist das Wesen, die Essenz GOTTES“} \\ \text{(Korollar 2)} &\quad \ G\ x \;\Longrightarrow\; \Box \; \forall y(\ G \ y \Longrightarrow \ (x = y))\ & \ &\text{„Wenn es GOTT gibt, dann gibt es notwendig nur einen GOTT“} \\ \text{(Theorem 3)} & \quad \Diamond \; \exists x \ G \ x \;\Longrightarrow\; \Box \; \exists x \ G \ x \ & \ & \text{( :: ANSELMS Prinzip)} \\ \text{ } & \text{„Weil es widerspruchsfrei möglich ist, dass es GOTT gibt,} & \ & \Longleftarrow\; \text{was zu beweisen ist !} \\ \text{ } & \;\;\text{ist der Glaube, dass es GOTT wirklich gibt, widerspruchsfrei“} \\ \text{01} & \quad \ G \ x\ & \ & \text{ AE: „Angenommen, x steht für den GOTT der Christen“} \\ \text{02} & \quad \forall X(\ P \ X \Rightarrow \ X \ x)\ & \ & \text{(D1):01:[Modus ponens] :: (logische Schlussregel)} \\ \text{03} & \quad \ P \ X \Rightarrow \ X \ x\ & \ & \text{:02:[ⱯXA(X) ├ A(X)] :: (Quantorenregel)} \\ \text{04} & \quad \ P \ E_{not}\;\Rightarrow \ E_{not}\ x\ & \ & \text{:03:Instanz(X:= Enot) :: (Substitution für Eigenschaften)} \\ \text{05} & \quad \ E_{not}\ x\ & \ & \text{(A5):04:[Modus ponens] :: [A, A → B├ B]} \\ \text{06} & \quad \forall X \left(\ X_{ess}\ x \Rightarrow \Box \; \exists y \ X\ y \right) & \ & \text{(D3):05:[Modus ponens]} \\ \text{07} & \quad \ X_{ess}\ x \Rightarrow \Box \; \exists y \ X\ y & \ & \text{:06:[ⱯXA(X) ├ A(X)]} \\ \text{08} & \quad \ G_{ess}\ x \Rightarrow \Box \; \exists y \ G\ y & \ & \text{:07:Instanz(X:= G)} \\ \text{09} & \quad \ G_{ess}\ x \ & \ & \text{(Th2):01:[Modus ponens]} \\ \text{10} & \quad \text{ ├ }\;\Box \; \exists x \ G\ x & \ & \text{:08:09:[Modus ponens]:FUB(y:=x) :: (Freie-Um-Benennung der Var.)} \\ \text{ } & \text{„Es gibt GOTT wirklich, für jede mögliche Welt“} & \ & \Longleftarrow\; \text{1. Hauptergebnis !} \\ \text{11} & \quad \;\Diamond \exists x \ G \ x \;\Longrightarrow \; \Box \; \exists x \ G\ x & \ & \text{(K1):10:[├A├B ╞ A→B] :: ''KONDITIONALER BEWEIS''} \\ \text{(Theorem 3)} & \;\text{„Weil es widerspruchsfrei möglich ist, dass es GOTT gibt,} & \ & \Longleftarrow\; \text{was zu beweisen war ! 2. Hauptergebnis ! } \\ \text{ } & \;\;\text{ist der Glaube, dass es GOTT wirklich gibt, widerspruchsfrei“} \\ \text{12} & \quad \;\Box \; \forall y(\ G \ y \Longrightarrow \ (x = y))\ & \ &\text{(K2):01:[Modus ponens]} \\ \text{13} & \quad \;\Box \; (\exists x \ G\ x \wedge \; \forall y(\ G \ y \Longrightarrow \ (x = y)))\ & \ & \text{:10:12:[Konjunktion]:DIST(□∧)} \\ \text{(Korollar 3)} & \;\text{„Es gibt notwendig genau nur einen GOTT“} & \ & \text{„Es gibt für jede mögliche Welt nur den GOTT der Christen“} \\ \end{align}</math> </small> |} Anmerkung-3 ''':''' <span style="color:#00B000">(Ein Theorem und zwei Korollare, aus den beiden vorhergehenden Beweisgängen, werden hier, im 3. Beweisgang, zu ,Axiomen‘, die das Theorem-ANSELMS und sein Korollar mit-verifizieren und bestätigen.)</span> Dieser Beweisgang ist das Ziel aller Bemühungen. Hier wird der sog. ,ontologische Gottesbeweis‘ nach ANSELM von Canterbury formal-syntaktisch dargestellt und als logisch nachvollziehbar von GÖDEL bestätigt. Damit hat er aber auch klar gestellt, dass der ontologische Beweis ANSELMS kein Beweis für die ,Existenz‘ des GOTTES der Bibel sein kann, bzw. sein ,will‘ ''':''' Denn mit der Prämisse, <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, <span style="color:#00B000">(Term :01:, wie auch schon im ,Basisbeweis‘, und ausformuliert hier in Term :02:, mit der Definition für GOTT)</span>, wird mit dem traditionellen, abendländischen ,GOTT-Glauben‘, der ,glaubt‘, dass der Gott der Christen tatsächlich existiert, — methodologisch als ,Annahme‘ —, der Beweisgang schon regulär und explizit eröffnet, aus dem sich dann, logisch korrekt, mit Hilfe der GÖDEL-Axiome und Definitionen, das ,Theorem ANSELMS‘ ergibt; <span style="color:#00B000">(hier jedoch, mit Günther J. WIRSCHING, ohne den Umweg bei GÖDEL über den <span style="color:#4C58FF">[ Modus Barbara ] :: [ A → B, B → C ├ A → C ] </span>, mit dem modalen Axiom-BECKER ''':''' <span style="color:#4C58FF">— ‚'''◇□A→□A'''‘ —</span>, als <span style="color:#4C58FF">‚B → C‘</span> im kategorischen Syllogismus, das André FUHRMANN recherchiert hat)</span>. GÖDEL verwendet zur Darstellung des sog. ,ontologischen Gottesbeweises‘ nach ANSELM die Struktur eines modal-logischen Kalküls. Ein modal-logisches Kalkül ist ein genau geregeltes Schema, in dem bei bestimmten ,Annahmen‘ <span style="color:#00B000">(Axiome, Definitionen, Prämissen)</span> etwas anderes als das Vorausgesetzte, auf Grund des Vorausgesetzten mit Notwendigkeit folgt. Entsprechend der ,Modalität‘ der sechs ,modal‘ notwendigen, d.h. transzendentalen Voraussetzungen, hier, für den 3. Beweisgang, die in den <span style="color:#00B000">(und durch die)</span> beiden vorhergehenden Beweisgängen schon als <span style="color:#FF6000">„modal wahr“</span>, bzw. als logisch annehmbar, verifiziert und/oder ,bewiesen‘ wurden, sind auch die beiden ,Schlusssätze‘ <span style="color:#00B000">(Theorem-3 und Korollar-3)</span> <span style="color:#FF6000">„modal wahr“</span>, bzw. logisch annehmbar '''!''' Die Wahl der Prämisse :01: dagegen ist nicht ,modal‘ notwendig, sondern beruht auf einer freien Entscheidung, und damit ist auch ihre Interpretation eine freie Entscheidung, mit der Voraussetzung, dass man das Kalkül mit Theoremen aus der <span style="color:#4C58FF">„christlichen Theologie“</span> evaluieren, und damit interpretieren will. Dazu berechtigt die Genese des Kalküls. Der Glaube an den GOTT der Christen ''':''' <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, beruht immer auf einer freien Entscheidung. Das Kalkül, als solches, unabhängig von jeder Interpretation seiner Syntax, ist genau dann ,allgemein‘ <span style="color:#FF6000">»''mathematisch evident''«</span>, d.h. ,ist allgemein gültig‘, wenn es gültigen Logik-Regeln folgt. Die Bestimmung seiner Syntax jedoch, d.h. seine Interpretation, unterliegt hermeneutischen Kriterien, die nicht von Logik-Regeln abhängen, wie hier ''':''' <span style="color:#FF6000">»''(unabhängig von der zufälligen Struktur der Welt). Nur dann sind die Axiome wahr''«</span>, wie GÖDEL selbst hinzufügt. Mit der, — von GÖDEL eingeforderten —, ‚Unabhängigkeit‘ der Kalkül-Axiome von der zufälligen Struktur der Welt, wird implizit für das Kalkül auch festgelegt, dass <span style="color:#FF6000">„GOTT“</span> ‚unabhängig‘ von der zufälligen <span style="color:#00B000">(Raum-Zeit-)</span>Struktur unserer vergänglichen Welt, und daher ,zeitlos-ewig‘ ist, <span style="color:#00B000">(was <span style="color:#4C58FF">„theologisch“</span> korrekt ist)</span>, begründet durch Definition-1 und Axiom-3. Aus der zeitlosen Ewigkeit GOTTES folgt, dass GOTT, <span style="color:#FF6000">„unverursacht“ <span style="color:#00B000">|</span> „grundlos“</span>, für uns immer schon ‚da‘ ist, denn bei Zeitlosigkeit gibt es keinen ,zeitlichen‘ und damit auch keinen ,ontologischen‘ Unterschied zwischen ‚Ursache‘ und ‚Wirkung‘. Beides ist dann koinzident ,eins‘ ''':''' wie ,Wesen‘ und ,Dasein‘ in GOTT, bzw. wie ,Begriff‘ und ,Sein‘, oder ,Möglichkeit‘ und ,Wirklichkeit‘. <span style="color:#00B000">(Man vergleiche damit auch die ,postulierte‘ Einheit von ,Erkenntnisobjekt‘ und ,Erkenntnissubjekt‘ im ,Gott‘ des ARISTOTELES ''':''' im <span style="color:#FF6000">»<span style="color:#00B000">[ selbstbewussten ]</span> ''Erkennen seiner Erkenntnis''<span style="color:#00B000">[-Tätigkeit ]</span>«<span style="color:#00B000"> | </span>„<span style="font-family: Times;"><big>νοήσεως νόησις</big></span>“<span style="color:#00B000"> | </span>„noêseôs noêsis“</span> <small>(‚<span style="font-family: Times;"><big>''Metaphysik''</big></span>‘ XII 9, 1074b34)</small>, im Vollzug seiner Funktion als ,unbewegtes Bewegungsprinzip‘, als <span style="color:#FF6000">„<span style="font-family: Times;"><big>πρῶτον κινοῦν ἀκίνητον</big></span>“<span style="color:#00B000"> | </span>„prôton kinoûn akinêton“</span> der Welt, das alles Übrige <span style="color:#FF6000">»''wie ein Geliebtes''«<span style="color:#00B000"> | <span style="color:#FF6000">„<span style="font-family: Times;"><big>ὡς ἐρώμενον</big></span>“</span> | <span style="color:#FF6000">„hôs erômenon“</span> bewegt; d.h. christlich ''':''' <span style="color:#FF6000">»''aus Liebe''«</span> ,entstehen‘ lässt.)</span> Anmerkung-4 ''':''' Das <span style="color:#00B000">(im 2. Beweisgang)</span> schon bewiesene Theorem-2, d.i. die Koinzidenz von <span style="color:#FF6000">„Sein“</span> und <span style="color:#FF6000">„Wesen“</span> in GOTT, <span style="color:#00B000">(‚Existenz‘</span> und <span style="color:#00B000">‚Essenz‘)</span>, rechtfertigt sowohl Axiom-5 als auch die Definition-3, und widerlegt den Einwand KANTS. Somit ist deren Setzung <span style="color:#00B000">(hier, im 3. Beweisgang)</span> korrekt, und durch das Theorem-2 schon vorbestimmt und bestätigt, d.h. beide sind <span style="color:#FF6000">„modal wahr“</span> und ,logisch‘ annehmbar, da sie durch die Gültigkeit von Theorem-2 ,verifiziert‘ worden sind. Damit wird klar erkennbar, dass das Theorem-2 tatsächlich die Basis des GÖDEL-Kalküls ist. Und wenn damit Axiom-5 im GÖDEL-Kalkül ‚gerechtfertigt‘ ist, dann ist auch, <span style="color:#00B000">(als Voraussetzung dafür)</span>, das Axiom-4 ''':''' <span style="color:#4C58FF">— ‚'''PX → □PX'''‘ — ''':''' </span> <span style="color:#FF6000">»''Positive Eigenschaften'', <span style="color:#00B000">[ ,Transzendentalia‘ ]</span>, ''sind notwendig aus sich'', <span style="color:#00B000">[ von Natur aus ]</span>, ''positiv''«</span>, im 2. Beweisgang erklärbar, in dem die ‚Positivität‘, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, einer Eigenschaft schon als ‚notwendig‘, <span style="color:#4C58FF">— '''□''' —</span>, charakterisiert worden ist, äquivalent zu Axiom-5 ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span>, in dem die ‚Notwendigkeit‘, <span style="color:#4C58FF">— <sub>not</sub> —</span>, <span style="color:#00B000">(der Existenz <span style="color:#4C58FF">— ‚'''E'''‘ —</span>)</span>, dann als ‚positive‘ Eigenschaft, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, ‚bestimmt‘ wird; <span style="color:#00B000">(unter der speziellen Voraussetzung, dass <span style="color:#FF6000">„Existieren“</span> definitiv als eine <span style="color:#FF6000">„Wesenseigenschaft“</span> in GOTT ,instanziiert‘ ist; vgl. Definition-3. Eine ,bestimmte‘ Eigenschaft ist genau dann ,instanziiert‘, wenn sie an einem Träger real ,existiert‘. Definition-3 ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x ↔ ∀X(X'''<sub>ess</sub>'''x →□∃yXy)'''‘ —</span>, besagt, dass die, von GÖDEL ,postulierte‘, und im Basis-Theorem-2 verifizierte, <span style="color:#FF6000">„notwendige Existenz“</span> zu den ,ultimativen‘ Transzendentalia in GOTT gehört. Genauer ''':''' Sie ist die ,Summe‘ aller Transzendentalia.)</span> Zum Axiom-4, <span style="color:#00B000">(bzw. zum Term :14:, im 2. Beweisgang)</span>, erklärt GÖDEL in seinen Notizen zum Kalkül ''':''' <span style="color:#FF6000">»''da es'' <span style="color:#00B000">[ das Notwendigsein, <span style="color:#4C58FF">— '''□''' —</span> ]</span> ''aus der Natur der'' <span style="color:#00B000">[ positiven ]</span> ''Eigenschaft folgt'', <span style="color:#00B000">[ deren Positivität, im selben Beweisgang, mit Term :13: vorher schon ,bewiesen‘ (╞ ) worden ist ]</span>«</span>. Die GÖDEL-Erklärung zum Axiom-4 entspricht der Modal-Regel zur sog. ,Nezessisierung‘ in der KRIPKE-Logik nach GÖDEL. <span style="color:#4C58FF">[ Nezessisierungsregel ] '''::''' [ ├ A →├ □ A ]</span> ''':''' <span style="color:#FF6000">»''Angenommen'', <span style="color:#4C58FF">‚'''A'''‘</span> ''ist in einem Kalkül eine Prämisse, oder darin regulär'' <span style="color:#4C58FF">(├ )</span> ''abgeleitet, dann folgt in diesem Kalkül regulär'' <span style="color:#4C58FF">(├ )</span>, ''dass dieses'' <span style="color:#4C58FF">‚'''A'''‘</span> ''auch ,modal‘ notwendig'' <span style="color:#4C58FF">— ,□‘ —</span> ''ist''«</span>. GÖDEL hat jedoch diese modale Notwendigkeit nur in der ,Natur‘ der positiven Eigenschaften, alias ,Transzendentalia‘, gesehen, und mit den Aussagen im Axiom-4 expliziert ''':''' <span style="color:#4C58FF">— ‚'''PX → □PX'''‘ —</span> ''':''' <span style="color:#FF6000">»''unabhängig von der zufälligen Struktur der Welt, nur dann sind die Axiome wahr''«</span>. Ob dieselbe modale Notwendigkeit auch auf Aussagen über Eigenschaften, wie ,rot‘ oder ,schwer‘, die weder positiv noch negativ sind, zutrifft, ist nicht erwiesen. Hier kann nur von modaler ,Kontingenz‘ gesprochen werden, die universal, alles Seiende innerhalb der <span style="color:#FF6000">»''zufälligen Struktur der Welt''«</span> betrifft. Somit sind die Aussagen <span style="color:#4C58FF">— ‚'''A'''‘ —</span> in der GÖDEL-Regel, nur auf Aussagen über ,positive‘ Eigenschaften eingeschränkt, und nicht allgemein gültig. Die <span style="color:#4C58FF">[ Nezessisierungsregel ]</span> ist nur für <span style="color:#FF6000">„Transzendentalia“ „modal wahr“</span>, und für ,Nicht-Transzendentalia‘ immer <span style="color:#FF6000">„modal falsch“</span>. Der unbegrenzt Unendliche, GOTT, — im Glauben der Christen —, ist deswegen ,notwendig für uns da‘ ''':''' <span style="color:#4C58FF">— ‚'''Gx→E'''<sub>not</sub>'''x'''‘ —</span>, weil er als GOTT ,vollkommen‘, ,perfekt‘ und absolut ,positiv‘, d.h. absolut ,gut allein‘ ist, ohne jede Negativität ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>; <span style="color:#00B000">(was auch schon im 2. Beweisgang mit Term :13: verifiziert wurde)</span>. Und wenn GOTT ,vollkommen‘, ,perfekt‘, ,positiv‘, und absolut ,gut‘ ist, dann ist er das auch ,notwendig aus sich‘ ''':''' <span style="color:#4C58FF">— ‚'''PG → □PG'''‘ — ::</span> <span style="color:#00B000">(als Zusatz-Korollar im 2. Beweisgang mit Axiom-4 und der <span style="color:#4C58FF">[ Instanz(X:=G) ]</span>)</span>, d.h. ,aus seinem Wesen‘. Das ist gerade das, ,was‘ GOTT als GOTT ausmacht ''':''' sein ,Wesen‘, bzw. seine <span style="color:#FF6000">„Natur“</span>. Zusammen mit der Definition-1 für GOTT, <span style="color:#00B000">(und der Definition-2 ''':''' Alle Wesenseigenschaften hängen notwendig gleichwertig aus sich zusammen)</span>, ist dieses, aus der <span style="color:#FF6000">„Natur“</span> GOTTES sich ergebende, ‚Notwendigsein‘, <span style="color:#4C58FF">— '''□''' —</span>, aller ‚positiven‘ Eigenschaften im Axiom-4, und ihr logischer Zusammenhang, d.i. die Koinzidenz aller ,Vollkommenheiten‘ und ,Zuschreibungen‘ im Unendlichen, GOTT, ihr ,Zusammenfallen in eins‘, die entscheidende Voraussetzung, aus der sich dann für GÖDEL <span style="color:#00B000">(im 2. Beweisgang)</span> auch der logische Zusammenhang, bzw. die ontologische Identität, <span style="color:#00B000">(die Koinzidenz)</span>, von <span style="color:#FF6000">„Dasein“</span> und <span style="color:#FF6000">„Wesen“</span> in GOTT, im Basis-Theorem-2 ''':''' <span style="color:#4C58FF"> — ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ —</span> mit Notwendigkeit ergibt. Damit hat GÖDEL ein altes <span style="color:#4C58FF">„theologisches“</span> Theorem der Vergessenheit entrissen. Das Theorem-2 ist dann, in weiterer Folge, die ,modal‘ notwendige, d.h. die transzendentale Voraussetzung auch für den Konsequenz-Teil im Theorem ANSELMS, <span style="color:#00B000">(Term :09: hier im 3. Beweisgang)</span>. <span style="color:#FF6000">„Positive Eigenschaften“<span style="color:#00B000"> | </span>„Vollkommenheiten“</span> sind ,immer‘ auch <span style="color:#FF6000">„notwendige Eigenschaften“</span>, daher ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span>. Das ,Dasein‘, die <span style="color:#FF6000">„Existenz“</span> ist ,immer‘ etwas <span style="color:#FF6000">„Positives“</span>, speziell in GOTT, dem Schöpfer jeder ,Existenz‘, bzw. allen ,Seins‘. Axiom-4 begründet im GÖDEL-Kalkül das Basis-Theorem-2, <span style="color:#00B000">(wie auch das Korollar-3 von der exklusiven Einzigartigkeit GOTTES)</span>, und ,verankert‘ diese Theoreme damit zugleich in der <span style="color:#4C58FF">,theologisch‘</span>-philosophischen Tradition der ,Rede von GOTT‘ bei ARISTOTELES, — AVICENNA, — ANSELM, — DESCARTES, — LEIBNIZ, — HEGEL, — und bei GÖDEL mit äußerster ,logischer‘ Klarheit. Anmerkung-5 ''':''' Der ‚Schlüsselbegriff‘ in diesem Kalkül ''':''' <span style="color:#FF6000">„positive Eigenschaft“</span>, bzw. <span style="color:#FF6000">„Vollkommenheit“<span style="color:#00B000"> | </span>„Perfektion“</span>, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, dominiert alle Axiome des GÖDEL-Kalküls, jedoch ohne inhaltlich genauer ‚bestimmt‘ worden zu sein. Für <span style="color:#4C58FF">— ‚'''P'''‘ — </span> gibt es keine explizite Definition '''!''' <span style="color:#00B000">(Das Theorem-1 ''':''' <span style="color:#4C58FF">— ‚'''PX→◇∃xXx'''‘ —</span>, besagt nur, dass die ,postulierten‘, positiven Eigenschaften, die <span style="color:#FF6000">„Transzendentalia“</span>, formal miteinander verträglich, d.h. ‚widerspruchsfrei‘ sind, wegen Axiom-2. Axiom-2 ''':''' <span style="color:#4C58FF">— ‚'''PX ∧ □∀x(Xx→Yx)→PY'''‘ —</span>, besagt, dass positive Eigenschaften ,gleichwertig‘ sind, d.h. gleich ,wahr‘ sind, weil sie ,notwendig‘, <span style="color:#4C58FF">— '''□''' —</span>, aus sich, alle paarweise mit- und voneinander ,impliziert‘ sind, sich gegenseitig ,einschließen‘, und damit eine Einheit bilden, d.h. in GOTT ,eins‘ sind. Axiom-2 ist somit zugleich eine ,indirekte‘ Definition für ,positive‘ Eigenschaften ''':''' <span style="color:#4C58FF">— ‚'''P'''‘ —</span>. Definition-2 ''':''' <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>'''x ↔ Xx ∧ ∀Y(Yx→ □∀y(Xy→Yy))'''‘ —</span>, besagt ''':''' Weil die ,gleichwertigen‘, positiven Eigenschaften sich gegenseitig implizieren, und damit notwendig von einander abhängen, d.h. koinzident in GOTT ,eins‘ sind, — wenn <span style="color:#4C58FF">‚'''x'''‘</span> für GOTT steht —, dann sind sie somit auch die ,wesentlichen‘ Eigenschaften, die <span style="color:#FF6000">„ultimativen Transzendentalia“</span>, in GOTT, der, wesentlich und exklusiv, notwendig ,Einer‘ ist. Die Definition-2 ist nur dann <span style="color:#FF6000">„modal wahr“</span>, wenn ihre Eigenschafts-Variablen, <span style="color:#4C58FF">— ‚'''X'''‘ —</span> und <span style="color:#4C58FF">— ‚'''Y'''‘ —</span>, mit positive Eigenschaften, d.h. mit <span style="color:#FF6000">„Transzendentalien“</span>, besetzt werden. Diese Definition ist jedoch sofort <span style="color:#FF6000">„modal falsch“</span>, wenn ihre Variablen mit nicht-positive Eigenschaften, wie ,rot‘ oder ,schwer‘ belegt werden, die nicht ,transzendental‘-allgemein gültig sind. Fußnote zu Definition-2 in der GÖDEL-Notiz ''':''' <span style="color:#FF6000">»''any two essences of x are nec. equivalent''«</span>. Die paarweise, notwendige Äquivalenz von zwei beliebigen Wesenseigenschaften der Individuum-Variable <span style="color:#4C58FF">‚'''x'''‘</span>, wird hier, spezifisch für GOTT, d.h. wenn <span style="color:#4C58FF">‚'''x'''‘</span> für GOTT, dem ,Einen‘, steht, zur <span style="color:#FF6000">„Koinzidenz“</span>, — zum paarweise ,Zusammenfallen aller Gegensätze in Einem‘ —, dem inneren Zusammenhang aller seiner <span style="color:#FF6000">„ultimativen“</span> Vollkommenheiten, d.h. aller <span style="color:#FF6000">„Transzendentalia“</span> und Zuschreibungen, in dem unbegrenzt Unendlichen, GOTT, den schon der Philosoph und Kardinal NIKOLAUS von Cues als <span style="font-family: Times;"><big>,coincidentia oppositorum‘</big></span> verstanden hat.)</span> In den entscheidenden ‚Schlusssätzen‘ des Kalküls ist der ‚Schlüsselbegriff‘ verschwunden. Hier ist nur mehr von GOTT, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, die Rede ''':''' Korollar-1, <span style="color:#FF6000">»''Es ist definitiv denkbar, dass es GOTT gibt''«</span>, Theorem-2, <span style="color:#FF6000">»''Dasein, GOTT-Sein, Göttlichkeit ist das Wesen GOTTES''«</span>, Theorem-3, <span style="color:#FF6000">»''Weil GOTT definitiv denkbar, d.h. widerspruchsfrei möglich ist, darum ist auch der Glaube an GOTT widerspruchsfrei, logisch richtig und mathematisch evident, der annimmt, dass es GOTT, mit Notwendigkeit, wirklich gibt''«</span>, <span style="color:#00B000">(nach ANSELM von Canterbury, und was spezifisch das <span style="color:#FF6000">»</span>''Privilegium der Gottheit allein''<span style="color:#FF6000">«</span> ist, nach LEIBNIZ)</span>, und Korollar-3, <span style="color:#FF6000">»''Es gibt notwendig aus sich, d.i. unverursacht, nur einen GOTT''«</span>. Das GÖDEL-Kalkül ist zu diesen Erkenntnissen gekommen, ohne die Eigenschaften, bzw. die ‚Vollkommenheiten‘ GOTTES, d.h. wer oder was GOTT ‚an sich‘ selbst ist, genauer bestimmen zu müssen, <span style="color:#00B000">(was ,für uns‘ ohnehin ,unmöglich‘ ist)</span>; außer im Theorem-2, in dem das <span style="color:#FF6000">„Dasein“</span> GOTTES als die ‚für uns‘ bestimmende und wichtigste <span style="color:#FF6000">„Wesenseigenschaft“</span> in GOTT erkannt worden ist, — immer vorausgesetzt <span style="color:#00B000">(,angenommen‘)</span>, man ‚glaubt‘ an den zeitlos-ewigen GOTT ''':''' <span style="color:#00B000">(Term :01:)</span>. Der GOTT des GÖDEL-Kalküls ist nicht mehr der an Raum und Zeit gebundene ‚Gott‘ des ARISTOTELES, sondern der von Raum und Zeit <span style="color:#FF6000">»''unabhängige''«</span> GOTT der Bibel bei ANSELM und bei LEIBNIZ. Das GÖDEL-Kalkül, <span style="color:#00B000">(wie ja auch der sog. ‚ontologische Gottesbeweis‘ ANSELMS)</span>, kann jedoch, — bei aller ‚Coolness‘ —, keinen GOTT-Glauben ‚erzeugen‘, sondern setzt vielmehr die Existenz GOTTES notwendig als gegeben schon voraus. Das Kalkül des Logiker GÖDEL beweist aber, dass der traditionelle ‚GOTT-Glaube‘, <span style="color:#FF6000">»''die theologische Weltanschauung''«</span>, mit den Maßstäben der modernen Logik <span style="color:#FF6000">»''durchaus vereinbar''«</span>, d.h. logisch ,richtig‘ und <span style="color:#FF6000">»''mathematisch evident''«</span> ist, weil der ‚Nicht-GOTT-Glaube‘, <span style="color:#FF6000">»''die atheistische Weltanschauung''«</span>, im Möglichkeitsbeweis notwendig zu unlösbaren Widersprüchen führt, und somit logisch ,falsch‘ ist. <span style="color:#00B000">(Die ,Logik‘ hat aber, — bekanntlich —, bei allen wichtigen, persönlichen Entscheidungen immer nur eine untergeordnete Rolle '''!''' )</span> Anmerkung-6 ''':''' Das erste, ,regulär‘ <span style="color:#00B000">(├ )</span> abgeleitete, Hauptergebnis im 3. Beweisgang, Term :10: <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span> ''':''' der Glaube, dass GOTT ,notwendig‘ existiert, ist die logische Konsequenz aus der Prämisse, Term :1: <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>. Dieses erste Hauptergebnis hat also den überlieferten, traditionellen GOTT-Glauben zur Voraussetzung, und ist daher davon ,abhängig‘, d.h. Term :10: ist der Ausdruck einer ,Glaubensüberzeugung‘. Das zweite Hauptergebnis im 3. Beweisgang, das Theorem ANSELMS ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx→□∃xGx'''‘ —</span>, dagegen, ist die Darstellung der Abhängigkeit des ersten Hauptergebnisses von dem, vorher schon bewiesenen, ,Axiom‘ von der ,möglichen‘ Existenz GOTTES ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, dem Möglichkeits-Korollar-1 aus dem 1. Beweisgang. Dem geht folgende Beobachtung voraus ''':''' Der Term ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, hat in seiner syntaktischen Stellung hier, im Theorem-3, nicht mehr den überlieferten, traditionellen GOTT-Glauben zur Voraussetzung, und ist damit, in seiner Position als Konsequenz-Teil im Theorem ANSELMS, auch nicht mehr davon syntaktisch abhängig, sondern stützt sich formal-syntaktisch nur auf die behauptete Möglichkeit GOTTES; daher muss diese ,angenommene‘ Möglichkeit noch bewiesen <span style="color:#00B000">( ╞ )</span> werden. Dazu die Feststellung LEIBNIZ‘, der diesen Zusammenhang, und seinen Mangel, erkannt hat ''':''' ::Das Theorem ANSELMS ist <span style="color:#FF6000">» ''ein unvollständiger Beweis, der etwas voraussetzt, was man noch hätte beweisen'' <span style="color:#00B000">( ╞ )</span> ''sollen, um ihm mathematische Evidenz zu verleihen — nämlich, dass man dabei stillschweigend voraussetzt, diese Vorstellung des durchaus großen oder durchaus vollkommenen Wesens sei möglich und enthalte keinen Widerspruch'' «</span>. Diesen <span style="color:#FF6000">»''unvollständigen Beweis''«</span> hat GÖDEL im 1. Beweisgang mit dem ,regulär‘ <span style="color:#00B000">(├ )</span> abgeleiteten, und widerspruchfreien Möglichkeits-Korollar-1, vervollständigt, und damit hat er mit <span style="color:#FF6000">»''mathematischer Evidenz''«</span> bewiesen ''':''' <span style="color:#FF6000">»''Diese Vorstellung des durchaus großen oder durchaus vollkommenen Wesens''«</span> enthält <span style="color:#FF6000">»''keinen Widerspruch''«</span> '''!''' Das Korollar-1 ist nur vom logischen Axiom-1 und von der mathematischen Äquivalenz der Perfektionen, <span style="color:#00B000">(der Transzendentalien)</span>, im Axiom-2 ,abhängig‘, und nicht mehr von der ,methodologischen‘ Kalkül-Prämisse, dem traditionellen GOTT-Glauben. Damit hat das Glaubens-Theorem ANSELMS die gesuchte <span style="color:#FF6000">»''mathematische Evidenz''«</span> erreicht, unabhängig von jeder Glaubensüberzeugung. Entscheidend dafür ist der mathematisch-logische Beweis GÖDELS, dass der Nicht-GOTT-Glaube zu einem Widerspruch führt. Zusammenfassung ''':''' Theorem-1 ''':''' <span style="color:#4C58FF">— ‚'''PX→◇∃xXx'''‘ —</span> ''':''' <span style="color:#FF6000">»''Positive Eigenschaften sind konsistent''«</span>, ist die logische Konsequenz aus der Prämisse im 1. Beweisgang, Term :01: <span style="color:#4C58FF">— ‚'''PX'''‘ —</span>, den, — <u>modal-frei</u> — gewählten, ,angenommenen‘ positiven Eigenschaften, bzw. ,Transzendentalia‘. Theorem-2 ''':''' <span style="color:#4C58FF"> — ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ — </span> ''':''' <span style="color:#FF6000">»''GOTT-Sein ist das Wesen GOTTES''«</span>, ist die logische Konsequenz aus der Prämisse im 2. Beweisgang, Term :01: <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, dem, — <u>modal-frei</u> — gewählten, ,angenommenen‘ GOTT-Glauben der Christen. Im Unterschied dazu ist im 3. Beweisgang, das Theorem-3 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx→□∃xGx'''‘ —</span> ''':''' der Glaube, dass es einen GOTT notwendig gibt ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, die logische Konsequenz aus dem, — <u>modal-notwendig</u> — als widerspruchsfrei ,bewiesenen‘, Möglichkeits-Korollar-1 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, im 1. Beweisgang, <span style="color:#00B000">(auch im Beweisgang ,Widerlegung‘ im Anhang)</span>, und damit ist das Glaubens-Theorem-3, als ganzes, ,widerspruchsfrei‘. Das Theorem ANSELMS ist, mit Korollar-1, nur vom logischen Axiom-1 der Widerspruchsfreiheit, und der paarweisen, mathematischen Äquivalenz beliebiger positiver Eigenschaften, <span style="color:#00B000">(aller Transzendentalia)</span>, im Axiom-2, abhängig. Damit ist die Bedingung für die geforderte, spezielle <span style="color:#FF6000">»''mathematische Evidenz''«</span>, und auch für die Widerspruchsfreiheit im Glaubens-Theorem ANSELMS erfüllt; unabhängig von jeder Glaubensüberzeugung. Weil es <span style="color:#FF6000">„modal wahr“</span> ist, dass die Transzendentalien, bzw. die Vollkommenheiten ontologisch, — dem Sein nach —‚ alle <span style="color:#00B000">(zueinander)</span> widerspruchsfrei, und alle <span style="color:#00B000">(miteinander)</span> gleichwertig sind, ist es auch <span style="color:#FF6000">„modal wahr“</span>, dass es möglich ist, dass GOTT, — dem Sein nach —‚ da ist, <span style="color:#00B000">(d.h. existiert)</span>, der die unbegrenzte Summe aller ultimativen Transzendentalia, bzw. der unendlichen Vollkommenheiten allen Grades ist, wie es der ,christliche Glaube‘ des Erzbischofs ANSELM und seiner Anvertrauten ,annimmt‘. ====<div class="center"><span style="color:#660066">Widerlegung</span></div>==== {|class="wikitable" |- ! <div class="center"><span style="color:#660066">GÖDEL-Kalkül : der Möglichkeitsbeweis als Widerlegung des Nicht-GOTT-Glaubens</span></div> |- ! <span style="color:#00B000">''Terme der erweiterten Prädikatenlogik zweiter Stufe_____________ „Benennungen“ und durchgeführte Logik-Operationen''</span> |- | <small> <math>\begin{align} \text{(Axiom 1.1)} & \quad P \neg X \;\Longrightarrow\;\ \neg P\ X\ & \ & \text{„Wenn die Negation von X positiv ist, dann ist X nicht positiv“} \\ \text{(Axiom 2)} & \quad \Box \;\forall x (\ X\ x \Longrightarrow \ Y\ x) \Longrightarrow \ P\ Y & \ & \text{„Die Eigenschaft Y in allen x, die aus der Eigenschaft X in allen x} \\ \text{ } & \quad & \ & \; \; \text{mit modaler Notwendigkeit folgt, ist eine positive Eigenschaft“} \\ \text{[RK]} &\quad \Box\; \forall x A \;\Longrightarrow\;\Box\; \forall x B\; \text{ ├ }\;\Box \; \forall x (A \Longrightarrow\; B)\ & \ & \; \; \text{( :: Modales Prinzip KRIPKE-Γ-Ɐx)} \\ \text{(Korollar-1)} &\quad \Diamond \; \exists x \ G \ x \ & \ & \; \; \text{( „das —,x‘— steht für den GOTT, —,G‘—, der Christen“ )} \\ \text{ } & \text{„Es ist möglich, dass es den GOTT der Christen gibt“} & \ & \Longleftarrow\; \text{was zu beweisen ist !} \\ \text{01} & \quad \; \neg \Diamond \; \exists x \ G \ x \ & \ & \text{ AE: „Es ist unmöglich, dass es diesen GOTT gibt“ (dezidierter Atheismus)} \\ \text{02} & \quad (\neg x = .. )\ & \ & \text{ AE: „Es gibt die Eigenschaft, nicht mit x identisch zu sein“ :: (ungleich)} \\ \text{03} & \quad (\ x = .. )\ & \ & \text{ AE: „Es gibt die Eigenschaft, mit x identisch zu sein“ :: (gleich)} \\ \text{04} & \quad \neg\neg \Box \neg \exists x \ G \ x \ & \ & \text{:01:[ ◇A ↔ ¬□¬A ] :: (Modalregel) } \\ \text{05} & \quad \neg\neg \Box \neg\neg \forall x \neg \ G \ x \ & \ & \text{:04:[ ∃xA ↔ ¬Ɐx¬A ] :: (Quantorenregel) } \\ \text{06} & \quad \text{ ├ }\; \Box \; \forall x \neg G \ x \ & \ & \text{:05:NEG :: [ ¬¬A↔A ] :: (Gesetz der Aussagenlogik) } \\ \text{07} & \quad \Box \; \forall x \neg G \ x \Leftrightarrow\ W & \ & \text{:01:06:[ (:01:↔W) → (├:06:↔W) ] :: (Kalkülregel) } \\ \text{08} & \quad \Box \; \forall x \ G \ x \Leftrightarrow\ F & \ & \text{:07:[ (¬A↔W)↔(A↔F) ] :: (Regel für Wahrheitswerte)} \\ \text{ } & \text{„Jeder GOTT-Glaube ist ganz sicher falsch ! “} & \ & \Longleftarrow\; \text{die logische Konsequenz aus der Prämisse :01: !} \\ \text{09} & \quad \Box \; \forall x (\neg x = x ) \Leftrightarrow \ F \; \ & \text{ } & \text{□ⱯxXx:02:Instanz(X:=(¬x=..)) ⇒ Kontradiktion !} \\ \text{10} & \quad \Box \; \forall x (\ G \ x \Rightarrow\; (\neg x = x)) & \text { } & \text{:08:09:[ (:08:↔F) → (:09:↔F) ] :: „ex falso sequitur quotlibet“ :[RK]} \\ \text{11} & \quad \Box \; \forall x (\ G \ x \Rightarrow \; (\neg x = x)) \Rightarrow \; P (\neg x = .. ) & \ & \text{(A2):Instanz(X:=G):Instanz(Y:=(¬x= ..)) } \\ \text{12} & \quad \ P (\neg x = .. ) & \ & \text{:10:11:[ Modus ponens ] :: [ A→B, A ├ B ]} \\ \text{13} & \quad \ P (\neg x = .. )\;\Rightarrow\ \neg P (\ x = .. )\ & \ & \text{(A1.1):Instanz(X:=(x=..))}\\ \text{14} & \quad \neg P (\ x = .. )\ & \ & \text{:12:13:[ Modus ponens ] :: (log. Schlussregel)}\\ \text{15} & \quad \Box \; \forall x \ (x = x ) \Leftrightarrow \ W \; \ & \ & \text{□ⱯxXx:03:Instanz(X:=(x=..)) ⇒ Tautologie !} \\ \text{16} & \quad \Box \; \forall x (\ G \ x \Rightarrow\; (x = x)) & \ & \text{:08:15:[ (:08:↔F) → (:15:↔W) ] :: „ex falso sequitur etiam verum“ :[RK]} \\ \text{17} & \quad \Box \; \forall x (\ G \ x \Rightarrow\; (x = x)) \Rightarrow \ P (x = .. ) & \ & \text{(A2):Instanz(X:=G):Instanz(Y:=( x= ..))} \\ \text{18} & \quad \ P (\ x = .. )\ & \ & \text{:16:17:[ Modus ponens ]}\\ \text{19} & \quad \text{ ├ }\; (\neg P (\ x = .. )\ \wedge \ P (\ x = .. )) \Leftrightarrow\ F & \ & \text{:14:18:[ Konjunktion ] ⇒ Kontradiktion !}\\ \text{20} & \quad \neg \Diamond \; \exists x \ G \ x \Rightarrow (\neg P (\ x = .. )\ \wedge \ P (\ x = .. )) & \ & \text{:01:19:[ ├A├B╞ A→B ] :: ''KONDITIONALER BEWEIS''}\\ \text{ } & {\color{RedOrange}\text{Der Atheismus führt zu einem logischen Widerspruch ! }} & \ & \Longleftarrow\; \text{was mit Term :20: bewiesen ist !} \\ \text{21} & \quad \neg\neg \Diamond \; \exists x \ G \ x & \ & \text{:20:19:[ Modus tollendo tollens ] :: [ A→B,¬B ├ ¬A ]}\\ \text{22} & \quad \; \Diamond \; \exists x \ G \ x & \ & \text{:21:NEG }\\ \text{(Korollar-1)} & \;\text{„Es ist definitiv möglich, dass es diesen GOTT gibt“} & \ & \Longleftarrow\; \text{was zu beweisen war !} \\ \end{align}</math> </small> |} Anmerkung-7 ''':''' <span style="color:#00B000">( Dieser Beweisgang ist praktisch identisch mit dem 1. Beweisgang, jedoch gestrafft und präzisiert nach G.J.WIRSCHING. Diese Widerlegung des Nicht-GOTT-Glaubens beginnt sofort mit dem Korollar-1 <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span> aus dem 1. Beweisgang, als in Frage gestelltes ,Theorem‘, und beweist, ohne das Axiom-3 <span style="color:#4C58FF">— ,'''PG'''‘ —</span>, und ohne die GÖDEL-Prämisse <span style="color:#4C58FF">— ,'''PX'''‘ —</span>, in einem Zwischenergebnis, die innere Widersprüchlichkeit und damit auch die Unhaltbarkeit der atheistischen Glaubens-Annahme, aus rein logischen ,Gründen‘, bzw. Axiomen. )</span> Dieser Beweisgang geht von der Existenz GOTTES, <span style="color:#4C58FF">— ,'''G'''‘ —</span>, als Glaubens-Annahme, aus, wobei aber die Möglichkeit seiner Existenz, und damit die Sinnhaftigkeit des Glaubens an GOTT, durch die Prämisse :01: in Frage gestellt wird, und daher im Kalkül überprüft werden muss. Denn mit der Behauptung der Existenz GOTTES allein ist es nicht getan. Es muss auch seine ,Möglichkeit‘, d.h. die Sinnhaftigkeit des Glaubens an GOTT aufgewiesen werden. LEIBNIZ hat als erster, <span style="color:#00B000">(nach ANSELM)</span>, dieses Problem gesehen, und GÖDEL hat dafür die Lösung gefunden. Dieser Beweisgang, <span style="color:#00B000">(analog zum Möglichkeitsbeweis von Günther J. WIRSCHING konzipiert)</span>, setzt in den Axiomen, genau wie im 1. Beweisgang, die Existenz von etwas <span style="color:#FF6000">„Positiven“, „Perfekten“, „Vollkommenen“</span>, <span style="color:#4C58FF">— ,'''P'''‘ —</span>, <span style="color:#00B000">(d.h. die Transzendentalien)</span>, allgemein für die Welt voraus, <span style="color:#00B000">(was im Axiom-3 ''':''' <span style="color:#4C58FF">— ,'''PG'''‘ —</span>, auch GOTT ultimativ zugeordnet wird ''':''' <span style="color:#FF6000">»''GOTT ist absolut positiv, perfekt und vollkommen''«</span>)</span>; das dann im 2. Beweisgang mit Term :13: als widerspruchsfrei, <span style="color:#00B000">(als ,wahr‘ und ,annehmbar‘ im Kontext des christlichen Glaubens)</span>, schon ,bewiesen‘ <span style="color:#00B000">( ╞ )</span> worden ist. Die Existenz von ,Transzendentalien‘ in der Welt, ist ein, mit Beispielen belegbares, allgemeines Faktum; ihre Existenz auch in GOTT ist mit dem Term :13: des 2. Beweisganges bewiesen, die jedoch im Unendlichen, GOTT, als Transzendentalia, auch in ,ultimativer‘ Form vorliegen. Axiom-1 ,besagt‘, dass Eigenschaften nicht zugleich, vollkommen und nicht vollkommen, sein können. Axiom-2 ,besagt‘, dass, allgemein, alle Vollkommenheiten, <span style="color:#00B000">(alle Transzendentalien)</span>, gleichwertig, <span style="color:#00B000">(mathematisch äquivalent)</span>, sind. <span style="color:#00B000">(Axiom-2 wird hier um das GÖDEL-Konjunkt <span style="color:#4C58FF">— ,'''PX'''‘ —</span> verkürzt dargestellt. Damit ist auch Axiom-3 für diesen Beweisgang unnötig geworden, ohne dass sich wegen dieser Kürzung am Ergebnis etwas ändert. Axiom-2 wird jedoch sofort <span style="color:#FF6000">„modal falsch“</span>, wenn seine Variablen mit nicht-positive Eigenschaften, wie ,rot‘ oder ,schwer‘ belegt werden, die nicht ,transzendental‘-allgemein gültig sind, die keine ,Transzendentalia‘ sind.)</span> Die Eigenschaft <span style="color:#4C58FF">— (¬x=..) —</span> ,besagt‘, dass GOTT <span style="color:#FF6000">„unvergleichlich“</span> ist, wenn <span style="color:#4C58FF">,'''x'''‘</span> für GOTT steht. <span style="color:#00B000">(Der informelle Term, <span style="color:#4C58FF">— (¬x=..) —</span>, ersetzt hier, wie bei A. FUHRMANN, den formal korrekten Abstraktionsausdruck ''':''' <span style="color:#4C58FF">— λy.(¬x=y) —</span>, aus dem Lambda-Kalkül.)</span> Der Term :16: <span style="color:#4C58FF">— (x=x) ↔ W —</span> steht für die Selbstbezeichnung des GOTTES-JHWH in Exodus 3,14 ''':''' <span style="color:#CC66FF">»''Ich bin der ‚IST‘'' <span style="color:#00B000">(aus mir selbst)</span>«</span>, der Grund für die <span style="color:#FF6000">„Unvergleichlichkeit“</span> GOTTES. Der GOTT der abendländischen, christlichen Tradition wird mit <span style="color:#4C58FF">— ,'''G'''‘ —</span> bezeichnet ''':''' d.i. der <span style="color:#FF6000">„GOTT der Christen“</span>, entsprechend der ,methodologischen‘ Prämisse und der ,Genese‘ des Kalküls, syntaktisch formalisiert in der Definition-1 ''':''' <span style="color:#4C58FF">— ‚'''Gx↔∀X(PX→Xx)'''‘ —</span> ''':''' <span style="color:#FF6000">»''Das Individuum'' <span style="color:#4C58FF">,'''x'''‘</span> ''ist genau dann GOTT'', <span style="color:#4C58FF">,'''G'''‘</span>, ''wenn es alle Vollkommenheiten'', <span style="color:#4C58FF">,'''P'''‘</span>, ''in sich schließt''«</span>, nach der Vorgabe von LEIBNIZ ''':''' <span style="color:#FF6000">»''GOTT ist ein Wesen von äußerster Größe und Vollkommenheit, das alle Grade derselben in sich schließt''«</span>. Mit Korollar-1 hat dieser Beweisgang dasselbe Endergebnis, wie der 1. Beweisgang. Der Beweis, dass der dezidierte Atheismus zu einem logischen Widerspruch führt, und damit falsch ist, ist ein Zwischenergebnis in diesem Beweisgang, und begründet mit <span style="color:#FF6000">»''mathematischer Evidenz''«</span>, und unabhängig von jeder Glaubensüberzeugung, den, von LEIBNIZ gesuchten, Möglichkeitsbeweis für die Existenz GOTTES im Argument des Erzbischofs, und bestätigt damit die Sinnhaftigkeit des GOTT-Glaubens. Einmal Axiom-1 und zweimal Axiom-2 sichern hier das Ergebnis des Kalküls ''':''' das Möglichkeits-Korollar-1 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>''':''' <span style="color:#FF6000">»''Es ist definitiv möglich, dass es den GOTT der Christen gibt''«</span>. Diese zwei Axiome sind die einzigen, und modal-notwendigen, d.h. die transzendentalen Voraussetzungen und Bedingungen für das Endergebnis ''':''' der Widerspruchsfreiheit und Sinnhaftigkeit des Glaubens der Christen an GOTT; <span style="color:#00B000">(dasselbe gilt natürlich auch für die <span style="color:#4C58FF">„theologische“</span> Weltanschauung jeder monotheïstischen Religion '''!''' Dem Erzbischof ANSELM ging es damals nur um seinen Glauben an GOTT.)</span>. Die Logik-Regel <span style="color:#FF6000"><span style="font-family: Times;"><big>„ex falso sequitur quotlibet, etiam verum“</big></span></span>, <span style="color:#00B000">(‚Aus Falschem folgt irgendetwas, auch Wahres‘)</span>, ist der scholastische Ausdruck für die ‚Implikation‘ <span style="color:#00B000">(Folgerung)</span> von Aussagen, die nur dann falsch, <span style="color:#4C58FF">— F —</span> ist, wenn das Antezedens wahr, <span style="color:#4C58FF">— W —</span>, und die Konsequenz falsch, <span style="color:#4C58FF">— F —</span> ist. Andernfalls ist sie immer wahr, <span style="color:#4C58FF">— W —</span>, auch wenn die Voraussetzung falsch, <span style="color:#4C58FF">— F —</span> ist ''':''' ‚Modern‘ darstellbar durch die ‚Wahrheitswertetafel‘ für die ‚materiale Implikation‘, <span style="color:#4C58FF">— ,(A → B)‘ —</span> <span style="color:#FF6000">„wenn A, dann B“</span>. Damit ist auch der <span style="color:#4C58FF">[ Modus tollendo tollens ] :: [ A → B, ¬B ├ ¬A ] </span> verstehbar; <span style="color:#00B000">(vgl. die vierte Zeile der ‚materialen Implikation‘)</span>. Der positive hypothetische Syllogismus ''':''' <span style="color:#4C58FF">[ Modus ponendo ponens ] :: [ A → B, A ├ B ] </span> ist aus der ersten Zeile ablesbar. Die folgende Tabelle gibt für jeden ,Wahrheitswert‘ der Aussagen <math>A</math> und <math>B</math> das Resultat einiger zweiwertiger Verknüpfungen an ''':''' {|class="wikitable hintergrundfarbe2" style="text-align:center;" |- !colspan="2"|''Belegung''!!Konjunktion!!Disjunktion!!materiale<br /> Implikation!!Äquivalenz<br /> Bikonditional!!kopulative<br /> Konjunktion |- !<math>A</math> !<math>B</math> !<math>A</math> und <math>B</math> !<math>A</math> oder <math>B</math> !wenn <math>A</math> dann <math>B</math> !sowohl <math>A</math> als auch <math>B</math> !entweder <math>A</math> oder <math>B</math> |- !W!!W |W||W||W||W||F |- !W!!F |F||W||F||F||W |- !F!!W |F||W||W||F||W |- !F!!F |F||F||W||W||F |} <span style="color:#00B000">(Eine ‚Konjunktion‘ ist nur dann ,wahr‘, wenn beide Aussagen einer ‚Konjunktion‘ wahr sind. Eine ‚kopulative Konjunktion‘ ist nur dann ,wahr‘, wenn entweder die eine, oder die andere Aussage der ‚kopulativen Konjunktion‘ wahr ist. Es besteht also eine Wenn-Dann-Verbindung zwischen beiden Aussagen — eine ,Kopplung‘. Das ist die logische Grundlage von Axiom-1 im GÖDEL-Formalismus)</span> Um das Widersprüchliche der ,Annahme‘ nachzuweisen, dass positive Eigenschaften ,nicht konsistent‘ seien, <span style="color:#00B000">(im 1. Beweisgang)</span>, bzw. um das Unlogische und Sinnwidrige der ,Annahme‘ klarzustellen, es sei ,unmöglich‘, dass es einen GOTT gibt, <span style="color:#00B000">(hier, in der Widerlegung)</span>, verwendet das GÖDEL-Kalkül den Gegensatz ''':''' wahr, <span style="color:#4C58FF">— W —</span>, falsch, <span style="color:#4C58FF">— F —</span>, zwischen der dritten und vierten Zeile der Wahrheitswertetafel, für zwei ,wahre‘ <span style="color:#4C58FF">— W —</span> ,materiale Implikationen‘, in denen die Voraussetzung jeweils falsch, <span style="color:#4C58FF">— F —</span>, ist, entsprechend der Regel <span style="color:#FF6000"><span style="font-family: Times;"><big>„ex falso, <span style="color:#4C58FF">— F —</span>, sequitur quotlibet, <span style="color:#4C58FF">— F —</span>, etiam verum, <span style="color:#4C58FF">— W —</span>“</big></span></span>, jeweils mit der Hilfe von Axiom-1 und Axiom-2, in einer <span style="font-family: Times;"><big>,Reductio ad absurdum‘</big></span>; hier unabhängig von jeder Glaubensüberzeugung. Im Gegensatz dazu, wird, <span style="color:#00B000">(im 2. Beweisgang)</span>, aus dem Glauben an GOTT, auch mit einer <span style="font-family: Times;"><big>,Reductio ad absurdum‘</big></span>, speziell mit Axiom-1, das Widersprüchliche in der ,Annahme‘ nachgewiesen, es gäbe in GOTT <span style="color:#FF6000">»''keine Vollkommenheit, nichts Positives, nichts Perfektes''«</span>, d.h. keine ,Transzendentalia‘. In dieser <span style="font-family: Times;"><big>,Reductio ad absurdum‘</big></span>, im 2. Beweisgang, wird vorausgesetzt <span style="color:#00B000">(,angenommen‘)</span> ''':''' es gibt den GOTT der Christen, <span style="color:#00B000">(als Prämisse :01:)</span>, der ,unvergleichlich‘ und ,einzigartig‘ ist, und in dem auch alle ,Transzendentalia‘ <span style="color:#FF6000">„koinzident“</span> ,eins‘ sind, entsprechend Axiom-2. Für KANT entsteht ein Widerspruch in den Prädikaten eines Satzes. ::<span style="color:#FF6000">»</span> ''Wenn ich das Prädicat in einem identischen Urtheile aufhebe'', <span style="color:#00B000">[ durch eine Negation ]</span>, ''und behalte das Subject, so entspringt ein Widerspruch''. <span style="color:#00B000">[ Wenn ich sage ''':''' ,''GOTT ist nicht allmächtig''‘, entsteht ein Widerspruch zur richtigen Aussage ''':''' ,''GOTT ist allmächtig''‘. ]</span> … ''Wenn ihr aber sagt ''':''' ,GOTT ist nicht‘, so ist weder die Allmacht, noch irgendein anderes seiner Prädicate gegeben; denn sie sind alle zusammt dem Subjecte aufgehoben'', <span style="color:#00B000">[ negiert ]</span>, ''und es zeigt sich in diesem Gedanken nicht der mindeste Widerspruch.'' <span style="color:#FF6000">«</span><ref>vgl. ‚''<span style="font-family: Times;"><big>Kritik der reinen Vernunft</big></span>''‘, Seite 398f; https://www.korpora.org/kant/aa03/398.html</ref> Es ist richtig, wie KANT sagt, der Widerspruch entsteht nicht in dem Gedanken ''':''' <span style="color:#FF6000">»</span>''GOTT ist nicht''<span style="color:#FF6000">«</span>. GÖDEL zeigt daher, dass der Widerspruch erst dann entsteht, wenn von der Annahme ausgegangen wird ''':''' ''<span style="color:#FF6000">»</span>Es ist unmöglich, dass GOTT ist''<span style="color:#FF6000">«</span>. Daraus folgt dann ,regulär‘, mit Hilfe von Axiom-1 und Axiom-2, <span style="color:#00B000">(d.h. mit den Theoremen von den Transzendentalien)</span>, die logische ,Möglichkeit‘ GOTTES, unabhängig von jeder Glaubensüberzeugung. Wie LEIBNIZ klar erkannt hat, muss zuerst, aus dem Widerspruch des Gegenteils, die logische ,Möglichkeit‘, <span style="color:#00B000">(die Konsistenz)</span>, der Existenz GOTTES bewiesen werden ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, bevor daraus die reale ,Notwendigkeit‘ GOTTES abgeleitet werden kann ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, dessen Existenz jedoch, aus dem ,Glauben‘, im Voraus, schon angenommen worden ist. Dieser Sachverhalt ist das ausschließliche Spezifikum GOTTES, <span style="color:#00B000">(das <span style="color:#FF6000">»''Privilegium der Gottheit allein''«</span>)</span>, und gilt nur bei GOTT, als dem Unvergleichlichen und Einzigartigen. Dieses ,Spezifikum‘ wird im Theorem ANSELMS abgebildet ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx→□∃xGx'''‘ —</span>, auf Grund von Axiom-2, das den inneren Zusammenhang, die Koinzidenz auch von ,Möglichkeit‘ und ,Notwendigkeit‘ im Unendlichen, GOTT, erkennen lässt. Bis Zeile 10, im 3. Beweisgang, reicht der Geltungsbereich der ,modal‘-frei gewählten Kalkül-Prämisse :01:, der ,methodologische‘ GOTT-Glaube. In Zeile 11 liegt der ,Schwerpunkt‘ des ontologischen Beweises dann aber am, — modal als notwendig — ,bewiesenen‘ Widerspruch des Gegenteils zum GOTT-Glauben, <span style="color:#00B000"> (formal-syntaktisch dargestellt als widerspruchfreies Antezedens, <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, dem Möglichkeits-Korollar-1 aus dem 1. Beweisgang)</span>, und nicht mehr am ,angenommenen‘ GOTT-Glauben der Kalkül-Voraussetzung, <span style="color:#00B000">(nun dargestellt als Konsequenz <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span> im Theorem ANSELMS)</span>. Das Möglichkeits-Korollar-1 muss jetzt immer, wie folgt, gelesen werden ''':''' <span style="color:#FF6000">»''Es ist <u>widerspruchfrei</u> möglich, dass GOTT ist''«</span>. Damit hat er, — angeregt durch LEIBNIZ, und mit ihm —, die fast einhellig akzeptierte Fehldeutung des ontologisch-<span style="color:#4C58FF">„theologischen“</span> Arguments ANSELMS für GOTT durch gewichtige philosophische, <span style="color:#00B000">(KANT<ref>GOTT ist absolut einzigartig und unvergleichlich. KANT macht GOTT jedoch zu einem ,Ding‘ unter den vielen ,Dingen‘ dieser Welt, indem er die Existenz, bzw. das ,Sein‘ GOTTES mit dem ,Sein der Dinge‘ gleich setzt. Eine solche Gleichsetzung ist bei GOTT unangebracht und daher unzulässig! KANT verkennt damit die Einzigartigkeit und Besonderheit GOTTES. Das ,Sein‘ der Dinge ist, — wie KANT sagt —, kein ,reales Prädikat’, d.h. Existenz ist keine Eigenschaft. Jedoch in GOTT ist ,Sein‘ ein ,reales Prädikat‘, d.h. Existieren ist ,real‘ die Wesenseigenschaft GOTTES, denn GOTT ist der, der für uns, — aus Liebe —, immer schon ,da‘ ist ''':''' in der ,Hypostatischen Union‘, sowohl als GOTT von Ewigkeit zu Ewigkeit, als auch als Mensch in unserer Zeitlichkeit. Das ist das, was GOTT für uns ausmacht —, sein Wesen.</ref>)</span>, und <span style="color:#4C58FF">„theologische“</span>, <span style="color:#00B000">(THOMAS<ref>GOTT ist absolut einzigartig und unvergleichlich. THOMAS unterscheidet die ,Natur GOTTES‘ nicht von der ,Natur der Dinge‘, indem er die ,Natur‘ des GOTTES ANSELMS irrtümlich mit der ,Natur‘ der Dinge gleich setzt. Damit reiht er GOTT unter die vielen Dinge unserer Welt ein, indem er für den GOTT ANSELMS annimmt ''':''' GOTT ,esse in rerum natura‘, d.h. wörtlich, dass der GOTT ANSELMS in der ,Natur‘ der Dinge existiert, <span style="color:#00B000">(was ANSELM nie gesagt hat)</span>. Eine solche Gleichsetzung ist bei GOTT unangebracht und daher unzulässig! Die ,zeitlose-überzeitliche‘ Wirklichkeit, (Natur), GOTTES ist völlig verschieden und unabhängig von der zufälligen Wirklichkeit, (die ,Natur‘), unserer ,raum-zeitlichen‘ Welt. Daher ist sie mit dieser auch nicht vergleichbar. Thomas verkennt damit die Einzigartigkeit und Besonderheit GOTTES.</ref>)</span>, Autoritäten zurechtgerückt, welche die Einzigartigkeit und Unvergleichlichkeit des Unendlichen, GOTT, bei ihrer Beurteilung des Theorem ANSELMS nicht berücksichtigt, sondern den Unendlichen, <span style="color:#00B000">(irrtümlich)</span>, unter die endlichen Dinge unserer Welt eingereiht haben. GÖDEL hat mit dem bewiesenen Widerspruch des Gegenteils zum GOTT-Glauben, den Beweis für die <span style="color:#FF6000">»''mathematische Evidenz''«</span> des Theorem ANSELMS geliefert, was, nach LEIBNIZ, für die Akzeptanz dieses Theorems noch gefehlt hat. Das Theorem ANSELMS besagt universell ''':''' Die <span style="color:#FF6000">»''theologische Weltanschauung''«</span> der Juden, Christen und Muslime, die ,annehmen‘, dass es mit ,Notwendigkeit‘ <span style="color:#4C58FF">— ‚'''□'''‘ —</span> <span style="color:#00B000">(nur)</span> einen GOTT gibt, ist logisch richtig und <span style="color:#FF6000">»''mathematisch evident''«</span>, weil es <u>ohne Widerspruch</u> ,denkbar‘ <span style="color:#4C58FF">— ‚'''◇'''‘ —</span> ist, dass es GOTT gibt ''':''' Nicht mehr und nicht weniger, <span style="color:#FF6000">»''rein verstandesmäßig, (ohne sich auf den Glauben an irgendeine Religion zu stützen)''«</span>. Es geht hier bei GÖDEL nicht um Theoriefindung oder ähnliches. GÖDEL ist kein ,spekulierender‘ Theoretiker. GÖDEL ist Logiker und Mathematiker. Was er sagt, ist mathematisch wahr und logisch richtig. Wenn er sagt, dass die Aussage ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ — »''wahr''«</span> ist ''':''' <span style="color:#FF6000">»''es ist möglich, dass es Gott gibt'' ''':''' ''das ist ,wahr‘ wegen Axiom-2 (und Axiom-1)''«</span>, dann spricht er hier von der mathematischen Wahrheit. Logischerweise ist dann die konträre Aussage ''':''' <span style="color:#4C58FF">— ‚'''¬◇∃xGx'''‘ — »''falsch''«</span> ''':''' <span style="color:#FF6000">»''es ist nicht möglich, dass es einen Gott gibt''«</span>, und zwar mathematisch falsch, weil sich aus dieser Aussage ein Widerspruch ergibt. Jeder, der die mathematische Logik GÖDELS lesen kann, kann das sehen und verstehen ''':''' Das Zwischenergebnis, <span style="color:#00B000">(Term :20:)</span>, in dieser Kalkül-Ableitung, die logische Konsequenz aus der Annahme des dezidierten Atheismus, es sei unmöglich, dass es GOTT gibt, ist der faktische, nachprüfbare, und für jeden Menschen sichtbare Beweis dafür, dass diese Annahme in einen Widerspruch mündet, und damit falsch und unlogisch ist. Das bedeutet, es ist eine Tatsache, bzw. es ist Faktum, dass der Atheismus, — mit <span style="color:#FF6000">»''mathematischer Evidenz''«</span> —, wirklich falsch und unlogisch ist, und daher, mit Recht, als ,Unsinn‘ bezeichnet werden darf '''!''' Das ist nicht bloß als eine Theoriefindung, oder als eine Interpretation eines Autors zu verstehen. Das ist vielmehr genau so wahr und <span style="color:#FF6000">»''mathematisch evident''«</span>, wie, dass zwei mal zwei vier ergibt, und wirklich genau so logisch richtig, wie, dass die Erde sich um die Sonne dreht. Das ist gerade das Überraschende und Unerwartete am Gödel-Kalkül. Es geht hier nicht mehr um Theoriefindung oder Interpretationen, denen man zustimmen kann oder nicht. Es geht hier <span style="color:#FF6000">»''rein verstandesmäßig''«</span> um mathematisch-logische Fakten. Damit steht GÖDEL, in seiner Bedeutung, in gewisser Weise, neben KOPERNIKUS, weil seine Kalkül-Ergebnisse, wie die Berechnungs-Ergebnisse dieses Pioniers der damaligen Zeitenwende, heute, in unserem Äon, ebenfalls mit eingefleischte Vorurteile aufräumen, ohne aber, dass GÖDEL für sich selbst, im Glauben, logisch konsequent gewesen wäre. <span style="color:#00B000">(Er ist sich der Tragweite und der Konsequenzen seiner <span style="color:#4C58FF">„axiomatischen Theologie“</span> anscheinend nicht bewusst gewesen, wenn er sagt ''':''' Man sei heute noch <span style="color:#FF6000">»''weit davon entfernt, das theologische Weltbild wissenschaftlich begründen zu können''«</span>, nachdem sein Kalkül das <span style="color:#FF6000">„atheistische Weltbild“</span> fundamental ins Wanken gebracht und als irrationalen ,Unsinn‘ entlarvt hat. Sein Kalkül ,beweist‘ ( ╞ ) indirekt, dass das <span style="color:#FF6000">„theologische Weltbild“</span>, im Beweisgang ,Widerlegung‘, aus dem Widerspruch des Gegenteils, mit <span style="color:#FF6000">»''mathematisch-logischer Evidenz''«</span>, offensichtlich doch, wissenschaftlich begründet werden kann)</span>. ---- Kurt GÖDEL ist auch deswegen ein Ausnahmelogiker. ---- ===<div class="center"><span style="color:#660066">Epilog für Skeptiker</span></div>=== Wenn man das GÖDEL-Argument genau liest, dann ist nur die Annahme ''':''' <span style="color:#FF6000"> „es ist möglich, dass es GOTT gibt“</span> bewiesen, weil aus der Annahme ''':''' <span style="color:#FF6000">„es ist unmöglich, dass es GOTT gibt“</span> ein logischer Widerspruch ableitbar ist. Die Aussage ''':''' <span style="color:#FF6000">„es gibt GOTT“</span> ist dagegen schon eine Glaubensaussage, und damit ist das auch die ,Grundannahme‘ eines gläubigen Menschen, der dann aus der ,bewiesenen Möglichkeit‘, dass es Gott gibt, ableiten kann ''':''' <span style="color:#FF6000">»''es gibt GOTT wirklich''«</span>, wenn er will ''':''' <span style="color:#FF6000">»''Es stimmt also, was ich glaube '''!''''' «</span> Das ist das Argument ANSELMS, der ein christlicher Amtsträger war, und der daher von dieser Grundannahme auch ausgeht. Solange in den Voraussetzungen des Möglichkeitsbeweises im GÖDEL-Kalkül kein Widerspruch nachweisbar ist, und solange in der logischen Durchführung dieses Beweises keine schweren Mängel festgestellt werden können, ist das Ergebnis des Möglichkeitsbeweises, wie GÖDEL ihn durchgeführt hat, korrekt, und die Folgerungen daraus, logisch richtig, dass es sich hier um <span style="color:#FF6000">»''mathematische Evidenz''«</span> handelt, <span style="color:#00B000">(z. B. wie 2 x 2 = 4)</span>. Aber niemand ist gezwungen, aus der Möglichkeit, dass es GOTT gibt, daraus zu schließen, dass es GOTT auch mit Notwendigkeit gibt, wie das im Argument ANSELMS geschieht, außer, er akzeptiert auch die Grundannahme, dass es den Unendlichen und Unvergleichlichen tatsächlich gibt. Dann kann er mit LEIBNIZ, der selbst an GOTT geglaubt hat, mit Bestimmtheit sagen ''':''' <span style="color:#FF6000">»''gesetzt, dass GOTT möglich ist, so ist er, was das Privilegium der Gottheit allein ist''«</span>, weil GÖDEL mit seinem Kalkül den noch ausstehenden Beweis der Widerspruchsfreiheit dafür geliefert hat. Wenn Du den 3. Beweisgang des GÖDEL-Kalküls genauer anschaust, dann siehst Du, dass der Konsequenz-Teil im Argument ANSELMS, der identisch ist mit dem Term in der Zeile 10, <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, immer noch formallogisch abhängig ist von der methodologischen Glaubens-Prämisse, Term :01:, <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span> ''':''' <span style="color:#FF6000">»''das'' <span style="color:#4C58FF">‚'''x'''‘</span> ''steht für den Gott der Christen''«</span>. Diese Abhängigkeit ist bis zur Zeile 10 offensichtlich und logisch korrekt. <span style="color:#00B000">(Man könnte nach dieser Zeile, ohne Weiteres, ,regulär‘ die <span style="color:#FF6000">„logische Implikation”</span> :: <span style="color:#4C58FF">[├ A ├ B ╞ A→B ]</span> mit Term :01: und Term :10: als ein mögliches Korollar bilden ''':''' <span style="color:#4C58FF">— ‚'''Gx→□∃xGx'''‘ — </span>)</span>. Das bedeutet, der Konsequenz-Teil im Theorem ANSELMS, der in diesem ,regulär‘-möglichen Korollar an zweiter Stelle steht, ist damit in seiner Formal-Struktur offensichtlich ,regulär‘ von der Glaubens-Prämisse, Term :01:, abhängig, d.h. er ist der Ausdruck einer Glaubensüberzeugung. Im Theorem ANSELMS steht er jetzt, in der Zeile 11, als Konsequenz-Teil auch an zweiter Stelle, hat aber nicht mehr seine Glaubens-Prämisse als notwendige Bedingung an erster Stelle vor sich, wie im ,regulär‘-möglichen Korollar. Jetzt steht eine neue und andere Voraussetzung als Begründung vor ihm. Der Schwerpunkt des Argument ANSELMS liegt damit am Begründungs-Teil des ANSELM-Theorems, der jetzt die erste Stelle im Theorem einnimmt ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span> ''':''' <span style="color:#FF6000">»''es ist möglich, dass es GOTT gibt''«</span>, der erst dadurch entstanden ist, und davon abhängig ist, weil sein Gegenteil ''':''' <span style="color:#4C58FF">— ‚'''¬◇∃xGx'''‘ —</span> ''':''' <span style="color:#FF6000">»''es ist unmöglich, dass es GOTT gibt''«</span>, zu einem Widerspruch geführt hat. Dieser Begründungs-Teil, das Antezedens, im Argument ANSELMS, ist daher nicht mehr von der methodologischen Glaubens-Prämisse, Term :01:, abhängig, sondern nur vom Axiom-1, der Widerspruchsfreiheit, und von der paarweisen, mathematischen Äquivalenz beliebiger positiver Eigenschaften im Axiom-2, die im 1. Beweisgang, bzw. im Beweisgang ,Widerlegung‘, mit dem <span style="color:#4C58FF">[ Modus tollendo tollens ] :: [ A → B, ¬B ├ ¬A ]</span>, die Widerspruchsfreiheit der Möglichkeit des GOTT-Glaubens mit Notwendigkeit herbeigeführt haben. Daraus ergibt sich eine logische Verschiebung in der Argumentationskette, denn dieser Begründungs-Teil, der jetzt die Widerspruchsfreiheit für den Konsequenz-Teil liefert, ist selbst unabhängig und frei von jeder Glaubensüberzeugung. Weil widerspruchsfrei und <span style="color:#FF6000">»''mathematisch evident''«</span>, muss er als logische Begründung für die Widerspruchsfreiheit und als Beweis für die <span style="color:#FF6000">»''mathematische Evidenz''«</span> des Konsequenz-Teils gelesen werden, und damit bestätigt er die Widerspruchsfreiheit und Sinnhaftigkeit der Glaubensüberzeugung eines gläubigen Menschen, <span style="color:#00B000">(was auch das Ziel ANSELMS war)</span>. Das heißt also ''':''' der Glaube dieses Menschen ist widerspruchsfrei und sinnvoll, und enthält keinen Zirkelschluss, weil sein Gegenteil, der Nicht-GOTT-Glaube, zu einem Widerspruch führt; <span style="color:#00B000">(das hat GÖDEL mit seinem Kalkül-System bewiesen, dessen Argumentationskette mit einem Computer-Programm, dem sog. ,Theorembeweiser‘, überprüft worden ist, und als <span style="color:#FF6000">»''nachweisbar korrekt''«</span> befunden wurde)</span>. Das Theorem ANSELMS beweist, nach GÖDEL, dass der Glaube an GOTT, mit <span style="color:#FF6000">»''mathematische Evidenz''«</span> notwendig widerspruchsfrei und sinnvoll ist, weil der Nicht-GOTT-Glaube notwendig zu einem Widerspruch führt. <u>Das Theorem beweist jedoch nicht, dass die Existenz GOTTES notwendig ist</u>, <span style="color:#00B000">(wie es fast immer fälschlich gelesen wurde und wird)</span>, sondern, das Theorem ANSELMS geht davon aus, als nicht hinterfragtes Faktum, dass GOTT notwendig, schon immer existiert, und beweist, mit dem GÖDEL-Kalkül, dass diese Glaubens-Annahme widerspruchsfrei und sinnvoll, und <span style="color:#FF6000">»''mit allen bekannten Tatsachen durchaus vereinbar ist''«</span>, wie GÖDEL abschließend sagt. GOTT hat es ja auch nicht ,nötig‘, bewiesen zu werden. Für den Erzbischof ANSELM war die Existenz GOTTES, überall und jederzeit, die ungefragte und für ihn die selbstverständlichste Voraussetzung aller seiner Bemühungen, in seinem Leben, und in seinem Beruf als christlicher Amtsträger, und auch als Theologe in den philosophischen Überlegungen über seinen Glauben. Mit diesen Überlegungen hat er, mit GÖDEL, bewiesen ''':''' Glaube ist nicht irrational, kein Sprung ins Unbekannte, sondern eine freie, vernünftige Entscheidung. Glaube ist rational und vertrauenswürdig. Zusammengefasst heißt das Ergebnis dieser Bemühungen ANSELMS ''':''' Wenn Du an GOTT glauben willst, dann kannst Du das unbedenklich tun, denn Dein Glaube ist auch logisch in der <u>bewiesenen Möglichkeit</u>, dass es GOTT geben kann, begründet, und damit ist er widerspruchsfrei, sinnvoll und kein Zirkelschluss. Dein Glaube an GOTT beruht jedoch, nach wie vor und in erster Linie, auf Deiner freien Entscheidung für GOTT, und nicht auf dem Zwang einer ,logischen‘ Argumentation. Wenn Du nicht an GOTT glauben willst, dann <u>musst Du, und sollst Du, auch nicht deswegen</u> an GOTT glauben, weil der Nicht-GOTT-Glaube zu einem Widerspruch führt, und damit falsch und unlogisch ist. Denn der Glaube an GOTT muss immer eine freie und Deine ganz persönliche Entscheidung für GOTT sein und bleiben. Niemand darf zum Glauben an GOTT gezwungen werden, auch nicht mit ,logischen‘ Argumenten. Warum '''?''' Weil GOTT die Liebe ist '''!''' Und die Liebe duldet keinen Zwang '''!''' Zum Abschluss, und für eine bessere Verständlichkeit dieser Studie, hat die KI, der ich diese Studie für die Erstellung eines Podcast übergeben habe, eine, — sogar für Kinder —, verständliche Metapher kreiert. Sie sagt, man stelle sich vor ''':''' Es sei irgendwo ein ,Schatz’ vergraben, und es gäbe auch eine ,Schatzkarte’ für diesen ,Schatz’. Kurt GÖDEL ist nun gekommen, und hat mit seinem Kalkül bewiesen, dass diese ,Schatzkarte’ korrekt ist und fehlerfrei. Ob aber jemand, mit Hilfe dieser ,Schatzkarte’ auf ,Schatzsuche’ gehen will oder nicht ''':''' das ist und bleibt jedem selbst überlassen, und ist immer eine freie, und ganz persönliche Entscheidung. Damit hat die KI erstaunlich treffend, sowohl die Bedeutung, als auch die reale Funktion des GOTT-Glaubens in der Lebens-Wirklichkeit unserer Welt und Zeit charakterisiert, in Übereinstimmung mit der Gleichniserzählung JESU vom ,Schatz im Acker’; <small><span style="color:#00B000">( vgl. {{Bibel | Matthäus-Evangelium |13|44|EU}} )</span></small>. Der ,Schatz’ ist die <span style="color:#FF6000">„<span style="font-family: Times;"><big>Βασιλεία του Θεού</big></span>“</span><span style="color:#00B000"> | ,Basileía tou Theoú’</span>, d.h. das <span style="color:#CC66FF">»''Königtum GOTTES''«</span>, oder auch das <span style="color:#CC66FF">»''Himmelreich''«</span>. Die ,Schatzkarte’ ist der Glaube an GOTT. Die ,Schatzsuche’ ist der Weg des Glaubens in der Nachfolge JESU, der uns den Weg zeigt zum Ziel, zur Erfüllung aller unserer Sehnsüchte und Wünsche. ---- ---- ;Fußnoten <references /> powzq0h6gaecyyambiis7k4x24lr83l 1090400 1090399 2026-09-05T19:04:45Z Santiago 19191 /* Kurt GÖDEL und der sog. ‚ontologische Gottesbeweis‘ */ 1090400 wikitext text/x-wiki [[Kategorie: Buch]] {{Regal|ort=Philosophie}} {{Vorlage:StatusBuch|9}} ==<div class="center"><span style="color:#660066">'''Kurt GÖDEL und der sog. ‚ontologische Gottesbeweis‘'''</span></div>== <span style="font-family: Times;"><big><div class="center">לַמְנַצֵּ֗חַ לְדָ֫וִ֥ד אָ֘מַ֤ר נָבָ֣ל בְּ֭לִבּוֹ אֵ֣ין אֱלֹהִ֑ים הִֽשְׁחִ֗יתוּ הִֽתְעִ֥יבוּ עֲלִילָ֗ה אֵ֣ין עֹֽשֵׂה־טֽוֹב׃ (Psalm 14,1)</div></big></span> ---- ===<div class="center"><span style="color:#660066">Vorwort</span></div>=== Zur Orientierung ''':''' Die Diskussion um GOTT läuft schon über zweitausend Jahren. Vor etwa tausend Jahren hat sich ein gewisser ANSELM gesagt ''':''' <span style="color:#FF6000">»''Ich glaube an GOTT'' … <span style="color:#00B000">[ sonst wäre er sicher nicht Erzbischof von Canterbury geworden ]</span> … ''aber ich möchte auch wissen und verstehen, ob das stimmt und sinnvoll ist, was ich da glaube '''!''''' «</span> Dann hat er seine Überlegungen dazu aufgeschrieben, und das kann man in seinen Schriften auch heute noch lesen. Der sehr geschätzte deutsche Professor und Philosoph aus Königsberg, Immanuel KANT, hat das, was ANSELM da aufgeschrieben hat, gelesen, <span style="color:#00B000">(vermittelt durch CARTESIUS)</span>, und das dann den <span style="color:#FF6000">„ontologischen Gottesbeweis“</span> genannt, <span style="color:#00B000">(obwohl es in Wirklichkeit gar kein Gottesbeweis ist; genauer ''':''' es ist kein Beweis für die Existenz GOTTES)</span>, und dieser große KANT hat dann großartig bewiesen, das, was ANSELM da aufgeschrieben hat, sei falsch. Es sei <span style="color:#FF6000">„ja gar kein“</span> Gottesbeweis '''!''' <span style="color:#00B000">( Naja, was denn sonst '''?''' )</span> Wobei er den Fehler gemacht hat, dass er den, an sich, unvergleichbaren GOTT mit hundert Talern in seinem Vermögenszustande verglichen hat. <span style="color:#00B000">(Das ist aber eine andere Geschichte.)</span> Hundert Taler und GOTT haben ,an sich‘ nichts gemeinsam, außer, wenn KANT ,wirklich‘ hundert Taler hat, und GOTT auch ,wirklich‘ existiert, <span style="color:#00B000">(wie ANSELM und gläubige Menschen glauben)</span>, dann gibt es GOTT und die Taler eben ,wirklich‘. Aber damit ist man nicht schlauer geworden. Seit KANT läuft die ganze Diskussion um GOTT immer nur als Diskussion um den <span style="color:#00B000">(von KANT)</span> so genannten <span style="color:#FF6000">„ontologischen, <span style="color:#00B000">[ kosmologischen, teleologischen etc. ]</span> Gottesbeweis“</span> —, obwohl es niemals einen Beweis für die Existenz GOTTES geben kann und niemals geben wird. <span style="color:#00B000">(Das haben Wissenschaftler jeder Richtung und Philosophen aller Weltanschauungen uns immer wieder nachdrücklich versucht zu sagen, weil keiner dieser sog. Beweise für die Existenz eines GOTTES stringent ist.)</span> Beweisen kann man die Existenz von Naturgesetzen. Die sind unveränderlich und fix, immer und überall. Jeder vernünftige Mensch muss sie akzeptieren. Man kann darüber nicht diskutieren und sie dann mit Mehrheitenbeschlüsse verändern. Wenn GOTT ebenso bewiesen werden könnte, dann wäre jeder vernünftige Mensch gezwungen, die Existenz GOTTES wie ein Naturgesetz anzunehmen. Gott ist aber kein Naturgesetz. GOTT ist <span style="color:#FF6000">„Person“</span>, — für Christgläubige ''':''' <span style="color:#FF6000">„ein GOTT in drei Personen“</span>. Und GOTT ist <span style="color:#FF6000">„Geist“</span>. Das besagt, dass GOTT nicht mit materiellen Dingen aus unserer Welt verglichen werden darf; <span style="color:#00B000">(was sowohl THOMAS von Aquin als auch Immanuel KANT doch getan haben)</span>. Und ganz wesentlich ''':''' der Zugang zu GOTT läuft nicht über den Beweis, sondern immer nur über den Glauben. Wer an GOTT glauben will, dem antwortet GOTT auf seine Weise — nämlich <span style="color:#FF6000">„geistig“</span> bzw. <span style="color:#FF6000">„geistlich“</span>. Wer nicht an GOTT glauben will, dessen Entscheidung respektiert GOTT, und drängt sich nicht auf. Glaube ist immer eine freie Entscheidung des Menschen für GOTT. Niemand darf gezwungen werden. Wenn es einen Beweis für GOTT gäbe, wäre jeder vernünftige Mensch gezwungen, an GOTT zu glauben. Und das widerspricht ganz entschieden der Freiheit des Glaubens. Daher gibt es nie und nimmermehr einen Existenzbeweis für GOTT '''!!!''' ... Daher darf man das Kalkül des Logiker GÖDEL, <span style="color:#00B000">(und damit auch das Theorem ANSELMS)</span>, nicht als einen Existenzbeweis für GOTT lesen. Sowohl ANSELM als auch GÖDEL setzen die Existenz GOTTES notwendig als gegeben schon voraus. Das GÖDEL-System, und auch das Theorem ANSELMS, sind bloß die logische Bestätigung der Widerspruchsfreiheit der Glaubensüberzeugung eines Menschen, der sich schon entschieden hat, an GOTT zu glauben; und nicht der Grund für seine Entscheidung. Alle sogenannten ,Gottesbeweise‘, sind in Wirklichkeit nichts anderes, als nachträgliche Evaluierungen eines GOTT-Glaubens, bzw. ,Wege‘, <span style="color:#00B000">(bei THOMAS von Aquin)</span>, die aufzeigen, dass der GOTT-Glaube widerspruchsfrei, sinnvoll, und <span style="color:#FF6000">»''mit allen bekannten Tatsachen durchaus vereinbar ist''«</span>, wie GÖDEL sagt. GOTT hat es nicht nötig, ,bewiesen‘ <span style="color:#00B000">( ╞ )</span> zu werden. ===<div class="center"><span style="color:#660066">Einleitung</span></div>=== Eine Studie zum GÖDEL-Kalkül. Der Logiker Kurt GÖDEL <span style="color:#00B000">(1906-1978)</span> hat mit diesem Kalkül eine moderne Rekonstruktion des, <span style="color:#00B000">(von KANT)</span>, so genannten ‚ontologischen Gottesbeweises‘ nach ANSELM von Canterbury auf modal-logischer Basis vorgelegt. Damit hat er die <span style="color:#FF6000">„Rede von GOTT“</span> auf eine ‚vernünftige Basis‘ gestellt, d.h. sie soll für jeden Menschen nachvollziehbar sein, <span style="color:#FF6000">»''rein verstandesmäßig, (ohne sich auf den Glauben an irgendeine Religion zu stützen)''«</span>, wie er sagt. GÖDEL ,nimmt‘ als Logiker, angeregt durch den Philosophen und Mathematiker Gottfried Wilhelm LEIBNIZ, rein theoretisch, fürs Erste, einmal ‚an‘, <span style="color:#00B000">(als Prämisse, d.i. der Term :01: im 3. Beweisgang zum Theorem ANSELMS im Anhang)</span>, dass es GOTT gibt ''':''' d.i. ein sog. ,methodologischer GOTT-Glaube‘, und untersucht die logischen Konsequenzen. Dabei zeigt sich, beim genaueren Hinsehen, dass der ‚Nicht-GOTT-Glaube‘, der ‚dezidierte‘ Atheismus, <span style="color:#00B000">(im Beweisgang ,Widerlegung‘ im Anhang)</span>, überraschender Weise, zu einem Widerspruch führt, und damit logisch ,falsch‘ ist. Jedoch, GÖDEL kann und will mit seinem Kalkül keinen ,GOTT-Glauben‘ ,erzeugen‘, d.h. das GÖDEL-Kalkül ist kein <span style="color:#FF6000">„Existenz-Beweis"</span> für den GOTT der Bibel, sondern, es setzt die Existenz eines GOTTES, einfach als gegeben, schon voraus. GÖDEL beweist dann mit seinem System, dass der traditionelle abendländische ,GOTT-Glaube‘, <span style="color:#FF6000">»''die theologische Weltanschauung''«</span>, <span style="color:#00B000">(d.i. die Kalkül-Prämisse, und das, daraus ,regulär‘ (├ ) abgeleitete, Theorem ANSELMS)</span>, mit den Maßstäben der modernen Logik <span style="color:#FF6000">»''durchaus vereinbar''«</span> <span style="color:#00B000">(d.h. logisch ,richtig‘)</span> ist, im Gegensatz zum ,Nicht-GOTT-Glauben‘, der davon ausgeht, dass es keinen GOTT gibt. GÖDEL beweist mit seinem System ''':''' der traditionelle GOTT-Glaube ist, — mit mathematisch-logischer Evidenz —, widerspruchfrei und wahr. <span style="color:#00B000">(Der Beweis aus dem Widerspruch des Gegenteils ist ein ,indirekter Beweis‘ und kein ,Zirkelbeweis‘ '''!''' )</span> GÖDEL blieb bis zu seinem Tod ohne ein dezidiertes religiöses Bekenntnis. <span style="color:#00B000">(Das Leben ist nicht immer ,logisch‘.)</span> Entsprechend der <span style="color:#FF6000">»''theologischen Weltanschauung''«</span> ist GOTT der Größte, <span style="color:#FF6000">»''über dem nichts Größeres mehr gedacht werden kann''«</span>, <span style="color:#00B000">(ANSELM)</span>; bzw. <span style="color:#FF6000">»''GOTT ist ein Wesen von äußerster Größe und Vollkommenheit, das alle Grade derselben in sich schließt''«</span>, <span style="color:#00B000">(LEIBNIZ)</span>, und der für uns immer schon ,da‘ ist. Das ist die methodologische Prämisse des GÖDEL-Kalküls. Davon ausgehend, zeigen seine Axiome und Definitionen, dass es zu einem Widerspruch führt, falls man ,annimmt‘, es sei nicht möglich, dass es <span style="color:#FF6000">„GOTT“</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span> gibt. Aus dem Widerspruch des Gegenteils wird von GÖDEL, mit dem <span style="color:#4C58FF">[ Modus tollendo tollens ] :: [ A → B, ¬B ├ ¬A ]</span>, dann ,bewiesen‘ <span style="color:#00B000">( ╞ )</span> ''':''' es ist doch möglich, dass es <span style="color:#FF6000">„GOTT“</span> wirklich gibt. Somit ist der Glaube an <span style="color:#FF6000">„GOTT“</span>, — weil widerspruchsfrei —, mit den Worten GÖDELS ''':''' <span style="color:#FF6000">»''mit allen bekannten Tatsachen durchaus vereinbar''«</span>. Immanuel KANT <span style="color:#00B000">(1724-1804)</span> scheint diesen Fall vorausgesehen zu haben, dass versucht werden könnte, die ,Möglichkeit‘ GOTTES aus einem Widerspruch zu ,beweisen‘ ''':''' ::<span style="color:#FF6000">»</span> <span style="color:#00B000">[ Angenommen, es gibt ]</span> ''doch einen und zwar nur diesen '''Einen''' Begriff'' <span style="color:#00B000">[ ,GOTT‘, so dass ]</span> ''das Nichtsein oder das Aufheben seines Gegenstandes'' <span style="color:#00B000">[ GOTT ]</span>, ''in ,sich selbst‘ widersprechend sei; und dieses ist der Begriff des allerrealsten Wesens. Es hat, sagt ihr, alle Realität'', <span style="color:#00B000">[ bzw. alle Vollkommenheit ]</span>, ''und ihr seid berechtigt, ein solches Wesen als ,möglich‘ anzunehmen'' ... <span style="color:#00B000">[ denn das GÖDEL-Kalkül ,beweist‘ ( ╞ ) in der ,Widerlegung‘ im Anhang, wie auch im 1. Beweisgang, aus einem Widerspruch, dass die Existenz GOTTES definitiv logisch ,möglich‘ ist. ]</span> … ''obgleich der sich nicht widersprechende'', <span style="color:#00B000">[ ,mögliche‘ ]</span>, ''Begriff'', <span style="color:#00B000">[ ,GOTT‘ ]</span>, ''noch lange nicht die'' <span style="color:#00B000">[ reale ]</span> ''Möglichkeit des Gegenstandes'', <span style="color:#00B000">[ GOTT ]</span>, ''beweiset. … Das ist eine Warnung, von der Möglichkeit der Begriffe (logische)'', <span style="color:#4C58FF">— '''◇''' —</span>, ''nicht sofort auf die Möglichkeit der Dinge (reale)'', <span style="color:#4C58FF">— '''□''' —</span>, ''zu schließen''<ref>vgl. ‚''<span style="font-family: Times;"><big>Kritik der reinen Vernunft</big></span>''‘, Seite 399; https://www.korpora.org/kant/aa03/399.html</ref>. <span style="color:#00B000">[ Trotz dieser Warnung, wird dieser Schluss dennoch im Theorem ANSELMS vollzogen, bzw. mit GÖDEL im 3. Beweisgang ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx→□∃xGx'''‘ —</span> '''!''' ]</span>. <span style="color:#FF6000">«</span> Warum das <span style="color:#FF6000">»''mit allen bekannten Tatsachen durchaus vereinbar''«</span> ist, und inwieweit KANT sich irrt, wird in dieser Studie gezeigt. ===<div class="center"><span style="color:#660066">Der Schlüsselbegriff im Kalkül</span></div>=== Der ‚Schlüsselbegriff‘ in diesem Kalkül ist <span style="color:#FF6000">„positive Eigenschaft“</span>, bzw. <span style="color:#FF6000">„Perfektion“, „Vollkommenheit“</span> ''':''' <span style="color:#4C58FF">— ‚'''P'''‘ —</span>. Für diesen wichtigen Begriff gibt es aber im Kalkül selbst keine explizite Definition, sondern er wird nur durch seine Verwendung innerhalb des Kalküls indirekt ‚definiert‘. <span style="color:#00B000">(Das heißt ''':''' <span style="color:#4C58FF"> — ‚'''P'''‘ — </span> bezeichnet ein System von ,Eigenschaften‘, die ,positiv‘, bzw. ,vollkommen‘ | ,perfekt‘ | genannt werden, von denen im Kalkül wohl beweisbar ist, dass sie sich gegenseitig ,nicht widersprechen‘, weil sie im System als solche ,gleichwertig‘, bzw. gleich ,wahr‘ sind, jedoch ohne sie erschöpfend aufzählen zu können, oder auch nur sagen zu können, was sie alle im einzelnen bedeuten, außer, dass sie kompatibel sind.)</span> Mit der Wahl dieses Schlüsselbegriffes hat GÖDEL eine wesentliche Vorentscheidung für die Ergebnisse des Kalküls getroffen '''!''' In seinen Notizen zum ‚ontologischen Beweis‘ vom 10. Februar 1970 gibt GÖDEL, — für die nachträgliche Interpretation dieses Begriffes <span style="color:#00B000">(und auch für das Kalkül selbst)</span> —, die richtungsweisende Erklärung ''':''' ::<span style="color:#FF6000">»''Positiv bedeutet positiv im moralisch ästhetischen Sinne...''«</span> ::Und er fügt in Klammer hinzu ''':''' ::<span style="color:#FF6000">»...''(unabhängig von der zufälligen Struktur der Welt). Nur dann sind die Axiome wahr''.«</span><ref>GÖDEL, Kurt, ''<span style="font-family: Times;"><big>‚Ontological proof‘</big></span>'' in ''<span style="font-family: Times;"><big>‚Collected Works‘</big></span>'', vol. III, ed. S.FEFERMAN et al., Oxford (U.P.), 1995; 403–404.</ref> GÖDEL-Axiom-1 ''':''' <span style="color:#4C58FF">— ‚('''PX <small><math>{ \color{Blue} \dot\lor}</math></small> P¬X''')‘ ↔<span style="color:#00B000"> ‚('''¬PX ↔ P¬X''')‘</span> — </span> ''':''' <span style="color:#FF6000"> »''Entweder die Eigenschaft'' <span style="color:#4C58FF">‚'''X'''‘</span> ''oder ihre Negation'' <span style="color:#4C58FF">‚'''¬X'''‘</span> ''ist positiv''«</span>. Hier ist der Hauptkritikpunkt, dass es Eigenschaften gibt, die ,an sich‘ weder positiv noch negativ sind. Beispiele wären ''':''' ‚rothaarig‘ oder ‚schwerwiegend‘; solche Eigenschaften können aber ,für mich‘ entweder positiv oder negativ sein, abhängig von meiner Betrachtungsweise und subjektiven Vorlieben. Diese Eigenschaften, wie ‚rothaarig‘ an sich, oder meine positiv-negativen ‚Betrachtungsweisen‘, sind jedoch der <span style="color:#FF6000">»''zufälligen Struktur der Welt''«</span> entnommen und treffen nicht den <span style="color:#FF6000">»''moralisch ästhetischen Sinn''«</span> von <span style="color:#FF6000">»''positiv''«</span> bei GÖDEL. Er orientierte sich an LEIBNIZ, welcher im Bezug zum ‚ontologischen Beweis‘ definiert ''':''' ::<span style="color:#FF6000">»''Vollkommenheit'' <span style="color:#00B000">[ GOTTES ]</span> ''nenne ich jede einfache Eigenschaft, die sowohl positiv als auch absolut ist, oder dasjenige, was sie ausdrückt, ohne jede Begrenzung ausdrückt''.«</span><ref>Zitiert nach Thomas GAWLICK, in ''<span style="font-family: Times;"><big>‚Was sind und was sollen mathematische Gottesbeweise ?‘</big></span>'', Predigt vom 8.1.2012 in der Kreuzkirche zu Hannover. https://web.archive.org/web/20130524164359/http://www.idmp.uni-hannover.de/fileadmin/institut/IDMP-Studium-Mathematik/downloads/Gawlick/Predigt_Gawlick_Gottesbeweise.pdf</ref> Die Seins-Eigentümlichkeiten <span style="color:#00B000">(Daseinsmodi, Perfektionen)</span> wie ‚wahr‘, ‚gut‘, ‚edel‘ usw. entsprechen dem <span style="color:#FF6000">»''moralisch ästhetischen Sinn''«</span> von <span style="color:#FF6000">»''positiv''«</span> bei GÖDEL. Das sind Beispiele für ‚absolut‘ positive Begriffe aus der Lehre der Seinsanalogie ''':''' <span style="font-family: Times;"><big>‚verissimum‘, ‚optimum‘, ‚nobilissimum‘</big></span>, usw., die, an sich, <span style="color:#FF6000">»''ohne jede Begrenzung gelten''«</span>; zu finden in der <span style="font-family: Times;"><big>‚Via quarta‘</big></span>, bei THOMAS von Aquin, über die <span style="color:#FF6000">„analoge"</span> Abstufung im ‚Sein‘ der Dinge. Diese <span style="color:#FF6000">„analoge"</span> ‚Abstufung‘ ist dann die faktische Begrenztheit <span style="color:#00B000">(d.h. Unvollkommenheit)</span> im <span style="color:#FF6000">»''zufälligen''«</span> ‚Sein‘ der Dinge —. Die <span style="color:#FF6000">„positiven Eigenschaften“</span> GÖDELS ''':''' <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, wie Wahrheit, Einheit, Gutheit, <span style="color:#00B000">(von ,Güte‘)</span>, Schönheit, Adel, <span style="color:#00B000">(von ,edel‘)</span>, Gleichheit, Andersheit, Wirklichkeit, ,Sein‘ im Sinne von Etwas-sein, etc. werden <span style="color:#FF6000">„Perfektionen“</span>, oder auch <span style="color:#FF6000">„Transzendentalia“</span> genannt, <span style="color:#00B000">(von lateinisch ''':''' <span style="font-family: Times;"><big>transcendere</big></span>, <span style="color:#FF6000">„übersteigen“</span>)</span>. In der mittelalterlichen Scholastik sind Transzendentalien die Grundbegriffe, die allem Seienden als <span style="color:#FF6000">„Modus“</span>, <span style="color:#00B000">(d.h. ,Eigentümlichkeit‘, als allgemeine Seinsweisen)</span>, zukommen. Wegen ihrer Allgemeinheit ,übersteigen‘ sie die besonderen Seinsweisen, welche ARISTOTELES die ,Kategorien‘ nannte. Ontologisch betrachtet, werden die Transzendentalien als das allem Seienden Gemeinsame aufgefasst, da sie von allem ausgesagt werden können. Von der KI werden sie, nicht unpassend, als <span style="color:#FF6000">„ultimative Eigenschaften des Seins“</span> bezeichnet, die <span style="color:#FF6000">„jenseits der materiellen Welt existieren“</span>, <span style="color:#00B000">(da sie ,ultimativ‘ nur von GOTT, als den unbegrenzt Vollkommenen, ausgesagt werden können, die jedoch, auch von allen übrigen Seienden, wegen deren seinsmäßigen Unvollkommenheit und Begrenztheit, abgestuft, d.h. <span style="color:#FF6000">„analog"</span>, ausgesagt werden)</span>. Diese Transzendentalien sind ,inakzident‘, das heißt, sie entstehen nicht aus anderen Begriffen, sondern sind erste, unteilbare Bestimmungen <span style="color:#4C58FF">— ‚'''X'''‘ —</span> des Denkens und des Seins, die allen Seienden ''':''' <span style="color:#4C58FF">— ‚'''□∀xXx'''‘ —</span>, unabhängig von ihren speziellen Eigenschaften, als ,relative‘ Vollkommenheiten, <span style="color:#00B000">(bzw. Unvollkommenheiten)</span>, mit ,modaler‘ Notwendigkeit, <span style="color:#4C58FF">— ‚□‘ —</span>, <span style="color:#FF6000">„analogisch"</span> zukommen, d.h. sie sind in allen Seienden, seinsmäßig abgestuft und abgegrenzt, ,relativ‘ zum unbegrenzt Unendlichen ihrer selbst, und <span style="color:#FF6000">»''dasjenige, was sie ausdrücken, drücken sie ohne jede Begrenzung aus''«</span>, <span style="color:#00B000">(LEIBNIZ)</span>; und damit stehen sie ontologisch in einer <span style="color:#FF6000">„analogen"</span> ,Beziehung‘ zu GOTT, dem absolut Vollkommenen und unbegrenzt Unendlichen. In der Erkenntnisordnung wirken sie als die ersten Begriffe des menschlichen Verstehens, die eine Basis für alle weiteren wissenschaftlichen Erkenntnisse bilden. In der Seinsordnung sind die Transzendentalien ontologisch eins, gleichwertig, <span style="color:#00B000">(,mathematisch äquivalent‘)</span>, und daher konvertierbar, d.h. austauschbar, <span style="color:#00B000">(vgl. z. B. den scholastischen ,Merksatz‘ ''':''' <span style="font-family: Times;"><big>,ens et verum convertuntur‘</big></span>)</span>. Damit sind sie auch von einander abhängig, was GÖDEL sowohl im Axiom-2 ''':''' <span style="color:#4C58FF">— ‚'''PX ∧ □∀x(Xx→Yx)→PY'''‘ —</span>, für positive Eigenschaften, als auch in der Definition-2 ''':''' <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>'''x ↔ Xx ∧ ∀Y(Yx→ □∀y(Xy→Yy))'''‘ —</span>, für die Wesenseigenschaften, syntaktisch formalisiert hat mit dem Term-Element ''':''' <span style="color:#4C58FF">— ‚'''□∀x(Xx→Yx)'''‘ —</span>, weil sie sich gegenseitig, — mit ,modaler‘ Notwendigkeit —, gleichwertig ,implizieren‘, d.h. einschließen, <span style="color:#00B000">(im Axiom-2 mit der Individuum-Variable <span style="color:#4C58FF"> — ‚'''x'''‘ —</span>, und in der Definition-2 mit der Individuum-Variable <span style="color:#4C58FF"> — ‚'''y'''‘ — </span>)</span>. Man kann die Transzendentalia, <span style="color:#00B000">(wie GÖDEL)</span>, auch ,Wesenseigenschaften‘ ''':''' <span style="color:#4C58FF"> — ‚'''X'''<sub>ess</sub>‘ —</span>, nennen, weil sie allem Seienden <span style="color:#FF6000">„wesentlich analog"</span> zukommen. Weil Transzendentalien miteinander austauschbar sind, sind sie auch widerspruchsfrei, was GÖDEL mit Axiom-1 syntaktisch darstellt. Die Gültigkeit und Wahrheit, d.h. die mathematisch-logische Evidenz von Axiom-1 und Axiom-2, beruht auf der ontologischen Allgemeinheit und Gültigkeit der Transzendentalia, die GÖDEL mit Definition-2, in sein Kalkül explizit eingeführt und als Wesenseigenschaften ,bestimmt‘ hat. <span style="color:#00B000">(Definitionen werden formal-syntaktisch durch das Äquivalenzzeichen <span style="color:#4C58FF">,'''↔'''‘</span> angezeigt, gelesen als <span style="color:#FF6000">„...ist genau dann ... wenn...“</span>)</span> Die GÖDEL-Axiome und -Definitionen werden jedoch sofort <span style="color:#FF6000">„modal falsch"</span>, wenn ihre Eigenschafts-Variablen, <span style="color:#4C58FF">— ‚'''X'''‘ —</span> und <span style="color:#4C58FF">— ‚'''Y'''‘ —</span>, mit ,Nicht-Transzendentalia‘, wie z. B. ,rot‘ oder ,schwer‘, belegt werden. <span style="color:#00B000">(Dieser ,Sachverhalt‘ wird von Kritikern des GÖDEL-Systems, — zu vorschnell —, verwendet, um ihre Behauptungen zu ,belegen‘, das GÖDEL-Kalkül und seine Konsequenzen seien ,falsch‘.)</span> Zum Überblick ''':''' <span style="color:#FF6000">„Transzendentalia“</span> sind universale, alles Seiende charakterisierende Begriffe, die über kategoriale Einteilungen hinausgehen, und sowohl in der klassischen Scholastik, als auch in der modernen Philosophie, <span style="color:#00B000">(KANT, Uwe MEIXNER<ref>vgl. die ,transzendentalen‘ Bedingungen möglicher Erkenntnisse bei KANT; und auch in der ,Axiomatischen Ontologie‘ bei Uwe MEIXNER</ref>)</span>, als Grundlage der Metaphysik und Erkenntnistheorie dienen. Sie sind die <span style="color:#FF6000">„ersten Begriffe des Seins“</span>, die jedem Ding als ,relative‘ Vollkommenheiten, <span style="color:#00B000">(Perfektionen)</span>, inhärent sind, <span style="color:#FF6000">„analogisch"</span> abgestuft, auf einen ,ultimativ‘-unbegrenzten Bezugspunkt ausgerichtet, und die sich im Denken, <span style="color:#00B000">(für uns als wahr)</span>, und in der moralischen Wertung, <span style="color:#00B000">(für uns als gut und edel)</span>, manifestieren, relativ zum ,ultimativ‘-unbegrenzten Bezugspunkt ihrer selbst. Die faktische, zusätzliche Unvollkommenheit, die sich generell in der notwendigen, und unausweichlichen Vergänglichkeit aller Dinge zeigt, ist einem ontologischen Defekt ,geschuldet‘, der stark zeitabhängig ist, d.h. der einen Anfang und ein Ende hat. Das GÖDEL-Axiom-5 ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span> ''':''' <span style="color:#FF6000">»''Notwendige Existenz ist eine positive Eigenschaft''«</span>, ist immer falsch, wenn es auf etwas aus der <span style="color:#FF6000">»''zufälligen Struktur der Welt''«</span> angewendet wird, wie z. B. auf einen <span style="color:#FF6000">„Tsunami“</span>, dessen ‚Existenz‘ für uns nicht ‚positiv‘ ist. KANT hat schon festgestellt ''':''' <span style="color:#FF6000">„Existenz ist keine Eigenschaft“</span>. Das gilt für alles, was <span style="color:#FF6000">„existiert“</span>. Das Axiom-5 hat nur dann seine Gültigkeit, ist nur dann ,wahr‘, wenn <span style="color:#FF6000">„Dasein“</span> <span style="color:#00B000">(Existenz)</span> und <span style="color:#FF6000">„Wesenseigenschaften“</span> <span style="color:#00B000">(Essenz)</span> in eins zusammenfallen. Bei allen Dingen, die ‚da‘ sind, ist ihr ‚Da-Sein‘ ontologisch immer verschieden zu dem ‚was‘ sie sind ''':''' zu ihrem ,Was-Sein‘. In der philosophischen Tradition, seit ARISTOTELES, wird die ontologische Identität, d.i. die Koinzidenz, der innere Zusammenhang von ‚Sein‘ und ‚Wesen‘ allein nur dem <span style="color:#FF6000">„selbst ‚unbewegten‘ Erstbewegenden“</span> zugeschrieben, dem <span style="color:#FF6000">„<span style="font-family: Times;"><big>πρῶτον κινοῦν ἀκίνητον</big></span>“</span><span style="color:#00B000"> | ,prôton kinoûn akinêton‘</span>, von dem ARISTOTELES etwas später sagt ''':''' <span style="color:#FF6000">»''denn dies ist der Gott''«</span> und dann hinzufügt ''':''' <span style="color:#FF6000">»''so sagen wir ja''«</span>; d.h. das ist eine Interpretation aus dem Glaubenskontext des ARISTOTELES. Er war ein Gott-gläubiger Grieche. Wer an GOTT glaubt, kann das nachvollziehen. GÖDEL musste dieses Axiom-5 postulieren, sonst wäre sein Kalkül nicht aufgegangen, ohne dass er deswegen schon an GOTT glauben müsste. Er hat für sein Kalkül das ontologische Theorem von der Identität von ‚Sein‘ und ‚Wesen‘ im ‚unbewegten Erstbeweger‘ des ARISTOTELES benutzt, ohne diese Herkunft explizit referenziert zu haben. <span style="color:#00B000">(Gilt auch für Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span> ''':''' <span style="color:#FF6000">»''Göttlichkeit, das GOTT-Sein, das ‚Dasein‘ GOTTES, ist eine positive Wesenseigenschaft, eine Perfektion; d.h. ist das ‚Wesen‘ GOTTES ''':''' GOTT ist perfekt''«</span>)</span>. Die ontologische Identität von Sein und Wesen, Existenz und Essenz, wie auch die Koinzidenz von Möglichkeit und Wirklichkeit, von Ursache und Wirkung, sowie auch die ontologische Einheit von <span style="color:#00B000">(Erkenntnis-)</span>Subjekt und <span style="color:#00B000">(Erkenntnis-)</span>Objekt im <span style="color:#FF6000">»''Erkennen seiner Erkenntnis''<span style="color:#00B000">[-Tätigkeit ]</span>«<span style="color:#00B000"> | </span>„<span style="font-family: Times;"><big>νοήσεως νόησις</big></span>“</span><span style="color:#00B000"> | ,noêseôs noêsis‘ <small>(<span style="font-family: Times;"><big>,''Metaphysik''‘</big></span> XII 9, 1074b34)</small></span>, und der innere Zusammenhang der <span style="color:#FF6000">„ultimativen Transzendentalia“</span>, gilt nur in der <span style="color:#FF6000">„unverursachten Letztursache"</span>, auf die ARISTOTELES bei seiner Prinzipienforschung gestoßen ist. Es gibt verschiedene Versuche, die GÖDEL-Axiome durch sog. ,Modelle‘, relativ zu einfacheren ,Welten‘, zu verifizieren, um damit ihre relative Konsistenz nachzuweisen. Für GÖDEL aber <span style="color:#FF6000">»''sind die Axiome nur dann'' <span style="color:#00B000">[ in unserer ,realen‘ Welt ]</span> ''wahr'' <span style="color:#00B000">[ und annehmbar ]</span>«</span>, wenn sie <span style="color:#FF6000">»''unabhängig von der zufälligen Struktur der Welt'' <span style="color:#00B000">[ d.h. jeder auch nur ,möglichen‘ Welt ]</span> ''sind''«</span>. Diese Bedingung verweist jede Verifikation und jede Interpretation der Axiome auf das ,Nicht-Zufällige‘, das ,Notwendige‘, ,Absolute‘, in dem die Axiome und Definitionen des GÖDEL-Kalküls erst dadurch ihren Sinn und ihre Bedeutung bekommen, wenn sie vom ,Absoluten‘ und ,Unendlichen‘ her erklärt und verstanden werden. Damit insistiert GÖDEL auf eine genuin <span style="color:#4C58FF">,theologische‘</span> Interpretation seines Kalküls, mit der <span style="color:#4C58FF">„Theologie“</span> zum Begriff GOTT, dem unbegrenzt Unendlichen, als Verifikationskriterium. Das entspricht auch der ,methodologischen‘ Prämisse seines Kalküls. Die wichtigsten Axiome und Definitionen im GÖDEL-Kalkül sind jedoch bloße ,Annahmen‘, deren Evidenz, sowohl die ,mathematische‘ als auch die <span style="color:#4C58FF">,theologische‘</span>, erst evaluiert, d.h. ,bewiesen‘ <span style="color:#00B000">( ╞ )</span> werden muss. Das bedeutet ''':''' die logische Verifikation der Axiome und Definitionen von GOTT und seinen Vollkommenheiten kann nur Kalkül-intern durch den Aufweis ihrer Widerspruchsfreiheit erfolgen, d.i. <span style="color:#FF6000">»''unabhängig von der zufälligen Struktur der Welt''«</span>. Logisch evaluierte und verifizierte Axiome und Definitionen sind die ,modal‘ notwendigen, d.h. die ,transzendentalen‘ Voraussetzungen für die Ergebnisse eines Kalküls, damit seine Theoreme und Korollare in unserer ,realen‘ Welt als logisch ,wahr‘ und damit für uns auch als ,annehmbar‘ gelten können, während die Prämissen eines Kalküls, <span style="color:#00B000">(die Argument Einführung, <span style="color:#4C58FF">— '''AE:''' —</span> )</span>, nicht notwendige, und somit ,modal‘ frei gewählte ,Annahmen‘ sind. Jedoch aus diesen ,modal‘ frei gewählten, ,möglichen‘ <span style="color:#00B000">( <span style="color:#4C58FF">'''◇'''</span> )</span> Prämissen folgen mit Hilfe der ,bewiesenen‘ <span style="color:#00B000">( ╞ )</span> Axiome und Definitionen die Ergebnisse mit ,modaler‘ Notwendigkeit <span style="color:#00B000">( <span style="color:#4C58FF">'''□'''</span> )</span>. Die Logik des GÖDEL-Systems ist eine ,Prädikatenlogik‘ zweiter Stufe, in der die Quantoren nicht nur Individuum-Variable, sondern auch Eigenschafts-Variable, <span style="color:#00B000">(als noch ,unbestimmte‘ Prädikate im Allgemeinen)</span>, binden können. Die formale Struktur des GÖDEL-Kalküls besteht aus fünf Axiomen und drei Definitionen, mit deren Hilfe in drei Beweisgängen drei Theoreme und mehrere Korollare aus seiner ,methodologischen‘ Prämisse ,regulär‘ <span style="color:#00B000">(├ )</span> abgeleitet werden können, wobei die beiden ersten Beweisgänge, mit ihren Ergebnissen, den dritten vorbereiten, in dem es dann um das Theorem ANSELMS geht. Die Prämisse des GÖDEL-Kalküls in allen Beweisgängen ist der traditionelle ,GOTT-Glaube‘, in der Formulierung speziell nach LEIBNIZ. Ein Axiom, eine Definition, zwei Theoreme und alle Korollare im GÖDEL-Kalkül sind Aussagen über <span style="color:#FF6000">„GOTT“</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>. Alle fünf Axiome, eine Definition und ein Theorem, <span style="color:#00B000">(und das Korollar aus Axiom-4)</span>, sind auch Aussagen über die Eigenschaft <span style="color:#FF6000">„Vollkommenheit“, „Perfektion“</span>, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, die in der <span style="color:#FF6000">»''theologischen Weltanschauung''«</span> als die Wesenseigenschaft GOTTES gilt ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, <span style="color:#FF6000">»''GOTT ist vollkommen''«</span> bzw. <span style="color:#FF6000">»''GOTT ist das Vollkommenste der Wesen''«</span>, <span style="color:#00B000">(DESCARTES)</span>. Zwei Definitionen sind Aussagen über die allgemeinen Wesenseigenschaften aller Seienden, <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>‘ —</span>, die Transzendentalien, die, als notwendige Existenz, <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>‘ —</span>, auch GOTT zugeordnet werden, mit der Besonderheit bei GOTT, dass sowohl alle Eigenschaften, als auch alle anderen Zuordnungen, wie Sein und Wesen, wie Ursache und Wirkung, usw., im Unendlichen, GOTT, <span style="color:#FF6000">„koinzident“</span> sind, d.h. in GOTT paarweise perspektivisch in ,eins‘ zusammenfallen, und die auch, als Transzendentalia, konvertierbar, d.h. austauschbar sind. Diese Sachverhalte machen deutlich, dass eine spezifische ,Verifikation‘ und sachgerechte ,Evaluierung‘ der GÖDEL-Axiomatik nur genuin <span style="color:#4C58FF">,theologisch‘</span> erfolgen kann. Die Evaluierung der <span style="color:#FF6000">»''mathematischen Evidenz''«</span> des GÖDEL-Systems, im Allgemeinen, muss jedoch entsprechend der Maßstäbe einer modalen Prädikatenlogik zweiter Stufe durchgeführt werden. Das GÖDEL-Kalkül unterscheidet <span style="color:#00B000">(in Definition-3 ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x ↔ ∀X(X'''<sub>ess</sub>'''x →□∃yXy)'''‘ —</span>)</span> formal-syntaktisch zwischen der Eigenschaft ,Existenz‘, <span style="color:#4C58FF"> — ‚'''E'''‘ —</span>, die nur GOTT zugeordnet werden kann, und dem Existenz-Operator, <span style="color:#4C58FF">— ‚'''∃'''‘ —</span>, der auch allem Übrigen, das nicht GOTT ist, zugeordnet wird. Es gibt hier auch den formal-syntaktischen Unterschied zwischen der, <span style="color:#00B000">(von mir notierten, jedoch von GÖDEL schon intendierten und angesprochenen)</span>, speziellen ,Notwendigkeit‘, <span style="color:#4C58FF"> — <sub>not</sub> —</span>, die nur der Existenz GOTTES zugeordnet ist, und der modalen ,Notwendigkeit‘, <span style="color:#4C58FF">— ‚'''□'''‘ —</span>, die auf Verschiedenes bezogen werden kann. Diese Unterschiede sind Hinweise, dass GÖDEL in seiner Kalkül-Logik und -Syntax, die Außerordentlichkeit und Eigenständigkeit GOTTES berücksichtigt, der, als Schöpfer der Welt, prinzipiell und absolut <span style="color:#FF6000">»''unabhängig von der zufälligen Struktur der Welt''«</span> ist, die erst durch GOTT auch das ist, was sie ist. ===<div class="center"><span style="color:#660066">Die Genese des Kalküls</span></div>=== Wie kommt GÖDEL zu seinem Kalkül '''?''' Sein Gewährsmann war Gottfried Wilhelm LEIBNIZ, <span style="color:#00B000">(1646-1716)</span>, den er sehr schätzte. Die rekonstruierbare Genese seines Kalküls findet man in LEIBNIZ ''':''' ''<span style="font-family: Times;"><big>‚Neue Abhandlungen über den menschlichen Verstand‘</big></span>'', <span style="color:#00B000">(1704)</span>‚ ''<span style="font-family: Times;"><big>Viertes Buch, Kapitel X ''':''' ‚Von unserer Erkenntnis des Daseins Gottes‘</big></span>'', Seite 475f. Hier der <span style="color:#00B000">[ kommentierte ]</span> Textausschnitt zum sog. ontologischen ‚Gottesbeweis‘''':''' ::<span style="color:#FF6000">»</span>''Folgendes etwa ist der Gang seines'' <span style="color:#00B000">[ d.h. ANSELMS, Erzbischof von Canterbury; 1033-1109, ]</span> ''Beweises ''':''' GOTT ist das Größte'', <span style="color:#00B000">[ ANSELM spricht vom biblischen GOTT des Glaubens, als ''':''' <span style="color:#FF6000">»''den, über dem ,Größeres‘'' | <span style="font-family: Times;"><big>‚maius‘</big></span> | ''nicht mehr gedacht werden kann''«</span> ]</span>, ''oder, wie DESCARTES es ausdrückt ''':''' das Vollkommenste der Wesen oder auch ein Wesen von äußerster Größe und Vollkommenheit'' ''':''' <span style="color:#00B000"> [ GÖDEL ''':''' </span><span style="color:#4C58FF">‚'''P'''‘</span> <span style="color:#00B000">:= ‚Perfektion‘, ‚positive Eigenschaft‘ ]</span>, ''das alle Grade derselben in sich schließt.''<span style="color:#00B000"> [ GÖDEL-Definition-1 ''':''' <span style="color:#4C58FF">— ‚'''Gx↔∀X(PX→Xx)'''‘ —</span> ''':''' <span style="color:#FF6000">»''Das Individuum'' <span style="color:#4C58FF">,'''x'''‘</span> ''ist genau dann GOTT'', <span style="color:#4C58FF">,'''G'''‘</span>, ''wenn'' <span style="color:#4C58FF">,'''x'''‘</span> ''alle Vollkommenheiten'', <span style="color:#4C58FF">,'''P'''‘</span>, ''in sich schließt''«</span>. Definition-1 bildet die traditionelle Vorstellung von GOTT ab. ]</span> ''Dies also ist der Begriff GOTTES.'' <span style="color:#00B000">[ Der Term <span style="color:#4C58FF">— ,'''G'''‘ —</span> steht hier für den biblischen ‚Begriff‘ <span style="color:#FF6000">„GOTT“</span> als ,Individuumname‘ '''!''' ]</span> ''Sehen wir nun, wie aus diesem Begriff das ‚Dasein’ folgt.''<span style="color:#00B000"> [ GÖDEL ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span> ''':''' <span style="color:#FF6000">»''GOTT ist notwendig aus sich ‚da‘''«</span> ''':''' Term :10:, 1. Hauptergebnis im 3. Beweisgang. ]</span> ''Es ist etwas <u>mehr</u>, ‚da‘ zu sein, als nicht ‚da‘ zu sein, oder auch das ‚Dasein‘ fügt der Größe oder der Vollkommenheit'' <span style="color:#00B000">[ GOTTES ]</span> ''einen Grad hinzu, und wie DESCARTES es ausspricht, das ‚Dasein‘ ist selbst eine Vollkommenheit.''<span style="color:#FF6000">«</span> <span style="color:#00B000">(Diesen Ausspruch DESCARTES übernimmt GÖDEL im Axiom-5 ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span> ''':''' <span style="color:#FF6000">»''notwendige Existenz''</span> [ alias ‚Dasein GOTTES’ ] <span style="color:#FF6000">''ist eine positive Eigenschaft''</span> [ alias Vollkommenheit ]<span style="color:#FF6000">«</span>. Dem widerspricht KANT ''':''' <span style="color:#FF6000">„Existenz ist keine Eigenschaft“</span>, bzw. <span style="color:#FF6000">»''Sein ist kein reales Prädikat''«</span>. Das Axiom-5 ist daher nur dann ‚wahr‘, wenn ‚Wirklichsein‘ | <span style="color:#FF6000">„<span style="font-family: Times;"><big>ἐνέργεια οὖσα</big></span>“</span> | ‚enérgeia oúsa‘ | d.h. ‚Dasein‘ und ‚Wesen‘ | <span style="color:#FF6000">„<span style="font-family: Times;"><big>οὐσία</big></span>“</span> | ‚ousía‘ | — genauer ''':''' ‚Wesenseigenschaften’ —, ontologisch ,eins‘ sind, d.h. wenn <span style="color:#FF6000">„Existieren“</span> immer schon die <span style="color:#FF6000">„Wesenseigenschaft“</span> GOTTES ist. Was nach ARISTOTELES nur im <span style="color:#FF6000">„unbewegten Erstbeweger“</span> der Fall ist; bzw. mit LEIBNIZ ''':''' <span style="color:#FF6000">»''was das Privilegium der Gottheit allein ist''«</span> '''!''' Aus der ,methodologischen‘ ,Annahme‘ im 2. Beweisgang GÖDELS ''':''' <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span> ''':''' <span style="color:#FF6000">»''das'' <span style="color:#4C58FF">‚'''x'''‘</span> ''steht für den GOTT der Christen''«</span>, und mit Hilfe von Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span> ''':''' <span style="color:#FF6000">»''Göttlichkeit ist eine positive Eigenschaft''«</span>, bzw. <span style="color:#FF6000">»''GOTT ist perfekt''«</span>, mit Axiom-4 ''':''' <span style="color:#4C58FF">— ‚'''PX → □PX'''‘ —</span> ''':''' <span style="color:#FF6000">»''Positive Eigenschaften sind notwendig aus sich, — von Natur aus —, positiv''«</span>, mit Definition-2 ''':''' <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>'''x ↔ Xx ∧ ∀Y(Yx→ □∀y(Xy→Yy))'''‘ —</span> ''':''' <span style="color:#FF6000">»''Zum Wesen gehören notwendig auch alle Konsequenzen aus einer Wesenseigenschaft''«</span>, und mit Axiom-1 und der Definition für GOTT, folgt nach einigen logischen Umformungen das GÖDEL-Theorem-2 ''':''' <span style="color:#4C58FF">— ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ —</span> ''':''' <span style="color:#FF6000">»''Das'' <span style="color:#4C58FF">‚'''x'''‘</span> ''ist genau dann der GOTT der Christen, wenn das Wesen dieses GOTTES sein eigenes Sein ist''«</span>. Dasein und Wesen sind im Unendlichen, GOTT <span style="color:#FF6000">„koinzident“</span> ,eins‘, übereinstimmend mit dem Theorem des ARISTOTELES. Mit diesem, im Kalkül <u>ohne</u> Axiom-5 ,regulär‘ (├ ) abgeleiteten Theorem, widerlegt er KANT für den individuellen Spezialfall <span style="color:#4C58FF">‚'''G'''‘</span> := <span style="color:#FF6000">„GOTT“</span>. Nachprüfbar im Anhang ''':''' im ‚ontologischen‘ Beweis für das Basis-Theorem-2. Somit ist Axiom-5 ,wahr‘, und KANT, der <span style="color:#FF6000">»''eine Abneigung gegen das Gebet hatte''«</span> und auch <span style="color:#FF6000">»''nie zu den sonntäglichen Kirchgängern zählte''«</span><ref>Uwe SCHULTZ ''':''' ‚''<span style="font-family: Times;"><big>Immanuel Kant</big></span>''‘, Rowohlt Monographie 50659, Seite 12</ref>, hat sich hier, im Bezug auf GOTT, geirrt. <span style="color:#4C58FF">„Theologie“</span>, als Wissenschaft von GOTT, war für KANT nie eine ernstzunehmende Option. Die <span style="color:#4C58FF">„Theologie“</span>, als Wissenschaft von GOTT, die natürlich immer auch verbunden sein muss mit der täglichen ,Erfahrung‘ einer Glaubens-Praxis, im Gebet und in den Gottesdienst-Feiern des <span style="color:#4C58FF">„Theologen“</span>, und die daraus entsteht, ist eine ziemlich ,ausgereifte‘ Disziplin. Es haben sich, durch Jahrhunderte hindurch, viele gläubige und auch gescheite Menschen, schon im Judentum, und dann im Christentum, und ebenfalls im Islam, darum bemüht.)</span> :: <span style="color:#FF6000">»</span>''Darum ist dieser Grad von Größe und Vollkommenheit oder auch diese Vollkommenheit, welche im ‚Dasein‘ besteht, in diesem höchsten, durchaus großen, ganz vollkommenen Wesen, denn sonst würde ihm ein Grad fehlen, was gegen seine Definition wäre. Und folglich ist dies höchste Wesen ‚da‘. Die Scholastiker, ohne selbst ihren'' <span style="font-family: Times;"><big>doctor angelicus</big></span> <span style="color:#00B000">[ := THOMAS von Aquin ]</span> ''auszunehmen, haben diesen Beweis verachtet'', <span style="color:#00B000">[ wie später auch Immanuel KANT ]</span>, ''und ihn als einen Paralogismus'' <span style="color:#00B000">[ := Fehlschluss ]</span> ''betrachtet, worin sie sehr unrecht gehabt haben; und DESCARTES, welcher die scholastische Philosophie im Kolleg der Jesuiten zu La Flèche lange genug studiert hatte, hat sehr recht gehabt, ihn wieder zu Ehren zu bringen. Es ist nicht ein Paralogismus, sondern ein unvollständiger Beweis'', <span style="color:#00B000">[ den GÖDEL vervollständigt hat ]</span>, ''der etwas voraussetzt, was man noch hätte beweisen sollen, um ihm mathematische Evidenz zu verleihen — nämlich, dass man dabei stillschweigend voraussetzt, diese Vorstellung des durchaus großen oder durchaus vollkommenen Wesens sei möglich und enthalte keinen Widerspruch'' <span style="color:#00B000">[ '''::''' <span style="color:#4C58FF">— '''◇''' —</span> '''::''' ,möglich‘, ,konsistent‘, ,denkbar‘; GÖDEL beweist im 1. Beweisgang aus Theorem-1 ''':''' <span style="color:#4C58FF">— ‚'''PX→◇∃xXx'''‘ —</span>, <span style="color:#FF6000">»''positive Eigenschaften'', <span style="color:#00B000">[ die allgemeinen Transzendentalien ]</span>, ''sind widerspruchsfrei''«</span>, mit Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, folgt Korollar-1 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, <span style="color:#FF6000">»''GOTT ist widerspruchsfrei möglich''«</span> ]</span>. ''Und es ist schon etwas, dass man durch diese Bemerkung beweist ''':''' gesetzt, dass GOTT'' <span style="color:#00B000">['' <span style="color:#FF6000">»widerspruchsfrei«</span> '']</span> '',möglich‘ ist, so ‚ist‘ er'' <span style="color:#00B000">[ ,notwendig‘ '''::''' <span style="color:#4C58FF">— '''□''' —</span> '''::''' für jede mögliche Welt auch wirklich aus sich ‚da‘ ]</span>, ''was das Privilegium der Gottheit allein ist'' ''':''' <span style="color:#00B000">[ Im 3. Beweisgang, Theorem-3 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx→□∃xGx'''‘ —</span> ''':''' ‚ANSELMS Prinzip‘ ''':''' <span style="color:#FF6000">»''Weil GOTT widerspruchsfrei ,möglich‘ ist, darum ist auch der Glaube widerspruchsfrei, der annimmt, dass GOTT aus sich ,notwendig‘ da ist''«</span>; mit Korollar-3 ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx ∧ □∀y(Gy→x=y)'''‘ —</span>, <span style="color:#FF6000">»''Es gibt notwendig nur einen einzigen GOTT''«</span>. Damit ist auch der Monotheïsmus bewiesen. ]</span> ''Man hat recht, die Möglichkeit eines jeden Wesens anzunehmen und vor allem die GOTTES, bis ein anderer das Gegenteil beweist''. <span style="color:#00B000">[ Das Gegenteil besagt, dass GOTT ,unmöglich‘ ist. Hier setzt der Möglichkeitsbeweis im GÖDEL-Kalkül an, und beweist, dass diese Aussage zu einem Widerspruch führt. ]</span> ''Somit gibt dieser metaphysische Beweis schon einen moralischen zwingenden Schluss ab, wonach wir dem gegenwärtigen Stande unserer Erkenntnisse zufolge urteilen müssen, dass GOTT ‚da‘ sei, und demgemäß handeln.'' <span style="color:#00B000">[ Aber nicht logisch zwingend '''!''' Denn die Interpretation <span style="color:#4C58FF">— ‚'''G'''‘ —</span> mit dem GOTT der Bibel, als ,methodologische‘ Kalkül-Prämisse, ist nicht zwingend, jedoch ,modal‘ möglich, <span style="color:#4C58FF">— '''◇''' —</span>, und im christlichen Glaubenskontext sinnvoll, was mit einer stimmigen <span style="color:#4C58FF">„theologischen“</span> Interpretation des GÖDEL-Kalküls gezeigt werden kann. Damit wäre dann auch die Frage beantwortet, ob das GÖDEL-System sich plausibel als eine Theorie von GOTT und seinen Eigenschaften interpretieren lässt, bzw. als eine <span style="color:#FF6000">»''axiomatische''«</span> <span style="color:#4C58FF">„Theologie“</span>, wie sie André FUHRMANN apostrophiert. Das <span style="color:#4C58FF">— ‚'''G'''‘ —</span> ist der ,Individuumname‘ für den GOTT der Bibel, — ,GOTT‘ groß geschrieben —, im monotheïstischen, christlichen Glaubenskontext, den auch LEIBNIZ teilt. Dann steht der ,Name‘ auch synonym für das ,existierende‘ Individuum, d.h. für dessen ,Existenz‘. ]</span> ''Es wäre aber doch zu wünschen, dass gescheite Männer'' <span style="color:#00B000">[ sic ! ]</span> ''den Beweis mit der Strenge einer mathematischen Evidenz vollendeten'', <span style="color:#00B000">[ was GÖDEL veranlasst hat, seine Version eines ‚ontologischen Beweises’ zu kreieren, dessen <span style="color:#FF6000">»''mathematische Evidenz''«</span> man heute mit Computerprogrammen<ref>siehe Fußnote 12</ref> schon nachgewiesen hat ]</span> ... <span style="color:#FF6000">«</span>. Für GÖDEL war dieser Text eine intellektuelle Herausforderung, und er hat sie angenommen. Das war für GÖDEL sicher keine Glaubensangelegenheit. GOTT hat es ja auch nicht nötig, ‚bewiesen‘ zu werden. Wer <span style="color:#4C58FF">— ‚'''G'''‘ —</span> z. B. mit dem sog. ‚Urknall‘ gleich setzt, macht die <span style="color:#FF6000">»''zufällige Struktur der Welt''«</span> im ‚Urknall‘, <span style="color:#00B000">(pantheistisch)</span> zu einem ,Gott‘, was GÖDEL dezidiert für sein Kalkül ausgeschlossen haben wollte. Kurt GÖDEL schreibt 1961 in einem Brief, in Anlehnung an den obigen Text ''':''' ::<span style="color:#FF6000">»...''ich glaube, schon heute dürfte es möglich sein, rein verstandesmäßig ''<span style="color:#00B000">[ sic '''!''' ]</span>, ''(ohne sich auf den Glauben an irgendeine Religion zu stützen) einzusehen, dass die theologische Weltanschauung'', <span style="color:#00B000">[ dass es GOTT gibt ]</span>, ''mit allen bekannten Tatsachen'', <span style="color:#00B000">[ z. B. mit den Maßstäben einer modernen Logik ]</span>, ''durchaus vereinbar ist. Das hat schon vor 250 Jahren der berühmte Philosoph und Mathematiker LEIBNIZ versucht''.«</span><ref>Zitiert nach SCHIMANOVICH-GALIDESCU, M.-E. ''':''' ‚''<span style="font-family: Times;"><big>Princeton–Wien 1946–1966. Briefe an die Mutter</big></span>''‘, in ‚''<span style="font-family: Times;"><big>Kurt Gödel – Leben und Werk</big></span>''‘, Hg. B.BULDT et alia, Wien (HÖLDER–PICHLER–TEMSKY), 2001, Band 1</ref> ===<div class="center"><span style="color:#660066">Die Interpretation des Kalküls</span></div>=== Wenn man sich das GÖDEL-Kalkül ansieht, wie es heute formalisiert vorliegt, stellt sich die Frage ''':''' <span style="color:#FF6000">„Lässt sich dieses System plausibel als eine Theorie von GOTT <span style="color:#00B000">(als eine ‚Rede von GOTT’ := <span style="color:#4C58FF">,Theologie’</span>)</span> und seiner Eigenschaften verstehen '''?''' “ — „Ist hier eine genuin <span style="color:#4C58FF">,theologische’</span> Interpretation möglich '''?''' “</span> Seine Herkunft aus der intellektuellen Auseinandersetzung des Logikers GÖDEL mit dem GOTT-gläubigen Philosophen LEIBNIZ und dem christlichen Theologen und Erzbischof ANSELM rechtfertigt diese Frage. Die <span style="color:#FF6000">„mathematische Evidenz“</span> des GÖDEL-Formalismus, <span style="color:#00B000">(im Anhang nachgestellt)</span>, ist allgemein anerkannt, <span style="color:#00B000">(Vorbehalte dagegen gibt es nur bei der Interpretation seiner Syntax, d.h. ob die Axiome und Definitionen, wie GÖDEL sie konzipiert hat, bzw. ob die Theoreme und Korollare, die aus diesen Axiomen ,regulär’ (├ ) abgeleitet werden, auch in unserer realen Welt ,wahr’ und ,annehmbar’ sind)</span>. Die <span style="color:#FF6000">„theologische Evidenz“</span> des GÖDEL-Systems wird durch eine ,Verankerung’ der Axiome und Definitionen in den <span style="color:#4C58FF">,theologisch’</span>-philosophischen Diskurs über GOTT evaluiert, der schon seit zweieinhalbtausend Jahren läuft. In diesen zweieinhalbtausend Jahren hat sich, — gegen ARISTOTELES und die antike Philosophie —, die Erkenntnis durchgesetzt, dass GOTT <span style="color:#FF6000">»''unabhängig''«</span> von der <span style="color:#FF6000">»''zufälligen''«</span> Raum-Zeit-Struktur unserer vergänglichen Welt ist. In meiner Darstellung des GÖDEL-Kalküls folge ich, <span style="color:#00B000">(im Unterschied zum Autographen GÖDELS, vom 10. Feb 1970)</span>, in der Axiom-Formulierung und -Nummerierung, in der Syntax, und in der Beweis-Struktur, der Arbeit von André FUHRMANN ''':''' ''<span style="font-family: Times;"><big>‚Existenz und Notwendigkeit. Kurt Gödels axiomatische Theologie‘</big></span>'' in ''<span style="font-family: Times;"><big>‚Logik in der Philosophie‘</big></span>'' Hg. SCHROEDER-HEISTER, SPOHN und OLSSON, 2005, Synchron, Heidelberg, Seite 349–374. <span style="color:#00B000">(Die tiefer gestellte Notation der spezifischen ,Eigenschaft‘ einer Eigenschaft ist meine Ergänzung zur formalen Syntax, z. B. ''':''' <span style="color:#4C58FF"> — ‚'''G'''<sub>ess</sub>'''x'''‘ — </span>, angeregt durch die indizierende Schreibweise GÖDELS ''':''' <span style="color:#4C58FF">— ,'''G''' Ess. '''x'''’ —</span>.)</span> Die Erkenntnisse zur Straffung und Präzisierung der GÖDEL-Syntax, <span style="color:#00B000">(besonders im Möglichkeitsbeweis)</span>, stammen aus der Arbeit von Günther J. WIRSCHING ''':''' ,''<span style="font-family: Times;"><big>Der Gödelsche Gottesbeweis</big></span>''‘, im Web <ref>https://edoc.ku.de/id/eprint/10243/1/OntBw.pdf</ref>. <span style="color:#00B000">(Auch der Hinweis auf AVICENNA kommt von WIRSCHING.)</span> Die Zitate von THOMAS von Aquin´s Stellungnahme zum Theorem ANSELMS, und von Georg Wilhelm Friedrich HEGEL zur Immanuel KANTS Ablehnung des Theorem ANSELMS, befinden sich in Franz SCHUPP, ,<span style="font-family: Times;"><big>''Geschichte der Philosophie im Überblick''</big></span>‘, Band 2 ‚<span style="font-family: Times;"><big>''Christliche Antike, Mittelalter''</big></span>‘, Hamburg 2003, Seite 168 und Seite 170. Meines Erachtens ist der entscheidende Ansatzpunkt einer <span style="color:#4C58FF">„theologischen“</span> Interpretation das GÖDEL-Axiom-5 ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ —</span>, <span style="color:#FF6000">»''notwendige Existenz ist eine positive Eigenschaft''«</span>. ‚Frei‘ nach KANT ‚formuliere‘ ich ‚kurz‘ ''':''' <span style="color:#FF6000">„Existenz ist keine Eigenschaft“</span>. Hier die Positionen KANTS zum Thema ‚Existenz‘ und ‚Eigenschaften‘ ''':''' ::<span style="color:#FF6000">»</span>''… unbeschadet der wirklichen Existenz äußerer Dinge'', <span style="color:#00B000">[ kann man ]</span> ''von einer Menge ihrer Prädikate'', <span style="color:#00B000">[ d.h. Eigenschaften ],</span> ''sagen'' … ''':''' ''sie gehöreten nicht zu diesen ‚Dingen an sich selbst‘, sondern nur zu ihren Erscheinungen, und hätten außer unserer Vorstellung'' <span style="color:#00B000">[ ihrer, als ,wirklich‘ gedachten Erscheinung, ]</span> ''keine eigene Existenz, … weil ich finde, dass … '''alle Eigenschaften, die die Anschauung eines Körpers ausmachen''', bloß zu seiner Erscheinung gehören; denn die Existenz des Dinges, was erscheint, wird dadurch nicht … aufgehoben, sondern nur gezeigt, dass wir es'', <span style="color:#00B000">[ das Ding ]</span>, ''wie es ‚an sich selbst‘ sei'', <span style="color:#00B000">[ d.h. existiert ]</span>, ''durch Sinne gar nicht erkennen können''.<span style="color:#FF6000">«</span><ref>vgl. ‚''<span style="font-family: Times;"><big>Prolegomena zu einer jeden künftigen Metaphysik, die als Wissenschaft wird auftreten können</big></span>''‘, Seite 289; https://www.korpora.org/kant/aa04/289.html</ref> <span style="color:#00B000"><small>(Hervorhebung durch KANT.)</small> [ Seine Prädikate, d.h. Eigenschaften, jedoch können wir mit unseren Sinnen ,anschauen‘, aber nur in Kombination mit unserer Vorstellung ihrer, als ,wirklich‘ gedachten Erscheinung, vermittelt durch den sog. ,transzendentalen Schematismus‘ unserer Einbildungskraft ''':'''</span> <span style="color:#FF6000">»</span>''Eine verborgene Kunst in den Tiefen der menschlichen Seele''<span style="color:#FF6000">«</span>, <span style="color:#00B000">jedoch auch eines der ,dunkelsten‘ Kapitel in der K.d.r.V., bedingt durch KANTS Konzept von ,Wirklichkeit‘, bzw. ,Sein‘. ]</span> Mit anderen Worten, man kann die ‚Existenz‘, bzw. das ‚Sein‘ der Dinge, <span style="color:#00B000">(das ‚Ding an sich’ bei KANT)</span>, nicht unter dem Mikroskop finden. Die ‚Existenz‘ bzw. das ‚Sein‘ ist keine sinnlich registrierbare ‚Eigenschaft‘ z. B. des rekonstruierten ‚Stadt-Schlosses‘ in Berlin. <span style="color:#00B000">(‚Sein‘ ist kein reales ‚Prädikat‘.)</span> Dafür haben wir andere Fähigkeiten ''':''' Ich kann seine ‚Existenz‘ mit meinem Verstand einsehen, weil auch ich selbst ‚existiere‘. Seine ‚Ansicht‘, wie ‚gefällig‘ es ist, und auch weitere ‚Eigenschaften‘, die mir auffallen, kann ich mit einem Handy-Foto dokumentieren. Diese ‚Eigenschaften‘ sind nicht die Ursache, dass das ‚Berliner Schloss‘ existiert. Wohl aber die Rekonstruktion dieses Schlosses ist die ‚Ursache‘, dass es ,existiert‘, und jetzt so aussieht. Insofern ist ‚Existenz‘ keine ‚Eigenschaft‘, sondern die ‚Existenz‘ des Dinges ist die Voraussetzung, der ‚Grund‘, dass ich die ‚Eigenschaften‘ des Dinges mit meinen Sinnen feststellen kann. In einer Auseinandersetzung mit CARTESIUS schreibt KANT, philosophisch ‚tiefgründig‘ und logisch ‚exakt‘, über dessen <span style="color:#FF6000"><span style="font-family: Times;"><big>„Cogito, ergo sum“</big></span></span> ''':''' ::<span style="color:#FF6000">»</span>''Das ‚Ich denke‘ ist ein empirischer Satz, und hält den Satz ‚Ich existiere‘ in sich. Ich kann aber nicht sagen ''':''' ‚Alles, was denkt, existiert‘; denn da würde die Eigenschaft des Denkens'', <span style="color:#00B000">[ eine essentielle Eigenschaft ]</span>, ''alle Wesen, die sie besitzen, zu notwendigen'' <span style="color:#00B000">[ d.h. notwendig existierenden ]</span> ''Wesen machen''. <span style="color:#00B000">[ Was allein nur von GOTT ausgesagt werden kann; mit AVICENNA, als anerkannter ARISTOTELES-Kommentator ''':''' <span style="color:#FF6000">»''GOTT ist das einzige Sein, bei dem Essenz'' <span style="color:#00B000">[ ‚Wesenseigenschaften‘ ]</span> ''und Existenz'' <span style="color:#00B000">[ ‚Dasein‘ ]</span> ''nicht zu trennen sind und das daher notwendig an sich da ist''«, <span style="color:#00B000">— konform mit GÖDEL ''':'''</span> »''notwendige Existenz ist eine positive'' <span style="color:#00B000">[ essentielle ]</span> ''Eigenschaft''«</span> ].</span> ''Daher kann meine Existenz auch nicht aus dem Satz, ‚Ich denke‘, als'' <span style="color:#00B000">[ logisch ]</span> ''gefolgert angesehen werden, wie CARTESIUS dafür hielt (weil sonst der Obersatz : ‚Alles, was denkt, existiert‘, vorausgehen müsste), sondern ist mit ihm identisch.'' <span style="color:#00B000">[ Eine einfache Schlussfolgerung ''':''' meine ‚Existenz‘ ist auch nicht von meiner ‚Eigenschaft‘ Denken ‚verursacht‘. ,Existenz‘ ist nicht bloß ein ,Gedanke‘ von mir. ]</span><span style="color:#FF6000">«</span> <span style="color:#00B000">(Aus der Anmerkung 41 zu den ‚''<span style="font-family: Times;"><big>Paralogismen der reinen Vernunft</big></span>''‘, in ‚''<span style="font-family: Times;"><big>Kritik der reinen Vernunft</big></span>''‘, Seite 275,<ref>https://korpora.org/kant/aa03/275.html</ref> mit meinem Einschub des AVICENNA-Zitat aus Wikipedia.<ref>{{w|Avicenna#Metaphysik}}</ref>)</span> Mit anderen Worten ''':''' <span style="color:#FF6000">„Die Eigenschaft, dass ich denken kann, ist nicht die Ursache meiner ‚Existenz‘“</span>, sondern, <span style="color:#FF6000">„Die Liebe meiner Eltern und ihre Entscheidung füreinander ist die Ursache meiner ‚Existenz‘. Daher ‚bin’ ich. Und weil ich ein Mensch ‚bin‘, kann ich denken.“</span> Auch mit diesen Anmerkungen ist leicht einsehbar, dass ‚Existenz‘ keine ‚Eigenschaft‘ ist — außer bei GOTT. In GOTT ist ‚Dasein‘ die ‚Wesenseigenschaft‘ GOTTES, d.h. ‚Dasein‘ und ‚Wesen‘ sind in GOTT untrennbar verbunden; sind <span style="color:#FF6000">„koinzident“</span> ‚eins‘. Das ist die Einzigartigkeit im Wesen GOTTES, dass GOTT immer schon ‚da‘ ist. Die Frage nach dem ‚Wesen‘ GOTTES lautet ''':''' <span style="color:#FF6000">„Was bist du ? “</span>/<span style="color:#CC66FF">„Wer bist Du ? “</span> Antwort, Exodus 3,14 ''':''' <span style="color:#CC66FF">»''Ich bin der ‚Ich-Bin-Da‘'' <span style="color:#00B000">[ für euch und für immer ]</span>«.</span> Weil GOTT für uns immer schon ‚da‘ ist, — <span style="color:#CC66FF">„von Ewigkeit zu Ewigkeit“</span> —, hat GOTT es nicht nötig, ‚bewiesen‘ zu werden. <span style="color:#00B000">(In der Mathematik ist ein ‚Satz‘ erst dann ‚wahr‘ und ‚existent‘, wenn er bewiesen ist. Bei GOTT ist es jedoch nicht so ''':''' GOTTES ‚Existenz‘ ist nicht erst dann ‚wahr‘, wenn seine ‚Existenz‘ von uns ‚bewiesen‘ ist. Sein ‚Dasein‘ ist jedem unserer ‚Beweisversuche‘ immer schon voraus. Der Zugang zu GOTT ist nicht der ,Beweis‘, sondern der ,Glaube‘. Wer an GOTT glauben ,will‘, dem antwortet GOTT. Wer nicht an GOTT glauben ,will‘, dessen Entscheidung respektiert GOTT, und drängt sich nicht auf. Die Glaubens-Entscheidung hat jedoch für jeden Menschen eine existenzielle Konsequenz ''':''' <span style="color:#CC66FF">»''Wer glaubt und sich taufen lässt, wird gerettet; wer aber nicht glaubt'', <span style="color:#00B000">[ und diese Entscheidung auch im Augenblick der ,Wahrheit‘, im Tod, in der sog. ,Endentscheidung‘, nicht widerruft ]</span>, ''wird verurteilt werden''«,</span> <small>({{Bibel | Markus Evangelium |16|16|EU}})</small>. Das Urteil lautet ''':''' <span style="color:#CC66FF">»''zweiter Tod ''':''' der Feuersee''«</span>, <small>({{Bibel | Offenbarung |20|14f|EU}})</small>, ohne Berufungsmöglichkeit. <span style="color:#CC66FF">»''Ohne Glauben aber ist es unmöglich, Gott zu gefallen; denn wer zu Gott kommen will, muss glauben, dass er ist und dass er denen, die ihn suchen, ihren Lohn geben wird''«.</span> <small>({{Bibel | Hebräer Brief |11|6|LUT}})</small>)</span> Das GÖDEL-Axiom-5 ist m.E. der entscheidende Ansatzpunkt einer stimmigen <span style="color:#4C58FF">„theologischen“</span> Interpretation der GÖDEL-Axiomatik. ===<div class="center"><span style="color:#660066">Das Kalkül ist kein Existenz-Beweis für GOTT</span></div>=== Die allgemeine <span style="color:#FF6000">»''mathematische Evidenz''«</span> des GÖDEL-Formalismus, d.h. seine ‚Schlusskraft‘, ist von kompetenten Leuten<ref>„GÖDELS Argumentationskette ist nachweisbar korrekt – so viel hat der Computer nach Ansicht der Wissenschaftler Christoph BENZMÜLLER und Bruno WOLTZENLOGEL-PALEO nun gezeigt;“ vgl. https://www.fu-berlin.de/presse/informationen/fup/2013/fup_13_308/index.html</ref> schon festgestellt worden, <span style="color:#00B000">(im Anhang ‚nachrechenbar‘ mit den Regeln und Gesetzen einer modalen Prädikatenlogik 2. Stufe)</span>. Das GÖDEL-Kalkül ist jedoch kein ‚moderner‘<span style="color:#FF6000">„Existenz-Beweis“</span> für GOTT, wofür es gehalten oder meistens bezweifelt wird, sondern setzt, <span style="color:#00B000">(theoretisch methodisch)</span>, den <span style="color:#FF6000">„Glauben an die Existenz GOTTES“</span> schon voraus, ohne ihn zu hinterfragen. Das <span style="color:#FF6000">„Dasein“</span> bzw. die <span style="color:#FF6000">„Existenz“</span> GOTTES wird mit der Definition-1 für <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, bzw. mit dem Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ — </span>, im Kalkül ‚definitorisch‘ bzw. ‚axiomatisch‘ als Kalkül-,Annahme‘, als <span style="color:#FF6000">„Prämisse“</span>, eingeführt, unter der Voraussetzung, dass die ‚Eigenschaft‘ <span style="color:#4C58FF">‚'''G'''‘ := </span><span style="color:#FF6000">„Göttlichkeit“</span> <span style="color:#00B000">(Essenz)</span> und das <span style="color:#FF6000">„Dasein GOTTES“</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span> <span style="color:#00B000">(Existenz)</span>, ontologisch ‚identisch‘, genauer ''':''' <span style="color:#FF6000">„koinzident“</span> sind, was GÖDEL im Axiom-5 definitiv für sein System vorschreibt ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ — </span> ''':''' <span style="color:#FF6000">»''notwendige Existenz ist eine positive Eigenschaft''«</span>. Das <span style="color:#FF6000">„Dasein GOTTES“</span> ist faktisch äquivalent zur <span style="color:#FF6000">„notwendigen Existenz als GOTT“</span>; und <span style="color:#FF6000">„Göttlichkeit“</span> ist die <span style="color:#FF6000">„positive Eigenschaft in GOTT“</span>. Beides ist nach Axiom-5 ‚identisch‘, d.h. dem ‚Sein nach‘ dasselbe, und daher konvertierbar. Beide, <span style="color:#00B000">(sowohl die Essenz, als auch die Existenz GOTTES)</span>, werden daher auch mit demselben Term ''':''' <span style="color:#4C58FF">— ‚'''G'''‘ —</span> im Kalkül dargestellt. Der traditionelle, christliche ,GOTT-Glaube‘ wird zugleich mit diesem Term <span style="color:#4C58FF">‚'''G'''‘ := </span> <span style="color:#FF6000">„GOTT“ <span style="color:#00B000">|</span> „göttlich“</span>, im 2. Beweisgang, dem Basisbeweis, und im 3. Beweisgang für das Theorem ANSELMS, jeweils als ,methodologische‘ Prämisse :01: <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span> regulär <span style="color:#00B000">( ├ )</span> und explizit eingeführt ''':''' <span style="color:#FF6000">»''Das'' <span style="color:#4C58FF">,'''x'''‘</span> ''steht für den GOTT'' <span style="color:#4C58FF">‚'''G'''‘</span> ''der Christen''«</span>. Das ist die ,modal‘-frei gewählte, <span style="color:#4C58FF">„theologische“</span> Kalkül-,Annahme‘, <span style="color:#00B000">(als ,Argument-Einführung‘ := <span style="color:#4C58FF">‚'''AE:'''‘</span> )</span>, und wird dann mit Definition-1 näher ,bestimmt‘ ''':''' <span style="color:#4C58FF">— ‚'''Gx↔∀X(PX→Xx)'''‘ — </span> ''':''' <span style="color:#FF6000"> »''Das'' <span style="color:#4C58FF">,'''x'''‘</span> ''steht genau dann für ‚GOTT‘'' <span style="color:#00B000">|</span> ''‚göttlich‘'', <span style="color:#4C58FF">‚'''G'''‘</span>, ''wenn'' <span style="color:#4C58FF">,'''x'''‘</span> ''alle positiven Eigenschaften, bzw. Vollkommenheiten'', <span style="color:#4C58FF">‚'''PX'''‘</span>, ''hat''«</span>, entsprechend dem ‚Quelltext‘ bei LEIBNIZ. <span style="color:#00B000">(Das ,postulierte‘ Axiom-3 ''':''' <span style="color:#4C58FF"> — ‚'''PG'''‘ —</span>, wird standardmäßig gelesen als <span style="color:#FF6000">»''Göttlichkeit ist eine positive Eigenschaft''«</span>, hat aber auch die alternative Leseart ''':''' <span style="color:#FF6000">»''GOTT ist perfekt d.h. vollkommen''«</span>, was <span style="color:#4C58FF">„theologisch“</span> auch richtig ist; mit <span style="color:#4C58FF">‚'''P'''‘ </span> := <span style="color:#FF6000">„Perfektion“/„Vollkommenheit“</span> ist dann die Summe aller <span style="color:#FF6000">„positiven Eigenschaften“</span>.)</span> Mit Axiom-3, — in dieser <span style="color:#4C58FF">„theologischen“</span> Leseart —, ist der ‚Wenn-Satz‘ in Definition-1 ‚aufgelöst‘ ''':''' <span style="color:#FF6000">»''GOTT hat alle positiven Eigenschaften, weil er ‚perfekt‘ ist''«</span>. In Definition-3 ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x ↔ ∀X(X'''<sub>ess</sub>'''x →□∃yXy)'''‘ —</span>, wird die ,für uns‘ <span style="color:#FF6000">„notwendige Existenz“</span> ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>‘ —, </span> durch die ,aus sich‘ <span style="color:#FF6000">„notwendig“</span> <span style="color:#4C58FF">— '''□''' —</span> instanziierten <span style="color:#FF6000">„Wesenseigenschaften“</span>, <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>‘ —</span>, <span style="color:#00B000">(als zu den Transzendentalia gehörig)</span>, bestimmt. Das GÖDEL-Kalkül setzt sowohl in Definition-3 als auch im Axiom-5 das Theorem des ARISTOTELES von der ontologischen ‚Identität‘, d.i. die Koinzidenz von <span style="color:#FF6000">„Dasein“</span>, <span style="color:#00B000">(Existenz)</span> und <span style="color:#FF6000">„Wesenseigenschaften“</span>, <span style="color:#00B000">(Essenz)</span> im prinzipiell <span style="color:#FF6000">„unbewegten Erstbewegenden“</span> voraus. Ohne diese Annahme bzw. ohne Axiom-5, würde das GÖDEL-Kalkül nicht ‚funktionieren‘. Das GÖDEL-Theorem-2.1 ''':''' <span style="color:#4C58FF">— ‚'''Gx→G'''<sub>ess</sub>'''x'''‘ —</span>, kann unter dieser Voraussetzung dann, <span style="color:#4C58FF">„theologisch“</span> richtig und eindeutig, so gelesen werden ''':''' <span style="color:#FF6000">»''Wenn'' <span style="color:#4C58FF">‚'''x'''‘</span> ''für GOTT'', <span style="color:#4C58FF">‚'''G'''‘</span>, ''als Individuum steht, dann ist GOTT-Sein'', <span style="color:#4C58FF">‚'''G'''‘</span>, <span style="color:#00B000">(,Existenz‘)</span>, ''das Wesen'', <span style="color:#4C58FF">—<sub>ess</sub>—, </span> <span style="color:#00B000">(,Essenz‘)</span>, ''GOTTES'' <span style="color:#4C58FF">‚'''x'''‘</span>«</span><ref>vgl. z.B. THOMAS von Aquin ''':''' ,''<span style="font-family: Times;"><big>De Ente et Essentia</big></span>''’, Kapitel 5 ''':''' „Deus, cuius essentia est ipsummet suum esse“ ''':''' „GOTT, dessen Wesen sein eigenes Sein ist“.</ref>, statt der <span style="color:#4C58FF">„theologisch“</span> unrichtigen Lesearten in der Wikipedia ''':''' <span style="color:#FF6000">»''Göttlich ist eine essentielle Eigenschaft jedes göttlichen Wesens''«</span><ref>{{w|Gottesbeweis#Kurt_Gödel|Gottesbeweis 2.1.2, Theorem 2}}; Version vom 10.09.2025</ref>, oder bei Christoph BENZMÜLLER et alia, im sog. ,Theorembeweiser‘ ''':''' <span style="color:#FF6000">»''Gottähnlich zu sein ist eine Essenz von jeder gottähnlichen Entität''«</span><ref>[https://www.fu-berlin.de/presse/informationen/fup/2013/fup_13_308/index.html ‚Gödels „Gottesbeweis“ bestätigt’, Theorem 2]</ref>, mit der suggestiven Annahme, es gäbe polytheïstisch, mehrere ,göttliche Wesen‘, bzw. ,gottähnliche Entitäten‘, was der monotheïstischen, abendländischen Tradition, bzw. dem <span style="color:#4C58FF">„theologischen“</span> Theorem von der ,Unvergleichlichkeit‘ und ,Einzigartigkeit‘ GOTTES widerspricht, das im GÖDEL-Kalkül mit Korollar-3 bestätigt wird. <span style="color:#00B000">(Die Interpretation <span style="color:#4C58FF">‚'''G'''‘ :=</span> <span style="color:#FF6000">„GOTT“</span>, als ,Individuumname‘, ist synonym zum <span style="color:#FF6000">„Dasein <span style="color:#00B000">(Existenz)</span> GOTTES“</span>, und äquivalent zur ‚positiven Eigenschaft‘ <span style="color:#FF6000">„Göttlichkeit“</span>, alias <span style="color:#FF6000">„göttlich zu sein“</span> = <span style="color:#FF6000">„GOTT zu sein“</span> = <span style="color:#FF6000">„GOTT-Sein“</span>; und mit dem GÖDEL-Term ''':''' <span style="color:#4C58FF">‚'''G'''<sub>ess</sub>‘ :=</span> <span style="color:#FF6000">„das Wesen <span style="color:#00B000">(Essenz)</span> GOTTES“</span>.)</span> <div class="center"><span style="color:#FF6000"><span style="color:#4C58FF">‚'''G'''‘ :=</span> „'''G'''öttlichkeit“ <span style="color:#4C58FF">↔</span> „'''G'''OTT“ <span style="color:#4C58FF">↔</span> „'''G'''OTT-Sein“</span> </div> Die Rechtfertigung für diese <span style="color:#4C58FF">„theologische“</span> Dreifach-Äquivalenz für <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, im GÖDEL-Kalkül, gibt Axiom-5 ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ — </span> ''':''' <span style="color:#FF6000">»''die positive <u>Eigenschaft</u>'', <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, ''Göttlichkeit'', <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, ''äquivalent zu GOTT als Individuum-Name'', <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, ''ist auch äquivalent zum Dasein GOTTES'', <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, ''gleichbedeutend mit notwendiger <u>Existenz</u>'', <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>‘ —</span>'', dem <u>Sein</u> GOTTES für uns''«</span>. Hier hat GÖDEL explizit <span style="color:#FF6000">„Eigenschaft“</span> mit <span style="color:#FF6000">„Existenz“</span> bzw. <span style="color:#FF6000">„Sein“</span> gleichgesetzt; <span style="color:#00B000">(was jedoch nach KANT für alles, was in unserer Welt ‚existiert‘, bzw. für alles, was zur <span style="color:#FF6000">»''zufälligen Struktur der Welt''«</span> gehört, wie GÖDEL selbst sagt, in jedem Fall ‚unstatthaft‘ ist ''':''' <span style="color:#FF6000">„Existenz ist keine Eigenschaft“</span>, bzw. <span style="color:#FF6000">»''Sein ist kein reales Prädikat''«</span>)</span>. Jedoch wegen dieser ‚Gleichsetzung‘, die einzig und allein, der aristotelisch-<span style="color:#4C58FF">,theologischen‘</span> Tradition entsprechend, singulär nur in GOTT ‚statthaft‘ ist, kann jetzt die ‚positive Eigenschaft‘ <span style="color:#00B000">(Essenz)</span> <span style="color:#FF6000">„Göttlichkeit“</span> <span style="color:#00B000">(ontologisch korrekt)</span> gelesen werden als <span style="color:#FF6000">„das, was GOTT zu dem macht, ‚was‘ GOTT an sich selbst ist“</span>, nämlich zu seinem <span style="color:#FF6000">„GOTT-Sein“</span> <span style="color:#00B000">(Existenz)</span>, zu seinem <span style="color:#FF6000">„Dasein als GOTT“</span>; zur Tatsache, dass <span style="color:#FF6000">„GOTT GOTT ist“</span>, d.h. dass <span style="color:#FF6000">„GOTT als GOTT ‚da‘ ist“</span>. Das ist, <span style="color:#00B000">(und da folgt ARISTOTELES seinem Lehrer PLATO)</span>, nach traditioneller Auslegung, die übliche, ontologische Funktion des ‚Wesens‘<span style="color:#00B000"> | <span style="color:#FF6000">„<span style="font-family: Times;"><big>οὐσία</big></span>“</span> | ‚ousía‘ |</span> eines Seienden ''':''' es ‚macht‘ das Seiende zu dem, ‚was‘ es ist; es ist die ‚Ursache‘ dafür, dass das Seiende, das ‚ist‘, ‚was‘ es ist | ‚Was-Sein‘ — ‚Wesen‘. <span style="color:#00B000">(ARISTOTELES lokalisiert jedoch das ,Wesen‘ im Seienden, im Gegensatz zu PLATO, der das ,Wesen‘, — ,getrennt‘ vom Seienden —, in den allgemeinen ,Ideen‘ lokalisiert.)</span> Da aber in ‚Gott‘, <span style="color:#00B000">(dem <span style="color:#FF6000">„unbewegten, ‚unverursachten‘ Erstbeweger“</span>)</span>, Prozesshaftes, ‚Ursächliches‘ auszuschließen ist, ist die übliche prozesshafte, ‚ursächliche‘ Funktion von <span style="color:#FF6000">„<span style="font-family: Times;"><big>οὐσία</big></span>“</span><span style="color:#00B000"> | ‚ousía‘ |</span> ,Wesen‘ im <span style="color:#FF6000">„Erstbewegenden“</span> nach ARISTOTELES, sozusagen, schon ‚zum Abschluss‘ gekommen, schon ‚verwirklicht‘, — <span style="color:#FF6000">„<span style="font-family: Times;"><big>ἐν-έργεια οὖσα</big></span>“</span><span style="color:#00B000"> | ‚en-érgeia oúsa‘</span> —, schon ‚ins-Werk‘ gesetzt; <span style="color:#00B000">(<span style="color:#FF6000">„<span style="font-family: Times;"><big>τὸ ἔργον</big></span>“</span> | ‚to érgon‘ | ‚das Werk‘; <span style="color:#FF6000">„<span style="font-family: Times;"><big>ἐνέργεια</big></span>“</span> | ‚enérgeia‘ | ,Wirksamkeit‘, ,Wirklichkeit‘, ,Aktualität‘, ,Energie‘; und <span style="color:#FF6000">„<span style="font-family: Times;"><big>οὖσα</big></span>“</span> | ,oúsa‘ | feminin Nominativ Singular von <span style="color:#FF6000">„<span style="font-family: Times;"><big>ὤν</big></span>“</span> | ‚ón‘ | ‚seiend‘)</span>. Sein ,Wesen‘ ist im ,Dasein‘ vollendet, ist ,wirkliches, verwirklichendes Sein‘, ‚seiende Aktualität‘, <span style="color:#FF6000">„<span style="font-family: Times;"><big>actus purus</big></span>“</span> ''':''' sein Wesen ist ‚reine Tätigkeit‘, ,reine verwirklichende Gegenwärtigkeit‘, d.h. ,existent‘, ohne jede prozesshafte ‚Potenzialität‘. Aus der wichtigen und richtigen Erkenntnis, dass GOTT <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>''Struktur unserer Welt''«</span> ist, folgt mit der ontologischen Identität von ,Dasein‘ und ,Wesen‘ in GOTT ''':''' Der zeitlos ewige GOTT ist <span style="color:#FF6000">»''notwendig aus sich'' <span style="color:#00B000">(von Natur aus)</span> ''immer schon da''«</span>, m.a.W. ist <span style="color:#FF6000">„zeitlos-ursprungslos“</span>. Insofern ist <span style="color:#FF6000">„Göttlichkeit“</span> die <span style="color:#FF6000">„Wesenseigenschaft“</span>, die im <span style="color:#FF6000">„Dasein GOTTES“</span> d.h. in <span style="color:#FF6000">„GOTT“</span>, schon ihr ‚Ziel‘, ihre Vollendung, — <span style="color:#FF6000">„Perfektion“</span>, Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, erreicht hat. GOTT ist <span style="color:#FF6000">»''vollkommen''«</span> und darum auch <span style="color:#FF6000">»''notwendig für uns immer schon ‚da‘''«</span> ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x'''‘ — </span>. GOTT ist in seinem ‚zeitlosen Wesen‘ <span style="color:#FF6000">„unverursacht“</span>, da er <span style="color:#FF6000">»''notwendig aus sich'' <span style="color:#00B000">(von Natur aus)</span> ''vollkommen''«</span> ist ''':''' <span style="color:#4C58FF">— ‚'''□PG'''‘ —</span>, <span style="color:#00B000">(eine Instanz von Axiom-4)</span>. <span style="color:#FF6000">„Vollkommenheit“</span>, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, ist die <span style="color:#FF6000">„Wesenseigenschaft“</span>, bzw. das <span style="color:#FF6000">„Wesen GOTTES“</span> ''':''' <span style="color:#4C58FF"> — ‚'''G'''<sub>ess</sub>‘ —</span>. <span style="color:#FF6000">»''GOTT ist ,der‘ Vollkommenste''«</span> ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, d.h. <span style="color:#4C58FF">— ‚'''G'''‘ —</span> ''':''' <span style="color:#FF6000">»''GOTT ist die unbegrenzte Summe der unendlichen Vollkommenheiten''«</span>. Und zur absoluten <span style="color:#FF6000">„Vollkommenheit“</span> gehört <span style="color:#FF6000">„notwendig“</span> auch das <span style="color:#FF6000">„Existieren“</span> ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ — </span>. <span style="color:#FF6000">„Notwendige Existenz“</span> gehört zu den ,ultimativen‘ Transzendentalia in GOTT, was GÖDEL mit Definition-3 ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x ↔ ∀X(X'''<sub>ess</sub>'''x →□∃yXy)'''‘ —</span>, syntaktisch formalisiert hat, wenn sowohl das <span style="color:#4C58FF">— ‚'''x'''‘ —</span>, als auch alle <span style="color:#4C58FF">— ‚'''∀y'''‘ —</span> im Kalkül, für den Dreifaltigen GOTT der Christen stehen, was dann im Korollar-3, mit der Identität, <span style="color:#4C58FF">— ‚'''x=y'''‘ —</span>, bzw. der Koinzidenz beider Individuum-Variablen, explizit gezeigt wird. Entscheidend für diese Interpretation des GÖDEL-Systems ist ''':''' nur unter der ,modal‘ notwendigen Voraussetzung der ontologischen ‚Identität‘ von <span style="color:#FF6000">„Sein“</span> und <span style="color:#FF6000">„Wesen“</span> in GOTT, Theorem-2 ''':''' <span style="color:#4C58FF"> — '''Gx↔G'''<sub>ess</sub>'''x'''‘ —</span>, bzw. der ‚Gleichsetzung‘, <span style="color:#00B000">(Koinzidenz)</span>, von <span style="color:#FF6000">„notwendiger Existenz“</span> mit den ‚positiven‘ Wesenseigenschaften, der <span style="color:#FF6000">„Essenz“</span> in GOTT, Axiom-5 ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ —</span>, ‚funktioniert‘ die GÖDEL-Axiomatik '''!''' Diese ‚Identität‘, bzw. ,Koinzidenz‘ wird in ARISTOTELES, ‚''<span style="font-family: Times;"><big>Metaphysik</big></span>''‘, Buch XII 7, in einem Indizienbeweis erbracht, der mit der Methode der philosophischen Induktion zum Ergebnis kommt ''':''' ::<span style="color:#FF6000">» … ''es muss'' <span style="color:#00B000">[ notwendig ]</span> ''etwas geben, das, ohne selbst ‚bewegt‘'' <span style="color:#00B000">[ </span>''worden''<span style="color:#00B000"> ]</span> ''zu sein'', <span style="color:#00B000">[ ‚unentstanden‘ ]</span>, ''alles Übrige wie ein Geliebtes ‚bewegt‘'' <span style="color:#00B000">[ ‚entstehen lässt‘ ]</span>«</span>, das darum selbst ‚zugleich‘ <span style="color:#FF6000">„<span style="font-family: Times;"><big>αἴδιον καί οὐσία καί ἐνέργεια οὖσα</big></span>“ <span style="color:#00B000">| ,aídion kai ousía kai enérgeia oúsa‘ |</span> »<span style="color:#00B000">[ zeitlich-]</span>''ewig, sowohl <u>Wesen</u>'', <span style="color:#00B000">[ etwas Konkretes, Essentielles ]</span>, ''als auch seiende Wirksamkeit — ''<span style="color:#00B000">[ </span>„<span style="font-family: Times;"><big>actus purus</big></span>“, „reine Tätigkeit“<span style="color:#00B000"> ]</span> ''— verwirklichendes, wirkliches <u>Sein</u> ist'', <span style="color:#00B000">[ ein Existierendes, das alles Übrige ,zur Existenz‘ bringen kann ]</span> «</span>, bzw. <span style="color:#FF6000">„<span style="font-family: Times;"><big>ὀρεκτόν καί νοητόν</big></span>“ <span style="color:#00B000"> | ,orektón kai noêtón‘ | </span>»''das ersehnt und erkennbar ist''.«</span> <span style="color:#00B000">(''<span style="font-family: Times;"><big>vgl. ,Metaphysik</big></span>''‘ XII 7, 1072a,23 – 1072b,4)</span> Was <span style="color:#FF6000">»''alles Übrige''«</span> ,zur Existenz‘ bringen kann, bzw. ,verwirklichen‘ kann, ohne selbst ,entstanden‘ zu sein, muß auch selbst, als etwas Konkretes, Essentielles, immer schon ,existieren‘, bzw. ,wirklich sein‘. Die, daraus abgeleitete, und damit ,erkannte‘, ontologische ‚Identität‘, — ,Koinzidenz‘ —, von ‚Wesen‘ und ‚Sein‘, <span style="color:#00B000">(Ziel aller Sehnsucht und jedes Erkenntnisstrebens)</span>, <span style="color:#FF6000">»''ist das Privilegium der Gottheit allein''«</span> ''':''' mit Gottfried Wilhelm LEIBNIZ interpretiert, entsprechend einer adäquaten, aristotelisch-<span style="color:#4C58FF">,theologischen‘</span> Tradition. Dieses induktive, ‚ontologisch‘ a-posteriori Ergebnis aus der ‚Prinzipienforschung‘ des ARISTOTELES ist die metaphysische und logische Voraussetzung, dass GÖDEL seine Axiomatik im Kalkül des sog. ‚ontologischen Gottesbeweises‘ a-priori des ANSELM von Canterbury, und nach LEIBNIZ, deduktiv korrekt formulieren konnte; <span style="color:#00B000">(vgl. 3. Beweisgang)</span>. Angenommen, die Variable <span style="color:#4C58FF">— ‚'''x'''‘ —</span> steht für den <span style="color:#FF6000">„GOTT“</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, der Christen, <span style="color:#00B000">(siehe Anhang, Term :01: im 2. Beweisgang)</span>, dann ist, — auf Grund von diesem Beweisgang —, in unserer Welt ,wahr‘ und evident ''':''' sowohl die ‚positive Eigenschaft‘ <span style="color:#FF6000">»''Göttlichkeit''«</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, als auch das faktische <span style="color:#FF6000">»''‚Da‘-Sein'' <span style="color:#00B000">[ Existenz ]</span> ''GOTTES''«</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, ‚benennen‘, ontologisch ident, denselben Sachverhalt ''':''' nämlich das, was wir das <span style="color:#FF6000">»''Wesen'' <span style="color:#00B000">[ Essenz ]</span> ''GOTTES''«</span>, <span style="color:#4C58FF"> — ‚'''G'''<sub>ess</sub>‘ —</span>, nennen. <span style="color:#FF6000">»''Göttlichkeit'', bzw. ''GOTT-‚Sein‘ ist das Wesen GOTTES''«</span>, <span style="color:#00B000">(Theorem-2.1)</span>, und dann umgedreht und äquivalent ''':''' <span style="color:#FF6000">»''Das Wesen GOTTES ist sein ‚Da‘-Sein als GOTT'', bzw. ''seine Göttlichkeit''«</span>, <span style="color:#00B000">(Theorem-2.2)</span>, m.a.W. ''':''' <span style="color:#FF6000">»''GOTT ist wesentlich ‚grundlos‘'' <span style="color:#00B000">[ d.h. </span> ''notwendig aus sich''<span style="color:#00B000"> ]</span> ''‚da‘''«</span>. Das ist das Einzigartige im <span style="color:#FF6000">»''Wesen GOTTES''«</span> ''':''' GOTT ist ohne zeitlichen Anfang, zeitlos-ewig, für uns immer schon ‚da‘, und das ‚ist‘ sein <span style="color:#FF6000">»''Wesen''«</span>; vorausgesetzt, ,angenommen‘, man glaubt an GOTT ''':''' Term :01:. <span style="color:#00B000">(Der schon von GÖDEL indizierte Term <span style="color:#4C58FF"> — ‚'''G'''<sub>ess</sub>‘ — </span> ,expliziert‘ nur eine der drei Lesearten, die der Term <span style="color:#4C58FF"> — ‚'''G'''‘ — „theologisch“</span> ,impliziert‘.)</span> Theorem-2 hat somit die syntaktische Form einer Definition ''':''' <div class="center"><span style="color:#4C58FF"> — ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ — </span></div> Somit kann GOTT ‚explizit‘ <span style="color:#00B000">(aus einer bewiesenen Kalkül-Definition)</span> <span style="color:#4C58FF">„theologisch“</span> genauer ‚bestimmt‘ werden ''':''' <span style="color:#FF6000">»''GOTT ist gerade deswegen GOTT, weil sein überzeitlich-ewiges und an sich ‚grundloses‘'' <span style="color:#00B000">[ aber für uns notwendiges ]</span> ''Dasein'' <span style="color:#00B000">[ Existenz ]</span> ''als GOTT, ontologisch, — dem Sein nach —, identisch ist mit seinem persönlichen und für uns liebevollen Wesen'' <span style="color:#00B000">[ Essenz ]</span> ''als GOTT; diese Identität von Dasein und Wesen gilt einzig und allein nur bei GOTT.''«</span> Die philosophische Frage nach dem <span style="color:#FF6000">„Wesen GOTTES“</span> lautet, <span style="color:#00B000">(auf die Person bezogen)</span> ''':''' <span style="color:#FF6000">„Was bist du ? “</span> Sie ist äquivalent zur <span style="color:#4C58FF">,theologisch’</span>-biblischen Frage des MOSE ''':''' <span style="color:#CC66FF">„Wer bist Du ? “</span> Die bekannte Antwort des GOTTES-JHWH aus ‚Exodus 3,14‘, im Dornbusch, thematisiert das persönliche, für uns liebevolle und für immer notwendige <span style="color:#FF6000">„Dasein GOTTES“</span> ''':''' <span style="font-family: Times;"><big>‘אֶֽהְיֶ֖ה אֲשֶׁ֣ר אֶֽהְיֶ֑ה‚</big></span> <span style="color:#00B000">| ‚eh'jeh asher eh'jeh‘ |</span> <span style="color:#CC66FF">»''Ich bin der ‚Ich-Bin-Da‘'', <span style="color:#00B000">[ für euch und für immer ]</span>«.</span> Mit diesem Zitat aus der Bibel ist die GÖDEL-Axiomatik, sozusagen, <span style="color:#4C58FF">„theologisch“</span> ‚verifiziert‘. Sie hat einerseits im Theorem-2 ihren philosophischen ‚Abschluss’ erreicht, und andererseits damit formal-syntaktisch den ‚Anschluss‘ an eine allgemeine Basis-Glaubensaussage gefunden, die ‚an sich‘ für jeden CHRIST-gläubigen Menschen ‚selbstverständlich‘ ist. Was in der Metaphysik des ARISTOTELES das Ergebnis einer philosophischen ,Induktion‘ a-posteriori ist ''':''' <span style="color:#FF6000">„,Dasein‘ ist das ,Wesen‘ GOTTES“</span>, — <span style="color:#00B000">(das mit Theorem-2, auch ein Ergebnis der deduktiven GÖDEL-Axiomatik a-priori ist ''':''' die Beweisgrundlage für den Konsequenz-Teil im Theorem AMSELMS)</span>, — das ist in der Bibel die Grundüberzeugung jedes Menschen, der an GOTT glaubt ''':''' GOTT ist für uns immer schon <span style="color:#FF6000">„da“</span>, weil er uns liebt. Das ist das, <span style="color:#FF6000">„was“</span> GOTT für uns als GOTT ausmacht, — sein Wesen ''':''' <span style="color:#CC66FF">»''Wir haben die Liebe, die GOTT zu uns hat, erkannt und gläubig angenommen. GOTT ist Liebe, und wer in der Liebe bleibt, bleibt in GOTT und GOTT bleibt in ihm''«</span>, <small>({{Bibel | 1. Johannesbrief |4|16|EU}})</small>. Das eigentliche Ergebnis der GÖDEL-Axiomatik ist somit die ‚triviale‘ Erkenntnis, dass GOTT, <span style="color:#FF6000">„unverursacht“ <span style="color:#00B000">|</span> „grundlos“</span>, für uns immer schon ‚da‘ ist, — <span style="color:#CC66FF">„von Ewigkeit zu Ewigkeit“</span> —, vorausgesetzt <span style="color:#00B000">(‚angenommen‘)</span>, man ‚glaubt‘ an den zeitlos-ewigen GOTT ''':''' <span style="color:#CC66FF">»''Ehe die Berge geboren wurden, ehe die Erde entstand und das Weltall erschaffen wurden, bist du, o GOTT, von Ewigkeit zu Ewigkeit''«</span>, <small>({{Bibel | Psalm |90|2|LUT}})</small>. <span style="color:#00B000">(Der Glaube an die Zeitlosigkeit GOTTES ist mit der ‚Annahme‘ von Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span> ''':''' <span style="color:#FF6000">»''GOTT ist perfekt''«</span>, und der ‚Annahme‘ der Definition-1 für <span style="color:#4C58FF"> ‚'''Gx'''‘ := </span> den <span style="color:#FF6000">„GOTT der Christen“</span>, im Kalkül ‚implizit‘ schon eingeführt, da die Axiome und Definitionen, — nach GÖDEL —, nur dann <span style="color:#FF6000">»''wahr''«</span> sind, wenn sie <span style="color:#FF6000">»''unabhängig von der zufälligen''</span> [ Raum-Zeit-]<span style="color:#FF6000">''Struktur''«</span> unserer Welt sind. Das ,impliziert‘ auch, dass der GOTT von Axiom-3 und Definition-1 ebenfalls <span style="color:#FF6000">»''unabhängig''«</span> von Raum und Zeit, d.h. zeitlos-ewig ist '''!''' )</span> Wer an den GOTT der Bibel glaubt, kann sich von der ‚Vernünftigkeit‘ seines Glaubens mit Hilfe des sog. ,ontologischen‘ Gottesbeweises nach ANSELM von Canterbury, mit Kurt GÖDEL <span style="color:#FF6000">»''rein verstandesmäßig''«</span>, überzeugen. <span style="color:#00B000">(Das war auch die Absicht ANSEMS '''!''' )</span> Die Annahme, es sei ‚unmöglich‘, dass es GOTT gibt ''':''' <span style="color:#4C58FF">— ‚'''¬◇∃xGx'''‘ —</span>, <span style="color:#00B000">(dezidierter Atheismus)</span>, führt im GÖDEL-Kalkül formal zu einem logischen Widerspruch; vgl. z. B. ‚''<span style="font-family: Times;"><big>Gödels Möglichkeitsbeweis</big></span>''‘, in ‚''<span style="font-family: Times;"><big>Der Gödelsche Gottesbeweis</big></span>''‘, Seite 17, von Günther J. WIRSCHING; (https://edoc.ku.de/id/eprint/10243/1/OntBw.pdf), d.h. es ist also nicht ‚unmöglich‘, dass es GOTT gibt. Der GOTT-Glaube ist mit den Maßstäben einer modernen Logik <span style="color:#FF6000">»''durchaus vereinbar''«</span> und darum ,vernünftig‘. Damit steht fest ''':''' das GÖDEL-Kalkül ist kein moderner ‚Existenz-Beweis‘ für den GOTT der Bibel, sondern es setzt, <span style="color:#FF6000">»''rein verstandesmäßig''«</span>, ,methodologisch‘, den Glauben an die Existenz eines zeitlos-ewigen GOTTES voraus, der, — <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>''Struktur unserer '' <span style="color:#00B000">[ vergänglichen ]</span> ''Welt''«</span> —, für uns immer schon ‚da‘ ist. Wenn aber einmal als fix ‚angenommen‘ worden ist, <span style="color:#00B000">(als Prämisse)</span>, dass es wahr ist, dass GOTT ‚existiert‘, dann ist natürlich die ‚Annahme‘, dass GOTT ‚nicht existiert‘, falsch. Aber sie ist auch ,unlogisch‘ und ,unsinnig‘, weil die Annahme ''':''' <span style="color:#FF6000">»''Es ist unmöglich, dass es einen GOTT gibt''«</span>, offensichtlich und eindeutig zu einem Widerspruch führt; was z. B. Günther J. WIRSCHING mit seiner Version des <span style="color:#00B000">(nicht umkehrbaren)</span> ‚Möglichkeitsbeweises‘ für ,GOTT‘, explizit vorexerziert hat; <span style="color:#00B000">( nachgestellt im Anhang ''':''' GÖDELS ‚Möglichkeitsbeweis‘ als ,Widerlegung‘ eines Nicht-GOTT-Glaubens; in Entsprechung zu Psalm 14,1 und Psalm 53,2 ''':''' <span style="color:#CC66FF">»''Der'' <span style="color:#00B000">[ ,unvernünftige‘ ]</span> ''Tor sagt in seinem Herzen ''':''' Es gibt keinen Gott. Sie handeln verderbt, handeln abscheulich; da ist keiner, der Gutes tut''«</span>. Historischer Hintergrund zu diesem Psalm-Text ''':''' Die Zerstörung des Tempels in Jerusalem 586 v.Ch. durch die Truppen des NEBUKADNEZAR II.)</span> Der Logiker GÖDEL hat in seinem System zum ,ontologischen Beweis‘ keine ‚formale Unentscheidbarkeit‘ <span style="color:#00B000">(Agnostizismus)</span> feststellen können, wie auf einem anderen Feld seiner Forschungsarbeiten. Das GÖDEL-Konsequenz-Teil von der ‚Notwendigkeit‘ GOTTES ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, <span style="color:#00B000">(die ‚Konsequenz’ aus dem ‚widerspruchsfreien‘ Korollar-1 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —,</span>)</span> im ‚Theorem ANSELMS‘, ist <span style="color:#00B000">(im 3. Beweisgang, Term :10:)</span> dann auch eine weitere Explikation des Basis-Theorems-2 des Kalküls ''':''' <span style="color:#4C58FF"> — ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ — </span>, über die ‚ontologische Identität‘ vom <span style="color:#FF6000">„Dasein GOTTES“</span> ''':''' <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, mit seinem <span style="color:#FF6000">„Wesen“</span> ''':''' <span style="color:#4C58FF"> — <sub>ess</sub> —</span>, nach einem <span style="color:#4C58FF">[ Modus ponens ]</span>, dargestellt mit Term :09:. <span style="color:#00B000">(Die ontologische Identität von Dasein und Wesen in GOTT, ist die, für uns, <span style="color:#FF6000">„notwendige Präsenz <span style="color:#00B000">[ das Sein, <span style="color:#4C58FF">— ‚'''E'''‘ —</span>]</span> GOTTES“</span> ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x'''‘ —</span>, die äquivalent, bzw. koinzident ist zur <span style="color:#FF6000">„Vollkommenheit <span style="color:#00B000">[ das Wesen, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>]</span> GOTTES“</span> ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>. Diese Identität von Sein und Wesen in GOTT ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub> —</span>, bedeutet <span style="color:#4C58FF">,theologisch‘</span> konkret ''':''' die, für uns, notwendige Gegenwärtigkeit GOTTES, [ sein Dasein ], ist verwirklicht worden in der liebevollen [ Wesens-]Zuwendung GOTTES zu uns Menschen, in seiner Kindwerdung in Bethlehem, durch die Jungfrau MARIA ''':''' GOTTES Wesen ist ,Sein-mit-uns‘ ''':''' <span style="color:#CC66FF">»''sein Name'', <span style="color:#00B000">[ sein Wesen ]</span>, ''ist IMMANUEL, das heiß übersetzt ''':''' GOTT-mit-uns''«, <small>({{Bibel | Matthäus Evangelium |1|23|EU}})</small></span>, der unsere Not-,wenden‘-wird, d.h. der uns und die Welt von der Korruption der Sünde und des Todes <span style="color:#4C58FF">,erlösen‘</span> will und wird; jedoch nicht ohne uns. Die <span style="color:#4C58FF">„Menschwerdung“</span> GOTTES in JESUS CHRISTUS, die <span style="color:#4C58FF">„Hypostatische Union“</span>, bzw. diese außergewöhnliche und einzigartige <span style="color:#FF6000">„Koinzidenz“</span> von GOTT und Mensch, ist der wirkliche und historische Beginn der <span style="color:#4C58FF">„Erlösung“</span> des Menschen und der Welt; vergegenwärtigt für jede Generation der Menschen in und durch die <span style="color:#4C58FF">„Kirche“</span> JESU CHRISTI.)</span> Die, von GÖDEL im 1. Beweisgang, als Prämissen schon vorausgesetzten und ,angenommenen‘ Perfektionen, bzw. Vollkommenheiten, <span style="color:#00B000">(das sind die allgemeinen ,Transzendentalia‘ für alles Nicht-Göttliche in der Welt)</span>, werden im ersten Teil des 2. Beweisganges, mit Term :13: <span style="color:#4C58FF">— ‚'''PY'''‘ —</span>, dann auch als <span style="color:#FF6000">„positive Wesenseigenschaften“</span>, <span style="color:#00B000">(als die ultimativen ,Transzendentalia‘)</span>, in GOTT ‚definitiv‘ <span style="color:#00B000">( ╞ )</span> bestätigt; <span style="color:#00B000">(siehe Anhang, 2. Beweisgang, Anmerkung-2)</span>. Im 3. Beweisgang ist das Basis-Theorem-2 die ,modal‘ notwendige, bzw. transzendentale, Voraussetzung, sowohl für das <span style="color:#FF6000">„an sich notwendige Dasein GOTTES“</span>, <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, im Term :10:, als auch für die <span style="color:#FF6000">„für uns notwendige Existenz GOTTES“</span>, <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>‘ —</span>, in den Ressourcen dieses Beweisganges ''':''' in der Definition-3, und im Axiom-5; <span style="color:#00B000">(das <span style="color:#4C58FF">— ‚'''E'''‘ —</span> wird nur GOTT zugeordnet; vgl. auch Anhang, 3. Beweisgang, Anmerkung-4)</span>. Dieses Basis-Theorem-2 ist auch zugleich die Antwort auf die Frage nach dem ‚Ursprung‘ GOTTES ''':''' GOTT ist <span style="color:#FF6000">„unverursacht“ <span style="color:#00B000">|</span> „ursprungslos“</span> ‚da‘, von <span style="color:#CC66FF">„Ewigkeit zu Ewigkeit“</span>, denn es ‚ist‘ sein <span style="color:#FF6000">„Wesen“</span>, <span style="color:#00B000">(überzeitlich-ewig)</span> für uns immer schon ‚da‘ zu sein. Weitere ‚Einzelheiten‘ über Wesen und Eigenschaften GOTTES gehören in die Mystik, bzw. in die <span style="color:#4C58FF">„Theologie“</span>. ===<div class="center"><span style="color:#660066">Die Bedeutung des Kalküls</span></div>=== <div class="center">Immanuel KANT und Kurt GÖDEL im ‚Dialog‘</div> KANT sagt ''':''' ::<span style="color:#FF6000">»</span>'''''Sein''' ist offenbar kein reales Prädikat''. ... ''Es ist bloß die'' <span style="color:#00B000">[ gedachte ]</span>'' Position'' <span style="color:#00B000">[ latinisiert, deutsch für ''':''' ,Setzung‘ ]</span> ''eines Dinges ... Nehme ich nun das Subjekt (Gott) mit allen seinen Prädikaten'' <span style="color:#00B000">[ d.h. Eigenschaften ]</span> ''(worunter auch die Allmacht gehört) zusammen, und sage ''':''' ‚'''Gott ist'''‘'', <span style="color:#00B000">[ ,GOTT existiert wirklich‘ ]</span>, ''oder ‚es ist ein Gott‘, so <u>setze</u> ich kein neues Prädikat'' <span style="color:#00B000">[ keine neue Eigenschaft ]</span> ''zum ‚Begriffe‘ von Gott ''':''''' <span style="color:#00B000">[ <span style="color:#0000FF; background-color:#FFFF00">‚Sein’ ist kein ‚reales Prädikat’ in GOTT</span>; ‚Existenz‘ ist in GOTT keine ‚Eigenschaft‘ ],</span> ... ''es kann daher zu dem Begriffe'', <span style="color:#00B000">[ ,GOTT‘ ]</span>, ''der bloß die'' <span style="color:#00B000">[ gedachte ]</span>'' Möglichkeit ausdrückt, darum, dass ich dessen Gegenstand'', <span style="color:#00B000">[ GOTT ]</span>, ''als schlechthin gegeben (durch den Ausdruck ''':''' er ist'', <span style="color:#00B000">[ GOTT ist wirklich ]</span>'' ) <u>denke</u>, nichts weiter hinzukommen.'' <span style="color:#00B000">[ Beides ist ,bloß gedacht‘ '''!''' ]</span> ''Und so enthält das Wirkliche nichts mehr als das bloß Mögliche. Hundert ‚wirkliche‘ Taler enthalten nicht das mindeste <u>mehr</u>, als hundert ‚mögliche‘. Denn, da diese den'' <span style="color:#00B000">[ gedachten ]</span>'' ‚Begriff‘, jene aber den Gegenstand und dessen'' <span style="color:#00B000">[ gedachte ]</span>'' Position an sich selbst bedeuten, so würde, im Fall dieser'', <span style="color:#00B000">[ die 100, als ,wirklich‘ bloß gedachten Taler ]</span>, ''<u>mehr</u> enthielte als jener,'' <span style="color:#00B000">[ als ihr ‚gedachter‘ Begriff im Verstand, wie ΑNSELM von Canterbury für GOTT, als ‚wirklich‘ Existierenden, argumentierte, …''so würde'' ]</span> ''mein ‚Begriff‘'' <span style="color:#00B000">[ die 100 im Verstand ‚gedachten‘ Taler ]</span> ''nicht den ganzen Gegenstand ausdrücken, und also auch <u>nicht der angemessene Begriff</u> von ihm sein. Aber in meinem Vermögenszustande ist <u>mehr</u> bei hundert ‚wirklichen‘ Talern, als bei dem bloßen Begriffe derselben'', <span style="color:#00B000">[ als bei 100 bloß ‚gedachten‘ Talern ]</span> ... <span style="color:#FF6000">«</span> <span style="color:#00B000"><ref>‚''<span style="font-family: Times;"><big>Kritik der reinen Vernunft</big></span>''‘, Seite 401; https://www.korpora.org/kant/aa03/401.html</ref></span>. GÖDEL würde darauf <span style="color:#00B000">(korrespondierend zur aristotelisch-<span style="color:#4C58FF">,theologischen‘</span> Tradition von der Identität von Sein und Wesen in GOTT)</span> antworten ''':''' ::<span style="color:#FF6000">»</span>Die <span style="color:#FF6000">„100 Taler“</span> sind der <span style="color:#FF6000">»''zufälligen Struktur der'' <span style="color:#00B000">[ vergänglichen ]</span> ''Welt''«</span> entnommen, und sind daher nicht mit GOTT vergleichbar, der, <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>''Struktur''«</span> unserer Welt, <span style="color:#FF6000">„über“</span> dieser Welt steht. Einzig und allein nur von GOTT gilt ''':''' Der mit Dingen aus unserer Welt ,nicht vergleichbare‘ GOTT, <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, <span style="color:#FF6000">„existiert notwendig für uns“</span>, <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x'''‘ —</span>, und <span style="color:#FF6000">„notwendiges Existieren, <u>Sein</u>“</span> ,ist‘ eine <span style="color:#FF6000">„positive <u>Wesen</u>seigenschaft“</span> in GOTT, <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ —</span>, weil GOTT aus sich <span style="color:#FF6000">„vollkommen“ <span style="color:#00B000">|</span> „perfekt“</span> ist, <span style="color:#4C58FF">— ‚'''PG'''‘ —</span> ''':''' <span style="color:#0000FF; background-color:#FFFF00">‚Sein‘ ist in GOTT ein ‚reales Prädikat‘</span>; <span style="color:#00B000">(notwendige ‚Existenz’ ist eine positive ‚Wesenseigenschaft’ in GOTT)</span>, und nur bei GOTT '''!''' Zum zeitlos-ewigen GOTT der Christen ''':''' <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, <span style="color:#00B000">(als methodologische Kalkül-Prämisse)</span>, kann man sagen ''':''' Weil es, wegen Axiom-1 und Axiom-2, <span style="color:#FF6000">„widerspruchsfrei möglich"</span> ist, dass es GOTT gibt ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, darum ist GOTT auch das ‚einzige‘ <span style="color:#FF6000">„Wesen“</span>, <span style="color:#4C58FF">— ‚'''x'''‘ —</span>, von dem ein Christ sagen kann, dass es <span style="color:#FF6000">„notwendig aus sich“</span> ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, d.h. <span style="color:#FF6000">„grundlos“ <span style="color:#00B000">|</span> „unverursacht“</span>, für uns immer schon ‚da’ ist, und immer ,da’ sein wird; und zusätzlich gilt ''':''' Es gibt für jede mögliche Welt ‚nur‘ diesen einen GOTT ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx ∧ □∀y(Gy→x=y)'''‘ — </span><span style="color:#00B000">(Monotheïsmus, Korollar-3)</span>; vorausgesetzt, man geht von der ,Existenz’ dieses GOTTES aus, wobei diese Annahme für GÖDEL <span style="color:#FF6000">»''mit allen bekannten Tatsachen durchaus vereinbar''«</span> ist.<span style="color:#FF6000">«</span> Eine Beobachtung ''':''' KANT sagt, gleichsam als ,krönenden‘ Abschluss seiner Widerlegung des, — von ihm so genannten —, ,ontologischen Gottesbeweises‘ ''':''' <span style="color:#FF6000">»</span>''Aber in meinem Vermögenszustande ist <u>mehr</u> bei hundert ‚wirklichen‘ Talern, als bei dem bloßen Begriffe derselben, (d.i. ihrer Möglichkeit).''<span style="color:#FF6000">«</span> Diese Feststellung KANTS entspricht jedoch genau der Argumentation ANSELMS ''':''' GOTT <span style="color:#FF6000">„<span style="font-family: Times;"><big>esse et in re</big></span>“</span>, d.h. GOTT ,existiert auch in Wirklichkeit‘, <span style="color:#FF6000">„<span style="font-family: Times;"><big>quod maius est</big></span>“</span>, was <u>mehr</u> ist, als <span style="color:#FF6000">„<span style="font-family: Times;"><big>esse solo in intellectu</big></span>“</span>, als nur ein bloßer Begriff ,im Verstand zu sein‘. Der ,Mehr-Wert‘ ergibt sich in beiden Fällen, sowohl bei den Talern als auch bei GOTT, aus der ,Wirklichkeit‘ ihrer Existenz, im Gegensatz zur bloßen, <span style="color:#00B000">(im Begriff gedachten)</span>, ,Möglichkeit‘ ihrer Existenz, so dass, in jedem Fall, der ,Begriff‘ im Verstand ohne Abstriche <span style="color:#FF6000">»</span>''den ganzen Gegenstand ausdrückt''<span style="color:#FF6000">«</span>, und von diesem auch <span style="color:#FF6000">»</span>''der angemessene Begriff''<span style="color:#FF6000">«</span> ist. Alles andere wäre eine ,Lüge‘. Mit dieser ,Beobachtung‘ ist das implizit ,Widersprüchliche‘ in KANTS Argumentation aufgedeckt ''':''' Das Wirkliche in KANTS Vermögenszustande enthält <span style="color:#FF6000">,doch mehr‘</span> als das bloß Mögliche, konträr zu seiner vorigen Behauptung ''':''' <span style="color:#FF6000">»</span>''das Wirkliche''<span style="color:#FF6000">«</span> enthalte <span style="color:#FF6000">»'',nichts mehr‘</span> als das bloß Mögliche''<span style="color:#FF6000">«</span>. Diese Behauptung ist offensichtlich falsch. Das ist somit ein indirekter Beweis und damit eine Bestätigung für die analoge Argumentation ANSELMS aus dem Wiederspruch des Gegenteils, am Beispiel KANTS <span style="color:#FF6000">»</span>''Vermögenzustandes bei hundert wirklichen Talern''<span style="color:#FF6000">«</span>, in dem in Wirklichkeit <span style="color:#FF6000">,doch mehr‘</span> ist, <span style="color:#FF6000">»</span>''als bei dem bloßen Begriffe derselben''<span style="color:#FF6000">«</span>. <span style="color:#00B000">(Diese ,Beobachtung‘ ist zugleich auch das entscheidende Indiz dafür, dass das systembedingte Konzept KANTS von der ,Existenz‘, bzw. vom ,Sein‘ eines jeden Gegenstandes, als</span> <span style="color:#FF6000">»</span>''dessen bloße Position''<span style="color:#FF6000">«</span>, <span style="color:#00B000">d.i. als seine ,Setzung‘ bloß im- und durch den Verstand, ,falsch‘ ist, — d.h. im Klartext ''':''' für KANT ist das ,Sein‘ eines Gegenstandes bloß ein ,Gedanke‘ in uns, wenn er meint, dass uns ein Gegenstand erst dann wirklich ,gegeben‘ sei, wenn wir uns den</span> <span style="color:#FF6000">»</span>''Gegenstand als schlechthin gegeben (durch den Ausdruck : <u>er ist</u>) <u>denken</u>''<span style="color:#FF6000">«</span>, <span style="color:#00B000">was nur dem Irrtum einer falschen System-Konzeption geschuldet sein kann. Auf Grund dieser Konzeption ist das</span> <span style="color:#FF6000">»</span>''Ding, wie es an sich selbst ist''<span style="color:#FF6000">«</span>, <span style="color:#00B000">für KANT systembedingt weder ,anschaubar‘, noch ,erkennbar‘. Diese falsche Konzeption über die ,Existenz‘, bzw. das ,Sein‘ eines Dinges, als</span> <span style="color:#FF6000">»</span>''dessen bloße Position''<span style="color:#FF6000">«</span>, <span style="color:#00B000">ist für KANT letztendlich auch die Beweisgrundlage und Voraussetzung für seine Ablehnung des ontologischen Argumentes für GOTT im Theorem ANSELMS. Wenn das ,wirkliche‘ Sein eines Dinges nichts anderes ist, als</span> <span style="color:#FF6000">»</span>''dessen'' <span style="color:#00B000">[ bloß gedachte ]</span> ''Position''<span style="color:#FF6000">«</span>, <span style="color:#00B000">d.h. als seine ,mögliche‘ Setzung bloß im- und durch den Verstand, — das ist das, als ,wirklich‘ bloß nur ,gedachte‘ Ding —, dann</span> <span style="color:#FF6000">»</span>''enthält''<span style="color:#FF6000">«</span> <span style="color:#00B000">natürlich</span> <span style="color:#FF6000">»</span>''das Wirkliche''<span style="color:#00B000">, [ als die bloß gedachte Existenz ],</span> ''nichts mehr als das bloß Mögliche''<span style="color:#00B000">, [ als der gedachte Begriff ]<span style="color:#FF6000">«</span>, was offensichtlich unhaltbar ist. <span style="color:#4C58FF">[ Modus tollendo tollens ] </span> ''':''' Wenn die Konsequenz einer Wenn-Dann-Folgerung ,falsch‘ ist, dann ist auch ihre Voraussetzung, das System-Konzept KANTS, ,falsch‘ ''':''' d.i. seine ,Kopernikanische Wende‘ für die Metaphysik, soweit sie KANTS ,Sein’-Konzept betrifft. Korrekt und ,wahr‘ ist in jedem Fall ''':''' Das Wirkliche enthält <span style="color:#FF6000">,doch mehr‘</span> als das bloß Mögliche, und die Dinge ,existieren‘ schon immer unabhängig von unserem Denken. ,Existenz‘, das ,Sein‘, ist <span style="color:#FF6000">,doch mehr‘</span>, als bloß ein ,Gedanke‘ von uns.)</span> Somit ist die Argumentation KANTS gegen den ontologischen Beweis ANSELMS für GOTT ,falsch‘ und unhaltbar, weil sie auf der ,falschen‘ Voraussetzung beruht ''':''' die ,Existenz‘, bzw. das ,Sein‘ eines jeden ,Gegenstandes‘, — wie z. B. auch die Existenz bei GOTT —, sei bloß dessen gedachte ,Position‘ an sich selbst, d.h. bloß seine ,Setzung‘ im- und durch den Verstand. Damit ,macht‘ er GOTT außerdem zu einem ,Ding‘ unter den vielen ,Dingen‘ dieser Welt, und verkennt so, — wie vor ihm THOMAS von Aquin —, auch die Einzigartigkeit und Exklusivität GOTTES im Theorem ANSELMS. <div class="center">Die <span style="color:#FF6000">„Rede von GOTT“</span> in der philosophischen Tradition</div> Wenn man die philosophische Tradition der <span style="color:#FF6000">„Rede von GOTT“</span> im Lichte der Ergebnisse der <span style="color:#4C58FF">„axiomatischen Theologie“</span> GÖDELS liest, dann stellt sie sich am Beispiel bei ARISTOTELES, — AVICENNA, — ANSELM, und bei GÖDEL wie folgt dar ''':''' <span style="color:#FF6000">»''Das Erstbewegende,'' (<span style="font-family: Times;"><big>,πρῶτον κινοῦν‘</big></span>), ''das, ohne selbst ‚bewegt‘ zu sein'', (<span style="font-family: Times;"><big>,ἀκίνητον‘</big></span> <span style="color:#00B000">| ''unverursacht, ,entstehungslos‘'' |</span> ), ''alles Übrige wie ein Geliebtes ‚bewegt‘'', (<span style="font-family: Times;"><big>,κινεῖ δὴ ὡς ἐρώμενον‘</big></span> <span style="color:#00B000"> | ''-verursacht, ,entstehen‘ lässt'' |</span> ), ''ist sowohl'' <span style="color:#00B000">[ zeitlich-]</span>''ewiges ‚Wesen‘'', (<span style="font-family: Times;"><big>,ἀΐδιον καί οὐσία‘</big></span> <span style="color:#00B000">| ''‚Substanz‘'' |</span> ), ''als auch'' <span style="color:#00B000">[ zeitlich-]</span>''ewiges ‚wirksames, verwirklichendes Sein‘'', (<span style="font-family: Times;"><big>‚ἀΐδιον καί ἐνέργεια οὖσα‘ = ‚actus purus‘</big></span><span style="color:#00B000"> | '',reine Tätigkeit‘'' |</span> ), … ''ersehnt'', (<span style="font-family: Times;"><big>,ὀρεκτόν‘</big></span>), ''und erkennbar'', (<span style="font-family: Times;"><big>,νοητόν‘</big></span>), ... ''denn dies ist der ‚Gott‘'', (<span style="font-family: Times;"><big>,τοῦτο γὰρ ὁ θεός‘</big></span>), <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, ''der'' <span style="color:#00B000">[ zeitlich-]</span>''Ewige'', (<span style="font-family: Times;"><big>,ἀΐδιον‘</big></span>), — ''der Unvergleichliche'', (<span style="font-family: Times;"><big>,ἄριστον‘</big></span> <span style="color:#00B000">| ''‚der Beste‘'' |</span> ), — ''der Lebendige'', (<span style="font-family: Times;"><big>,ζῷον‘</big></span> <span style="color:#00B000">| ,''das Leben selbst‘'' |</span> ), — ... ''so sagen wir ja'', (<span style="font-family: Times;"><big>,φαμὲν δὴ‘</big></span>), — ...«</span> ''':''' <span style="color:#00B000">(ARISTOTELES — Grieche)</span>. Der ‚Begriff’ <span style="color:#FF6000">„GOTT“</span>, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, als ,Individuumname‘, ist synonym mit <span style="color:#FF6000">„göttliches ‚Da-Sein’“</span>, das sowohl <span style="color:#FF6000">„aus sich vollkommen“</span>, als auch <span style="color:#FF6000">„notwendig für uns“</span> ‚da‘ ist; <span style="color:#00B000">(das ist das, an sich, vollkommene ‚Was-Sein‘ GOTTES ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ — </span>, das zugleich, für uns, das notwendige ‚Da-Sein‘ GOTTES ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x'''‘</span> — ist)</span>; <span style="color:#CC66FF">„von Ewigkeit zu Ewigkeit“</span>. Das ist der <u>angemessene Begriff</u> von GOTT, und gilt ‚nur‘ von GOTT. Weil GOTT <span style="color:#FF6000">„vollkommen“</span> ist, ist <span style="color:#FF6000">„Da-Sein“ <span style="color:#00B000">|</span> „GOTT-Sein“ <span style="color:#00B000">|</span> „Göttlichkeit“</span> das <span style="color:#FF6000">„Wesen“</span> GOTTES ''':''' <span style="color:#4C58FF">— ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ —</span>. Im Unendlichen, GOTT, sind <span style="color:#FF6000">„Essenz“</span> und <span style="color:#FF6000">„Existenz“</span> koinzident ,eins‘, und daher untrennbar, und <span style="color:#FF6000">»''darum ist GOTT das einzige ‚Sein’, das notwendig an sich ‚da‘ ist''«</span> ''':''' <span style="color:#00B000">(ABU ALI SINA alias AVICENNA — Muslim)</span>. Der <span style="color:#00B000">(gedachte)</span> ‚Eigenschafts-Begriff‘ <span style="color:#FF6000">„Vollkommenheit (die Größe) GOTTES“</span>, <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, <span style="color:#00B000">(‚Perfektion‘, die unbegrenzte Summe aller ‚positiven Eigenschaften‘ in GOTT)</span> schließt koinzident die ‚Eigenschaft’ <span style="color:#FF6000">„notwendige Existenz für uns“</span> mit ein ''':''' <span style="color:#4C58FF">— ‚'''PE'''<sub>not</sub>‘ —</span>. GOTT wäre nicht <span style="color:#FF6000">„vollkommen“</span>, wenn er nicht auch real für uns ‚da‘ wäre, wenn er nicht ,immer schon’ <span style="color:#FF6000">„existierte“</span>. ‚Sein’ ist <u>mehr</u> als ‚Nicht-Sein’. ,Sein’, bzw. ,Existenz’ gehört in GOTT zu den ,Transzendentalia’. Das sind die <span style="color:#00B000">(ultimativen)</span> ,Wesenseigenschaften’ in GOTT. Der unbegrenzt Unendliche, GOTT, ist daher das <span style="color:#FF6000">»''vollkommenste Wesen, über das nichts ,Größeres‘ d.h. Vollkommeneres <u>mehr</u> ‚gedacht‘ werden kann''«</span> ''':''' <span style="color:#00B000">(ANSELM von Canterbury — Christ)</span>. Der ‚Begriff’ <span style="color:#FF6000">„Perfektion GOTTES“</span>, <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, schließt koinzident das <span style="color:#FF6000">„notwendige Dasein GOTTES“</span>, <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x'''‘</span> —, für uns mit ein, ohne einen zeitlichen Anfang und ohne ein zeitliches Ende. Das ist die ‚zeitlos-ewige‘, an sich absolute, und <span style="color:#FF6000">„für uns notwendige Existenz GOTTES“</span> ''':''' <span style="color:#4C58FF">— ‚'''Gx→E'''<sub>not</sub>'''x'''‘ —</span> ''':''' <span style="color:#00B000">(Das ist ein ,regulär‘-mögliches Korollar im 2. Beweisgang aus Term :16: ''':''' <span style="color:#4C58FF">— ‚'''Gy→Yy'''‘ —</span>, mit der <span style="color:#4C58FF">[ Instanz(Y:=E<sub>not</sub>) ]</span>, und der <span style="color:#4C58FF">[ FUB(y:=x) ]</span>; und auch ein ,regulär‘-mögliches Korollar im 3. Beweisgang ''':''' entsprechend der <span style="color:#FF6000">„logischen Implikation”</span> :: <span style="color:#4C58FF">[├ A ├ B ╞ A → B ]</span> von Term :01: <span style="color:#4C58FF">— ‚'''Gx'''‘ — </span> und Term :05: <span style="color:#4C58FF"> —‚'''E'''<sub>not</sub>'''x'''‘ —</span> aus diesem Beweisgang. In Worten ''':''' <span style="color:#FF6000">»</span>''Angenommen, '' <span style="color:#4C58FF">— ‚'''x'''‘ —</span> ''steht für den GOTT der Christen'' ''':''' <span style="color:#4C58FF">— ‚'''G'''‘ — </span>, ''dann existiert dieser GOTT'', <span style="color:#4C58FF">— ‚'''x'''‘ —</span>, ''für uns notwendig'', <span style="color:#4C58FF">— <sub>not</sub> —</span> <span style="color:#FF6000">«</span>.)</span> Der Unendliche, GOTT, ist <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>''Struktur''«</span> unserer ‚vergänglichen‘, ,endlichen‘ Welt, welche prinzipiell vom dreidimensionalen Raum und von der unwiederbringlich ‚vergehenden‘ Zeit geprägt ist. Der ,GOTT der Christen‘ ist <span style="color:#FF6000">»''unabhängig''«</span> von dieser <span style="color:#FF6600">„vergehenden Raum-Zeit“, — »''jenes rätselhafte und anscheinend in sich widersprüchliche Etwas''« <span style="color:#00B000">(GÖDEL)<ref>Kurt GÖDEL, ‚''<span style="font-family: Times;"><big>Eine Bemerkung über die Beziehungen zwischen der Relativitätstheorie und der idealistischen Philosophie‘</big></span>'', in P.A.SCHILPP (Hg.): ‚''<span style="font-family: Times;"><big>Albert Einstein, Philosoph und Naturforscher‘</big></span>'', Seite 406</ref></span> —</span>. Ohne ‚Zeit‘ gibt es keinen zeitlichen Unterschied zwischen ‚Ursache‘ und ‚Wirkung‘, <span style="color:#00B000">(beides ist zeitlos ,eins‘)</span>, und so ist der zeitlos-ewige GOTT, der <span style="color:#FF6000">»''notwendig aus sich ,existiert‘'' «</span> ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ — </span>, <span style="color:#FF6000">„unverursacht“ <span style="color:#00B000">|</span> „ursprungslos“</span> für uns immer schon ‚da‘ ''':''' <span style="color:#00B000">(GÖDEL — ohne religiöses Bekenntnis)</span>. Mit dem GÖDEL-Kalkül ist die <span style="color:#FF6000">„Rede von GOTT“</span> auf eine ‚vernünftige Basis‘ gestellt worden, und ist somit für jeden Menschen nachvollziehbar, <span style="color:#FF6000">»''rein verstandesmäßig, (ohne sich auf den Glauben an irgendeine Religion zu stützen)''«</span>, wie obige Beispiele zeigen. '''Resümee :''' Das GÖDEL-Kalkül zeigt mit <span style="color:#FF6000">»''mathematischer Evidenz''«</span>, was notwendig folgt, wenn die Axiome ‚wahr‘ sind, <span style="color:#00B000">(die Axiome bilden formal-syntaktisch <span style="color:#FF6000">»''die theologische Weltanschauung''«</span> ab)</span>, unter der Voraussetzung, dass die Axiome <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>'' Struktur''«</span> unserer Welt sind. Die ,Verifikation‘ der Axiome und Definitionen von GOTT und seiner Vollkommenheiten gelingt GÖDEL, — entsprechend seiner Unabhängigkeits-Bedingung —, durch den Aufweis ihrer Widerspruchsfreiheit ''':''' sie sind somit ,wahr‘ und, — im Kontext einer <span style="color:#FF6000">»''theologischen Weltanschauung''«</span> —, auch ,annehmbar‘ in unserer ,realen‘ Welt ''':''' <span style="color:#00B000">(siehe Anhang, 2. Beweisgang und Anmerkung-2)</span>. Er vermeidet damit den Fehler, der immer wieder im Diskurs über Gottesbeweise gemacht wird ''':''' GOTT mit seinen Geschöpfen zu vergleichen. Diese logisch-philosophische Rede von GOTT <span style="color:#00B000">(<span style="color:#FF6000">»''ohne sich auf den Glauben an irgendeine Religion zu stützen''«</span>)</span> hat eine <u>mehr</u> als zweitausendjährige Tradition hinter sich. Der <span style="color:#FF6000">„100-Taler-Gott“</span> des Philosophen KANT, hat heute, nachdem der Logiker und Systemtheoretiker GÖDEL sein System vorgelegt hat, an ‚Strahlkraft‘ verloren. Kurt GÖDEL ''':''' ::<span style="color:#FF6000">» ''Die theologische Weltanschauung'', <span style="color:#00B000">[ dass GOTT für uns immer schon ‚da‘ ist ]</span>, ''ist rein verstandesmäßig mit allen bekannten Tatsachen durchaus vereinbar'';«</span> <span style="color:#00B000">[ d.h. sie ist das ,Resultat‘ der, — vom Glauben geleiteten —, ‚theoretischen Vernunft‘, alias ‚reinen Vernunft‘, und nicht bloß das ‚Postulat‘ einer ‚praktischen Vernunft‘, wie KANT meint ]. <span style="color:#FF6000">»''Der'' <span style="color:#00B000">[ christliche ]</span> ''Glaube ist die ‚Pupille‘ im ‚Auge‘ unseres Verstandes.''«</span> (Heilige KATHARINA von Siena, Lehrerin der Kirche, Patronin Europas<ref>vgl. <span style="font-family: Times;"><big>''Gebet 7 ‚Für die neuen Kardinäle‘, Rom, 21. Dezember 1378,''</big></span> aus <span style="font-family: Times;"><big>''Caterina von Siena ,Die Gebete‘.''</big></span> Kleinhain 2019, online: https://caterina.at/werke/gebete/gebete-detailansicht/gebet-7.html</ref> )</span> Der sonst so rationale KANT, hier doch etwas emotionell, <span style="color:#00B000">(als wolle er die Ergebnisse im GÖDEL-Kalkül nicht wahr haben, die belegen, dass er sich bei GOTT geirrt, und die Funktion des christlichen Glaubens für die Philosophie falsch eingeschätzt hat)</span> ''':''' ::<span style="color:#FF6000">»</span> ''Es war etwas ganz Unnatürliches und eine bloße Neuerung des Schulwitzes, aus einer ganz willkürlich entworfenen Idee das Dasein des ihr entsprechenden Gegenstandes selbst ausklauben zu wollen''<ref>vgl. ‚''<span style="font-family: Times;"><big>Kritik der reinen Vernunft</big></span>''‘, Seite 403. https://www.korpora.org/kant/aa03/403.html</ref>.<span style="color:#FF6000">«</span> Für KANT, für die Scholastiker, <span style="color:#00B000">(und auch für uns)</span>, ist es natürlich ‚logisch‘, dass aus einem als ‚möglich’ gedachten Begriff, <span style="color:#FF6000">»</span>''aus einer ganz willkürlich entworfenen Idee''<span style="color:#FF6000">«</span>, keine Existenzaussage abgeleitet werden kann. <span style="color:#00B000">(Aus dem bloß gedachten Begriff ,goldene Berge‘ folgt natürlich nicht, dass es solche in Wirklichkeit auch gibt.)</span> In der philosophisch-<span style="color:#4C58FF">,theologischen’</span> Tradition, die von ARISTOTELES herkommt, ist der Begriff <span style="color:#FF6000">»''GOTT''«</span> jedoch von allen anderen Begriffen so verschieden, so dass für GOTT diese Logik KANTS nicht mehr gilt. GOTT ist ,unvergleichlich‘ und ,einzigartig‘. Dazu der Kommentar von HEGEL ''':''' ::<span style="color:#FF6000">»''Wenn KANT sagt, man könne aus dem Begriff'' <span style="color:#00B000">[ ‚GOTT‘ ]</span> ''die Realität nicht ,herausklauben‘, so ist da der Begriff als endlich gefasst''.« <span style="color:#00B000">[ In der Endlichkeit unserer Welt trifft die Logik KANTS zu, dass dem ‚Begriff‘ nicht ,notwendig‘ das ‚Sein‘ folgt, denn es gibt in ihr die ,Lüge‘, die das ,Wirklich-Sein‘ im Begriff bloß behauptet, ohne dass es ,in Wirklichkeit‘ zutrifft, was sie behauptet. Es gilt hier nach KANT ''':''' »''Sein ist kein reales Prädikat''«. Somit ist ]</span> »''...der Begriff ohne'' <span style="color:#00B000">[ reales ]</span> ''Sein ein Einseitiges und Unwahres, und ebenso das Sein, in dem kein Begriff ist'', <span style="color:#00B000">[ ist ]</span> ''das begrifflose Sein,'' <span style="color:#00B000">[ d.i. das relative ,Noch-Nicht-Begriffene‘ ]</span>.'' Dieser Gegensatz, der in die Endlichkeit fällt'' <span style="color:#00B000">[ im Endlichen zutrifft ]</span>, ''kann bei dem Unendlichen, GOTT, gar nicht statthaben''<ref>Georg Wilhelm Friedrich HEGEL, ‚<span style="font-family: Times;"><big>''Ausführungen des ontologischen Beweises''</big></span>‘ in den ‚<span style="font-family: Times;"><big>''Vorlesungen über die Philosophie der Religion vom Jahr 1831''</big></span>‘ . Hamburg 1966, Seiten 175 bzw. 174</ref>; <span style="color:#00B000">[ denn ,Begriff‘, bzw. ,Denken‘ und ,Sein‘ sind in dem Unendlichen, GOTT, untrennbar und real immer dasselbe. Auf Grund dieser ontologischen Identität ,personifiziert‘ und ,repräsentiert‘ GOTT die ,Wahrheit‘ ''':''' GOTT ist die ,Wahrheit‘. In GOTT, dem <span style="color:#FF6000">„Schöpfer der Welt“</span>, folgt dem ,Begriff‘ immer ,notwendig‘ das ,Sein‘ ''':''' <span style="color:#CC66FF">»''GOTT sprach ''':''' Es werde ,Licht‘. Und es wurde Licht''«, <small>{{Bibel | Genesis |1|3|EU}}</small>;</span> oder auch ''':''' <span style="color:#CC66FF">»''Der Herr sprach, und sogleich geschah es; er gebot, und alles war da''«,</span> <small>{{Bibel | Psalm |33|9|EU}}</small>.]</span>«</span> Das Entscheidende bei der <span style="color:#4C58FF">„theologischen“</span> Interpretation des GÖDEL-Kalküls ist, dass der <span style="color:#00B000">(Begriff)</span> GOTT der Christen ''':''' <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, nicht auf die Ebene seiner ,endlichen‘ Geschöpfe und unserer Welt gestellt wird, <span style="color:#00B000">(d.i. das ‚Universum‘ im ,Urknall‘, die ‚100-Taler‘, ein ‚Tsunami‘, auch ,einfache Modelle‘ von unserer Welt, etc.)</span>, und damit verglichen wird, sondern, dass der GOTT der Christen in seiner Einzigartigkeit und Besonderheit als <span style="color:#FF6000">»''der Unendliche''«</span> belassen und als <span style="color:#FF6000">»''unabhängig von der zufälligen'' <span style="color:#00B000">[ Raum-Zeit-]</span>''Struktur''«</span> unserer vergänglichen Welt, — als <span style="color:#FF6000">»''der Unvergleichliche''«</span> —, verstanden wird. <span style="color:#00B000">(Alle Kritiken des sog. ,ontologischen‘ Gottesbeweises übersehen die Einzigartigkeit und Besonderheit des <span style="color:#FF6000">»''Unendlichen''«</span>, und/oder wollen diese nicht ,wahr‘ haben.)</span> Auch THOMAS von Aquin ,verortet‘ den GOTT ANSELMS, — in seiner Kritik an dessen Theorem —, irrtümlich unter die ,Dinge‘ der uns umgebenden ,Natur‘, wenn er sagt ''':''' GOTT <span style="color:#FF6000">„<span style="font-family: Times;"><big>esse in rerum natura</big></span>“</span>, d.h. wörtlich, dass der GOTT ANSELMS <span style="color:#FF6000">»</span>''in der Natur der Dinge'' <span style="color:#00B000">(unserer Welt)</span> ''existiert''<span style="color:#FF6000">«</span>, und verkennt somit, — wie nach ihm auch KANT —, die ,Unvergleichlichkeit‘ GOTTES, <span style="color:#00B000">(vgl. STh I q.2 a.1 ad 2<ref>„Deus … illud quo maius cogitari non potest; non tamen propter hoc sequitur quod intelligat id quod significatur per nomen, esse in rerum natura; sed in apprehensione intellectus tantum.“ ——— »''GOTT ist'' (nach ANSELM) ''der, über den Größeres nicht mehr gedacht werden kann. Aber nicht deswegen, weil er'', (der Narr von Psalm 14.1, den ANSELM zitiert), ''das versteht, was durch diesen Namen,'' (d.h. mit dem Begriff ,GOTT‘, als der ,Größte‘, im Theorem ANSELMS), ''bezeichnet wird, folgt daraus'', (wie ANSELM meint), ''dass er auch versteht, dass er'', (der GOTT ANSELMS), ''auch in der ,Natur‘ der Dinge'' (unserer Welt) ''existiert''; <span style="color:#00B000">[ was ANSELM so nie gesagt hat ]</span>. ''Daraus folgt nur, dass er'', (als ,GOTT‘), ''bloß in der Auffassung seines Verstandes'', (d.h. nur im Denken des Narren als ,Begriff‘), ''existiert.''« ——— Hier ,verortet‘ THOMAS einerseits den unendlichen GOTT, von dem das Theorem ANSELMS spricht, irrtümlich unter die endlichen Dinge der uns umgebenden ,Natur‘, was sachlich dem theologischen Theorem der Unvergleichlichkeit GOTTES widerspricht, der nicht unter die Dinge unserer Welt eingereiht werden darf. Anderseits verliert er dadurch auch den ,Blick‘ für die Außerordentlichkeit und Besonderheit GOTTES, dessen Natur völlig verschieden und unabhängig von der ,Natur‘ unserer raum-zeitlichen Welt ist. GÖDEL beweist jedoch, mit ANSELM, weil es notwendig, ohne Widerspruch, (»''bloß in der Auffassung unseres Verstandes''«), möglich ist, dass GOTT existiert, ist es korrekt, daraus auch mit Notwendigkeit zu folgern, dass der Glaube des Erzbischofs ANSELM, und der Glaube seiner Anvertrauten, von der Wirklichkeit GOTTES, widerspruchsfrei, logisch richtig, und damit sinnvoll ist; denn Möglichkeit und Wirklichkeit sind in GOTT koinzident ,eins‘. Das ist das Privilegium GOTTES allein, der einzigartig und unvergleichlich ist. Damit zeigt er auf, dass THOMAS die Unvergleichlichkeit und Einzigartigkeit GOTTES in seinem Vorhalt nicht bedacht hat; und außerdem ANSELM missverstanden hat.</ref>)</span>; jedenfalls hier in der Auseinandersetzung mit ANSELM. Dagegen spricht ANSELM im ,''<span style="font-family: Times;"><big>Proslogion</big></span>''‘, Seite 85f, nur von einem <span style="color:#FF6000">„<span style="font-family: Times;"><big>esse et in re</big></span>“</span> GOTTES, d.h. dass GOTT ,auch in Wirklichkeit existiert‘, <span style="color:#FF6000">„<span style="font-family: Times;"><big>quod maius est</big></span>“</span>, was ,größer‘, bzw. ,mehr‘ ist, als <span style="color:#FF6000">„<span style="font-family: Times;"><big>esse solo in intellectu</big></span>“</span>, als nur ,im Verstand zu sein‘; wobei die ,zeitlose-überzeitliche‘ Wirklichkeit, <span style="color:#00B000">(Natur)</span>, GOTTES jedoch völlig verschieden und <span style="color:#FF6000">»''unabhängig von der zufälligen''«</span> Wirklichkeit <span style="color:#00B000">(die ,Natur‘)</span> der ,raum-zeitlichen‘ Welt der Dinge ist. Daher ist sie mit dieser auch nicht vergleichbar. GOTT ist <span style="color:#FF6000">„vollkommen“</span> und alle <span style="color:#FF6000">„Vollkommenheiten“</span> in GOTT, <span style="color:#00B000">(die ultimativen ,Transzendentalia‘)</span>, sind koinzident ,eins‘, — ,fallen <span style="color:#FF6000">„notwendig“</span> perspektivisch in eins zusammen‘, und sind daher konvertierbar. Darum ist auch die Wirklichkeit, <span style="color:#00B000">(Natur)</span>, GOTTES ,einzigartig‘ und ,unvergleichlich‘. Mit Korollar-3 ist die Exklusivität und Außerordentlichkeit GOTTES definitiv im Kalkül ,bewiesen‘ <span style="color:#00B000">( ╞ )</span>. Der abendländische Monotheïsmus ist somit eine ,logische‘ Konsequenz aus den GÖDEL-Axiomen. <span style="color:#00B000">(Das <span style="color:#4C58FF">„theologische“</span> Theorem von der ,Einzigartigkeit‘ und Exklusivität GOTTES, d.h. hier im Kontext ''':''' die exklusive Einheit von GOTT und Mensch in JESUS CHRISTUS; von Vater, Sohn und Geist im <span style="color:#4C58FF">„Dreifaltigen“</span>; von Essenz und Existenz, von Begriff und Sein, von Ursache und Wirkung, von Subjekt und Objekt, von Möglichkeit und Wirklichkeit, und die unbegrenzte Summeneinheit und Koinzidenz der unendlichen Transzendentalien in GOTT, ist, — mit HEGEL —, die Voraussetzung und Bedingung jeder Philosophie ''':''' <span style="color:#FF6000">»''Die Einheit muss am Anfang der Philosophie stehen''«</span>; und ist zugleich auch ihr gesuchtes und bewiesenes Endergebnis und Ziel ''':''' <span style="color:#FF6000">»''Diese Einheit muss auch das Resultat der Philosophie sein''«</span><ref>https://hegel-system.de/de/gottesbeweis.htm#hegels-kritik-an-kant</ref>, was hier im GÖDEL-Kalkül ,logisch‘ mit Korollar-3 verifiziert wird ''':''' <span style="color:#4C58FF">— ‚'''□(∃xGx ∧ ∀y(Gy→x=y))'''‘ —</span> ''':''' <span style="color:#FF6000">»''GOTT ist exklusiv einzigartig''«</span>.)</span> Die Einzigartigkeit GOTTES bedingt die Koinzidenz, den inneren Zusammenhang aller seiner Vollkommenheiten und Zuschreibungen, <span style="color:#00B000">(Axiom-2)</span>, d.h. ihr paarweise, perspektivisches ,Zusammenfallen in eins‘ im Unendlichen, GOTT. ——— Aus der Notwendigkeit aller positiven Eigenschaften und Zuschreibungen, <span style="color:#00B000">(d.h. aus den, an sich, notwendigen, ultimativen Transzendentalien, Axiom-4)</span>, die in GOTT paarweise, als ,Wesenseigenschaften‘ koinzident ,eins‘ sind, <span style="color:#00B000">(Definition-2)</span>, ist die Einzigkeit GOTTES für uns erschließbar, <span style="color:#00B000">(Korollar-3)</span>. Axiom-4 ist die erste, ,modal‘ <span style="color:#FF6000">„notwendige“</span>, d.h. die transzendentale Voraussetzung für Korollar-3. Wenn im Korollar-3 das <span style="color:#4C58FF">— ‚'''x'''‘ —</span> z. B. für GOTT, dem ,Vater‘ der Christen, und das <span style="color:#4C58FF">— ‚'''y'''‘ —</span> für GOTT, dem ,Sohn‘, d.h. für ,JESUS CHRISTUS‘ steht, oder für den ,HEILIGEN GEIST‘, <span style="color:#00B000">(den ,Dreifaltigen GOTT‘ der Christenheit)</span>; oder auch für die Gottesbezeichnung ,GOTT-ADONAI‘ der Juden, oder für die Gottesbezeichnung ,ALLAH‘ der Muslime steht, dann weist dieses Korollar, für <span style="color:#4C58FF">— ‚'''∀y'''‘ —</span>, mit der ,ontologischen Identität‘ ''':''' <span style="color:#4C58FF">— ‚'''x=y'''‘ —</span>, auf die ,Koinzidenz‘ des <span style="color:#4C58FF">„Dreifaltigen“</span>, und auf die <span style="color:#4C58FF">„Hypostatische Union“</span> der Naturen von GOTT und Mensch in JESUS CHRISTUS, bzw. auch auf den inneren Zusammenhang der drei Buch-Religionen hin. ===<div class="center"><span style="color:#660066">Anhang : das GÖDEL-Kalkül</span></div>=== In der ,Legende zum GÖDEL-Kalkül‘ wird an einige Basics erinnert, und diese für die operative Praxis im anstehenden Kalkül, mit Hilfe von logischen Meta-Terme, adaptiert. Zusätzliche, notwendige Regeln und Gesetze werden dann ,benannt‘, wenn sie in der Kalkül-Durchführung auftreten. {|class="wikitable" |- ! <div class="center"><span style="color:#660066">Legende zum GÖDEL-Kalkül</span></div> |- | <small> <math>\begin{align} {\color{blue}\text{ ◇}} \text{ :: konsistent ↔ widerspruchsfrei ↔ möglich ↔ denkbar, } & {\color{blue}\text{ □}} \text{ :: notwendig ↔ wirklich, für jede mögliche Welt ↔ exklusiv} \\ \text{logischer Meta-Term ::} {\color{blue}\text{ [ A ├ B ]}} \text{ ::} & \text{ „aus A folgt im Kalkül ,regulär‘ (├ ) B.“} \\ \text{ A, B sind Aussagen über Eigenschaften, (A ist keine Eigenschaft);} & \text{ die Aussage, z.B. in der Kalkül-Zeile 10, wird als ,Term :10:‘ bezeichnet} \\ {\color{blue}\text{ AE}} \text{ ::} & \text{ Argument Einführung, Prämisse, Postulat } \\ {\color{blue}\text{ Xx}} \text{ ::} & \text{ „X ist eine Eigenschaft der Individuum-Variable x.“ } \\ {\color{blue}\text{ ¬PX}} \text{ ::} & \text{ „X ist keine positive Eigenschaft, ist keine Perfektion, ist nicht vollkommen.“ } \\ {\color{blue}\text{ Instanz(X := Y)}} \text{ ::} & \text{ Substitution der Eigenschaft X durch die ,bestimmte‘ Eigenschaft Y } \\ \text{ (Eine ,Instanz‘ ist ein Exemplar aus einer Menge gleichartiger Dinge;} & \text{ hier die ,bestimmte‘ Eigenschaft Y, als Ersatz für das unbestimmte X.) } \\ {\color{blue}\text{ FUB(x := y)}} \text{ ::} & \text{ Freie-Um-Benennung der Individuum-Variable x in y } \\ \text{ ,modal‘-frei gewählte Kalkül-Prämisse ::} {\color{blue}\text{ Gx}} \text{ ::} & \text{ „Die Variable x steht für den GOTT der Christen.“ } \\ {\color{blue}\text{ [ G(y) ├ ⱯyG(y) ]}} \text{ ::} & \text{ All-Operator-Einführung der Variable y für GOTT } \\ \text{ „Angenommen, die Variable y steht für GOTT, dann } & \text{folgt ,regulär‘ (├ ), dass auch jedes y im Kalkül für GOTT steht.“}\\ {\color{blue}\text{[ ⱯXA(X) ├ A(X) ]}} \text{ ::} & \text{ All-Operator-Beseitigung für die substituierte Eigenschaft X } \\ \text{ „Wenn X durch eine ,bestimmte‘ Eigenschaft ,instanziiert‘ ist oder } & \text{wird, dann kann der All-Operator von X ,regulär‘ (├ ) beseitigt werden.}\\ {\color{blue}\text{ KOMM(↔)}} \text{ ::} & \;{\color{blue}\text{[ (A↔ B) ↔ (B ↔ A) ]}} \text{ :: Kommutativgesetz für ( ↔ )}\\ {\color{blue}\text{ DIST(□∧)}} \text{ ::} & \;{\color{blue}\text{[ (□A ∧ □B) ↔ □(A ∧ B) ]}} \text{ :: Distributivgesetz für (□∧ )} \\ \text{ (hypothetischer Syllogismus, häufige logische Schlussregel) ::} & \;{\color{blue}\text{[ A → B, A ├ B ]}} \text{ :: (Modus ponendo ponens) :: Abtrennregel.} \\ \text{ „Wenn es wahr ist, dass aus A ein B folgt, und wenn A wahr ist, } & \text{dann ist im Kalkül ,regulär‘ (├ ) ableitbar, dass auch B wahr ist.“} \\ \text{ (negativer hypothetischer Syllogismus) ::} & \;{\color{blue}\text{[ A → B, ¬B ├ ¬A ]}} \text{ :: (Modus tollendo tollens)} \\ \text{ „Wenn es wahr ist, dass aus A ein B folgt, und wenn B falsch ist, } & \text{dann ist im Kalkül ,regulär‘ (├ ) ableitbar, dass auch A falsch ist.“} \\ \text{''KONDITIONALER BEWEIS“ ::} & \;{\color{blue}\text{[ ├ A ├ B ╞ A → B ]}} \text{ :: (logische Implikation)} \\ \text{ „Angenommen, A ist ,regulär‘ Axiom oder Prämisse, und B ist im } & \text{Kalkül ,regulär‘ abgeleitet, dann ist ,bewiesen‘ ( ╞ ) : A impliziert B, ist wahr.“} \\ \text{''INDIREKTER BEWEIS“ ::} & \;{\color{blue}\text{[ ├ ¬A → F ╞ A ]}} \text{ :: (Reductio ad absurdum)} \\ \text{ „Wenn im Kalkül aus ¬A ,regulär‘ eine Kontradiktion } & \text{F folgt, dann ist A ,bewiesen‘ ( ╞ ) : A ist ,wahr‘.“} \\ \end{align}</math> </small> |} A. FUHRMANN ''':''' <span style="color:#FF6000">»</span> ''Eine Prädikatenlogik zweiter Stufe ist eine Logik, in der die Quantoren auch Eigenschaftsausdrücke <span style="color:#00B000">(<span style="color:#FF6000">„Prädikate”</span>)</span> binden können''. <span style="color:#00B000">[ Die ,Prädikate‘ werden in einem Kalkül dieser Logik durch Definitionen ,bestimmt‘ ]</span>. ''Wir werden uns im folgenden recht frei einer dafür geeigneten formalen Sprache bedienen. Äußere Quantoren werden meist weggelassen und wir schreiben kurz'' <span style="color:#4C58FF">— ‚'''Xx'''‘ — </span> ''bzw.'' <span style="color:#4C58FF">— ‚'''PX'''‘ — </span> ''um auszudrücken, dass das Individuum'' <span style="color:#4C58FF">— ‚'''x'''‘ — </span> ''die Eigenschaft'' <span style="color:#4C58FF">— ‚'''X'''‘ — </span> ''hat, bzw. dass die Eigenschaft'' <span style="color:#4C58FF">— ‚'''X'''‘ — </span> ''die höherstufige Eigenschaft'' <span style="color:#4C58FF">— ‚'''P'''‘ — </span> ''<span style="color:#00B000">(für <span style="color:#FF6000">„positiv”</span>)</span> hat;'' <span style="color:#00B000"> [ wobei die Eigenschaft <span style="color:#4C58FF">— ‚'''P'''‘ — </span> als einzige im Kalkül ,unbestimmt‘ bleibt ]</span>. <span style="color:#FF6000">«</span><ref>A. FUHRMANN ‚''<span style="font-family: Times;"><big>‚G‘ wie Gödel. Kurt Gödels axiomatische Theologie</big></span>''‘, Seite 6, Anmerkung 3. Konform mit seinem Artikel in ‚''<span style="font-family: Times;"><big>Logik in der Philosophie</big></span>''‘ hg. v. P. SCHROEDER-HEISTER, W. SPOHN und E. OLSSON. 2005, Synchron, Heidelberg.</ref> Der All-Quantor für Eigenschaften, hier im GÖDEL-Kalkül der ,modalen‘ Prädikatenlogik zweiter Stufe, bindet die ,unbestimmte‘ Eigenschafts-Variable <span style="color:#4C58FF">— ‚'''X'''‘ —</span> ausschließlich nur in den Definitionen im 2. und 3. Beweisgang . <span style="color:#00B000"> (Im ersten Beweisgang gibt es keine Definition.)</span> Dieser All-Quantor wird dann jedes Mal in der Beweis-Durchführung durch die Substitution ''':''' <span style="color:#4C58FF"> [ Instanz(X:= ..) ]</span> mit ,bestimmte‘ Eigenschafts-Konstanten wie <span style="color:#4C58FF">— (X:= G) —</span>, bzw. <span style="color:#4C58FF">— (X:= ¬Y) —</span>, oder <span style="color:#4C58FF">— (X:= E<sub>not</sub>) —</span> ,regulär‘ <span style="color:#00B000">(├ )</span> beseitigt ''':''' <span style="color:#4C58FF"> [ ⱯXA(X) ├ A(X) ]</span>; wobei die Eigenschafts-Konstante im Kalkül entweder als Zwischenergebnis ,regulär‘ abgeleitet, <span style="color:#00B000">(,errechnet‘)</span>, oder mit einer Definition schon ,bestimmt‘ worden ist. Die spezifische ‚Eigenschaft‘ einer Eigenschaft wird hier, in der formalen Syntax der ,modalen‘ Prädikatenlogik zweiter Stufe, als eine tiefer gestellte Abkürzung <span style="color:#00B000">(als Index)</span> an ihre Trägereigenschaft angehängt, wie z. B. ‚wesentlich‘, bzw. ‚essentiell‘ durch <span style="color:#4C58FF"> — <sub>ess</sub> —</span>, oder ‚notwendig‘ durch <span style="color:#4C58FF"> — <sub>not</sub> —</span>. In der Definition-3 steht der Term ''':''' <span style="color:#4C58FF"> —‚'''E'''<sub>not</sub>'''x'''‘ —</span>, um auszudrücken, dass das Individuum <span style="color:#4C58FF">— ‚'''x'''‘ —</span> notwendig <span style="color:#4C58FF">— <sub>not</sub> —</span> die Eigenschaft ''':''' <span style="color:#4C58FF">— ‚'''E'''‘ —</span>, für ,Existenz‘, hat, d.h. <span style="color:#FF6000">»''das <span style="color:#4C58FF">‚'''x'''‘</span> existiert notwendig''«</span>. Der schon von GÖDEL indizierte Term ''':''' <span style="color:#4C58FF">—‚'''G'''<sub>ess</sub>'''x'''‘ —</span> kann gelesen werden als ''':''' <span style="color:#FF6000">»''Das Individuum <span style="color:#4C58FF">‚'''x'''‘</span> hat die Wesenseigenschaft, <span style="color:#4C58FF"> — <sub>ess</sub> — </span> ''':''' GOTT zu sein, <span style="color:#4C58FF">‚'''G'''‘ </span>''«</span>, statt der ,an sich‘ konformen, aber <span style="color:#4C58FF">„theologisch“</span> etwas ungenauen Formulierung ''':''' <span style="color:#FF6000">»''das'' <span style="color:#4C58FF">‚'''x'''‘</span> ''ist wesentlich göttlich''«</span>; oder mit der Voraussetzung ''':''' <span style="color:#4C58FF">— ‚'''Gx'''→'''G'''<sub>ess</sub>'''x'''‘ — </span> deutlicher und <span style="color:#4C58FF">„theologisch“</span> korrekt ''':''' <span style="color:#FF6000">»''Wenn'' <span style="color:#4C58FF">‚'''x'''‘</span> ''für den GOTT der Christen'', <span style="color:#4C58FF">‚'''G'''‘</span>, ''steht, dann ist GOTT-Sein'', <span style="color:#4C58FF">‚'''G'''‘</span>, <span style="color:#00B000">(,Existenz‘)</span> ''das Wesen dieses GOTTES'', <span style="color:#4C58FF">— <sub>ess</sub>‚'''x'''‘ —</span>, <span style="color:#00B000">(,Essenz‘)</span>«</span>; wobei, — entsprechend der ,methodologischen‘ Prämisse des Kalküls <span style="color:#00B000">(<span style="color:#4C58FF">— ‚'''Gx'''‘ — </span> ''':''' das <span style="color:#4C58FF">‚'''x'''‘</span> steht für den ,GOTT der Christen‘)</span> —, bei der Interpretation der Terme dieses besonderen Kalküls, die <span style="color:#4C58FF">„christliche Theologie”</span> für den Begriff <span style="color:#FF6000">„GOTT”</span>, Korrektur und die leitende Instanz ist. Dabei muss die Dreifach-Äquivalenz von <span style="color:#4C58FF"><span style="color:#4C58FF">— ‚'''G'''‘ — </span></span>berücksichtigt werden. Welche der drei Äquivalenzen, bzw. Lesearten von <span style="color:#4C58FF">— ‚'''G'''‘ — </span> bei einem bestimmten Term im Kalkül zulässig ist, muss <span style="color:#4C58FF">„theologisch”</span> überprüft und evaluiert werden. Bei manchen können sogar alle drei Lesearten <span style="color:#4C58FF">„theologisch”</span> zulässig sein. Warum es in der modalen Prädikatenlogik zweiter Stufe, im GÖDEL-System, ,Definitionen‘ gibt, erklärt GÖDEL formal-syntaktisch ''':''' <span style="color:#FF6000">»''Definitionen dienen ja nur der kürzeren Schreibwelse und sind daher prinzipiell überflüssig.''«</span> <span style="color:#00B000">(Aus der Anmerkung 6 in seinem Hauptwerk ''':''' ,''<span style="font-family: Times;"><big>Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme I</big></span>''‘.)</span> Für die <span style="color:#4C58FF">„theologische”</span> Interpretation und Hermeneutik seines Kalküls, sind die ,Definitionen‘ im GÖDEL-System jedoch wesentlich, und letztlich entscheidend. Erst dadurch wird sein Axiomensystem zur <span style="color:#4C58FF">„axiomatischen Theologie”</span>. GÖDEL gibt selbst den hermeneutischen Hinweis dazu, wenn er über den höherstufigen Eigenschaftsbegriff <span style="color:#FF6000">»''positiv''«</span> sagt, der nur ,indirekt‘ definiert wird, jedoch mit seinem gesamten Axiomensystem ''':''' <span style="color:#FF6000">»''Positiv bedeutet positiv im moralisch ästhetischen Sinne, (unabhängig von der zufälligen Struktur der Welt). Nur dann sind die Axiome wahr''.«</span> Die Deutung dieses ,höherstufigen‘ Begriffs als ein anderes Wort für <span style="color:#FF6000">„Transzendentalia“</span> ergibt sich aus der <span style="color:#4C58FF">„theologischen”</span> Evaluierung, d.h. der Einordnung des GÖDEL-Systems in die ,laufende‘ <span style="color:#FF6000">„Rede von GOTT“</span>, seit Menschen, sich über den Sinn der Welt und unseres Lebens in ihr, Gedanken machen. GOTT, der ,transzendent‘, — unabhängig —, zur Welt ist, ist Thema im Theorem ANSELMS, um das es ja im GÖDEL-Kalkül geht. Eine <span style="color:#4C58FF">„theologische”</span> Hermeneutik des GÖDEL-Systems ist daher legitim, die, als ein Bemühen um ein überzeugendes Verstehen, aus dem <span style="color:#4C58FF">„theologischen”</span> Vorwissen vieler Generationen schöpft. Um philosophische, und sogar <span style="color:#4C58FF">„theologische”</span> Theoreme exakt zu formulieren, und untersuchen zu können, hat der Ausnahmelogiker GÖDEL, im 20. Jahrhundert, ein Tor aufgestoßen, das uns ermöglichen kann, <span style="color:#FF6000">»''mathematisch evident''«</span>, und logisch objektiv nachprüfbar, in diesen Disziplinen zu argumentieren. Mit seiner modalen Prädikatenlogik zweiter Stufe, hat GÖDEL dem alten Wunsch eines Raimundus LULLUS, eines Gottfried Wilhelm LEIBNIZ, eines Immanuel KANT, und anderer, nach einer nachprüfbaren ,Universalsprache‘ in den Geisteswissenschaften, entsprochen; analog zur Mathematik, als Universalsprache in den Naturwissenschaften. Der sog. ,Theorembeweiser‘ der Wissenschaftler Christoph BENZMÜLLER und Bruno WOLTZENLOGEL-PALEO, mit Hilfe eines Computers, im 21. Jahrhundert, ist die kongeniale und logische Folge aus diesem Quanten-Schritt GÖDELS. In der folgenden Neu-Kalkülisierung, wird jeder einzelne operative Logik-Schritt des Kalküls in der '''linken Spalte''' nummeriert und als Term-Ergebnis angezeigt, und in der '''rechten Spalte''' werden die dafür benötigten Term-Komponenten und die dabei angewendeten Logik-Regeln und -Gesetze, mit Meta-Terme, dokumentiert. Am Anfang stehen die Ressourcen und das angestrebte Ziel des Beweisganges, <span style="color:#00B000">(das Theorem)</span>. Die GÖDEL Axiome und Definitionen, die Theoreme und Korollare, die Zwischenergebnisse, das Endergebnis, und die logischen Meta-Terme, <span style="color:#00B000">[ in eckigen Klammern ]</span>, werden kontextabhängig, <span style="color:#00B000">(durch ''„Benennungen“'')</span>, interpretiert, <span style="color:#00B000">(angezeigt durch ,Interpretationspunkte‘ — '''::''' —, falls nötig)</span>. Der jeweilige Beweisgang wird in den Anmerkungen ausführlich und umfassend kommentiert. Die Kalkül-Prämissen, <span style="color:#00B000">(<span style="color:#4C58FF">'''AE:'''</span> Argument Einführung)</span>, sind der modal-frei gewählte Einstieg in das Kalkül. Sie dokumentieren, zusammen mit dem angestrebten Beweis-Ziel, eine bestimmte Problemlage in einem externen Diskurs, der mit dem modalen Logik-System hier, formal-syntaktisch überprüft, und gegebenenfalls, verifiziert oder falsifiziert werden soll. Korollare sind einfache, logische Folgerungen aus dem jeweiligen Beweisgang. Theoreme und Korollare sind ,modal‘ gleichwertig. ====<div class="center"><span style="color:#660066">1. Beweisgang</span></div>==== {|class="wikitable" |- ! <div class="center"><span style="color:#660066">GÖDELS ontologischer Beweis für Theorem 1, (Möglichkeitsbeweis)</span></div> |- ! <span style="color:#00B000">''Terme der erweiterten Prädikatenlogik zweiter Stufe__________ „Benennungen“ und durchgeführte Logik-Operationen''</span> |- | <small> <math>\begin{align} \text{(Axiom 1.1)} & \quad P \neg X \;\Longrightarrow\;\ \neg P\ X\ & \ & \text{„Wenn die Negation von X positiv ist, dann ist die Eigenschaft X nicht positiv“} \\ \text{(Axiom 2)} & \quad (P\ X \wedge \;\Box \;\forall x (\ X\ x \Longrightarrow \ Y\ x)) \Longrightarrow \ P\ Y & \ & \text{„Die Eigenschaften Y, die aus einer positiven Eigenschaft X modal} \\ \text{ } & \quad & \ & \; \; \text{notwendig folgen, sind auch positive Eigenschaften“} \\ \text{(Axiom 3)} & \quad P\ G \ & \ & \text{„Göttlichkeit, GOTT-Sein, ist eine pos. Eigenschaft“ ↔ „GOTT ist perfekt“} \\ \text{[RK]} &\quad \Box\; \forall x A \;\Longrightarrow\;\Box\; \forall x B\; \text{ ├ }\;\Box \; \forall x (A \Longrightarrow\; B)\ & \ & \; \text{( :: Modales Prinzip KRIPKE-Γ-Ɐx)} \\ \text{(Theorem 1)} &\quad P\ X \;\Longrightarrow\; \Diamond \; \exists x \ X \ x \ & \ & \text{ (◇ :: „möglich“ ↔ „konsistent“ ↔ „denkbar“; □ :: „notwendig“) } \\ \text{ } & \text{„Positive Eigenschaften sind konsistent“} & \ & \Longleftarrow\; \text{was zu beweisen ist !} \\ \text{01} & \quad P\ X \ & \ & \text{ AE: „Angenommen, es gibt positive Eigenschaften, Perfektionen“} \\ \text{02} & \quad P\ X \;\Rightarrow\; \neg \Diamond \; \exists x \ X \ x \ & \ & \text{ AE: „Angenommen, positive Eigenschaften sind nicht konsistent“} \\ \text{03} & \quad (\neg x = .. )\ & \ & \text{ AE: „Es gibt die Eigenschaft, nicht mit x identisch zu sein“ :: (ungleich)} \\ \text{04} & \quad (\ x = .. )\ & \ & \text{ AE: „Es gibt die Eigenschaft, mit x identisch zu sein“ :: (gleich)} \\ \text{05} & \quad \text{ ├ }\; \neg \Diamond \; \exists x \ X \ x \ & \ & \text{:01:02:[Modus ponendo ponens] :: [A, A → B├ B] :AE:} \\ \text{06} & \quad \neg\neg \Box \neg \exists x \ X \ x \ & \ & \text{:05:[ ◇A ↔ ¬□¬A] :: (Modalregel)} \\ \text{07} & \quad \neg\neg \Box \neg\neg \forall x \neg X \ x \ & \ & \text{:06:[∃xA ↔ ¬Ɐx¬A] :: (Quantoren Regel)} \\ \text{08} & \quad \text{ ├ }\; \Box \; \forall x \neg X \ x \ & \ & \text{:07:NEG :: [¬¬A↔A] :: (Gesetz der Aussagenlogik)} \\ \text{09} & \quad \Box \; \forall x \neg X \ x \Leftrightarrow\ W & \ & \text{:02:08:[(:02:↔W) → (├:08:↔W)] :: (Kalkülregel)} \\ \text{10} & \quad \Box \; \forall x \ X \ x \Leftrightarrow\ F & \ & \text{:09:[(¬A↔W)↔(A↔F)] :: (Regel für Wahrheitswerte)} \\ \text{11} & \quad \Box \; \forall x (\neg x = x ) \Leftrightarrow \ F \; \ & \text{ } & \text{□ⱯxXx:03:Instanz(X:=(¬x=..)) ⇒ Kontradiktion !} \\ \text{12} & \quad \Box \; \forall x (\ X \ x \Rightarrow\; (\neg x = x)) & \text{ } & \text{:10:11:[(:10:↔F) → (:11:↔F)] :: „ex falso sequitur quotlibet“ :[RK]} \\ \text{13} & \quad \ P\ X \wedge \;\Box \; \forall x (\ X \ x \Rightarrow\; (\neg x = x)) & \ & \text{:01:12:[Konjunktion] :: [A, B ├ A∧B]} \\ \text{14} & \quad \ (P\ X \wedge \;\Box \; \forall x (\ X \ x \Rightarrow \; (\neg x = x))) \Rightarrow \; P (\neg x = .. ) & \ & \text{(A2):Instanz(Y:=( ¬x= ..)) :: (Substitution für Eigenschaften)} \\ \text{15} & \quad \ P (\neg x = .. ) & \ & \text{:13:14:[Modus ponens] :: (logische Schlussregel)} \\ \text{16} & \quad \ P (\neg x = .. )\;\Rightarrow\ \neg P (\ x = .. )\ & \ & \text{(A1.1):Instanz(X:=(x=..))}\\ \text{17} & \quad \neg P (\ x = .. )\ & \ & \text{:15:16:[Modus ponens]}\\ \text{18} & \quad \Box \; \forall x \ (x = x ) \Leftrightarrow \ W \; \ & \ & \text{□ⱯxXx:04:Instanz(X:=(x=..)) ⇒ Tautologie !} \\ \text{19} & \quad \Box \; \forall x (\ X \ x \Rightarrow\; (x = x)) & \text{ } & \text{:10:18:[(:10:↔F) → (:18:↔W)] :: „ex falso sequitur etiam verum“ :[RK]} \\ \text{20} & \quad \ P\ X \wedge \;\Box \; \forall x (\ X \ x \Rightarrow\; (x = x)) & \ & \text{:01:19:[Konjunktion] } \\ \text{21} & \quad \ (P\ X \wedge \;\Box \; \forall x (\ X \ x \Rightarrow\; (x = x))) \Rightarrow \ P (x = .. ) & \ & \text{(A2):Instanz(Y:=(x=..))} \\ \text{22} & \quad \ P (\ x = .. )\ & \ & \text{:20:21:[Modus ponens]}\\ \text{23} & \quad \text{ ├ }\; (\neg P (\ x = .. )\ \wedge \ P (\ x = .. )) \Leftrightarrow\ F & \ & \text{:17:22:[Konjunktion] ⇒ Kontradiktion !}\\ \text{24} & \quad \neg \Diamond \; \exists x \ X \ x \Rightarrow (\neg P (\ x = .. )\ \wedge \ P (\ x = .. )) & \ & \text{:05:23:[├A├B╞ A→B] :: ''KONDITIONALER BEWEIS''}\\ \text{25} & \quad \neg\neg \Diamond \; \exists x \ X \ x & \ & \text{:24:23:[Modus tollendo tollens] :: [A→B,¬B ├ ¬A]}\\ \text{26} & \quad \text{ ├ }\; \Diamond \; \exists x \ X \ x & \ & \text{:25:NEG; bzw. :05:23:[├¬A→F ╞ A] :: ''INDIREKTER BEWEIS''}\\ \text{27} & \quad \ P\ X \;\Longrightarrow\; \Diamond \; \exists x \ X \ x \ & \ & \text{:01:26:[├A├B ╞ A→B]} \\ \text{(Theorem 1)} & \;\text{„Positive Eigenschaften sind konsistent“} & \ & \Longleftarrow\; \text{was zu beweisen war !} \\ \text{28} & \quad \ P\ G \;\Longrightarrow\; \Diamond \; \exists x \ G \ x \ & \ & \text{:27:Instanz(X:=G) } \\ \text{29} & \quad \Diamond \; \exists x \ G \ x \ & \ & \text{(A3):28:[Modus ponens]} \\ \text{(Korollar 1)} & \;\text{„Das Dasein GOTTES ist definitiv denkbar“} & \ & \text{„Es ist widerspruchsfrei möglich, dass es GOTT gibt“} \\ \end{align}</math> </small> |} Anmerkung-1 ''':''' <span style="color:#00B000">(Der GÖDEL-Term <span style="color:#4C58FF">— ‚'''PX'''‘ —</span>, im Axiom-2 ist an sich überflüssig, da dieser hier als Prämisse :01: ohnehin ,angenommen‘ wird. Der Beweisgang kommt mit Axiom-2 auch ohne diesen GÖDEL-Term zum selben Ergebnis, und verkürzt sich damit sogar um zwei Schritte ''':''' Zeile 13 und Zeile 20 sind dann unnötig.)</span> Der Beweisgang geht mit Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, als Kalkül-Ressource, prinzipiell von der Existenz eines GOTTES aus. Mit der Prämisse :01: <span style="color:#00B000">(hier im 1. Beweisgang)</span> postuliert GÖDEL vorerst allgemein, dass es <span style="color:#FF6000">»''Vollkommenheit, d.h. positive Eigenschaften''«</span> in unserer Welt gibt ''':''' <span style="color:#4C58FF">— ‚'''PX'''‘ —</span>, ohne im Kalkül zu definieren, was darunter zu verstehen ist. Definiert wird dann <span style="color:#00B000">(im 2. Beweisgang)</span>, was eine <span style="color:#FF6000">»''wesentliche Eigenschaft''«</span> ist ''':''' <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>‘ —</span>, <span style="color:#00B000">(im Sinne von ,Transzendentalia‘)</span>; und mit Hilfe dieser Eigenschaft definiert GÖDEL <span style="color:#00B000">(im 3. Beweisgang)</span>, was eine <span style="color:#FF6000">»''notwendige Existenz''«</span> ist ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>‘ —</span>, die er <span style="color:#00B000">(im selben Beweisgang)</span> axiomatisch mit den <span style="color:#FF6000">»''positiven Eigenschaften in GOTT''«</span> gleich setzt ''':''' Axiom-5 ''':''' <span style="color:#4C58FF"> —‚'''PE'''<sub>not</sub>‘ —</span>. Erst im 2. Beweisgang wird mit Term :13:, nach einer <span style="font-family: Times;"><big>,Reductio ad absurdum‘</big></span>, definitiv bewiesen <span style="color:#00B000">( ╞ )</span>, dass die, von GÖDEL, hier postulierten, <span style="color:#00B000">(allgemeinen)</span>, positiven Eigenschaften, <span style="color:#4C58FF">— ‚'''PX'''‘ —</span>, tatsächlich auch in GOTT <span style="color:#FF6000">»''positive Eigenschaften''«</span>, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, sind; <span style="color:#00B000">(das sind die ultimativen ,Transzendentalia‘ in GOTT)</span>. Jetzt aber muss vorerst der ,Wunsch‘, bzw. die LEIBNIZ-Frage beantwortet werden ''':''' Ob, mit <span style="color:#FF6000">»''mathematischer Evidenz''«</span>, <span style="color:#FF6000">»''GOTT''«</span> ,möglich‘ ist, der, nach traditioneller Auffassung, <span style="color:#FF6000">»''ein Wesen von äußerster Größe und Vollkommenheit'' <span style="color:#00B000">[ ist ]</span>, ''das alle Grade derselben in sich schließt''«</span>, <span style="color:#00B000">(nach LEIBNIZ; was GÖDEL mit Definition-1 ,abbildet‘)</span>. Wenn man also beweisen will, dass die Existenz eines solchen ''<span style="color:#FF6000">»GOTTES«</span>'' ,möglich‘ sein soll, dann muss man beweisen, dass dieses postulierte System der <span style="color:#FF6000">»''positiven Eigenschaften in GOTT''«</span> möglich und formal ,widerspruchsfrei‘ ist. Das Ergebnis des 1. Beweisganges, das ,Theorem-1‘, <span style="color:#00B000">(,Erster Satz‘)</span>, fasst A. FUHRMANN zusammen als ''':''' <span style="color:#FF6000">»''Positive Eigenschaften sind konsistent''«</span>. Wenn sie nicht konsistent wären, käme es zu unlösbaren Widersprüchen, <span style="color:#00B000">(Term :24:)</span>. Term :27: ,besagt‘ ''':''' <span style="color:#FF6000">»''Es ist definitiv, d.h. ohne Widerspruch möglich, dass es positive Eigenschaften gibt''«</span>; denn die Behauptung, es sei nicht möglich, dass es positive Eigenschaften, <span style="color:#00B000">(das sind die ,Transzendentalia‘)</span>, in unserer Welt gibt, führt zu einem Widerspruch, und ist daher falsch und ,unlogisch’. Einmal Axiom-1 und zweimal Axiom-2, <span style="color:#00B000">(das die Gleichwertigkeit aller positiven Eigenschaften nachdrücklich klarstellt)</span>, sichern hier die Konsistenz <span style="color:#FF6000">»''aller positiven Eigenschaften in der Welt'', <span style="color:#00B000">[ die ,Transzendentalien‘ ]</span>, ''und damit auch die, die in GOTT sind''«</span>. <span style="color:#00B000">(Der 2. Beweisgang bestätigt, dass es in GOTT tatsächlich positive Eigenschaften gibt.)</span> Die ,Gleichwertigkeit‘ aller Transzendentalia, <span style="color:#00B000">(ihre ,Äquivalenz‘)</span>, ist formal-syntaktisch daran erkennbar, dass die beiden Eigenschafts-Variablen <span style="color:#4C58FF">— ‚'''X'''‘ —</span> und <span style="color:#4C58FF">— ‚'''Y'''‘ —</span> im Axiom-2 für beliebige, unterschiedliche ,positive‘ Eigenschaften gegenseitig austauschbar, <span style="color:#00B000">(,konvertierbar‘)</span>, sind. Das heißt, dass beliebige, unterschiedliche ,positive‘ Eigenschaften, für die diese Variablen stehen, sich paarweise, wechselseitig ,implizieren‘, einschließen, und damit notwendig voneinander abhängen, d.h. koinzident ,eins‘ sind, konvertierbar, und somit gleichwertig sind; entsprechend dem Theorem von den Transzendentalia. Zu Term :29:, dem Korollar zu Theorem-1, notiert GÖDEL am 10. Feb. 1970, <span style="color:#00B000">(übersetzt von Joachim BROMAND)</span> ''':''' <span style="color:#FF6000">»''◇∃xG(x) besagt, dass das System aller positiver Eigenschaften kompatibel ist'',</span> <span style="color:#00B000">[ d.h. miteinander verträglich, weil ohne Widersprüche ].</span> <span style="color:#FF6000">''Dies ist ,wahr‘ auf Grund von Axiom-2,'' <span style="color:#00B000">[ weil alle positiven Eigenschaften, d.h. die Transzendentalien, koinzident gleichwertig und konvertierbar sind ]</span>.«</span> Darum ist es definitiv ,möglich‘, dass es diesen GOTT gibt, der <span style="color:#FF6000">»''alle Grade der Vollkommenheit in sich schließt''«</span> und <span style="color:#FF6000">»''über dem ,Größeres‘ nicht mehr gedacht werden kann''«</span>, und, in weiterer Konsequenz, ist der GOTT-Glaube deshalb ,notwendig‘ widerspruchsfrei und sinnvoll, nach Theorem-3 ''':''' <u>Wenn</u> es ,ohne Widerspruch‘ ''<span style="color:#FF6000">»möglich, bzw. denkbar«</span>'' ist, dass es ''<span style="color:#FF6000">»GOTT«</span>'' gibt, <u>dann</u> folgt daraus ''<span style="color:#FF6000">»notwendig«</span>'' ''':''' es ist auch ,widerspruchsfrei‘, wenn man als Voraussetzung ,annimmt‘, dass es ''<span style="color:#FF6000">»GOTT wirklich, für jede mögliche Welt«</span>'' gibt ''':''' Term :11: im 3. Beweisgang. Der Wenn-Satz ist hier mit Korollar-1 bewiesen; der Dann-Satz wird im 3. Beweisgang bewiesen <span style="color:#00B000">( ╞ )</span>, d.i. die Widerspruchsfreiheit und Sinnhaftigkeit des GOTT-Glaubens. Die ontologische ,Identität‘, d.h. die ,Gleichsetzung‘, bzw. die ,Koinzidenz‘ von Strukturen, die in der Endlichkeit für uns verschieden sind, jedoch in dem unbegrenzt Unendlichen, GOTT, paarweise, perspektivisch in eins zusammenfallen, wie ,Sein‘ und ,Wesen‘, wie ,Ursache‘ und ,Wirkung‘ usw., und auch die Äquivalenz und Austauschbarkeit der Transzendentalien, haben im GÖDEL-Kalkül die logisch-syntaktische Form einer, aus sich, ,modal‘ notwendigen Implikation zwischen zwei verschiedenen, gegenseitig austauschbaren Eigenschafts-Variablen ''':''' <span style="color:#4C58FF">— ‚'''□∀x(Xx→Yx)'''‘ —</span>. Dieses Term-Element stellt formal-syntaktisch die Gleichwertigkeit, <span style="color:#00B000">(Äquivalenz)</span>, bzw. die paarweise Koinzidenz aller positiven Eigenschaften und Zuordnungen in GOTT dar; sowohl hier im Axiom-2, als auch in der Definition-2 über die ,Wesenseigenschaften‘, im 2. Beweisgang, mit jeweils verschiedenen, frei umbenennbaren, Individuum-Variablen. Dieses Term-Element ,gilt‘ allgemein jedoch nur für positive Eigenschaften, alias ,Transzendentalia‘, und wird sofort <span style="color:#FF6000">„modal falsch“</span>, wenn für <span style="color:#4C58FF">— ‚'''X'''‘ —</span>, oder <span style="color:#4C58FF">— ‚'''Y'''‘ —</span>, Eigenschaften eingesetzt werden, die, — von Natur aus —, weder positiv noch negativ sind, wie z. B. ,rot‘ oder ,schwer‘. Die wechselseitige Austauschbarkeit der noch ,unbestimmten‘ Eigenschafts-Variablen, für beliebige positive Eigenschaften, ist formal äquivalent zur freien Umbenennung der noch ,unbestimmten‘ Individuum-Variablen ''':''' <span style="color:#4C58FF">[ FUB(x:=y) ]</span>. Der formale, gegenseitige, allgemeine Austausch der positiven Eigenschafts-Variablen, bzw. die formale Gleichsetzung beliebiger positiver Eigenschaften, kann, auf Grund der Äquivalenz aller Vollkommenheiten, bzw. ,Transzendentalia‘, auch dann noch durchgeführt werden, wenn eine, von zwei Eigenschafts-Variablen, durch eine Definition oder eine Schlussfolgerung ,bestimmt‘ worden ist, und dadurch zu einer positiven Eigenschafts-Konstante, d.h. zu einer ,bestimmten‘, positiven Eigenschaft geworden ist. Das ist z. B. bei einer instanziierenden Substitution der Fall ''':''' <span style="color:#4C58FF">[ Instanz(X:=..) ]</span>. Das ist eine spezifische Eigenheit der GÖDEL-Axiomatik, weil alle relevanten, positiven Eigenschaften und Zuordnungen in GOTT, als <span style="color:#FF6000">„ultimative Transzendentalia“</span>, immer auch miteinander kompatibel sind. Mit dem Term-Element ''':''' <span style="color:#4C58FF">— ‚'''□∀x(Xx→Yx)'''‘ —</span>, wird formal die <span style="color:#FF6000">„Koinzidenz“</span> aller ,Transzententalia‘ in der Welt, und auch der ,Zusammenfall‘ aller Gegensätze in GOTT, abgebildet. Da die Variable <span style="color:#4C58FF">‚'''x'''‘</span> für GOTT steht, <span style="color:#4C58FF">‚'''G'''‘</span>, <span style="color:#00B000">(im Korollar-1)</span>, ist die Eigenschaft ''':''' ''<span style="color:#FF6000">„nicht mit x identisch zu sein“</span>'' ''':''' <span style="color:#4C58FF">(¬x=..)</span>, d.h. das <span style="color:#FF6000">„Ungleichsein“</span>, das <span style="color:#FF6000">„Anderssein“</span> GOTTES, <span style="color:#00B000">(Prämisse :03:)</span>, die entscheidende Voraussetzung und Norm für jeden Diskurs über GOTT ''':''' um der <span style="color:#FF6000">„Unvergleichlichkeit“</span> GOTTES gerecht zu werden, darf GOTT niemals mit etwas aus der ''<span style="color:#FF6000">»zufälligen Struktur der Welt«</span>'' verglichen, d.h. gleich gesetzt werden. Der Term :18: <span style="color:#4C58FF">(x=x) ↔ W</span> erinnert an die Selbstbezeichnung des GOTTES-JHWH in Exodus 3,14 ''':''' <span style="color:#CC66FF">»''Ich bin der ‚Ich-Bin‘''«</span>. <span style="color:#00B000">(In der mystischen Tradition, im ''<span style="font-family: Times;"><big>‚Dialog über die Vorsehung‘</big></span>'', dem Hauptwerk der Heiligen KATHARINA von Siena, Mystikerin und Lehrerin der Kirche, sagt GOTT-VATER zur KATHARINA ''':''' <span style="color:#FF6000">»''ICH BIN der IST'', <span style="color:#00B000">[ aus mir selbst ]</span>, ''du bist, die nicht ist'', <span style="color:#00B000">[ aus dir selbst ]</span>.«</span> Das ist eine wichtige, deutende Ergänzung, und die authentische <span style="color:#4C58FF">,theologische‘</span> Interpretation dieser Exodus Text-Stelle. Das ist er Grund für die <span style="color:#FF6000">„Unvergleichlichkeit“</span> GOTTES.)</span> Zum Term :03: notiert A. FUHRMANN ''':''' <span style="color:#FF6000">»</span> ''Die Notation'' <span style="color:#4C58FF">(¬x=..)</span> ''für die Eigenschaft ''':''' <span style="color:#FF6000">„nicht mit x identisch zu sein“</span>'', <span style="color:#00B000">[ d.h. <span style="color:#FF6000">„Ungleichheit“, „Anderssein“</span>, bzw. die Notation <span style="color:#4C58FF">(x=..)</span> für den Existenzmodus-Perfektion ''':''' <span style="color:#FF6000">„Gleichheit“, „Idendität“</span> ]</span>, ''ist suggestiv und informell und ersetzt hier einen formal korrekten Abstraktionsausdruck wie'' <span style="color:#4C58FF">λy.(¬x=y)</span>, <span style="color:#00B000">[ bzw. <span style="color:#4C58FF">λy.(x=y)</span> ]</span>. ''Für die formal korrektere Notation bedarf es der zusätzlichen Vereinbarung, dass der Ausdruck'' <span style="color:#4C58FF">λy.(¬x=y)</span> ''gleichbedeutend sei mit dem Ausdruck'' <span style="color:#4C58FF">¬λy.(x=y)</span>. ''Diese Vereinbarung ist harmlos, da wir aufgrund der Regel der λ–Konversion'' ''':''' <span style="color:#4C58FF">λy.Xy.x ↔ Xx</span>, <span style="color:#00B000">[ mit der <span style="color:#4C58FF">Instanz(X:=(¬x=..))</span> ]</span>, ''so schließen dürfen'' ''':''' <span style="color:#4C58FF">λy.(¬x=y).x ↔ ¬x=x ↔ <span style="color:#00B000">¬(x=x)</span> ↔ ¬λy.(x=y).x</span> .<span style="color:#FF6000">«</span> <ref>A. FUHRMANN a.a.O. Seite 7, Anmerkung 4 (von mir korrigiert und ergänzt)</ref> In der Kalkül-Zeile 29 wird das Möglichkeits-Korollar-1 durch einen <span style="color:#4C58FF">[ Modus ponens ]</span> mit Axiom-3 von der Kalkül-Prämisse-Term :01: ,abgekoppelt‘, d.h. es ist nicht mehr vom Term :01: <span style="color:#4C58FF">— ‚'''PX'''‘ —</span> logisch abhängig. Das Möglichkeits-Korollar-1 behält jedoch die bewiesene Widerspruchsfreiheit von Theorem-1, und ist damit nur mehr von Axiom-1 und Axiom-2 abhängig, was für das Theorem-ANSELMS am Schluss entscheidend ist. Erklärung zu Term :05: Das Ergebnis einer Logik-Operation zwischen Prämissen ist ,regulär‘ <span style="color:#00B000">(├ )</span> den Prämissen zuzurechnen. Das Modale-Prinzip KRIPKE-Γ-Ɐx, <span style="color:#4C58FF">['''RK''']</span>, in Worten ''':''' <span style="color:#FF6000">»''Wenn mit ,modaler‘ Notwendigkeit'' <span style="color:#00B000">( □ )</span>, ''für alle'' <span style="color:#4C58FF">‚'''x'''‘</span> ''die Aussage'' <span style="color:#4C58FF">‚'''A'''‘</span> ''gilt, und daraus logisch folgt, dass mit ,modaler‘ Notwendigkeit'' <span style="color:#00B000">( □ )</span>, ''für alle'' <span style="color:#4C58FF">‚'''x'''‘</span> ''auch die Aussage'' <span style="color:#4C58FF">‚'''B'''‘</span> ''gilt, dann ist in einem Kalkül regulär'' <span style="color:#00B000">( ├ )</span> ''ableitbar'' ''':''' ''es ist wahr, dass mit ,modaler‘ Notwendigkeit'' <span style="color:#00B000">( □ )</span>, ''für alle'' <span style="color:#4C58FF">‚'''x'''‘</span> ''aus der Aussage'' <span style="color:#4C58FF">‚'''A'''‘</span> ''die Aussage'' <span style="color:#4C58FF">‚'''B'''‘</span> ''logisch folgt''«</span>. Der Term <span style="color:#4C58FF">— ‚'''□∀xXx'''‘ —</span> steht formal-syndaktisch, allgemein für ,Transzendentalia‘, und ist für alle ,Nicht-Transzendentalia‘ <span style="color:#FF6000">„modal falsch“</span>. ====<div class="center"><span style="color:#660066">2. Beweisgang</span></div>==== {|class="wikitable" |- ! <div class="center"><span style="color:#660066">GÖDELS ontologischer Beweis für Theorem 2, (,Basisbeweis‘)</span></div> |- ! <span style="color:#00B000">''Terme der erweiterten Prädikatenlogik zweiter Stufe____________„Benennungen“ und durchgeführte Logik-Operationen''</span> |- | <small> <math>\begin{align} \text{(Axiom 1.2)} & \quad \neg P\ X \;\Longrightarrow\;\ P\neg X\ & \ & \text{„Wenn X nicht positiv ist, dann ist die Negation ¬X positiv“} \\ \text{(Axiom 3)} & \quad \ P\ G \ & \ & \text{„Göttlichkeit, GOTT-Sein, ist eine pos. Eigenschaft“ ↔ „GOTT ist perfekt“} \\ \text{(Axiom 4)} & \quad \ P\ X \;\Longrightarrow\; \Box \; \ P\ X \ & \ & \text{„Positive Eigenschaften sind notwendig aus sich positiv“} \\ \text{(Definition 1)} &\quad \ G\ x \;\Longleftrightarrow\; \forall X(\ P \ X \Longrightarrow \ X \ x)\ & \ & \text{„x ist genau dann GOTT, wenn x alle positiven Eigenschaften hat“} \\ \text{(Definition 2)} & \quad \ X_{ess}\ x \;\Leftrightarrow X\ x \wedge \forall Y \left(\ Y\ x \Rightarrow \Box \; \forall y (\ X\ y \Rightarrow \ Y\ y)\right) & \ & \text{„X ist genau dann eine wesentliche Eigenschaft von x, wenn x sie hat, und} \\ \text{ } & \quad & \text { } & \;\;\text{alle anderen Eigenschaften Y von x notwendig aus dieser Eigenschaft X folgen“} \\ \text{[RM]} &\quad \ A \;\Longrightarrow\;\ B\; \text{ ├ }\;\Box \; A \Longrightarrow\;\Box\; \ B\ & \ & \text{( :: Modales Prinzip)} \\ \text{(Theorem 2)} &\quad \ G\ x \;\Longleftrightarrow\; \ G_{ess}\ x \ & \ & \text{(,G‘ :: „Göttlichkeit“ ↔ „GOTT“ ↔ „Dasein GOTTES“)} \\ \text{ } &\;\text{„Das Wesen GOTTES ist sein Dasein“} & \ & \Longleftarrow\; \text{was zu beweisen ist !} \\ \text{01} &\quad \ G\ x \ & \ & \text{ AE: „Angenommen, x steht für den GOTT der Christen“} \\ \text{02} &\quad \ Y\ x \ & \ & \text{ AE: „Angenommen, GOTT hat die Eigenschaften Y“} \\ \text{03} &\quad \neg P\ Y & \ & \text{ AE: „Angenommen, die Y in GOTT sind nicht positiv“} \\ \text{04} &\quad \neg P \ Y \Rightarrow \ P \neg Y\ & \ &\text{(A1.2):Instanz(X:=Y) :: (Substitution für Eigenschaften) } \\ \text{05} &\quad \ P \neg Y \ & \ & \text {:03:04:[Modus ponens] :: [A, A → B├ B] } \\ \text{06} &\quad \forall X(\ P \ X \Rightarrow \ X \ x)\ & \ &\text{(D1):01:[Modus ponens] :: (logische Schlussregel)} \\ \text{07} &\quad \ P \ X \Rightarrow \ X \ x\ & \ &\text{:06:[ⱯXA(X) ├ A(X)] :: (Quantorenregel)} \\ \text{08} &\quad \ P \neg Y \Rightarrow \neg Y \ x\ & \ &\text{:07:Instanz(X:=¬Y)} \\ \text{09} &\quad \neg Y \ x\ & \ &\text{:05:08:[Modus ponens]} \\ \text{10} &\quad \text{ ├ }\; (Y\ x \wedge \neg Y \ x) \;\Leftrightarrow\;\ F\ & \ & \text{:02:09:[Konjunktion] ⇒ Kontradiktion !} \\ \text{11} &\quad \neg P\ Y \; \Rightarrow \; (Y\ x \wedge \neg Y \ x )\ & \ &\text{:03:10:[├A├B ╞ A → B] :: ''KONDITIONALER BEWEIS''} \\ \text{12} &\quad \neg\neg P\ Y \ & \ &\text{:11:10:[Modus tollendo tollens] :: [A → B,¬B├ ¬A]} \\ \text{13} &\quad \text{ ├ }\; P\ Y \ & \ &\text{:12:NEG; bzw. :03:10:[├¬A→F ╞ A] :: ''INDIREKTER BEWEIS'' :AE:} \\ \text{14} &\quad \ P\ Y \;\Rightarrow\;\Box \; \ P\ Y \ & \ & \text{(A4):Instanz(X:=Y)} \\ \text{15} &\quad \Box \; \ P\ Y \ & \ & \text{:13:14:[Modus ponens]} \\ \text{16} &\quad \ G \ y \Rightarrow \ Y \ y\ & \ &\text{:01:02:[├A├B ╞ A→B]:FUB(x:=y)} \\ \text{17} &\quad \text{ ├ }\; \forall y(\ G \ y \Rightarrow \ Y \ y)\ & \ &\text{:16:[G(y) ├ ⱯyG(y)]} \\ \text{18} &\quad \Box \; \ P\ Y \;\Rightarrow\; \Box \; \forall y(\ G \ y \Rightarrow \ Y \ y)\ & \ &\text{:13:17:[├A├B ╞ A→B]:[RM]} \\ \text{19} &\quad \text{ ├ }\; \Box \; \forall y(\ G \ y \Rightarrow \ Y \ y)\ & \ &\text{:15:18:[Modus ponens]} \\ \text{20} &\quad \ Y\ x \;\Rightarrow\; \Box \; \forall y(\ G \ y \Rightarrow \ Y \ y)\ & \ &\text{:02:19:[├A├B ╞ A→B]} \\ \text{21} &\quad \ (Y\ x \;\Rightarrow\; \Box \; \forall y(\ G \ y \Rightarrow \ Y \ y)) \wedge \ G \ x & \ &\text{:20:01:[Konjunktion] :: [A, B├ A ∧ B]} \\ \text{22} &\quad \ (Y\ x \;\Rightarrow\; \Box \; \forall y(\ X \ y \Rightarrow \ Y \ y)) \wedge \ X \ x\;\Leftrightarrow\; X_{ess}\ x \ & \ &\text{(D2):KOMM(↔):KOMM(∧):[ⱯYA(Y) ├ A(Y)] wegen :13:} \\ \text{23} &\quad \ (Y\ x \;\Rightarrow\; \Box \; \forall y(\ G \ y \Rightarrow \ Y \ y)) \wedge \ G \ x\;\Leftrightarrow\; G_{ess}\ x \ & \ &\text{:22:Instanz(X:=G)} \\ \text{24} & \quad \text{ ├ }\; G_{ess}\ x \ & \ &\text{:21:23:[Modus ponens]:AE: wegen :30:} \\ \text{25} &\quad \ G\ x \;\Rightarrow\; \ G_{ess}\ x \ & \ & \text{:01:24:[├A├B ╞ A→B] :: Theorem 2.1} \\ \text{26} &\quad \forall X(\ P \ X \Rightarrow \ X \ x)\ & \ &\text{(D1):01:[Modus ponens] } \\ \text{27} &\quad \ P \ X \Rightarrow \ X \ x\ & \ &\text{:26:[ⱯXA(X) ├ A(X)]} \\ \text{28} &\quad \ P \ G \Rightarrow \ G \ x\ & \ &\text{:27:Instanz(X:=G)} \\ \text{29} &\quad \text{ ├ }\; G \ x\ & \ &\text{(A3):28:[Modus ponens]} \\ \text{30} &\quad \ G_{ess}\ x \;\Rightarrow \ G \ x\ & \ &\text{:24:29:[├A├B ╞ A→B] :: Theorem 2.2 } \\ \text{31} &\quad \ G\ x \;\Longleftrightarrow\; \ G_{ess}\ x \ & \ & \text{:25:30:[Konjunktion]:BIKONDITIONAL :: [(A→B) ∧ (B→A) ↔ (A↔B)] } \\ \text{(Theorem 2)} &\; \text{„Dasein, GOTT-Sein, ist das Wesen GOTTES“} & \ & \Longleftarrow\; \text{was zu beweisen war ! } \\ \text{32} &\quad \text{ ├ }\; \Box \; \forall y(\ G \ y \Rightarrow \ (x = y))\ & \ & \text{:19:Instanz(Y:=(x=..))} \\ \text{33} &\quad \ G\ x \;\Rightarrow\; \Box \; \forall y(\ G \ y \Rightarrow \ (x = y))\ & \ & \text{:01:32:[├A├B ╞ A→B]} \\ \text{(Korollar 2)} & \;\text{„Es gibt notwendig höchstens einen GOTT“} & \ & \text{„Wenn es GOTT gibt, dann gibt es für jede mögliche Welt nur einen GOTT“} \\ \end{align}</math> </small> |} <span style="color:#00B000"><small>(In den Kalkül-Zeilen 16, 18, 31 mussten zwei-, und in Zeile 22 drei Kalkül-Schritte, d.h. Logik-Operationen in eine Zeile zusammengezogen werden, weil der Parser dieser speziellen Mathematik-Funktion in Wikibooks jedes Mal wegen Puffer-Überlauf abstürzt, wenn zu den bestehenden Zeilen noch eine neue Zeile, oder ein Text-Element, zusätzlich eingefügt wird. Das vermindert etwas die Transparenz des Kalküls.)</small></span> Anmerkung-2 ''':''' <span style="color:#00B000">(Dieser Beweisgang kommt auch ohne das ,unbestimmte‘ Konjunkt <span style="color:#4C58FF"> — ‚'''Xx'''‘ —</span> in der Definition-2 zum gleichen Ergebnis, und wird dadurch um eine Zeile verkürzt ''':''' Zeile 21 entfällt, und <span style="color:#4C58FF">[ KOMM(∧) ]</span> ist dann unnötig. Dieses Konjunkt wird hier ebenfalls schon in der Kalkül-Prämisse :01: <span style="color:#4C58FF"> — ‚'''Gx'''‘ —</span>, als ,Annahme‘ gesetzt, vorentschieden und ,bestimmt‘ mit der <span style="color:#4C58FF">[ Instanz(X:=G) ]</span>. Es war also logisch korrekt, dass GÖDEL, in seiner Notiz vom 10. Feb. 1970 zum ontologischen Beweis, dieses Konjunkt weggelassen hat, was ihm von Kommentatoren als ein Flüchtigkeitsfehler angerechnet worden war. Der gesamte 2. Beweisgang bewegt sich im Geltungsbereich der Prämisse Term :01:, d.h. ist in jeder Zeile von der Annahme abhängig ''':''' die Variable <span style="color:#4C58FF"> — ‚'''x'''‘ —</span> steht für den GOTT der Christen. In der Kalkül-Zeile 33 wird mit Korollar-2 diese Abhängigkeit, für den Term :32:, explizit dargestellt.)</span> Der Beweisgang geht mit der Prämisse :01: prinzipiell, als ,modal‘ freigewählte Voraussetzung, von der Existenz eines GOTTES aus. Im 1. Beweisgang wurde bewiesen, dass die von GÖDEL ,postulierten‘ <span style="color:#FF6000">»''allgemeinen positiven Eigenschaften, Vollkommenheiten, Perfektionen'', <span style="color:#00B000">[ die sog. ,Transzendentalien‘ ]</span> ''konsistent''«</span>, d.i. widerspruchsfrei sind. Hier, in diesem Beweisgang wird nun die Prämisse vom 1. Beweisgang, <span style="color:#4C58FF"> — ‚'''PX'''‘ —</span>, im Bezug auf GOTT hinterfragt ''':''' Gibt es auch in GOTT so Etwas, wie <span style="color:#FF6000">»''Vollkommenheit, Positives, Perfektes''«</span> '''?''' Die ,Annahme‘ jedoch, dass es <span style="color:#FF6000">»''in GOTT keine Vollkommenheit, nichts Positives, nichts Perfektes''«</span> <span style="color:#00B000">(keine Transzendentalien)</span> gibt, <span style="color:#00B000">(Prämisse Term :03:)</span>,<span style="color:#4C58FF"> — ‚'''¬PY'''‘ —</span>, d.h. dass die <span style="color:#00B000">(wesentlichen)</span> Eigenschaften in GOTT keine <span style="color:#FF6000">„Vollkommenheiten“</span> seien, führt aber zu einem unlösbaren Widerspruch, <span style="color:#00B000">(Term :10:)</span>. Mit Term :13:, als 1. Hauptergebnis, ist damit, — als ,neue‘ Prämisse, <span style="color:#00B000">(ersetzt Term :03:)</span> —, definitiv ,bewiesen‘ <span style="color:#00B000">( ╞ , d.h. es ist ,wahr‘ und ,widerspruchsfrei‘)</span>, dass alle Eigenschaften, die hier mit <span style="color:#4C58FF">— ‚'''Y'''‘ —</span> symbolisiert werden, <span style="color:#FF6000">„positive Eigenschaften“</span>, d.h. <span style="color:#FF6000">„Perfektionen“</span> sind, von denen das Kalkül ,annimmt‘, <span style="color:#00B000">(Prämissen Term :01:, Term :02: und speziell Term :16:)</span>, dass der GOTT der Christen sie besitzt. Alle ,Wesenseigenschaften‘ in GOTT ''':''' <span style="color:#4C58FF">— ‚'''Y'''<sub>ess</sub>‘ —</span>, die durch den Term :13:, <span style="color:#4C58FF">— ‚'''PY'''‘ —, </span> dargestellt werden, sind somit <span style="color:#FF6000">„Vollkommenheiten“</span> ''':''' <span style="color:#4C58FF">— ‚'''P'''‘ —</span><span style="color:#00B000">, (,ultimative Transzendentalien‘, aller ,Grade‘)</span>. Damit ist definitiv ‚bestätigt‘, <span style="color:#00B000">( ╞ , es ist ,wahr‘ und ,widerspruchsfrei‘)</span>, was mit Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, schon ‚angenommen‘ worden ist ''':''' <span style="color:#FF6000">»''GOTT ist perfekt; er hat alle positiven Eigenschaften''«</span>; und auch Definition-1 ist damit ,verifiziert‘ ''':''' <span style="color:#FF6000">»''GOTT ist genau deswegen GOTT, weil er, als GOTT, positive Eigenschaften aller Grade in sich schließt''«</span>; entsprechend dem Quelltext bei LEIBNIZ ''':''' <span style="color:#FF6000">»''GOTT ist ein Wesen von äußerster Größe und Vollkommenheit, das alle Grade derselben in sich schließt''«</span>. Immer vorausgesetzt, <span style="color:#00B000">(,angenommen‘)</span>, man glaubt an GOTT ''':''' <span style="color:#00B000">(Term :01:)</span>. <span style="color:#00B000">(Der ,Schlüsselbegriff‘ <span style="color:#4C58FF">— ‚'''P'''‘ —</span> ist der ,Schlüssel‘ zur Erkenntnis, dass GOTT ,notwendig‘, sowohl ,wesentlich‘ für uns, als auch an sich ,grundlos‘, immer schon ,da‘ ist.)</span> Hier, <span style="color:#00B000">(im 2. Beweisgang)</span>, hat Axiom-1, <span style="color:#00B000">(im Term :04:)</span>, sicher gestellt, dass die Eigenschaften in GOTT, <span style="color:#00B000">(Definition-1; Term :06:)</span>, tatsächlich <span style="color:#FF6000">„ultimativ positiv, perfekt und vollkommen“</span> sind ''':''' <span style="color:#4C58FF">— ‚'''PY'''‘ —</span>. Das GÖDEL-Axiom-1 bezieht seine ,Potenz‘ aus dem Prinzip vom ,auszuschließenden‘ Widerspruch ''':''' eine Eigenschaft kann nicht zugleich ,positiv‘ und ,nicht positiv‘ sein '''!''' Formal lässt sich das 2. Hauptergebnis, Theorem-2 ''':''' <span style="color:#4C58FF">— ‚'''Gx'''↔'''G'''<sub>ess</sub>'''x'''‘ — </span> ''':''' schon aus Term :23: in diesem Beweisgang mit der <span style="color:#4C58FF">[ Vereinfachung ] :: [ A∧B ├ B ]</span> ohne Weiteres ,regulär‘ ableiten, — analog zu den Vorgehensweisen bei A. FUHRMANN und G.J. WIRSCHING. <span style="color:#00B000">(Beide Aussagen dieser ,Konjunktion‘ sind ,gleichwertig‘, daher partizipiert das Theorem-2 auch am Ergebnis der Widerspruchsfreiheit von Term :13:, <span style="color:#4C58FF">— ‚'''PY'''‘ —</span>, dem 1. Hauptergebnis.)</span> Der hier gewählte, etwas längere Weg zum Ergebnis, soll die innere Struktur und Abhängigkeit der Ergebnisse von bestimmten Voraussetzungen offen legen, und ihren ,Zweck‘ verdeutlichen. Die beiden Hauptergebnisse im Basisbeweis gehen vom vorgefundenen und traditionell vorgegebenen Begriff von ,GOTT‘ aus, <span style="color:#00B000">(Term :06:, Term :16: und Term :26:)</span>. Das ,bewiesene‘ <span style="color:#00B000">( ╞ )</span> 1. Hauptergebnis, hier im 2. Beweisgang, Term :13: <span style="color:#4C58FF">— ‚'''PY'''‘ —</span> ''':''' <span style="color:#FF6000">»''die Eigenschaften in GOTT sind vollkommen, d.h. sind die ultimativen Transzendentalia''«</span>, rechtfertigt, bzw. verifiziert sowohl Axiom-3 ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>, als auch die Definition-1 ''':''' <span style="color:#4C58FF">— ‚'''Gx↔∀X(PX→Xx)'''‘ —</span>, für die Annahme ''':''' den ,GOTT der Christen‘, der deswegen GOTT ist, weil er alle Grade der Vollkommenheit in sich schließt. Und das ebenfalls ,bewiesene‘ <span style="color:#00B000">( ╞ )</span> 2. Hauptergebnis, hier im selben Beweisgang, Theorem-2 ''':''' <span style="color:#4C58FF">— ‚'''Gx'''↔'''G'''<sub>ess</sub>'''x'''‘ —</span> ''':''' <span style="color:#FF6000">»''das Wesen GOTTES ist sein eigenes Sein''«</span>, rechtfertigt, bzw. verifiziert sowohl Axiom-5 ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span>, als auch die Definition-3 ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x ↔ ∀X(X'''<sub>ess</sub>'''x →□∃yXy)'''‘ —</span>, für die Wesenseigenschaft ''':''' ,notwendige Existenz‘, und widerlegt den Einwand KANTS, für den Spezialfall ''':''' <span style="color:#4C58FF">— ‚'''x'''‘ —</span> steht für ,GOTT‘. Zwei Axiome und zwei Definitionen von GOTT und seinen Vollkommenheiten werden durch die Ergebnisse im Basisbeweis des GÖDEL-Kalküls in unserer realen Welt als ,wahr‘, <span style="color:#00B000">(genauer als ,widerspruchsfrei‘)</span>, und, — im Rahmen des christlichen Glaubens —, als ,annehmbar‘ bestätigt. <span style="color:#00B000">(Anmerkung zu Term :24: ''':''' eine Prämisse ist regulär-,modal‘ immer ,frei‘ wählbar.)</span> Zusammengefasst heißt das ''':''' die ,strittige‘ Begründung der ,methodologischen‘ Prämisse des GÖDEL-Kalküls ''':''' <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span> ''':''' <span style="color:#00B000">(Prämisse, Term :01:)</span>, weil <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span> ''':''' <span style="color:#00B000">(Korollar-1)</span> ''':''' <span style="color:#FF6000">»''Das <span style="color:#4C58FF">‚'''x'''‘</span> steht für den GOTT der Christen, für den es ohne Widerspruch denkbar ist, dass es ihn gibt''«</span>, <span style="color:#00B000">(ANSELMS Prinzip, trotz der ,Warnung‘ KANTS)</span>, ist ,wahr‘ und für uns ,annehmbar, denn es ist auch, auf Grund der Ergebnisse des 2. Beweisganges, in unserer realen Welt ,wahr‘ und ,annehmbar‘, weil schon als ,widerspruchsfrei‘ verifiziert ''':''' <span style="color:#FF6000">»''Der GOTT der Christen'' <span style="color:#00B000">(Term :01:)</span> '',existiert‘ für uns ,notwendig‘''«</span> ''':''' <span style="color:#4C58FF"> — ‚'''Gx→E'''<sub>not</sub>'''x'''‘ —</span>, <span style="color:#00B000">(d.i. das ,regulär‘-mögliche Korollar sowohl im 2. als auch im 3. Beweisgang)</span>, denn dieser GOTT ist aus sich ,vollkommen‘ ''':''' <span style="color:#4C58FF"> — ‚'''PG'''‘ —</span>, und zu seiner ,Vollkommenheit‘ <span style="color:#4C58FF">— ‚'''P'''‘ —</span> gehört auch notwendig sein ,Existieren‘ ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span>. <span style="color:#00B000">(Jeder dieser Terme ist im-, und durch den 2. Beweisgang, im Geltungsbereich der Prämisse Term :01:, als ,wahr‘ und ,annehmbar‘ bewiesen, bzw. verifiziert.)</span> Das ist der ,Kern‘ des ontologischen Arguments, und somit ist auch diese ,strittige‘ Begründung der Prämisse des GÖDEL-Kalküls mit den Maßstäben der modernen Logik <span style="color:#FF6000">»''durchaus vereinbar''«</span>, d.h. sie ist logisch ,richtig‘ und, im Kontext des christlichen Glaubens, vernünftig. Die Annahme des Gegenteils zu dieser Prämisse ''':''' <span style="color:#4C58FF">— ‚'''¬◇∃xGx'''‘ —</span> ''':''' <span style="color:#FF6000">»''Es ist undenkbar, dass es diesen GOTT gibt''«</span>, führt jedoch, unabhängig von jeder Glaubensüberzeugung, zu einem Widerspruch — ist unlogisch und daher ,falsch‘, <span style="color:#00B000">(siehe Anhang ''':''' Widerlegung)</span>. Die Behauptung einer ,formalen Unentscheidbarkeit‘ zu den Annahmen über die Existenz GOTTES, ob oder nicht, <span style="color:#00B000">(d.h. ein ,methodologischer‘ Agnostizismus)</span>, ist gegen jede ,Logik‘; und ist auch ,falsch‘, d.h. der Agnostizismus ist einfach nur ein ,logischer Irrtum‘. Denn aus dem, im Kalkül abgeleiteten, Widerspruch aus der einen Annahme, und damit ihrer Unrichtigkeit, folgt notwendig die Richtigkeit der gegenteiligen Annahme. Damit ist eine klare Entscheidung getroffen. Das Modale-Prinzip <span style="color:#4C58FF">['''RM''']</span> in Worten ''':''' <span style="color:#FF6000">»''Wenn es wahr ist, dass aus'' <span style="color:#4C58FF"> — ‚'''A'''‘ —</span> ''ein'' <span style="color:#4C58FF"> — ‚'''B'''‘ —</span> ''logisch folgt, dann ist in einem Kalkül regulär'' <span style="color:#00B000">( ├ )</span> ''ableitbar, dass, wenn'' <span style="color:#4C58FF"> — ‚'''A'''‘ —</span> '',modal‘ notwendig'' <span style="color:#00B000">( □ )</span> ''ist, auch'' <span style="color:#4C58FF"> — ‚'''B'''‘ —</span> '',modal‘ notwendig'' <span style="color:#00B000">( □ )</span> ''ist''«</span>. <span style="color:#00B000">(Das <span style="color:#4C58FF"> — ‚'''A'''‘ —</span> in Term :18: ist als ,modal notwendig‘ durch den Term :15: verifiziert '''!''' )</span> Mit dem 2. Hauptergebnis, Theorem-2 ''':''' <span style="color:#FF6000">»'',Dasein‘ ist das ,Wesen‘ GOTTES''«</span>, folgt die GÖDEL-Axiomatik der philosophisch-<span style="color:#4C58FF">,theologischen‘</span> Tradition der ,Rede von GOTT‘ seit ARISTOTELES, und schließt sich damit formal-syntaktisch zugleich auch der religiösen Überzeugung der Christen an, die glauben, dass GOTT, als unser Vater, aus Liebe, in seinem Sohn, JESUS CHRISTUS, für uns immer schon <span style="color:#FF6000">»''da''«</span> ist, <span style="color:#00B000">(der Sohn ist koinzident ,eins‘ mit GOTT, dem Vater und dem GEIST)</span>, wirksam in und durch seine <span style="color:#4C58F0">„Kirche“</span>, im HEILIGEN GEIST, bis ans Ende der Zeit. Das ist das, <span style="color:#FF6000">»''was''«</span> GOTT eigentlich für uns ausmacht, — die Selbstmitteilung seines unergründlichen Wesens in den Sakramenten der <span style="color:#4C58F0">„Kirche“</span> ''':''' <span style="font-family: Times;"><big>‘אֶֽהְיֶ֖ה אֲשֶׁ֣ר אֶֽהְיֶ֑ה‚</big></span> <span style="color:#00B000">| ‚eh'jeh asher eh'jeh‘ |</span> <span style="color:#CC66FF">»''Ich bin da für euch und für immer, als der ich ''<span style="color:#00B000">[ immer schon gewesen ]</span> ''bin''«</span>; <span style="color:#00B000">(d.i. das <span style="color:#4C58FF">,theologisch‘</span>-exegetische ,Axiom‘ der Christen, und eine <span style="color:#4C58FF">,theologisch‘</span> korrekte Explikation der ,regulären‘ Kalkül-Prämisse Term :01: <span style="color:#4C58FF"> — ‚'''Gx'''‘ —</span>, jeweils im 2. und 3. Beweisgang)</span>. Das heißt aber nicht, dass der Autor des Kalküls sich mit diesem Glauben identifiziert hat, <span style="color:#00B000">(,hat‘ er auch nicht)</span>, oder dass der Leser des ontologischen Beweises von Kurt GÖDEL sich damit identifizieren muss, wenn er dessen <span style="color:#FF6000">»''mathematische Evidenz''«</span> anerkennt. Zur erweiterten <span style="color:#4C58FF">„theologischen“</span> Explikation der Kalkül-Prämisse ''':''' Die <span style="color:#4C58F0">„Kirche“</span> ist das ,Meisterwerk‘ GOTTES ''':''' In ihr ist es GOTT gelungen, etwas Göttliches und Unzerstörbares in unsere korrupte Welt einzupflanzen ''':''' <span style="color:#4C58FF"> — ‚'''Gx→E'''<sub>not</sub>'''x'''‘ —</span> ''':''' <span style="color:#FF6000">»''Etwas Göttliches existiert notwendig, d.h. ,unzerstörbar‘ in unserer Welt''«</span>. Sie ist, durch die Menschwerdung des GOTTES Sohnes, JESUS CHRISTUS, dessen <span style="color:#4C58F0">„Leib“</span> die <span style="color:#4C58F0">„Kirche“</span> ist, untrennbar mit Menschen verbunden, die schon, von allem Anfang an, und jetzt immer noch, durch die Sünde korrumpiert sind. Mit ihr will und wird GOTT unsere Welt und die Menschheit, bis ans Ende der Zeit, von der Sünde und von deren Konsequenz, dem <span style="color:#00B000">(ewigen)</span> Tod <span style="color:#4C58FF">„erlösen“</span>, <span style="color:#00B000">(jedoch nicht ohne die Zustimmung des Menschen)</span>. Mit dieser Explikation wird die Tragweite des ontologischen Arguments ANSELMS, und damit auch die <span style="color:#4C58FF">„theologische“</span> Relevanz der GÖDEL-Axiomatik erkennbar. Immer vorausgesetzt, <span style="color:#00B000">(,angenommen‘)</span>, man glaubt an GOTT, <span style="color:#00B000">(Term :01:)</span>. ====<div class="center"><span style="color:#660066">3. Beweisgang</span></div>==== {|class="wikitable" |- ! <div class="center"><span style="color:#660066">GÖDELS ontologischer Beweis für Theorem 3, (ANSELMS Theorem)</span></div> |- ! <span style="color:#00B000">''Terme der erweiterten Prädikatenlogik zweiter Stufe___________________„Benennungen“ und durchgeführte Logik-Operationen''</span> |- | <small> <math>\begin{align} \text{(Axiom 5)} & \quad P\ E_{not}\; \ & \text { } & \text{„Notwendige Existenz ist eine positive Eigenschaft“} \\ \text{ } & \text{( :: Das ist nur dann wahr, wenn ,Dasein‘ und ,Wesen‘ } & \ & \text{( :: dagegen KANT : ,Existenz‘ ist keine ,Eigenschaft‘,} \\ \text{ } & \;\;\text{in eins zusammenfallen ! ARISTOTELES : Theorem-2)}\ & \ & \;\;\text{,Sein‘ ist für alles, was existiert, kein ,reales Prädikat‘ ! )} \\ \text{(Definition 1)} &\quad \ G\ x \;\Longleftrightarrow\; \forall X(\ P \ X \Longrightarrow \ X \ x)\ & \ & \text{„x ist genau dann GOTT, wenn x alle positiven Eigenschaften hat“} \\ \text{(Definition 3)} & \quad \ E_{not}\ x \;\Longleftrightarrow\;\ \forall X \left(\ X_{ess}\ x \Longrightarrow \Box \; \exists y \ X\ y \right) & \ & \text{„Notwendige Existenz ist genau dann eine Eigenschaft von x, wenn} \\ \text{ } & \quad & \ & \;\;\text{alle wesentl. Eigenschaften von x notwendig instanziiert sind“} \\ \text{(Korollar 1)} & \quad \Diamond \; \exists x \ G \ x \ & \ & \text{„Es ist widespruchsfrei möglich, dass es GOTT gibt“} \\ \text{(Theorem 2)} &\quad \ G\ x \;\Longleftrightarrow\; \ G_{ess}\ x \ & \ &\text{„Dasein, GOTT-Sein, Existenz ist das Wesen, die Essenz GOTTES“} \\ \text{(Korollar 2)} &\quad \ G\ x \;\Longrightarrow\; \Box \; \forall y(\ G \ y \Longrightarrow \ (x = y))\ & \ &\text{„Wenn es GOTT gibt, dann gibt es notwendig nur einen GOTT“} \\ \text{(Theorem 3)} & \quad \Diamond \; \exists x \ G \ x \;\Longrightarrow\; \Box \; \exists x \ G \ x \ & \ & \text{( :: ANSELMS Prinzip)} \\ \text{ } & \text{„Weil es widerspruchsfrei möglich ist, dass es GOTT gibt,} & \ & \Longleftarrow\; \text{was zu beweisen ist !} \\ \text{ } & \;\;\text{ist der Glaube, dass es GOTT wirklich gibt, widerspruchsfrei“} \\ \text{01} & \quad \ G \ x\ & \ & \text{ AE: „Angenommen, x steht für den GOTT der Christen“} \\ \text{02} & \quad \forall X(\ P \ X \Rightarrow \ X \ x)\ & \ & \text{(D1):01:[Modus ponens] :: (logische Schlussregel)} \\ \text{03} & \quad \ P \ X \Rightarrow \ X \ x\ & \ & \text{:02:[ⱯXA(X) ├ A(X)] :: (Quantorenregel)} \\ \text{04} & \quad \ P \ E_{not}\;\Rightarrow \ E_{not}\ x\ & \ & \text{:03:Instanz(X:= Enot) :: (Substitution für Eigenschaften)} \\ \text{05} & \quad \ E_{not}\ x\ & \ & \text{(A5):04:[Modus ponens] :: [A, A → B├ B]} \\ \text{06} & \quad \forall X \left(\ X_{ess}\ x \Rightarrow \Box \; \exists y \ X\ y \right) & \ & \text{(D3):05:[Modus ponens]} \\ \text{07} & \quad \ X_{ess}\ x \Rightarrow \Box \; \exists y \ X\ y & \ & \text{:06:[ⱯXA(X) ├ A(X)]} \\ \text{08} & \quad \ G_{ess}\ x \Rightarrow \Box \; \exists y \ G\ y & \ & \text{:07:Instanz(X:= G)} \\ \text{09} & \quad \ G_{ess}\ x \ & \ & \text{(Th2):01:[Modus ponens]} \\ \text{10} & \quad \text{ ├ }\;\Box \; \exists x \ G\ x & \ & \text{:08:09:[Modus ponens]:FUB(y:=x) :: (Freie-Um-Benennung der Var.)} \\ \text{ } & \text{„Es gibt GOTT wirklich, für jede mögliche Welt“} & \ & \Longleftarrow\; \text{1. Hauptergebnis !} \\ \text{11} & \quad \;\Diamond \exists x \ G \ x \;\Longrightarrow \; \Box \; \exists x \ G\ x & \ & \text{(K1):10:[├A├B ╞ A→B] :: ''KONDITIONALER BEWEIS''} \\ \text{(Theorem 3)} & \;\text{„Weil es widerspruchsfrei möglich ist, dass es GOTT gibt,} & \ & \Longleftarrow\; \text{was zu beweisen war ! 2. Hauptergebnis ! } \\ \text{ } & \;\;\text{ist der Glaube, dass es GOTT wirklich gibt, widerspruchsfrei“} \\ \text{12} & \quad \;\Box \; \forall y(\ G \ y \Longrightarrow \ (x = y))\ & \ &\text{(K2):01:[Modus ponens]} \\ \text{13} & \quad \;\Box \; (\exists x \ G\ x \wedge \; \forall y(\ G \ y \Longrightarrow \ (x = y)))\ & \ & \text{:10:12:[Konjunktion]:DIST(□∧)} \\ \text{(Korollar 3)} & \;\text{„Es gibt notwendig genau nur einen GOTT“} & \ & \text{„Es gibt für jede mögliche Welt nur den GOTT der Christen“} \\ \end{align}</math> </small> |} Anmerkung-3 ''':''' <span style="color:#00B000">(Ein Theorem und zwei Korollare, aus den beiden vorhergehenden Beweisgängen, werden hier, im 3. Beweisgang, zu ,Axiomen‘, die das Theorem-ANSELMS und sein Korollar mit-verifizieren und bestätigen.)</span> Dieser Beweisgang ist das Ziel aller Bemühungen. Hier wird der sog. ,ontologische Gottesbeweis‘ nach ANSELM von Canterbury formal-syntaktisch dargestellt und als logisch nachvollziehbar von GÖDEL bestätigt. Damit hat er aber auch klar gestellt, dass der ontologische Beweis ANSELMS kein Beweis für die ,Existenz‘ des GOTTES der Bibel sein kann, bzw. sein ,will‘ ''':''' Denn mit der Prämisse, <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, <span style="color:#00B000">(Term :01:, wie auch schon im ,Basisbeweis‘, und ausformuliert hier in Term :02:, mit der Definition für GOTT)</span>, wird mit dem traditionellen, abendländischen ,GOTT-Glauben‘, der ,glaubt‘, dass der Gott der Christen tatsächlich existiert, — methodologisch als ,Annahme‘ —, der Beweisgang schon regulär und explizit eröffnet, aus dem sich dann, logisch korrekt, mit Hilfe der GÖDEL-Axiome und Definitionen, das ,Theorem ANSELMS‘ ergibt; <span style="color:#00B000">(hier jedoch, mit Günther J. WIRSCHING, ohne den Umweg bei GÖDEL über den <span style="color:#4C58FF">[ Modus Barbara ] :: [ A → B, B → C ├ A → C ] </span>, mit dem modalen Axiom-BECKER ''':''' <span style="color:#4C58FF">— ‚'''◇□A→□A'''‘ —</span>, als <span style="color:#4C58FF">‚B → C‘</span> im kategorischen Syllogismus, das André FUHRMANN recherchiert hat)</span>. GÖDEL verwendet zur Darstellung des sog. ,ontologischen Gottesbeweises‘ nach ANSELM die Struktur eines modal-logischen Kalküls. Ein modal-logisches Kalkül ist ein genau geregeltes Schema, in dem bei bestimmten ,Annahmen‘ <span style="color:#00B000">(Axiome, Definitionen, Prämissen)</span> etwas anderes als das Vorausgesetzte, auf Grund des Vorausgesetzten mit Notwendigkeit folgt. Entsprechend der ,Modalität‘ der sechs ,modal‘ notwendigen, d.h. transzendentalen Voraussetzungen, hier, für den 3. Beweisgang, die in den <span style="color:#00B000">(und durch die)</span> beiden vorhergehenden Beweisgängen schon als <span style="color:#FF6000">„modal wahr“</span>, bzw. als logisch annehmbar, verifiziert und/oder ,bewiesen‘ wurden, sind auch die beiden ,Schlusssätze‘ <span style="color:#00B000">(Theorem-3 und Korollar-3)</span> <span style="color:#FF6000">„modal wahr“</span>, bzw. logisch annehmbar '''!''' Die Wahl der Prämisse :01: dagegen ist nicht ,modal‘ notwendig, sondern beruht auf einer freien Entscheidung, und damit ist auch ihre Interpretation eine freie Entscheidung, mit der Voraussetzung, dass man das Kalkül mit Theoremen aus der <span style="color:#4C58FF">„christlichen Theologie“</span> evaluieren, und damit interpretieren will. Dazu berechtigt die Genese des Kalküls. Der Glaube an den GOTT der Christen ''':''' <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, beruht immer auf einer freien Entscheidung. Das Kalkül, als solches, unabhängig von jeder Interpretation seiner Syntax, ist genau dann ,allgemein‘ <span style="color:#FF6000">»''mathematisch evident''«</span>, d.h. ,ist allgemein gültig‘, wenn es gültigen Logik-Regeln folgt. Die Bestimmung seiner Syntax jedoch, d.h. seine Interpretation, unterliegt hermeneutischen Kriterien, die nicht von Logik-Regeln abhängen, wie hier ''':''' <span style="color:#FF6000">»''(unabhängig von der zufälligen Struktur der Welt). Nur dann sind die Axiome wahr''«</span>, wie GÖDEL selbst hinzufügt. Mit der, — von GÖDEL eingeforderten —, ‚Unabhängigkeit‘ der Kalkül-Axiome von der zufälligen Struktur der Welt, wird implizit für das Kalkül auch festgelegt, dass <span style="color:#FF6000">„GOTT“</span> ‚unabhängig‘ von der zufälligen <span style="color:#00B000">(Raum-Zeit-)</span>Struktur unserer vergänglichen Welt, und daher ,zeitlos-ewig‘ ist, <span style="color:#00B000">(was <span style="color:#4C58FF">„theologisch“</span> korrekt ist)</span>, begründet durch Definition-1 und Axiom-3. Aus der zeitlosen Ewigkeit GOTTES folgt, dass GOTT, <span style="color:#FF6000">„unverursacht“ <span style="color:#00B000">|</span> „grundlos“</span>, für uns immer schon ‚da‘ ist, denn bei Zeitlosigkeit gibt es keinen ,zeitlichen‘ und damit auch keinen ,ontologischen‘ Unterschied zwischen ‚Ursache‘ und ‚Wirkung‘. Beides ist dann koinzident ,eins‘ ''':''' wie ,Wesen‘ und ,Dasein‘ in GOTT, bzw. wie ,Begriff‘ und ,Sein‘, oder ,Möglichkeit‘ und ,Wirklichkeit‘. <span style="color:#00B000">(Man vergleiche damit auch die ,postulierte‘ Einheit von ,Erkenntnisobjekt‘ und ,Erkenntnissubjekt‘ im ,Gott‘ des ARISTOTELES ''':''' im <span style="color:#FF6000">»<span style="color:#00B000">[ selbstbewussten ]</span> ''Erkennen seiner Erkenntnis''<span style="color:#00B000">[-Tätigkeit ]</span>«<span style="color:#00B000"> | </span>„<span style="font-family: Times;"><big>νοήσεως νόησις</big></span>“<span style="color:#00B000"> | </span>„noêseôs noêsis“</span> <small>(‚<span style="font-family: Times;"><big>''Metaphysik''</big></span>‘ XII 9, 1074b34)</small>, im Vollzug seiner Funktion als ,unbewegtes Bewegungsprinzip‘, als <span style="color:#FF6000">„<span style="font-family: Times;"><big>πρῶτον κινοῦν ἀκίνητον</big></span>“<span style="color:#00B000"> | </span>„prôton kinoûn akinêton“</span> der Welt, das alles Übrige <span style="color:#FF6000">»''wie ein Geliebtes''«<span style="color:#00B000"> | <span style="color:#FF6000">„<span style="font-family: Times;"><big>ὡς ἐρώμενον</big></span>“</span> | <span style="color:#FF6000">„hôs erômenon“</span> bewegt; d.h. christlich ''':''' <span style="color:#FF6000">»''aus Liebe''«</span> ,entstehen‘ lässt.)</span> Anmerkung-4 ''':''' Das <span style="color:#00B000">(im 2. Beweisgang)</span> schon bewiesene Theorem-2, d.i. die Koinzidenz von <span style="color:#FF6000">„Sein“</span> und <span style="color:#FF6000">„Wesen“</span> in GOTT, <span style="color:#00B000">(‚Existenz‘</span> und <span style="color:#00B000">‚Essenz‘)</span>, rechtfertigt sowohl Axiom-5 als auch die Definition-3, und widerlegt den Einwand KANTS. Somit ist deren Setzung <span style="color:#00B000">(hier, im 3. Beweisgang)</span> korrekt, und durch das Theorem-2 schon vorbestimmt und bestätigt, d.h. beide sind <span style="color:#FF6000">„modal wahr“</span> und ,logisch‘ annehmbar, da sie durch die Gültigkeit von Theorem-2 ,verifiziert‘ worden sind. Damit wird klar erkennbar, dass das Theorem-2 tatsächlich die Basis des GÖDEL-Kalküls ist. Und wenn damit Axiom-5 im GÖDEL-Kalkül ‚gerechtfertigt‘ ist, dann ist auch, <span style="color:#00B000">(als Voraussetzung dafür)</span>, das Axiom-4 ''':''' <span style="color:#4C58FF">— ‚'''PX → □PX'''‘ — ''':''' </span> <span style="color:#FF6000">»''Positive Eigenschaften'', <span style="color:#00B000">[ ,Transzendentalia‘ ]</span>, ''sind notwendig aus sich'', <span style="color:#00B000">[ von Natur aus ]</span>, ''positiv''«</span>, im 2. Beweisgang erklärbar, in dem die ‚Positivität‘, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, einer Eigenschaft schon als ‚notwendig‘, <span style="color:#4C58FF">— '''□''' —</span>, charakterisiert worden ist, äquivalent zu Axiom-5 ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span>, in dem die ‚Notwendigkeit‘, <span style="color:#4C58FF">— <sub>not</sub> —</span>, <span style="color:#00B000">(der Existenz <span style="color:#4C58FF">— ‚'''E'''‘ —</span>)</span>, dann als ‚positive‘ Eigenschaft, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, ‚bestimmt‘ wird; <span style="color:#00B000">(unter der speziellen Voraussetzung, dass <span style="color:#FF6000">„Existieren“</span> definitiv als eine <span style="color:#FF6000">„Wesenseigenschaft“</span> in GOTT ,instanziiert‘ ist; vgl. Definition-3. Eine ,bestimmte‘ Eigenschaft ist genau dann ,instanziiert‘, wenn sie an einem Träger real ,existiert‘. Definition-3 ''':''' <span style="color:#4C58FF">— ‚'''E'''<sub>not</sub>'''x ↔ ∀X(X'''<sub>ess</sub>'''x →□∃yXy)'''‘ —</span>, besagt, dass die, von GÖDEL ,postulierte‘, und im Basis-Theorem-2 verifizierte, <span style="color:#FF6000">„notwendige Existenz“</span> zu den ,ultimativen‘ Transzendentalia in GOTT gehört. Genauer ''':''' Sie ist die ,Summe‘ aller Transzendentalia.)</span> Zum Axiom-4, <span style="color:#00B000">(bzw. zum Term :14:, im 2. Beweisgang)</span>, erklärt GÖDEL in seinen Notizen zum Kalkül ''':''' <span style="color:#FF6000">»''da es'' <span style="color:#00B000">[ das Notwendigsein, <span style="color:#4C58FF">— '''□''' —</span> ]</span> ''aus der Natur der'' <span style="color:#00B000">[ positiven ]</span> ''Eigenschaft folgt'', <span style="color:#00B000">[ deren Positivität, im selben Beweisgang, mit Term :13: vorher schon ,bewiesen‘ (╞ ) worden ist ]</span>«</span>. Die GÖDEL-Erklärung zum Axiom-4 entspricht der Modal-Regel zur sog. ,Nezessisierung‘ in der KRIPKE-Logik nach GÖDEL. <span style="color:#4C58FF">[ Nezessisierungsregel ] '''::''' [ ├ A →├ □ A ]</span> ''':''' <span style="color:#FF6000">»''Angenommen'', <span style="color:#4C58FF">‚'''A'''‘</span> ''ist in einem Kalkül eine Prämisse, oder darin regulär'' <span style="color:#4C58FF">(├ )</span> ''abgeleitet, dann folgt in diesem Kalkül regulär'' <span style="color:#4C58FF">(├ )</span>, ''dass dieses'' <span style="color:#4C58FF">‚'''A'''‘</span> ''auch ,modal‘ notwendig'' <span style="color:#4C58FF">— ,□‘ —</span> ''ist''«</span>. GÖDEL hat jedoch diese modale Notwendigkeit nur in der ,Natur‘ der positiven Eigenschaften, alias ,Transzendentalia‘, gesehen, und mit den Aussagen im Axiom-4 expliziert ''':''' <span style="color:#4C58FF">— ‚'''PX → □PX'''‘ —</span> ''':''' <span style="color:#FF6000">»''unabhängig von der zufälligen Struktur der Welt, nur dann sind die Axiome wahr''«</span>. Ob dieselbe modale Notwendigkeit auch auf Aussagen über Eigenschaften, wie ,rot‘ oder ,schwer‘, die weder positiv noch negativ sind, zutrifft, ist nicht erwiesen. Hier kann nur von modaler ,Kontingenz‘ gesprochen werden, die universal, alles Seiende innerhalb der <span style="color:#FF6000">»''zufälligen Struktur der Welt''«</span> betrifft. Somit sind die Aussagen <span style="color:#4C58FF">— ‚'''A'''‘ —</span> in der GÖDEL-Regel, nur auf Aussagen über ,positive‘ Eigenschaften eingeschränkt, und nicht allgemein gültig. Die <span style="color:#4C58FF">[ Nezessisierungsregel ]</span> ist nur für <span style="color:#FF6000">„Transzendentalia“ „modal wahr“</span>, und für ,Nicht-Transzendentalia‘ immer <span style="color:#FF6000">„modal falsch“</span>. Der unbegrenzt Unendliche, GOTT, — im Glauben der Christen —, ist deswegen ,notwendig für uns da‘ ''':''' <span style="color:#4C58FF">— ‚'''Gx→E'''<sub>not</sub>'''x'''‘ —</span>, weil er als GOTT ,vollkommen‘, ,perfekt‘ und absolut ,positiv‘, d.h. absolut ,gut allein‘ ist, ohne jede Negativität ''':''' <span style="color:#4C58FF">— ‚'''PG'''‘ —</span>; <span style="color:#00B000">(was auch schon im 2. Beweisgang mit Term :13: verifiziert wurde)</span>. Und wenn GOTT ,vollkommen‘, ,perfekt‘, ,positiv‘, und absolut ,gut‘ ist, dann ist er das auch ,notwendig aus sich‘ ''':''' <span style="color:#4C58FF">— ‚'''PG → □PG'''‘ — ::</span> <span style="color:#00B000">(als Zusatz-Korollar im 2. Beweisgang mit Axiom-4 und der <span style="color:#4C58FF">[ Instanz(X:=G) ]</span>)</span>, d.h. ,aus seinem Wesen‘. Das ist gerade das, ,was‘ GOTT als GOTT ausmacht ''':''' sein ,Wesen‘, bzw. seine <span style="color:#FF6000">„Natur“</span>. Zusammen mit der Definition-1 für GOTT, <span style="color:#00B000">(und der Definition-2 ''':''' Alle Wesenseigenschaften hängen notwendig gleichwertig aus sich zusammen)</span>, ist dieses, aus der <span style="color:#FF6000">„Natur“</span> GOTTES sich ergebende, ‚Notwendigsein‘, <span style="color:#4C58FF">— '''□''' —</span>, aller ‚positiven‘ Eigenschaften im Axiom-4, und ihr logischer Zusammenhang, d.i. die Koinzidenz aller ,Vollkommenheiten‘ und ,Zuschreibungen‘ im Unendlichen, GOTT, ihr ,Zusammenfallen in eins‘, die entscheidende Voraussetzung, aus der sich dann für GÖDEL <span style="color:#00B000">(im 2. Beweisgang)</span> auch der logische Zusammenhang, bzw. die ontologische Identität, <span style="color:#00B000">(die Koinzidenz)</span>, von <span style="color:#FF6000">„Dasein“</span> und <span style="color:#FF6000">„Wesen“</span> in GOTT, im Basis-Theorem-2 ''':''' <span style="color:#4C58FF"> — ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ —</span> mit Notwendigkeit ergibt. Damit hat GÖDEL ein altes <span style="color:#4C58FF">„theologisches“</span> Theorem der Vergessenheit entrissen. Das Theorem-2 ist dann, in weiterer Folge, die ,modal‘ notwendige, d.h. die transzendentale Voraussetzung auch für den Konsequenz-Teil im Theorem ANSELMS, <span style="color:#00B000">(Term :09: hier im 3. Beweisgang)</span>. <span style="color:#FF6000">„Positive Eigenschaften“<span style="color:#00B000"> | </span>„Vollkommenheiten“</span> sind ,immer‘ auch <span style="color:#FF6000">„notwendige Eigenschaften“</span>, daher ''':''' <span style="color:#4C58FF"> — ‚'''PE'''<sub>not</sub>‘ —</span>. Das ,Dasein‘, die <span style="color:#FF6000">„Existenz“</span> ist ,immer‘ etwas <span style="color:#FF6000">„Positives“</span>, speziell in GOTT, dem Schöpfer jeder ,Existenz‘, bzw. allen ,Seins‘. Axiom-4 begründet im GÖDEL-Kalkül das Basis-Theorem-2, <span style="color:#00B000">(wie auch das Korollar-3 von der exklusiven Einzigartigkeit GOTTES)</span>, und ,verankert‘ diese Theoreme damit zugleich in der <span style="color:#4C58FF">,theologisch‘</span>-philosophischen Tradition der ,Rede von GOTT‘ bei ARISTOTELES, — AVICENNA, — ANSELM, — DESCARTES, — LEIBNIZ, — HEGEL, — und bei GÖDEL mit äußerster ,logischer‘ Klarheit. Anmerkung-5 ''':''' Der ‚Schlüsselbegriff‘ in diesem Kalkül ''':''' <span style="color:#FF6000">„positive Eigenschaft“</span>, bzw. <span style="color:#FF6000">„Vollkommenheit“<span style="color:#00B000"> | </span>„Perfektion“</span>, <span style="color:#4C58FF">— ‚'''P'''‘ —</span>, dominiert alle Axiome des GÖDEL-Kalküls, jedoch ohne inhaltlich genauer ‚bestimmt‘ worden zu sein. Für <span style="color:#4C58FF">— ‚'''P'''‘ — </span> gibt es keine explizite Definition '''!''' <span style="color:#00B000">(Das Theorem-1 ''':''' <span style="color:#4C58FF">— ‚'''PX→◇∃xXx'''‘ —</span>, besagt nur, dass die ,postulierten‘, positiven Eigenschaften, die <span style="color:#FF6000">„Transzendentalia“</span>, formal miteinander verträglich, d.h. ‚widerspruchsfrei‘ sind, wegen Axiom-2. Axiom-2 ''':''' <span style="color:#4C58FF">— ‚'''PX ∧ □∀x(Xx→Yx)→PY'''‘ —</span>, besagt, dass positive Eigenschaften ,gleichwertig‘ sind, d.h. gleich ,wahr‘ sind, weil sie ,notwendig‘, <span style="color:#4C58FF">— '''□''' —</span>, aus sich, alle paarweise mit- und voneinander ,impliziert‘ sind, sich gegenseitig ,einschließen‘, und damit eine Einheit bilden, d.h. in GOTT ,eins‘ sind. Axiom-2 ist somit zugleich eine ,indirekte‘ Definition für ,positive‘ Eigenschaften ''':''' <span style="color:#4C58FF">— ‚'''P'''‘ —</span>. Definition-2 ''':''' <span style="color:#4C58FF">— ‚'''X'''<sub>ess</sub>'''x ↔ Xx ∧ ∀Y(Yx→ □∀y(Xy→Yy))'''‘ —</span>, besagt ''':''' Weil die ,gleichwertigen‘, positiven Eigenschaften sich gegenseitig implizieren, und damit notwendig von einander abhängen, d.h. koinzident in GOTT ,eins‘ sind, — wenn <span style="color:#4C58FF">‚'''x'''‘</span> für GOTT steht —, dann sind sie somit auch die ,wesentlichen‘ Eigenschaften, die <span style="color:#FF6000">„ultimativen Transzendentalia“</span>, in GOTT, der, wesentlich und exklusiv, notwendig ,Einer‘ ist. Die Definition-2 ist nur dann <span style="color:#FF6000">„modal wahr“</span>, wenn ihre Eigenschafts-Variablen, <span style="color:#4C58FF">— ‚'''X'''‘ —</span> und <span style="color:#4C58FF">— ‚'''Y'''‘ —</span>, mit positive Eigenschaften, d.h. mit <span style="color:#FF6000">„Transzendentalien“</span>, besetzt werden. Diese Definition ist jedoch sofort <span style="color:#FF6000">„modal falsch“</span>, wenn ihre Variablen mit nicht-positive Eigenschaften, wie ,rot‘ oder ,schwer‘ belegt werden, die nicht ,transzendental‘-allgemein gültig sind. Fußnote zu Definition-2 in der GÖDEL-Notiz ''':''' <span style="color:#FF6000">»''any two essences of x are nec. equivalent''«</span>. Die paarweise, notwendige Äquivalenz von zwei beliebigen Wesenseigenschaften der Individuum-Variable <span style="color:#4C58FF">‚'''x'''‘</span>, wird hier, spezifisch für GOTT, d.h. wenn <span style="color:#4C58FF">‚'''x'''‘</span> für GOTT, dem ,Einen‘, steht, zur <span style="color:#FF6000">„Koinzidenz“</span>, — zum paarweise ,Zusammenfallen aller Gegensätze in Einem‘ —, dem inneren Zusammenhang aller seiner <span style="color:#FF6000">„ultimativen“</span> Vollkommenheiten, d.h. aller <span style="color:#FF6000">„Transzendentalia“</span> und Zuschreibungen, in dem unbegrenzt Unendlichen, GOTT, den schon der Philosoph und Kardinal NIKOLAUS von Cues als <span style="font-family: Times;"><big>,coincidentia oppositorum‘</big></span> verstanden hat.)</span> In den entscheidenden ‚Schlusssätzen‘ des Kalküls ist der ‚Schlüsselbegriff‘ verschwunden. Hier ist nur mehr von GOTT, <span style="color:#4C58FF">— ‚'''G'''‘ —</span>, die Rede ''':''' Korollar-1, <span style="color:#FF6000">»''Es ist definitiv denkbar, dass es GOTT gibt''«</span>, Theorem-2, <span style="color:#FF6000">»''Dasein, GOTT-Sein, Göttlichkeit ist das Wesen GOTTES''«</span>, Theorem-3, <span style="color:#FF6000">»''Weil GOTT definitiv denkbar, d.h. widerspruchsfrei möglich ist, darum ist auch der Glaube an GOTT widerspruchsfrei, logisch richtig und mathematisch evident, der annimmt, dass es GOTT, mit Notwendigkeit, wirklich gibt''«</span>, <span style="color:#00B000">(nach ANSELM von Canterbury, und was spezifisch das <span style="color:#FF6000">»</span>''Privilegium der Gottheit allein''<span style="color:#FF6000">«</span> ist, nach LEIBNIZ)</span>, und Korollar-3, <span style="color:#FF6000">»''Es gibt notwendig aus sich, d.i. unverursacht, nur einen GOTT''«</span>. Das GÖDEL-Kalkül ist zu diesen Erkenntnissen gekommen, ohne die Eigenschaften, bzw. die ‚Vollkommenheiten‘ GOTTES, d.h. wer oder was GOTT ‚an sich‘ selbst ist, genauer bestimmen zu müssen, <span style="color:#00B000">(was ,für uns‘ ohnehin ,unmöglich‘ ist)</span>; außer im Theorem-2, in dem das <span style="color:#FF6000">„Dasein“</span> GOTTES als die ‚für uns‘ bestimmende und wichtigste <span style="color:#FF6000">„Wesenseigenschaft“</span> in GOTT erkannt worden ist, — immer vorausgesetzt <span style="color:#00B000">(,angenommen‘)</span>, man ‚glaubt‘ an den zeitlos-ewigen GOTT ''':''' <span style="color:#00B000">(Term :01:)</span>. Der GOTT des GÖDEL-Kalküls ist nicht mehr der an Raum und Zeit gebundene ‚Gott‘ des ARISTOTELES, sondern der von Raum und Zeit <span style="color:#FF6000">»''unabhängige''«</span> GOTT der Bibel bei ANSELM und bei LEIBNIZ. Das GÖDEL-Kalkül, <span style="color:#00B000">(wie ja auch der sog. ‚ontologische Gottesbeweis‘ ANSELMS)</span>, kann jedoch, — bei aller ‚Coolness‘ —, keinen GOTT-Glauben ‚erzeugen‘, sondern setzt vielmehr die Existenz GOTTES notwendig als gegeben schon voraus. Das Kalkül des Logiker GÖDEL beweist aber, dass der traditionelle ‚GOTT-Glaube‘, <span style="color:#FF6000">»''die theologische Weltanschauung''«</span>, mit den Maßstäben der modernen Logik <span style="color:#FF6000">»''durchaus vereinbar''«</span>, d.h. logisch ,richtig‘ und <span style="color:#FF6000">»''mathematisch evident''«</span> ist, weil der ‚Nicht-GOTT-Glaube‘, <span style="color:#FF6000">»''die atheistische Weltanschauung''«</span>, im Möglichkeitsbeweis notwendig zu unlösbaren Widersprüchen führt, und somit logisch ,falsch‘ ist. <span style="color:#00B000">(Die ,Logik‘ hat aber, — bekanntlich —, bei allen wichtigen, persönlichen Entscheidungen immer nur eine untergeordnete Rolle '''!''' )</span> Anmerkung-6 ''':''' Das erste, ,regulär‘ <span style="color:#00B000">(├ )</span> abgeleitete, Hauptergebnis im 3. Beweisgang, Term :10: <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span> ''':''' der Glaube, dass GOTT ,notwendig‘ existiert, ist die logische Konsequenz aus der Prämisse, Term :1: <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>. Dieses erste Hauptergebnis hat also den überlieferten, traditionellen GOTT-Glauben zur Voraussetzung, und ist daher davon ,abhängig‘, d.h. Term :10: ist der Ausdruck einer ,Glaubensüberzeugung‘. Das zweite Hauptergebnis im 3. Beweisgang, das Theorem ANSELMS ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx→□∃xGx'''‘ —</span>, dagegen, ist die Darstellung der Abhängigkeit des ersten Hauptergebnisses von dem, vorher schon bewiesenen, ,Axiom‘ von der ,möglichen‘ Existenz GOTTES ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, dem Möglichkeits-Korollar-1 aus dem 1. Beweisgang. Dem geht folgende Beobachtung voraus ''':''' Der Term ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, hat in seiner syntaktischen Stellung hier, im Theorem-3, nicht mehr den überlieferten, traditionellen GOTT-Glauben zur Voraussetzung, und ist damit, in seiner Position als Konsequenz-Teil im Theorem ANSELMS, auch nicht mehr davon syntaktisch abhängig, sondern stützt sich formal-syntaktisch nur auf die behauptete Möglichkeit GOTTES; daher muss diese ,angenommene‘ Möglichkeit noch bewiesen <span style="color:#00B000">( ╞ )</span> werden. Dazu die Feststellung LEIBNIZ‘, der diesen Zusammenhang, und seinen Mangel, erkannt hat ''':''' ::Das Theorem ANSELMS ist <span style="color:#FF6000">» ''ein unvollständiger Beweis, der etwas voraussetzt, was man noch hätte beweisen'' <span style="color:#00B000">( ╞ )</span> ''sollen, um ihm mathematische Evidenz zu verleihen — nämlich, dass man dabei stillschweigend voraussetzt, diese Vorstellung des durchaus großen oder durchaus vollkommenen Wesens sei möglich und enthalte keinen Widerspruch'' «</span>. Diesen <span style="color:#FF6000">»''unvollständigen Beweis''«</span> hat GÖDEL im 1. Beweisgang mit dem ,regulär‘ <span style="color:#00B000">(├ )</span> abgeleiteten, und widerspruchfreien Möglichkeits-Korollar-1, vervollständigt, und damit hat er mit <span style="color:#FF6000">»''mathematischer Evidenz''«</span> bewiesen ''':''' <span style="color:#FF6000">»''Diese Vorstellung des durchaus großen oder durchaus vollkommenen Wesens''«</span> enthält <span style="color:#FF6000">»''keinen Widerspruch''«</span> '''!''' Das Korollar-1 ist nur vom logischen Axiom-1 und von der mathematischen Äquivalenz der Perfektionen, <span style="color:#00B000">(der Transzendentalien)</span>, im Axiom-2 ,abhängig‘, und nicht mehr von der ,methodologischen‘ Kalkül-Prämisse, dem traditionellen GOTT-Glauben. Damit hat das Glaubens-Theorem ANSELMS die gesuchte <span style="color:#FF6000">»''mathematische Evidenz''«</span> erreicht, unabhängig von jeder Glaubensüberzeugung. Entscheidend dafür ist der mathematisch-logische Beweis GÖDELS, dass der Nicht-GOTT-Glaube zu einem Widerspruch führt. Zusammenfassung ''':''' Theorem-1 ''':''' <span style="color:#4C58FF">— ‚'''PX→◇∃xXx'''‘ —</span> ''':''' <span style="color:#FF6000">»''Positive Eigenschaften sind konsistent''«</span>, ist die logische Konsequenz aus der Prämisse im 1. Beweisgang, Term :01: <span style="color:#4C58FF">— ‚'''PX'''‘ —</span>, den, — <u>modal-frei</u> — gewählten, ,angenommenen‘ positiven Eigenschaften, bzw. ,Transzendentalia‘. Theorem-2 ''':''' <span style="color:#4C58FF"> — ‚'''Gx↔G'''<sub>ess</sub>'''x'''‘ — </span> ''':''' <span style="color:#FF6000">»''GOTT-Sein ist das Wesen GOTTES''«</span>, ist die logische Konsequenz aus der Prämisse im 2. Beweisgang, Term :01: <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span>, dem, — <u>modal-frei</u> — gewählten, ,angenommenen‘ GOTT-Glauben der Christen. Im Unterschied dazu ist im 3. Beweisgang, das Theorem-3 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx→□∃xGx'''‘ —</span> ''':''' der Glaube, dass es einen GOTT notwendig gibt ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, die logische Konsequenz aus dem, — <u>modal-notwendig</u> — als widerspruchsfrei ,bewiesenen‘, Möglichkeits-Korollar-1 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, im 1. Beweisgang, <span style="color:#00B000">(auch im Beweisgang ,Widerlegung‘ im Anhang)</span>, und damit ist das Glaubens-Theorem-3, als ganzes, ,widerspruchsfrei‘. Das Theorem ANSELMS ist, mit Korollar-1, nur vom logischen Axiom-1 der Widerspruchsfreiheit, und der paarweisen, mathematischen Äquivalenz beliebiger positiver Eigenschaften, <span style="color:#00B000">(aller Transzendentalia)</span>, im Axiom-2, abhängig. Damit ist die Bedingung für die geforderte, spezielle <span style="color:#FF6000">»''mathematische Evidenz''«</span>, und auch für die Widerspruchsfreiheit im Glaubens-Theorem ANSELMS erfüllt; unabhängig von jeder Glaubensüberzeugung. Weil es <span style="color:#FF6000">„modal wahr“</span> ist, dass die Transzendentalien, bzw. die Vollkommenheiten ontologisch, — dem Sein nach —‚ alle <span style="color:#00B000">(zueinander)</span> widerspruchsfrei, und alle <span style="color:#00B000">(miteinander)</span> gleichwertig sind, ist es auch <span style="color:#FF6000">„modal wahr“</span>, dass es möglich ist, dass GOTT, — dem Sein nach —‚ da ist, <span style="color:#00B000">(d.h. existiert)</span>, der die unbegrenzte Summe aller ultimativen Transzendentalia, bzw. der unendlichen Vollkommenheiten allen Grades ist, wie es der ,christliche Glaube‘ des Erzbischofs ANSELM und seiner Anvertrauten ,annimmt‘. ====<div class="center"><span style="color:#660066">Widerlegung</span></div>==== {|class="wikitable" |- ! <div class="center"><span style="color:#660066">GÖDEL-Kalkül : der Möglichkeitsbeweis als Widerlegung des Nicht-GOTT-Glaubens</span></div> |- ! <span style="color:#00B000">''Terme der erweiterten Prädikatenlogik zweiter Stufe_____________ „Benennungen“ und durchgeführte Logik-Operationen''</span> |- | <small> <math>\begin{align} \text{(Axiom 1.1)} & \quad P \neg X \;\Longrightarrow\;\ \neg P\ X\ & \ & \text{„Wenn die Negation von X positiv ist, dann ist X nicht positiv“} \\ \text{(Axiom 2)} & \quad \Box \;\forall x (\ X\ x \Longrightarrow \ Y\ x) \Longrightarrow \ P\ Y & \ & \text{„Die Eigenschaft Y in allen x, die aus der Eigenschaft X in allen x} \\ \text{ } & \quad & \ & \; \; \text{mit modaler Notwendigkeit folgt, ist eine positive Eigenschaft“} \\ \text{[RK]} &\quad \Box\; \forall x A \;\Longrightarrow\;\Box\; \forall x B\; \text{ ├ }\;\Box \; \forall x (A \Longrightarrow\; B)\ & \ & \; \; \text{( :: Modales Prinzip KRIPKE-Γ-Ɐx)} \\ \text{(Korollar-1)} &\quad \Diamond \; \exists x \ G \ x \ & \ & \; \; \text{( „das —,x‘— steht für den GOTT, —,G‘—, der Christen“ )} \\ \text{ } & \text{„Es ist möglich, dass es den GOTT der Christen gibt“} & \ & \Longleftarrow\; \text{was zu beweisen ist !} \\ \text{01} & \quad \; \neg \Diamond \; \exists x \ G \ x \ & \ & \text{ AE: „Es ist unmöglich, dass es diesen GOTT gibt“ (dezidierter Atheismus)} \\ \text{02} & \quad (\neg x = .. )\ & \ & \text{ AE: „Es gibt die Eigenschaft, nicht mit x identisch zu sein“ :: (ungleich)} \\ \text{03} & \quad (\ x = .. )\ & \ & \text{ AE: „Es gibt die Eigenschaft, mit x identisch zu sein“ :: (gleich)} \\ \text{04} & \quad \neg\neg \Box \neg \exists x \ G \ x \ & \ & \text{:01:[ ◇A ↔ ¬□¬A ] :: (Modalregel) } \\ \text{05} & \quad \neg\neg \Box \neg\neg \forall x \neg \ G \ x \ & \ & \text{:04:[ ∃xA ↔ ¬Ɐx¬A ] :: (Quantorenregel) } \\ \text{06} & \quad \text{ ├ }\; \Box \; \forall x \neg G \ x \ & \ & \text{:05:NEG :: [ ¬¬A↔A ] :: (Gesetz der Aussagenlogik) } \\ \text{07} & \quad \Box \; \forall x \neg G \ x \Leftrightarrow\ W & \ & \text{:01:06:[ (:01:↔W) → (├:06:↔W) ] :: (Kalkülregel) } \\ \text{08} & \quad \Box \; \forall x \ G \ x \Leftrightarrow\ F & \ & \text{:07:[ (¬A↔W)↔(A↔F) ] :: (Regel für Wahrheitswerte)} \\ \text{ } & \text{„Jeder GOTT-Glaube ist ganz sicher falsch ! “} & \ & \Longleftarrow\; \text{die logische Konsequenz aus der Prämisse :01: !} \\ \text{09} & \quad \Box \; \forall x (\neg x = x ) \Leftrightarrow \ F \; \ & \text{ } & \text{□ⱯxXx:02:Instanz(X:=(¬x=..)) ⇒ Kontradiktion !} \\ \text{10} & \quad \Box \; \forall x (\ G \ x \Rightarrow\; (\neg x = x)) & \text { } & \text{:08:09:[ (:08:↔F) → (:09:↔F) ] :: „ex falso sequitur quotlibet“ :[RK]} \\ \text{11} & \quad \Box \; \forall x (\ G \ x \Rightarrow \; (\neg x = x)) \Rightarrow \; P (\neg x = .. ) & \ & \text{(A2):Instanz(X:=G):Instanz(Y:=(¬x= ..)) } \\ \text{12} & \quad \ P (\neg x = .. ) & \ & \text{:10:11:[ Modus ponens ] :: [ A→B, A ├ B ]} \\ \text{13} & \quad \ P (\neg x = .. )\;\Rightarrow\ \neg P (\ x = .. )\ & \ & \text{(A1.1):Instanz(X:=(x=..))}\\ \text{14} & \quad \neg P (\ x = .. )\ & \ & \text{:12:13:[ Modus ponens ] :: (log. Schlussregel)}\\ \text{15} & \quad \Box \; \forall x \ (x = x ) \Leftrightarrow \ W \; \ & \ & \text{□ⱯxXx:03:Instanz(X:=(x=..)) ⇒ Tautologie !} \\ \text{16} & \quad \Box \; \forall x (\ G \ x \Rightarrow\; (x = x)) & \ & \text{:08:15:[ (:08:↔F) → (:15:↔W) ] :: „ex falso sequitur etiam verum“ :[RK]} \\ \text{17} & \quad \Box \; \forall x (\ G \ x \Rightarrow\; (x = x)) \Rightarrow \ P (x = .. ) & \ & \text{(A2):Instanz(X:=G):Instanz(Y:=( x= ..))} \\ \text{18} & \quad \ P (\ x = .. )\ & \ & \text{:16:17:[ Modus ponens ]}\\ \text{19} & \quad \text{ ├ }\; (\neg P (\ x = .. )\ \wedge \ P (\ x = .. )) \Leftrightarrow\ F & \ & \text{:14:18:[ Konjunktion ] ⇒ Kontradiktion !}\\ \text{20} & \quad \neg \Diamond \; \exists x \ G \ x \Rightarrow (\neg P (\ x = .. )\ \wedge \ P (\ x = .. )) & \ & \text{:01:19:[ ├A├B╞ A→B ] :: ''KONDITIONALER BEWEIS''}\\ \text{ } & {\color{RedOrange}\text{Der Atheismus führt zu einem logischen Widerspruch ! }} & \ & \Longleftarrow\; \text{was mit Term :20: bewiesen ist !} \\ \text{21} & \quad \neg\neg \Diamond \; \exists x \ G \ x & \ & \text{:20:19:[ Modus tollendo tollens ] :: [ A→B,¬B ├ ¬A ]}\\ \text{22} & \quad \; \Diamond \; \exists x \ G \ x & \ & \text{:21:NEG }\\ \text{(Korollar-1)} & \;\text{„Es ist definitiv möglich, dass es diesen GOTT gibt“} & \ & \Longleftarrow\; \text{was zu beweisen war !} \\ \end{align}</math> </small> |} Anmerkung-7 ''':''' <span style="color:#00B000">( Dieser Beweisgang ist praktisch identisch mit dem 1. Beweisgang, jedoch gestrafft und präzisiert nach G.J.WIRSCHING. Diese Widerlegung des Nicht-GOTT-Glaubens beginnt sofort mit dem Korollar-1 <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span> aus dem 1. Beweisgang, als in Frage gestelltes ,Theorem‘, und beweist, ohne das Axiom-3 <span style="color:#4C58FF">— ,'''PG'''‘ —</span>, und ohne die GÖDEL-Prämisse <span style="color:#4C58FF">— ,'''PX'''‘ —</span>, in einem Zwischenergebnis, die innere Widersprüchlichkeit und damit auch die Unhaltbarkeit der atheistischen Glaubens-Annahme, aus rein logischen ,Gründen‘, bzw. Axiomen. )</span> Dieser Beweisgang geht von der Existenz GOTTES, <span style="color:#4C58FF">— ,'''G'''‘ —</span>, als Glaubens-Annahme, aus, wobei aber die Möglichkeit seiner Existenz, und damit die Sinnhaftigkeit des Glaubens an GOTT, durch die Prämisse :01: in Frage gestellt wird, und daher im Kalkül überprüft werden muss. Denn mit der Behauptung der Existenz GOTTES allein ist es nicht getan. Es muss auch seine ,Möglichkeit‘, d.h. die Sinnhaftigkeit des Glaubens an GOTT aufgewiesen werden. LEIBNIZ hat als erster, <span style="color:#00B000">(nach ANSELM)</span>, dieses Problem gesehen, und GÖDEL hat dafür die Lösung gefunden. Dieser Beweisgang, <span style="color:#00B000">(analog zum Möglichkeitsbeweis von Günther J. WIRSCHING konzipiert)</span>, setzt in den Axiomen, genau wie im 1. Beweisgang, die Existenz von etwas <span style="color:#FF6000">„Positiven“, „Perfekten“, „Vollkommenen“</span>, <span style="color:#4C58FF">— ,'''P'''‘ —</span>, <span style="color:#00B000">(d.h. die Transzendentalien)</span>, allgemein für die Welt voraus, <span style="color:#00B000">(was im Axiom-3 ''':''' <span style="color:#4C58FF">— ,'''PG'''‘ —</span>, auch GOTT ultimativ zugeordnet wird ''':''' <span style="color:#FF6000">»''GOTT ist absolut positiv, perfekt und vollkommen''«</span>)</span>; das dann im 2. Beweisgang mit Term :13: als widerspruchsfrei, <span style="color:#00B000">(als ,wahr‘ und ,annehmbar‘ im Kontext des christlichen Glaubens)</span>, schon ,bewiesen‘ <span style="color:#00B000">( ╞ )</span> worden ist. Die Existenz von ,Transzendentalien‘ in der Welt, ist ein, mit Beispielen belegbares, allgemeines Faktum; ihre Existenz auch in GOTT ist mit dem Term :13: des 2. Beweisganges bewiesen, die jedoch im Unendlichen, GOTT, als Transzendentalia, auch in ,ultimativer‘ Form vorliegen. Axiom-1 ,besagt‘, dass Eigenschaften nicht zugleich, vollkommen und nicht vollkommen, sein können. Axiom-2 ,besagt‘, dass, allgemein, alle Vollkommenheiten, <span style="color:#00B000">(alle Transzendentalien)</span>, gleichwertig, <span style="color:#00B000">(mathematisch äquivalent)</span>, sind. <span style="color:#00B000">(Axiom-2 wird hier um das GÖDEL-Konjunkt <span style="color:#4C58FF">— ,'''PX'''‘ —</span> verkürzt dargestellt. Damit ist auch Axiom-3 für diesen Beweisgang unnötig geworden, ohne dass sich wegen dieser Kürzung am Ergebnis etwas ändert. Axiom-2 wird jedoch sofort <span style="color:#FF6000">„modal falsch“</span>, wenn seine Variablen mit nicht-positive Eigenschaften, wie ,rot‘ oder ,schwer‘ belegt werden, die nicht ,transzendental‘-allgemein gültig sind, die keine ,Transzendentalia‘ sind.)</span> Die Eigenschaft <span style="color:#4C58FF">— (¬x=..) —</span> ,besagt‘, dass GOTT <span style="color:#FF6000">„unvergleichlich“</span> ist, wenn <span style="color:#4C58FF">,'''x'''‘</span> für GOTT steht. <span style="color:#00B000">(Der informelle Term, <span style="color:#4C58FF">— (¬x=..) —</span>, ersetzt hier, wie bei A. FUHRMANN, den formal korrekten Abstraktionsausdruck ''':''' <span style="color:#4C58FF">— λy.(¬x=y) —</span>, aus dem Lambda-Kalkül.)</span> Der Term :16: <span style="color:#4C58FF">— (x=x) ↔ W —</span> steht für die Selbstbezeichnung des GOTTES-JHWH in Exodus 3,14 ''':''' <span style="color:#CC66FF">»''Ich bin der ‚IST‘'' <span style="color:#00B000">(aus mir selbst)</span>«</span>, der Grund für die <span style="color:#FF6000">„Unvergleichlichkeit“</span> GOTTES. Der GOTT der abendländischen, christlichen Tradition wird mit <span style="color:#4C58FF">— ,'''G'''‘ —</span> bezeichnet ''':''' d.i. der <span style="color:#FF6000">„GOTT der Christen“</span>, entsprechend der ,methodologischen‘ Prämisse und der ,Genese‘ des Kalküls, syntaktisch formalisiert in der Definition-1 ''':''' <span style="color:#4C58FF">— ‚'''Gx↔∀X(PX→Xx)'''‘ —</span> ''':''' <span style="color:#FF6000">»''Das Individuum'' <span style="color:#4C58FF">,'''x'''‘</span> ''ist genau dann GOTT'', <span style="color:#4C58FF">,'''G'''‘</span>, ''wenn es alle Vollkommenheiten'', <span style="color:#4C58FF">,'''P'''‘</span>, ''in sich schließt''«</span>, nach der Vorgabe von LEIBNIZ ''':''' <span style="color:#FF6000">»''GOTT ist ein Wesen von äußerster Größe und Vollkommenheit, das alle Grade derselben in sich schließt''«</span>. Mit Korollar-1 hat dieser Beweisgang dasselbe Endergebnis, wie der 1. Beweisgang. Der Beweis, dass der dezidierte Atheismus zu einem logischen Widerspruch führt, und damit falsch ist, ist ein Zwischenergebnis in diesem Beweisgang, und begründet mit <span style="color:#FF6000">»''mathematischer Evidenz''«</span>, und unabhängig von jeder Glaubensüberzeugung, den, von LEIBNIZ gesuchten, Möglichkeitsbeweis für die Existenz GOTTES im Argument des Erzbischofs, und bestätigt damit die Sinnhaftigkeit des GOTT-Glaubens. Einmal Axiom-1 und zweimal Axiom-2 sichern hier das Ergebnis des Kalküls ''':''' das Möglichkeits-Korollar-1 ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>''':''' <span style="color:#FF6000">»''Es ist definitiv möglich, dass es den GOTT der Christen gibt''«</span>. Diese zwei Axiome sind die einzigen, und modal-notwendigen, d.h. die transzendentalen Voraussetzungen und Bedingungen für das Endergebnis ''':''' der Widerspruchsfreiheit und Sinnhaftigkeit des Glaubens der Christen an GOTT; <span style="color:#00B000">(dasselbe gilt natürlich auch für die <span style="color:#4C58FF">„theologische“</span> Weltanschauung jeder monotheïstischen Religion '''!''' Dem Erzbischof ANSELM ging es damals nur um seinen Glauben an GOTT.)</span>. Die Logik-Regel <span style="color:#FF6000"><span style="font-family: Times;"><big>„ex falso sequitur quotlibet, etiam verum“</big></span></span>, <span style="color:#00B000">(‚Aus Falschem folgt irgendetwas, auch Wahres‘)</span>, ist der scholastische Ausdruck für die ‚Implikation‘ <span style="color:#00B000">(Folgerung)</span> von Aussagen, die nur dann falsch, <span style="color:#4C58FF">— F —</span> ist, wenn das Antezedens wahr, <span style="color:#4C58FF">— W —</span>, und die Konsequenz falsch, <span style="color:#4C58FF">— F —</span> ist. Andernfalls ist sie immer wahr, <span style="color:#4C58FF">— W —</span>, auch wenn die Voraussetzung falsch, <span style="color:#4C58FF">— F —</span> ist ''':''' ‚Modern‘ darstellbar durch die ‚Wahrheitswertetafel‘ für die ‚materiale Implikation‘, <span style="color:#4C58FF">— ,(A → B)‘ —</span> <span style="color:#FF6000">„wenn A, dann B“</span>. Damit ist auch der <span style="color:#4C58FF">[ Modus tollendo tollens ] :: [ A → B, ¬B ├ ¬A ] </span> verstehbar; <span style="color:#00B000">(vgl. die vierte Zeile der ‚materialen Implikation‘)</span>. Der positive hypothetische Syllogismus ''':''' <span style="color:#4C58FF">[ Modus ponendo ponens ] :: [ A → B, A ├ B ] </span> ist aus der ersten Zeile ablesbar. Die folgende Tabelle gibt für jeden ,Wahrheitswert‘ der Aussagen <math>A</math> und <math>B</math> das Resultat einiger zweiwertiger Verknüpfungen an ''':''' {|class="wikitable hintergrundfarbe2" style="text-align:center;" |- !colspan="2"|''Belegung''!!Konjunktion!!Disjunktion!!materiale<br /> Implikation!!Äquivalenz<br /> Bikonditional!!kopulative<br /> Konjunktion |- !<math>A</math> !<math>B</math> !<math>A</math> und <math>B</math> !<math>A</math> oder <math>B</math> !wenn <math>A</math> dann <math>B</math> !sowohl <math>A</math> als auch <math>B</math> !entweder <math>A</math> oder <math>B</math> |- !W!!W |W||W||W||W||F |- !W!!F |F||W||F||F||W |- !F!!W |F||W||W||F||W |- !F!!F |F||F||W||W||F |} <span style="color:#00B000">(Eine ‚Konjunktion‘ ist nur dann ,wahr‘, wenn beide Aussagen einer ‚Konjunktion‘ wahr sind. Eine ‚kopulative Konjunktion‘ ist nur dann ,wahr‘, wenn entweder die eine, oder die andere Aussage der ‚kopulativen Konjunktion‘ wahr ist. Es besteht also eine Wenn-Dann-Verbindung zwischen beiden Aussagen — eine ,Kopplung‘. Das ist die logische Grundlage von Axiom-1 im GÖDEL-Formalismus)</span> Um das Widersprüchliche der ,Annahme‘ nachzuweisen, dass positive Eigenschaften ,nicht konsistent‘ seien, <span style="color:#00B000">(im 1. Beweisgang)</span>, bzw. um das Unlogische und Sinnwidrige der ,Annahme‘ klarzustellen, es sei ,unmöglich‘, dass es einen GOTT gibt, <span style="color:#00B000">(hier, in der Widerlegung)</span>, verwendet das GÖDEL-Kalkül den Gegensatz ''':''' wahr, <span style="color:#4C58FF">— W —</span>, falsch, <span style="color:#4C58FF">— F —</span>, zwischen der dritten und vierten Zeile der Wahrheitswertetafel, für zwei ,wahre‘ <span style="color:#4C58FF">— W —</span> ,materiale Implikationen‘, in denen die Voraussetzung jeweils falsch, <span style="color:#4C58FF">— F —</span>, ist, entsprechend der Regel <span style="color:#FF6000"><span style="font-family: Times;"><big>„ex falso, <span style="color:#4C58FF">— F —</span>, sequitur quotlibet, <span style="color:#4C58FF">— F —</span>, etiam verum, <span style="color:#4C58FF">— W —</span>“</big></span></span>, jeweils mit der Hilfe von Axiom-1 und Axiom-2, in einer <span style="font-family: Times;"><big>,Reductio ad absurdum‘</big></span>; hier unabhängig von jeder Glaubensüberzeugung. Im Gegensatz dazu, wird, <span style="color:#00B000">(im 2. Beweisgang)</span>, aus dem Glauben an GOTT, auch mit einer <span style="font-family: Times;"><big>,Reductio ad absurdum‘</big></span>, speziell mit Axiom-1, das Widersprüchliche in der ,Annahme‘ nachgewiesen, es gäbe in GOTT <span style="color:#FF6000">»''keine Vollkommenheit, nichts Positives, nichts Perfektes''«</span>, d.h. keine ,Transzendentalia‘. In dieser <span style="font-family: Times;"><big>,Reductio ad absurdum‘</big></span>, im 2. Beweisgang, wird vorausgesetzt <span style="color:#00B000">(,angenommen‘)</span> ''':''' es gibt den GOTT der Christen, <span style="color:#00B000">(als Prämisse :01:)</span>, der ,unvergleichlich‘ und ,einzigartig‘ ist, und in dem auch alle ,Transzendentalia‘ <span style="color:#FF6000">„koinzident“</span> ,eins‘ sind, entsprechend Axiom-2. Für KANT entsteht ein Widerspruch in den Prädikaten eines Satzes. ::<span style="color:#FF6000">»</span> ''Wenn ich das Prädicat in einem identischen Urtheile aufhebe'', <span style="color:#00B000">[ durch eine Negation ]</span>, ''und behalte das Subject, so entspringt ein Widerspruch''. <span style="color:#00B000">[ Wenn ich sage ''':''' ,''GOTT ist nicht allmächtig''‘, entsteht ein Widerspruch zur richtigen Aussage ''':''' ,''GOTT ist allmächtig''‘. ]</span> … ''Wenn ihr aber sagt ''':''' ,GOTT ist nicht‘, so ist weder die Allmacht, noch irgendein anderes seiner Prädicate gegeben; denn sie sind alle zusammt dem Subjecte aufgehoben'', <span style="color:#00B000">[ negiert ]</span>, ''und es zeigt sich in diesem Gedanken nicht der mindeste Widerspruch.'' <span style="color:#FF6000">«</span><ref>vgl. ‚''<span style="font-family: Times;"><big>Kritik der reinen Vernunft</big></span>''‘, Seite 398f; https://www.korpora.org/kant/aa03/398.html</ref> Es ist richtig, wie KANT sagt, der Widerspruch entsteht nicht in dem Gedanken ''':''' <span style="color:#FF6000">»</span>''GOTT ist nicht''<span style="color:#FF6000">«</span>. GÖDEL zeigt daher, dass der Widerspruch erst dann entsteht, wenn von der Annahme ausgegangen wird ''':''' ''<span style="color:#FF6000">»</span>Es ist unmöglich, dass GOTT ist''<span style="color:#FF6000">«</span>. Daraus folgt dann ,regulär‘, mit Hilfe von Axiom-1 und Axiom-2, <span style="color:#00B000">(d.h. mit den Theoremen von den Transzendentalien)</span>, die logische ,Möglichkeit‘ GOTTES, unabhängig von jeder Glaubensüberzeugung. Wie LEIBNIZ klar erkannt hat, muss zuerst, aus dem Widerspruch des Gegenteils, die logische ,Möglichkeit‘, <span style="color:#00B000">(die Konsistenz)</span>, der Existenz GOTTES bewiesen werden ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, bevor daraus die reale ,Notwendigkeit‘ GOTTES abgeleitet werden kann ''':''' <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, dessen Existenz jedoch, aus dem ,Glauben‘, im Voraus, schon angenommen worden ist. Dieser Sachverhalt ist das ausschließliche Spezifikum GOTTES, <span style="color:#00B000">(das <span style="color:#FF6000">»''Privilegium der Gottheit allein''«</span>)</span>, und gilt nur bei GOTT, als dem Unvergleichlichen und Einzigartigen. Dieses ,Spezifikum‘ wird im Theorem ANSELMS abgebildet ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx→□∃xGx'''‘ —</span>, auf Grund von Axiom-2, das den inneren Zusammenhang, die Koinzidenz auch von ,Möglichkeit‘ und ,Notwendigkeit‘ im Unendlichen, GOTT, erkennen lässt. Bis Zeile 10, im 3. Beweisgang, reicht der Geltungsbereich der ,modal‘-frei gewählten Kalkül-Prämisse :01:, der ,methodologische‘ GOTT-Glaube. In Zeile 11 liegt der ,Schwerpunkt‘ des ontologischen Beweises dann aber am, — modal als notwendig — ,bewiesenen‘ Widerspruch des Gegenteils zum GOTT-Glauben, <span style="color:#00B000"> (formal-syntaktisch dargestellt als widerspruchfreies Antezedens, <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span>, dem Möglichkeits-Korollar-1 aus dem 1. Beweisgang)</span>, und nicht mehr am ,angenommenen‘ GOTT-Glauben der Kalkül-Voraussetzung, <span style="color:#00B000">(nun dargestellt als Konsequenz <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span> im Theorem ANSELMS)</span>. Das Möglichkeits-Korollar-1 muss jetzt immer, wie folgt, gelesen werden ''':''' <span style="color:#FF6000">»''Es ist <u>widerspruchfrei</u> möglich, dass GOTT ist''«</span>. Damit hat er, — angeregt durch LEIBNIZ, und mit ihm —, die fast einhellig akzeptierte Fehldeutung des ontologisch-<span style="color:#4C58FF">„theologischen“</span> Arguments ANSELMS für GOTT durch gewichtige philosophische, <span style="color:#00B000">(KANT<ref>GOTT ist absolut einzigartig und unvergleichlich. KANT macht GOTT jedoch zu einem ,Ding‘ unter den vielen ,Dingen‘ dieser Welt, indem er die Existenz, bzw. das ,Sein‘ GOTTES mit dem ,Sein der Dinge‘ gleich setzt. Eine solche Gleichsetzung ist bei GOTT unangebracht und daher unzulässig! KANT verkennt damit die Einzigartigkeit und Besonderheit GOTTES. Das ,Sein‘ der Dinge ist, — wie KANT sagt —, kein ,reales Prädikat’, d.h. Existenz ist keine Eigenschaft. Jedoch in GOTT ist ,Sein‘ ein ,reales Prädikat‘, d.h. Existieren ist ,real‘ die Wesenseigenschaft GOTTES, denn GOTT ist der, der für uns, — aus Liebe —, immer schon ,da‘ ist ''':''' in der ,Hypostatischen Union‘, sowohl als GOTT von Ewigkeit zu Ewigkeit, als auch als Mensch in unserer Zeitlichkeit. Das ist das, was GOTT für uns ausmacht —, sein Wesen.</ref>)</span>, und <span style="color:#4C58FF">„theologische“</span>, <span style="color:#00B000">(THOMAS<ref>GOTT ist absolut einzigartig und unvergleichlich. THOMAS unterscheidet die ,Natur GOTTES‘ nicht von der ,Natur der Dinge‘, indem er die ,Natur‘ des GOTTES ANSELMS irrtümlich mit der ,Natur‘ der Dinge gleich setzt. Damit reiht er GOTT unter die vielen Dinge unserer Welt ein, indem er für den GOTT ANSELMS annimmt ''':''' GOTT ,esse in rerum natura‘, d.h. wörtlich, dass der GOTT ANSELMS in der ,Natur‘ der Dinge existiert, <span style="color:#00B000">(was ANSELM nie gesagt hat)</span>. Eine solche Gleichsetzung ist bei GOTT unangebracht und daher unzulässig! Die ,zeitlose-überzeitliche‘ Wirklichkeit, (Natur), GOTTES ist völlig verschieden und unabhängig von der zufälligen Wirklichkeit, (die ,Natur‘), unserer ,raum-zeitlichen‘ Welt. Daher ist sie mit dieser auch nicht vergleichbar. Thomas verkennt damit die Einzigartigkeit und Besonderheit GOTTES.</ref>)</span>, Autoritäten zurechtgerückt, welche die Einzigartigkeit und Unvergleichlichkeit des Unendlichen, GOTT, bei ihrer Beurteilung des Theorem ANSELMS nicht berücksichtigt, sondern den Unendlichen, <span style="color:#00B000">(irrtümlich)</span>, unter die endlichen Dinge unserer Welt eingereiht haben. GÖDEL hat mit dem bewiesenen Widerspruch des Gegenteils zum GOTT-Glauben, den Beweis für die <span style="color:#FF6000">»''mathematische Evidenz''«</span> des Theorem ANSELMS geliefert, was, nach LEIBNIZ, für die Akzeptanz dieses Theorems noch gefehlt hat. Das Theorem ANSELMS besagt universell ''':''' Die <span style="color:#FF6000">»''theologische Weltanschauung''«</span> der Juden, Christen und Muslime, die ,annehmen‘, dass es mit ,Notwendigkeit‘ <span style="color:#4C58FF">— ‚'''□'''‘ —</span> <span style="color:#00B000">(nur)</span> einen GOTT gibt, ist logisch richtig und <span style="color:#FF6000">»''mathematisch evident''«</span>, weil es <u>ohne Widerspruch</u> ,denkbar‘ <span style="color:#4C58FF">— ‚'''◇'''‘ —</span> ist, dass es GOTT gibt ''':''' Nicht mehr und nicht weniger, <span style="color:#FF6000">»''rein verstandesmäßig, (ohne sich auf den Glauben an irgendeine Religion zu stützen)''«</span>. Es geht hier bei GÖDEL nicht um Theoriefindung oder ähnliches. GÖDEL ist kein ,spekulierender‘ Theoretiker. GÖDEL ist Logiker und Mathematiker. Was er sagt, ist mathematisch wahr und logisch richtig. Wenn er sagt, dass die Aussage ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ — »''wahr''«</span> ist ''':''' <span style="color:#FF6000">»''es ist möglich, dass es Gott gibt'' ''':''' ''das ist ,wahr‘ wegen Axiom-2 (und Axiom-1)''«</span>, dann spricht er hier von der mathematischen Wahrheit. Logischerweise ist dann die konträre Aussage ''':''' <span style="color:#4C58FF">— ‚'''¬◇∃xGx'''‘ — »''falsch''«</span> ''':''' <span style="color:#FF6000">»''es ist nicht möglich, dass es einen Gott gibt''«</span>, und zwar mathematisch falsch, weil sich aus dieser Aussage ein Widerspruch ergibt. Jeder, der die mathematische Logik GÖDELS lesen kann, kann das sehen und verstehen ''':''' Das Zwischenergebnis, <span style="color:#00B000">(Term :20:)</span>, in dieser Kalkül-Ableitung, die logische Konsequenz aus der Annahme des dezidierten Atheismus, es sei unmöglich, dass es GOTT gibt, ist der faktische, nachprüfbare, und für jeden Menschen sichtbare Beweis dafür, dass diese Annahme in einen Widerspruch mündet, und damit falsch und unlogisch ist. Das bedeutet, es ist eine Tatsache, bzw. es ist Faktum, dass der Atheismus, — mit <span style="color:#FF6000">»''mathematischer Evidenz''«</span> —, wirklich falsch und unlogisch ist, und daher, mit Recht, als ,Unsinn‘ bezeichnet werden darf '''!''' Das ist nicht bloß als eine Theoriefindung, oder als eine Interpretation eines Autors zu verstehen. Das ist vielmehr genau so wahr und <span style="color:#FF6000">»''mathematisch evident''«</span>, wie, dass zwei mal zwei vier ergibt, und wirklich genau so logisch richtig, wie, dass die Erde sich um die Sonne dreht. Das ist gerade das Überraschende und Unerwartete am Gödel-Kalkül. Es geht hier nicht mehr um Theoriefindung oder Interpretationen, denen man zustimmen kann oder nicht. Es geht hier <span style="color:#FF6000">»''rein verstandesmäßig''«</span> um mathematisch-logische Fakten. Damit steht GÖDEL, in seiner Bedeutung, in gewisser Weise, neben KOPERNIKUS, weil seine Kalkül-Ergebnisse, wie die Berechnungs-Ergebnisse dieses Pioniers der damaligen Zeitenwende, heute, in unserem Äon, ebenfalls mit eingefleischte Vorurteile aufräumen, ohne aber, dass GÖDEL für sich selbst, im Glauben, logisch konsequent gewesen wäre. <span style="color:#00B000">(Er ist sich der Tragweite und der Konsequenzen seiner <span style="color:#4C58FF">„axiomatischen Theologie“</span> anscheinend nicht bewusst gewesen, wenn er sagt ''':''' Man sei heute noch <span style="color:#FF6000">»''weit davon entfernt, das theologische Weltbild wissenschaftlich begründen zu können''«</span>, nachdem sein Kalkül das <span style="color:#FF6000">„atheistische Weltbild“</span> fundamental ins Wanken gebracht und als irrationalen ,Unsinn‘ entlarvt hat. Sein Kalkül ,beweist‘ ( ╞ ) indirekt, dass das <span style="color:#FF6000">„theologische Weltbild“</span>, im Beweisgang ,Widerlegung‘, aus dem Widerspruch des Gegenteils, mit <span style="color:#FF6000">»''mathematisch-logischer Evidenz''«</span>, offensichtlich doch, wissenschaftlich begründet werden kann)</span>. ---- Kurt GÖDEL ist auch deswegen ein Ausnahmelogiker. ---- ===<div class="center"><span style="color:#660066">Epilog für Skeptiker</span></div>=== Wenn man das GÖDEL-Argument genau liest, dann ist nur die Annahme ''':''' <span style="color:#FF6000"> „es ist möglich, dass es GOTT gibt“</span> bewiesen, weil aus der Annahme ''':''' <span style="color:#FF6000">„es ist unmöglich, dass es GOTT gibt“</span> ein logischer Widerspruch ableitbar ist. Die Aussage ''':''' <span style="color:#FF6000">„es gibt GOTT“</span> ist dagegen schon eine Glaubensaussage, und damit ist das auch die ,Grundannahme‘ eines gläubigen Menschen, der dann aus der ,bewiesenen Möglichkeit‘, dass es Gott gibt, ableiten kann ''':''' <span style="color:#FF6000">»''es gibt GOTT wirklich''«</span>, wenn er will ''':''' <span style="color:#FF6000">»''Es stimmt also, was ich glaube '''!''''' «</span> Das ist das Argument ANSELMS, der ein christlicher Amtsträger war, und der daher von dieser Grundannahme auch ausgeht. Solange in den Voraussetzungen des Möglichkeitsbeweises im GÖDEL-Kalkül kein Widerspruch nachweisbar ist, und solange in der logischen Durchführung dieses Beweises keine schweren Mängel festgestellt werden können, ist das Ergebnis des Möglichkeitsbeweises, wie GÖDEL ihn durchgeführt hat, korrekt, und die Folgerungen daraus, logisch richtig, dass es sich hier um <span style="color:#FF6000">»''mathematische Evidenz''«</span> handelt, <span style="color:#00B000">(z. B. wie 2 x 2 = 4)</span>. Aber niemand ist gezwungen, aus der Möglichkeit, dass es GOTT gibt, daraus zu schließen, dass es GOTT auch mit Notwendigkeit gibt, wie das im Argument ANSELMS geschieht, außer, er akzeptiert auch die Grundannahme, dass es den Unendlichen und Unvergleichlichen tatsächlich gibt. Dann kann er mit LEIBNIZ, der selbst an GOTT geglaubt hat, mit Bestimmtheit sagen ''':''' <span style="color:#FF6000">»''gesetzt, dass GOTT möglich ist, so ist er, was das Privilegium der Gottheit allein ist''«</span>, weil GÖDEL mit seinem Kalkül den noch ausstehenden Beweis der Widerspruchsfreiheit dafür geliefert hat. Wenn Du den 3. Beweisgang des GÖDEL-Kalküls genauer anschaust, dann siehst Du, dass der Konsequenz-Teil im Argument ANSELMS, der identisch ist mit dem Term in der Zeile 10, <span style="color:#4C58FF">— ‚'''□∃xGx'''‘ —</span>, immer noch formallogisch abhängig ist von der methodologischen Glaubens-Prämisse, Term :01:, <span style="color:#4C58FF">— ‚'''Gx'''‘ —</span> ''':''' <span style="color:#FF6000">»''das'' <span style="color:#4C58FF">‚'''x'''‘</span> ''steht für den Gott der Christen''«</span>. Diese Abhängigkeit ist bis zur Zeile 10 offensichtlich und logisch korrekt. <span style="color:#00B000">(Man könnte nach dieser Zeile, ohne Weiteres, ,regulär‘ die <span style="color:#FF6000">„logische Implikation”</span> :: <span style="color:#4C58FF">[├ A ├ B ╞ A→B ]</span> mit Term :01: und Term :10: als ein mögliches Korollar bilden ''':''' <span style="color:#4C58FF">— ‚'''Gx→□∃xGx'''‘ — </span>)</span>. Das bedeutet, der Konsequenz-Teil im Theorem ANSELMS, der in diesem ,regulär‘-möglichen Korollar an zweiter Stelle steht, ist damit in seiner Formal-Struktur offensichtlich ,regulär‘ von der Glaubens-Prämisse, Term :01:, abhängig, d.h. er ist der Ausdruck einer Glaubensüberzeugung. Im Theorem ANSELMS steht er jetzt, in der Zeile 11, als Konsequenz-Teil auch an zweiter Stelle, hat aber nicht mehr seine Glaubens-Prämisse als notwendige Bedingung an erster Stelle vor sich, wie im ,regulär‘-möglichen Korollar. Jetzt steht eine neue und andere Voraussetzung als Begründung vor ihm. Der Schwerpunkt des Argument ANSELMS liegt damit am Begründungs-Teil des ANSELM-Theorems, der jetzt die erste Stelle im Theorem einnimmt ''':''' <span style="color:#4C58FF">— ‚'''◇∃xGx'''‘ —</span> ''':''' <span style="color:#FF6000">»''es ist möglich, dass es GOTT gibt''«</span>, der erst dadurch entstanden ist, und davon abhängig ist, weil sein Gegenteil ''':''' <span style="color:#4C58FF">— ‚'''¬◇∃xGx'''‘ —</span> ''':''' <span style="color:#FF6000">»''es ist unmöglich, dass es GOTT gibt''«</span>, zu einem Widerspruch geführt hat. Dieser Begründungs-Teil, das Antezedens, im Argument ANSELMS, ist daher nicht mehr von der methodologischen Glaubens-Prämisse, Term :01:, abhängig, sondern nur vom Axiom-1, der Widerspruchsfreiheit, und von der paarweisen, mathematischen Äquivalenz beliebiger positiver Eigenschaften im Axiom-2, die im 1. Beweisgang, bzw. im Beweisgang ,Widerlegung‘, mit dem <span style="color:#4C58FF">[ Modus tollendo tollens ] :: [ A → B, ¬B ├ ¬A ]</span>, die Widerspruchsfreiheit der Möglichkeit des GOTT-Glaubens mit Notwendigkeit herbeigeführt haben. Daraus ergibt sich eine logische Verschiebung in der Argumentationskette, denn dieser Begründungs-Teil, der jetzt die Widerspruchsfreiheit für den Konsequenz-Teil liefert, ist selbst unabhängig und frei von jeder Glaubensüberzeugung. Weil widerspruchsfrei und <span style="color:#FF6000">»''mathematisch evident''«</span>, muss er als logische Begründung für die Widerspruchsfreiheit und als Beweis für die <span style="color:#FF6000">»''mathematische Evidenz''«</span> des Konsequenz-Teils gelesen werden, und damit bestätigt er die Widerspruchsfreiheit und Sinnhaftigkeit der Glaubensüberzeugung eines gläubigen Menschen, <span style="color:#00B000">(was auch das Ziel ANSELMS war)</span>. Das heißt also ''':''' der Glaube dieses Menschen ist widerspruchsfrei und sinnvoll, und enthält keinen Zirkelschluss, weil sein Gegenteil, der Nicht-GOTT-Glaube, zu einem Widerspruch führt; <span style="color:#00B000">(das hat GÖDEL mit seinem Kalkül-System bewiesen, dessen Argumentationskette mit einem Computer-Programm, dem sog. ,Theorembeweiser‘, überprüft worden ist, und als <span style="color:#FF6000">»''nachweisbar korrekt''«</span> befunden wurde)</span>. Das Theorem ANSELMS beweist, nach GÖDEL, dass der Glaube an GOTT, mit <span style="color:#FF6000">»''mathematische Evidenz''«</span> notwendig widerspruchsfrei und sinnvoll ist, weil der Nicht-GOTT-Glaube notwendig zu einem Widerspruch führt. <u>Das Theorem beweist jedoch nicht, dass die Existenz GOTTES notwendig ist</u>, <span style="color:#00B000">(wie es fast immer fälschlich gelesen wurde und wird)</span>, sondern, das Theorem ANSELMS geht davon aus, als nicht hinterfragtes Faktum, dass GOTT notwendig, schon immer existiert, und beweist, mit dem GÖDEL-Kalkül, dass diese Glaubens-Annahme widerspruchsfrei und sinnvoll, und <span style="color:#FF6000">»''mit allen bekannten Tatsachen durchaus vereinbar ist''«</span>, wie GÖDEL abschließend sagt. GOTT hat es ja auch nicht ,nötig‘, bewiesen zu werden. Für den Erzbischof ANSELM war die Existenz GOTTES, überall und jederzeit, die ungefragte und für ihn die selbstverständlichste Voraussetzung aller seiner Bemühungen, in seinem Leben, und in seinem Beruf als christlicher Amtsträger, und auch als Theologe in den philosophischen Überlegungen über seinen Glauben. Mit diesen Überlegungen hat er, mit GÖDEL, bewiesen ''':''' Glaube ist nicht irrational, kein Sprung ins Unbekannte, sondern eine freie, vernünftige Entscheidung. Glaube ist rational und vertrauenswürdig. Zusammengefasst heißt das Ergebnis dieser Bemühungen ANSELMS ''':''' Wenn Du an GOTT glauben willst, dann kannst Du das unbedenklich tun, denn Dein Glaube ist auch logisch in der <u>bewiesenen Möglichkeit</u>, dass es GOTT geben kann, begründet, und damit ist er widerspruchsfrei, sinnvoll und kein Zirkelschluss. Dein Glaube an GOTT beruht jedoch, nach wie vor und in erster Linie, auf Deiner freien Entscheidung für GOTT, und nicht auf dem Zwang einer ,logischen‘ Argumentation. Wenn Du nicht an GOTT glauben willst, dann <u>musst Du, und sollst Du, auch nicht deswegen</u> an GOTT glauben, weil der Nicht-GOTT-Glaube zu einem Widerspruch führt, und damit falsch und unlogisch ist. Denn der Glaube an GOTT muss immer eine freie und Deine ganz persönliche Entscheidung für GOTT sein und bleiben. Niemand darf zum Glauben an GOTT gezwungen werden, auch nicht mit ,logischen‘ Argumenten. Warum '''?''' Weil GOTT die Liebe ist '''!''' Und die Liebe duldet keinen Zwang '''!''' Zum Abschluss, und für eine bessere Verständlichkeit dieser Studie, hat die KI, der ich diese Studie für die Erstellung eines Podcast übergeben habe, eine, — sogar für Kinder —, verständliche Metapher kreiert. Sie sagt, man stelle sich vor ''':''' Es sei irgendwo ein ,Schatz’ vergraben, und es gäbe auch eine ,Schatzkarte’ für diesen ,Schatz’. Kurt GÖDEL ist nun gekommen, und hat mit seinem Kalkül bewiesen, dass diese ,Schatzkarte’ korrekt ist und fehlerfrei. Ob aber jemand, mit Hilfe dieser ,Schatzkarte’ auf ,Schatzsuche’ gehen will oder nicht ''':''' das ist und bleibt jedem selbst überlassen, und ist immer eine freie, und ganz persönliche Entscheidung. Damit hat die KI erstaunlich treffend, sowohl die Bedeutung, als auch die reale Funktion des GOTT-Glaubens in der Lebens-Wirklichkeit unserer Welt und Zeit charakterisiert, in Übereinstimmung mit der Gleichniserzählung JESU vom ,Schatz im Acker’; <small><span style="color:#00B000">( vgl. {{Bibel | Matthäus-Evangelium |13|44|EU}} )</span></small>. Der ,Schatz’ ist die <span style="color:#FF6000">„<span style="font-family: Times;"><big>Βασιλεία του Θεού</big></span>“</span><span style="color:#00B000"> | ,Basileía tou Theoú’</span>, d.h. das <span style="color:#CC66FF">»''Königtum GOTTES''«</span>, oder auch das <span style="color:#CC66FF">»''Himmelreich''«</span>. Die ,Schatzkarte’ ist der Glaube an GOTT. Die ,Schatzsuche’ ist der Weg des Glaubens in der Nachfolge JESU, der uns den Weg zeigt zum Ziel, zur Erfüllung aller unserer Sehnsüchte und Wünsche. ---- ---- ;Fußnoten <references /> nz2z4icymdebp32xvsugppznlpsrdzr Ing Mathematik: Python 0 117969 1090395 1090393 2026-09-05T13:01:30Z Intruder 1513 /* Linux */ 1090395 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 == 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) An Beliebtheit rangiert Python mit Stand August 2026 mit einem Rating von 18,53% 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. 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 OSCON 2006.jpg|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. == 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. 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 private ist. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt. == 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 == [[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 = 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}} ce8fjqf181k9yeluywo72yhhdtkb0w7 1090398 1090395 2026-09-05T17:59:17Z Intruder 1513 /* Eine einfache Klasse */ 1090398 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 == 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) An Beliebtheit rangiert Python mit Stand August 2026 mit einem Rating von 18,53% 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. 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 OSCON 2006.jpg|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. == 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 private ist. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt. == 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 == [[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 = 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}} 8w4u0rvrbm3vbatjzef9vesflbtmui6 1090404 1090398 2026-09-06T09:41:18Z Intruder 1513 /* Eine einfache Klasse */ 1090404 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 == 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) An Beliebtheit rangiert Python mit Stand August 2026 mit einem Rating von 18,53% 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. 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 OSCON 2006.jpg|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. == 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. Bei den Methoden wird immer self als erster Parameter angegeben. Beim Aufruf der entsprechenden Funktion wird das self aber nicht berücksichtigt. == 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 == [[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 = 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}} cuitwnafzlcsl97y5ppyo6pxmlrzkkn 1090405 1090404 2026-09-06T10:26:11Z Intruder 1513 /* Eine einfache Klasse */ 1090405 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 == 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) An Beliebtheit rangiert Python mit Stand August 2026 mit einem Rating von 18,53% 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. 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 OSCON 2006.jpg|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. == 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. == 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 == [[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 = 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}} 3lpvypyru1f8p3ql5rw91gbf7665qe3 1090409 1090405 2026-09-06T11:49:21Z Intruder 1513 /* Eine einfache Klasse */ 1090409 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 == 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) An Beliebtheit rangiert Python mit Stand August 2026 mit einem Rating von 18,53% 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. 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 OSCON 2006.jpg|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. == 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 == 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 == [[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 = 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}} 4l0x0sini5rondrdapk5in2tf0zglmz Gitarre: Dreiklänge auf den Melodiesaiten 0 120894 1090397 1090105 2026-09-05T16:57:32Z Mjchael 2222 /* Problem: G-Form */ Refferenzen 1090397 wikitext text/x-wiki {{:Gitarre/ Navi|Sologitarre| {{:Gitarre: Sologitarre/ Navi Triads}}| img=Guitar 1.svg |bg=#F8f8f8|border=darkorange|color=dark|px=80|navi=Einführung in die Sologitarre}} {{todo|Überarbeiten bzw. Korrekturlesen. Seite umbenennen|Sologitarre|Mjchael}} = Dreiklänge auf den Melodiesaiten = == Drei Umkehrungen == === Dreiklänge der D-Formen === Alle Akkorde der C-Durtonleiter in der D und Dm-Form auf den unteren drei Saiten. * B° (Bdim) wird aus den Tönen B D und F gebildet. Wenn du B° um ein G im Bass erweiterst, erhälst du ein G7. Den kannst du auch als Barré in der A7-Form greifen. (Wie A7 mit Capo im 10. Bund). So abgeleitet, wirkt der verminderte Akkord (B°) nicht mehr ganz so exotisch. <score sound="1" raw="1"> \version "2.20.0" \header { title="Dreiklänge in C-Dur" subtitle="D(m)-Formen" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %% Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myChords = \chordmode { c1 d:m e:m f g a:m b:dim c g:7 c } myDiskant = { <g c'-1 e' >1 % C \set minimumFret = #1 \set TabStaff.restrainOpenStrings = ##t <a-2 d'-3 f'-1 >1 % Dm \set minimumFret = #3 <b-2 e'-3 g'-1 >1 % Em \set minimumFret = #5 <c'-1 f'-3 a'-2 >1 % F \set minimumFret = #7 <d'-1 g'-3 b'-2>1 % G \set minimumFret = #8 <e'-2 a'-3 c''-1>1 % Am \set minimumFret = #10 <f'-1 b'-3 d''-1>1 % Bdim \set minimumFret = #12 <g'-1 c''-3 e''-2> % C \set minimumFret = #10 <g-1 d'-2 f'-1 b'-4 d''-1>1 % G7 \set minimumFret = #12 <c'-3 e'-2 g'-1 c''-2 e''-2> % C } myGuitar = { \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp \repeat volta 4{ \myDiskant % \bar "|." | } } myFretBoards = { \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 \myDiskant } } %% Layout = Noten mit Tab \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \omit Score.Fingering \myDiskant } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Midi \score { << \unfoldRepeats { \new Staff << \myKey \myGuitar >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=160\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Dreiklänge der A-Formen === Alle Akkorde der C-Durtonleiter in der A und Am-Form gespielt. * Der B° ist diesmal nicht ganz so einfach herzuleiten. Wir leiten uns diesen diesmal vom Bm7b5 ab, der sich wie ein Dm/B greifen lässt. Möglicherweise ist er dir mal bei einer Jazz-Übung in der Form begegnet. Die Septime (7) A wird weggelassen und der Ton B eine Oktave höher gespielt. <score sound="1" raw="1"> \version "2.20.0" \header { title="Dreiklänge in C-Dur" subtitle="A(m)-Formen" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %% Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myChords = \chordmode { c1 d:m e:m f g a:m a:m b:dim c b:dim7 c } myDiskant = { \set TabStaff.restrainOpenStrings = ##t \set minimumFret = #1 < c'-3 e'-4 g'-1 >1 % C <d'-3 f'-2 a'-1 >1 % Dm < e'-3 g'-2 b'-1 >1 % Em < f'-3 a'-4 c''-1 >1 % F < g'-3 b'-4 d''-1 >1 % G < a'-3 c''-2 e''-1 >1 % Am \once { \set TabStaff.restrainOpenStrings = ##f \set minimumFret = #0 } < a-2 c'-1 e' >1 % Am < b-4 d'-3 f'-1>1 % Bdim <c'-3 e'-4 g'-1 >1 % C <b,-2 a-3 d'-4 f'-1>1 % Bm7b5 <c-1 g-2 c'-3 e'-4 g'-1 >1 % C } myGuitar = { \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp \repeat volta 4{ \myDiskant % \bar "|." | } } myFretBoards = { \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 \myDiskant } } %% Layout = Noten mit Tab \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \omit Score.Fingering \myDiskant } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Midi \score { << \unfoldRepeats { \new Staff << \myKey \myGuitar >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=160\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> === Dreiklänge der E-Formen === Alle Akkorde der C-Durtonleiter in der E(m)-Form gespielt. * Den B° (Bdim) von der D7-Form (ohne Grundton) abzuleiten sollte nicht besonders schwer fallen. * G7 und C im vorletzten und letzten Takt diehnt hier nur der Anschauung, weniger zum Nachspielen. <score sound="1" raw="1"> \version "2.20.0" \header { title="Dreiklänge in C-Dur" subtitle="E(m)-Formen" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %% Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myChords = \chordmode { c1 d:m e:m e:m f g a:m b:dim c g:7 c } myDiskant = { < e'-2 g'-1 c''-1 >1 % C \set minimumFret = #1 \set TabStaff.restrainOpenStrings = ##t < f'-1 a'-1 d''-1 >1 % Dm < g'-1 b'-1 e''-1 >1 % Em \once { \set minimumFret = #0 \set TabStaff.restrainOpenStrings = ##f } < g b e' >1 % Em < a-2 c'-1 f'-1 >1 % F < b-2 d'-1 g'-1 >1 % G < c'-1 e'-1 a'-1 >1 % Am < d'-2 f'-1 b'-3 >1 % Bdim < e'-2 g'-1 c''-2 >1 % C < g-1 d'-3 f'-2 b'-4>1 % G7 < c-1 g-3 c'-4 e'-2 g'-1 c''-1 >1 % C } myGuitar = { \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp \repeat volta 4{ \myDiskant % \bar "|." | } } myFretBoards = { \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 \myDiskant } } %% Layout = Noten mit Tab \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \omit Score.Fingering \myDiskant } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Midi \score { << \unfoldRepeats { \new Staff << \myKey \myGuitar >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=160\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ==Kadenzen== Kadenzen sind typische Schlussformeln. Sie dienen der Übung und sie stehen formelhaft stellvertretend für alle Akkordfolgen, die man mit den Akkordfolgen bilden kann. ===Kadenzen ausgehend von der D-Form === <score sound="1" raw="1"> \version "2.20.0" \header { title="Kadenzen in C" subtitle="ausgehend von der D-Form" subsubtitle="Dreiklänge auf den Diskantsaiten" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myDiskant = { \repeat volta 4{ \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < g'\3 c''\2 e''\1 >2 % C < a'\3 c''\2 f''\1 > % F < g'\3 b'\2 d''\1 > % G < g'\3 c''\2 e''\1 > % C } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp < g'\3 c''\2 e''\1 >2 % C < a'\3 c''\2 f''\1 > % F < b'\3 d''\2 g''\1 > % G < g'\3 c''\2 e''\1 > % C } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < g'\3 c''\2 e''\1 >2 % C < f'\3 a'\2 c'' \1> % F < g'\3 b'\2 d''\1 > % G < g'\3 c''\2 e''\1 > % C } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" < g'\3 c''\2 e''\1 >2 % C < a'\3 c''\2 f''\1 > % F < f'\3 b'\2 d''\1 > % B° < g'\3 c''\2 e''\1 > % C } % } } myFretBoards = { \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 \myDiskant } } myChords = \chordmode { c2 f g c | c2 f g c | c2 f g c | c2 f b:dim c | } myGuitar = \myDiskant %% Layout \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \myGuitar } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \myKey \myDiskant >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=100\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> * Die erste Form ist die klassische Durkadenz wo sich die die Dominante G und die Subdominante F um die Tonika C grupieren. * Im zweiten Durchgang wird die Dominante nach oben hin weitergeführt (meist aus melodischen Gründen). Dabei behält die Dominante die Form der Subdominante bei. * Im dritten Durchgang wird die Subdominante nach unten geführt. Dabei bekommt sie die gleiche Form wie die Dominante. * Beim vierten Durchgang bleiben wir wieder wie am Anfang in der mittleren Position. Allerdings tauschen wir die Dominante durch den verminderten Akkord B° (Bdim) aus, der hier den G7 vertritt. Experimentiere mit den Möglichkeiten und versuche auch kleine Akkordfolgen und Melodien zu spielen. {{Tipp|1=Wenn du keine E-Gitarre hast, und dir ein Cutaway für die oberen Lagen fehlt, verschiebe die D-Form in den 5. Bund ( = F-Dur) und probiere alles von der Position aus. F-Bb-C-F|px=40}} ==== Problem: G-Form ==== <score sound="1" raw="1"> \version "2.20.0" \header { title="Problem: Triads in der G-Form" subtitle="auf den unteren drei Saiten" subsubtitle="Dreiklänge auf den Diskantsaiten" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 60 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myDiskant = { \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp \override NoteHead #'color = #darkgreen < g' b' d'' >1^\markup { \override #'(size . 2) %% Akkorddiagramm in Farbe { \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 10 "D" darkgreen ) (place-fret 2 12 "B" darkblue ) (place-fret 3 12 "G" black ) ) } } % G \override NoteHead #'color = #red < g' b' g'' >1^\markup { \override #'(size . 2) { \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 15 "G" black ) (place-fret 2 12 "B" darkblue ) (place-fret 3 12 "G" black ) ) } } % Gno5 \override NoteHead #'color = #red < g' d'' g'' >1^\markup { \override #'(size . 2) %% Akkorddiagramm in Farbe { \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 15 "G" black ) (place-fret 2 15 "D" darkgreen ) (place-fret 3 12 "G" black ) ) } } % G5 \override NoteHead #'color = #darkgreen < b' d'' g'' >1^\markup { \override #'(size . 2) { \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 15 "G" black ) (place-fret 2 15 "D" darkgreen ) (place-fret 3 16 "B" darkblue ) ) } } % G } myChords = \chordmode { g1 \once \override ChordName.text = "G(no5)" g:3 g:5 g } myGuitar = \myDiskant %% Layout \score { << %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \myGuitar } %% Tabulatur \new TabStaff { \tabFullNotation < g' b' d'' >1 % G < g' b' g'' >1 % Gno5 < g' d'' g'' >1 % G5 < b' d'' g'' >1 % G } >> \layout { \omit Voice.StringNumber \context { \Score \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/30) } } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \myKey \myDiskant >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=100\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Wenn man im CAGED-System die D-Form als Tonika und die A-Form als Dominante spielt, erwartet man intuitiv die G-Form als Subdominante. Schaut dir jedoch mal die G-Form auf den unteren drei Saiten an: * Beim zweiten Akkord Gno5 vermisst man die Quinte (5) D * und beim dritten Akkord G5 die Terz (3) B. Natürlich kannst du auch die G-Form verwenden, doch du solltest dir bewusst sein, dass der Klang unvollständig ist. Willst du den vollständigen Durdreiklang haben, musst du die CAGED-Scala, in der du dich gerade befindest, verlassen, und in die nächste Nachbar-Skala wechseln, wo sich der Dreiklang vollständig spielen lässt.<br> Dieses wäre ein Beispiel, warum man die [[Gitarre: CAGED-Skalen erweitern|CAGED-Skalen]] erweitert, und warum es lohnenswert ist, sich mit den [[Gitarre: Berklee-Skalen|Berklee-Skalen]] zu beschäftigen. === Kadenzen ausgehend von der Am-Form === <score sound="1" raw="1"> \version "2.20.0" \header { title="Kadenzen in Am" subtitle="ausgehend von der Am-Form" subsubtitle="Dreiklänge auf den Diskantsaiten" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myDiskant = { \repeat volta 4{ \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < a'\3 c''\2 e''\1 >2 % Am < a'\3 d''\2 f''\1 > % Dm < g'\3 b'\2 e''\1 > % Em < a'\3 c''\2 e''\1 > % Am } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp < a'\3 c''\2 e''\1 >2 % Am < a'\3 d''\2 f''\1 > % Dm < b'\3 e''\2 g''\1 > % Em < a'\3 c''\2 e''\1 > % Am } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < a'\3 c''\2 e''\1 >2 % Am < f'\3 a'\2 d''\1 > % Dm < g'\3 b'\2 e''\1 > % Em < a'\3 c''\2 e''\1 > % Am } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" < a'\3 c''\2 e''\1 >2 % Am < a'\3 d''\2 f''\1 > % Dm < gis'\3 b'\2 e''\1 > % E < a'\3 c''\2 e''\1 > % Am } % } } myFretBoards = { \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 \myDiskant } } myChords = \chordmode { a2:m d:m e:m a:m | a2:m d:m e:m a:m | a2:m d:m e:m a:m | a2:m d:m e a:m | } myGuitar = \myDiskant %% Layout \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \myGuitar } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \myKey \myDiskant >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=100\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> * Beginnen wir die Mollkadenz mit der Am-Form, so folgen die Formen Am Dm und Em bzw. E ganz intuitiv aufeinander. * Wir können auch hier aus melodischen Gründen die Dominante weiter nach oben führen, * oder die Subdominante weiter unten anfangen lassen. * Eine Mollkadenz ist schlüssiger, wenn die Dominante als Durakkord ausgeführt wird. === Kadenzen ausgehend von der A-Form === <score sound="1" raw="1"> \version "2.20.0" \header { title="Kadenzen in C" subtitle="ausgehend von der A-Form" subsubtitle="Dreiklänge auf den Diskantsaiten" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myDiskant = { \repeat volta 4{ \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < c'\3 e'\2 g'\1 >2 % C < c'\3 f'\2 a'\1 > % F < b\3 d'\2 g'\1 > % G < c'\3 e'\2 g'\1 > % C } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp < c'\3 e'\2 g'\1 >2 % C < a\3 c'\2 f'\1 > % F < b\3 d'\2 g'\1 > % G < c'\3 e'\2 g'\1 > % C } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < c'\3 e'\2 g'\1 >2 % C < c'\3 f'\2 a'\1 > % F < d'\3 g'\2 b'\1 > % G < c'\3 e'\2 g'\1 > % C } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" < c'\3 e'\2 g'\1 >2 % C < c'\3 f'\2 a'\1 > % F < b\3 d'\2 f'\1 > % B° < c'\3 e'\2 g'\1 > % C } % } } myFretBoards = { \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 \myDiskant } } myChords = \chordmode { c2 f g c | c2 f g c | c2 f g c | c2 f b:dim c | } myGuitar = \myDiskant %% Layout \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \myGuitar } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \myKey \myDiskant >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=100\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> * Die A-, D- und E-Form folgen in der Grundkadenz intuitiv aufeinander. * Die Weiterführung nach links sollte dir vom einfachen Bluesschrma mit Barrés vertraut sein. Von diesem werden quasi nur die unteren drei Saiten gespielt. * Die Weiterführung nach rechts ist nicht ganz so intuitiv, aber nicht sonderlich schwer. * Die Herleitung des Bdim (B°} wurde oben scon erläutert. === Kadenzen ausgehend von der Em-Form === <score sound="1" raw="1"> \version "2.20.0" \header { title="Kadenzen in Am" subtitle="ausgehend von der Em-Form " subsubtitle="Triads auf den unteren Saiten" % arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myDiskant = { \repeat volta 4{ \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < c'\3 e'\2 a'\1 >2 % Am < d'\3 f'\2 a'\1 > % Dm < b\3 e'\2 g'\1 > % Em < c'\3 e'\2 a'\1 > % Am } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp < c'\3 e'\2 a'\1 >2 % Am < a\3 d'\2 f'\1 > % Dm < b\3 e'\2 g'\1 > % Em < c'\3 e'\2 a'\1 > % Am } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < c'\3 e'\2 a'\1 >2 % Am < d'\3 f'\2 a'\1 > % Dm < e'\3 g'\2 b'\1 > % Em < c'\3 e'\2 a'\1 > % Am } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" < c'\3 e'\2 a'\1 >2 % Am < d'\3 f'\2 a'\1 > % Dm < b\3 e'\2 gis'\1 > % E < c'\3 e'\2 a'\1 > % Am } % } } myFretBoards = { \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 \myDiskant } } myChords = \chordmode { a2:m d:m e:m a:m | a2:m d:m e:m a:m | a2:m d:m e:m a:m | a2:m d:m e a:m | } myGuitar = \myDiskant %% Layout \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \myGuitar } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \myKey \myDiskant >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=100\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Die Kadenz die mit der Em-Form startet ist nicht besonders intuitiv. Zwei Akkorde kann man sich noch vergleichsweise gut von Akkordfolgen mit einfachen Akkorde ableiten, doch die dritte Form stammt aus einer benachbarten CAGED-Skala. Man muss die Abfolge schlicht und ergreifend so oft spielen, dass man nicht mehr drüber nachdenken muss. * Stelle dir bei der Weiterführung nach rechts Em Am Bm (als Barré) vor. ===Kadenzen ausgehend von der E-Form === <score sound="1" raw="1"> \version "2.20.0" \header { title="Kadenzen in C" subtitle="ausgehend von der E-Form" subsubtitle="Dreiklänge auf den Diskantsaiten" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myDiskant = { \repeat volta 4{ \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < e'\3 g'\2 c''\1 >2 % C < f'\3 a'\2 c''\1 > % F < d'\3 g'\2 b'\1 > % G < e'\3 g'\2 c''\1 > % C } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp < e'\3 g'\2 c''\1 >2 % C < f'\3 a'\2 c''\1 > % F < g'\3 b'\2 d''\1 > % G < e'\3 g'\2 c''\1 > % C } % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < e'\3 g'\2 c''\1 >2 % C < c'\3 f'\2 a' \1> % F < d'\3 g'\2 b'\1 > % G < e'\3 g'\2 c''\1 > % C } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" < e'\3 g'\2 c''\1 >2 % C < f'\3 a'\2 c''\1 > % F < d'\3 f'\2 b'\1 > % B° < e'\3 g'\2 c''\1 > % C } % } } myFretBoards = { \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 \myDiskant } } myChords = \chordmode { c2 f g c | c2 f g c | c2 f g c | c2 f b:dim c | } myGuitar = \myDiskant %% Layout \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \myGuitar } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \myKey \myDiskant >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=100\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> E-, A- und D-Form hört sich nicht sehr intuitiv an, was die Akkordformen angeht. Dabei hat man augenscheinlich nicht mal eine CAGED-Skala verlassen. * Versuche es mal wie F (Barrés), Bb und C(7)-Form zu betrachten. * Auch hier kann man aus melodischen Gründen die Dominante weiter nach oben führen, * oder die Subdominante weiter unten anfangen lassen. F- Bb- und C-Barré lässt sich leicht als Form nachvollziehen. * D-, D-, E ist leider weniger intuitiv. Betrachtest du die erste D-Form als C-Form, die zweite als D-Form (auch wenn es gleich aussieht) so müsste es sich in eine G-Form auflösen. Da die G-Form aber seine Macken hat (zumindest auf den unteren drei Saiten,) so stelle dir die G-Form als Barré gegriffen vor. Das mag in der Praxis zwar ein wenig ungewöhnlich sein, aber nicht mehr ganz so exotisch. * In der Kombination G Bm C D oder so ähnlich ist es mitunter praktischer sowohl G als auch Bm als Barré zu spielen, und dann ergeben die Akkordformen mehr Sinn. Das ganze CAGED-System beruht auf dem Prinzip, sich das Geschehen in den oberen Lagen des Griffbretts von den einfachen Akkorden am Anfang des Griffbretts abzuleiten; fast, als würde man ein Capo benutzen. * B° vertritt wieder G7. Hier ist es leicht, sich den von der D7-Form (ohne Grundton) abzuleiten. === Kadenzen ausgehend von der Dm-Form === <score sound="1" raw="1"> \version "2.20.0" \header { title="Kadenzen in Am" subtitle="ausgehend von der Dm-Form " subsubtitle="Triads auf den unteren Saiten" % arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myDiskant = { \repeat volta 4{ \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < e'\3 a'\2 c''\1 >2 % Am < f'\3 a'\2 d''\1 > % Dm < e'\3 g'\2 b'\1 > % Em < e'\3 a'\2 c''\1 > % Am } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp < e'\3 a'\2 c''\1 >2 % Am < d'\3 f'\2 a'\1 > % Dm < e'\3 g'\2 b'\1 > % Em < e'\3 a'\2 c''\1 > % Am } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp < e'\3 a'\2 c''\1 >2 % Am < f'\3 a'\2 d''\1 > % Dm < g'\3 b'\2 e''\1 > % Em < e'\3 a'\2 c''\1 > % Am } \break % \repeat volta 2{ \set Staff.midiInstrument = #"electric guitar (clean)" < e'\3 a'\2 c''\1 >2 % Am < f'\3 a'\2 d''\1 > % Dm < e'\3 gis'\2 b'\1 > % E < e'\3 a'\2 c''\1 > % Am } % } } myFretBoards = { \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 \myDiskant } } myChords = \chordmode { a2:m d:m e:m a:m | a2:m d:m e:m a:m | a2:m d:m e:m a:m | a2:m d:m e a:m | } myGuitar = \myDiskant %% Layout \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \myGuitar } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \myKey \myDiskant >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=100\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Die Kadenz ausgehend von der Dm-Form ist ebenfalls nicht besonders intuitiv und muss daher besonders geübt werden. Grund dafür ist, dass die Tonart Dm bei den Gitarristen nicht zu den beliebtesten gehört, da sie recht viele Barré-Akkorde enthält. ;Dm Gm Am Dm ;Dm Gm A Dm Es liegt quasi das gleiche Problem wie bei der G-Form vor. Terz und Quinte liegen auf der gleichen Saite, und können in dieser Lage nicht gleichzeitig gespielt werden. {{Tipp|1=Wenn du keine E-Gitarre hast, und dir ein Cutaway für die oberen Lagen fehlt, verschiebe die Dm-Form in den 5. Bund ( = Fm-Dur) und probiere alles von der Position aus. <br>Fm Bbm(7) Cm (o. C7) Fm|px=40}} === Problem: Gm-Form === <score sound="1" raw="1"> \version "2.20.0" \header { title="Problem: Triads in der Gm-Form" subtitle="auf den unteren drei Saiten" subsubtitle="Dreiklänge auf den Diskantsaiten" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 60 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myDiskant = { \set Staff.midiInstrument = #"electric guitar (jazz)" \stemUp \override NoteHead #'color = #darkgreen < g' bes' d'' >1^\markup { \override #'(size . 2) { \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 10 "D" darkgreen ) (place-fret 2 11 "Bb" darkblue ) (place-fret 3 12 "G" black ) ) } } % G \override NoteHead #'color = #red < g' bes' g'' >1^\markup { \override #'(size . 2) { \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 15 "G" black ) (place-fret 2 11 "Bb" darkblue ) (place-fret 3 12 "G" black ) ) } } % Gno5 \override NoteHead #'color = #red < g' d'' g'' >1^\markup { \override #'(size . 2) { \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 15 "G" black ) (place-fret 2 15 "D" darkgreen ) (place-fret 3 12 "G" black ) ) } } % G5 \override NoteHead #'color = #darkgreen < bes' d'' g'' >1^\markup { \override #'(size . 2) { \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 15 "G" black ) (place-fret 2 15 "D" darkgreen ) (place-fret 3 15 "Bb" darkblue ) ) } } % G } myChords = \chordmode { g1:m \once \override ChordName.text = "Gm(no5)" g:3 g:5 g:m } myGuitar = \myDiskant %% Layout \score { << %% Griffbilder %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \myGuitar } %% Tabulatur \new TabStaff { \tabFullNotation < g' b' d'' >1 % G < g' b' g'' >1 % Gno5 < g' d'' g'' >1 % G5 < b' d'' g'' >1 % G } >> \layout { \omit Voice.StringNumber \context { \Score \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/64) } } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \myKey \myDiskant >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm line-width=100\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Bei Mollakkorden kann man jedoch einen kleinen Trick anwenden. Du kannst jeden Mollakkord durch eine kleine Septime (7) ergänzen. Im Gegensatz zu den Dur-Akkorden ändert sich nichts an der Akkordfunktion. Eine kleine Septime kennzeichnet den Dur-Akkord als Dominante, oder zumindest als Zwischendominante. Wenn man zur Tonika oder Subdominante eine Septime hinzufügen möchte, so muss man eine große Septime wählen (maj7 oder kurz j7), wenn man sich nur aus dem Tonmaterial der aktuellen D-Dur-Tonleiter bedienen will. Bei Mollakkorden ändert sich durch die kleine Septime zwar etwas der Klang (man spricht eigentümlicherweise von Färbung bzw. Klangfärbung) doch ist diese nicht so stark, als dass sich die Akkordfunktion ändern würde. Man kann einem Moll-Akkord anhand der kleinen Septime nicht ansehen, ob er die Tonika-, Subdominanten- oder Dominantenparallele ist. Und man kann auch keine Funktion ausschließen. Lange Rede kurzer Sinn: Du kannst fast immer jeden Mollakkord als Moll7-Akkord spielen. Anstelle dir einen Akkord als Em-Form vorzustellen, kann es je nach Kontext sinnvoller sein, sich diesen als Gm7 vorzustellen; insbesondere wenn du diesen schon einmal beim Jazz (z.B. [[Gitarre: Akkordprogressionen/ Quintfall 25-11er-Kette|II-V-I-Verbindung]]) gebraucht hast. <div class="noprint" style="border:2px #666666 dashed; padding: 10px;"> <small>Die folgende Animation wird nicht mit ausgedruckt.</small> ; Bewegungsablauf Die C7-Form oder die C9-Form können gegeneinander ausgetauscht werden. :[[Datei:IIm7-V9-Ij7 animiert.gif]] </div> == Pachelble-Folge == Mit der Pachelbel-Folge lassen sich alle Dreiklänge einer Tonart in einer halbwegs gefälligen Akkordfolge spielen. Das Zupfmuster dient in erster Linie dazu, die Akkordwechsel nicht so schnell aufeinander folgen zu lassen, wie man es später in Solos machen würde. === Pachelble Folge in F (beginnend mit der D-Form) === <score sound="1" raw="1"> \version "2.20.0" \header { title="Dreiklänge in F-Dur (Diskantsaiten)" subtitle="Pachelble-Folge ausgehend von der D-Form" arranger = "CC-BY-SA Wikibooks (mjchael)" } myFretBoards = { \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 %% 1. System \repeat volta 4{ < c' f' a' >2 % F < c' e' g' > % C < d' f' a' > % Dm < c' e' a' > % Am < d' f' bes' > % Bb < c' f' a' > % F < bes d' g' > % Gm < bes e' g' > % E° (~C7) } < d' g' bes' > % Gm < e' g' bes' > % E° (~C7) < f' a' c'' >1 % F } } myChords = \chordmode { \repeat volta 4{ f2 c d:m a:m bes f g:m e:dim } g:m e:dim f1 } Melody = { \set Staff.midiInstrument = #"electric guitar (clean)" \set minimumFret = #3 \set TabStaff.restrainOpenStrings = ##t \stemUp \repeat volta 4{ < c' f' a' >8 c' <f' a'> c' % F < c' e' g' > c' <e' g'> c' % C \set Staff.midiInstrument = #"electric guitar (clean)" \set minimumFret = #5 < d' f' a' > d' <f' a'> d' % Dm < c' e' a' > c' <e' a'> c' % Am < d' f' bes'> d' <f' bes'> d' % Bb < c' f' a' > c' <f' a'> c' % F } \alternative { { \set minimumFret = #3 < bes d' g' > bes <d' g'> bes %Gm < bes e' g' > bes <e' g'> bes % E° (~C7) } { \set minimumFret = #6 < d' g' bes' > d' <g' bes'> d' % Gm < e' g' bes' > e' <g' bes'> e' % E° (~C7) < f' a' c'' >1 \bar "|." | } } } Gitarre = \Melody %% Layout = Noten mit Tab \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key f \major \Gitarre } %% Tabulatur \new TabStaff { \tabFullNotation \Gitarre } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 %% Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key f \major \Gitarre >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm %& DinA4 0 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Würdest du ein Capo in den 3. Bund setzen, dann würdest du in etwa wie folgt spielen. • D↗A→Bm↗F#m→G↗D→Em↘A7↘D :↗ Quinte (5) aufwärts :→ Sekunde (2) aufwärts :↘ Quinte (5) abwärts (II-V-I-Schluss) ;Beachte: Quinten und Sekunden wechseln sich bis auf den letzten Akkord ab. Bei den Sekundenschritten wechselt man immer von Dur nach Moll und umgekehrt. * G könntest du im 3. Bund (wie ein Barré) spielen. * Und du siehst, dass E° (Edim) den A7 vertritt. • Das alternative Ende am Schluss zeigt dir eine Möglichkeit, in eine höhere Lage zu wechseln. === Pachelble Folge in D (beginnend mit der A-Form) === <score sound="1" raw="1"> \version "2.20.0" \header { title="Dreiklänge in D-Dur (Diskantsaiten)" subtitle="Pachelble-Folge ausgehend von der A-Form" arranger = "CC-BY-SA Wikibooks (mjchael)" } myFretBoards = { \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 %% 1. System \repeat volta 4{ < d' fis' a' >2 % D < cis' e' a' > % A < d' fis' b' > % Bm < cis' fis' a' > % F#m < d' g' b' > % G < d' fis' a' > % D < b e' g' > % Em < cis' e' g' > % C#° (~A7) } < e' g' b' > % Em < e' g' cis' > % C#° (~A7) < fis' a' d'' >1 % D } } myChords = \chordmode { \repeat volta 4{ d2 a b:m fis:m g d e:m cis:dim } e:m cis:dim d1 } Melody = { \set Staff.midiInstrument = #"electric guitar (clean)" \set minimumFret = #5 \set TabStaff.restrainOpenStrings = ##t \stemUp \repeat volta 4{ < d' fis' a' >8 d' fis' a' % D < cis' e' a' > cis' e' a' % A < d' fis' b' > d' fis' b' % Bm < cis' fis' a' > cis' fis' a' % F#m < d' g' b' > d' g' b' % G < d' fis' a' > d' fis' a' % D } \alternative { { \set minimumFret = #3 < b e' g' > b e' g' % Em < cis' e' g' > cis' e' g' % C#° (~A7) } { \set minimumFret = #6 < e' g' b' > e' g' b' % Em < e' g' cis'' > e' g' cis'' % C#° (~A7) < fis' a' d'' >1 % D \bar "|." | }}} Gitarre = \Melody %% Layout = Noten mit Tab \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key d \major \Gitarre } %% Tabulatur \new TabStaff { \tabFullNotation \Gitarre } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 %% Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key d \major \Gitarre >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm %& DinA4 0 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Würdest du ein Capo in den 5. Bund setzen, dann würdest du in etwa wie folgt spielen. • A↗E→F#m↗C#m→D↗A→Bm↘E7↘A Würdest du ein Capo in den 4. Bund setzen, dann würdest du in etwa wie folgt spielen. • Bb↗F→Gm7↗Dm→Eb↗Bb→Cm↘F7↘Bb :↗ Quinte (5) aufwärts :→ Sekunde (2) aufwärts :↘ Quinte (5) abwärts (II-V-I-Schluss) Manchmal ist es praktischer, die Akkordfolge wie die A-Dur-Tonart zu betrachten, manchmal erklären sich die Akkordformen mit der Bb-Dur-Tonleiter leichter; (auch wenn es nicht unbedingt die bevorzugte Tonart der Gitarristen ist.) {{todo|Quelltextformatierung. auf Stimmigkeit und Folgerichtigkeit überprüfen. Ggf. Muss die eine oder andere Umkehrung überprüft werden.|Sologitarre|Mjchael}} === Pachelble Folge in A (beginnend mit der E-Form) === <score sound="1" raw="1"> \version "2.20.0" \header { title="Dreiklänge in A-Dur (Diskantsaiten)" subtitle="Pachelble-Folge ausgehend von der E-Form" arranger = "CC-BY-SA Wikibooks (mjchael)" } myFretBoards = { \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 %% 1. System \repeat volta 4{ < cis' e' a' >2 % A < b e' gis' > % E < cis' fis' a' > % F#m < cis' e' gis' > % C#m < d' fis' a' > % D < cis' e' a' > % A < b d' fis' > % Bm < b d' gis' > % G#° (~E7) } < d' fis' b' > % Bm < d' gis' b' > % G#° (~E7) < e' a' cis'' >1 % A } } myChords = \chordmode { \repeat volta 4{ a2 e fis:m cis:m d a b:m gis:dim } b:m gis:dim a1 } Melody = { \set Staff.midiInstrument = #"electric guitar (clean)" \set minimumFret = #3 \set TabStaff.restrainOpenStrings = ##t \stemUp \repeat volta 4{ < cis' e' a' >8 a' e' cis' % A < b e' gis' > gis' e' b % E < cis' fis' a' > a' fis' cis' % F#m < cis' e' gis' > gis' e' cis' % C#m < d' fis' a' > a' fis' d' % D < cis' e' a' > a' e' cis' % A } \alternative { { \set minimumFret = #2 < b d' fis' > fis' d' b % Bm < b d' gis' > gis' d' b % G#° (~E7) } { \set minimumFret = #6 < d' fis' b' > b' fis' d' % Bm < d' gis' b' > b' gis' d' % G#° (~E7) < e' a' cis'' >1 % A \bar "|." | }}} Gitarre = \Melody %% Layout = Noten mit Tab \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key d \major \Gitarre } %% Tabulatur \new TabStaff { \tabFullNotation \Gitarre } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 %% Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key d \major \Gitarre >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm %& DinA4 0 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Würdest du ein Capo in den 5. Bund setzen, dann würdest du in etwa wie folgt spielen. * E↗B→C#m↗G#m→A↗E→F#m↘B7↘E Würdest du ein Capo in den 4. Bund setzen, dann würdest du in etwa wie folgt spielen. * F↗C→Dm7↗Am→Bb↗F→Dm↘C7↘F :↗ Quinte (5) aufwärts :→ Sekunde (2) aufwärts :↘ Quinte (5) abwärts (II-V-I-Schluss) Manchmal ist es praktischer, die Akkordfolge wie die E-Dur-Tonart zu betrachten, manchmal erklären sich die Akkordformen mit der F-Dur-Tonleiter leichter; (auch wenn es nicht unbedingt die bevorzugte Tonart der Gitarristen ist.) ===Pachelble Folge mit allen Umkehrungen in C-Dur === Fassen wir die drei vorhergehenden Übungen in eine einzige zusammen. <score sound="1" raw="1"> \version "2.20.0" \header { title="Dreiklänge in C-Dur (Diskantsaiten)" subtitle="Pachelble-Akkordfolge" arranger = "CC-BY-SA Wikibooks (mjchael)" } myFretBoards = { \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 %% 1. System < g c' e' >2 % C < g b d' > % G < a c' e' > % Am < g b e' > % Em < a c' f' > % F < g c' e' > % C < a d' f' > % Dm < b d' f' > % B° (~G7) \break %% 2. System < c' e' g'\1 > % C < b d' g' > % G < c' e' a' > % Am < b e' g'\1 > % Em < c' f' a' > % F < c' e' g'\1 > % C < d' f' a' > % Dm < d' f' b' > % B° (~G7) \break %% 3. System < e' g' c'' > % C < d' g' b' > % G < e' a' c'' > % Am < e' g' b' > % Em < f' a' c'' > % F < e' g' c'' > % C < f' a' d'' > % Dm < f'\3 b'\2 d'' > % B° (~G7) % \break < g' c'' e'' >4 < g' b' d'' >4 < g' c'' e'' >2 } } myChords = \chordmode { c2 g a:m e:m f c d:m b:dim c2 g a:m e:m f c d:m b:dim c2 g a:m e:m f c d:m b:dim c4 g c2 } Melody = { \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp \repeat volta 4{ %% 1. System < g e' c' >8 e' c' g \set minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t \override NoteHead #'color = #red < g d' b > d' b g | % C G \override NoteHead #'color = #black \set minimumFret = #0 \set TabStaff.restrainOpenStrings = ##f < a e' c' > e' c' a < g e' b > e' b g | % Am Em < a f' c' > f' c' a < g e' c' > e' c' g | % F C < a f' d' > f' d' a \set minimumFret = #1 \set TabStaff.restrainOpenStrings = ##t < b\3 f' d' > f' d' b\3| % Dm B° (~G7) \break %% 2. System \set minimumFret = #3 < c'\3 e'\2 g'\1 >8 g' e' c' \set minimumFret = #1 < b g' d' > g' d' b | % C G \set minimumFret = #4 < c' a' e' > a' e' c' < b g'\1 e' > g'\1 e' b | % Am Em < c' a' f' > a' f' c' < c' g'\1 e' > g'\1 e' c' | % F C \set minimumFret = #4 < d' a' f' > a' f' d' < d' b' f' > b' f' d' | % Dm B° (~G7) \break %% 3. System \set minimumFret = #6 < e' c'' g' >8 c'' g' e' < d' b' g' > b' g' d' | % C G < e' c'' a' > c'' a' e' < e' b' g' > b' g' e' | % Am Em \set minimumFret = #7 < f' c'' a' > c'' a' f' < e' c'' g' > c'' g' e' | % F C < f' d'' a' > d'' a' f' < f'\3 d'' b'\2 > d'' b'\2 f' | % Dm B° (~G7) % \break < g' c'' e'' >4 \override NoteHead #'color = #green < g' b' d'' >4 \override NoteHead #'color = #black < g' c'' e'' >2 % \bar "|." | }} Gitarre = \Melody %% Layout = Noten mit Tab \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major \Gitarre } %% Tabulatur \new TabStaff { \tabFullNotation \Gitarre } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \tempo 4 = 120 %% Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major \Gitarre >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm %& DinA4 0 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> Am Anfang des Griffbretts muss man sich mit den leeren Saiten beschäftigen. Ab dem 12. Bund werden die Fingersätze enger und Gitarristen mit einer Klassik- oder einer Akkustikgitarre ohne Cutaway werden vom Korpus der Gitarre behindert. Also gehen wir kleine Kompromisse ein. * Um G in der Grundform zu spielen, wurde das Arpeggio eine Saitenlage höher gespielt. * Damit Akkustik- und Klassikgitarrenspieler nicht weit über den 12. Bund hinaus müssen, wurde der letzte Takt nur noch um die fehlende Grundform des G auf den Diskantsaiten vervollständigt. * Ab dem 12. Bund wiederhohlt sich praktisch alles, und so könnten alle drei Umkehrungen vom G vollständig auf den Diskantsaiten gespielt werden. Zumindest diejenigen die eine E-Gitarre oder einen Cutaway haben. ;Du spielst mit dieser Etüde * alle Akkorde der C-Durtonleiter <br> C Dm Em F G Am B° C * jeden Akkord in seinen drei Umkerungen<br>Grundstellung • 1. Umkehrung • 2. Umkehrung * In einer halbwegs gefälligen Akkordfolge ; Weblinks Die gezeigten Übungen und Etüden legen Grundlagen um sich anspruchsvollere Arangements anzueignen oder selbst zu entwickeln. * '''Y{{Farbe|white|red|T}}''' [https://m.youtube.com/watch?v=C9A73VNwgBM&t=1m45s Pachelbel’s Canon (Classical/Pop Guitar) (Vince Carrola)] ==Quintfallsequenz== === Quintfallsequenz in Am === Wen du gerade im 12. Bund angekommen bist, wie wäre es, jetzt rückwärts zu gegen. Auch in dieser Übung spielen wir alle Umkehrungen aller Akkorde der A-Moll-Tonleiter auf den Diskantsaiten. Dass sich einmal kurzfristig ein G# einschleicht (Terz von E-Dur) sollte keine Herausforderung darstellen. <score sound="1" raw="1"> \version "2.20.0" \header { title="Dreiklänge in Am (Diskantsaiten)" subtitle="Quintfallsequenz" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key c \major } myFretBoards = { \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 < a'\3 c''\2 e''\1 >2 % Am < a'\3 d''\2 f''\1 > % Dm < g'\3 b'\2 d''\1 > % G < g'\3 c''\2 e''\1 > % C < f'\3 a'\2 c''\1 > % F < f'\3 b'\2 d''\1 > % B° < e'\3 g'\2 b'\1 > % Em < e'\3 gis'\2 b'\1 > %E %% 2. System < e'\3 a'\2 c''\1 > % Am < f'\3 a'\2 d''\1 > % Dm < d'\3 g'\2 b'\1 > % G < e'\3 g'\2 c''\1 > % C < c'\3 f'\2 a'\1 > % F < d'\3 f'\2 b'\1 > % B° < b\3 e'\2 g'\1 > % Em < b\3 e'\2 gis'\1 > % E %% 3. System < c'\3 e'\2 a'\1 > % Am < d'\3 f'\2 a'\1 > % Dm < b\3 d'\2 g'\1 > % G < c'\3 e'\2 g'\1 > % C < a\3 c'\2 f'\1 > % F < b\3 d'\2 f'\1 > % B° < g\3 b\2 e'\1 > % Em < gis\3 b\2 e'\1 > % E < a\3 c'\2 e'\1 >1 % Am } } myChords = \chordmode { a2:m d:m g c f b:dim e:m e a2:m d:m g c f b:dim e:m e a2:m d:m g c f b:dim e:m e a1:m } myDiskant = { \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp \repeat volta 4{ %% 1. System \set minimumFret = #12 \set TabStaff.restrainOpenStrings = ##t < a' c'' e'' >8 a' c'' e'' % Am < a' d'' f'' >8 a' d'' f'' % Dm \set minimumFret = #10 < g' b' d'' >8 g' b' d'' % G < g' c'' e'' >8 g' c'' e'' % C \set minimumFret = #8 < f' a' c'' >8 f' a' c'' % F < f' b' d'' >8 f' a' c'' % B° \set minimumFret = #7 < e' g' b' >8 e' g' b' % Em < e' \tweak color #red gis' b' >8 e' \tweak color #red gis' b' % E %% 2. System \set minimumFret = #8 < e' a' c'' >8 e' a' c'' % Am < f' a' d'' >8 f' a' d'' % Dm \set minimumFret = #7 < d' g' b' >8 d' g' b' % G < e' g' c'' >8 e' g' c'' % C \set minimumFret = #5 < c' f' a' >8 c' f' a' % F < d' f' b' >8 d' f' b' % B° \set minimumFret = #3 < b e' g' >8 b e' g' % Em < b e' \tweak color #red gis' >8 b e' \tweak color #red gis' % E %% 3. System \set minimumFret = #5 < c' e' a' >8 c' e' a' % Am < d' f' a' >8 d' f' a' % Dm \set minimumFret = #3 < b d' g' >8 b d' g' % G < c' e' g' >8 c' e' g' % C \set minimumFret = #1 < a c' f' >8 a c' f' % F \set minimumFret = #0 \set TabStaff.restrainOpenStrings = ##f < b d' f' >8 b d' f' % B° < g b e' >8 g b e' % Em < \tweak color #red gis b e' >8 \tweak color #red gis b e' % E < a c' e' >1 % Am % \bar "|." | }} myGuitar = \myDiskant %% Layout \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \myGuitar } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \myKey \myGuitar >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm %& DinA4 0 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> ===Quintfallsequenz in Dm (fallend und steigend)=== Diese Übung soll dir zeigen, dass man die Quintfallsequenz aufwärts und abwärts führen kann. Die Akkorde können ein Grundgerüst für Solos liefern. <score sound="1" raw="1"> \version "2.20.0" \header { title="Dreiklänge in Dm (Diskantsaiten sinkend)" subtitle="Quintfallsequenz" subtitle="fallend und steigend" arranger = "CC-BY-SA Wikibooks (mjchael)" } myKey = { \tempo 4 = 120 %Tempo ausblenden \set Score.tempoHideNote = ##t \clef "G_8" \time 4/4 \key d \minor } myFretBoards = { \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 < d'\3 f'\2 a'\1 >2 % Dm < d'\3 g'\2 bes'\1 > % Gm < c'\3 e'\2 g'\1 > % C < c'\3 f'\2 a'\1 > % F < bes\3 d'\2 f'\1 > % Bb < bes\3 e'\2 g'\1 > % Edim < a\3 c'\2 e'\1 > % Am < a\3 cis'\2 e'\1 > % A \break < a\3 d'\2 f'\1 >2 % Dm < bes\3 d'\2 g'\1 > % Gm < c'\3 e'\2 g'\1 > % C < c'\3 f'\2 a'\1 > % F < d'\3 f'\2 bes'\1 > % Bb < e'\3 g'\2 bes'\1 > % Edim < e'\3 a'\2 c''\1 > % Am < e'\3 a'\2 cis''\1 > % A } < f'\3 a'\2 d''\1 >1 % Dm } myChords = \chordmode { d2:m g:m c f bes e:dim a:m a d2:m g:m c f bes e:dim a:m a d1:m } myDiskant = { \set Staff.midiInstrument = #"electric guitar (clean)" \stemUp \repeat volta 4{ \set minimumFret = #2 \set TabStaff.restrainOpenStrings = ##t < d'\3 f'\2 a'\1 >8 d'\3 <f'\2 a'\1> d'\3 % Dm < d'\3 g'\2 bes'\1 > d'\3 <g'\2 bes'\1 > d'\3 % Gm < c'\3 e'\2 g'\1 > c'\3 <e'\2 g'\1 > c'\3 % C < c'\3 f'\2 a'\1 > c'\3 <f'\2 a'\1 > c'\3 % F < bes\3 d'\2 f'\1 > bes\3 <d'\2 f'\1 > bes\3 % Bb < bes\3 e'\2 g'\1 > bes\3 <e'\2 g'\1 > bes\3 % Edim < a\3 c'\2 e'\1 > a\3 <c'\2 e'\1 > a\3 % Am < a\3 \tweak color #red cis'\2 e'\1 > a\3 < \tweak color #red cis'\2 e'\1 > a\3 % A \break < a\3 d'\2 f'\1 >8 a\3 < d'\2 f'\1 > a\3 % Dm < bes\3 d'\2 g'\1 > bes\3 < d'\2 g'\1 > bes\3 % Gm < c'\3 e'\2 g'\1 > c'\3 < e'\2 g'\1 > c'\3 % C < c'\3 f'\2 a'\1 > c'\3 < f'\2 a'\1 > c'\3 % F < d'\3 f'\2 bes'\1 > d'\3 < f'\2 bes'\1 > d'\3 % Bb < e'\3 g'\2 bes'\1 > e'\3 < g'\2 bes'\1 > e'\3 % Edim < e'\3 a'\2 c''\1 > e'\3 < a'\2 c''\1 > e'\3 % Am < e'\3 a'\2 \tweak color #red cis''\1 > e'\3 < a'\2 \tweak color #red cis''\1 > e'\3 % A } < f'\3 a'\2 d''\1 >1 % Dm % \bar "|." | } myGuitar = \myDiskant %% Layout \score { << %% Griffbilder \myFretBoards %% Akkordnamen \new ChordNames { \myChords } %% Noten \new Voice { \myKey \myGuitar } %% Tabulatur \new TabStaff { \tabFullNotation \myGuitar } >> \layout { \omit Voice.StringNumber } } %% Migiausgabe \score { << \unfoldRepeats { \new Staff << \myKey \myGuitar >> } >> \midi {} } %& unterdrückt im raw="1"-Modus das DinA4-Format. \paper { indent=0\mm %& DinA4 0 210mm - 10mm Rand - 20mm Lochrand = 180mm line-width=180\mm oddFooterMarkup=##f oddHeaderMarkup=##f % bookTitleMarkup=##f scoreTitleMarkup=##f } </score> t1jvjut22j1bt02k7p668mngyc55yzl Astronomie von der Frühgeschichte bis zur Neuzeit/ Bedeutung in anderen Disziplinen 0 121622 1090401 1090017 2026-09-06T00:20:04Z Bautsch 35687 /* Der Himmelsthron */ 13. Jh. 1090401 wikitext text/x-wiki Viele Bezeichnungen für verschiedene Lehren werden mit der aus dem Altgriechischen stammenden Endung "-logie" (altgriechisch λόγος ("logos"), zu Deutsch „Lehre“) gebildet. Die folgenden Disziplinen sind in diesem Kontext hervorzuheben, da sie insbesondere für die '''{{w|Archäoastronomie}}''' wertvolle wissenschaftliche Ergänzungen zur '''{{w|Astronomie}}''' (aus den altgriechischen Wörtern ἄστρον ("ástron", zu Deutsch „Stern“) und νόμος ("nómos, zu Deutsch „Gesetz“) zusammengesetzt also „Sterngesetz“) liefern: * Die '''{{w|Archäologie}}''' (zusammengesetzt mit dem altgriechischen Wort ἀρχαῖος ("archaios"), zu Deutsch „Altertumslehre“) beschäftigt sich mit der kulturellen Entwicklung der Menschheit. * Die '''{{w|Etymologie}}''' (zusammengesetzt mit dem altgriechischen Wort ἔτυμος ("etymos"), zu Deutsch „Wortherkunftslehre“) untersucht die geschichtliche Herkunft von Wörtern. * Die '''{{w|Mythologie}}''' (zusammengesetzt mit dem altgriechischen Wort μῦθος ("mythos"), zu Deutsch „Erzählungslehre“), die sich wissenschaftlich mit der Sagenwelt beschäftigt. * Die '''{{w|Theologie}}''' (zusammengesetzt mit dem altgriechischen Wort θεός ("theós"), zu Deutsch „Gotteslehre“) mit ihren Lehren zum religiösen Glauben und dessen Glaubensdokumenten. * Die '''{{w|Kosmologie}}''' (zusammengesetzt mit dem altgriechischen Wort κόσμος ("kósmos"), zu Deutsch „Weltenlehre“) ist hingegen eine Lehre, die sich im Laufe der Jahrtausende deutlich verändert hat und sich auch heute noch erheblich weiterentwickelt, da es in der modernen Astronomie und Astrophysik mit zunehmend hohem technischem Aufwand immer wieder zu neuen Erkenntnissen kommt. * Die '''{{w|Numerologie}}''' (zusammengesetzt mit dem lateinischen Wort numerus, zu Deutsch „Zahlenlehre“) mit ihren mystischen Lehren über die symbolische Zuweisung von Bedeutungen an Zahlen. Von der Antike bis ins Mittelalter galt die Beherrschung der '''{{w|sieben freien Künste}}''' als Voraussetzung für das Betreiben von Philosophie. Zu den drei "trivialen" Künsten der {{w|Grammatik}}, der {{w|Rhetorik}} und der {{w|Dialektik}} des '''{{w|Trivium|Triviums}}''' wurden die vier Künste der {{w|Musiktheorie}}, der {{w|Arithmetik}}, der {{w|Geometrie}} und der {{w|Astronomie}} zu den Künsten des '''{{w|Quadrivium|Quadriviums}}''' gezählt → siehe hierzu auch [[Quadriviale_Kuriositäten|'''Wikibook ''Quadriviale Kuriositäten''''']]. == Zur Etymologie == Die Genesis aus dem Alten Testament greift die Thematik der Verwirrung der einheitlichen Sprache in ihrem elften Kapitel auf, und beschreibt, wie die bereits sternenkundigen Menschen im Norden Mesopotamiens übermütig geworden waren und in Babel einen Turm mit einer Spitze '''bis in den Himmel''' errichten wollten:<ref>[https://www.bibleserver.com/EU/1.Mose11 Genesis 11], Genesis, Kapitel 11, Einheitsübersetzung</ref> <blockquote> 1 Die ganze Erde hatte eine Sprache und ein und dieselben Worte.<br/> 2 Als sie ostwärts aufbrachen, fanden sie eine Ebene im Land Schinar und siedelten sich dort an.<br/> 3 Sie sagten zueinander: Auf, formen wir Lehmziegel und brennen wir sie zu Backsteinen. So dienten ihnen gebrannte Ziegel als Steine und Erdpech als Mörtel.<br/> 4 Dann sagten sie: Auf, bauen wir uns eine Stadt und einen Turm mit einer Spitze '''bis in den Himmel'''! So wollen wir uns einen Namen machen, damit wir uns nicht über die ganze Erde zerstreuen.<br/> 5 Da stieg der HERR herab, um sich Stadt und Turm anzusehen, die die Menschenkinder bauten.<br/> 6 Und der HERR sprach: Siehe, ein Volk sind sie und eine Sprache haben sie alle. Und das ist erst der Anfang ihres Tuns. Jetzt wird ihnen nichts mehr unerreichbar sein, wenn sie es sich zu tun vornehmen.<br/> 7 Auf, steigen wir hinab und verwirren wir dort ihre Sprache, sodass keiner mehr die Sprache des anderen versteht.<br/> 8 Der HERR zerstreute sie von dort aus über die ganze Erde und sie hörten auf, an der Stadt zu bauen.<br/> 9 Darum gab man der Stadt den Namen Babel, Wirrsal, denn dort hat der HERR die Sprache der ganzen Erde verwirrt und von dort aus hat er die Menschen über die ganze Erde zerstreut. </blockquote> Es mag weniger verwunderlich sein, dass Schöpfungsmythen oder Berichte über Katastrophen nicht nur einen astronomischen Hintergrund haben, sondern in völlig verschiedenen Kulturen sehr ähnliche Merkmale zeigen, wenn man sich das Folgende bewusst macht: Einige Indizien deuten auf einen für viele Kulturen gemeinsamen Ursprung hin, der auf eine tiefsinnige Betrachtung und Beobachtung des Himmelsgeschehens hindeutet. Bei bestimmten Wörtern sind die Ähnlichkeiten in vielen lebenden und toten Sprachen so auffällig, dass sie ein gemeinsames Ursprungswort (Etymon) haben und somit Kognaten sein dürften. === "Stern" === Bei den Wörtern „Gestirn“ beziehungsweise „Stern“ sind die Ähnlichkeiten in vielen lebenden und toten Sprachen sehr auffällig, und diese Verwandtschaften mögen durch die Wörter für "Stern" in den folgenden Sprachen belegt werden: * Akkadisch "istar" * Indogermanisch "ster" * Griechisch "astro" / "asteri" * Lateinisch "astrum" / "stella" * Althochdeutsch "stern(o)" * Jiddisch "shtern" * Katalanisch und Spanisch "estrella" * Portugiesisch "estrela" * Englisch "star" * Niederländisch "ster" * Westfriesisch "stjer" * Italienisch und Korsisch "stella" * Rumänisch "stea" * Sardisch "istedda" * Maltesisch "stilla" * Französisch "étoile" aus Altfranzösisch "estoile" * Galicisch "estrela" * Walisisch "seren" * Dänisch und Norwegisch "stjerne" * Schwedisch "stjärna" * Isländisch "stjarna" * Kurdisch "stêrk" * Gujarati "Tārō" * Hindi "तारा" (taara) * Marathi "तारा" (Tārā) * Nepalesisch "तारा" (Tārā) * Punjabi "ਤਾਰਾ" (Tārā) * Singhalesisch "තරුව" (taruva) * Khmer "តារា" (tara) * Armenisch "աստղ" (astgh) * Tadschikisch "ситора" (sitora) * Hausa "tauraro" * Krio "sta" === "Stier" === Eine starke Ähnlichkeit gibt es in vielen Sprachen auch zwischen den Wörtern „Stern“ und „Stier“. Der Stier bezeichnet zudem auch ein bedeutendes und eines der ältesten Sternbilder überhaupt: → Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|'''Himmelsstier''']]. * Akkadisch und Assyrisch "šūru" * Aramäisch "tōra" * Hebräisch "šǒr" * Ugaritisch "twr" * Arabisch "ثور" ("thawr") * Griechisch "ταύρος" ("tauros") * Lateinisch "taurus" * Althochdeutsch "stior" * Italienisch, Katalanisch und Spanisch "toro" * Galicisch "touro" * Gallisch "tarvos" * Französisch "taureau" * Schwedisch "tjur" * Dänisch "tyr" * Irisch und Gälisch "tarbh" * Wallisisch "tarw" === "Horn" === Auch die Hörner des Stieres betreffend setzen sich die vielen Ähnlichkeiten fort: * Akkadisch "carnu" * Aramäisch "qeren" * Griechisch "κόρνο" ("korno") * Lateinisch "cornu" * Maltesisch "qrun"* * Arabisch "قرون" ("qurun") * Französisch "corne" * Italienisch "corne" * Rumänisch "corn" * Haitianisch "kòn" === "Sieben" === Die in vielen Kulturen als heilig angesehene Zahl Sieben taucht im Zusammenhang mit der Astronomie als Anzahl der mit bloßem Auge sichtbaren Wandelgestirne und als Zahl der Hauptsterne in vielen Asterismen auf: * Sieben Wandelgestirne: Sonne Mond, Merkur, Venus, Mars, Jupiter, Saturn * Siebengestirn im Himmelsstier: Alkione, Atlas, Electra, Maia, Merope, Taygeta, Pleione * Sternbild Orion: Beteigeuze, Rigel, Bellatrix, Alnilam, Alnitak, Saiph, Mintaka * Asterismus Großer Wagen: Alioth, Dubhe, Alkaid, Mizar, Merak, Phekda, Megrez → Siehe auch: * [[Quadriviale_Kuriositäten/_Zahlen#Zur_Sieben|'''Zur Sieben''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Der_Fixsternhimmel#Die_sieben_hellsten_Objekte_der_Ekliptik|'''Die sieben hellsten Objekte der Ekliptik''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Kalenderführung#Die_Siebentagewoche|'''Die Siebentagewoche''']]. Wegen der hohen kulturellen, rituellen oder mythischen Bedeutung gibt es in vielen Kulturen und Sprachen etymologische Übereinstimmungen: * Akkadisch "sebe" * Proto-Indoeuropäisch "septḿ̥" * Hetitisch "sipta" * Proto-Germanisch "*sebun" * Althochdeutsch "sibun" * Hebräisch "sajin" (Buchstabe) oder "scheva" (Wort) * Etruskisch "semph" * Maltesisch "sebgħa" * Arabisch "sabʿa" * Griechisch "επτά" ("(h)epta") * Lateinisch "septem" * Ungarisch "het" * Proto-Balto-slawisch "septin" * Proto-Indo-Iranisch "saptá" * Katalanisch "set" * Spanisch "siete" * Galicisch "sete" * Lettisch "septiņi" * Italienisch "sette" * Französisch "sept" * Englisch "seven" * Wallisisch "saith" * Bosnisch / Kroatisch "sedam" * Rumänisch "șapte" * Irisch "seacht" * Swahili "saba" * Haitianisch "sèt" == Zur Mythologie == Seit Jahrtausenden blicken Menschen in den Nachthimmel und versuchen, die unzähligen Lichter am Firmament zu deuten. Schon früh begannen sie, die von ihnen erfundenen Sternbilder und die unablässig durch den Himmel ziehenden Wandelgestirne durch Geschichten über Götter, Helden oder andere Wesen zu interpretieren, zu erzählen und zum Teil über Jahrhunderte hinweg zu tradieren. Die '''Mythologie''' spielte dabei eine zentrale Rolle: Sie half nicht nur, eine symbolische Ordnung in den geheimnisvollen Kosmos zu bringen, sondern prägte auch viele der Bezeichnungen und Vorstellungen, die bis heute in der beschreibenden Astronomie überlebt haben. Die Verbindung zwischen Mythologie und Astronomie ist tief verwurzelt und zeugt vom menschlichen Bedürfnis, das wahrgenommene, aber dennoch unfassbare Universum durch räumliche und zeitliche Vorstellungen sowie durch Erzählungen begreifbar zu machen. Das Geschehen am Himmel musste auf die Menschen vor der Erfindung der Bewegtbilder und des Films in der späten Neuzeit sowohl attraktiv als auch spektakulär gewirkt haben. So konnten verschiedene mythische Gestalten am Himmel durch ihre scheinbaren Handlungen wahrgenommen werden. Durch die Wiederholung solcher Deutungen konnten sich besonders beliebte Mythen im kulturellen Kontext über die Zeit verfestigen, und entsprechende Riten konnten sich etablieren. Damit war auch eine wesentliche Voraussetzung für den Glauben der Menschen an eine höhere Macht oder mehrere höhere Mächte gegeben. Der Begriff '''Religion''' stammt vom lateinischen Inifiniv "relegere" ab. Dieses Verb bedeutet wörtlich übersetzt "wieder lesen" und meint im Sinne von "überdenken" das bewusste Wahrnehmen von Prophezeiungen oder Omen sowie das nachhaltige Beachten tradierter Vorschriften. '''→ Siehe:''' * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|'''Der Urozean''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Sagenwelt|'''Die Plejaden / Sagenwelt''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Mythologie|'''Der Himmelsstier''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Babylonische_Himmelswege|'''Babylonische Himmelswege''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Mithraskult|'''Mithraskult und Tauroktonie''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Höhlenmalerei_in_der_Magura-Höhle|'''Die Höhlenmalerei in der Magura-Höhle''']]. == Zur Theologie == Die '''Theologie''' (vom Altgriechischen θεός = theós = Gott und λόγος = lógos = Lehre) ist die Lehre von einem Gott oder von mehreren Göttern. Sie lehrt einen ausgeprägten religiösen Glauben, begründet rituelle Traditionen und deutet die vorhandenen Glaubensdokumente. [[Datei:Aristoteles.Theologie.png|mini|rechts|Wahrnehmbarkeit und Vergänglichkeit nach Aristoteles]] Die Theologie des '''{{w|Aristoteles}}''' (384–322) postuliert drei mögliche Substanzen:<ref>Aristoteles: ''Metaphysik'', Kapitel XII (Λ), Philosophische Theologie, Seiten 1069a –1076a</ref> {| class="wikitable" |+ Mögliche Substanzen nach Aristoteles ! Nummer !! Substanz !! Erläuterung !! Interpretationsbeispiel |- | 1. || Die sinnlich wahrnehmbare und vergängliche Substanz || Konkrete Dinge, die nur eine begrenzte Teilhabe an der Ewigkeit haben. || Lebewesen |- | 2. || Die sinnlich wahrnehmbare und unvergängliche Substanz || Konkrete Dinge, die eine unbegrenzte Teilhabe an der Ewigkeit haben. || Die sieben Wandelgestirne und die Fixsterne |- | 3. || Die sinnlich nicht wahrnehmbare und unvergängliche Substanz || Lebendiger, unbewegter Beweger, der der Ursprung aller anderen Dinge ist. || Gott |} Dieses theologische Prinzip wurde später auch von '''{{w|Thomas van Aquin}}''' (1225-1274) in seinen ''Quinque viae ad Deum'' ("Fünf Wege zu Gott") aufgegriffen: {| class="wikitable" |+ Nach dem ''Quinque viae ad Deum'' ("Fünf Wege zu Gott") von Thomas von Aquin ! Weg !! Bezeichnung !! Voraussetzung !! Feststellung !! Folgerung |- | Via&nbsp;I || Bewegungsbeweis || In der Welt ist überall Bewegung. || Alles Bewegte muss von einem anderen in Bewegung gebracht worden sein. || Der Erstbeweger ist Gott. |- | Via&nbsp;II || Kausalitätsbeweis || In der Welt gibt es überall Ursachen und Wirkungen. || Jede Wirkung muss eine Ursache haben. || Die erste Ursache der Welt ist Gott. |- | Via&nbsp;III || Kontingenzbeweis || Alles Empirische in der Welt entsteht und vergeht wieder. || Jedes empirische Wesen muss das Sein von einem absoluten Wesen empfangen haben. || Das absolute Wesen ist Gott. |- | Via&nbsp;IV || Stufenbeweis || In der Welt gibt es abgestuft gute, wahre und schöne Dinge. || Das absolute Wesen muss die höchste Güte, Wahrheit und Schönheit haben. || Das höchste Gute, Wahre und Schöne ist Gott. |- | Via&nbsp;V || Finalitätsbeweis || In der Welt gibt es Ordnung und Gesetzmäßigkeit. || Ordnung und Gesetzmäßigkeit müssen auf einen denkenden Geist zurückgehen. || Dieser Geist kommt von Gott. |} Auch '''{{w|Gottfried Wilhelm Leibniz}}''' (1646-1717) lehnt sich in seiner Hypothese von „Gott als letztem und zureichendem Grund der Welt“ daran an. Auch im 90. Psalm wird dieser Ansatz thematisiert: <blockquote> Das vierte Buch<br/> Der '''ewige''' Gott – der '''vergängliche''' Mensch<br/><br/> 1 Ein Bittgebet des Mose, des Mannes Gottes. O Herr, du warst uns Wohnung '''von Geschlecht zu Geschlecht'''.<br/> 2 '''Ehe geboren wurden die Berge, ehe du unter Wehen hervorbrachtest Erde und Erdkreis''', bist du '''Gott von Ewigkeit zu Ewigkeit'''.<br/> 3 '''Zum Staub zurückkehren lässt du den Menschen''', du sprichst: Ihr Menschenkinder, kehrt zurück!<br/> 4 Denn tausend Jahre sind in deinen Augen wie der Tag, der gestern vergangen ist, wie eine Wache in der Nacht. </blockquote> Darüber hinaus gibt der vierte Vers einen deutlichen Hinweis auf das Verhältnis zwischen der Länge des viele Jahrtausende dauernden Präzessionszyklus und der Länge eines siderischen Monats: der Mond wandert entlang der Ekliptiklinie an einem Tag genauso weit wie der Frühlingspunkt in tausend Jahren. → Siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Präzession|'''Präzession''']]. Der griechische Dichter '''{{w|Aratos von Soloi}}''' in Kilikien (≈310–245) hatte seine astronomischen Kenntnisse vom Astronomen und Mathematiker '''{{w|Eudoxos von Knidos}}''' (geboren nach 390, gestorben nach 338) erhalten. In dem in der Antike verbreiteten Lehrgedicht Φαινόμενα (Phainomena = „Himmelserscheinungen“) von Aratos wird der Sternenhimmel in zahlreichen Hexametern beschrieben. Sein monumentales sechseckiges Grab aus der antiken Stadt Pompeiopolis wurde 2020 in der türkischen Provinz Mersin wiederentdeckt.<ref>Patricia Claus: [https://greekreporter.com/2021/07/11/memorial-tomb-of-ancient-greek-astronomer-aratus-unearthed-in-turkey/ Memorial Tomb of Ancient Greek Astronomer Aratus Unearthed in Turkey], The Greek Reporter, 11. Juli 2021</ref> Hier der Beginn des Prologs des Lehrgedichts: <blockquote> Εκ Διὸς ἀρχώμεσθα , τὸν οὐδέποτ᾽ ἄνδρες ἐῶμεν<br/> ῎Αῤῥητον . Μεσταὶ δὲ Διὸς πᾶσαι μὲν ἀγυιαὶ ,<br/> Πᾶσαι δ᾽ ἀνθρώπων ἀγοραί · μεστὴ δὲ θάλασσα ,<br/> Καὶ λιμένες. πάντη δὲ Διὸς κεχρήμεθα πάντες .<br/> '''Τοῦ γὰρ καὶ γένος εἰμέν''' · ὁ δ᾽ ἤπιος ἀνθρώποισι<br/> Δεξιὰ σημαίνει · λαοὺς δ᾽ ἐπὶ ἔργον ἐγείρει ,<br/> Μιμνήσκων βιότοιο . λέγει δ᾽ , ὅτε βῶλος ἀρίστη<br/> Βουσί τε καὶ μακέλῃσι · λέγει δ᾽ , ὅτε δεξιαὶ ὧραι ,<br/> Καὶ φυτὰ γύρῶσαι , καὶ σπέρματα πάντα βαλέσθαι .<br/> Αὐτὸς γὰρ τάγε σήματ᾽ ἐν '''οὐρανῷ''' ἐστήριξεν ,<br/> '''Αστρα''' διακρίνας · ἐσκέψατο δ᾽ εἰς ἐνιαυτὸν<br/> '''᾿Αστέρας''' , οἵ κε μάλιστα τετυγμένα σημαίνοιεν<br/> ᾿Ανδράσιν ὡράων , ὄφρ᾽ ἔμπεδα πάντα φύωνται .<br/> Τῷ μιν ἀεὶ πρῶτόν τε καὶ ὕστατον ἱλάσκονται .<br/> Χαῖρε , πάτερ , μέγα θαῦμα , μέγ᾽ ἀνθρώποισιν ὄνειαρ ,<br/> Αὐτὸς καὶ προτέρη γενεή ! χαίροιτε δὲ , Μοῦσαι<br/> Μειλίχιαι , μάλα πᾶσαι ! ἐμοί γε μὲν '''ἀστέρας''' εἰπεῖν ,<br/> Ηἱ θέμις εὐχομένῳ , τεκμήρατε πᾶσαν ἀοιδήν .<br/> Οἱ μὲν ὁμῶς πολέες τε , καὶ ἄλλυδις ἄλλοι ἐόντες ,<br/> '''Οὐρανῷ''' ἕλκονται πάντ᾽ ἤματα συνεχὲς αἰεί.<br/> Αὐτὰρ ὅγ᾽ οὐδ᾽ ὀλίγον μετανίσσεται · ἀλλὰ μάλ' αὕτως<br/> '''῎Αξων''' οἱ ἐνάρηρεν · ἔχει δ᾽ ἀτάλαντον ἁπάντη<br/> '''Μεσσηγὺς γαῖαν''' , περὶ δ᾽ '''οὐρανὸν''' αὐτὸν ἀγινεῖ.<br/> Καί μιν πειραίνουσι δύω '''πόλοι''' ἀμφοτέρωθεν ·<br/> ᾿Αλλ᾽ ὁ μὲν οὐκ ἐπίοπτος · ὁ δ᾽ ἀντίος ἐκ '''Βορέαο''' ,<br/> Ὑψόθεν Ὠκεανοῖο . Δύω δὲ μιν ἀμφὶς ἔχουσαι<br/> '''Ἄρκτοι''' ἅμα τροχόωσι · τὸ δὴ καλέονται '''῞Αμαξαι''' . </blockquote> Übersetzung unter Beibehaltung der Hexameter nach dem deutschen Dichter, Übersetzer und Hochschullehrer Johann Heinrich Voss (1751–1826) von 1824:<ref>АРАТОΥ ΦΑΙΝΟΜΕΝΑ ΚΑΙ ΔΙΟΣΗΜΕΙΑ. Des Aratos Sternerscheinungen und Wetterzeichen. Übersetzt und erklärt von Johann Heinrich Voss. Heidelberg bei Christian Friedrich Winter. 1824.</ref> <blockquote> Zeus sei unser Beginn , und niemals bleib' er uns Männern<br/> Ungelobt. Voll wahrlich des Zeus sind alle des Wandels<br/> Weg' , und alle Versammlung der Welt ; voll jegliche Meerflut ,<br/> Jeglicher Port ; ringsum ja des Zeus bedürfen wir alle .<br/> '''Seines Geschlechts auch sind wir''' ; und Er , mildherzig den Menschen,<br/> Zeichnet, was frommt, rechtsher ; und zu Tätigkeit weckt er die Völker,<br/> Mahnend an Lebensbedarf : Er sagt , wann besser dem Pflugstier<br/> Fuge die Scholl' , und dem Karst ; er sagt , wann schickliche Jahrszeit,<br/> Dass man die Pflanze behäuf" , und einsenk' allerlei Anwachs .<br/> Denn selbst hat er die Zeichen am oberen '''Himmel''' befestigt ,<br/> Und '''Sternbilder''' verteilt ; er hat fürsehend dem Jahrlauf<br/> '''Sterne''' bestimmt , die den Menschen zumeist annahende Wechsel<br/> Deuteten jeglicher Zeit , dass in Völligkeit alles erwachse .<br/> Drum ihn immer zuerst , und zulezt ihn , sühnen sie feiernd.<br/> Heil , anstaunlicher Vater , den Sterblichen mächtiges Labsal ,<br/> Du auch , selbst des Geschlechts Ursprung ! Heil , freundliche Musen,<br/> Heil euch allen gesamt ! doch mir , der , die '''Sterne''' zu melden ,<br/> Euch , wie geziemt , anfleht , bringt allen Gesang zur Vollendung.<br/> Jene zugleich , so viele zerstreuete , andere anders ,<br/> Ziehn mit dem '''Himmel''' einher in ewigem Zuge beständig .<br/> Doch nie schwanket er selbst um ein weniges; sondern durchaus so<br/> Bleibt ihm die '''Axe''' geheftet ; die hält gleichschwebend vom Umfang<br/> Hier '''in der Mitte die Erd'''' , und umher dort dreht sie den '''Himmel''' .<br/> Sie dann hat zween '''Pol'''' an jeglichem Ende gerichtet :<br/> Unsichtbar ist jener; doch hier um den '''Boreas''' ragt er<br/> Ob dem Okeanos hoch. Zwo dem zu den Seiten gestellte<br/> '''Bärinnen''' rollen umher: drum auch '''Rollwagen''' benamet. </blockquote> '''''Hinweise:''''' * Die "Axe" beschreibt die Erdachse. * ''Mit dem "Boreas" ist der Himmelsnordpol gemeint.'' * ''Bei den beiden Bärinnen handelt es sich um die Sternbilder des Großen Bären (Ursa Maior) und des Kleinen Bären (Ursa Minor).'' * ''Die beiden Rollwagen sind bei uns heute die Asterismen Großer Wagen und Kleiner Wagen.'' Der Apostel '''{{w|Paulus von Tarsus}}''' (geboren vor 10, gestorben nach 60) war der bedeutendste Missionar des Urchristentums und kannte diesen Text offensichtlich. Im 17.&nbsp;Kapitel der Apostelgeschichte des Lukas wird ihm ein Zitat aus dem Prolog des Lehrgedichts über die Abstammung der Menschen von Gott in den Mund gelegt.<ref>[https://www.die-bibel.de/bibel/NA28,EUE/ACT.17.28 Apostelgeschichte 17,28], Abschnitt: ''Paulus in Athen'', Novum Testamentum Graece und Einheitsübersetzung</ref> <blockquote> Apostelgeschichte 17,28: '''Τοῦ γὰρ καὶ γένος ἐσμέν.''' </blockquote> <blockquote> Apostelgeschichte 17,28: '''Wir sind von seinem Geschlecht.''' </blockquote> === Zahlen in Religionen === Die '''Zwei''' steht oft für Gegensätze, wie zum Beispiel Tag und Nacht, Aufgang und Untergang, Sommerhalbjahr und Winterhalbjahr, zunehmender und abnehmender Mond oder obere und untere Kulmination. Eine solche Zweiteilung findet sich oft auch in gegensätzliche Kategorien wieder, die in vielen Disziplinen, insbesondere auch in der Ethik und in Religionen verwendet werden, wie beispielsweise gut und böse, oben und unten, Leben und Tod, Licht und Schatten, Wärme und Kälte oder Himmel und Hölle. Interessant ist auch die frühgeschichtliche astronomische Auffassung von '''zwei''' mächtigen Gegenspielern, die sich im Sternenhimmel an zwei gegenüberliegenden Seiten befinden, der [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|der Himmelsstier]] und der [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsskorpion|der Himmelsskorpion]]. → Siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Zwei|'''Zur Zwei''']]. Die astronomischen Zahlen '''Sieben''' und '''Zwölf''' werden als heilige Zahlen angesehen. Sie werden in vielfältigen Kontexten in religiösen Texten erwähnt und für viele religiöse Symbole verwendet. Ferner spielt auch die astronomische Zahl '''Vier''' in Religionen eine bedeutende Rolle, wo sie deswegen manchmal ebenfalls als heilige Zahlen angesehen wird: * '''Vier''' Hauptsterne respektive Hauptsternbilder mit den '''vier''' Himmelsrichtungen und den '''vier''' Jahreszeiten: → siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Vier_in_Religionen|'''Bedeutung der Vier in Religionen''']]. * '''Sieben''' Wandelgestirne mit den die '''sieben''' Tagen einer Woche beziehungsweise eines Mondviertels: → siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Sieben_in_Religionen|'''Bedeutung der Sieben in Religionen''']]. * '''Zwölf''' Ekliptiksternbilder, '''zwölf''' Monate pro Jahr, '''zwölf''' Jahre Umlaufzeit des Planeten Jupiter, jeweils '''zwölf''' Stunden Tag und Nacht: → siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Zwölf_in_Religionen|'''Bedeutung der Zwölf in Religionen''']]. === Altes Testament === In der Bibel wird in der Regel nicht zwischen Fixsternen und Planeten unterschieden. Eine Ausnahme gibt es im 2.&nbsp;Buch der Könige, Kapitel&nbsp;23, Vers&nbsp;5 aus dem siebenten vorchristlichen Jahrhundert, wo in der deutschsprachigen Einheitsübersetzung von "den Wandelsternen" und in der Luther-Bibel von "den Planeten" die Rede ist. Die Vulgata schreibt hier allerdings von den "duodecim signis", womit sicherlich die zwölf Sternzeichen der Ekliptik gemeint sind, durch die die sieben Wandelgestirne ziehen. Die Septuaginta spricht noch allgemeiner von den "μαζουρωθ" nach dem Hebräischen Wort "מַזָּלָה" ("mazzaroth"), womit vermutlich Sternkonstellationen und im engeren Sinne ebenfalls die zwölf Sternzeichen des Zodiaks gemeint sind: <blockquote> '''Septuaginta '''<br/> 5 καὶ κατέπαυσεν τοὺς χωμαριμ, οὓς ἔδωκαν βασιλεῖς Ιουδα καὶ ἐθυμίων ἐν τοῖς ὑψηλοῖς καὶ ἐν ταῖς πόλεσιν Ιουδα καὶ τοῖς περικύκλῳ Ιερουσαλημ, καὶ τοὺς θυμιῶντας τῷ Βααλ καὶ τῷ ἡλίῳ καὶ τῇ σελήνῃ καὶ τοῖς '''μαζουρωθ''' καὶ πάσῃ τῇ δυνάμει τοῦ οὐρανοῦ.<br/> <br/> '''Vulgata'''<br/> 5 Et delevit aedituos, quos posuerant reges Iudae ad sacrificandum in excelsis per civitates Iudae et in circuitu Ierusalem, et eos, qui adolebant Baal et soli et lunae et '''duodecim signis''' et omni militiae caeli.<br/> <br/> '''Einheitsübersetzung (2016)'''<br/> 5 Auch setzte er die Götzenpriester ab, die von den Königen von Juda bestellt worden waren und die auf den Kulthöhen, in den Städten Judas und in der Umgebung Jerusalems Opfer verbrannt sowie dem Baal, der Sonne, dem Mond, den '''Wandelsternen''' und dem ganzen Heer des Himmels geopfert hatten.<br/> <br/> '''Luther-Bibel (2017)'''<br/> 5 Und er setzte die Götzenpriester ab, die die Könige von Juda eingesetzt hatten, um auf den Höhen zu opfern in den Städten Judas und um Jerusalem her; auch die dem Baal geräuchert hatten, der Sonne und dem Mond und den '''Planeten''' und allem Heer am Himmel.<br/> </blockquote> Der Prophet Habakuk erwähnt in seinem Psalm in Kapitel&nbsp;3 aus dem siebenten vorchristlichen Jahrhundert das Konzept der Aufteilung der Ekliptik in Mondstationen respektive in Mondhäuser: <blockquote> 10 Wenn sie dich sehen, erbeben die Berge,<br/> das Tosen der Wasser rauscht vorüber; es erhebt die Urflut ihre Stimme,<br/> hoch oben vergisst die Sonne ihre Strahlen.<br/> 11 '''Der Mond bleibt in der Behausung;'''<br/> als Beleuchtung schwirren deine Pfeile,<br/> als heller Schein das Blitzen deiner Lanze. </blockquote> In den folgenden Bibelstellen aus dem Alten Testament spiegeln sich astronomische Vorstellungen in Bezug auf Gott wider: '''Genesis 1:''' <blockquote> 1 Im Anfang erschuf Gott '''Himmel''' und Erde.<br/> 2 Die '''Erde''' war wüst und wirr und '''Finsternis''' lag über der '''Urflut''' und Gottes Geist schwebte über dem '''Wasser'''.<br/> 3 Gott sprach: Es werde '''Licht'''. Und es wurde '''Licht'''. ...<br/> 5 Und Gott nannte das Licht '''Tag''' und die Finsternis nannte er '''Nacht'''. Es wurde '''Abend''' und es wurde '''Morgen''': erster Tag.<br/> ...<br/> 14 Dann sprach Gott: Lichter sollen am '''Himmelsgewölbe''' sein, um '''Tag''' und '''Nacht''' zu scheiden. Sie sollen als Zeichen für '''Festzeiten''', für '''Tage''' und '''Jahre''' dienen.<br/> 15 Sie sollen Lichter am Himmelsgewölbe sein, um über die Erde hin zu leuchten. Und so geschah es.<br/> 16 Gott machte '''die beiden großen Lichter''', das große zur Herrschaft über den '''Tag''', das kleine zur Herrschaft über die '''Nacht''', und die '''Sterne'''. </blockquote> '''Psalm 8:''' <blockquote> 4 Seh ich deine '''Himmel''', die Werke deiner Finger, '''Mond '''und '''Sterne''', die du befestigt. </blockquote> [[Datei:Johannes.Kepler.Coeli.enarrant.gloriam.Dei.png|mini|rechts|Portrait des jungen Johannes Keplers mit dem Motto "Coeli enarrant gloriam Dei." nach Psalm 19: "Die Himmel erzählen die Herrlichkeit Gottes."]] '''Psalm 19:''' <blockquote> 2 Die '''Himmel''' erzählen die Herrlichkeit Gottes und das '''Firmament''' kündet das Werk seiner Hände. </blockquote> '''Psalm 90:''' <blockquote> 2 Ehe geboren wurden die Berge, ehe du unter Wehen hervorbrachtest '''Erde''' und '''Erdkreis''', bist du Gott von Ewigkeit zu Ewigkeit. </blockquote> '''Psalm 102:''' <blockquote> 26 Vorzeiten hast du der Erde Grund gelegt, die '''Himmel''' sind das Werk deiner Hände. </blockquote> '''Psalm 103:''' <blockquote> 19 Der HERR hat seinen Thron errichtet im '''Himmel''', seine königliche Macht beherrscht '''das All'''. </blockquote> '''Psalm 104:''' <blockquote> 19 Du machst den '''Mond''' zum Maß für die Zeiten, die '''Sonne''' weiß, wann sie untergeht. </blockquote> '''Psalm 113:''' <blockquote> 3 Vom '''Aufgang der Sonne''' bis zu ihrem '''Untergang''' sei gelobt der Name des HERRN.<br/> 4 Erhaben ist der HERR über alle Völker, über den '''Himmeln''' ist seine Herrlichkeit. </blockquote> '''Psalm 136:''' <blockquote> 3 Dankt dem Herrn der Herren, denn seine Huld währt ewig!<br/> 4 Ihm, der allein große Wunder tut, denn seine Huld währt ewig,<br/> 5 der den '''Himmel''' gemacht hat in Weisheit, denn seine Huld währt ewig,<br/> 6 der die Erde gefestigt hat über den Wassern, denn seine Huld währt ewig,<br/> 7 der '''die großen Leuchten''' gemacht hat, denn seine Huld währt ewig,<br/> 8 die '''Sonne''' zur Herrschaft über den '''Tag''', denn seine Huld währt ewig,<br/> 9 den '''Mond''' und die '''Sterne''' zur Herrschaft über die '''Nacht''', denn seine Huld währt ewig. </blockquote> '''Psalm 147:''' <blockquote> 4 Er bestimmt die Zahl der '''Sterne''' und ruft sie alle mit Namen. </blockquote> '''Psalm 148:''' <blockquote> '''Lobpreis auf den Herrn, den König des Kosmos'''<br/> 1 Halleluja! Lobt den HERRN vom '''Himmel''' her, lobt ihn in den Höhen:<br/> 2 Lobt ihn, all seine Engel, lobt ihn, all seine Heerscharen,<br/> 3 lobt ihn, '''Sonne''' und '''Mond''', lobt ihn, all ihr leuchtenden '''Sterne''',<br/> 4 lobt ihn, ihr '''Himmel der Himmel''', ihr Wasser über dem '''Himmel'''! </blockquote> Mit den "Wassern über dem Himmel" können nicht die Wolken unterhalb der Sternensphäre gemeint sein. Vielmehr dürfte es sich um eine Anspielung auf den Urozean beziehungsweise die Urflut handeln (siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|'''Urozean''']]). Diese Urflut existierte bereits vor der Erschaffung des Lichts und der Gestirne. Man erinnere sich an den Beginn der Schöpfungsgeschichte in den ersten drei Versen der Bibel (siehe oben). '''Buch der Weisheit (Weisheit Salomos):''' <blockquote> '''Salomos Gebet um Weisheit'''<br/> 9,1 Gott der Väter und Herr des Erbarmens, du hast '''das All''' durch dein Wort gemacht. </blockquote> '''Jesus Sirach 42:''' <blockquote> '''Lob Gottes in der Schöpfung'''<br/> 15 Nun will ich der Werke des Herrn gedenken, und was ich gesehen habe, werde ich erzählen: Durch die Worte des Herrn sind seine Werke und durch seinen Segen gab er ihnen ihre Bestimmung.<br/> 16 Die leuchtende '''Sonne''' blickt auf alles hernieder und von der Herrlichkeit des Herrn ist sein Werk erfüllt.<br/> 17 Der Herr gab es selbst den Heiligen nicht, all seine Wunder zu erzählen, der Herr der Herrscher über '''das All''', hat sie gegründet, sodass '''das All''' in seiner Herrlichkeit Bestand hat.<br/> 18 Abgrund und Herz hat er durchforscht und ihre Absichten hat er durchschaut; denn der Höchste kennt alles Wissen und er blickt auf die '''Zeichen der Zeiten'''.<br/> 19 Er tut das Vergangene und das Kommende kund und enthüllt die Spuren des Verborgenen.<br/> 20 Kein Gedanke entgeht ihm und kein einziges Wort bleibt ihm verborgen.<br/> 21 Die Großtaten seiner Weisheit hat er geordnet; wie er ist '''von Ewigkeit und in Ewigkeit'''. Ihm ist weder etwas hinzugefügt noch weggenommen worden und er hat keines Ratgebers bedurft. </blockquote> Auch im nachfolgenden Kapitel lobt Jesus Sirach die Sonne, den Mond und die Sterne in den höchsten Tönen: '''Jesus Sirach 43:''' <blockquote> 1 Der Stolz der Höhe ist ein '''Firmament''' von Reinheit, die Gestalt des '''Himmels''' beim Anblick der Herrlichkeit.<br/> 2 Die '''Sonne''' verkündet durch ihr Erscheinen beim Aufgang, ein wunderbares Geschöpf, ein Werk des Höchsten!<br/> 3 Zur '''Mittagszeit''' trocknet sie den Boden aus, wer wird bestehen vor ihrer Glut?<br/> 4 Wer in einen Ofen bläst bei Arbeiten mit Glut - dreimal so stark versengt die '''Sonne''' Berge; sie atmet Feuerdämpfe aus und blendet mit gleißenden Strahlen die Augen.<br/> 5 Groß ist der Herr, der sie gemacht hat, mit seinen Worten beschleunigt er ihren Lauf.<br/> 6 Auch der '''Mond''' hält sich in allem an seinen Zeitpunkt, zur '''Festsetzung der Zeiten''' und als Zeichen auf Dauer.<br/> 7 Vom '''Mond''' geht das Zeichen für einen Festtag aus, ein Gestirn, das abnimmt bis zur Vollendung.<br/> 8 Der Name '''Monat''' kommt vom '''Neumond''', der wunderbar zunimmt beim Wechsel, ein Geschöpf des Heeres in der Höhe, das am '''Himmelsgewölbe''' leuchtet.<br/> 9 Die Schönheit des '''Himmels''' ist der Glanz der '''Sterne''', ein strahlender Schmuck in den Höhen des Herrn.<br/> 10 Durch die Worte des Heiligen stehen sie gemäß ihrer Bestimmung und sie ermüden nie bei ihrer Wache.<br/> ...<br/> 27 Vieles werden wir sagen, aber wir kommen nie an ein Ziel und das Ende der Worte ist: Er ist '''das All'''. </blockquote> '''Jesaja 40:''' <blockquote> 26 Hebt eure Augen in die Höhe und seht: Wer hat diese '''Gestirne''' erschaffen?<br/> Der vollzählig herausführt ihr Heer, er ruft sie alle beim Namen.<br/> Wegen seiner Fülle an Kraft und mächtiger Stärke fehlt kein einziges. </blockquote> Das Buch Baruch gehört zu den späten Schriften des Alten Testaments. Im dritten Kapitel werden das Licht und die Sterne in Bezug auf Gott thematisiert: '''Baruch 3:''' <blockquote> 33 Er entsendet das '''Licht''' und es eilt dahin; er ruft es zurück und zitternd gehorcht es ihm.<br/> 34 Froh leuchten die '''Sterne''' auf ihren Posten.<br/> 35 Ruft er sie, so antworten sie: Hier sind wir. Sie leuchten mit Freude für ihren Schöpfer.<br/> 36 Das ist unser Gott; kein anderer gilt neben ihm. </blockquote> Ein Lobpreis auf die Werke, Engel und Mächte Gottes am Gewölbe des Himmels findet sich im '''Buch Daniel''' im dritten Kapitel. Der Text macht inhaltlich eine ähnliche Aussage wie der Lobpreis auf den Herrn, den König des Kosmos in Psalm 148 (siehe oben): '''Daniel 3:''' <blockquote> 56 Gepriesen bist du am Gewölbe des '''Himmels''', gerühmt und verherrlicht in Ewigkeit.<br/> 57 Preist den HERRN, all ihr Werke des HERRN; lobt und rühmt ihn in Ewigkeit!<br/> 58 Preist den HERRN, ihr '''Himmel'''; lobt und rühmt ihn in Ewigkeit!<br/> 59 Preist den HERRN, ihr Engel des HERRN; lobt und rühmt ihn in Ewigkeit!<br/> 60 Preist den HERRN, all ihr '''Wasser über dem Himmel'''; lobt und rühmt ihn in Ewigkeit!<br/> 61 Preist den HERRN, all ihr Mächte des HERRN; lobt und rühmt ihn in Ewigkeit!<br/> 62 Preist den HERRN, '''Sonne und Mond'''; lobt und rühmt ihn in Ewigkeit!<br/> 63 Preist den HERRN, ihr '''Sterne am Himmel'''; lobt und rühmt ihn in Ewigkeit! </blockquote> === Der Himmelsthron === Der '''Himmelsthron''' wir in vielen Texten des Alten Testaments als der Sitz Gottes genannt. Hier zunächst einige Erwähnungen in den Psalmen: <blockquote> 11,4 Der HERR ist in seinem heiligen Tempel, der HERR hat seinen '''Thron im Himmel'''.<br/> Seine Augen schauen herab, seine Blicke prüfen die Menschen. </blockquote> <blockquote> 33,13 Der HERR blickt herab vom '''Himmel''', er sieht alle Menschen.<br/> 33,14 Von seinem '''Thronsitz''' schaut er nieder auf alle Bewohner der Erde. </blockquote> <blockquote> 89,37 Sein Haus soll bleiben auf ewig, sein '''Thron''' habe Bestand vor mir wie die '''Sonne'''; </blockquote> <blockquote> 103,19 Der HERR hat seinen '''Thron''' errichtet im '''Himmel''', seine königliche Macht beherrscht '''das All'''. </blockquote> Im Buch der Weisheit stehen die folgenden beiden Verse: <blockquote> 9,9 Mit dir ist die Weisheit, die deine Werke kennt und die zugegen war, als du die Welt erschufst. Sie weiß, was wohlgefällig ist in deinen Augen und was recht ist nach deinen Geboten.<br/> 9,10 Sende sie vom heiligen '''Himmel''' und schick sie vom '''Thron''' deiner Herrlichkeit, damit sie bei mir sei und alle Mühe mit mir teile und ich erkenne, was wohlgefällig ist bei dir! </blockquote> Diese Bild von Gottes Thron im Himmel wir auch im Neuen Testament aufgegriffen, wie beispielsweise beim Evangelisten Matthäus (Kapitel 5, Vers 34) oder in der Offenbarung des Johannes, wo im vierten Kapitel die eröffnende Himmelsvision mit dem Abschnitt über "Die Huldigung vor dem Thron Gottes" beginnt: <blockquote> 1 Danach sah ich und siehe, eine Tür war geöffnet am '''Himmel'''; und die erste Stimme, die ich gleich einer Posaune mit mir reden gehört hatte, sagte: Komm herauf und ich werde dir zeigen, was dann geschehen muss.<br/> 2 Sogleich wurde ich vom Geist ergriffen. Und siehe, '''ein Thron stand im Himmel'''; auf dem Thron saß einer,<br/> 3 der wie ein Jaspis und ein Karneol aussah. Und über dem '''Thron''' wölbte sich ein Regenbogen, der wie ein Smaragd aussah.<br/> 4 Und rings um den '''Thron standen vierundzwanzig Throne''' und auf den Thronen saßen vierundzwanzig Älteste, in weiße Gewänder gekleidet und mit goldenen Kränzen auf dem Haupt.<br/> 5 Von dem Thron gingen Blitze, Stimmen und Donner aus. Und '''sieben lodernde Fackeln brannten vor dem Thron; das sind die sieben Geister Gottes'''.<br/> 6 Und vor dem Thron war etwas wie ein gläsernes Meer, gleich Kristall. Und in der Mitte des Thrones und rings um den Thron waren '''vier Lebewesen''' voller Augen, vorn und hinten.<br/> 7 Das erste Lebewesen glich einem '''Löwen''', das zweite einem '''Stier''', das dritte sah aus wie ein '''Mensch''', das vierte glich einem '''fliegenden Adler'''.<br/> </blockquote> Der achtstrophige Adventshymnus ''Veni redemptor gentium'' (die deutschsprachige Kontrafaktur heißt "Nun komm, der Heiden Heiland") wird dem Kirchenvater Ambrosius von Mailand (339–397) zugeschrieben. In der fünften Strophe wird mit Bezug auf die Himmelfahrt des Messias der Sitz Gottes erwähnt: <blockquote> 5,1 Egressus eius a Patre,<br/> 5,2 Regressus eius ad Patrem;<br/> 5,3 Excursus usque ad inferos,<br/> 5,4 Recursus ad '''sedem Dei'''. </blockquote> <blockquote> 5,1 Sein Ausgang ist vom Vater,<br/> 5,2 Seine Rückkehr ist beim Vater;<br/> 5,3 Hinausgelaufen bis zu den Toten,<br/> 5,4 Zurückgelaufen bis zum '''Sitz Gottes'''. </blockquote> Es ist nicht viel Phantasie erforderlich, um den Thron Gottes im '''Himmelsstier''' wiederzuerkennen. Die vierundzwanzig Throne, die sich entlang der '''Ekliptik''' um diesen Thron herum aufreihen, stehen für die vierundzwanzig Stunden eines Tages, und sie sind je zwei für jedes der zwölf Lebewesenkreiszeichen des '''Zodiaks'''. Die als sieben lodernde Fackeln vor dem Thron sind die sieben '''Wandelgestirne''', die als die '''sieben Geister Gottes''' immer wieder durch das '''Goldene Tor der Ekliptik''' in der Sitzfläche des Thrones ziehen. Die '''vier besonderen Lebewesen''' sind die vier Evangelistensymbole bei den vier zoroastrischen '''Königssternen'''. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|'''Himmelsstier''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Die_Ekliptik|'''Ekliptik''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Zodiak|'''Zodiak''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Das_Goldene_Tor_der_Ekliptik|'''Goldenes Tor der Ekliptik''']]. → Siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Vier_in_Religionen|'''Bedeutung der Vier in Religionen''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Königssterne|'''Königssterne''']]. <gallery caption="Throne" widths=640 heights=480 perrow=3> StatueOfEl.png|Rekonstruktion der 1988 in Ugarit ausgegrabenen und auf einem Thron sitzenden Statue aus Calcit vom höchsten ugaritischen Gott El, der als Erschaffer der Welt angebetet wurde. Das Original aus den letzten Jahrhunderten des zweiten Jahrtausends vor Christus befindet sich im Museum von Latakia an der syrischen Mittelmeerküste. Aachen_Cathedral_Karlsthron_02.jpg|Thron Karls des Großen aus den 790er Jahren im Aachener Dom. Himmelsthron.Taurus.Aries.png|Himmelsthron in den Sternbildern Stier (Taurus) und Widder (Aries) vor dem Untergang in Richtung Westen. </gallery> === Das Lamm === Im ersten Kapitel des Evangeliums nach Johannes wird Jesus von Nazareth explizit als "Lamm Gottes" bezeichnet:<ref>[https://www.bibleserver.com/EU/Johannes1%2C29 Johannes 1,29], bibleserver.com, Einheitsübersetzung (2016)</ref> <blockquote> 29b Seht, das '''Lamm Gottes''', das die Sünde der Welt hinwegnimmt!<br/> ...<br/> 36b Seht, das '''Lamm Gottes'''! </blockquote> Es handelt sich beim „Lamm Gottes“ (Kirchenlatein: „Agnus Dei“) um ein seit ältester Zeit verbreitetes Symbol für Jesus Christus. Es wird auch als das Osterlamm bezeichnet, das am Ostertag, also kurz nach der Tag-und-Nacht-Gleiche im Frühjahr auferstanden ist. Nach dem Evangelisten Markus wurde die Auferstehung „... am ersten Tag der Woche, früh am Morgen, als eben die Sonne aufging“, also am Ostersonntag während der Morgenröte im Osten entdeckt.<ref>[https://www.bibleserver.com/LUT/Markus16%2C2 Markus 16,2], Einheitsübersetzung, 2016</ref> Am 40.&nbsp;Tag ist Jesus Christus nach dem Zeugnis der Evangelisten Markus und Lukas in den Himmel aufgefahren. Zu Beginn der Apostelgeschichte wird dieses Ereignis folgendermaßen beschrieben:<ref>[https://www.bibleserver.com/EU/Apostelgeschichte1 Apostelgeschichte 1], Einheitsübersetzung, 2016</ref> <blockquote> 7 Er sagte zu ihnen: Euch steht es nicht zu, Zeiten und Fristen zu erfahren, die der Vater in seiner Macht festgesetzt hat.<br/> 8 Aber ihr werdet Kraft empfangen, wenn der Heilige Geist auf euch herabkommen wird; und ihr werdet meine Zeugen sein in Jerusalem und in ganz Judäa und Samarien und bis an die Grenzen der Erde.<br/> 9 Als er das gesagt hatte, wurde er vor ihren Augen emporgehoben und eine Wolke nahm ihn auf und entzog ihn ihren Blicken.<br/> </blockquote> Im altrömischen Glaubensbekenntnis gibt es die Textstelle: <blockquote> „ascendit in caelis, sedet ad dexteram Patris“ </blockquote> Zu Deutsch: <blockquote> „aufgefahren in den Himmel, er sitzt zur Rechten des Vaters“ </blockquote> Das '''Lamm''' (astronomisch Widder) befindet sich am nördlichen Sternenhimmel '''zur Rechten''' des Stieres (Taurus). Sowohl der mesopotamische Himmelsstier als auch das altarabische Sternbild Thuraya verbinden diese beiden neuzeitlichen Sternbilder zu einer Einheit. Der Hauptstern im Sternbild Widder (Aries) heißt Hamal, und das arabische Wort "hamal" steht für ein einjähriges Lamm.<ref name="Adams">Danielle Adams: [http://onesky.arizona.edu/arab-star-names/the-lamb/ The Lamb – A folkloric celestial complex], Two Deserts, one Sky – Arab Star Calendars</ref> Der fette Schwanz des Lammes wird durch die '''Plejaden (Siebengestirn)''' markiert.<ref name="Adams" /> Die Augen des Stieres sind die Sterne '''Aldebaran''' und '''Ain'''. Zwischen dem Kopf des Stieres und den '''Plejaden''' befindet sich das '''Goldene Tor der Ekliptik''', durch das alle Wandelgestirne regelmäßig hindurchziehen. → Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Bibelstellen|'''Bibelstellen zum Siebengestirn''']]. → Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Das_Goldene_Tor_der_Ekliptik|'''Goldenes Tor der Ekliptik''']]. Der Frühlingspunkt der Sonne, also deren Ort auf der Ekliptiklinie zur Tag-und-Nacht-Gleiche im Frühjahr, ist von der monotheistischen Schöpfung bis zur Geburt des christlichen Gottessohns vom Kopf des Stiers (bei den Sternen '''Aldebaran''' und '''Ain''' im Goldenen Tor der Ekliptik) im heutigen Sternbild Stier (Taurus) bis zum Kopf des Lammes (beim Stern '''Hamal''') im heutigen Sternbild Widder (Aries) nach Westen gewandert. Heute befindet sich der Frühlingspunkt bereits am westlichen Ende des Sternbilds Fische (Pisces), das sich westlich an das Sternbild Widder anschließt. ==== Offenbarung des Johannes ==== In der Offenbarung des Johannes heißt es im 7.&nbsp;Kapitel: <blockquote> 10b Die Rettung kommt von unserem '''Gott''', der auf dem '''Thron''' sitzt, und von dem '''Lamm'''.<br/> 17a Denn das Lamm in der Mitte vor dem Thron wird sie weiden und zu den Quellen führen, aus denen das '''Wasser des Lebens''' strömt. </blockquote> Wird der '''Thron Gottes''' mit dem Himmelsstier identifiziert (siehe oben), dann sitzt das '''Lamm''' (Aries, Sternbild Widder) westlich und somit rechts vor diesem Thron. Im weiteren Verlauf der Ekliptik nach Westen befinden sich die zusammenhängenden '''Wassersternbilder''' des Urozeans, dem Urquell des Lebens. Es handelt ich um die heutigen Sternbilder Fluss Eridanus, Walfisch (Cetus), Fische (Pisces), Wassermann (Aquarius), Südlicher Fisch (Piscis Austrinus) und Delphin (Delphinus) sowie Steinbock (Capricornus, früher Ziegenfisch). → Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|'''Urozean''']]. <gallery caption="Das Lamm zur Rechten des Stieres" mode=packed widths=800 heights=600> Himmelsstier.P1117152.jpg|Astrophotographie vom Asterismus Himmelsstier Himmelsstier.Sternbilder.P1117152.png|Beschriftete Astrophotographie vom Himmelsstier am winterlichen Abendhimmel in Richtung südlicher Meridian. Die Ekliptiklinie verläuft horizontal etwas unterhalb der Bildmitte. Haende.der.Thuraya.Vollmond.Sterne.P1079912.jpg|Astrophotographie der Himmelsregion mit dem beduinischen Sternbild "Hände der Thuraya" (grüne durchgezogene Linien, Ekliptik rot gepunktete Linie) mit arabisch bezeichneten Sternen. Der Vollmond befindet sich zwischen den Sternbildern Taurus, Aries und Cetus. Urozean.Wassersternbilder.png|Die zusammenhängenden Wassersternbilder des Urozeans am Sternenhimmel: Fluss Eridanus, Walfisch (Cetus), Fische (Pisces), Wassermann (Aquarius), Südlicher Fisch (Piscis Austrinus), Delphin (Delphinus) sowie Ziegenfisch (Steinbock, Capricornus). </gallery> Interpretiert man das Sternbild "Lamm" (Widder / Aries) als Mittler auf dem ekliptischen Weg vom finsteren kosmischen Urozean im Westen (rechts) zum strahlenden majestätischen Sternbild Stier (Taurus) im Osten (links), ergeben auch andere Bibelstellen in Bezug auf den Sternenhimmel einen tiefen symbolischen Sinn, die in den folgenden Abschnitten aufgeführt sind. ==== Evangelium nach Johannes ==== Die Rede von Jesus an den Jünger Thomas aus dem 14.&nbsp;Kapitel des Evangeliums nach Johannes ist in diesem Zusammenhang interessant: <blockquote> 6 Jesus sagte zu ihm: Ich bin der Weg und die Wahrheit und das Leben; niemand kommt zum Vater außer durch mich.<br/> 7 Wenn ihr mich erkannt habt, werdet ihr auch meinen Vater erkennen. Schon jetzt kennt ihr ihn und habt ihn gesehen. </blockquote> Alle Wandelgestirne bewegen sich entlang der Ekliptiklinie (Weg) durch das heutige Sternbild Widder (das altarabische Sternbild "Lamm") im Westen zum [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Das_Goldene_Tor_der-Ekliptik|Goldenen Tor der Ekliptik]] nach Osten im großen Himmelsstier (Vater / Thron). ==== Evangelium nach Markus ==== Im Evangelium nach Markus heißt es: <blockquote> 14,62 Jesus sagte: Ich bin es. Und ihr werdet den Menschensohn '''zur Rechten der Macht''' sitzen und mit den Wolken des '''Himmels''' kommen sehen. </blockquote> <blockquote> 16,19 Nachdem Jesus, der Herr, dies zu ihnen gesagt hatte, wurde er in den '''Himmel''' aufgenommen und setzte sich '''zur Rechten Gottes'''. </blockquote> ==== Evangelium nach Lukas ==== Im Evangelium nach Lukas ist es folgendermaßen formuliert: <blockquote> 22,69 Von nun an wird der Menschensohn '''zur Rechten der Macht Gottes''' sitzen. </blockquote> ==== Evangelium nach Matthäus ==== Auch im Evangelium nach Matthäus findet sich eine entsprechende Stelle: <blockquote> 26,64 Jesus antwortete: Du hast es gesagt. Doch ich erkläre euch: Von nun an werdet ihr den Menschensohn '''zur Rechten der Macht''' sitzen und auf den Wolken des '''Himmels''' kommen sehen. </blockquote> ==== Brief an die Hebräer ==== Im Brief an die Hebräer, dessen Autor unbekannt ist, gibt es etliche entsprechende Stellen: <blockquote> '''Gottes Rede in seinem Sohn'''<br/> 1,3 er ist der Abglanz seiner Herrlichkeit und das Abbild seines Wesens; er trägt '''das All''' durch sein machtvolles Wort, hat die Reinigung von den Sünden bewirkt und sich dann '''zur Rechten der Majestät in der Höhe''' gesetzt;<br/> 1,10 Und: Du, Herr, hast vorzeiten der Erde Grund gelegt, die '''Himmel''' sind das Werk deiner Hände.<br/> 1,11 Sie werden vergehen, '''du aber bleibst'''; sie alle veralten wie ein Gewand;<br/> 1,12 du rollst sie zusammen wie einen Mantel und wie ein Gewand werden sie gewechselt. Du aber bleibst, der du bist, und '''deine Jahre enden nie'''.<br/> 1,13 Zu welchem Engel hat er jemals gesagt: Setze dich mir '''zur Rechten''' und ich lege dir deine Feinde als Schemel unter die Füße? </blockquote> <blockquote> '''Die Liturgie des neuen Bundes'''<br/> 8,1 Die Hauptsache bei dem Gesagten aber ist: Wir haben einen solchen Hohepriester, der sich '''zur Rechten des Thrones der Majestät im Himmel''' gesetzt hat,<br/> 8,2 als Diener des Heiligtums und des '''wahren Zeltes''', das der Herr selbst aufgeschlagen hat, nicht ein Mensch. </blockquote> <blockquote> '''Christus als Mittler des neuen Bundes'''<br/> 9,24 Denn Christus ist nicht in ein von Menschenhand gemachtes Heiligtum hineingegangen, in ein Abbild des wirklichen, sondern '''in den Himmel selbst''', um jetzt '''vor Gottes Angesicht''' zu erscheinen für uns; </blockquote> <blockquote> '''Das Opfer Jesu Christi als endgültige Versöhnung mit Gott'''<br/> 10,12 Dieser aber hat nur ein einziges Opfer für die Sünden dargebracht und sich dann '''für immer zur Rechten Gottes''' gesetzt; </blockquote> <blockquote> '''Das Beispiel Jesu Christi'''<br/> 12,2 und dabei auf Jesus blicken, den Urheber und Vollender des Glaubens; er hat angesichts der vor ihm liegenden Freude das Kreuz auf sich genommen, ohne auf die Schande zu achten, und sich '''zur Rechten von Gottes Thron''' gesetzt. </blockquote> ==== Erster Brief des Petrus ==== Der erste Brief des Petrus zählt zu den katholischen Briefen des Neuen Testaments. Dort heißt es im letzten Satz über Jesus Christus: <blockquote> 22 der in den '''Himmel''' gegangen ist; dort ist er '''zur Rechten''' Gottes und Engel, Gewalten und Mächte sind ihm unterworfen. </blockquote> ==== Apostelgeschichte ==== Die Apostelgeschichte schließt an das Evangelium nach Lukas an und wird ebenfalls diesem zugeschrieben. Hier kommen der erste bekennende sowie erste berufene Apostel Petrus und der erste christliche Märtyrer Stephanus zu Wort: <blockquote> '''Die Pfingstpredigt des Petrus'''<br/> 2,33 '''Zur Rechten Gottes''' erhöht, hat er vom Vater den verheißenen Heiligen Geist empfangen und ihn ausgegossen, wie ihr seht und hört. </blockquote> <blockquote> '''Steinigung des Stephanus'''<br/> 7,55 Er aber, erfüllt vom Heiligen Geist, blickte zum '''Himmel''' empor, sah die Herrlichkeit Gottes und Jesus '''zur Rechten Gottes''' stehen<br/> 7,56 und rief: Siehe, ich sehe den Himmel offen und den Menschensohn '''zur Rechten Gottes''' stehen. </blockquote> === Himmelspforte === Das Sternbild Widder (Aries) repräsentiert als das Lamm Gottes den nördlichen Pfeiler des Goldenen Tors der Ekliptik. Der fette Schwanz des Lammes wird nach altarabischer Tradition durch das Siebengestirn (Plejaden) gebildet, das heute zu Sternbild '''Stier''' (Taurus) gezählt wird. Der südliche Pfeiler des Goldenen Tors der Ekliptik wird durch die Hyaden und den Stern Menkar im Sternbild Walfisch (Cetus) gebildet. Das Goldene Tor der Ekliptik stellt mit diesen beiden Pfeilern somit eine '''Himmelspforte''' dar, durch die alle Wandelgestirne regelmäßig von Westen aus dem dunklen Urozean der winterlichen Wassersternbilder sowie der Richtung des Sonnenuntergangs nach Osten in das helle Gebiet des Sternenhimmels mit den Frühlings- und Sommersternbildern sowie die Richtung des Sonnenaufgangs treten. [[Datei:Mars.im.Goldenen.Tor.der.Ekliptik.P1091607.jpg|mini|hochkant=3|zentriert|Der am nordwestlichen Horizont in der Nähe der Ekliptiklinie und im Goldenen Tor der Ekliptik untergehende Mars (rote Scheibe unten halb rechts) drei Tage vor dem Durchqueren der '''Himmelspforte''' zwischen dem Kopf des Himmelsstieres mit dem Sternhaufen der Hyaden (unten links) und den Plejaden nördlich der Ekliptik (rechts unten).]] Die Genesis berichtet im 28.&nbsp;Kapitel unter der Überschrift "Jakob in Bet-El" (hebräisch בֵּית אֵל „Haus des El“ oder „Haus Gottes“) über einen Traum von Jakob, in dem er eine Treppe zum Himmel (die Himmelsleiter oder Jakobsleiter) sieht, an dessen oberen Ende sich das Tor des Himmels (die Himmelspforte) befindet: <blockquote> 10 Jakob zog aus Beerscheba weg und ging nach Haran.<br/> 11 Er kam an einen bestimmten Ort und übernachtete dort, denn die Sonne war untergegangen. Er nahm einen von den Steinen dieses Ortes, legte ihn unter seinen Kopf und schlief dort ein.<br/> 12 Da hatte er einen Traum: Siehe, eine Treppe stand auf der Erde, ihre Spitze reichte bis zum '''Himmel'''. Und siehe: Auf ihr stiegen Engel Gottes auf und nieder.<br/> 13 Und siehe, der HERR stand vor ihm und sprach: Ich bin der HERR, der Gott deines Vaters Abraham und der Gott Isaaks. Das Land, auf dem du liegst, will ich dir und deinen Nachkommen geben.<br/> 14 Deine Nachkommen werden zahlreich sein wie der Staub auf der Erde. Du wirst dich '''nach Westen und Osten, nach Norden und Süden''' ausbreiten und durch dich und deine Nachkommen werden alle Sippen der Erde Segen erlangen.<br/> 15 Siehe, ich bin mit dir, ich behüte dich, wohin du auch gehst, und bringe dich zurück in dieses Land. Denn ich verlasse dich nicht, bis ich vollbringe, was ich dir versprochen habe.<br/> 16 Jakob erwachte aus seinem Schlaf und sagte: Wirklich, der HERR ist an diesem Ort und ich wusste es nicht.<br/> 17 Er fürchtete sich und sagte: Wie Ehrfurcht gebietend ist doch dieser Ort! Er ist nichts anderes als das Haus Gottes und das '''Tor des Himmels'''.<br/> </blockquote> El war für die semitischen Ugariter im zweiten vorchristlichen Jahrtausend der Name ihres höchsten Gottes. Ihm wurden die Beinamen „König“, „Freundlicher“ und „'''Stier'''“ verliehen. Diese Symbolik weist auf den Himmelsstier hin. Der Name El wurde von den Israeliten übernommen, und dieser Gott wurde von ihnen mit ihrem einzigen Gott gleichgesetzt. Der Gott El wurde vom Gott Baal verdrängt, der ebenfalls mit Stierhörnern konnotiert war. Er wurde auch als donnernder und Blitze schleudernder Gott dargestellt, was sich in den Mythen des antiken Griechenlands in der Figur des höchsten griechischen Gottes Zeus (Jupiter) widerspiegelt. In diesem Zusammenhang sei auf noch weitere Parallelitäten den verschiedenen Götterkulturen hingewiesen, die sich zum ugaritischen Baal-Zyklus ergeben, der in den keilalphabetischen Texten aus Ugarit (KTU) zu finden ist. Am Schluss dieses Werkes wird die kanaanitische Sonnengöttin Šapšu, die Zweitfrau von El, für die Wiederherstellung und Bewahrung der kosmischen Ordnung zu einem Opfermahl eingeladen, bei der ihr '''Brot und Wein''' dargeboten werden.<ref>Herbert Niehr: ''Der Ba‘al-Zyklus (KTU 1.1-6 + 1.8)'', Gütersloh 2015, S. 236.</ref> In Psalm&nbsp;65 mit dem Titel "Lobpreis auf den Retter und Schöpfer" werden dem Gott der Israeliten ganz ähnliche Wohltaten zugeschrieben, wie dem Gott Baal in der ugaritischen Religion. Im 10.&nbsp;Psalmvers heißt es beispielsweise: <blockquote> 10 Du hast für das Land gesorgt, es getränkt, es überschüttet mit Reichtum. Der Bach Gottes ist voller Wasser, gedeihen lässt du ihnen das Korn, so lässt du das Land gedeihen. </blockquote> Jakob war der der erste der drei Erzväter des Volkes Israel und der älteste Sohn des ältesten Sohnes Isaak von Abraham. Abraham war aus dem mesopotamischen Ur über Haran nach Bet-El gezogen, und Jakob ging in dieser Schilderung aus Beerscheba in der Nähe des Ortes Bet-El nach Haran zurück. Der Apostel Paulus schreibt in seinem zweiten Brief an die Bewohner der griechischen Hafenstadt Korinth zu Beginn des 5.&nbsp;Kapitels mit der Überschrift "Die Hoffnung des Apostels" über das Gebäude hinter der Pforte zum Himmel: <blockquote> 1 Wir wissen: Wenn unser irdisches Zelt abgebrochen wird, dann haben wir eine Wohnung von Gott, ein nicht von Menschenhand errichtetes '''ewiges Haus im Himmel'''. </blockquote> === Gedanken zur wundersamen Brotvermehrung === ==== Evangelien ==== [[Datei:Face de chapiteau figurant la Multiplication des pains, choeur de l'église de Saint-Nectaire, Puy-de-Dôme.jpg|mini|rechts|hochkant=2|Jesus mit vier seiner Jünger mit fünf Broten und zwei Fischen an einem Säulenkapitell in der romanischen Wallfahrtskirche Saint Nectaire auf dem Mont Cornadore in Saint-Nectaire in Frankreich (Département Puy-de-Dôme in der Region Auvergne-Rhône-Alpes).]] Die wundersame Speisung der mehreren Tausend mit wenigen Broten und Fischen wird in aller vier Evangelien der Bibel erwähnt. Das Ereignis fand auf einem Berg am Ufer des Sees von Galiläa (auch als "See von Tiberias", "See Genezareth" oder "Galiläisches Meer" bekannt) statt. In der abgelegenen Gegend gab es damals sehr wenig künstliche Lichtquellen, so dass ein ungestörter Anblick des Sternenhimmels möglich war. ===== Evangelium nach Johannes ===== Im sechsten Kapitel des Evangeliums nach '''Johannes''' tauchen bei der Beschreibung der Brotvermehrung durch Jesus zum jüdischen Pessachfest neben einigen weiteren Symbolen mit astronomischer Deutungsmöglichkeit auch die expliziten Zahlen Zwei, Fünf und Zwölf auf: <blockquote> 9 Hier ist ein kleiner Junge, der hat '''fünf Gerstenbrote''' und '''zwei Fische'''; doch was ist das für so viele?<br/> 10 Jesus sagte: Lasst die Leute sich setzen! Es gab dort nämlich viel Gras. Da setzten sie sich; es waren etwa '''fünftausend''' Männer.<br/> 11 Dann nahm Jesus die '''Brote''', sprach das Dankgebet und teilte an die Leute aus, so viel sie wollten; ebenso machte er es mit den '''Fischen'''.<br/> 12 Als die Menge satt geworden war, sagte er zu seinen Jüngern: Sammelt die übrig gebliebenen Brocken, damit nichts verdirbt!<br/> 13 Sie sammelten und füllten '''zwölf Körbe''' mit den Brocken, die von den '''fünf Gerstenbroten''' nach dem Essen übrig waren.<br/> ...<br/> 31 Unsere Väter haben das '''Manna''' in der Wüste gegessen, wie es in der Schrift heißt: '''Brot vom Himmel''' gab er ihnen zu essen.<br/> 32 Jesus sagte zu ihnen: Amen, amen, ich sage euch: Nicht Mose hat euch das '''Brot vom Himmel''' gegeben, sondern mein Vater gibt euch das wahre '''Brot vom Himmel'''.<br/> 33 Denn das '''Brot''', das Gott gibt, kommt vom '''Himmel''' herab und gibt der Welt das Leben.<br/> 34 Da baten sie ihn: Herr, gib uns immer dieses '''Brot'''!<br/> 35 Jesus antwortete ihnen: Ich bin das '''Brot des Lebens'''; wer zu mir kommt, wird nie mehr hungern, und wer an mich glaubt, wird nie mehr Durst haben.<br/> ...<br/> 48 Ich bin das '''Brot des Lebens'''.<br/> 49 Eure Väter haben in der Wüste das '''Manna''' gegessen und sind gestorben.<br/> 50 So aber ist es mit dem '''Brot''', das vom '''Himmel''' herabkommt: Wenn jemand davon isst, wird er nicht sterben.<br/> 51 Ich bin das '''lebendige Brot''', das vom '''Himmel''' herabgekommen ist. Wer von diesem '''Brot''' isst, wird in Ewigkeit leben. Das '''Brot''', das ich geben werde, ist mein Fleisch für das Leben der Welt. </blockquote> ===== Evangelium nach Markus ===== Eine ähnliche Schilderung befindet sich im sechsten Kapitel des Evangeliums nach '''Markus''', wo das Ereignis an einem abgelegenen und einsamen Ort stattgefunden hat: <blockquote> 38 Er sagte zu ihnen: Wie viele '''Brote''' habt ihr? Geht und seht nach! Sie sahen nach und berichteten: '''Fünf Brote''' und außerdem '''zwei Fische'''.<br/> 39 Dann befahl er ihnen, sie sollten sich in Mahlgemeinschaften im grünen Gras lagern.<br/> 40 Und sie ließen sich in Gruppen zu hundert und zu fünfzig nieder.<br/> 41 Darauf nahm er die '''fünf Brote''' und die '''zwei Fische''', blickte zum '''Himmel''' auf, sprach den Lobpreis, brach die '''Brote''' und gab sie den Jüngern, damit sie diese an die Leute austeilten. Auch die '''zwei Fische''' ließ er unter allen verteilen.<br/> 42 Und alle aßen und wurden satt.<br/> 43 Und sie hoben Brocken auf, '''zwölf Körbe''' voll, und Reste von den '''Fischen'''.<br/> 44 Es waren '''fünftausend''' Männer, die von den '''Broten''' gegessen hatten. </blockquote> Die Brotvermehrung auch ein weiteres Mal im achten Kapitel des Evangeliums nach '''Markus''' erwähnt: <blockquote> 5 Er fragte sie: Wie viele '''Brote''' habt ihr? Sie antworteten: '''Sieben'''.<br/> 6 Da forderte er die Leute auf, sich auf den Boden zu setzen. Dann nahm er die sieben '''Brote''', sprach das Dankgebet, brach die '''Brote''' und gab sie seinen Jüngern zum Verteilen; und die Jünger teilten sie an die Leute aus.<br/> 7 Sie hatten auch noch ein paar '''Fische''' bei sich. Jesus segnete sie und ließ auch sie austeilen.<br/> 8 Die Leute aßen und wurden satt. Und sie hoben die Überreste der '''Brotstücke''' auf, '''sieben Körbe''' voll.<br/> 9 Es waren etwa '''viertausend''' Menschen beisammen. Danach schickte er sie nach Hause.<br/> ...<br/> 19 Als ich die '''fünf Brote''' für die '''Fünftausend''' brach, wie viele '''Körbe voll Brotstücke''' habt ihr da aufgehoben? Sie antworteten ihm: '''Zwölf'''.<br/> 20 Und als ich die '''sieben Brote''' für die '''Viertausend''' brach, wie viele '''Körbe''' voll habt ihr da aufgehoben? Sie antworteten: '''Sieben'''.<br/> 21 Da sagte er zu ihnen: Versteht ihr immer noch nicht? </blockquote> ===== Evangelium nach Lukas ===== Ebenso verhält es sich im neunten Kapitel des Evangeliums nach '''Lukas''', wo das Ereignis dem Ort Betsaida (zu Deutsch: „Haus des Fisches“) am See Genezareth zugeordnet ist: <blockquote> 12 Als der Tag zur Neige ging, kamen '''die Zwölf''' und sagten zu ihm: Schick die Leute weg, damit sie in die umliegenden Dörfer und Gehöfte gehen, dort Unterkunft finden und etwas zu essen bekommen; denn wir sind hier an einem abgelegenen Ort.<br/> 13 Er antwortete ihnen: Gebt ihr ihnen zu essen! Sie sagten: Wir haben nicht mehr als '''fünf Brote''' und '''zwei Fische'''; wir müssten erst weggehen und für dieses ganze Volk etwas zu essen kaufen.<br/> 14 Es waren nämlich etwa '''fünftausend''' Männer. Er aber sagte zu seinen Jüngern: Lasst sie sich in Gruppen zu ungefähr fünfzig lagern!<br/> 15 Die Jünger taten so und veranlassten, dass sich alle lagerten.<br/> 16 Jesus aber nahm die '''fünf Brote''' und die '''zwei Fische''', blickte zum '''Himmel''' auf, sprach den Lobpreis und brach sie; dann gab er sie den Jüngern, damit sie diese an die Leute austeilten.<br/> 17 Und alle aßen und wurden satt. Als man die übrig gebliebenen Brotstücke einsammelte, waren es '''zwölf Körbe''' voll. </blockquote> ===== Evangelium nach Matthäus ===== Auch im vierzehnten Kapitel des Evangeliums nach '''Matthäus''' ist von einem abgelegenen Ort in einer einsamen Gegend die Rede: <blockquote> 17 Sie sagten zu ihm: Wir haben nur '''fünf Brote''' und '''zwei Fische''' hier.<br/> 18 Er antwortete: Bringt sie mir her!<br/> 19 Dann ordnete er an, die Leute sollten sich ins Gras setzen. Und er nahm die '''fünf Brote''' und die '''zwei Fische''', blickte zum '''Himmel''' auf, sprach den Lobpreis, brach die Brote und gab sie den Jüngern; die Jünger aber gaben sie den Leuten<br/> 20 und alle aßen und wurden satt. Und sie sammelten die übrig gebliebenen Brotstücke ein, '''zwölf Körbe''' voll.<br/> 21 Es waren etwa '''fünftausend''' Männer, die gegessen hatten, dazu noch Frauen und Kinder. </blockquote> Etwas abgewandelt taucht die Brotvermehrung mit '''sieben Körben''' auch im fünfzehnten Kapitel des Evangeliums nach '''Matthäus''' auf: <blockquote> 34 Jesus sagte zu ihnen: Wie viele '''Brote''' habt ihr? Sie antworteten: '''Sieben''' - und ein paar '''Fische'''.<br/> 35 Da forderte er die Leute auf, sich auf den Boden zu setzen.<br/> 36 Und er nahm die '''sieben Brote''' und die '''Fische''', sprach das Dankgebet, brach sie und gab sie den Jüngern und die Jünger gaben sie den Menschen.<br/> 37 Und alle aßen und wurden satt. Und sie sammelten die übrig gebliebenen Stücke ein, '''sieben Körbe''' voll.<br/> 38 Es waren '''viertausend''' Männer, die gegessen hatten, dazu noch Frauen und Kinder.<br/> 39 Danach schickte er die Menge nach Hause, stieg ins Boot und fuhr in die Gegend von Magadan. </blockquote> Der Ort Magadan ist möglicherweise mit dem heutigen Ort Migdal (aramäisch: Magdala) am westlichen Ufer des Sees Genezareth gleichzusetzen. ==== Astronomische Bezüge ==== [[Datei:Sternenhimmel.Pessach.25.3.23.png|mini|rechts|hochkant=2|Sternenhimmel am jüdischen Pessachfest im Jahr 25 nach Christus. Der Vollmond stand hoch über dem Horizont im Süden im Herbstpunkt beim Stern Spica (= "Kornähre") im Sternbild Jungfrau (Virgo). Gleichzeitig befand sich die Sonne tief unter dem Horizont im Norden in der Nähe des Frühlingspunktes im Sternbild Fische (Pisces).]] [[Datei:Dendera.09.Jungfrau.Loewe.jpg|mini|rechts|hochkant=2|Das Sternbild Jungfrau (links) mit der Kornähre in der Hand und das Sternbild Löwe (rechts) im ägyptischen Zodiak von Dendera aus der Zeit kurz vor Christi Geburt.]] [[Datei:Dendera.03.Fische.Wassermann.jpg|mini|rechts|hochkant=2|Das Sternbild Fische (links) und das Sternbild Wassermann (rechts unten) im ägyptischen Zodiak von Dendera aus der Zeit kurz vor Christi Geburt.]] Zu diesen Bibelstellen sind im Folgenden einige Hinweise mit astronomischen Bezügen aufgeführt. Die [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Beobachtungen_in_der_Nähe_der_Ekliptik|Bezugspunkte]] liegen hierbei in der Nähe der [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Die_Ekliptik|Ekliptik]]: * In den Versen im Evangelium nach Johannes ist mehrfach vom '''Brot, das vom Himmel herabkommt''' die Rede. * Das zur Herstellung von Brot erforderliche Getreide kann durch eine '''Kornähre''' symbolisiert werden. Am Sternenhimmel wird die Kornähre durch den hellen, ekliptiknahen Stern '''Spica''' (α Virginis) im Sternbild '''Jungfrau''' (Virgo) repräsentiert. Der Vollmond stand zum jüdischen Pessachfest beim Stern Spica. * Alle Pflanzen benötigen für das Gedeihen '''Wasser'''. Das '''Wasser''' wird am Himmel durch die drei Wassersternbilder der Ekliptik '''Fische''' (Pisces), '''Wassermann''' (Aquarius), und '''Ziegenfisch''' (Steinbock, Capricornus) westlich des [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Frühlingspunkt|Frühlingspunktes]] repräsentiert. Diese Sternbilder bilden mit einigen weiteren angrenzenden Wassersternbildern den [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|Urozean am Himmel]] (siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Trichter_der_Thuraya|Der Trichter der Thuraya]]). Die Wassersternbilder waren zum Pessachfest in den drei Monaten unmittelbar zuvor von der Sonne durchlaufen worden und befanden sich beim Sonnenuntergang deshalb bereits unterhalb des westlichen Horizonts. * Das Sternbild '''Fische''' (Pisces) besteht seit der Antike aus '''zwei Fischen'''. * Zu Lebzeiten von Jesus von Nazareth war der '''Frühlingspunkt''' vom Sternbild Widder (Aries, ursprünglich das Hinterteil des großen Sternbilds [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|Himmelsstier (Taurus caeli)]]) in das Sternbild '''Fische''' (Pisces) gewandert. Inzwischen ist er innerhalb dieses Sternbilds noch weiter nach Westen gewandert. Die Sonne und der Neumond standen zu Beginn des jüdischen Monats Nisan, also dem Monat des jüdischen Pessachfestes, im Sternbild '''Fische'''. Der erste Monat des Jahres, Nisan, hieß bereits in der mesopotamischen Tradition, als sich der Frühlingspunkt noch im Sternbild Widder (Aries) befand, auf Akkadisch "nisannu" (siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Schaltregeln|Plejaden-Schaltregeln]]). In der alten jüdischen Tradition war der Nisan deswegen mit dem Sternbild Widder verbunden. Ferner wurde der Widder dem israelitischen Stamm Juda zugeordnet. * Zu Lebzeiten von Jesus von Nazareth war der '''Herbstpunkt''' vom Sternbild Waage (Libra, ursprünglich die Scheren des großen Sternbilds [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsskorpion|Himmelsskorpion (Scorpio caeli)]]) in das Sternbild Jungfrau (Virgo) gewandert. Inzwischen ist er innerhalb dieses Sternbilds noch weiter nach Westen gewandert. Um 285 nach Christi erreichte der '''Herbstpunkt''' dann die ekliptikale Länge des Sterns '''Spica''' (α Virginis). * Der '''Frühlingspunkt''' –&nbsp;damals im Sternbild Fische&nbsp;– und der '''Herbstpunkt''' –&nbsp;damals im Sternbild Jungfrau (Virgo) beim Stern Spica&nbsp;– befinden sich immer in genau gegenüber liegenden Punkten auf der Ekliptik. Auf diese Weise umfassen diese beiden ausgezeichneten Punkte den Lebewesenkreis (Zodiak) mit seinen '''zwölf''' Sternbildern sowie die Bahnen aller '''sieben''' Wandelgestirne. Diese beiden Punkte teilten die Ekliptik in '''zwei''' gleichgroße Teile, das Sommerhalbjahr und das Winterhalbjahr. Siehe hierzu auch "[[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Beobachtungen_in_der_Nähe_der_Ekliptik|Beobachtungen in der Nähe der Ekliptik]]". ** Die '''fünf Brote''' können mit den fünf mit bloßem Auge sichtbaren Wandelgestirnen (Planeten) '''Merkur''', '''Venus''', '''Mars''', '''Jupiter '''und '''Saturn''' gleichgesetzt werden.<br/>'''''Anmerkung''': In den deutschsprachigen Bibelübersetzungen wird in der Regel nicht zwischen Fixsternen und Planeten unterschieden. Für eine Ausnahme siehe 2.&nbsp;Buch der Könige, Kapitel 23, Vers 5 aus dem siebenten vorchristlichen Jahrhundert, wo in der Einheitsübersetzung explizit von "den Wandelsternen" und in der Luther-Bibel von "den Planeten" die Rede ist.<ref>[https://www.bibleserver.com/EU/2.K%C3%B6nige23%2C5 2.&nbsp;Buch der Könige, Kapitel 23, Vers 5], bibleserver.com, Einheitsübersetzung 2016</ref> Die Vulgata schreibt hier allerdings von den "duodecim signis" (zu Deutsch: "'''zwölf''' Zeichen"), womit die '''zwölf''' Sternzeichen der Ekliptik gemeint sind, durch die die '''sieben''' Wandelgestirne ziehen. Die Septuaginta spricht noch allgemeiner von den "μαζουρωθ" ("mazuroth") nach dem Hebräischen Wort "מַזָּלָה" ("mazzaroth"), womit allgemein eher Sternkonstellationen und nur im engeren Sinne die Sternzeichen des Zodiaks gemeint sind.'' ** Die '''zwei Fische''' können also mit den beiden flächenhaft wahrnehmbaren Wandelgestirnen '''Sonne''' und '''Mond '''gleichgesetzt werden. ** Die Summe der '''fünf Brote''' und der '''zwei Fische''' respektive die '''sieben Brote''' (oder die '''sieben Körbe''') entsprechen der Anzahl der freiäugig sichtbaren '''sieben Wandelgestirne''', die sich entlang der Ekliptiklinie stetig gegenüber dem Fixsternhimmel bewegen. Siehe hierzu auch "[[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Zusammenhang_mit_dem_Stier|Zu den Etyma und den Kognaten von "Sieben", "Stier", "Gestirn" und "Stern"]]". ** Die ausgeteilten '''Brote''' und '''Fische''' durchmaßen die gesamte versammelte Menschenmenge, die durch den vollständigen [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Zodiak|Lebewesenkreis (Zodiak)]] mit den '''zwölf Lebewesenkreiszeichen''' beziehungsweise durch die '''zwölf Körbe''' symbolisiert wird. Der Planet Jupiter, der den Zodiak in zwölf Jahren einmal durchläuft, wurde in Babylonien mit dem babylonischen Hauptgott Marduk gleichgesetzt. * Insgesamt gibt es am Fixsternhimmel gut 2800&nbsp;Sterne bis zur scheinbaren Helligkeit 5,5<sup>m</sup> und um die 9000&nbsp;Sterne bis zur scheinbaren Helligkeit&nbsp;6,5<sup>m</sup>, die ohne Lichtverschmutzung mit bloßem Auge als einzelne Lichtpunkte gesehen werden können. Diese verteilen sich allerdings in der gesamten Himmelssphäre, so dass von einem Punkt auf der Erdoberfläche aus zu jedem Zeitpunkt immer nur ungefähr die Hälfte davon über dem Horizont steht. An den beiden Polen sind stets nur die Sterne der entsprechenden nördlichen beziehungsweise südlichen Hemisphäre zu sehen, und vom Äquator aus können im Laufe eines Jahres alle Sterne gesehen werden. Je nach Breitengrad können in den wolkenlosen Nächten eines vollständigen Jahres bei Abwesenheit von Streulicht, wie zum Beispiel verursacht durch den Mond, mindestens viereinhalbtausend Sterne beobachtet werden.<ref>Bob King: [https://skyandtelescope.org/astronomy-blogs/how-many-stars-night-sky-09172014/ 9,096 Stars in the Sky—Is that all? How many stars in the sky can you see?], skyandtelescope.org - The essential Guide to Astronomy, 17. September 2014</ref> Diese Anzahl entspricht dem Mittelwert der Spanne der bei der Brotvermehrung versammelten Menschen, deren Anzahl in den Evangelien mit '''viertausend''' beziehungsweise '''fünftausend''' angegeben ist. ** Im ersten Buch des Alten Testaments ('''Genesis''') wird Abram aus Ur in Mesopotamien bereits das Folgende prophezeit: <blockquote> 15,5 ''Sieh doch zum Himmel hinauf und zähl die Sterne, wenn du sie zählen kannst! Und er sprach zu ihm: So zahlreich werden deine Nachkommen sein''<br/> ...<br/> 17,5 ''Man wird dich nicht mehr Abram nennen. Abraham, Vater der Menge, wird dein Name sein; denn zum Stammvater einer Menge von Völkern habe ich dich bestimmt.'' </blockquote> * Die Gruppen von (ungefähr) '''fünfzig''' oder '''hundert Männern''' entsprechen den Sternbildern, die über den gesamten Himmel verteilt sind. Nach der Festlegung der Internationalen Astronomischen Union (IAU) von 1930 gibt es heute 88&nbsp;Sternbilder, die den Himmel vollständig abdecken. Mit den maximal ungefähr 8800&nbsp;freiäugig sichtbaren Sternen entspricht dies im Mittel also 100&nbsp;Sternen pro Sternbild. Bei 4400&nbsp;freiäugig sichtbaren Sternen wären es 50&nbsp;Sterne pro Sternbild. Diese Abschätzung entspricht genau der Spanne der Gruppenstärken, die im Neuen Testament angegeben sind. * Das '''Brot''' und der '''Wein''' werden nach der christlichen Lehre bei der Transsubstantiation in den Leib und das Blut des vom '''Himmel''' herabgekommenen "Brot des Lebens" (vergleiche die Rede über das Himmelsbrot von Jesus in der Synagoge von Kafarnaum in Evangelium nach Johannes 6,48–58) gewandelt, das die kosmische Ewigkeit verheißt. Die Zahlen '''Zwei''', '''Fünf''', '''Sieben''' und '''Zwölf''' stehen in einem einfachen arithmetischen Zusammenhang, bei dem die beiden jeweils vorhergehenden Zahlen der Folge addiert werden: {| class="wikitable" |+ |'''Zahl''' |'''Summe''' |'''Anmerkung''' |- |'''2''' | |Anzahl der freiäugig als '''flächenhaft wahrnehmbaren Wandelgestirne''' ('''Sonne''' und '''Mond'''), siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Zwei|"Zur Zwei"]] |- |'''5''' | |Anzahl der freiäugig als '''punktförmig wahrnehmbaren Wandelgestirne''' '''Merkur''', '''Venus''', '''Mars''', '''Jupiter''', '''Saturn''' |- |'''7''' |= 2 + 5 |Anzahl der freiäugig wahrnehmbaren '''Wandelgestirne''' sowie der '''Tage in der Woche''', siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Sieben|"Zur Sieben"]] |- |'''12''' |= 5 + 7 |Anzahl der '''Monate im Jahr''', der '''Lebewesenkreiszeichen des Zodiaks''' sowie der '''Erdenjahre pro Jupiterjahr''', siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Zwölf|"Zur Zwölf"]], vergleiche hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Zodiak|"Der Zodiak"]] |- |'''19''' |= 7 + 12 |Anzahl der '''Jahre''' mit '''zwölf Monaten''' und '''sieben Schaltmonaten''' einer '''Meton-Periode''', siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Neunzehn|"Zur Neunzehn"]], vergleiche hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Schaltregeln|"Die Plejaden-Schaltregeln"]] und [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Mondzyklen#Der_Meton-Zyklus|"Der Meton-Zyklus"]] |} === Weitere Bezüge === Weitere Bezüge von der Astronomie zur Theologie ergeben sich bei den folgenden Sachverhalten: → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Biblische_Erwähnungen|'''biblische Erwähnungen von Konstellationen''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Der_Stern_von_Bethlehem|'''Der Stern von Bethlehem''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Ochs_und_Esel|'''Ochs und Esel / Krippe / „Ich bin das Alpha und das Omega“''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Biblische_Bezüge|'''Biblische Bezüge zu den Mondhäusern / Mondstationen''']]. == Zur Kosmologie == [[Datei:Kosmologisches.Modell.Schwarze.Schale.Rotverschiebung.png|mini|rechts|hochkant=2.5|Ein kosmologisches Modell unseres im Zentrum isotropen und inhomogenen Universums, das von einer undurchsichtigen und massereichen schwarzen Kugelschale umgeben ist. Von der äußeren Region aus betrachtet, ist unser Universum ein gigantisches Schwarzes Loch. Zwischen dem inneren und dem äußeren Bereich der schwarzen Kugelschale ist kein Informationsaustausch möglich. Jegliche Materie, die von innen oder außen in die schwarze Kugelschale gelangt, ist von innen und von außen nicht mehr sichtbar. Sowohl die innere als auch die äußere Grenze der schwarzen Kugelschale stellen demzufolge einen Ereignishorizont dar.]] Die '''Kosmologie''' beschäftigt sich mit der Struktur, dem Ursprung und der Entwicklung des Universums. Dadurch ergeben sich zahlreiche Bezüge zur beobachtenden '''Astronomie''' und zur '''Astrophysik''', aber auch zur '''Quantenphysik'''. In der Antike gingen die Menschen noch davon aus, dass sich die Erde im Mittelpunkt der Welt und somit auch in der Mitte des sichtbaren Universums befindet. Dieses geozentrische Weltbild wurde seit dem 16.&nbsp;Jahrhundert, ausgelöst durch die kopernikanische Wende, zunehmend verworfen und durch ein heliozentrisches Weltbild ersetzt. Durch die Erfindung und Verwendung von Fernrohren konnten seit dem Beginn des 17.&nbsp;Jahrhunderts immer mehr Details im Sternenhimmel entdeckt werden. Durch astronomische Beobachtungen ergaben sich immer mehr Indizien für die Tatsache, dass die Erde einmal pro Jahr auf einer Ellipsenbahn die Sonne umrundet und nicht die Sonne die Erde umkreist. Der Philosoph Immanuel Kant (1724–1804) erkannte bereits 1755 in seiner Allgemeinen Naturgeschichte und Theorie des Himmels das innere Wesen unserer Milchstraße. Mit der ersten zuverlässigen Messung der Parallaxe von unserer Erde zum benachbarten Fixstern 61&nbsp;Cygni ("Bessel's Stern") durch Friedrich Wilhelm Bessel (1784–1846) in Königsberg und der daraus folgenden Berechnung von dessen Entfernung von gut zehn Lichtjahren im Jahr 1838 war die Tatsache, dass die Erde um die Sonne läuft, endgültig bewiesen. Die Auswertung der astronomischen Beobachtungen hat zu der heute allgemein geteilten Auffassung geführt, dass unser Universum bei einem Urknall entstanden ist und seitdem expandiert. Die Berücksichtigung des Äquivalenzprinzips zwischen schwerer und träger Masse, das zu der von '''Albert Einstein''' (1879–1955) formulierten Allgemeinen Relativitätstheorie führt, brachte '''Alexander Friedmann''' (1888–1925) 1922 zu der theoretischen Vorhersage eines dynamischen Universums. Fünf Jahre später schlussfolgerte der belgische Astronom '''Georges Lemaître''' (1894–1966) aus den von '''Vesto Slipher''' (1875–1969) beobachteten Rotverschiebungen von fernen Galaxien und den von '''Edwin Hubble''' (1889–1953) ermittelten Entfernungen dieser Galaxien, dass das Universum expandiert. Aufgrund dieser Erkenntnis ergibt sich, dass das Universum einen Ursprung mit sehr kleinem Radius gehabt haben muss. Diesen Zustand nannte er "primordiales Atom" beziehungsweise "Uratom". In der Folgezeit etablierte sich für diesen initialen Vorgang der Begriff "'''Urknall'''" (im Englischen: "'''Big Bang'''").<ref>Markus Bautsch: ''[https://en.wikibooks.org/wiki/Moving_objects_in_retarded_gravitational_potentials_of_an_expanding_spherical_shell/Brief_historical_review Moving objects in retarded gravitational potentials of an expanding spherical shell / Brief historical review], Wikibook (englisch), 2024, abgerufen am 28. Februar 2026</ref> Viele Astrophysiker versuchen heute mit dem sogenannten '''Standardmodell der Kosmologie''' (auch '''ΛCDM-Modell''' beziehungsweise Lambda-CDM-Modell, wobei "CDM" für "cold dark matter" steht, also für "kalte, dunkle Materie") die Entwicklung des Universums nachzubilden. Hierfür wenden sie das kosmologische Prinzip an, das von zwei grundlegenden Annahmen ausgeht:<ref>Markus Bautsch: ''[https://en.wikibooks.org/wiki/Moving_objects_in_retarded_gravitational_potentials_of_an_expanding_spherical_shell/Preface Moving objects in retarded gravitational potentials of an expanding spherical shell / Preface], Wikibook (englisch), 2024, abgerufen am 28. Februar 2026</ref> # Das Weltall sei '''homogen''', was bedeutet, dass es in groben Zügen von jedem Punkt aus gleich aussieht. # Das Weltall sei '''isotrop''', was besagt, dass es in groben Zügen in jede Richtung gleich aussieht. Mit diesen Annahmen kann das Modell berechnet werden, und mit diversen zusätzlichen Annahmen stimmt es in vielerlei Hinsicht mit den astronomischen Beobachtungen überein. Zu den zusätzlichen Annahmen gehören die folgenden beiden hypothetischen Größen: * '''Kalte, dunkle Materie''', die zwar der Gravitation unterläge, aber keine Wechselwirkung mit elektromagnetischer Strahlung zeigt. * Eine '''kosmologische Konstante''' Λ, die eine '''dunkle Energie''' beschreibt und für die beschleunigte Expansion des Universums verantwortlich sei. Weder für die Homogenität noch für die Isotropie des Kosmos konnten bislang Belege gefunden werden, und auch für die kalte dunkle Materie und die dunkle Energie konnte bislang keine physikalische Interpretation geliefert werden. Ferner ist auch die Annahme, dass die Naturkonstanten unveränderliche Werte haben, nicht begründbar. Auf kosmischen Zeitskalen kann es durchaus Änderungen geben, die wir derzeit nicht messen können. Die gilt insbesondere für die Hubble-Konstante, die die Expansionsrate des Universums beschreibt, für die Gravitationskonstante, die die Anziehung zweier Massen beschreibt, oder für die kosmologische Konstante, die die beschleunigte Expansion des Universums beschreibt. In diesem Kontext sei darauf hingewiesen, dass unser Universum genauso groß ist wie ein Schwarzes Loch mit der Masse unseres Universums. Deshalb gehen einige Kosmologen davon aus, dass wir innerhalb eines Schwarzen Loches der Größe und Masse unseres Universums leben könnten. Siehe hierzu auch: [[:en:Moving_objects_in_retarded_gravitational_potentials_of_an_expanding_spherical_shell|'''Moving objects in retarded gravitational potentials of an expanding spherical shell''']]. Darüber hinaus mehren sich Anzeichen und Hinweise, die gegen die Ergebnisse des Standardmodells der Kosmologie sprechen, beziehungsweise durch weitere Hypothesen, die physikalisch nicht begründet werden können, im Standardmodell berücksichtigt werden müssen. Die folgende unvollständige Liste soll hierzu einige Anhaltspunkte liefern: * Präzise astronomische Beobachtungen zeigen, dass das Weltall auch auf großen Längenskalen '''nicht homogen''' ist, sondern Strukturen zeigt. * Präzise astronomische Beobachtungen zeigen, dass das Weltall auch auf großen Längenskalen '''nicht isotrop''' ist (Asymmetrie der kosmischen Hintergrundstrahlung). * Die Hubble-Konstante hat heute einen anderen Wert als früher ("'''Hubble tension'''"), was mit dem Standardmodell nicht im Einklang steht. * Das beobachtete Vorkommen des am häufigsten auftretenden stabilen Isotops des dritten Elements im Periodensystem, des Alkalimetalls '''<math>{}^{7}_{3}\mathrm{Lithium}</math>''', ist mindestens dreimal geringer als vom Standardmodell vorhergesagt. * Die '''Rotverschiebung von fernen Galaxien''' ist deutlich größer als es nach dem Standardmodell möglich wäre. * Die beobachteten '''Rotationskurven von Spiralgalaxien''' stehen im Widerspruch zu den Ergebnissen des Standardmodells. * Das Standardmodell ist nicht in der Lage, die Abwesenheit von '''Antimaterie''' im sichtbaren Teil des Universums zu erklären. * Die im frühen Universum beobachteten '''primordialen Schwarzen Löcher und Galaxien''' mit explodierende '''Supernovae''' sowie dem Vorkommen von '''Sauerstoff''' stehen im Widerspruch zu den Ergebnissen des Standardmodells. == Zur Astrologie == Eine Sonderstellung nimmt die '''{{w|Astrologie}}''' (zusammengesetzt mit dem altgriechischen ἄστρον ("astron"), zu Deutsch „Sternenlehre“) ein. Sie ist ein weiteres Beispiel für eine Disziplin, bei der grundlegende Kenntnisse über die Astronomie eine Voraussetzung sind. Sie versucht, Zusammenhänge zwischen den Konstellationen der Wandelgestirne oder astronomischen Ereignissen am Sternenhimmel mit irdischen Geschehnissen oder Veränderungen herzustellen, insbesondere was bestimmte Konjunktionen und daraus abgeleitete Prophezeiungen betrifft. Sie wurde bereits in Mesopotamien und in anderen alten Kulturkreisen von Astronomen ausgeübt. Noch der Astronom '''{{w|Johannes Kepler}}''' (1571–1630) hat als einer der letzten Astronomen einen wesentlichen Teil seiner Einkünfte durch die Erstellung von Horoskopen bestritten. Aber schon Aristoteles hatte festgestellt und beschrieben, dass die bei bestimmten Konstellationen am Himmel vorhergesagten Ereignisse nicht eingetreten waren. Vor der Aufklärung haben astrologische Prophezeiungen noch eine große und weitreichende gesellschaftliche Bedeutung gehabt. Als Beispiel seien die Behauptungen des ersten im Kurfürstentum Brandenburg tätigen Astrologen '''{{w|Johannes Carion}}''' (1499–1537) genannt, der für 1524 eine Sintflut vorhersagte, die nicht eingetroffen ist.<ref>{{Literatur |Autor=Markus Bautsch, Friedhelm Pedde |Titel=Vor 500 Jahren: Die Sintflut von 1524 die nicht stattfand |Online=https://wfs.berlin/wp-content/uploads/2024/05/A19-BROplanetA4_40s-feb2024ff_www-rz.pdf |Sammelwerk=Dem Himmel nahe. |WerkErg=Mitteilungen der Wilhelm-Foerster-Sternwarte e.V.|Nummer=19 |Hrsg=Wilhelm-Foerster-Sternwarte e.V. / Zeiss-Planetarium am Insulaner |Ort=Berlin |Datum=2024-02 |Seiten=16–19 |Sprache=de |Abruf=2025-08-03|ISSN=2940-9330}}</ref> Der Wiener Hofastronom '''{{w|Georg Tannstetter}}''' (1482–1535) sah sich 1523 bemüßigt, die schon lange im Voraus erhitzten und besorgten Gemüter zu beruhigen:<ref>Georg Tannstetter: ''Libellus consolatorius contra opiniones de diluvio et aliis horrendis periculis anni 1523''</ref> <blockquote> Nun hat sich überall, in allen Köpfen, in allen Seelen das Gerücht eingeschlichen:<br/> die Gelehrten und Weisen sind in ständigem Streitgespräch, andere hingegen sind derart verstört, dass sie ihren Geschäften nicht mehr nachgehen können; sie verkaufen ihre Anwesen, ihre Felder und Besitztümer oder lassen davon ab, Güter zu kaufen, in der Hoffnung, ihr Geld leichter in die sicheren Berge transportieren zu können. Andere wiederum verschieben ihr Heiratsversprechen, kündigen ohne scheinbaren Grund Verträge auf, entziehen sich ihren christlichen Gelübden, arbeiten faul und missmutig auf dem Land und fragen sich, was es denn nütze, Geld und Gut anzuhäufen, wenn doch in kürzester Zeit niemand mehr davon Nutzen ziehen könne. </blockquote> '''→ Siehe auch:''' * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Definition|'''Konjunktionen''', Abschnitt '''Definition''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Historische_Konjunktionen|'''Historische Konjunktionen''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Beobachtungen_in_der_Nähe_der_Ekliptik|'''Beobachtungen in der Nähe der Ekliptik''']]. <div style="clear:both"></div> == Einzelnachweise == <references></references> jtmipe8awztlwg9hburoc555bpx5bwz 1090402 1090401 2026-09-06T00:28:09Z Bautsch 35687 /* Der Himmelsthron */ +ref 1090402 wikitext text/x-wiki Viele Bezeichnungen für verschiedene Lehren werden mit der aus dem Altgriechischen stammenden Endung "-logie" (altgriechisch λόγος ("logos"), zu Deutsch „Lehre“) gebildet. Die folgenden Disziplinen sind in diesem Kontext hervorzuheben, da sie insbesondere für die '''{{w|Archäoastronomie}}''' wertvolle wissenschaftliche Ergänzungen zur '''{{w|Astronomie}}''' (aus den altgriechischen Wörtern ἄστρον ("ástron", zu Deutsch „Stern“) und νόμος ("nómos, zu Deutsch „Gesetz“) zusammengesetzt also „Sterngesetz“) liefern: * Die '''{{w|Archäologie}}''' (zusammengesetzt mit dem altgriechischen Wort ἀρχαῖος ("archaios"), zu Deutsch „Altertumslehre“) beschäftigt sich mit der kulturellen Entwicklung der Menschheit. * Die '''{{w|Etymologie}}''' (zusammengesetzt mit dem altgriechischen Wort ἔτυμος ("etymos"), zu Deutsch „Wortherkunftslehre“) untersucht die geschichtliche Herkunft von Wörtern. * Die '''{{w|Mythologie}}''' (zusammengesetzt mit dem altgriechischen Wort μῦθος ("mythos"), zu Deutsch „Erzählungslehre“), die sich wissenschaftlich mit der Sagenwelt beschäftigt. * Die '''{{w|Theologie}}''' (zusammengesetzt mit dem altgriechischen Wort θεός ("theós"), zu Deutsch „Gotteslehre“) mit ihren Lehren zum religiösen Glauben und dessen Glaubensdokumenten. * Die '''{{w|Kosmologie}}''' (zusammengesetzt mit dem altgriechischen Wort κόσμος ("kósmos"), zu Deutsch „Weltenlehre“) ist hingegen eine Lehre, die sich im Laufe der Jahrtausende deutlich verändert hat und sich auch heute noch erheblich weiterentwickelt, da es in der modernen Astronomie und Astrophysik mit zunehmend hohem technischem Aufwand immer wieder zu neuen Erkenntnissen kommt. * Die '''{{w|Numerologie}}''' (zusammengesetzt mit dem lateinischen Wort numerus, zu Deutsch „Zahlenlehre“) mit ihren mystischen Lehren über die symbolische Zuweisung von Bedeutungen an Zahlen. Von der Antike bis ins Mittelalter galt die Beherrschung der '''{{w|sieben freien Künste}}''' als Voraussetzung für das Betreiben von Philosophie. Zu den drei "trivialen" Künsten der {{w|Grammatik}}, der {{w|Rhetorik}} und der {{w|Dialektik}} des '''{{w|Trivium|Triviums}}''' wurden die vier Künste der {{w|Musiktheorie}}, der {{w|Arithmetik}}, der {{w|Geometrie}} und der {{w|Astronomie}} zu den Künsten des '''{{w|Quadrivium|Quadriviums}}''' gezählt → siehe hierzu auch [[Quadriviale_Kuriositäten|'''Wikibook ''Quadriviale Kuriositäten''''']]. == Zur Etymologie == Die Genesis aus dem Alten Testament greift die Thematik der Verwirrung der einheitlichen Sprache in ihrem elften Kapitel auf, und beschreibt, wie die bereits sternenkundigen Menschen im Norden Mesopotamiens übermütig geworden waren und in Babel einen Turm mit einer Spitze '''bis in den Himmel''' errichten wollten:<ref>[https://www.bibleserver.com/EU/1.Mose11 Genesis 11], Genesis, Kapitel 11, Einheitsübersetzung</ref> <blockquote> 1 Die ganze Erde hatte eine Sprache und ein und dieselben Worte.<br/> 2 Als sie ostwärts aufbrachen, fanden sie eine Ebene im Land Schinar und siedelten sich dort an.<br/> 3 Sie sagten zueinander: Auf, formen wir Lehmziegel und brennen wir sie zu Backsteinen. So dienten ihnen gebrannte Ziegel als Steine und Erdpech als Mörtel.<br/> 4 Dann sagten sie: Auf, bauen wir uns eine Stadt und einen Turm mit einer Spitze '''bis in den Himmel'''! So wollen wir uns einen Namen machen, damit wir uns nicht über die ganze Erde zerstreuen.<br/> 5 Da stieg der HERR herab, um sich Stadt und Turm anzusehen, die die Menschenkinder bauten.<br/> 6 Und der HERR sprach: Siehe, ein Volk sind sie und eine Sprache haben sie alle. Und das ist erst der Anfang ihres Tuns. Jetzt wird ihnen nichts mehr unerreichbar sein, wenn sie es sich zu tun vornehmen.<br/> 7 Auf, steigen wir hinab und verwirren wir dort ihre Sprache, sodass keiner mehr die Sprache des anderen versteht.<br/> 8 Der HERR zerstreute sie von dort aus über die ganze Erde und sie hörten auf, an der Stadt zu bauen.<br/> 9 Darum gab man der Stadt den Namen Babel, Wirrsal, denn dort hat der HERR die Sprache der ganzen Erde verwirrt und von dort aus hat er die Menschen über die ganze Erde zerstreut. </blockquote> Es mag weniger verwunderlich sein, dass Schöpfungsmythen oder Berichte über Katastrophen nicht nur einen astronomischen Hintergrund haben, sondern in völlig verschiedenen Kulturen sehr ähnliche Merkmale zeigen, wenn man sich das Folgende bewusst macht: Einige Indizien deuten auf einen für viele Kulturen gemeinsamen Ursprung hin, der auf eine tiefsinnige Betrachtung und Beobachtung des Himmelsgeschehens hindeutet. Bei bestimmten Wörtern sind die Ähnlichkeiten in vielen lebenden und toten Sprachen so auffällig, dass sie ein gemeinsames Ursprungswort (Etymon) haben und somit Kognaten sein dürften. === "Stern" === Bei den Wörtern „Gestirn“ beziehungsweise „Stern“ sind die Ähnlichkeiten in vielen lebenden und toten Sprachen sehr auffällig, und diese Verwandtschaften mögen durch die Wörter für "Stern" in den folgenden Sprachen belegt werden: * Akkadisch "istar" * Indogermanisch "ster" * Griechisch "astro" / "asteri" * Lateinisch "astrum" / "stella" * Althochdeutsch "stern(o)" * Jiddisch "shtern" * Katalanisch und Spanisch "estrella" * Portugiesisch "estrela" * Englisch "star" * Niederländisch "ster" * Westfriesisch "stjer" * Italienisch und Korsisch "stella" * Rumänisch "stea" * Sardisch "istedda" * Maltesisch "stilla" * Französisch "étoile" aus Altfranzösisch "estoile" * Galicisch "estrela" * Walisisch "seren" * Dänisch und Norwegisch "stjerne" * Schwedisch "stjärna" * Isländisch "stjarna" * Kurdisch "stêrk" * Gujarati "Tārō" * Hindi "तारा" (taara) * Marathi "तारा" (Tārā) * Nepalesisch "तारा" (Tārā) * Punjabi "ਤਾਰਾ" (Tārā) * Singhalesisch "තරුව" (taruva) * Khmer "តារា" (tara) * Armenisch "աստղ" (astgh) * Tadschikisch "ситора" (sitora) * Hausa "tauraro" * Krio "sta" === "Stier" === Eine starke Ähnlichkeit gibt es in vielen Sprachen auch zwischen den Wörtern „Stern“ und „Stier“. Der Stier bezeichnet zudem auch ein bedeutendes und eines der ältesten Sternbilder überhaupt: → Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|'''Himmelsstier''']]. * Akkadisch und Assyrisch "šūru" * Aramäisch "tōra" * Hebräisch "šǒr" * Ugaritisch "twr" * Arabisch "ثور" ("thawr") * Griechisch "ταύρος" ("tauros") * Lateinisch "taurus" * Althochdeutsch "stior" * Italienisch, Katalanisch und Spanisch "toro" * Galicisch "touro" * Gallisch "tarvos" * Französisch "taureau" * Schwedisch "tjur" * Dänisch "tyr" * Irisch und Gälisch "tarbh" * Wallisisch "tarw" === "Horn" === Auch die Hörner des Stieres betreffend setzen sich die vielen Ähnlichkeiten fort: * Akkadisch "carnu" * Aramäisch "qeren" * Griechisch "κόρνο" ("korno") * Lateinisch "cornu" * Maltesisch "qrun"* * Arabisch "قرون" ("qurun") * Französisch "corne" * Italienisch "corne" * Rumänisch "corn" * Haitianisch "kòn" === "Sieben" === Die in vielen Kulturen als heilig angesehene Zahl Sieben taucht im Zusammenhang mit der Astronomie als Anzahl der mit bloßem Auge sichtbaren Wandelgestirne und als Zahl der Hauptsterne in vielen Asterismen auf: * Sieben Wandelgestirne: Sonne Mond, Merkur, Venus, Mars, Jupiter, Saturn * Siebengestirn im Himmelsstier: Alkione, Atlas, Electra, Maia, Merope, Taygeta, Pleione * Sternbild Orion: Beteigeuze, Rigel, Bellatrix, Alnilam, Alnitak, Saiph, Mintaka * Asterismus Großer Wagen: Alioth, Dubhe, Alkaid, Mizar, Merak, Phekda, Megrez → Siehe auch: * [[Quadriviale_Kuriositäten/_Zahlen#Zur_Sieben|'''Zur Sieben''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Der_Fixsternhimmel#Die_sieben_hellsten_Objekte_der_Ekliptik|'''Die sieben hellsten Objekte der Ekliptik''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Kalenderführung#Die_Siebentagewoche|'''Die Siebentagewoche''']]. Wegen der hohen kulturellen, rituellen oder mythischen Bedeutung gibt es in vielen Kulturen und Sprachen etymologische Übereinstimmungen: * Akkadisch "sebe" * Proto-Indoeuropäisch "septḿ̥" * Hetitisch "sipta" * Proto-Germanisch "*sebun" * Althochdeutsch "sibun" * Hebräisch "sajin" (Buchstabe) oder "scheva" (Wort) * Etruskisch "semph" * Maltesisch "sebgħa" * Arabisch "sabʿa" * Griechisch "επτά" ("(h)epta") * Lateinisch "septem" * Ungarisch "het" * Proto-Balto-slawisch "septin" * Proto-Indo-Iranisch "saptá" * Katalanisch "set" * Spanisch "siete" * Galicisch "sete" * Lettisch "septiņi" * Italienisch "sette" * Französisch "sept" * Englisch "seven" * Wallisisch "saith" * Bosnisch / Kroatisch "sedam" * Rumänisch "șapte" * Irisch "seacht" * Swahili "saba" * Haitianisch "sèt" == Zur Mythologie == Seit Jahrtausenden blicken Menschen in den Nachthimmel und versuchen, die unzähligen Lichter am Firmament zu deuten. Schon früh begannen sie, die von ihnen erfundenen Sternbilder und die unablässig durch den Himmel ziehenden Wandelgestirne durch Geschichten über Götter, Helden oder andere Wesen zu interpretieren, zu erzählen und zum Teil über Jahrhunderte hinweg zu tradieren. Die '''Mythologie''' spielte dabei eine zentrale Rolle: Sie half nicht nur, eine symbolische Ordnung in den geheimnisvollen Kosmos zu bringen, sondern prägte auch viele der Bezeichnungen und Vorstellungen, die bis heute in der beschreibenden Astronomie überlebt haben. Die Verbindung zwischen Mythologie und Astronomie ist tief verwurzelt und zeugt vom menschlichen Bedürfnis, das wahrgenommene, aber dennoch unfassbare Universum durch räumliche und zeitliche Vorstellungen sowie durch Erzählungen begreifbar zu machen. Das Geschehen am Himmel musste auf die Menschen vor der Erfindung der Bewegtbilder und des Films in der späten Neuzeit sowohl attraktiv als auch spektakulär gewirkt haben. So konnten verschiedene mythische Gestalten am Himmel durch ihre scheinbaren Handlungen wahrgenommen werden. Durch die Wiederholung solcher Deutungen konnten sich besonders beliebte Mythen im kulturellen Kontext über die Zeit verfestigen, und entsprechende Riten konnten sich etablieren. Damit war auch eine wesentliche Voraussetzung für den Glauben der Menschen an eine höhere Macht oder mehrere höhere Mächte gegeben. Der Begriff '''Religion''' stammt vom lateinischen Inifiniv "relegere" ab. Dieses Verb bedeutet wörtlich übersetzt "wieder lesen" und meint im Sinne von "überdenken" das bewusste Wahrnehmen von Prophezeiungen oder Omen sowie das nachhaltige Beachten tradierter Vorschriften. '''→ Siehe:''' * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|'''Der Urozean''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Sagenwelt|'''Die Plejaden / Sagenwelt''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Mythologie|'''Der Himmelsstier''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Babylonische_Himmelswege|'''Babylonische Himmelswege''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Mithraskult|'''Mithraskult und Tauroktonie''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Höhlenmalerei_in_der_Magura-Höhle|'''Die Höhlenmalerei in der Magura-Höhle''']]. == Zur Theologie == Die '''Theologie''' (vom Altgriechischen θεός = theós = Gott und λόγος = lógos = Lehre) ist die Lehre von einem Gott oder von mehreren Göttern. Sie lehrt einen ausgeprägten religiösen Glauben, begründet rituelle Traditionen und deutet die vorhandenen Glaubensdokumente. [[Datei:Aristoteles.Theologie.png|mini|rechts|Wahrnehmbarkeit und Vergänglichkeit nach Aristoteles]] Die Theologie des '''{{w|Aristoteles}}''' (384–322) postuliert drei mögliche Substanzen:<ref>Aristoteles: ''Metaphysik'', Kapitel XII (Λ), Philosophische Theologie, Seiten 1069a –1076a</ref> {| class="wikitable" |+ Mögliche Substanzen nach Aristoteles ! Nummer !! Substanz !! Erläuterung !! Interpretationsbeispiel |- | 1. || Die sinnlich wahrnehmbare und vergängliche Substanz || Konkrete Dinge, die nur eine begrenzte Teilhabe an der Ewigkeit haben. || Lebewesen |- | 2. || Die sinnlich wahrnehmbare und unvergängliche Substanz || Konkrete Dinge, die eine unbegrenzte Teilhabe an der Ewigkeit haben. || Die sieben Wandelgestirne und die Fixsterne |- | 3. || Die sinnlich nicht wahrnehmbare und unvergängliche Substanz || Lebendiger, unbewegter Beweger, der der Ursprung aller anderen Dinge ist. || Gott |} Dieses theologische Prinzip wurde später auch von '''{{w|Thomas van Aquin}}''' (1225-1274) in seinen ''Quinque viae ad Deum'' ("Fünf Wege zu Gott") aufgegriffen: {| class="wikitable" |+ Nach dem ''Quinque viae ad Deum'' ("Fünf Wege zu Gott") von Thomas von Aquin ! Weg !! Bezeichnung !! Voraussetzung !! Feststellung !! Folgerung |- | Via&nbsp;I || Bewegungsbeweis || In der Welt ist überall Bewegung. || Alles Bewegte muss von einem anderen in Bewegung gebracht worden sein. || Der Erstbeweger ist Gott. |- | Via&nbsp;II || Kausalitätsbeweis || In der Welt gibt es überall Ursachen und Wirkungen. || Jede Wirkung muss eine Ursache haben. || Die erste Ursache der Welt ist Gott. |- | Via&nbsp;III || Kontingenzbeweis || Alles Empirische in der Welt entsteht und vergeht wieder. || Jedes empirische Wesen muss das Sein von einem absoluten Wesen empfangen haben. || Das absolute Wesen ist Gott. |- | Via&nbsp;IV || Stufenbeweis || In der Welt gibt es abgestuft gute, wahre und schöne Dinge. || Das absolute Wesen muss die höchste Güte, Wahrheit und Schönheit haben. || Das höchste Gute, Wahre und Schöne ist Gott. |- | Via&nbsp;V || Finalitätsbeweis || In der Welt gibt es Ordnung und Gesetzmäßigkeit. || Ordnung und Gesetzmäßigkeit müssen auf einen denkenden Geist zurückgehen. || Dieser Geist kommt von Gott. |} Auch '''{{w|Gottfried Wilhelm Leibniz}}''' (1646-1717) lehnt sich in seiner Hypothese von „Gott als letztem und zureichendem Grund der Welt“ daran an. Auch im 90. Psalm wird dieser Ansatz thematisiert: <blockquote> Das vierte Buch<br/> Der '''ewige''' Gott – der '''vergängliche''' Mensch<br/><br/> 1 Ein Bittgebet des Mose, des Mannes Gottes. O Herr, du warst uns Wohnung '''von Geschlecht zu Geschlecht'''.<br/> 2 '''Ehe geboren wurden die Berge, ehe du unter Wehen hervorbrachtest Erde und Erdkreis''', bist du '''Gott von Ewigkeit zu Ewigkeit'''.<br/> 3 '''Zum Staub zurückkehren lässt du den Menschen''', du sprichst: Ihr Menschenkinder, kehrt zurück!<br/> 4 Denn tausend Jahre sind in deinen Augen wie der Tag, der gestern vergangen ist, wie eine Wache in der Nacht. </blockquote> Darüber hinaus gibt der vierte Vers einen deutlichen Hinweis auf das Verhältnis zwischen der Länge des viele Jahrtausende dauernden Präzessionszyklus und der Länge eines siderischen Monats: der Mond wandert entlang der Ekliptiklinie an einem Tag genauso weit wie der Frühlingspunkt in tausend Jahren. → Siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Präzession|'''Präzession''']]. Der griechische Dichter '''{{w|Aratos von Soloi}}''' in Kilikien (≈310–245) hatte seine astronomischen Kenntnisse vom Astronomen und Mathematiker '''{{w|Eudoxos von Knidos}}''' (geboren nach 390, gestorben nach 338) erhalten. In dem in der Antike verbreiteten Lehrgedicht Φαινόμενα (Phainomena = „Himmelserscheinungen“) von Aratos wird der Sternenhimmel in zahlreichen Hexametern beschrieben. Sein monumentales sechseckiges Grab aus der antiken Stadt Pompeiopolis wurde 2020 in der türkischen Provinz Mersin wiederentdeckt.<ref>Patricia Claus: [https://greekreporter.com/2021/07/11/memorial-tomb-of-ancient-greek-astronomer-aratus-unearthed-in-turkey/ Memorial Tomb of Ancient Greek Astronomer Aratus Unearthed in Turkey], The Greek Reporter, 11. Juli 2021</ref> Hier der Beginn des Prologs des Lehrgedichts: <blockquote> Εκ Διὸς ἀρχώμεσθα , τὸν οὐδέποτ᾽ ἄνδρες ἐῶμεν<br/> ῎Αῤῥητον . Μεσταὶ δὲ Διὸς πᾶσαι μὲν ἀγυιαὶ ,<br/> Πᾶσαι δ᾽ ἀνθρώπων ἀγοραί · μεστὴ δὲ θάλασσα ,<br/> Καὶ λιμένες. πάντη δὲ Διὸς κεχρήμεθα πάντες .<br/> '''Τοῦ γὰρ καὶ γένος εἰμέν''' · ὁ δ᾽ ἤπιος ἀνθρώποισι<br/> Δεξιὰ σημαίνει · λαοὺς δ᾽ ἐπὶ ἔργον ἐγείρει ,<br/> Μιμνήσκων βιότοιο . λέγει δ᾽ , ὅτε βῶλος ἀρίστη<br/> Βουσί τε καὶ μακέλῃσι · λέγει δ᾽ , ὅτε δεξιαὶ ὧραι ,<br/> Καὶ φυτὰ γύρῶσαι , καὶ σπέρματα πάντα βαλέσθαι .<br/> Αὐτὸς γὰρ τάγε σήματ᾽ ἐν '''οὐρανῷ''' ἐστήριξεν ,<br/> '''Αστρα''' διακρίνας · ἐσκέψατο δ᾽ εἰς ἐνιαυτὸν<br/> '''᾿Αστέρας''' , οἵ κε μάλιστα τετυγμένα σημαίνοιεν<br/> ᾿Ανδράσιν ὡράων , ὄφρ᾽ ἔμπεδα πάντα φύωνται .<br/> Τῷ μιν ἀεὶ πρῶτόν τε καὶ ὕστατον ἱλάσκονται .<br/> Χαῖρε , πάτερ , μέγα θαῦμα , μέγ᾽ ἀνθρώποισιν ὄνειαρ ,<br/> Αὐτὸς καὶ προτέρη γενεή ! χαίροιτε δὲ , Μοῦσαι<br/> Μειλίχιαι , μάλα πᾶσαι ! ἐμοί γε μὲν '''ἀστέρας''' εἰπεῖν ,<br/> Ηἱ θέμις εὐχομένῳ , τεκμήρατε πᾶσαν ἀοιδήν .<br/> Οἱ μὲν ὁμῶς πολέες τε , καὶ ἄλλυδις ἄλλοι ἐόντες ,<br/> '''Οὐρανῷ''' ἕλκονται πάντ᾽ ἤματα συνεχὲς αἰεί.<br/> Αὐτὰρ ὅγ᾽ οὐδ᾽ ὀλίγον μετανίσσεται · ἀλλὰ μάλ' αὕτως<br/> '''῎Αξων''' οἱ ἐνάρηρεν · ἔχει δ᾽ ἀτάλαντον ἁπάντη<br/> '''Μεσσηγὺς γαῖαν''' , περὶ δ᾽ '''οὐρανὸν''' αὐτὸν ἀγινεῖ.<br/> Καί μιν πειραίνουσι δύω '''πόλοι''' ἀμφοτέρωθεν ·<br/> ᾿Αλλ᾽ ὁ μὲν οὐκ ἐπίοπτος · ὁ δ᾽ ἀντίος ἐκ '''Βορέαο''' ,<br/> Ὑψόθεν Ὠκεανοῖο . Δύω δὲ μιν ἀμφὶς ἔχουσαι<br/> '''Ἄρκτοι''' ἅμα τροχόωσι · τὸ δὴ καλέονται '''῞Αμαξαι''' . </blockquote> Übersetzung unter Beibehaltung der Hexameter nach dem deutschen Dichter, Übersetzer und Hochschullehrer Johann Heinrich Voss (1751–1826) von 1824:<ref>АРАТОΥ ΦΑΙΝΟΜΕΝΑ ΚΑΙ ΔΙΟΣΗΜΕΙΑ. Des Aratos Sternerscheinungen und Wetterzeichen. Übersetzt und erklärt von Johann Heinrich Voss. Heidelberg bei Christian Friedrich Winter. 1824.</ref> <blockquote> Zeus sei unser Beginn , und niemals bleib' er uns Männern<br/> Ungelobt. Voll wahrlich des Zeus sind alle des Wandels<br/> Weg' , und alle Versammlung der Welt ; voll jegliche Meerflut ,<br/> Jeglicher Port ; ringsum ja des Zeus bedürfen wir alle .<br/> '''Seines Geschlechts auch sind wir''' ; und Er , mildherzig den Menschen,<br/> Zeichnet, was frommt, rechtsher ; und zu Tätigkeit weckt er die Völker,<br/> Mahnend an Lebensbedarf : Er sagt , wann besser dem Pflugstier<br/> Fuge die Scholl' , und dem Karst ; er sagt , wann schickliche Jahrszeit,<br/> Dass man die Pflanze behäuf" , und einsenk' allerlei Anwachs .<br/> Denn selbst hat er die Zeichen am oberen '''Himmel''' befestigt ,<br/> Und '''Sternbilder''' verteilt ; er hat fürsehend dem Jahrlauf<br/> '''Sterne''' bestimmt , die den Menschen zumeist annahende Wechsel<br/> Deuteten jeglicher Zeit , dass in Völligkeit alles erwachse .<br/> Drum ihn immer zuerst , und zulezt ihn , sühnen sie feiernd.<br/> Heil , anstaunlicher Vater , den Sterblichen mächtiges Labsal ,<br/> Du auch , selbst des Geschlechts Ursprung ! Heil , freundliche Musen,<br/> Heil euch allen gesamt ! doch mir , der , die '''Sterne''' zu melden ,<br/> Euch , wie geziemt , anfleht , bringt allen Gesang zur Vollendung.<br/> Jene zugleich , so viele zerstreuete , andere anders ,<br/> Ziehn mit dem '''Himmel''' einher in ewigem Zuge beständig .<br/> Doch nie schwanket er selbst um ein weniges; sondern durchaus so<br/> Bleibt ihm die '''Axe''' geheftet ; die hält gleichschwebend vom Umfang<br/> Hier '''in der Mitte die Erd'''' , und umher dort dreht sie den '''Himmel''' .<br/> Sie dann hat zween '''Pol'''' an jeglichem Ende gerichtet :<br/> Unsichtbar ist jener; doch hier um den '''Boreas''' ragt er<br/> Ob dem Okeanos hoch. Zwo dem zu den Seiten gestellte<br/> '''Bärinnen''' rollen umher: drum auch '''Rollwagen''' benamet. </blockquote> '''''Hinweise:''''' * Die "Axe" beschreibt die Erdachse. * ''Mit dem "Boreas" ist der Himmelsnordpol gemeint.'' * ''Bei den beiden Bärinnen handelt es sich um die Sternbilder des Großen Bären (Ursa Maior) und des Kleinen Bären (Ursa Minor).'' * ''Die beiden Rollwagen sind bei uns heute die Asterismen Großer Wagen und Kleiner Wagen.'' Der Apostel '''{{w|Paulus von Tarsus}}''' (geboren vor 10, gestorben nach 60) war der bedeutendste Missionar des Urchristentums und kannte diesen Text offensichtlich. Im 17.&nbsp;Kapitel der Apostelgeschichte des Lukas wird ihm ein Zitat aus dem Prolog des Lehrgedichts über die Abstammung der Menschen von Gott in den Mund gelegt.<ref>[https://www.die-bibel.de/bibel/NA28,EUE/ACT.17.28 Apostelgeschichte 17,28], Abschnitt: ''Paulus in Athen'', Novum Testamentum Graece und Einheitsübersetzung</ref> <blockquote> Apostelgeschichte 17,28: '''Τοῦ γὰρ καὶ γένος ἐσμέν.''' </blockquote> <blockquote> Apostelgeschichte 17,28: '''Wir sind von seinem Geschlecht.''' </blockquote> === Zahlen in Religionen === Die '''Zwei''' steht oft für Gegensätze, wie zum Beispiel Tag und Nacht, Aufgang und Untergang, Sommerhalbjahr und Winterhalbjahr, zunehmender und abnehmender Mond oder obere und untere Kulmination. Eine solche Zweiteilung findet sich oft auch in gegensätzliche Kategorien wieder, die in vielen Disziplinen, insbesondere auch in der Ethik und in Religionen verwendet werden, wie beispielsweise gut und böse, oben und unten, Leben und Tod, Licht und Schatten, Wärme und Kälte oder Himmel und Hölle. Interessant ist auch die frühgeschichtliche astronomische Auffassung von '''zwei''' mächtigen Gegenspielern, die sich im Sternenhimmel an zwei gegenüberliegenden Seiten befinden, der [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|der Himmelsstier]] und der [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsskorpion|der Himmelsskorpion]]. → Siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Zwei|'''Zur Zwei''']]. Die astronomischen Zahlen '''Sieben''' und '''Zwölf''' werden als heilige Zahlen angesehen. Sie werden in vielfältigen Kontexten in religiösen Texten erwähnt und für viele religiöse Symbole verwendet. Ferner spielt auch die astronomische Zahl '''Vier''' in Religionen eine bedeutende Rolle, wo sie deswegen manchmal ebenfalls als heilige Zahlen angesehen wird: * '''Vier''' Hauptsterne respektive Hauptsternbilder mit den '''vier''' Himmelsrichtungen und den '''vier''' Jahreszeiten: → siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Vier_in_Religionen|'''Bedeutung der Vier in Religionen''']]. * '''Sieben''' Wandelgestirne mit den die '''sieben''' Tagen einer Woche beziehungsweise eines Mondviertels: → siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Sieben_in_Religionen|'''Bedeutung der Sieben in Religionen''']]. * '''Zwölf''' Ekliptiksternbilder, '''zwölf''' Monate pro Jahr, '''zwölf''' Jahre Umlaufzeit des Planeten Jupiter, jeweils '''zwölf''' Stunden Tag und Nacht: → siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Zwölf_in_Religionen|'''Bedeutung der Zwölf in Religionen''']]. === Altes Testament === In der Bibel wird in der Regel nicht zwischen Fixsternen und Planeten unterschieden. Eine Ausnahme gibt es im 2.&nbsp;Buch der Könige, Kapitel&nbsp;23, Vers&nbsp;5 aus dem siebenten vorchristlichen Jahrhundert, wo in der deutschsprachigen Einheitsübersetzung von "den Wandelsternen" und in der Luther-Bibel von "den Planeten" die Rede ist. Die Vulgata schreibt hier allerdings von den "duodecim signis", womit sicherlich die zwölf Sternzeichen der Ekliptik gemeint sind, durch die die sieben Wandelgestirne ziehen. Die Septuaginta spricht noch allgemeiner von den "μαζουρωθ" nach dem Hebräischen Wort "מַזָּלָה" ("mazzaroth"), womit vermutlich Sternkonstellationen und im engeren Sinne ebenfalls die zwölf Sternzeichen des Zodiaks gemeint sind: <blockquote> '''Septuaginta '''<br/> 5 καὶ κατέπαυσεν τοὺς χωμαριμ, οὓς ἔδωκαν βασιλεῖς Ιουδα καὶ ἐθυμίων ἐν τοῖς ὑψηλοῖς καὶ ἐν ταῖς πόλεσιν Ιουδα καὶ τοῖς περικύκλῳ Ιερουσαλημ, καὶ τοὺς θυμιῶντας τῷ Βααλ καὶ τῷ ἡλίῳ καὶ τῇ σελήνῃ καὶ τοῖς '''μαζουρωθ''' καὶ πάσῃ τῇ δυνάμει τοῦ οὐρανοῦ.<br/> <br/> '''Vulgata'''<br/> 5 Et delevit aedituos, quos posuerant reges Iudae ad sacrificandum in excelsis per civitates Iudae et in circuitu Ierusalem, et eos, qui adolebant Baal et soli et lunae et '''duodecim signis''' et omni militiae caeli.<br/> <br/> '''Einheitsübersetzung (2016)'''<br/> 5 Auch setzte er die Götzenpriester ab, die von den Königen von Juda bestellt worden waren und die auf den Kulthöhen, in den Städten Judas und in der Umgebung Jerusalems Opfer verbrannt sowie dem Baal, der Sonne, dem Mond, den '''Wandelsternen''' und dem ganzen Heer des Himmels geopfert hatten.<br/> <br/> '''Luther-Bibel (2017)'''<br/> 5 Und er setzte die Götzenpriester ab, die die Könige von Juda eingesetzt hatten, um auf den Höhen zu opfern in den Städten Judas und um Jerusalem her; auch die dem Baal geräuchert hatten, der Sonne und dem Mond und den '''Planeten''' und allem Heer am Himmel.<br/> </blockquote> Der Prophet Habakuk erwähnt in seinem Psalm in Kapitel&nbsp;3 aus dem siebenten vorchristlichen Jahrhundert das Konzept der Aufteilung der Ekliptik in Mondstationen respektive in Mondhäuser: <blockquote> 10 Wenn sie dich sehen, erbeben die Berge,<br/> das Tosen der Wasser rauscht vorüber; es erhebt die Urflut ihre Stimme,<br/> hoch oben vergisst die Sonne ihre Strahlen.<br/> 11 '''Der Mond bleibt in der Behausung;'''<br/> als Beleuchtung schwirren deine Pfeile,<br/> als heller Schein das Blitzen deiner Lanze. </blockquote> In den folgenden Bibelstellen aus dem Alten Testament spiegeln sich astronomische Vorstellungen in Bezug auf Gott wider: '''Genesis 1:''' <blockquote> 1 Im Anfang erschuf Gott '''Himmel''' und Erde.<br/> 2 Die '''Erde''' war wüst und wirr und '''Finsternis''' lag über der '''Urflut''' und Gottes Geist schwebte über dem '''Wasser'''.<br/> 3 Gott sprach: Es werde '''Licht'''. Und es wurde '''Licht'''. ...<br/> 5 Und Gott nannte das Licht '''Tag''' und die Finsternis nannte er '''Nacht'''. Es wurde '''Abend''' und es wurde '''Morgen''': erster Tag.<br/> ...<br/> 14 Dann sprach Gott: Lichter sollen am '''Himmelsgewölbe''' sein, um '''Tag''' und '''Nacht''' zu scheiden. Sie sollen als Zeichen für '''Festzeiten''', für '''Tage''' und '''Jahre''' dienen.<br/> 15 Sie sollen Lichter am Himmelsgewölbe sein, um über die Erde hin zu leuchten. Und so geschah es.<br/> 16 Gott machte '''die beiden großen Lichter''', das große zur Herrschaft über den '''Tag''', das kleine zur Herrschaft über die '''Nacht''', und die '''Sterne'''. </blockquote> '''Psalm 8:''' <blockquote> 4 Seh ich deine '''Himmel''', die Werke deiner Finger, '''Mond '''und '''Sterne''', die du befestigt. </blockquote> [[Datei:Johannes.Kepler.Coeli.enarrant.gloriam.Dei.png|mini|rechts|Portrait des jungen Johannes Keplers mit dem Motto "Coeli enarrant gloriam Dei." nach Psalm 19: "Die Himmel erzählen die Herrlichkeit Gottes."]] '''Psalm 19:''' <blockquote> 2 Die '''Himmel''' erzählen die Herrlichkeit Gottes und das '''Firmament''' kündet das Werk seiner Hände. </blockquote> '''Psalm 90:''' <blockquote> 2 Ehe geboren wurden die Berge, ehe du unter Wehen hervorbrachtest '''Erde''' und '''Erdkreis''', bist du Gott von Ewigkeit zu Ewigkeit. </blockquote> '''Psalm 102:''' <blockquote> 26 Vorzeiten hast du der Erde Grund gelegt, die '''Himmel''' sind das Werk deiner Hände. </blockquote> '''Psalm 103:''' <blockquote> 19 Der HERR hat seinen Thron errichtet im '''Himmel''', seine königliche Macht beherrscht '''das All'''. </blockquote> '''Psalm 104:''' <blockquote> 19 Du machst den '''Mond''' zum Maß für die Zeiten, die '''Sonne''' weiß, wann sie untergeht. </blockquote> '''Psalm 113:''' <blockquote> 3 Vom '''Aufgang der Sonne''' bis zu ihrem '''Untergang''' sei gelobt der Name des HERRN.<br/> 4 Erhaben ist der HERR über alle Völker, über den '''Himmeln''' ist seine Herrlichkeit. </blockquote> '''Psalm 136:''' <blockquote> 3 Dankt dem Herrn der Herren, denn seine Huld währt ewig!<br/> 4 Ihm, der allein große Wunder tut, denn seine Huld währt ewig,<br/> 5 der den '''Himmel''' gemacht hat in Weisheit, denn seine Huld währt ewig,<br/> 6 der die Erde gefestigt hat über den Wassern, denn seine Huld währt ewig,<br/> 7 der '''die großen Leuchten''' gemacht hat, denn seine Huld währt ewig,<br/> 8 die '''Sonne''' zur Herrschaft über den '''Tag''', denn seine Huld währt ewig,<br/> 9 den '''Mond''' und die '''Sterne''' zur Herrschaft über die '''Nacht''', denn seine Huld währt ewig. </blockquote> '''Psalm 147:''' <blockquote> 4 Er bestimmt die Zahl der '''Sterne''' und ruft sie alle mit Namen. </blockquote> '''Psalm 148:''' <blockquote> '''Lobpreis auf den Herrn, den König des Kosmos'''<br/> 1 Halleluja! Lobt den HERRN vom '''Himmel''' her, lobt ihn in den Höhen:<br/> 2 Lobt ihn, all seine Engel, lobt ihn, all seine Heerscharen,<br/> 3 lobt ihn, '''Sonne''' und '''Mond''', lobt ihn, all ihr leuchtenden '''Sterne''',<br/> 4 lobt ihn, ihr '''Himmel der Himmel''', ihr Wasser über dem '''Himmel'''! </blockquote> Mit den "Wassern über dem Himmel" können nicht die Wolken unterhalb der Sternensphäre gemeint sein. Vielmehr dürfte es sich um eine Anspielung auf den Urozean beziehungsweise die Urflut handeln (siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|'''Urozean''']]). Diese Urflut existierte bereits vor der Erschaffung des Lichts und der Gestirne. Man erinnere sich an den Beginn der Schöpfungsgeschichte in den ersten drei Versen der Bibel (siehe oben). '''Buch der Weisheit (Weisheit Salomos):''' <blockquote> '''Salomos Gebet um Weisheit'''<br/> 9,1 Gott der Väter und Herr des Erbarmens, du hast '''das All''' durch dein Wort gemacht. </blockquote> '''Jesus Sirach 42:''' <blockquote> '''Lob Gottes in der Schöpfung'''<br/> 15 Nun will ich der Werke des Herrn gedenken, und was ich gesehen habe, werde ich erzählen: Durch die Worte des Herrn sind seine Werke und durch seinen Segen gab er ihnen ihre Bestimmung.<br/> 16 Die leuchtende '''Sonne''' blickt auf alles hernieder und von der Herrlichkeit des Herrn ist sein Werk erfüllt.<br/> 17 Der Herr gab es selbst den Heiligen nicht, all seine Wunder zu erzählen, der Herr der Herrscher über '''das All''', hat sie gegründet, sodass '''das All''' in seiner Herrlichkeit Bestand hat.<br/> 18 Abgrund und Herz hat er durchforscht und ihre Absichten hat er durchschaut; denn der Höchste kennt alles Wissen und er blickt auf die '''Zeichen der Zeiten'''.<br/> 19 Er tut das Vergangene und das Kommende kund und enthüllt die Spuren des Verborgenen.<br/> 20 Kein Gedanke entgeht ihm und kein einziges Wort bleibt ihm verborgen.<br/> 21 Die Großtaten seiner Weisheit hat er geordnet; wie er ist '''von Ewigkeit und in Ewigkeit'''. Ihm ist weder etwas hinzugefügt noch weggenommen worden und er hat keines Ratgebers bedurft. </blockquote> Auch im nachfolgenden Kapitel lobt Jesus Sirach die Sonne, den Mond und die Sterne in den höchsten Tönen: '''Jesus Sirach 43:''' <blockquote> 1 Der Stolz der Höhe ist ein '''Firmament''' von Reinheit, die Gestalt des '''Himmels''' beim Anblick der Herrlichkeit.<br/> 2 Die '''Sonne''' verkündet durch ihr Erscheinen beim Aufgang, ein wunderbares Geschöpf, ein Werk des Höchsten!<br/> 3 Zur '''Mittagszeit''' trocknet sie den Boden aus, wer wird bestehen vor ihrer Glut?<br/> 4 Wer in einen Ofen bläst bei Arbeiten mit Glut - dreimal so stark versengt die '''Sonne''' Berge; sie atmet Feuerdämpfe aus und blendet mit gleißenden Strahlen die Augen.<br/> 5 Groß ist der Herr, der sie gemacht hat, mit seinen Worten beschleunigt er ihren Lauf.<br/> 6 Auch der '''Mond''' hält sich in allem an seinen Zeitpunkt, zur '''Festsetzung der Zeiten''' und als Zeichen auf Dauer.<br/> 7 Vom '''Mond''' geht das Zeichen für einen Festtag aus, ein Gestirn, das abnimmt bis zur Vollendung.<br/> 8 Der Name '''Monat''' kommt vom '''Neumond''', der wunderbar zunimmt beim Wechsel, ein Geschöpf des Heeres in der Höhe, das am '''Himmelsgewölbe''' leuchtet.<br/> 9 Die Schönheit des '''Himmels''' ist der Glanz der '''Sterne''', ein strahlender Schmuck in den Höhen des Herrn.<br/> 10 Durch die Worte des Heiligen stehen sie gemäß ihrer Bestimmung und sie ermüden nie bei ihrer Wache.<br/> ...<br/> 27 Vieles werden wir sagen, aber wir kommen nie an ein Ziel und das Ende der Worte ist: Er ist '''das All'''. </blockquote> '''Jesaja 40:''' <blockquote> 26 Hebt eure Augen in die Höhe und seht: Wer hat diese '''Gestirne''' erschaffen?<br/> Der vollzählig herausführt ihr Heer, er ruft sie alle beim Namen.<br/> Wegen seiner Fülle an Kraft und mächtiger Stärke fehlt kein einziges. </blockquote> Das Buch Baruch gehört zu den späten Schriften des Alten Testaments. Im dritten Kapitel werden das Licht und die Sterne in Bezug auf Gott thematisiert: '''Baruch 3:''' <blockquote> 33 Er entsendet das '''Licht''' und es eilt dahin; er ruft es zurück und zitternd gehorcht es ihm.<br/> 34 Froh leuchten die '''Sterne''' auf ihren Posten.<br/> 35 Ruft er sie, so antworten sie: Hier sind wir. Sie leuchten mit Freude für ihren Schöpfer.<br/> 36 Das ist unser Gott; kein anderer gilt neben ihm. </blockquote> Ein Lobpreis auf die Werke, Engel und Mächte Gottes am Gewölbe des Himmels findet sich im '''Buch Daniel''' im dritten Kapitel. Der Text macht inhaltlich eine ähnliche Aussage wie der Lobpreis auf den Herrn, den König des Kosmos in Psalm 148 (siehe oben): '''Daniel 3:''' <blockquote> 56 Gepriesen bist du am Gewölbe des '''Himmels''', gerühmt und verherrlicht in Ewigkeit.<br/> 57 Preist den HERRN, all ihr Werke des HERRN; lobt und rühmt ihn in Ewigkeit!<br/> 58 Preist den HERRN, ihr '''Himmel'''; lobt und rühmt ihn in Ewigkeit!<br/> 59 Preist den HERRN, ihr Engel des HERRN; lobt und rühmt ihn in Ewigkeit!<br/> 60 Preist den HERRN, all ihr '''Wasser über dem Himmel'''; lobt und rühmt ihn in Ewigkeit!<br/> 61 Preist den HERRN, all ihr Mächte des HERRN; lobt und rühmt ihn in Ewigkeit!<br/> 62 Preist den HERRN, '''Sonne und Mond'''; lobt und rühmt ihn in Ewigkeit!<br/> 63 Preist den HERRN, ihr '''Sterne am Himmel'''; lobt und rühmt ihn in Ewigkeit! </blockquote> === Der Himmelsthron === Der '''Himmelsthron''' wir in vielen Texten des Alten Testaments als der Sitz Gottes genannt. Hier zunächst einige Erwähnungen in den Psalmen: <blockquote> 11,4 Der HERR ist in seinem heiligen Tempel, der HERR hat seinen '''Thron im Himmel'''.<br/> Seine Augen schauen herab, seine Blicke prüfen die Menschen. </blockquote> <blockquote> 33,13 Der HERR blickt herab vom '''Himmel''', er sieht alle Menschen.<br/> 33,14 Von seinem '''Thronsitz''' schaut er nieder auf alle Bewohner der Erde. </blockquote> <blockquote> 89,37 Sein Haus soll bleiben auf ewig, sein '''Thron''' habe Bestand vor mir wie die '''Sonne'''; </blockquote> <blockquote> 103,19 Der HERR hat seinen '''Thron''' errichtet im '''Himmel''', seine königliche Macht beherrscht '''das All'''. </blockquote> Im Buch der Weisheit stehen die folgenden beiden Verse: <blockquote> 9,9 Mit dir ist die Weisheit, die deine Werke kennt und die zugegen war, als du die Welt erschufst. Sie weiß, was wohlgefällig ist in deinen Augen und was recht ist nach deinen Geboten.<br/> 9,10 Sende sie vom heiligen '''Himmel''' und schick sie vom '''Thron''' deiner Herrlichkeit, damit sie bei mir sei und alle Mühe mit mir teile und ich erkenne, was wohlgefällig ist bei dir! </blockquote> Diese Bild von Gottes Thron im Himmel wir auch im Neuen Testament aufgegriffen, wie beispielsweise beim Evangelisten Matthäus (Kapitel 5, Vers 34) oder in der Offenbarung des Johannes, wo im vierten Kapitel die eröffnende Himmelsvision mit dem Abschnitt über "Die Huldigung vor dem Thron Gottes" beginnt: <blockquote> 1 Danach sah ich und siehe, eine Tür war geöffnet am '''Himmel'''; und die erste Stimme, die ich gleich einer Posaune mit mir reden gehört hatte, sagte: Komm herauf und ich werde dir zeigen, was dann geschehen muss.<br/> 2 Sogleich wurde ich vom Geist ergriffen. Und siehe, '''ein Thron stand im Himmel'''; auf dem Thron saß einer,<br/> 3 der wie ein Jaspis und ein Karneol aussah. Und über dem '''Thron''' wölbte sich ein Regenbogen, der wie ein Smaragd aussah.<br/> 4 Und rings um den '''Thron standen vierundzwanzig Throne''' und auf den Thronen saßen vierundzwanzig Älteste, in weiße Gewänder gekleidet und mit goldenen Kränzen auf dem Haupt.<br/> 5 Von dem Thron gingen Blitze, Stimmen und Donner aus. Und '''sieben lodernde Fackeln brannten vor dem Thron; das sind die sieben Geister Gottes'''.<br/> 6 Und vor dem Thron war etwas wie ein gläsernes Meer, gleich Kristall. Und in der Mitte des Thrones und rings um den Thron waren '''vier Lebewesen''' voller Augen, vorn und hinten.<br/> 7 Das erste Lebewesen glich einem '''Löwen''', das zweite einem '''Stier''', das dritte sah aus wie ein '''Mensch''', das vierte glich einem '''fliegenden Adler'''.<br/> </blockquote> Der achtstrophige Adventshymnus ''Veni redemptor gentium'' (die deutschsprachige Kontrafaktur heißt "Nun komm, der Heiden Heiland") wird dem Kirchenvater Ambrosius von Mailand (339–397) zugeschrieben. In der fünften Strophe wird mit Bezug auf die Himmelfahrt des Messias der Sitz Gottes erwähnt: <blockquote> 5,1 Egressus eius a Patre,<br/> 5,2 Regressus eius ad Patrem;<br/> 5,3 Excursus usque ad inferos,<br/> 5,4 Recursus ad '''sedem Dei'''. </blockquote> <blockquote> 5,1 Sein Ausgang ist vom Vater,<br/> 5,2 Seine Rückkehr ist beim Vater;<br/> 5,3 Hinausgelaufen bis zu den Toten,<br/> 5,4 Zurückgelaufen bis zum '''Sitz Gottes'''. </blockquote> Es ist nicht viel Phantasie erforderlich, um den Thron Gottes im '''Himmelsstier''' wiederzuerkennen. Die vierundzwanzig Throne, die sich entlang der '''Ekliptik''' um diesen Thron herum aufreihen, stehen für die vierundzwanzig Stunden eines Tages, und sie sind je zwei für jedes der zwölf Lebewesenkreiszeichen des '''Zodiaks'''. Die als sieben lodernde Fackeln vor dem Thron sind die sieben '''Wandelgestirne''', die als die '''sieben Geister Gottes''' immer wieder durch das '''Goldene Tor der Ekliptik''' in der Sitzfläche des Thrones ziehen. Die '''vier besonderen Lebewesen''' sind die vier Evangelistensymbole bei den vier zoroastrischen '''Königssternen'''. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|'''Himmelsstier''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Die_Ekliptik|'''Ekliptik''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Zodiak|'''Zodiak''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Das_Goldene_Tor_der_Ekliptik|'''Goldenes Tor der Ekliptik''']]. → Siehe [[Quadriviale_Kuriositäten/_Zahlen#Bedeutung_der_Vier_in_Religionen|'''Bedeutung der Vier in Religionen''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Königssterne|'''Königssterne''']]. <gallery caption="Throne" widths=640 heights=480 perrow=3> StatueOfEl.png|Rekonstruktion der 1988 in Ugarit ausgegrabenen und auf einem Thron sitzenden Statue aus Kalkstein, die vermutlich den höchsten ugaritischen Gott El zeigt, der als Erschaffer der Welt angebetet wurde. Das 25&nbsp;Zentimeter hohe Original aus dem 13.&nbsp;Jahrhundert vor Christus befindet sich im Museum von Latakia an der syrischen Mittelmeerküste.<ref>[https://bodo.unifr.ch/bodo/id/34097 Skulptur, Kalkstein], in: ''Bibel & Orient Datenbank Online'', abgerufen am 6. September 2026</ref> Aachen_Cathedral_Karlsthron_02.jpg|Thron Karls des Großen aus den 790er Jahren im Aachener Dom. Himmelsthron.Taurus.Aries.png|Himmelsthron in den Sternbildern Stier (Taurus) und Widder (Aries) vor dem Untergang in Richtung Westen. </gallery> === Das Lamm === Im ersten Kapitel des Evangeliums nach Johannes wird Jesus von Nazareth explizit als "Lamm Gottes" bezeichnet:<ref>[https://www.bibleserver.com/EU/Johannes1%2C29 Johannes 1,29], bibleserver.com, Einheitsübersetzung (2016)</ref> <blockquote> 29b Seht, das '''Lamm Gottes''', das die Sünde der Welt hinwegnimmt!<br/> ...<br/> 36b Seht, das '''Lamm Gottes'''! </blockquote> Es handelt sich beim „Lamm Gottes“ (Kirchenlatein: „Agnus Dei“) um ein seit ältester Zeit verbreitetes Symbol für Jesus Christus. Es wird auch als das Osterlamm bezeichnet, das am Ostertag, also kurz nach der Tag-und-Nacht-Gleiche im Frühjahr auferstanden ist. Nach dem Evangelisten Markus wurde die Auferstehung „... am ersten Tag der Woche, früh am Morgen, als eben die Sonne aufging“, also am Ostersonntag während der Morgenröte im Osten entdeckt.<ref>[https://www.bibleserver.com/LUT/Markus16%2C2 Markus 16,2], Einheitsübersetzung, 2016</ref> Am 40.&nbsp;Tag ist Jesus Christus nach dem Zeugnis der Evangelisten Markus und Lukas in den Himmel aufgefahren. Zu Beginn der Apostelgeschichte wird dieses Ereignis folgendermaßen beschrieben:<ref>[https://www.bibleserver.com/EU/Apostelgeschichte1 Apostelgeschichte 1], Einheitsübersetzung, 2016</ref> <blockquote> 7 Er sagte zu ihnen: Euch steht es nicht zu, Zeiten und Fristen zu erfahren, die der Vater in seiner Macht festgesetzt hat.<br/> 8 Aber ihr werdet Kraft empfangen, wenn der Heilige Geist auf euch herabkommen wird; und ihr werdet meine Zeugen sein in Jerusalem und in ganz Judäa und Samarien und bis an die Grenzen der Erde.<br/> 9 Als er das gesagt hatte, wurde er vor ihren Augen emporgehoben und eine Wolke nahm ihn auf und entzog ihn ihren Blicken.<br/> </blockquote> Im altrömischen Glaubensbekenntnis gibt es die Textstelle: <blockquote> „ascendit in caelis, sedet ad dexteram Patris“ </blockquote> Zu Deutsch: <blockquote> „aufgefahren in den Himmel, er sitzt zur Rechten des Vaters“ </blockquote> Das '''Lamm''' (astronomisch Widder) befindet sich am nördlichen Sternenhimmel '''zur Rechten''' des Stieres (Taurus). Sowohl der mesopotamische Himmelsstier als auch das altarabische Sternbild Thuraya verbinden diese beiden neuzeitlichen Sternbilder zu einer Einheit. Der Hauptstern im Sternbild Widder (Aries) heißt Hamal, und das arabische Wort "hamal" steht für ein einjähriges Lamm.<ref name="Adams">Danielle Adams: [http://onesky.arizona.edu/arab-star-names/the-lamb/ The Lamb – A folkloric celestial complex], Two Deserts, one Sky – Arab Star Calendars</ref> Der fette Schwanz des Lammes wird durch die '''Plejaden (Siebengestirn)''' markiert.<ref name="Adams" /> Die Augen des Stieres sind die Sterne '''Aldebaran''' und '''Ain'''. Zwischen dem Kopf des Stieres und den '''Plejaden''' befindet sich das '''Goldene Tor der Ekliptik''', durch das alle Wandelgestirne regelmäßig hindurchziehen. → Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Bibelstellen|'''Bibelstellen zum Siebengestirn''']]. → Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Das_Goldene_Tor_der_Ekliptik|'''Goldenes Tor der Ekliptik''']]. Der Frühlingspunkt der Sonne, also deren Ort auf der Ekliptiklinie zur Tag-und-Nacht-Gleiche im Frühjahr, ist von der monotheistischen Schöpfung bis zur Geburt des christlichen Gottessohns vom Kopf des Stiers (bei den Sternen '''Aldebaran''' und '''Ain''' im Goldenen Tor der Ekliptik) im heutigen Sternbild Stier (Taurus) bis zum Kopf des Lammes (beim Stern '''Hamal''') im heutigen Sternbild Widder (Aries) nach Westen gewandert. Heute befindet sich der Frühlingspunkt bereits am westlichen Ende des Sternbilds Fische (Pisces), das sich westlich an das Sternbild Widder anschließt. ==== Offenbarung des Johannes ==== In der Offenbarung des Johannes heißt es im 7.&nbsp;Kapitel: <blockquote> 10b Die Rettung kommt von unserem '''Gott''', der auf dem '''Thron''' sitzt, und von dem '''Lamm'''.<br/> 17a Denn das Lamm in der Mitte vor dem Thron wird sie weiden und zu den Quellen führen, aus denen das '''Wasser des Lebens''' strömt. </blockquote> Wird der '''Thron Gottes''' mit dem Himmelsstier identifiziert (siehe oben), dann sitzt das '''Lamm''' (Aries, Sternbild Widder) westlich und somit rechts vor diesem Thron. Im weiteren Verlauf der Ekliptik nach Westen befinden sich die zusammenhängenden '''Wassersternbilder''' des Urozeans, dem Urquell des Lebens. Es handelt ich um die heutigen Sternbilder Fluss Eridanus, Walfisch (Cetus), Fische (Pisces), Wassermann (Aquarius), Südlicher Fisch (Piscis Austrinus) und Delphin (Delphinus) sowie Steinbock (Capricornus, früher Ziegenfisch). → Siehe auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|'''Urozean''']]. <gallery caption="Das Lamm zur Rechten des Stieres" mode=packed widths=800 heights=600> Himmelsstier.P1117152.jpg|Astrophotographie vom Asterismus Himmelsstier Himmelsstier.Sternbilder.P1117152.png|Beschriftete Astrophotographie vom Himmelsstier am winterlichen Abendhimmel in Richtung südlicher Meridian. Die Ekliptiklinie verläuft horizontal etwas unterhalb der Bildmitte. Haende.der.Thuraya.Vollmond.Sterne.P1079912.jpg|Astrophotographie der Himmelsregion mit dem beduinischen Sternbild "Hände der Thuraya" (grüne durchgezogene Linien, Ekliptik rot gepunktete Linie) mit arabisch bezeichneten Sternen. Der Vollmond befindet sich zwischen den Sternbildern Taurus, Aries und Cetus. Urozean.Wassersternbilder.png|Die zusammenhängenden Wassersternbilder des Urozeans am Sternenhimmel: Fluss Eridanus, Walfisch (Cetus), Fische (Pisces), Wassermann (Aquarius), Südlicher Fisch (Piscis Austrinus), Delphin (Delphinus) sowie Ziegenfisch (Steinbock, Capricornus). </gallery> Interpretiert man das Sternbild "Lamm" (Widder / Aries) als Mittler auf dem ekliptischen Weg vom finsteren kosmischen Urozean im Westen (rechts) zum strahlenden majestätischen Sternbild Stier (Taurus) im Osten (links), ergeben auch andere Bibelstellen in Bezug auf den Sternenhimmel einen tiefen symbolischen Sinn, die in den folgenden Abschnitten aufgeführt sind. ==== Evangelium nach Johannes ==== Die Rede von Jesus an den Jünger Thomas aus dem 14.&nbsp;Kapitel des Evangeliums nach Johannes ist in diesem Zusammenhang interessant: <blockquote> 6 Jesus sagte zu ihm: Ich bin der Weg und die Wahrheit und das Leben; niemand kommt zum Vater außer durch mich.<br/> 7 Wenn ihr mich erkannt habt, werdet ihr auch meinen Vater erkennen. Schon jetzt kennt ihr ihn und habt ihn gesehen. </blockquote> Alle Wandelgestirne bewegen sich entlang der Ekliptiklinie (Weg) durch das heutige Sternbild Widder (das altarabische Sternbild "Lamm") im Westen zum [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Das_Goldene_Tor_der-Ekliptik|Goldenen Tor der Ekliptik]] nach Osten im großen Himmelsstier (Vater / Thron). ==== Evangelium nach Markus ==== Im Evangelium nach Markus heißt es: <blockquote> 14,62 Jesus sagte: Ich bin es. Und ihr werdet den Menschensohn '''zur Rechten der Macht''' sitzen und mit den Wolken des '''Himmels''' kommen sehen. </blockquote> <blockquote> 16,19 Nachdem Jesus, der Herr, dies zu ihnen gesagt hatte, wurde er in den '''Himmel''' aufgenommen und setzte sich '''zur Rechten Gottes'''. </blockquote> ==== Evangelium nach Lukas ==== Im Evangelium nach Lukas ist es folgendermaßen formuliert: <blockquote> 22,69 Von nun an wird der Menschensohn '''zur Rechten der Macht Gottes''' sitzen. </blockquote> ==== Evangelium nach Matthäus ==== Auch im Evangelium nach Matthäus findet sich eine entsprechende Stelle: <blockquote> 26,64 Jesus antwortete: Du hast es gesagt. Doch ich erkläre euch: Von nun an werdet ihr den Menschensohn '''zur Rechten der Macht''' sitzen und auf den Wolken des '''Himmels''' kommen sehen. </blockquote> ==== Brief an die Hebräer ==== Im Brief an die Hebräer, dessen Autor unbekannt ist, gibt es etliche entsprechende Stellen: <blockquote> '''Gottes Rede in seinem Sohn'''<br/> 1,3 er ist der Abglanz seiner Herrlichkeit und das Abbild seines Wesens; er trägt '''das All''' durch sein machtvolles Wort, hat die Reinigung von den Sünden bewirkt und sich dann '''zur Rechten der Majestät in der Höhe''' gesetzt;<br/> 1,10 Und: Du, Herr, hast vorzeiten der Erde Grund gelegt, die '''Himmel''' sind das Werk deiner Hände.<br/> 1,11 Sie werden vergehen, '''du aber bleibst'''; sie alle veralten wie ein Gewand;<br/> 1,12 du rollst sie zusammen wie einen Mantel und wie ein Gewand werden sie gewechselt. Du aber bleibst, der du bist, und '''deine Jahre enden nie'''.<br/> 1,13 Zu welchem Engel hat er jemals gesagt: Setze dich mir '''zur Rechten''' und ich lege dir deine Feinde als Schemel unter die Füße? </blockquote> <blockquote> '''Die Liturgie des neuen Bundes'''<br/> 8,1 Die Hauptsache bei dem Gesagten aber ist: Wir haben einen solchen Hohepriester, der sich '''zur Rechten des Thrones der Majestät im Himmel''' gesetzt hat,<br/> 8,2 als Diener des Heiligtums und des '''wahren Zeltes''', das der Herr selbst aufgeschlagen hat, nicht ein Mensch. </blockquote> <blockquote> '''Christus als Mittler des neuen Bundes'''<br/> 9,24 Denn Christus ist nicht in ein von Menschenhand gemachtes Heiligtum hineingegangen, in ein Abbild des wirklichen, sondern '''in den Himmel selbst''', um jetzt '''vor Gottes Angesicht''' zu erscheinen für uns; </blockquote> <blockquote> '''Das Opfer Jesu Christi als endgültige Versöhnung mit Gott'''<br/> 10,12 Dieser aber hat nur ein einziges Opfer für die Sünden dargebracht und sich dann '''für immer zur Rechten Gottes''' gesetzt; </blockquote> <blockquote> '''Das Beispiel Jesu Christi'''<br/> 12,2 und dabei auf Jesus blicken, den Urheber und Vollender des Glaubens; er hat angesichts der vor ihm liegenden Freude das Kreuz auf sich genommen, ohne auf die Schande zu achten, und sich '''zur Rechten von Gottes Thron''' gesetzt. </blockquote> ==== Erster Brief des Petrus ==== Der erste Brief des Petrus zählt zu den katholischen Briefen des Neuen Testaments. Dort heißt es im letzten Satz über Jesus Christus: <blockquote> 22 der in den '''Himmel''' gegangen ist; dort ist er '''zur Rechten''' Gottes und Engel, Gewalten und Mächte sind ihm unterworfen. </blockquote> ==== Apostelgeschichte ==== Die Apostelgeschichte schließt an das Evangelium nach Lukas an und wird ebenfalls diesem zugeschrieben. Hier kommen der erste bekennende sowie erste berufene Apostel Petrus und der erste christliche Märtyrer Stephanus zu Wort: <blockquote> '''Die Pfingstpredigt des Petrus'''<br/> 2,33 '''Zur Rechten Gottes''' erhöht, hat er vom Vater den verheißenen Heiligen Geist empfangen und ihn ausgegossen, wie ihr seht und hört. </blockquote> <blockquote> '''Steinigung des Stephanus'''<br/> 7,55 Er aber, erfüllt vom Heiligen Geist, blickte zum '''Himmel''' empor, sah die Herrlichkeit Gottes und Jesus '''zur Rechten Gottes''' stehen<br/> 7,56 und rief: Siehe, ich sehe den Himmel offen und den Menschensohn '''zur Rechten Gottes''' stehen. </blockquote> === Himmelspforte === Das Sternbild Widder (Aries) repräsentiert als das Lamm Gottes den nördlichen Pfeiler des Goldenen Tors der Ekliptik. Der fette Schwanz des Lammes wird nach altarabischer Tradition durch das Siebengestirn (Plejaden) gebildet, das heute zu Sternbild '''Stier''' (Taurus) gezählt wird. Der südliche Pfeiler des Goldenen Tors der Ekliptik wird durch die Hyaden und den Stern Menkar im Sternbild Walfisch (Cetus) gebildet. Das Goldene Tor der Ekliptik stellt mit diesen beiden Pfeilern somit eine '''Himmelspforte''' dar, durch die alle Wandelgestirne regelmäßig von Westen aus dem dunklen Urozean der winterlichen Wassersternbilder sowie der Richtung des Sonnenuntergangs nach Osten in das helle Gebiet des Sternenhimmels mit den Frühlings- und Sommersternbildern sowie die Richtung des Sonnenaufgangs treten. [[Datei:Mars.im.Goldenen.Tor.der.Ekliptik.P1091607.jpg|mini|hochkant=3|zentriert|Der am nordwestlichen Horizont in der Nähe der Ekliptiklinie und im Goldenen Tor der Ekliptik untergehende Mars (rote Scheibe unten halb rechts) drei Tage vor dem Durchqueren der '''Himmelspforte''' zwischen dem Kopf des Himmelsstieres mit dem Sternhaufen der Hyaden (unten links) und den Plejaden nördlich der Ekliptik (rechts unten).]] Die Genesis berichtet im 28.&nbsp;Kapitel unter der Überschrift "Jakob in Bet-El" (hebräisch בֵּית אֵל „Haus des El“ oder „Haus Gottes“) über einen Traum von Jakob, in dem er eine Treppe zum Himmel (die Himmelsleiter oder Jakobsleiter) sieht, an dessen oberen Ende sich das Tor des Himmels (die Himmelspforte) befindet: <blockquote> 10 Jakob zog aus Beerscheba weg und ging nach Haran.<br/> 11 Er kam an einen bestimmten Ort und übernachtete dort, denn die Sonne war untergegangen. Er nahm einen von den Steinen dieses Ortes, legte ihn unter seinen Kopf und schlief dort ein.<br/> 12 Da hatte er einen Traum: Siehe, eine Treppe stand auf der Erde, ihre Spitze reichte bis zum '''Himmel'''. Und siehe: Auf ihr stiegen Engel Gottes auf und nieder.<br/> 13 Und siehe, der HERR stand vor ihm und sprach: Ich bin der HERR, der Gott deines Vaters Abraham und der Gott Isaaks. Das Land, auf dem du liegst, will ich dir und deinen Nachkommen geben.<br/> 14 Deine Nachkommen werden zahlreich sein wie der Staub auf der Erde. Du wirst dich '''nach Westen und Osten, nach Norden und Süden''' ausbreiten und durch dich und deine Nachkommen werden alle Sippen der Erde Segen erlangen.<br/> 15 Siehe, ich bin mit dir, ich behüte dich, wohin du auch gehst, und bringe dich zurück in dieses Land. Denn ich verlasse dich nicht, bis ich vollbringe, was ich dir versprochen habe.<br/> 16 Jakob erwachte aus seinem Schlaf und sagte: Wirklich, der HERR ist an diesem Ort und ich wusste es nicht.<br/> 17 Er fürchtete sich und sagte: Wie Ehrfurcht gebietend ist doch dieser Ort! Er ist nichts anderes als das Haus Gottes und das '''Tor des Himmels'''.<br/> </blockquote> El war für die semitischen Ugariter im zweiten vorchristlichen Jahrtausend der Name ihres höchsten Gottes. Ihm wurden die Beinamen „König“, „Freundlicher“ und „'''Stier'''“ verliehen. Diese Symbolik weist auf den Himmelsstier hin. Der Name El wurde von den Israeliten übernommen, und dieser Gott wurde von ihnen mit ihrem einzigen Gott gleichgesetzt. Der Gott El wurde vom Gott Baal verdrängt, der ebenfalls mit Stierhörnern konnotiert war. Er wurde auch als donnernder und Blitze schleudernder Gott dargestellt, was sich in den Mythen des antiken Griechenlands in der Figur des höchsten griechischen Gottes Zeus (Jupiter) widerspiegelt. In diesem Zusammenhang sei auf noch weitere Parallelitäten den verschiedenen Götterkulturen hingewiesen, die sich zum ugaritischen Baal-Zyklus ergeben, der in den keilalphabetischen Texten aus Ugarit (KTU) zu finden ist. Am Schluss dieses Werkes wird die kanaanitische Sonnengöttin Šapšu, die Zweitfrau von El, für die Wiederherstellung und Bewahrung der kosmischen Ordnung zu einem Opfermahl eingeladen, bei der ihr '''Brot und Wein''' dargeboten werden.<ref>Herbert Niehr: ''Der Ba‘al-Zyklus (KTU 1.1-6 + 1.8)'', Gütersloh 2015, S. 236.</ref> In Psalm&nbsp;65 mit dem Titel "Lobpreis auf den Retter und Schöpfer" werden dem Gott der Israeliten ganz ähnliche Wohltaten zugeschrieben, wie dem Gott Baal in der ugaritischen Religion. Im 10.&nbsp;Psalmvers heißt es beispielsweise: <blockquote> 10 Du hast für das Land gesorgt, es getränkt, es überschüttet mit Reichtum. Der Bach Gottes ist voller Wasser, gedeihen lässt du ihnen das Korn, so lässt du das Land gedeihen. </blockquote> Jakob war der der erste der drei Erzväter des Volkes Israel und der älteste Sohn des ältesten Sohnes Isaak von Abraham. Abraham war aus dem mesopotamischen Ur über Haran nach Bet-El gezogen, und Jakob ging in dieser Schilderung aus Beerscheba in der Nähe des Ortes Bet-El nach Haran zurück. Der Apostel Paulus schreibt in seinem zweiten Brief an die Bewohner der griechischen Hafenstadt Korinth zu Beginn des 5.&nbsp;Kapitels mit der Überschrift "Die Hoffnung des Apostels" über das Gebäude hinter der Pforte zum Himmel: <blockquote> 1 Wir wissen: Wenn unser irdisches Zelt abgebrochen wird, dann haben wir eine Wohnung von Gott, ein nicht von Menschenhand errichtetes '''ewiges Haus im Himmel'''. </blockquote> === Gedanken zur wundersamen Brotvermehrung === ==== Evangelien ==== [[Datei:Face de chapiteau figurant la Multiplication des pains, choeur de l'église de Saint-Nectaire, Puy-de-Dôme.jpg|mini|rechts|hochkant=2|Jesus mit vier seiner Jünger mit fünf Broten und zwei Fischen an einem Säulenkapitell in der romanischen Wallfahrtskirche Saint Nectaire auf dem Mont Cornadore in Saint-Nectaire in Frankreich (Département Puy-de-Dôme in der Region Auvergne-Rhône-Alpes).]] Die wundersame Speisung der mehreren Tausend mit wenigen Broten und Fischen wird in aller vier Evangelien der Bibel erwähnt. Das Ereignis fand auf einem Berg am Ufer des Sees von Galiläa (auch als "See von Tiberias", "See Genezareth" oder "Galiläisches Meer" bekannt) statt. In der abgelegenen Gegend gab es damals sehr wenig künstliche Lichtquellen, so dass ein ungestörter Anblick des Sternenhimmels möglich war. ===== Evangelium nach Johannes ===== Im sechsten Kapitel des Evangeliums nach '''Johannes''' tauchen bei der Beschreibung der Brotvermehrung durch Jesus zum jüdischen Pessachfest neben einigen weiteren Symbolen mit astronomischer Deutungsmöglichkeit auch die expliziten Zahlen Zwei, Fünf und Zwölf auf: <blockquote> 9 Hier ist ein kleiner Junge, der hat '''fünf Gerstenbrote''' und '''zwei Fische'''; doch was ist das für so viele?<br/> 10 Jesus sagte: Lasst die Leute sich setzen! Es gab dort nämlich viel Gras. Da setzten sie sich; es waren etwa '''fünftausend''' Männer.<br/> 11 Dann nahm Jesus die '''Brote''', sprach das Dankgebet und teilte an die Leute aus, so viel sie wollten; ebenso machte er es mit den '''Fischen'''.<br/> 12 Als die Menge satt geworden war, sagte er zu seinen Jüngern: Sammelt die übrig gebliebenen Brocken, damit nichts verdirbt!<br/> 13 Sie sammelten und füllten '''zwölf Körbe''' mit den Brocken, die von den '''fünf Gerstenbroten''' nach dem Essen übrig waren.<br/> ...<br/> 31 Unsere Väter haben das '''Manna''' in der Wüste gegessen, wie es in der Schrift heißt: '''Brot vom Himmel''' gab er ihnen zu essen.<br/> 32 Jesus sagte zu ihnen: Amen, amen, ich sage euch: Nicht Mose hat euch das '''Brot vom Himmel''' gegeben, sondern mein Vater gibt euch das wahre '''Brot vom Himmel'''.<br/> 33 Denn das '''Brot''', das Gott gibt, kommt vom '''Himmel''' herab und gibt der Welt das Leben.<br/> 34 Da baten sie ihn: Herr, gib uns immer dieses '''Brot'''!<br/> 35 Jesus antwortete ihnen: Ich bin das '''Brot des Lebens'''; wer zu mir kommt, wird nie mehr hungern, und wer an mich glaubt, wird nie mehr Durst haben.<br/> ...<br/> 48 Ich bin das '''Brot des Lebens'''.<br/> 49 Eure Väter haben in der Wüste das '''Manna''' gegessen und sind gestorben.<br/> 50 So aber ist es mit dem '''Brot''', das vom '''Himmel''' herabkommt: Wenn jemand davon isst, wird er nicht sterben.<br/> 51 Ich bin das '''lebendige Brot''', das vom '''Himmel''' herabgekommen ist. Wer von diesem '''Brot''' isst, wird in Ewigkeit leben. Das '''Brot''', das ich geben werde, ist mein Fleisch für das Leben der Welt. </blockquote> ===== Evangelium nach Markus ===== Eine ähnliche Schilderung befindet sich im sechsten Kapitel des Evangeliums nach '''Markus''', wo das Ereignis an einem abgelegenen und einsamen Ort stattgefunden hat: <blockquote> 38 Er sagte zu ihnen: Wie viele '''Brote''' habt ihr? Geht und seht nach! Sie sahen nach und berichteten: '''Fünf Brote''' und außerdem '''zwei Fische'''.<br/> 39 Dann befahl er ihnen, sie sollten sich in Mahlgemeinschaften im grünen Gras lagern.<br/> 40 Und sie ließen sich in Gruppen zu hundert und zu fünfzig nieder.<br/> 41 Darauf nahm er die '''fünf Brote''' und die '''zwei Fische''', blickte zum '''Himmel''' auf, sprach den Lobpreis, brach die '''Brote''' und gab sie den Jüngern, damit sie diese an die Leute austeilten. Auch die '''zwei Fische''' ließ er unter allen verteilen.<br/> 42 Und alle aßen und wurden satt.<br/> 43 Und sie hoben Brocken auf, '''zwölf Körbe''' voll, und Reste von den '''Fischen'''.<br/> 44 Es waren '''fünftausend''' Männer, die von den '''Broten''' gegessen hatten. </blockquote> Die Brotvermehrung auch ein weiteres Mal im achten Kapitel des Evangeliums nach '''Markus''' erwähnt: <blockquote> 5 Er fragte sie: Wie viele '''Brote''' habt ihr? Sie antworteten: '''Sieben'''.<br/> 6 Da forderte er die Leute auf, sich auf den Boden zu setzen. Dann nahm er die sieben '''Brote''', sprach das Dankgebet, brach die '''Brote''' und gab sie seinen Jüngern zum Verteilen; und die Jünger teilten sie an die Leute aus.<br/> 7 Sie hatten auch noch ein paar '''Fische''' bei sich. Jesus segnete sie und ließ auch sie austeilen.<br/> 8 Die Leute aßen und wurden satt. Und sie hoben die Überreste der '''Brotstücke''' auf, '''sieben Körbe''' voll.<br/> 9 Es waren etwa '''viertausend''' Menschen beisammen. Danach schickte er sie nach Hause.<br/> ...<br/> 19 Als ich die '''fünf Brote''' für die '''Fünftausend''' brach, wie viele '''Körbe voll Brotstücke''' habt ihr da aufgehoben? Sie antworteten ihm: '''Zwölf'''.<br/> 20 Und als ich die '''sieben Brote''' für die '''Viertausend''' brach, wie viele '''Körbe''' voll habt ihr da aufgehoben? Sie antworteten: '''Sieben'''.<br/> 21 Da sagte er zu ihnen: Versteht ihr immer noch nicht? </blockquote> ===== Evangelium nach Lukas ===== Ebenso verhält es sich im neunten Kapitel des Evangeliums nach '''Lukas''', wo das Ereignis dem Ort Betsaida (zu Deutsch: „Haus des Fisches“) am See Genezareth zugeordnet ist: <blockquote> 12 Als der Tag zur Neige ging, kamen '''die Zwölf''' und sagten zu ihm: Schick die Leute weg, damit sie in die umliegenden Dörfer und Gehöfte gehen, dort Unterkunft finden und etwas zu essen bekommen; denn wir sind hier an einem abgelegenen Ort.<br/> 13 Er antwortete ihnen: Gebt ihr ihnen zu essen! Sie sagten: Wir haben nicht mehr als '''fünf Brote''' und '''zwei Fische'''; wir müssten erst weggehen und für dieses ganze Volk etwas zu essen kaufen.<br/> 14 Es waren nämlich etwa '''fünftausend''' Männer. Er aber sagte zu seinen Jüngern: Lasst sie sich in Gruppen zu ungefähr fünfzig lagern!<br/> 15 Die Jünger taten so und veranlassten, dass sich alle lagerten.<br/> 16 Jesus aber nahm die '''fünf Brote''' und die '''zwei Fische''', blickte zum '''Himmel''' auf, sprach den Lobpreis und brach sie; dann gab er sie den Jüngern, damit sie diese an die Leute austeilten.<br/> 17 Und alle aßen und wurden satt. Als man die übrig gebliebenen Brotstücke einsammelte, waren es '''zwölf Körbe''' voll. </blockquote> ===== Evangelium nach Matthäus ===== Auch im vierzehnten Kapitel des Evangeliums nach '''Matthäus''' ist von einem abgelegenen Ort in einer einsamen Gegend die Rede: <blockquote> 17 Sie sagten zu ihm: Wir haben nur '''fünf Brote''' und '''zwei Fische''' hier.<br/> 18 Er antwortete: Bringt sie mir her!<br/> 19 Dann ordnete er an, die Leute sollten sich ins Gras setzen. Und er nahm die '''fünf Brote''' und die '''zwei Fische''', blickte zum '''Himmel''' auf, sprach den Lobpreis, brach die Brote und gab sie den Jüngern; die Jünger aber gaben sie den Leuten<br/> 20 und alle aßen und wurden satt. Und sie sammelten die übrig gebliebenen Brotstücke ein, '''zwölf Körbe''' voll.<br/> 21 Es waren etwa '''fünftausend''' Männer, die gegessen hatten, dazu noch Frauen und Kinder. </blockquote> Etwas abgewandelt taucht die Brotvermehrung mit '''sieben Körben''' auch im fünfzehnten Kapitel des Evangeliums nach '''Matthäus''' auf: <blockquote> 34 Jesus sagte zu ihnen: Wie viele '''Brote''' habt ihr? Sie antworteten: '''Sieben''' - und ein paar '''Fische'''.<br/> 35 Da forderte er die Leute auf, sich auf den Boden zu setzen.<br/> 36 Und er nahm die '''sieben Brote''' und die '''Fische''', sprach das Dankgebet, brach sie und gab sie den Jüngern und die Jünger gaben sie den Menschen.<br/> 37 Und alle aßen und wurden satt. Und sie sammelten die übrig gebliebenen Stücke ein, '''sieben Körbe''' voll.<br/> 38 Es waren '''viertausend''' Männer, die gegessen hatten, dazu noch Frauen und Kinder.<br/> 39 Danach schickte er die Menge nach Hause, stieg ins Boot und fuhr in die Gegend von Magadan. </blockquote> Der Ort Magadan ist möglicherweise mit dem heutigen Ort Migdal (aramäisch: Magdala) am westlichen Ufer des Sees Genezareth gleichzusetzen. ==== Astronomische Bezüge ==== [[Datei:Sternenhimmel.Pessach.25.3.23.png|mini|rechts|hochkant=2|Sternenhimmel am jüdischen Pessachfest im Jahr 25 nach Christus. Der Vollmond stand hoch über dem Horizont im Süden im Herbstpunkt beim Stern Spica (= "Kornähre") im Sternbild Jungfrau (Virgo). Gleichzeitig befand sich die Sonne tief unter dem Horizont im Norden in der Nähe des Frühlingspunktes im Sternbild Fische (Pisces).]] [[Datei:Dendera.09.Jungfrau.Loewe.jpg|mini|rechts|hochkant=2|Das Sternbild Jungfrau (links) mit der Kornähre in der Hand und das Sternbild Löwe (rechts) im ägyptischen Zodiak von Dendera aus der Zeit kurz vor Christi Geburt.]] [[Datei:Dendera.03.Fische.Wassermann.jpg|mini|rechts|hochkant=2|Das Sternbild Fische (links) und das Sternbild Wassermann (rechts unten) im ägyptischen Zodiak von Dendera aus der Zeit kurz vor Christi Geburt.]] Zu diesen Bibelstellen sind im Folgenden einige Hinweise mit astronomischen Bezügen aufgeführt. Die [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Beobachtungen_in_der_Nähe_der_Ekliptik|Bezugspunkte]] liegen hierbei in der Nähe der [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Die_Ekliptik|Ekliptik]]: * In den Versen im Evangelium nach Johannes ist mehrfach vom '''Brot, das vom Himmel herabkommt''' die Rede. * Das zur Herstellung von Brot erforderliche Getreide kann durch eine '''Kornähre''' symbolisiert werden. Am Sternenhimmel wird die Kornähre durch den hellen, ekliptiknahen Stern '''Spica''' (α Virginis) im Sternbild '''Jungfrau''' (Virgo) repräsentiert. Der Vollmond stand zum jüdischen Pessachfest beim Stern Spica. * Alle Pflanzen benötigen für das Gedeihen '''Wasser'''. Das '''Wasser''' wird am Himmel durch die drei Wassersternbilder der Ekliptik '''Fische''' (Pisces), '''Wassermann''' (Aquarius), und '''Ziegenfisch''' (Steinbock, Capricornus) westlich des [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Frühlingspunkt|Frühlingspunktes]] repräsentiert. Diese Sternbilder bilden mit einigen weiteren angrenzenden Wassersternbildern den [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Urozean|Urozean am Himmel]] (siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Trichter_der_Thuraya|Der Trichter der Thuraya]]). Die Wassersternbilder waren zum Pessachfest in den drei Monaten unmittelbar zuvor von der Sonne durchlaufen worden und befanden sich beim Sonnenuntergang deshalb bereits unterhalb des westlichen Horizonts. * Das Sternbild '''Fische''' (Pisces) besteht seit der Antike aus '''zwei Fischen'''. * Zu Lebzeiten von Jesus von Nazareth war der '''Frühlingspunkt''' vom Sternbild Widder (Aries, ursprünglich das Hinterteil des großen Sternbilds [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsstier|Himmelsstier (Taurus caeli)]]) in das Sternbild '''Fische''' (Pisces) gewandert. Inzwischen ist er innerhalb dieses Sternbilds noch weiter nach Westen gewandert. Die Sonne und der Neumond standen zu Beginn des jüdischen Monats Nisan, also dem Monat des jüdischen Pessachfestes, im Sternbild '''Fische'''. Der erste Monat des Jahres, Nisan, hieß bereits in der mesopotamischen Tradition, als sich der Frühlingspunkt noch im Sternbild Widder (Aries) befand, auf Akkadisch "nisannu" (siehe hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Schaltregeln|Plejaden-Schaltregeln]]). In der alten jüdischen Tradition war der Nisan deswegen mit dem Sternbild Widder verbunden. Ferner wurde der Widder dem israelitischen Stamm Juda zugeordnet. * Zu Lebzeiten von Jesus von Nazareth war der '''Herbstpunkt''' vom Sternbild Waage (Libra, ursprünglich die Scheren des großen Sternbilds [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Himmelsskorpion|Himmelsskorpion (Scorpio caeli)]]) in das Sternbild Jungfrau (Virgo) gewandert. Inzwischen ist er innerhalb dieses Sternbilds noch weiter nach Westen gewandert. Um 285 nach Christi erreichte der '''Herbstpunkt''' dann die ekliptikale Länge des Sterns '''Spica''' (α Virginis). * Der '''Frühlingspunkt''' –&nbsp;damals im Sternbild Fische&nbsp;– und der '''Herbstpunkt''' –&nbsp;damals im Sternbild Jungfrau (Virgo) beim Stern Spica&nbsp;– befinden sich immer in genau gegenüber liegenden Punkten auf der Ekliptik. Auf diese Weise umfassen diese beiden ausgezeichneten Punkte den Lebewesenkreis (Zodiak) mit seinen '''zwölf''' Sternbildern sowie die Bahnen aller '''sieben''' Wandelgestirne. Diese beiden Punkte teilten die Ekliptik in '''zwei''' gleichgroße Teile, das Sommerhalbjahr und das Winterhalbjahr. Siehe hierzu auch "[[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Beobachtungen_in_der_Nähe_der_Ekliptik|Beobachtungen in der Nähe der Ekliptik]]". ** Die '''fünf Brote''' können mit den fünf mit bloßem Auge sichtbaren Wandelgestirnen (Planeten) '''Merkur''', '''Venus''', '''Mars''', '''Jupiter '''und '''Saturn''' gleichgesetzt werden.<br/>'''''Anmerkung''': In den deutschsprachigen Bibelübersetzungen wird in der Regel nicht zwischen Fixsternen und Planeten unterschieden. Für eine Ausnahme siehe 2.&nbsp;Buch der Könige, Kapitel 23, Vers 5 aus dem siebenten vorchristlichen Jahrhundert, wo in der Einheitsübersetzung explizit von "den Wandelsternen" und in der Luther-Bibel von "den Planeten" die Rede ist.<ref>[https://www.bibleserver.com/EU/2.K%C3%B6nige23%2C5 2.&nbsp;Buch der Könige, Kapitel 23, Vers 5], bibleserver.com, Einheitsübersetzung 2016</ref> Die Vulgata schreibt hier allerdings von den "duodecim signis" (zu Deutsch: "'''zwölf''' Zeichen"), womit die '''zwölf''' Sternzeichen der Ekliptik gemeint sind, durch die die '''sieben''' Wandelgestirne ziehen. Die Septuaginta spricht noch allgemeiner von den "μαζουρωθ" ("mazuroth") nach dem Hebräischen Wort "מַזָּלָה" ("mazzaroth"), womit allgemein eher Sternkonstellationen und nur im engeren Sinne die Sternzeichen des Zodiaks gemeint sind.'' ** Die '''zwei Fische''' können also mit den beiden flächenhaft wahrnehmbaren Wandelgestirnen '''Sonne''' und '''Mond '''gleichgesetzt werden. ** Die Summe der '''fünf Brote''' und der '''zwei Fische''' respektive die '''sieben Brote''' (oder die '''sieben Körbe''') entsprechen der Anzahl der freiäugig sichtbaren '''sieben Wandelgestirne''', die sich entlang der Ekliptiklinie stetig gegenüber dem Fixsternhimmel bewegen. Siehe hierzu auch "[[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Zusammenhang_mit_dem_Stier|Zu den Etyma und den Kognaten von "Sieben", "Stier", "Gestirn" und "Stern"]]". ** Die ausgeteilten '''Brote''' und '''Fische''' durchmaßen die gesamte versammelte Menschenmenge, die durch den vollständigen [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Zodiak|Lebewesenkreis (Zodiak)]] mit den '''zwölf Lebewesenkreiszeichen''' beziehungsweise durch die '''zwölf Körbe''' symbolisiert wird. Der Planet Jupiter, der den Zodiak in zwölf Jahren einmal durchläuft, wurde in Babylonien mit dem babylonischen Hauptgott Marduk gleichgesetzt. * Insgesamt gibt es am Fixsternhimmel gut 2800&nbsp;Sterne bis zur scheinbaren Helligkeit 5,5<sup>m</sup> und um die 9000&nbsp;Sterne bis zur scheinbaren Helligkeit&nbsp;6,5<sup>m</sup>, die ohne Lichtverschmutzung mit bloßem Auge als einzelne Lichtpunkte gesehen werden können. Diese verteilen sich allerdings in der gesamten Himmelssphäre, so dass von einem Punkt auf der Erdoberfläche aus zu jedem Zeitpunkt immer nur ungefähr die Hälfte davon über dem Horizont steht. An den beiden Polen sind stets nur die Sterne der entsprechenden nördlichen beziehungsweise südlichen Hemisphäre zu sehen, und vom Äquator aus können im Laufe eines Jahres alle Sterne gesehen werden. Je nach Breitengrad können in den wolkenlosen Nächten eines vollständigen Jahres bei Abwesenheit von Streulicht, wie zum Beispiel verursacht durch den Mond, mindestens viereinhalbtausend Sterne beobachtet werden.<ref>Bob King: [https://skyandtelescope.org/astronomy-blogs/how-many-stars-night-sky-09172014/ 9,096 Stars in the Sky—Is that all? How many stars in the sky can you see?], skyandtelescope.org - The essential Guide to Astronomy, 17. September 2014</ref> Diese Anzahl entspricht dem Mittelwert der Spanne der bei der Brotvermehrung versammelten Menschen, deren Anzahl in den Evangelien mit '''viertausend''' beziehungsweise '''fünftausend''' angegeben ist. ** Im ersten Buch des Alten Testaments ('''Genesis''') wird Abram aus Ur in Mesopotamien bereits das Folgende prophezeit: <blockquote> 15,5 ''Sieh doch zum Himmel hinauf und zähl die Sterne, wenn du sie zählen kannst! Und er sprach zu ihm: So zahlreich werden deine Nachkommen sein''<br/> ...<br/> 17,5 ''Man wird dich nicht mehr Abram nennen. Abraham, Vater der Menge, wird dein Name sein; denn zum Stammvater einer Menge von Völkern habe ich dich bestimmt.'' </blockquote> * Die Gruppen von (ungefähr) '''fünfzig''' oder '''hundert Männern''' entsprechen den Sternbildern, die über den gesamten Himmel verteilt sind. Nach der Festlegung der Internationalen Astronomischen Union (IAU) von 1930 gibt es heute 88&nbsp;Sternbilder, die den Himmel vollständig abdecken. Mit den maximal ungefähr 8800&nbsp;freiäugig sichtbaren Sternen entspricht dies im Mittel also 100&nbsp;Sternen pro Sternbild. Bei 4400&nbsp;freiäugig sichtbaren Sternen wären es 50&nbsp;Sterne pro Sternbild. Diese Abschätzung entspricht genau der Spanne der Gruppenstärken, die im Neuen Testament angegeben sind. * Das '''Brot''' und der '''Wein''' werden nach der christlichen Lehre bei der Transsubstantiation in den Leib und das Blut des vom '''Himmel''' herabgekommenen "Brot des Lebens" (vergleiche die Rede über das Himmelsbrot von Jesus in der Synagoge von Kafarnaum in Evangelium nach Johannes 6,48–58) gewandelt, das die kosmische Ewigkeit verheißt. Die Zahlen '''Zwei''', '''Fünf''', '''Sieben''' und '''Zwölf''' stehen in einem einfachen arithmetischen Zusammenhang, bei dem die beiden jeweils vorhergehenden Zahlen der Folge addiert werden: {| class="wikitable" |+ |'''Zahl''' |'''Summe''' |'''Anmerkung''' |- |'''2''' | |Anzahl der freiäugig als '''flächenhaft wahrnehmbaren Wandelgestirne''' ('''Sonne''' und '''Mond'''), siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Zwei|"Zur Zwei"]] |- |'''5''' | |Anzahl der freiäugig als '''punktförmig wahrnehmbaren Wandelgestirne''' '''Merkur''', '''Venus''', '''Mars''', '''Jupiter''', '''Saturn''' |- |'''7''' |= 2 + 5 |Anzahl der freiäugig wahrnehmbaren '''Wandelgestirne''' sowie der '''Tage in der Woche''', siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Sieben|"Zur Sieben"]] |- |'''12''' |= 5 + 7 |Anzahl der '''Monate im Jahr''', der '''Lebewesenkreiszeichen des Zodiaks''' sowie der '''Erdenjahre pro Jupiterjahr''', siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Zwölf|"Zur Zwölf"]], vergleiche hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Der_Zodiak|"Der Zodiak"]] |- |'''19''' |= 7 + 12 |Anzahl der '''Jahre''' mit '''zwölf Monaten''' und '''sieben Schaltmonaten''' einer '''Meton-Periode''', siehe [[Quadriviale_Kuriositäten/_Zahlen#Zur_Neunzehn|"Zur Neunzehn"]], vergleiche hierzu auch [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Die_Plejaden#Schaltregeln|"Die Plejaden-Schaltregeln"]] und [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Mondzyklen#Der_Meton-Zyklus|"Der Meton-Zyklus"]] |} === Weitere Bezüge === Weitere Bezüge von der Astronomie zur Theologie ergeben sich bei den folgenden Sachverhalten: → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Biblische_Erwähnungen|'''biblische Erwähnungen von Konstellationen''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Der_Stern_von_Bethlehem|'''Der Stern von Bethlehem''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Ochs_und_Esel|'''Ochs und Esel / Krippe / „Ich bin das Alpha und das Omega“''']]. → Siehe [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Biblische_Bezüge|'''Biblische Bezüge zu den Mondhäusern / Mondstationen''']]. == Zur Kosmologie == [[Datei:Kosmologisches.Modell.Schwarze.Schale.Rotverschiebung.png|mini|rechts|hochkant=2.5|Ein kosmologisches Modell unseres im Zentrum isotropen und inhomogenen Universums, das von einer undurchsichtigen und massereichen schwarzen Kugelschale umgeben ist. Von der äußeren Region aus betrachtet, ist unser Universum ein gigantisches Schwarzes Loch. Zwischen dem inneren und dem äußeren Bereich der schwarzen Kugelschale ist kein Informationsaustausch möglich. Jegliche Materie, die von innen oder außen in die schwarze Kugelschale gelangt, ist von innen und von außen nicht mehr sichtbar. Sowohl die innere als auch die äußere Grenze der schwarzen Kugelschale stellen demzufolge einen Ereignishorizont dar.]] Die '''Kosmologie''' beschäftigt sich mit der Struktur, dem Ursprung und der Entwicklung des Universums. Dadurch ergeben sich zahlreiche Bezüge zur beobachtenden '''Astronomie''' und zur '''Astrophysik''', aber auch zur '''Quantenphysik'''. In der Antike gingen die Menschen noch davon aus, dass sich die Erde im Mittelpunkt der Welt und somit auch in der Mitte des sichtbaren Universums befindet. Dieses geozentrische Weltbild wurde seit dem 16.&nbsp;Jahrhundert, ausgelöst durch die kopernikanische Wende, zunehmend verworfen und durch ein heliozentrisches Weltbild ersetzt. Durch die Erfindung und Verwendung von Fernrohren konnten seit dem Beginn des 17.&nbsp;Jahrhunderts immer mehr Details im Sternenhimmel entdeckt werden. Durch astronomische Beobachtungen ergaben sich immer mehr Indizien für die Tatsache, dass die Erde einmal pro Jahr auf einer Ellipsenbahn die Sonne umrundet und nicht die Sonne die Erde umkreist. Der Philosoph Immanuel Kant (1724–1804) erkannte bereits 1755 in seiner Allgemeinen Naturgeschichte und Theorie des Himmels das innere Wesen unserer Milchstraße. Mit der ersten zuverlässigen Messung der Parallaxe von unserer Erde zum benachbarten Fixstern 61&nbsp;Cygni ("Bessel's Stern") durch Friedrich Wilhelm Bessel (1784–1846) in Königsberg und der daraus folgenden Berechnung von dessen Entfernung von gut zehn Lichtjahren im Jahr 1838 war die Tatsache, dass die Erde um die Sonne läuft, endgültig bewiesen. Die Auswertung der astronomischen Beobachtungen hat zu der heute allgemein geteilten Auffassung geführt, dass unser Universum bei einem Urknall entstanden ist und seitdem expandiert. Die Berücksichtigung des Äquivalenzprinzips zwischen schwerer und träger Masse, das zu der von '''Albert Einstein''' (1879–1955) formulierten Allgemeinen Relativitätstheorie führt, brachte '''Alexander Friedmann''' (1888–1925) 1922 zu der theoretischen Vorhersage eines dynamischen Universums. Fünf Jahre später schlussfolgerte der belgische Astronom '''Georges Lemaître''' (1894–1966) aus den von '''Vesto Slipher''' (1875–1969) beobachteten Rotverschiebungen von fernen Galaxien und den von '''Edwin Hubble''' (1889–1953) ermittelten Entfernungen dieser Galaxien, dass das Universum expandiert. Aufgrund dieser Erkenntnis ergibt sich, dass das Universum einen Ursprung mit sehr kleinem Radius gehabt haben muss. Diesen Zustand nannte er "primordiales Atom" beziehungsweise "Uratom". In der Folgezeit etablierte sich für diesen initialen Vorgang der Begriff "'''Urknall'''" (im Englischen: "'''Big Bang'''").<ref>Markus Bautsch: ''[https://en.wikibooks.org/wiki/Moving_objects_in_retarded_gravitational_potentials_of_an_expanding_spherical_shell/Brief_historical_review Moving objects in retarded gravitational potentials of an expanding spherical shell / Brief historical review], Wikibook (englisch), 2024, abgerufen am 28. Februar 2026</ref> Viele Astrophysiker versuchen heute mit dem sogenannten '''Standardmodell der Kosmologie''' (auch '''ΛCDM-Modell''' beziehungsweise Lambda-CDM-Modell, wobei "CDM" für "cold dark matter" steht, also für "kalte, dunkle Materie") die Entwicklung des Universums nachzubilden. Hierfür wenden sie das kosmologische Prinzip an, das von zwei grundlegenden Annahmen ausgeht:<ref>Markus Bautsch: ''[https://en.wikibooks.org/wiki/Moving_objects_in_retarded_gravitational_potentials_of_an_expanding_spherical_shell/Preface Moving objects in retarded gravitational potentials of an expanding spherical shell / Preface], Wikibook (englisch), 2024, abgerufen am 28. Februar 2026</ref> # Das Weltall sei '''homogen''', was bedeutet, dass es in groben Zügen von jedem Punkt aus gleich aussieht. # Das Weltall sei '''isotrop''', was besagt, dass es in groben Zügen in jede Richtung gleich aussieht. Mit diesen Annahmen kann das Modell berechnet werden, und mit diversen zusätzlichen Annahmen stimmt es in vielerlei Hinsicht mit den astronomischen Beobachtungen überein. Zu den zusätzlichen Annahmen gehören die folgenden beiden hypothetischen Größen: * '''Kalte, dunkle Materie''', die zwar der Gravitation unterläge, aber keine Wechselwirkung mit elektromagnetischer Strahlung zeigt. * Eine '''kosmologische Konstante''' Λ, die eine '''dunkle Energie''' beschreibt und für die beschleunigte Expansion des Universums verantwortlich sei. Weder für die Homogenität noch für die Isotropie des Kosmos konnten bislang Belege gefunden werden, und auch für die kalte dunkle Materie und die dunkle Energie konnte bislang keine physikalische Interpretation geliefert werden. Ferner ist auch die Annahme, dass die Naturkonstanten unveränderliche Werte haben, nicht begründbar. Auf kosmischen Zeitskalen kann es durchaus Änderungen geben, die wir derzeit nicht messen können. Die gilt insbesondere für die Hubble-Konstante, die die Expansionsrate des Universums beschreibt, für die Gravitationskonstante, die die Anziehung zweier Massen beschreibt, oder für die kosmologische Konstante, die die beschleunigte Expansion des Universums beschreibt. In diesem Kontext sei darauf hingewiesen, dass unser Universum genauso groß ist wie ein Schwarzes Loch mit der Masse unseres Universums. Deshalb gehen einige Kosmologen davon aus, dass wir innerhalb eines Schwarzen Loches der Größe und Masse unseres Universums leben könnten. Siehe hierzu auch: [[:en:Moving_objects_in_retarded_gravitational_potentials_of_an_expanding_spherical_shell|'''Moving objects in retarded gravitational potentials of an expanding spherical shell''']]. Darüber hinaus mehren sich Anzeichen und Hinweise, die gegen die Ergebnisse des Standardmodells der Kosmologie sprechen, beziehungsweise durch weitere Hypothesen, die physikalisch nicht begründet werden können, im Standardmodell berücksichtigt werden müssen. Die folgende unvollständige Liste soll hierzu einige Anhaltspunkte liefern: * Präzise astronomische Beobachtungen zeigen, dass das Weltall auch auf großen Längenskalen '''nicht homogen''' ist, sondern Strukturen zeigt. * Präzise astronomische Beobachtungen zeigen, dass das Weltall auch auf großen Längenskalen '''nicht isotrop''' ist (Asymmetrie der kosmischen Hintergrundstrahlung). * Die Hubble-Konstante hat heute einen anderen Wert als früher ("'''Hubble tension'''"), was mit dem Standardmodell nicht im Einklang steht. * Das beobachtete Vorkommen des am häufigsten auftretenden stabilen Isotops des dritten Elements im Periodensystem, des Alkalimetalls '''<math>{}^{7}_{3}\mathrm{Lithium}</math>''', ist mindestens dreimal geringer als vom Standardmodell vorhergesagt. * Die '''Rotverschiebung von fernen Galaxien''' ist deutlich größer als es nach dem Standardmodell möglich wäre. * Die beobachteten '''Rotationskurven von Spiralgalaxien''' stehen im Widerspruch zu den Ergebnissen des Standardmodells. * Das Standardmodell ist nicht in der Lage, die Abwesenheit von '''Antimaterie''' im sichtbaren Teil des Universums zu erklären. * Die im frühen Universum beobachteten '''primordialen Schwarzen Löcher und Galaxien''' mit explodierende '''Supernovae''' sowie dem Vorkommen von '''Sauerstoff''' stehen im Widerspruch zu den Ergebnissen des Standardmodells. == Zur Astrologie == Eine Sonderstellung nimmt die '''{{w|Astrologie}}''' (zusammengesetzt mit dem altgriechischen ἄστρον ("astron"), zu Deutsch „Sternenlehre“) ein. Sie ist ein weiteres Beispiel für eine Disziplin, bei der grundlegende Kenntnisse über die Astronomie eine Voraussetzung sind. Sie versucht, Zusammenhänge zwischen den Konstellationen der Wandelgestirne oder astronomischen Ereignissen am Sternenhimmel mit irdischen Geschehnissen oder Veränderungen herzustellen, insbesondere was bestimmte Konjunktionen und daraus abgeleitete Prophezeiungen betrifft. Sie wurde bereits in Mesopotamien und in anderen alten Kulturkreisen von Astronomen ausgeübt. Noch der Astronom '''{{w|Johannes Kepler}}''' (1571–1630) hat als einer der letzten Astronomen einen wesentlichen Teil seiner Einkünfte durch die Erstellung von Horoskopen bestritten. Aber schon Aristoteles hatte festgestellt und beschrieben, dass die bei bestimmten Konstellationen am Himmel vorhergesagten Ereignisse nicht eingetreten waren. Vor der Aufklärung haben astrologische Prophezeiungen noch eine große und weitreichende gesellschaftliche Bedeutung gehabt. Als Beispiel seien die Behauptungen des ersten im Kurfürstentum Brandenburg tätigen Astrologen '''{{w|Johannes Carion}}''' (1499–1537) genannt, der für 1524 eine Sintflut vorhersagte, die nicht eingetroffen ist.<ref>{{Literatur |Autor=Markus Bautsch, Friedhelm Pedde |Titel=Vor 500 Jahren: Die Sintflut von 1524 die nicht stattfand |Online=https://wfs.berlin/wp-content/uploads/2024/05/A19-BROplanetA4_40s-feb2024ff_www-rz.pdf |Sammelwerk=Dem Himmel nahe. |WerkErg=Mitteilungen der Wilhelm-Foerster-Sternwarte e.V.|Nummer=19 |Hrsg=Wilhelm-Foerster-Sternwarte e.V. / Zeiss-Planetarium am Insulaner |Ort=Berlin |Datum=2024-02 |Seiten=16–19 |Sprache=de |Abruf=2025-08-03|ISSN=2940-9330}}</ref> Der Wiener Hofastronom '''{{w|Georg Tannstetter}}''' (1482–1535) sah sich 1523 bemüßigt, die schon lange im Voraus erhitzten und besorgten Gemüter zu beruhigen:<ref>Georg Tannstetter: ''Libellus consolatorius contra opiniones de diluvio et aliis horrendis periculis anni 1523''</ref> <blockquote> Nun hat sich überall, in allen Köpfen, in allen Seelen das Gerücht eingeschlichen:<br/> die Gelehrten und Weisen sind in ständigem Streitgespräch, andere hingegen sind derart verstört, dass sie ihren Geschäften nicht mehr nachgehen können; sie verkaufen ihre Anwesen, ihre Felder und Besitztümer oder lassen davon ab, Güter zu kaufen, in der Hoffnung, ihr Geld leichter in die sicheren Berge transportieren zu können. Andere wiederum verschieben ihr Heiratsversprechen, kündigen ohne scheinbaren Grund Verträge auf, entziehen sich ihren christlichen Gelübden, arbeiten faul und missmutig auf dem Land und fragen sich, was es denn nütze, Geld und Gut anzuhäufen, wenn doch in kürzester Zeit niemand mehr davon Nutzen ziehen könne. </blockquote> '''→ Siehe auch:''' * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Definition|'''Konjunktionen''', Abschnitt '''Definition''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Konjunktionen#Historische_Konjunktionen|'''Historische Konjunktionen''']]. * [[Astronomie_von_der_Frühgeschichte_bis_zur_Neuzeit/_Astronomische_Bezugssysteme#Beobachtungen_in_der_Nähe_der_Ekliptik|'''Beobachtungen in der Nähe der Ekliptik''']]. <div style="clear:both"></div> == Einzelnachweise == <references></references> buxax9q6jx76ladkpc82t8cp4fep8n5 Traktorenlexikon: Allis-Chalmers 4-W 305 0 123095 1090406 2026-09-06T11:20:04Z Baupit 56622 Neue Seite (vgl. [[WB:AZ]]) 1090406 wikitext text/x-wiki {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} {{:Traktorenlexikon: Modell-Infobox | HERSTELLER = ALLIS-CHALMERS | MODELLREIHE = 4 WD-Serie | MODELL = 4 W-305 | BILD = | BILDBESCHREIBUNG = | BAUWEISE = Rahmenbauweise | PRODUKTIONSBEGINN = 1982 | PRODUKTIONSENDE = 1985 | STÜCKZAHL = | EIGENGEWICHT = 12.292 | LÄNGE = 7.239 | BREITE = 2.426 | HÖHE = 3.531 | RADSTAND = 3.200 | BODENFREIHEIT = 655 | SPURWEITE = 2.426-3.035 | SPURWEITE VORNE = | SPURWEITE HINTEN = | WENDERADIUS MIT LENKBREMSE = | WENDERADIUS OHNE LENKBREMSE = | BEREIFUNG VORNE = 18.4-38 AS | BEREIFUNG HINTEN = 18.4-38 AS | LEISTUNG KW = 226,5 | LEISTUNG PS = 308 | NENNDREHZAHL = 2.300 | ZYLINDER = 6 | HUBRAUM = 11.973 | DREHMOMENTANSTIEG = | KRAFTSTOFF = Diesel | KÜHLSYSTEM = Wasserkühlung | ANTRIEBSTYP = Allradantrieb | GETRIEBE = 20 V/4 R | HÖCHSTGESCHWINDIGKEIT = 30 | KATEGORIESORTIERUNG = Knicklenker }} Anfang des Jahres 1972 löste ALLIS-CHALMERS die Modelle 7580 und 8550 ab. Als Ersatz folgten mit modernem Design und neuer Kabine die Modelle 4 W-220 und 4 W-305. Die technischen Änderungen waren nur gering. Als Triebwerk fungierte weiterhin das 20/4-Gänge POWER-DIRECTOR-Getriebe mit einer Zweigang-Lastschaltung. ==Motor== * ALLIS-CHALMERS, Typ: 6120 T, stehender, wassergekühlter Sechszylinder-Viertakt-Reihen-Dieselmotor mit Direkteinspritzverfahren, AC-DELCO-Kraftstoffpumpe, kopfgesteuerte Ventile, Verteiler-Einspritzpumpe, siebenfach gelagerte Kurbelwelle, zahnradgetriebene Nockenwelle, Turbolader, Mehrloch-Düsen, Druckumlaufschmierung mittels Zahnradpumpe, Thermostarteinrichtung, Trockenluftfilter, Düsenhalter, nasse-auswechselbare Zylinderlaufbuchsen, Leichtmetall-Kolben, mechanischer Fliehkraft-Verstellregler, Wasserumlaufkühlung mit Thermostat und Lamellenkühler. * Bohrung = 133,35 mm, Hub = 142,88 mm * Verdichtungsverhältnis = 16,25:1 * Mittlere Kolbengeschwindigkeit = 10,95 m/s * Geregelter Drehzahlbereich = 950 bis 2.580 U/min. ==Kupplung== * Pedal- oder Hand-betätigte, nasse Doppel-Lamellenkupplung * Betätigung der Fahrkupplung mittels vier Knöpfe und Handhebel-betätigtes POWER-DIRECTOR-Getriebekupplungssystem ==Getriebe== * Im Ölbad laufendes, teilsynchronisiertes Gruppengetriebe mit Zweihebelbedienung * Wechselgetriebe mit fünf Vorwärts- und einem Rückwärtsgang * Gruppengetriebe mit zwei Gruppen, in die Gruppen: L und H unterteilt * Hydraulisch-betätigtes Lastschalt-System als POWER-DIRECTOR-Gruppe bezeichnet * Lastschaltbare Betätigung mittels Hebel ohne Kupplungseinsatz zwischen einem schnellen und einem langsamen Gang (Low/High) 20 Vorwärts- und 4 Rückwärtsgänge ==Geschwindigkeiten vor- und rückwärts== "Geschwindigkeiten mit Bereifung 18.4-38 AS" {| class="wikitable" |- ! bei Motordrehzahl (U/min) !! 2.300 |- ! GRUPPE - L / LASTSTUFE - LO !! |- | 1.Gang || 2,57 km/h |- | 2.Gang || 4,99 km/h |- | 3.Gang || 6,12 km/h |- | 4.Gang || 6,92 km/h |- | 5.Gang || 9,50 km/h |- | 1.Rückwärtsgang || 4,67 km/h |- ! GRUPPE - L / LASTSTUFE - HI !! |- | 1.Gang || 3,06 km/h |- | 2.Gang || 5,63 km/h |- | 3.Gang || 6,92 km/h |- | 4.Gang || 7,72 km/h |- | 5.Gang || 11,27 km/h |- | 2.Rückwärtsgang || 5,79 km/h |- ! GRUPPE - H / LASTSTUFE - LO !! |- | 1.Gang || 8,37 km/h |- | 2.Gang || 12,87 km/h |- | 3.Gang || 15,45 km/h |- | 4.Gang || 17,22 km/h |- | 5.Gang || 23,34 km/h |- | 3.Rückwärtsgang || 10,46 km/h |- ! GRUPPE - H / LASTSTUFE - HI !! |- | 1.Gang || 10,30 km/h |- | 2.Gang || 13,84 km/h |- | 3.Gang || 19,15 km/h |- | 4.Gang || 21,24 km/h |- | 5.Gang || 28,81 km/h |- | 4.Rückwärtsgang || 13,04 km/h |- |} ==Zapfwelle== * Mechanisch-betätigte Getriebezapfwelle * Stummel = 1 3/8"- 6 Keile * Einfach schaltbar, 1.000 U/min. * 1.000 U/min. Übertragbare Leistung = 252,9 DIN-PS ==Bremsen== * Pedal-betätigte, nasse Mehrscheibenbremse auf die Differentialseitenwellen wirkend, als Lenkbremse ausgebildet * Handhebel-betätigte Feststellbremse ==Achsen== * Pendelnd-gelagerte Teleskop-Vorderachse * Starre Hinterachse mit Kegelradgetriebe, Tellerrad und Stirnradübersetzung * Mechanisch-betätigte Differentialsperre ==Lenkung== * Hydrostatische Knicklenker-Lenkung ==Hydrauliksystem und Kraftheber== * Lastabhängiger hydraulischer Kraftheber * Dreipunktaufhängung der Kategorie III/IV mit Schnellkuppler Funktionen: * Heben, Senken, Zugkraft- und Positionskontrolle * Reaktionsregelung und Tiefeneinstellung * Geschlossenes System mit einer Förderleistung von 283,5 l/min. Max. Hubkraft an den Koppelenden = 6.000 kg ==Steuergeräte== * Ein einfachwirkendes Steuergerät ==Elektrische Ausrüstung== "12-Volt Einrichtung" * Zwei Batterien ==Maße und Abmessungen== * Länge über alles = 7.2390 mm * Breite über alles = 2.426 bis 3.035 mm * Höhe über Motorhaube = 2.464 mm * Höhe über Kabine = 3.531 mm * Radstand = 3.200 mm * Bodenfreiheit unter der Vorderachse = 655 mm * Betriebsgewicht = 12.292 kg ==Bereifung== "Standardbereifung:" * Vorne und Hinten = 18.4-38 AS "Optional:" * Vorne und Hinten = 30.5-32, 24.5-32 und 20.8-38 AS ==Füllmengen== * Tankinhalt = 757,0 l * Motoröl = 43,5 l * Kühlsystem = 68,1 l * Hydraulik = 56,8 l ==Verbrauch== ==Kabine== * Vollverglaste Sicherheitskabine mit zwei Türen, gepolsterten Sitz, Traktormeter, Amperemeter, Kraftstoffanzeige, Heizung, Klimaanlage, Thermometer, seitliche Bedienelemente und Lade- und Öldruckanzeige ==Sonderausrüstung== * Radgewichte * Zusatz-Steuergeräte * Zugpendel ==Literatur & Weblinks== * Allis Chalmers brochure * tractordata.com * koneviesti.fi <references /> {{:Traktorenlexikon: Navigation |HERSTELLER-LINK=Traktorenlexikon: Allis-Chalmers |HERSTELLER= Allis-Chalmers}} 53pu99ljqyvq9c8bxfvii8z4xhew9k0