192 94 75MB
German Pages 425 [428] Year 1991
Freimut Marschner Quantenchemie mit Personal Computern
Freimut Marschner
Quantenchemie mit Personal Computern Eine Einführung mit interaktiven Programmen für IBM-PC und Kompatible Das Buch enthält zwei Disketten
W Walter de Gruyter DE G Berlin • New York 1991
Autor Privatdozent Dr. Freimut Marschner Organisch-Chemisches Institut Technische Universität Berlin Straße des 17. Juni 135 D-1000 Berlin 12
® Gedruckt auf säurefreiem Papier, das die US-ANSI-Norm über Haltbarkeit erfüllt.
CIP-Titelaufnahme der Deutschen Bibliothek
Marschner, Freimut: Quantenchemie mit Personal Computern : eine Einführung mit interaktiven Programmen für IBM-PC und Kompatible / Freimut Marschner. — Berlin ; New York : de Gruyter, 1991 ISBN 3-11-011944-7
© Copyright 1991 by Walter de Gruyter & Co., D-1000 Berlin 30. Dieses Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Der Verlag hat für die Wiedergabe aller in diesem Buch enthaltenen Informationen (Programme, Verfahren, Mengen, Dosierungen, Applikationen etc.) mit Autoren bzw. Herausgebern große Mühe darauf verwandt, diese Angaben genau entsprechend dem Wissensstand bei Fertigstellung des Werkes abzudrucken. Trotz sorgfältiger Manuskripterstellung und Korrektur des Satzes können Fehler nicht ganz ausgeschlossen werden. Autoren bzw. Herausgeber und Verlag übernehmen infolgedessen keine Verantwortung und keine daraus folgende oder sonstige Haftung, die auf irgendeine Art aus der Benutzung der in dem Werk enthaltenen Informationen oder Teilen davon entsteht. Printed in Germany Druck: WB-Druck, Rieden am Forggensee Buchbinderische Verarbeitung: Lüderitz & Bauer, Berlin Einbandgestaltung: Hansbernd Lindemann
für Helga, Debora, Sibylle, Christoph
Vorwort Als Quantenchemie kann der numerisch-mathematische Teil der Theoretischen Chemie bezeichnet werden, der sich mit der Anwendung der Methoden der Quantenmechanik auf chemische Problemstellungen beschäftigt. Ziel der Quantenchemie ist: - zu einer qualitativen und quantitativen Beschreibung physikochemischer Stoff-Eigenschaften zu gelangen, sowie - den Ablauf chemischer Reaktionen detailliert zu bestimmen. Die Entwicklung der Theoretischen Chemie ist eng verknüpft mit den Fortschritten auf dem Computer-Sektor. Diese Fortschritte führen zu einem Wandel in der Chemie. Aufgrund der gesteigerten Leistungsfähigkeit der Computer wird die Mathematisierung und Informatlsierung der Chemie weiter fortgesetzt. Quantenchemische Berechnungen von Verbindungen werden genauer. Semiempirische Methoden kommen aus der Mode. Ab-initio-Resuitate prognostizieren die Existenz von bislang unbekannten Substanzen, die eine Herausforderung an den Experimentator darstellen. Die Berechnung von Reaktionshyperflächen wird perfektioniert. Ausgetüftelte Programmpakete, wie sie vom Quantum Chemistry Program Exchange (QCPE) für Großrechner angeboten werden, stehen zur Verfügung. In Kursen läßt sich die Ein- und Ausgabe solcher Programme trainieren. Die Installierung von Personal Computern (PC's) in Universitäten, Labors und Schulen macht es nun möglich, kompliziertere Rechenvorgänge, wie sie in quantenchemischen Programmen enthalten sind, als Teilprobleme darzustellen und lehrmäßig zu behandeln. Vor diesem Hintergrund ist dieses Buch gedacht als ein Lehr- und Arbeitsbuch zur Einführung in die Quantenchemie, wobei der Leser den Personal Computer gleichsam wie Bleistift und Papier benutzt, um die markanten Leitlinien und Gedankengänge mltzuvollziehen. In 28 Beispielen wird der mathematische Inhalt algorithmisch dargestellt und in der einfachen Programmiersprache BASIC (Turbo BASIC, BASICA, GW BASIC) programmiert. Die vollständige Programmdokumentation in Form von Anleitung, Bildschirmausdruck und Listing ist in die Jeweiligen Buch-Kapitel eingearbeitet. Die Listings sind strukturiert und kommentiert. Dabei wurde im Gegensatz zur modularen Programmlertechnik die pragmatische Konzeption verfolgt, ausgehend von Grundkenntnissen der BASIC-Programmierung, wie sie in den Schulen unterrichtet wird, sukzessive den Komplexitätsgrad zu steigern. Dieses didaktische Konzept läuft auch den mathematischen Inhalten weitestgehend VII
parallel. Zusätzlich befinden sich die Programme dieses Buches in kompilierter Form auf zwei Disketten, sodaß der Programmablauf anschaulich nachvollzogen werden kann. Eine zusätzliche Programmablaufdarstellung in Form von Diagrammen erscheint damit nicht erforderlich. Hinweise zur Benutzung dieser Disketten werden nach diesem Vorwort und im Anhang gegeben. Dieses Buch kann keine vollständige Aufzählung aller für ein bestimmtes chemisches Problem entwickelten Methoden bringen. Es sieht seine Hauptaufgabe in einer sorgfältigen Auswahl der zu behandelnden Verfahren unter didaktischen, praxisorientierten und rechenökonomischen Gesichtspunkten. Eine solche Auswahl ist auch von persönlichen Erfahrungen bestimmt, nicht zuletzt aufgrund eigener Forschungsergebnisse auf diesem Gebiet. Ebenso besteht nicht die Absicht, ein perfektes, ausgetüfteltes Programmieren in BASIC zu vermitteln. Anleitungen dazu stellen die Computer-Hersteller gewöhnlich zur Verfügung. Dieses Buch wendet sich an folgenden Leserkreis: - Der experimentell arbeitende Chemiker in Forschung, Lehre und Industrie, der an der Anwendung einfacher quantenchemischer Methoden als Ausgangspunkt für aufwendigere Rechnungen an den Großrechnern von Rechenzentren interessiert ist. - Studenten mit Grundkenntnissen in Anorganischer, Organischer und Physikalischer Chemie. An mathematischen Kenntnissen wird die Schulmathematik vorausgesetzt. Eine Einführung in die Algebra von Matrizen wird gegeben. - Chemie-Lehrer und Studenten für das höhere Lehramt in Chemie, um Ideen und Motivationen für den Unterricht in der Sekundarstufe II zu geben. - Leser, die in quantenchemischer Lektüre nicht oder wenig geübt sind, aber Interesse für die Umsetzung chemischer Fragestellungen über mathematische Modelle in Informationstechnische Darstellungsformen aufbringen. Die Programme dieses Buches wurden bereits erfolgreich im Rahmen der Vorlesung Theoretische Organische Chemie an der Technischen Universität Berlin eingesetzt. Frau Dr. H. Juds danke ich sehr herzlich für die LiteraturRecherchen. Buc(Versailles)/Berlin 1990
Freimut Marschner
VIII
Hinweise zu den Disketten Die Programme dieses Buches befinden sich in kompilierter Form auf zwei Disketten (Floppy Disk 5 1/4 " für IBM-PC oder IBM-Kompatible). Sie wurden unter MS-DOS 3.3 im Rahmen von Turbo BASIC auf einem IBM-PC/XT bzw. AT mit 640 KByte Hauptspeicher sowie einem IBM-Kompatiblen mit 512 KByte Hauptspeicher entwickelt, kompiliert und getestet. Die Kompilation erfolgte ohne Einbindung eines arithmetischen Coprozessors, da eine solche Ausstattung nicht bei jedem Besitzer eines IBM-kompatiblen Computers vorauszusetzen ist. Jedoch beschleunigt ein Coprozessor die Berechnung der Funktionswerte bzw. Bildpunkte erheblich. Zur Benutzung derjenigen Programme, die überwiegend mit graphischer Darstellung arbeiten, ist eine Hardware-Ausstattung wahlweise mit CGA-, EGAoder VGA-Graphikkarte erforderlich. Bei der Verwendung von GraphikkartenEmulationen können aufgrund gleicher Interrupts-Belegung mit Turbo BASIC bzw. seinen Kompilaten teilweise Laufschwierigkeiten a u f t r e t e n . Die Ausstattung eines PC's hinsichtlich Graphikkarte und Speicherplatz läßt sich mit dem Programm SCREEN.EXE ermitteln; es bestimmt die möglichen Bildschirmkonstanten (SCREEN), die dann in den Programmen eingegeben werden können. Das eigentliche Hauptprogramm ist MENU.EXE. Von diesem Programm werden die anderen Programme der Extension ".TBC ausgewählt und mit (R)un g e s t a r t e t . Dabei ist darauf zu achten, daß bei der Verwendung eines PCs mit F e s t p l a t t e zunächst das Hauptverzeichnis der F e s t p l a t t e (C:\) angezeigt wird. Nach Wahl derjenigen Disketten-Station (A oder B), in der sich die Programmdiskette befindet, wird der Disketteninhalt angezeigt und eine Ausführung der Programme ermöglicht. Es empfiehlt sich daher die Programme auf die Festplatte zu kopieren. Eine Programmübersicht und weitere Bedienungshinweise befinden sich im Anhang 10.7.
IX
Inhaltsverzeichnis Symbole
XIII
0 Einleitung
1
1 Fundamentale Quantenchemie
5
1.1 Programm-Beispiel
1: Das Unbestimmtheitsprinzip
5
1.2 Programm-Beispiel
2: Das ßoTi/^Atommodell
10
1.3 Programm-Beispiel
3: Spektrallinien Wasserstoffähnlicher Isotope
19
2 Eigenfunktionen der Schrödinger-Gleichung
25
2.1 Programm-Beispiel
4: Funktionsdarstellung im Textmodus
26
2.2 Programm-Beispiel
5: R a d i a l - A n t e i l von Eigenfunktionen des Wasserstoffatoms im Graphik-Modus
2.3 Programm-Beispiel
6: W i n k e l - A n t e i l von Eigenfunktionen
2.4 Programm-Beispiel
7: Eigenfunktionen in perspektivischer
2.5 Programm-Beispiel
8: Dreidimensionale Darstellung der
46
Flächendarstellung
56
W i n k e l - A n t e i l e von Eigenfunktionen ....
3 Orbitalnäherungen 3.1 Programm-Beispiel 3.2 Programm-Beispiel
32
65
75 9: S/ate/^Orbitalexponenten
75
10: S7ater-Orbitale (STO)
83
4 Linearkombination von Orbitalen
92
4.1 Programm-Beispiel
11: Hybridorbitale
4.2 Programm-Beispiel
12: Molekülorbitale ( L C A O - M O - A n s a t z )
4.3 Programm-Beispiel
13: Orbitale in Höhenliniendarstellung
96 106 ....
5 Operatoren und Eigenwerte
113
123
5.1 Programm-Beispiel
14: Die ScArö'di'^e/^Gleichung als lineare
5.2 Programm-Beispiel
15: Die Sc/irödj/i^e/^Gleichung als
Differentialgleichung 2. Ordnung
Eigenwertproblem
123
149
6 Approximationsmethoden f ü r Molekülberechnungen
164
6.1 Die Born-Oppenheimer-Näherung
166 XI
6.2 Die Hartree-Fock-Methode
167
6.3 Die Roothaan-Hall-{hCAO-UO-SCF)-Methode
171
6.4 Die Integralnäherungen (ZDO)
175
6.5 Semiempirische Methoden: MINDO/3 und MNDO
177
6.6 Molekülmechanik: das empirische MM-Modell
184
7 Integrale
189
7.1 Programm-Beispiel 16: numerische Integration bestimmter Integrale
189
7.2 Programm-Beispiel 17: numerische Integration nach Gauss, Hermite,
Legendre, 195
Laguerre
7.3 Programm-Beispiel 18: Überlappungsintegrale von Slater-Orbitalen
205
7.4 Programm-Beispiel 19: Klassifizierung und Redundanz von Integralen der Elektronenwechsel Wirkung
217
7.5 Programm-Beispiel 20: Integrale und Energieeigenwerte des Wasserstoffmoleküls und seines Kations
221
8 Das Hückel-Molekülorbital-Modell
233
8.1 Die Postulate und Parameter des HMO-Modells
233
8.2 Die charakteristischen Gleichungen des HMO-Modells
237
8.3 Interpretation der HMO-Energie
239
8.4 Reaktivität
242
8.5 Programm-Beispiel 21: Ein Zeichenprogramm mit der Maus zur Darstellung topologischer Matrizen ....
247
8.6 Programm-Beispiel 22: Matrizen-Algebra
255
8.7 Programm-Beispiel 23: Das JacoW-Diagonalisierungsverfahren .
270
8.8 Programm-Beispiel 24: Diagramme von
tfüc/ce./-Eigenwert-Koeffizienten
und Molekülorbitalen
285
9 Korrelation
295
9.1 Eine Methode zur Parametrisierung des PPP-SCF-MO-Modells ....
295
9.2 Programm-Beispiel 25: Koordinaten von Linien und Ringsystemen
296
9.3 Programm-Beispiel 26: PPP-SCF-Berechnungen mit Konfigurationswechselwirkung
314
9.4 Programm-Beispiel 27: Lineare Regressions- und Varianz-Analyse experimenteller und berechneter Daten 9.5 Programm-Beispiel 28: Symmetriegruppen und Charakteren-Tabellen
XII
349 363
10 Anhang
381
10.1 Griechisches Alphabet
381
10.2 Energie-Umrechnungsfaktoren
381
10.3 Klassifizierung der Schlüsselworte von Turbo BASIC
381
10.4 Programm-Beispiel 29: ASCII-Zeichensatz
383
10.5 Programm-Beispiel 30: Bildschirmkonstante SCREEN
384
10.6 Programm-Beispiel 31: Disketten-Menü
385
10.7 Programmverzeichnis der Disketten und Bedienungshinweise ...
388
10.8 Glossar
390
11 Literaturverzeichnis
395
11.1 Lehrbücher und Monographien
395
11.2 Computer-Fachbücher
396
11.3 Hinweise zu Computer-Programmen
397
11.4 Originalarbeiten
397
12 Register
399
XIII
Symbole erster Bohrscher
Radius des H-Atoms
CI-Koeffizienten
mr
cQ
Vakuum-Lichtgeschwindigkeit
c. „
MO-Koeffizienten
Dr
Elektronen-Übergangsmoment
*
*
e
Elementarladung
Em En
experimentelle Anregungsenergie
E*,., Hb
Gesamt-w-Elektronenenergie CT b
n - bzw a-Bindungsenergie
F
Fock -Operator
fm
Oszillatorstärke
h
Planck -Konstante
H
Hamilton-Operator
H
Hamilton-Matrix,
i, j, k, 1
Laufzahlen über MO's
Elektronenwechselwirkungs-Integrale, auch (ij.kl)
auch CI-Matrix
I oder I.P.
Ionisationspotential
Iv
experimentelles vertikales Ionisationspotential
J
Coulomb-Operator
Kt
Austausch-Operator
1
Bahndrehimpulsquantenzahl
m
Magnetquantenzahl, auch Laufindex über Anregungszustände
me
Ruhemasse des Elektrons
Mq. M, r M^
Rotations-Matrizen
Mm N
Gesamt-Elektronen-Übergangsmoment Normierungskonstante
n
Hauptquantenzahl, auch Anzahl Elektronen bzw. Atomkerne
p
Impuls
?
Bindungs-Ladungsordnungs-Matrix-Elemente
qr*
Ladungsordnung eines AO's
q
allgemeine Raumkoordinaten
R n 1, (r)
Radialfunktion
R^
Äydterg-Konstante
r
Radius in Polarkoordinaten, auch Bindungsabstand
r, s
Laufindex über Elektronen-Konfigurationen
r^v
Bindungsabstand
S
JacoM-Transformations-Matrix XV
s, p, d, f , g, h
Atomorbitale
5
Überlappungsintegral
t
Zeit
W
VSIOP,
x, y , z
kartesische
Valenzzustandsionisationspotential
Xr
Elektronen-Konfiguration,
Y, (9,k
Winkelfunktion des H - A t o m s
a
Kernladungszahl
Feinstrukturkonstante
a,
3
Spineigenfunktionen
a,
3, r
Rotationswinkel
a^
Coulomb-Parameter Resonanz-Parameter
(Ii' 7^
Ein-Zentrum-Elektronen-Wechselwirkungsparameter
7,,,,
Zwei-Zentren-Elektronen-Wechselwirkungsparameter
A
Lap/ace-Operator,
*AE 3
entspricht
AE
6
Differenz
Singulett-Anregungsenergie
m
Triplett-Anregungsenergie
n
^
5
auch
Äro/iec/rer-Symbol & r
ß
H e t e r o a t o m - K o r r e k t u r - P a r a m e t e r im P P P - S C F - C I - M o d e l l
£
Molekülorbital-Energie
96 and a m,
m.n e N
f
Wellenzahl
R
experimentelle
m
sog.
Leitzahl
der
Spektral linienserie
n
sog.
Laufzahl
der
Serie
i
,
[1.7!
r e z i p r o k der W e l l e n l ä n g e X
Rydberg-Konstante,
R =
10967758,1 m
1
Die verschiedenen Spektrallinienserien wurden nach ihren Entdeckern benannt. Ser i enname
Leitzahl
Lyman Balmer Ri tz-Paschen Bra cket t Pfund
1
2
3 4 6
Laufzahl 2,3,4,. 3,4.6,. 4,6,6.. 6,6.7,. 6,7,8,.
Das BoAr-Atommodell liefert eine v o l l s t ä n d i g e Erklärung der obigen Gleichung einschließlich des numerischen Wertes der Äydfce/g-Konstanten, sowohl f ü r d a s Wasserstoffatom a l s auch f ü r alle anderen Atomionen, die bis a u f d a s l e t z t e Elektron ionisiert wurden. Die Spektrallinien in einem Emissionsspektrum werden durch die Planck-Elnsteln-Gleichung
Bohr-Relation)
(auch
a l s Differenz zweier Q u a n t e n z u s t ä n d e beschrieben:
19
Einstein-
[1.8]
h c„ E
E
=
h v =
= h cov
En
Energie
des Ausgangszustandes
En
Energie
des Endzustandes
v
Frequenz
h
P^anc/r-Konstante
cQ
Vakuum-Lichtgeschwindigkeit
Nach dem Atommodell von N. Bohr ist die Energie eines Quantenzustandes eines Ein-Elektronen-Atoms abhängig von der Kernladung, der Masse und Ladung des Elektrons, sowie der Kernmasse. Dies führt unter Berücksichtigung der Energie-Gleichung für E
n
aus dem 2. Programm-Beispiel zu der folgenden
Gleichung für die Wellenzahl: [1.91 1 ROD Z
Rœ =
—
—
m
m«
1 a
n
2
10973731,634( 1 3 ) ± 0,12 m
- l
mit
n > m; m.n
E
IN
Rydberg- K o n s t a n t e
Die empirische Äydöerg-Konstante R läßt sich mit dem Zahlenwert für das Wasserstoffatom vergleichen. Dieser errechnet sich nach: [1.10] M RH = ROD Z
M +
M Masse des Z Kernladung Der Wert R = 10967768,1 m m
1
-1
(Z
Z
M
1) m
W a s s e r s t o f f a t o m s in u des
Wasserstoffatoms
ist mit dem Rechenergebnis RH = 10967758.69375
des nachstehend angegebenen Programmes zu vergleichen. Dieses Programm
berechnet nach Eingabe der Masse und der Kernladung alle Spektrallinien für verschiedene Spektralserien. Dazu müssen eingegeben werden: - die Nummer des höchsten Start-Energie-Niveaus, entsprechend der höchsten Leitzahl und - die Nummer des höchsten Ziel-Energie-Niveaus, entsprechend der höchsten Laufzahl der Serie. - Zusätzlich können die Ergebnisse als Frequenzen, in Wellenlängen, als Wellenzahlen oder als Energien in eV, dargestellt werden. 20
Programmtechnisch neu gegenüber den vorangehenden Beispielen werden hier eingeführt die Syntax-Elemente: - print using - def fn - swap - screen (...) - chr$ (...), sowie drei Laufanweisungen zum Tabellen-Ausdruck Programm 10: screen 0:'Text-Bildschirm 25 Zeilen x 80 Kolonnen 12 eis:'Bildschirm löschen 16 def fnf(x)=l/(x'x):'Funktionsdeflnition mit DEF FNname(variablen) 20 titel$(0)=" Quantenchemie mit Personal Computern " 21 tltel$(l)=" Programm: Wasserstoff-Emissionsspektrum " 30 tltel$(2)=" Filename: BALMER.BAS" 31 tltel$(3)=" Kapitel 1: Fundamentale Quantenchemie " 40 tltel$(4)=" (c) Walter de Gruyter & Co. (1990)" 41 titel$(6)=" Autor: F. Marschner Version 1.0 " 42 for 1=0 to 6: print t i t e l l ü ) : next 1 100 rem Konstanten 110 r = 109737.3229084519#: 'Rydberg-Konstante in 1/cm aus Programm 2 120 'Ruhemasse des Elektrons In u (bzgl. C-12) 122 me=5.485798968159526E-004#:' aus Programm 2 125 rem Eingabe 128 t$="Elngabe: Isotopenmasse in u, Kernladung" 130: print t$: Input m,z:'m Isotopenmasse in u, z Kernladung 140 if m*z>0 then 150 eise 130 160: mn=m-z , me:'Kern-Masse 160 c=r'z*z'(mn/(mn+me)):'Konstante in obigen Gleichungen 162 t$="Elngabe: Nummer des höchsten Start-Energieniveaus n=" 163 print t$;: input ns:' Eingabe von n 166 t$="Eingabe: Nummer des höchsten Ziel-Energieniveaus m=" 166 print t);: input nz:' Eingabe von m 168 if nz>ns then swap nz,ns:'nz mit ns vertauschen, da Emission n —• m 171 t$="Darstellungs-Auswahl:": print t$ 173 t$=" (F)requenzen, (W)ellenlfingen, (E)nerglen, Wellen(Z)ahlen" 174 print t$;: input b$: b$=ucase$(b$) 185 if b$="F" then c$="(Frequenzen in 1E14 Hz) ":goto 190 186 if b$="W" then c$="(Wellenlängen in nm) ":goto 190 187 if b$="E" then c$="(Energie In eV) ":goto 190 188 c$="(Wellenzahlen in 1/cm) " 190: gosub 1100:'zwel Zellen einfügen 200 eis 202 t$«"Spektrallinlen "+c$+"nach dem Bohr-Atommodell" 210 print t$: print 221 t$=" Isotopenmasse = # # # . # # # # # # Kernladung = # # # " 222 print using t$;m,z 223 t$=" Startnummer n = # # # Zielnummer m = # # # " 224 print using t$;ns,nz 226 t$=" R-Konstante = ":tt$=" in 1/cm" 226 print t$;c;tt$: print 228 rem Berechnung der Linien und Ausdruck in Tabellenform bis 410 229 nk=4:'Anzahl der Zahlen-Kolonnen in einer Zeile der Tabelle 230 mm=0:'Zähler der zu berechnenden Linien 231 nkk=nk-^'größtmögliches m 332 kl = l:'untere Grenze der Laufvariablen k 234 k2=nz:'obere Grenze von k: Start-Niveau
21
235 rem 1. Schleife mit Laufvariable k über Obergänge n—• m 240 for k=kl to k2:'Schleifenbeginn 250 12=nk'k:'obere Grenze der Laufvarlablen 1 260 if 12= i then 380:'Bedingung mj> n 345 rem Berechnung der Wellenzahl (nu = v ) mit der in Zeile 15 definierten Funktion 350 nu = c'(fnf(l)-fnf(l)):'(l=m;l=n) 352 if b$="W" then nu=lE7/nu:'Wellenzahl 363 if b$="F" then nu=nu'2.998*lE-4:'Frequenz 354 if b$="E" then nu=nu'1.24 , lE-4:'Energie in eV 368 t$="#######.###":'Formatangabe für Zahlenanzeige, '6 Vorkomma-, 3 Nachkomma-Stellen 360 print using t$;nu;: 361 print space$(nkk);:'Zwischenraum in gleicher Zelle 362 mm=mm+l¡'Anzahl der aktuell berechneten Linien 370 next l:'Schleifenende über 1 380 print:'neue Zeile 390 next ir'Schleifenende über 1 400 gosub 1100 410 next k: 'Schleifenende über k 411 t$="Anzahl der Uebergänge = " 420 print t$;mm; 425 t$="Neue Berechnung (J/n) ?" 430 locate 25,l:print t$;: gosub 1300: a$=ucase$(amx then mx=y: 'Maximum 198 if y96 and a
12.3)
* Atom-Orbital R Radlal-Funktion Y Winkel-Funktion n Hauptquantenzahl, n e IN 1 Drehimpulsquantenzahl, 0 s 1 s
n-1
m Magnetquantenzahl, - 1 s m s 1 In den beiden folgenden Programmbeispielen soll die graphische Darstellung des Radialteils und des Winkelteils beschrieben werden. Diese Funktionen lassen sich nur f ü r das Wasserstoffatom oder
Einelektronen-
atomionen in analytischer Form darstellen. 12.4)
R
„x
k =
a0n
( n
(2k)
=
"
1
"
1 ) l
e
,
Z
Kernladung;
,31*1, , L (p)
a„ o
Bohr-Radius d21+1
Laguerre-Polynom =
, (p)
2n((n+1)!]
assoziiertes
P(r)
-kr
:
L
2 1 * n+1
^)
=
Ln (p)
=
1
t t t t . 21t l dr
L
n
(p)
2kr d"
Laguerre-Polynom
:
, n dr
p" e
Als exakte Lösungen der Sc/jrddi/igei—Gleichung sind die auf Laguerre-Polynome,
die Winkel-Funktionen auf
^
Radlal-Funktionen
Legendre-Polynome
zurückzuführen. In dieser Form lassen sich schließlich alle wasserstoffähnlichen Atomorbitale in Abhängigkeit von den drei Quantenzahlen
32
entwickeln.
Die charakteristischen Eigenschaften dieser Laguerre- Polynome sind ihre Orthogonalität und Normierbarkeit. Die nachstehend tabellierten Radial-Funktionen wasserstoffähnlicher Orbitale, werden nach der voranstehenden Gleichung [2.4] bestimmt und gemäß Gleichung [2.5] normiert. Diese Integration entspricht der Bestimmung der Wahrscheinlichkeitsdichte einer elektrischen Ladung, wie sie das Elektron darstellt. Die Wahrscheinlichkeit das Elektron in einem definierten Raum anzutreffen, ist natürlich Eins. Die Integrandenfunktion in [2.5] stellt somit die radiale Dichteverteilung des Elektrons in einem Orbital dar: 00
o
[
R 2 , (r) r 2 dr = 1
[2.5]
nl
Auf den nächsten Seiten sind bis zur P-Schale (n=6) die Radial-Funktionen der wasserstoffähnlichen Atomorbitale angegeben. Diese Orbitale werden nach ihrer Drehimpulsquantenzahl mit spektroskopischen Symbolen bezeichnet: s (engl, sharp) scharfe Nebenserie, p (engl, principal) Haupt- oder Prinzipal-Serie, d (engl, diffuse) diffuse Nebenserie, f (engl, fundamental) Fundamental-Serie u.s.w. Das Programm 5 zeichnet Radialfunktionen und/oder radiale Dichtefunktionen. Der Benutzer wählt zuerst eine dieser beiden Optionen, danach wird die Bildschirmkonstante für den Graphikmodus (SCREEN 1 [CGA], 7 [EGA] mit 320 x 200; 2 [CGA], 8 [EGA] mit 640 x 200 Pixel) gewählt und angezeigt. Die Eingabe der Hauptquantenzahl und der Drehimpulsquantenzahl ermöglicht die Bestimmung der Orbitalbezeichnung und damit der Auswahl der gewünschten Funktion. Für diese wird anschließend die e f f e k t i v e Kernladung eingegeben. Zur graphischen Darstellung ist die Angabe der Intervallgrenzen (z.B. von 0 - 12 bis 100 in Einheiten von 10
m = 1 pm) erforderlich. Die Ergebnisse der
Berechnung der Extremwerte in diesem Intervall werden angezeigt, der Benutzer gibt die Grenzen des Wertebereichs ein. Der Funktionsgraph wird in einem Fenster (oder Kasten) gezeichnet. Dieses Fenster ist mit den berechneten Zahlenwerten beschriftet, sodaß eine Kontrolle der Ergebnisse möglich ist. Darüberhinaus können die Paare Koordinate-Funktionswert als Option auch zahlenmäßig angezeigt und für eine eventuelle spätere Weiterverarbeitung in einem Datenfile gespeichert (engl, save) werden. Für diese Operation ist zunächst die Übernahme des Bildschirminhaltes in den Speicher erforderlich. Dann können die numerischen Daten angezeigt werden. Anschließend erfolgt die Anzeige des ursprünglichen Bildschirmes. 33
Quanten-
Bezeichnung
wasserstoffähnliche Radial-Funktionen
[2.6]
zahlen n
1
K-Schale 1
0
ls
R10(r)=
2 *
e
-kr
L-Schale 2
0
2s
R2, 0„ ( r ) =
(2 -
2
1
2p
R2-1. ( r ) =
2kr e
2kr)
e
kr
-kr
M-Schale 3
0
3s
R,„ ( r ) = -
3
1
3p
R-.(r)=
3
2
3d
R
31
3 2
9^3"" * 9/6^
[6 -
12kr +
(4 -
2kr)
( r ) = — — ( 2 k r ) 2 e~ k 9^30"
(2kr)2]
e~kr
-kr 2kr e
r
N-Schale 4
0
4s
R
(r )=
[24 -
4
1
4p
[20 - 20kr R.. ( r )=32 f T S
96
72kr
+ 48(kr)2 + (2kr)2)
*
4
2
4d
R.,(r)= *2
4
3
4f
R43(r)=
9 6 ^
[6 -
2kr ]
— ( 2 k r ) 3 e~ k 96/35"
( 2kr)2e~kr
r
Abkürzungen:
i-k)
und
34
k =
a
on
-
(2kr)3] (2kr)
e~kr
e~kr
Quantenzahlen n
Bezeichnung
wasserstoffähnliche
Radia1-FunktIonen
(2.7)
1
O-Schale 6
6
5
5
5
0
1
2
3
4
6s
5p
5d
5f
RRO(r)= 5 0
R_.(r)= 6 1
RB1(r)= 5 2
RB3(r)=
5g
R_.(r)=
6s
R.0(D=
1120 300/T"
-
480kr
+
120(2kr)
. . . 20 ( 2 k r ) 3
+
(2kr)4 1 e~kr
+
18(2kr)
[120 ISO/SS
-
180kr
. . . (2kr)3 ] [42
-
28kr
( 2kr)
-
...
e~kr
(2kr)J ) (2kr)3
+
e"kr
150/TS
300/70"
[8 -
(2kr)3
( 2 k r ))
(2kr)4
e~kr
e"kr
900/70"
P-Schale 6
0
6 0
[720 2160/6""
-
3600kr
. . .300(2kr)3 . . . (2kr)
6
1
6p
R..(r)=
6
2
6d
R, 2 ( r ) =
6
3
6f
R.,(r)=
6
4
6g
R..(r)=
6
5
6h
R,Bmx then mx=y:'Maximum 198 if y lob then oben$=left$(oben$,lob) 3410 locate yf/8,xf/8+2:print oben$:' Überschrift 3415 rem unterer Rand (x-Achsenwerte) 3420 s x = ( a 2 - a l ) / z n x : 3422 z=0: 3425 for i = a l to a2+sx/2 step sx: 3426 z=z+l 3430 ?.$=str$(i):' 3431 if len(z$)>4 then :sf=instr(z$,"."):if sf=0 then s f = l eise sf=0 3432 z$(z)=left$(z$,5) 3435 next i 3440 sx=breit/znx:lz=z: 3442 z=0: 3445 for i = x f to ( x f + b r e i t ) step s x : z = z + l 3450 zeile=(YF+hoch)/8+2: 3452 spalte=int(i/8)-sf: 3455 if z=lz and ccc=l and znx>2 then zl=len(z$(z)):spalte=41-zl: 3465 if z=lz and ccc=2 and znx>2 then zl=len(z$(z)):spalte=81-zl: 3470 locate zeile,spalte:print z$(z); 3480 next i 3485 rem linker Rand (y-Achsenwerte) 3490 sy=(b2-bl)/zny:z=0: 3495 for i = b l to b2+sy/2 step s y : z = z + l 3500 z$=str$(i):z$(z)=left$(z$,5): 3505 if len(z$))
(?)
= — = = = I 1 4 2 w
(
0 then y=(l/sqr(pl))*cos(m'x):return 928 y=(l/sqr(pl))'sln(abs(m'x)):return Subroutinen In den Zeilen 1000 - 4660 aus Programm 5
64
:
(T)heta-Funktion
eines sr) für konstantes fr bzw. z dargestellt. Die Transformation der Polarkoordinaten in kartesische Koordinaten erfolgt nach den Gleichungen [2.16]; die Entwicklung der benötigten Cosinus- und Sinus-Funktionen für den Winkel-Anteil aus der Afoivre-Formel für komplexe Zahlen sind mit angegeben.
56
perspektivische Flächendarstellung
(2.161
D f(x,y) B(b x ;b y )
C(cx;cy)
IE E b e n e a u s
den
mt
a - b = — — - &y— b aX X
m2
=
a
m
-
C
aX
-
c XX
b x b X
_- a X
y
drei
Punkten A ( a
y
5
m = y
;a
),B(b
y
x
;b
Steigung
in
x-Richtung
Steigung
in
y-Richtung
y
),C(c
x
;c ) y
Mittelpunkt-x-Koordinate
2
_ c X
aX
x
5 ~
Mi t t e l p u n k t - y - O r d i n a t e
a e
[ax;cxl
Laufvariable
in y - R i c h t u n g
mit
Schrittweite
s2
k e
[a;a+nl
Laufvariabie
in x - R i c h t u n g m i t
Schrittweite
st
n =
bX - X a
Anzahl der
physikalische y'=
ay
y = r~1
1
Koordinaten
- m2(ax
virtuelle
y
,2 r ,
und
P ( x' ;y')
der
x-Richtung
Punktes
x'=
dieses
Reduz 1 e r f a k t o ren
in
eines
und
2
Berücksichtigung f
- a)
Koordinaten
ax - a - m 1
Punkte
y'
P(x';y')
- m i (k
-
Punktes x =
k - a
-m x 1
Intervalle
der F u n k t i o n s a b h ä n g i g k e 1 t
=> P ( k ; z)
:
z = x'
e IE :
a)
+ f-
Amplitudenfaktor
57
f(x,y)
I - m x ;+m x ] und [ - my ;+my ) von P :
Koordinatentransformation
Moivre: s i n n f> = cos
n
[P(cos n-1
n cos
Zelle locate z/8+l,y/8:print p$(i) line (yi,zi)-(y(l),z(l)) next i restore:'Rücksetzen des DATA-Zeigers return
13000: rem Subroutine: Zeichnen von Punkten (Breitenkreise) 13010 for i = il to 12 step si 13020 x=i:'Theta 13030 on wähl gosub 710,720,730,740,750,760,770,780,790,800,_ 810,820,830,840,860,860,870,880,890,900,910 13040 f=y 13050 locate 1,1: 13060 zelt=timer-anfang 13070 format$="t=###.# w x = # # # . # # w y = # # # . # # w z = # # # . # # r = # # # . # # &" 13080 print using format$;zelt,wx,wy,wz,r,ff$ 13090 for g=gl to g2 step sg 13100 x=g:'Phi 13110 gosub 920: 13120 h=y 13130 z = r'cosdj'f'sgnffj'sgnihj'h 13140 x = r'sindJ'cosigJ'f'sgnifJ'sgndO'h 13160 y = r'sinWsinigJ'fsgnifJ'sgndO'h 13160 xi = m(l,l)'x+m(2,l)*y+m(3 1 l) , z 13170 yi = m(l,2)*x+m(2,2)'y+m(3,2)*z 13180 zi = m(l,3)*x+m(2,3)'y+m(3,3)*z 13210 zi=kz*zi:'Streckung in z 13220 pset (yi.zi) 13300: a$=inkey$:if a$=chr$(27) then 13400 13310 next g 13320 next i:goto 13420 13400: dialog$=',(W)elter zeichnen (Taste) [Esc)":gosub 1000 13410 if a$="WH then 13300 13420: return 14000: rem Subroutine: Zeichnen der Längenkreislinlen 14010 for g=gl to g2 step sg 14020 x=g:'Phi 14030 gosub 920 14040 h=y 14060 for i = il to 12 step si 14060 locate 1,1: 14070 zelt=timer-anfang 70
14080 14090 14100
print using format$;zelt,wx,wy,wz,r,ff$ x=i:'Theta on wahl gosub 710,720,730,740,760,760,770,780.790,800, 810,820,830,840,860,860,870,880,890,900,910 14110 f=y 14120 z = r'co8(l)*f*Bgn(f)'8gn(h)*h 14130 x = r'siniD'cosigi'f'sgnWsgndO'h 14140 y = r'sin(l) , sin(g)*f'sgn(f) , sgn(h)"h 14160 xi = m ( l , l ) ' x + m ( 2 , l ) * y + m ( 3 , l ) ' z 14160 yl = m(l,2)*x+m(2,2)'y+m(3,2)*z 14170 zl = m(l,3) , x+m(2,3)'y+m(3,3)'z 14200 zl=kz*zi 14210 If xi5 or l = n then 88 92 gosub 670:' H-Orbitalbezeichnung bestimmen (f$ holen) 94 o b e n l $ = o b e n l $ + " ( " + f $ + " ) " 96 oben$=oben$+" eines ( " + f $ + " ) - O r b i t a l s " 98 print oben$ 100 dim b i l d ( 4 0 0 0 ) , x ( 1 0 0 ) , y ( 100):'Bild-, Koordinaten-Speicher 102 s = 100:'Punktdichte, Vorgabe 104 if wahl2$="S" then 120 110 rem Eingabe Kernladung, S l a t e r - O r b i t a l e x p o n e n t , Punktdichte 112 print:print"Eingabe der Kernladung":print 114 input " Z= ",z 116 oben$=oben$+" Z = " + s t r $ ( z ) : 118 o b e n l $ = o b e n l $ + " Z = " + s t r $ ( z ) : 119 goto 125 120 print:print"Eingabe des S l a t e r - O r b i t a l e x p o n e n t e n " : p r i n t 122 input " z e t a = ",ze 123 oben$=oben$+" z = " + s t r $ ( z e ) 124 o b e n l $ = o b e n l $ + " z = " + s t r $ ( z e ) 125 dialog$="Punktdichte ändern (J/N)":gosub 1000 126 if a $ = " N " then 130 127 locate 18,l:print "Punktdichte: ";s,"Eingabe: ";
84
128 input ,s 130 els 132 oben$=oben$+" s="+str$(s) 134 oben1$=oben1$+" s="+str$(s) 135 rem Eingabe x-Intervall 136 prlnt"Eingabe der Intervallgrenzen":print 140 lnpufklelnster x-Wert: x l = ",xl 142 input"größter x-Wert: x2= ",x2 144 If x2)
[3.6]
1m Gegenüber den STO's zeigen die Gau/3-Orbltale (GTO), (engl.
Gauß-type
orbital) nicht d a s korrekte asymptotische Verhalten f ü r große Abstände. Dieser Nachteil wird durch die Linearkombination einer genügend großen Anzahl von GTO's kompensiert. Außerdem sind die Integrale mit Gauß- Funktionen mathematisch einfacher zu lösen. In den a b - i n l t i o - B e r e c h n u n g e n werden mit Gau/J-Funktionen genauere R e s u l t a t e erzielt a l s e s mit Slater-Orbitalen
möglich wäre. Dabei i s t e s
üblich von einer sog. Approximation der S i a t e r - O r b i t a l e zu sprechen. Zum Beispiel bezeichnet STO-3G, daß ein STO von drei GTO's durch Mlnlmlslerung der Gesamtenergie approximiert wird. In den semiempirischen Methoden, die überwiegend mit minimalen Baslssfitzen arbeiten, finden nur die STO's Verwendung.
91
4 LJNEARKOMBINATION VON ORBITALEN
In diesem Kapitel werden behandelt: - das Aufbauprinzip des Periodensystems der Elemente, - der Valenzzustand von Atomen in Molekülen, - die Hybridisierung als ein Modell lokalisierter Orbitale am Beispiel des Kohlenstoffs, - die Konstruktion von Hybrid- und MolekOlorbitalen und ihre graphische Darstellung in Form von Höhenliniendlagrammen. Die Eigenfunktionen von Mehrelektronen-Atomen lassen sich auf der Basis der Wasserstoff-Atom-Orbitale modellhaft beschreiben. Gemäß der Sc/irödiiiger-Gleichung ist jeder Eigenfunktion eine Energie zugeordnet, die im Fall einer einzelnen Ein-Elektronen-Wellenfunktion (Atomorbital) als Orbitalenergie bezeichnet wird. Diese Energien können näherungsweise mit experimentellen Ionisationsenergien verglichen werden, wie Im ProgrammBeispiel 9 für das Wasserstoffatom und ihm ähnliche Atomionen gezeigt wurde (s. auch Koopmans-Theorem
Im Kapitel 8). Wie die Berechnungen
von D. Hartree und V. Fock und die Analyse der Ionisationsenergien der experimentellen Atom-Spektren ergeben sind die Orbitalenerglen Funktionen der Kernladungszahl, der Hauptquantenzahl n und der Bahndrehlmpulsquantenzahl 1. Wäre die Kernabschirmung der Inneren Elektronen vollständig, so müßten die Orbitalenergien mit denen des Wasserstoffatoms übereinstimmen. Bei Abwesenheit von Elektronenwechselwirkungen wären die Orbitale gleicher Hauptquantenzahl zudem entartet, d.h. energetisch äquivalent. Tatsächlich t r i t t aber der sog. Durchdringungseffekt auf, mit dem diese unvollständige Abschirmung der Valenzelektronen vom Kern beschrieben wird. Dieser Effekt und die Elektronenwechselwirkung bewirken, daß - die Entartung der Orbitale gleicher Hauptquantenzahl aber verschiedener Bahndrehlmpulsquantenzahl aufgehoben wird und - die Orbitalenergien mit zunehmender Bahndrehlmpulsquantenzahl unterschiedlich stark angehoben werden. Charakterisiert man eine Periode im Periodensystem der Elemente durch die beiden Quantenzahlen n und 1, so ergibt sich folgende energetische Reihenfolge für die Atomorbitale: [4.11 l s < 2s < 3s < 3p < 4s < 3d < 4p < 5s < 4d < 6p ... ...< 6s < 4f < 5d < 6p < 7s < 6d.
92
Diese Reihenfolge ist Grundlage des Aufbauprinzips des Periodensystems der Elemente. Das Auftreten neuer Orbitale läßt sich dabei empirisch durch Gleichung [4.2| ermitteln: Z =
0,17 (21 + l ) 3 + 0 , 5
[4.2]
Z Ordnungszahl, 1 Bahndrehimpulsquantenzahl
Danach beginnen die p-Orbitale beim Bor (1 = 1, Z = 5), die d-Orbitale beim Scandium (1 = 2, Z = 21), die f-Orbitale beim Cer (1 = 3. Z = 58), die g-Orbitale sollten bei dem hypothetischen Element mit Z = 124 beginnen (HF-Rechnungen bis Z = 172 ergeben Z = 125). Die Besetzung der Atomorbitale mit Elektronen erfolgt nach dem
Pauli-Prinzip
(1) und der Hundschen -Regel (2):
(1) In einem Mehrelektronensystem mit abgeschlossener Schale wird jedes Orbital durch zwei Elektronen mit verschiedener Spin-Funktion besetzt. Anders ausgedrückt: in einem durch die Kombination der drei Quantenzahlen n, 1, m definierten Orbital können maximal zwei Elektronen mit antiparallelem Spin enthalten sein. (2) Orbitale identischer Quantenzahlen n und 1 werden so besetzt, daß der Gesamtspin maximal ist. Anders ausgedrückt: entartete Orbitale werden zunächst mit Elektronen gleichen Spins einfach besetzt. Danach wird mit Elektronen antiparallelen Spins sukzessive aufgefüllt. Diese Regel wird auch als die Regel maximaler Multiplizität bezeichnet. Es gilt: M = 2S + 1 M S
[4.31
Multiplizität Gesamtspin
S = £ 2p + . Dieser P-Zustand ist energetisch dreifach entartet, - die Termbezeichnung der Zustände mit Großbuchstaben folgt der Orbitalnotation mit kleinen Buchstaben. In diesem Zustand wäre der Kohlenstoff zwei-bindig, was den experimentellen Molekülstrukturen beispielsweise in Alkanen, Alkenen und Alkinen widerspricht. Eine Klärung dieses Widerspruchs ist im Rahmen des Modells der lokalisierten Orbitale mit dem von F. Hund (1932) eingeführten Konzept der Hybridisierung sinnvoll. Die Tetraeder-Struktur des Methans i^nd damit die Vier-Bindigkeit des Kohlenstoffs wird durch vier gleichwertige C-H-Bindungen beschrieben. Innerhalb der Alkane ist die Energie dieser Bindung in guter Näherung additiv, sodaß sich die Bildungsenthalpien der Verbindungen dieser Stoffklasse aus Bindungsinkrementen berechnen lassen. Ebenso sind die C-H-Valenzschwingungen in den IR-Spektren dieser Verbindungen nahezu lagekonstant. Diese experimentellen Befunde legen den Schluß nahe, daß sich die Verteilung der Bindungselektronen der Atome in einem Molekül durch das Modell eines Valenzzustandes des isolierten Atoms mathematisch beschreiben läßt. In diesem Modell wird eine Lokalisierung von zwei Valenzelektronen innerhalb der Bindungsachse der beiden Atome vorausgesetzt. Damit entspricht dieses Modell der chemischen Zeichensprache von Valenzstrichen, die ein Elektronenpaar symbolisieren. Durch geeignete symmetrieadaptierte Linearkombinationen von Orbitalen des betreffenden isolierten Atoms können sog. Hybridorbitale konstruiert werden, die in den Bindungen lokalisiert sind und damit die räumliche 94
Orientierung der Atome in einem Molekül abbilden. Nach diesem Konzept läßt sich dann sogar Jede Elektronenpaarbindung eines Moleküls als ein isoliertes, vom Rest des Moleküls näherungsweise unabhängiges biatomares Zwel-Elektronensystem beschreiben. Die Rechenvorschrift der Linearkombination von Atomorbitalen ist in Gleichung [4.5] angegeben: Linearkombination (1) H y b r i d o r b i t a l e
von A t o m o r b i t a l e n
[4.6]
(HO)
Die A t o m o r b i t a l e
(AO) s i n d
an e i n e m Atom
zentriert.
n h
i
=
E ß-1
a
X f f *
i = 1. . . j . . .n ß = l...v...n n Anzahl a
der
Laufzahl
über
die
HO's
Laufzahl
über
die
AO's
h4 X
AO's
Hybridorbitalkoeffizienten
Orthonormierungsbedingung: n
=
E ß=i
n
*l(J
^
=
Z «... (i=i ''fit
«"M ...
n
Ladungsdichte: (2) M o l e k ü l o r b i t a l e Die A t o m o r b i t a l e berücksichtigt.
Q
=" 8i j
n
= J] h j i=i
=
£ fi=I
a*
x2
n
=
£ X2 ß=i
(MO) (AO) a l l e r
Atome
i n e i n e m Molekül werden
n
«
Ei
c
m f xnf
1 = l...n
Laufzahl
über
d i e MO' s
v>1
ß = l...n Laufzahl über die AO's x n Anzahl der b e r ü c k s i c h t i g t e n AO's c Mo 1 e k ü l o r b i t a 1 k o e f f i z i e n t e n Entsprechend dieser Vorschrift werden zwei Programmbeispiele gegeben, die als Basisorbitale die Wasserstoff-AO's oder Slater-AO's
verwenden. In
einem zusätzlichen Programm wird die Konstruktion von MO's und die Besonderheit der chemischen Bindung erläutert.
96
4.1 Programm-Beispiel 11: Hybridorbitale Im Beispiel des Kohlenstoffs läßt sich der vierbindige Valenzzustand durch eine Spinentkopplung des 2s-Elektronenpaares und Anregung (Promotion) eines der beiden Elektronen erreichen. Dies ist in nachstehender Abbildung gezeigt: (4.6] P-G r u n d z u s t and 2p
-1-
ls
2p
-I
m=-1 2s
S-Zustand
m=0
2s
H
2
Die r e e l l e n
2s
2
- I m= 1
m=0
ls
1 1 0 2p_12p0 2p+1
Funktionen werden IM~~2
-1-im=0
d e r komplexen F u n k t i o n e n 2p x =
- 1 m=0
- i -
m=0
- mH= 0 ls
- I mi = - l
m= 1
(2p_t
.2 ls durch g e e i g n e t e
„ 1 „ 1 „ 1 „ 1 2 S 2 p _ l 2 p 0 2p+1 Linearkombinationen
gebildet: + 2pt)
2p y = 1/i-f
2
(2p_
4
- 2Pl )
Es läßt sich zeigen, daß die Besetzung der 2s-, 2p - , 2p - und x y 2p z ~Atomorbitale mit je einem Elektron zu einer kugelsymmetrischen, winkelunabhängigen Ladungsverteilung führt. Diese kugelsymmetrische Verteilung ist im Rahmen des Hybridisierungsmodells aber auch durch beliebig viele Sätze von Linearkombinationen von Atomorbitalen gemäß [4.61 zu erreichen, da die Hybridlsierungs- oder Mischungs-Koeffizienten unter Berücksichtigung der Orthonormierungsbedingung frei wählbar sind. Als Hybridorbitale werden dann die Orbitale bezeichnet, die in den Bindungen lokalisiert sind; sie sind gerichtet, vom Bindungswinkel abhängig und reflektieren somit die geometrische Struktur eines Moleküls. Im
5
S-Zustand des Kohlenstoffs stehen zwar vier Elektronen zur
Blndungsbildung zur Verfügung, jedoch folgt daraus noch nicht die Äquivalenz der vier C-H-Bindungen im Methan. Dies wird erst durch die Bildung von vier Hybridorbitalen nach Gleichung |4.5) erreicht. Als geeignete Kombinationen
96
werden aus der Vielzahl der Möglichkeiten diejenigen ausgewählt, die der räumlichen Anordnung der Atome im Molekül am besten entsprechen. Modell
der
a
Bindungswinkel zwischen zwei H y b r i d o r b i t a l e n
c Hybrid
sp sp
Koeffizienten
3
a
m
109°
28'
m
120°
l / f z
180°
2p
1/2
i r
2
sp
Winkel
2s
l/i2 n
1/^n+l • 0 a a 90° SP
i r reduz ib1e D a r s t e 1 lung
ß=
i a
i
1
arc
Symmetr i egruppe T
°ooh
cos(-l/n)
Ko e f f i z i e n t e n 1 2 2s 2px
2p
1/2
1/2
1/2
a
i 3
1/2
V 2
y
1/2
1/2
-1/2
-1/2
-1/2
-1/2
1/2
S
4
1/2
-1/2
1/2
-1/2
a
i
1
1/-T3
r m
e'
2
1/-T3
e'
3 4
1//3 0
1
l/i2
2
n Ii
a
9
u
0
0
-1/41
1/-T2
0
- 1 / f e
-l/f2
0
0
t e t r a e d r i sch trigonal digonal
4 Pz
1/2
0
Struktur
—
2
a
d
°3h
3
s
[4.7]
Hybridisierung
1
" - S y m m e t r i e -1- x , y
1 / 4~2
0
0
\iFz
- l / f 2
0
0
3
0
0
0
1
" - S y m m e t r i e -1- x , y
4
0
0
1
0
" - S y m m e t r i e -1- z , x
Die Ergebnisse sind voranstehend tabelllert. Danach ist es z.B. möglich
97
aus experimentellen Bindungswinkeln g e e i g n e t e Hybridorbitale zu konstruieren. Im Ammoniak (NH g , Punktgruppe C 3 y ) betragen die Winkel zwischen den H-Atomen 106°47'. Das N - A t o m e liegt in der Spitze einer Pyramide über der Ebene der H - A t o m e . Es errechnet sich damit ein Hybridisierungsgrad zu n = 3,46. Das Modell der Hybridisierung läßt sich auf Moleküle mit einem Zentralatom und unterschiedlicher Anzahl und Anordnung von Liganden anwenden. Nachstehende T a b e l l e z e i g t in einer Auswahl bis zur Koordinationszahl 6 f ü r verschiedene Symmetrien die Bildung von Hybridorbitalen aus s - , p -
und/oder
d - A t o m o r b i t a l e n . Die Auswahl wurde so g e t r o f f e n , daß sich Hybridorbitale dieser Mischungen mit dem angegebenen Programm darstellen lassen. [4.8] Koordinations-
Molekülstruktur
Hybride
linear
sp, pd
zahl
angular
A p , sd, dA 2 2 j J2 2
trigonal eben unsymmetrisch eben trigonale Pyramide
irreguläres
spd P , pdA 3
2
3 sp , sdJ
eben Tetraeder
Bipyramide tetragonale
sp , p d, sd ,
3
Tetraeder tetragonal
2
Pyramide
A sp d, p dA 2 3 3 spd , p d, pd 3 3 sp d, spd 2,2 3,2 sp d , p d , 2
pentagonal eben
p d
Oktaeder
sp dA 3 J3 P d
2
trigonales
Das Programm-Beispiel
3
Antiprisma
2
2
11 zeichnet Dichtedigramme von Hybridorbitalen in
der y , z - E b e n e mit der z - A c h s e als Vorzugsrichtung oder in einer durch den Benutzer gewählten Linearkombination. Als Beispiele sind die Hybridorbitale 2 3 2 des Kohlenstoffs, eine sp d - und eine sp d -Kombination der Hauptquantenzahl n = 3 oder 4 vorgegeben. Darüberhinaus kann der Benutzer sich Linearkombinationen
selbst zusammenstellen. A l s Basisorbitaie
geeignete
werden
W a s s e r s t o f f - A t o m o r b i t a l e mit Z=1 oder Siate/^-Orbitale mit wählbarer Hauptquantenzahl und Orbitalexponenten verwendet. Die Höhenlinien der Dichteverteilung werden in drei Abstufungen ( > 75%, 75% > 50%, 50% > 10% der maximalen Dichte) gezeichnet. Mit den Einstellungsmöglichkeiten
von
Schrittweite, größter Dichte, einem Dämpfungsfaktor, der I n t e r v a l l g r e n z e n für
98
den Radius der Dichtefunktion und f ü r die Winkel der Winkelfunktion kann die graphische Darstellung optimiert werden. Darüberhinaus ist eine Mehrfachdarstellung verschiedener Hybride möglich. Im Gegensatz zu den bisherigen Programmbeispielen wird hier die WINDOW-Technik benutzt. Dadurch ist ein Änderung der Subroutinen 1200 und 1240 erforderlich. Die Zeichnung erfolgt in Polarkoordinatendarstellung in einer Hauptschleife über den Radius und einer Unterschleife über den Polarwirikel in den Zeilen 300 - 501. Die Funktionen der Hybridorbitale sind in der Subroutine 6000 definiert. Programm 10 11 12 13 14 15 16 17 20 21 22 23
eis: titel$(0)=" Quantenchemie mit Personal Computern " titel$(l)=" Programm: Konturdiagramm von Hybrid-Orbitalen" titel$(2)=" Filename: HYBRIDE.BAS" titel$(3)=" Kapitel 4: Linearkombination von Orbitalen " titel$(4)=" (c) Walter de Gruyter & Co. (1990)" titel$(5)=" Autor: F. Marschner Version: 1.0" zz=0:for i=0 to 5:zz=zz+l:print titel$(i):next i dim bild(4000),zeile$(24):'Bild-Speicher pi=4"atn(l):'Jierechnung der Zahl Pi gosub 6000:'Funktionsdefinitionen gosub 6200:'Definition der Winkel-Schrittweiten für Höhenliniendarstellung 25: rem Sprungadresse f ü r (N)eu-Anfang, Titel, Bildschirm 32 zz=zz+l:locate zz,l: 34 input" Bildschirmkonstante >= (1) ",ccc 36 zz=zz+l: print "SCREEN ";ccc 40 gosub 7000:'Auswahl und Eingabe der Parameter 100 screen ccc:cls:ccs=2:if ccc=l or ccc=7 then ccs=l 102 rem Definition der Intervallgrenzen 104 ' ( a l ; b l ) definiert einen virtuellen Punkt links unten 106 '(a2;b2) definiert einen virtuellen Punkt; rechts oben 110 a l = - l : ' l i n k e Grenze im x - I n t e r v a l l 112 a 2 = + l : ' r e c h t e Grenze im x - I n t e r v a l l 114 bl = - l : ' u n t e r e Grenze im y - I n t e r v a l l 116 b2=l:'obere Grenze im y - I n t e r v a l l 118 rem virtueller Bildschirm 120 window ( a l , b l ) - ( a 2 , b 2 ) 122 rem Zeichnen der Achsen 124 farbe=2/ccs 126 llne ( a l , 0 ) - ( a 2 , 0 ) , f a r b e : ' x - bzw. z-Achse 128 line (0,bl)-(0,b2),farbe:'y-Achse 130 locate 2,20*ccs-l:print "y" 132 locate 14,40'ccs-1 :print "z"; 200 rem Berechnung der Dichte der Schranken, Sprungadresse 202 eps 1=.75*dd:'Schranke f ü r Dichte 75% 204 eps2=.5"dd:'Schranke f ü r Dichte 50% 206 eps3=.l *dd:'Schranke f ü r Dichte 10% 208 cc=l,6:'Abbildungsfaktor der Bildschirme 300 z=0:'Zähler, 302 anfang=timer 99
304 for r = r l to r2 step sr:'Hauptschleife über r 306 z=z+l 308 if wähl 50%) 6206 sw3=1/5:'Schrittweite des Winkels (50%> Dichte >10%) 6209 return 7000 rem Anzeige und Auswahl der Hybrid-Orbitale 7010 print" Wahl Hybrid-Orbital Typ" 7012 print" (1) 2sp3 tetraedrisch" 7014 print" (2) 2sp2 trigonal eben" 7016 print" (3) 2sp digonal (linear)" 7018 print" (4) a(2s),b(2pz),c(2py)" 7020 print" (5) a(3s),b(3pz),c(3py),d(3dz2-y2),e(3dz2) z.B. sp2d tetragonal" 7022 print" (6) 3dzy-AO " 7024 print" (7) a(4s),b(4pz),c(4py),d(3dz2-y2),e(3dz2) z.B. sp3d2 Oktaeder" 7026 print" (8) a(ns),b(npz),c(npy),d(ndz2-y2),e(ndz2), f(ndzy) aus Slater-AO's" 7030 input "Wahl: ".wähl 7032 dialog$="Bildschirm speichern (J/N)":gosub 1000:lf a $ = " J " _ then gosub 1290
101
7034 c l s : z z = 0 7036 on wähl goto 7200,7210,7220,7230,7240,7260,7270,7280 7100 rem Bestimmung der H y b r i d - K o e f f i z i e n t e n 7200 a = l / 2 : b = s q r ( 3 ) / 2 : c = 0 : d = 0 : f $ = " t e t r a e d r i s c h sp3":goto 7300 7210 a = l / s q r ( 3 ) : b = s q r ( 2 / 3 ) : c = 0 : d = 0 : f $ = " t r i g o n a l sp2":goto 7300 7220 a = l / s q r ( 2 ) : b = a : c = 0 : d = 0 : f $ = " d i g o n a l sp":goto 7300 7230 c l s : z z = 0 7232 print " H y b r i d - O r b i t a l - K o e f f i z i e n t e n - E i n g a b e f ü r Hybride des Typs a ( 2 s ) , b ( 2 p z ) , c ( 2 p y ) " 7234 input " a - K o e f f i z i e n t : ",a 7236 input " b - K o e f f i z i e n t : ",b 7238 input " c - K o e f f i z i e n t : ",c 7239 z z = z z + 5 : g o t o 7300 7240 c l s : z z = 0 7241 print " K o e f f i z i e n t e n für Hybride des Typs a(3s),b(3pz), c(3py),d(3dz2),e(3dzy) 7242 a = . 5 : b = l / s q r ( 2 ) : c = b : d = 0 : e = . 5 : g = 0 : f $ = " s p 2 d t e t r a g o n a l " 7243 print u s i n g " a = # . # # # b = # . # # # c = # . # # # d = # . # # # e = # . # # # " ; a,b,c,d,e 7244 z z = 2 : d i a l o g $ = " A e n d e r u n g (J/N)":gosub 1000 7245 if a $ = " N " then 7300 7246 locate z z , l 7247 input " a - K o e f f i z i e n t : ",a 7248 input " b - K o e f f i z i e n t : ",b 7249 input " c - K o e f f i z i e n t : ",c 7250 input " d - K o e f f i z i e n t : ",d 7252 input " e - K o e f f i z i e n t : ",e 7253 input " Bezeichnung: ",f$ 7254 z z = z z + 7 : g o t o 7300 7260 f $ = " 3 d z y - A O " 7262 a = 0 : b = 0 : c = 0 : d = 0 : e = 0 : g = ] 7264 goto 7300 7270 cls:zz=0 7271 print " K o e f f i z i e n t e n für Hybride des T y p s a ( 4 s ) , b ( 4 p z ) , c(4py),d(3dz2),e(3dzy)" 7272 a = l / s q r ( 6 ) : b = l / s q r ( 2 ) : c = b : d = l / s q r ( 1 2 ) : e = . 5 : g = 0 : f$="sp3d2 Oktaeder" 7273 print u s i n g " a = # . # # # b = # . # # # c = # . # # # d = # . # # # e = # . # # # " ; a,b,c,d,e:zz=2 7274 dialog$="Aenderung (J/N)":gosub 1000:if a $ = " N " then 7300 7275 locate z z , l : i n p u t " a - K o e f f i z i e n t : ",a 7276 input " b - K o e f f i z i e n t : ",b 7277 input " c - K o e f f i z i e n t : ",c:input " d - K o e f f i z i e n t : ",d 7278 input " e - K o e f f i z i e n t : ",e:input " Bezeichnung: ",f$ 7279 z z = z z + 6 : g o t o 7300 7280 c l s : z z = 0 7281 print " S l a t e r - H y b r i d e des T y p s a ( n s ) , b ( n p z ) , c ( n p y ) , d(ndz2-y2),e(ndz2),f(ndzy)" 7282 a = l / s q r ( 6 ) : b = l / s q r ( 2 ) : c = b : d = l / s q r ( 1 2 ) : e = . 5 : g = 0 7283 n = 3 : z e = l : f $ = " S l a t e r " 7284 f o r i = l to 6 : n ( i ) = n : z e ( i ) = z e : n e x t i 7285 print u s i n g " a = # . # # # b = # . # # # c = # . # # # d = # . # # # e = # . # # # f=#.###";a,b,c,d,e,g 7286 print u s i n g " n = # # z e t a = # # . # # # ";n,ze:zz=3 7287 dialog$="Aenderung (J/N)":gosub 1000:if a $ = " N " then 7300 7288 locate z z , l : i n p u t " a - K o e f f i z i e n t : ",a:input " n.zeta: " , n ( l ) , z e ( l )
102
7289 input " b - K o e f f i z i e n t : ",b:input " n.zeta: " , n ( 2 ) , z e ( 2 ) 7290 input " c - K o e f f i z i e n t : ",c:input " n.zeta: " , n ( 3 ) , z e ( 3 ) 7291 input " d - K o e f f i z i e n t : ",d:input " n.zeta: " , n ( 4 ) , z e ( 4 ) 7292 input " e - K o e f f i z i e n t : ",e:input " n.zeta: \ n ( 5 ) , z e ( 5 ) 7293 input " f - K o e f f i z i e n t : ",g:input " n.zeta: " , n ( 6 ) , z e ( 6 ) 7294 input " Bezeichnung: " , f $ : z z = z z + 1 3 7300 rem Intervallgrenzen 7310 w2=2"pi:'Endwert von w 7312 w l = 0 : ' A n f a n g s w e r t von w 7314 r l = 0 : ' A n f a n g s w e r t von r 7316 r2=10:'Endwert von r 7318 d i a l o g $ = " I n t e r v a l l g r e n z e n eingeben (J/N)":gosub 1000: 7320 if a $ = " N " then 7400 7322 locate z z . l 7324 print " A n f a n g s w e r t von w = ";wl,:input "Eingabe: " , w l 7326 print "Endwert von w = ";w2,.input "Eingabe: ",w2 7328 print " A n f a n g s w e r t von r = ";rl,:input "Eingabe: ",rl von r = ";r2,:input "Eingabe: ",r2 7330 print "Endwert 7332 z z = z z + 4 7400 rem Bestimmung der Maximal-Dichte 7410 sr=.8:'Schrittweite von r 7412 ymax=0 7414 for r = r l to r2 step sr 7416 if wähl l
= a2 *2(A)
+
2 a b i(A) i(B)
+
b2 *2(B)
V2
= a2 *2(A)
-
2 a b X(A) *(B)
+
b2 * 2 ( B )
*(A) *(B) überlappungsdichte Dabei wird zunächst noch nichts über die Besetzung dieser MO's mit Bindungselektronen ausgesagt. Betrachtet man zum Beispiel ein Molekülorbital mit nur einem Elektron (H*-Ion), dann läßt sich mit diesem Ansatz [4.9]
106
modellhaft als ein wichtiger Faktor beim Zustandekommen einer chemischen Bindung die Überlappung (engl, overlap) der AO's in der Bindungsmitte darstellen. Diese Überlappung entsteht also durch Interferenz (Überlagerung durch Linearkombination) der Wellenfunktionen; anschaulich vereinfacht entpricht sie einer Coi/JcMnö-Ladungsdichte in Bindungsmitte. Sie wird daher auch als quantenchemischer Interferenzanteil der chemischen Bindung angesehen, während die beiden anderen Quadrat-Terme als quasiklassische Dichtebeiträge bezeichnet werden. Auf das Problem der Elektronenwechselwirkung in einem MO mit zwei Elektronen (H^-Molekül) und dem nichtlokalen Austauschanteil zur Bindung wird im Zusammenhang mit Energiebetrachtungen im Kapitel 6 bzw. im Programm-Beispiel 20 eingegangen; die Normierung der Mischungs- oder MO-Koeffizienten erfolgt nach den Gleichungen [3.4] und (4.6| der vorangehenden Kapitel. Das Programm-Beispiel 12 zeichnet in einem ersten Fenster die AO-Funktionen der isolierten Atome in einem vorgegebenen Bindungsabstand und die entsprechende Linearkombination dieser AO's. In einem zweiten Fenster wird die Überlappungsdichte (mittlerer MO-Term in (4.91) und das Quadrat der MO-Funktion gezeichnet. Es stehen die l s - , 2 s - und 2p-AO's des H-Atoms, sowie Slater-Orbltale
zur Auswahl. Der folgende Bildschirmausdruck zeigt die
Benutzung des Programms: Bildschirm Quantenchemie mit Personal Computern Programm: LCAO-MO-Methode Filename: BINDUNG.BAS Kapitel 4: Linearkombination von Orbitalen (c) Walter de Gruyter & Co. (1990) Autor: F. Marschner Version: 1.0 ( 1)
a[ls(A)| + b[ls(B)]
( 2)
a[2s(A)| + b[2s(B)l
( 3)
a[2p(A)] + b[2p(B)]
( 4)
a[STO(A)| + b|STO(B)l
Voreinstellung: n=l
z e t a = 1.000
X « (-3.00; 3.001
a = 0.7100
b=-0.7100
y e (-2.00; 2.001
Schrittweite (Punktdichte):
rab= 1.000
SCREEN 2
0.060
Der Benutzer wird jeweils durch eine Anzeige in der Zeile 25 nach einer Änderung gefragt, sodaß eine Eingriffsmöglichkeit und damit Optimierung der graphischen Darstellungen gegeben ist.
107
Programm 10 cls:rem vorher GRAFTABL.COM laden für erweiterten ASCII-Zeichensatz 11 titel$(0)=" Quantenchemie mit Personal Computern " 12 t i t e l $ ( l ) = " Programm: LCAO-MO-Methode" 13 titel$(2)=" Filename: BINDUNG.BAS" 14 titel$(3)=" Kapitel 4: Linearkombination von Orbitalen " 15 titel$(4)=" (c) Walter de Gruyter & Co. (1990)" 16 titel$(5)=" Autor: F. Marschner Version: 1.0" 17 zz=0:for i=0 to 5:zz=zz+l:print titei$(i):next i 20 nx=100:ny=nx:'Anzahl der x,y-Koordinaten 22 dim x(nx),y(ny),bild(4000),zeile$(24):'Koordinaten-, Bild-speicher 24 p i = 4 * a t n ( l ) 30 rem Definition der Funktionen 32 def fnsl(r)=2*ka*exp(-k*r)/pi:' ls-Orbital 34 def f n s 2 ( r ) = ( k a / 2 * s q r ( 2 ) ) * ( 2 - 2 ' k ' r ) " e x p ( - k ' r ) / p i : ' 2s-Orbital 36 def fnp2(r)=.5*ka*k*r"exp(-k*r)/sqr(2'pi):' 2p-0rbital(m=0) Theta=0° 100 rem Anfang: Auswahl und Eingabe 102 f $ ( l ) = " a | l s ( A ) J + b[ls(B)J" 104 f$(2)="a[2s(A)] + b[2s(B)]" 106 f$(3)="a[2p(A)] + b[2p(B)]" 108 f$(4)="a[STO(A)l + b[STO(B)]" 110 for i = l to 4 112 zz=zz+l: 114 print ( " ( " + s t r $ ( i ) + " ) "+f$(i)) 116 next i 120 rem Voreinstellung 122 z e = l : n = l : w a h l = l 124 a=.71:b=-.71:'LCAO-Koeffizienten 126 rab=l:'Abstand A - B 128 ccc=2:'Bildschirmkonstante 130 kb=2:ka=3:'Intervallfaktoren 132 rem Definition der Intervallgrenzen 134 a l = - l * k a : ' l i n k e Grenze im x - I n t e r v a l l 136 a 2 = + l "ka:'rechte Grenze im x - I n t e r v a l l 138 bl = - l ' k b : ' u n t e r e Grenze im y - I n t e r v a l l 140 b2=l*kb:'obere Grenze im y - I n t e r v a l l 142 locate zz+1,2 144 print "Voreinstellung:":zz=zz+l 146 format$= "& n = # z e t a = # # . # # # a = # # . # # # # b = # # . # # # # r a b = # # . # # # " 148 print using format$;f$,n,ze,a,b,rab 150 dialog$="Aenderung (J/N)":gosub 1000:if a$="N" then 160 152 locate zz+1,2 154 print " Eingabe: wähl, n, zeta, a, b, rab " 156 input ,wahl,n,ze,a,b,rab 158 zz=zz+2 160: f$=f$(wahl) 162 locate zz+1,2 164 format$= "x e [ # # . # # ; # # . # # ] y e [ # # . # # ; # # . # # ] SCREEN # " 166 print using format$;al,a2,bl,b2,ccc 168 dialog$="Aenderung (J/N)":gosub 1000:if a$="N" then 180 170 locate zz+1,2 172 format$=" Eingabe: x-Anfang, -Ende, y-Anfang, -Ende, SCREEN >= (1)" 174 print formats 176 input ,al,a2,bl,b2,ccc 178 zz=zz+2
108
180: s x = ( a 2 - a l ) / n x : ' S c h r i t t w e i t e 181 locate zz+1,2 182 format$=" Schrittweite (Punktdichte): # # . # # # " 183 print using format$;sx 184 dialog$="Aenderung (J/N)":gosub 1000:if a$="N" then 190 185 locate zz+1,2 186 format$="Eingabe: Schrittweite (Punktdichte) > # # . # # # " 187 print format$;sx 188 input ,sx 190: dialog$="Bildschirm speichern (J/N)":gosub 1000 192 if a$="J" then gosub 1290 194 screen ccc:cis 196 rem Berechnung von kappa und k 198 gosub 660 200: rem linkes Fenster 202 fa=2:fb=20:'links oben 204 ccs=2:if ccc=l or ccc=7 then ccs=l 206 breit=156*ccs:hoch=160 208 if ccc=9 or ccc=10 then hoch=290 209 if c c c = l l or ccc=12 then hoch=320 210 view ( f a , f b ) - ( f a + b r e i t , f b + h o c h ) , f o n d , 3 212 window ( a l , b l ) - ( a 2 , b 2 ) 222 line ( a l , 0 ) - ( a 2 , 0 ) , 3 : ' x - A c h s e 224 line (0,bl)-(0,b2),3:'y Achse 230 rem innere Fenster-Beschriftung 232 x a = - . 5 " r a b : ' x - K o o r d i n a t e von A 234 x b = - x a : ' x - K o o r d i n a t e von B 236 if ccc= (1) ";:input ,ccc 8012 if ccc
+ 2k 2
dx
+ 21^ + k4 ) k
h k a = h f( x 4 + | , y i
= h f(Xl ,yi )
k , = h f ( x4 + | inSubroutlne
J
r
.y,
k
+
)
k
4
= h f (
k
|'yi
V
i
) )
2400
Das Integrations-Verfahren von R. W. Hamming (1969) wird auch als Prädlktor-Korrektor-Methode bezeichnet. [5.9]
Hamming-Integrat1on dy = f ( x , y ) Startwerte:
dx , x e
[a;b]
(xi,yi)-
(x0.yQ).
nach
Runge-Kutta
p„o = 0, k„o = 0 Prädiktor: Pi+i
=
y
i-3
+
I
f (x ± . y i )
h
-
f
(xi_ i
1>
+
Modi f i k a t o r : m
i+i
=
p
i+i
" T5T
(k
i
p
"
i}
Korrektor: 1 k
i + i
8
9y i
-
y
i-3
+
3h
(k
i+i
"
(
f < X
i+l'IVl
)
+
2f(X
i
,y
i
)
~
f(X
i-l'yi-i>)
Schrittfunktion : y
i+i
=
k
l+l
in S u b r o u t l n e
+
9 l2l
P
i+i >
6900
Es ist dreifach zurückgreifend, da beim i - t e n Schritt die Funktionswerte V
f
und t
benötigt werden. Da aber zu Beginn der Iteration nur der
Startwert xQ und sein Funktionswert yQ bekannt sind, werden die Funktionswerte f 4 und f 2 mit dem Runge-Kutta -Verfahren berechnet. Bei stabilen Lösungen ist das Hamming-Vertahren
schneller als ein Runge-Kutta -Verfahren
4. Ordnung.
127
Das n a c h s t e h e n d beschriebene Programm-Beispiel 14 zeigt z u n ä c h s t die Lösungsvielfalt von Differentialgleichungen
1. und 2. Ordnung. In der
Subroutine 14700 sind zu den vorstehend aufgeführten Beispielen noch weitere Funktionen angegeben, die z.T. wegen ihrer Ästhetik Gefallen finden können. Zu der kompilierten Version DIFFGLGN.TBC des Programmes gehört ein Unterprogramm ANLEITUN.TBC, dessen Programmerläuterung sich mit dem RUN-Befehl auch von dem Hauptprogramm MENU.EXE auf der Ebene von MS-DOS einblenden läßt. Die Bildschirmanzeige dieser Anleitung s t e l l t sich so dar: Bildschirm Seite 1 Dieses Programm dient zur graphischen Darstellung von Lösungen von Differentialgleichungen, die sich in der Form (1) x ' = f ( x , y , t ) (2) y ' = g ( x , y , t ) d a r s t e l l e n l a s s e n . Dabei sind f und g ausreichend
stetige
Funktionen der Variablen x,y und des Parameters t. In der n a t u r w i s s e n s c h a f t l i c h e n Anwendung dieses Gleichungssystems r e p r ä s e n t i e r e n z.B. x,y Koordinaten der Ebene; t die Zeit (Anzahl der Zeichenpunkte). Mit einem solchen mathematischen Schema lassen sich u.a. folgende Probleme u n t e r s u c h e n : 1. Aquipotentiallinien Es sei V=V(x,y) eine P o t e n t i a l f u n k t i o n der beiden Koordinaten x,y. Für den Fall V=konst. gilt dV=0, sodaß die p a r t i e l l e n Ableitungen nach den Variablen sich auch als angeben
Gleichungssystem
lassen. av dV =
dx
öv dx + d
(1.1) x' =
dy
dy = 0
V(x,y) dy d
( 1 . 2 ) y' =
V(x,y) dy
Seite 2 2. Feldlinien Es i s t E= - g r a d [V(x,y)J das Feld eines P o t e n t i a l s V wie in 1.
128
angegeben. Dann gilt für diese Feldlinien: d (2.1) x' = + V(x,y) 9y a (2.2) y' = V(x,y) »y Die Feldlinien sind orthogonal zu den Aquipotentialllnien. 3. Differentialgleichungen 2. Ordnung Es sei eine Differentialgleichung zweiter Ordnung: z" =
nt.z.z')
(z.B. die Beschreibung der Bewegung eines Körpers in einer Richtung). Mit
y = z und x = z1, erhält man:
(3.1) x' = z" = f(t,y,x) (3.2) y' = z'
= x
In der Kinematik erhalten die Variablen dann folgende Bedeutung: x
Geschwindigkeit des Objektes,
y
Position des Objektes, mit
x -> y dem Funktions- oder Potential-Graph (Geschwindigkeit-Position), x -> t Hodograph (Geschwindigkeit-Zeit), und y -> t Trajektorie (Position-Zeit). Seite 3 Im Programm können vorab eingestellt werden: 1. Bildschirmkonstante (SCREEN), 2. Fenster-Anzahl (bis zu 4) mit/ohne Achsenkreuz und/oder Raster, sowie die jederzeit verfügbaren nachfolgenden Wahl-Möglichkeiten (Option): 3. Integrations-Methoden: Euler, Runge-Kutta, Hamming, 4. Intervalle (xi;xs) und (yi;ys], 5. Parameter: xO,yO Integrationsstartwerte; h Integrationsschrittweite; np Anzahl der Zeichenpunkte; zk Anzahl der Kurvenzweige; z
Anzahl der automatisch zu zeichnenden Kurven,
6. Punkt/Linien-Darstellung, 7. Funktions-Wahl: x' und y' gemeinsam, nur y' nur x'. Es stehen derzeit 18 Funktionspaare x',y' zur Verfügung. Weitere
129
Funktionen lassen sich über ein Programm FUNKTION.BAS im ASCII-code mit MERGE in GWBASIC bzw. SINCLUDE in TURBO-BASIC in der unkompilierten Version einbinden. Das Programm verfügt über eine Standardeinstellung. Mit [AltJ-F wird in Zeile 26 die KEY-Leiste der Funktionstasten eingeblendet. Mit diesen Tasten ist eine Kommunikation mit den Diskettenstationen möglich: Fl Wahl der Diskettenstation mit Inhalts-Anzeige, F2 Save des Bildschirminhaltes Im ASCII-Code, F3 Bild speichern mit GET, F4 Bild restaurieren mit PUT, F5 Filename eingeben, F6 File-Inhalt anzeigen, F7 Bild saven mit BSAVE, F8 Bild laden mit BLOAD, F9 Bild in video invers anzeigen, F10 LPRINT Screen ausgeben an Drucker. Wichtig sind Rücksprung-Taste: [Esc|, und Fortsetzungs-Taste: [
h; Ausgabe: x, y. 1000 1050 1100 1200 1220 1240 1260 1270 1280 1290 1400 1600 1630 1700 1710 1760 1800 1830 2400 2500 2600 2700 3400 4000 4300 4400 4500 4600 4700 5000 5300 6000 6900 7000 7350 7380 7970 1470016400
Anzeige und Dialog in Zeile 26 mit Tastaturabfrage Anzeige in Zeile 1 löschen Definition der Funktionstasten Fl - F10 Bildschirmbehandlung: GET (Bild ins Memory ) PUT mit PRESET (altes Bild video invers anzeigen) Bildschirm restaurieren mit PUT Speicherung des Bildschirms im Textmodus in einem 24-Zeilen-Feld Anzeige des 24-Zeilen-Feldes Druckerausgabe des 24-Zeilen-Feldes zusammenfassende Bilschirmspeicherung im Textmodus Anzeigen des Disketten-Inhaltes wahlweise in Diskettenstation A oder B BSAVE Blldschirmspelcherung im Graphikmodus BLOAD Bild laden im Graphikmodus Eingabe des Filenamen in Zeile 1 Eröffnen eines sequentiellen Files Schliessen eines sequentiellen Files Offnen eines sequentiellen Files zum Anhängen Offnen, Lesen, Anzeigen eines Files Integration Runge-Kutta für dy=g(x,y) mit SUB(260) Eingabe: x 0 , y , h; Ausgabe: x = x 0 + h , Integralwert y ein Fenster [260(580)xl60] in (50; 10) definieren zwei Fenster (100(256)xl00| in (50;10) und (200;10) resp. (360; 10) definieren drei bzw. vier Fenster [100(256)x64] definieren in (200;106) resp. (360;206) und (60;106) s.o. Zahlen-Beschriftung des Fensters mit LOCATE Fenster-Rahmen zeichnen Kurvenpunkte zeichnen Linien zeichnen Achsenkreuz durch den Ursprung (0;0) mit Raster Raster am linken und unteren Fenster-Rand Information und Dialog unter dem Fenster Menu II zur Eingabe von Intervallen, Parametern, und Option für Menu III in 5300 Menu III zur Eingabe von Funktion, Integrationsmethode, Titel, Punkt- oder Linien Hauptsubroutine zur graphischen Darstellung mit Rückgriff auf SUB: 660, 670, 690, 700, 800, 4300, 4400, 4700, 4830 Hamming-Verfahren für dy=y'=g(x,y) mit Rückgriff auf SUB: 260, 270, 2400; Eingabe: x, y „ , h, x, , x . 0
i
s
Menu I mit Einstellungsauswahl und Sprung zu SUB: 7380 (Funktions- und Modus-Wahl), 7360 (Verteiler) Verteiler für Modus , , zu SUB: 6000, 6900 Auswahl der Differentialgleichung(en) und des Modus Datumsdarstellung in europäischer Notation Definition der 18 Differentialgleichungssysteme und der Intervallgrenzen
131
Programm 12 t i t e l $ ( 0 ) = " Quantenchemie mit Personal Computern " 14 t i t e l $ ( l ) = " Programm: Untersuchung von D i f f e r e n t i a l g l e i c h u n g e n " 16 t i t e l $ ( 2 ) = " Filename: DIFFGLG.BAS" 18 t i t e l $ ( 3 ) = " Kapitel 5: Operatoren und Eigenwerte " 20 t i t e l $ ( 4 ) = " ( c ) Walter de Gruyter & Co. (1990)" 22 t i t e l $ ( 5 ) = " Autor: F. Marschner Version: 1.0" 110 rem Initialisierung, Sicherung und Erklärung der Variablen 120 x i = - 6 : x s = 6 : y i = - 3 . 5 : y s = 3 . 5 : ' I n t e r v a l l s c h r a n k e n 122 h = . 0 5 : ' I n t e g r a t i o n s - S c h r i t t w e i t e 124 d i f f = l : ' D i f f e r e n t i a l g l e i c h u n g s s y s t e m , 2= ,3= 126 p l o = l : ' l Punkte, 2 Linien 128 k r = l : ' A c h s e n k r e u z + R a n d - R a s t e r 130 b=xs:'obere Schranke im Hamming-Verfahren 132 ccc=0:'Bildschirmkonstante 134 screen ccc:cls: 136 rem maximale Zeichenpunktzahl 138 n m a x = a b s ( c i n t ( ( x s - x i ) / h ) ) : n m a x O = n m a x : ' A n f a n g s w e r t 140 l i g = 2 2 : ' A n z e i g e - L i n i e n - Z a h l 142 ccc=2:'Standard-Bildschirmkonstante 144 ll=80:'Kolonnenzahl im Screen 0 bzw. 2 146 n f = 3 : ' F e n s t e r - A n z a h l 148 m e t = 2 : ' I n t e g r a t i o n s - M e t h o d e : R u n g e - K u t t a , 1 Euler, 3 Hamming 150 z k = l : ' Z a h l der Kurvenzweige 152 s c h r a n k e = l : ' Z a h l der automatisch zu zeichnenden Kurven 154 t t = 0 : ' S t a r t w e r t e per Zufallsentscheidung, t t = l über Eingabe 156 nnn=22:dim c h o i $ ( n n n ) : ' A u s w a h l - F e l d der Einstellung 158 dim f k $ ( 2 4 ) : ' F u n k t i o n s w a h l - A n z e i g e - F e l d 160 defdbl d,x,y,f,p,m,k,a,b 162 dim b i l d ( 4 0 0 0 ) , z e i l e $ ( 2 4 ) 163 key 15, c h r $ ( & H 0 8 ) + c h r $ ( 3 3 ) : ' A l t - F 164 on k e y ( 1 5 ) gosub 1100 165 k e y ( 1 5 ) on 176 for i = 0 to 5:print t i t e l $ ( i ) : n e x t i 180: dialog$="Haupt-Menu:[< '] Anleitung: ( A ) F l - F 1 0 - T a s t e n - M e n u : ( A l t ] - F Ende:[Esc)" 182 gosub 1000 190 if a $ = " A " then print "ANLEITUN.TBC von MENU.EXE aus laden.":goto 180 200 $include "FUNKTION.BAS":'entfällt im Kompilat ".TBC 210 gosub 7000:'Hauptmenu 220 goto 180:'oder end:' Hauptprogramm-Ende In der kompilierten Version DIFFGLGN.TBC wird das Unterprogramm ANLEITUN.TBC über das Hauptprogramm MENU.EXE geladen. Auch könnte eine eigenständige E X E - V e r s i o n des Programmes e r s t e l l t werden. Allerdings sollte diese dann noch einen Compiler f ü r Funktionsterme enthalten. Dieses Problem wird im Rahmen dieses Buches nicht behandelt. 'Unterprogramme
(Subroutinen)
250: rem F u n k t i o n s w a h l - V e r t e i l e r 251 on wähl gosub 14710,14750,14790,14830,14890,14930,14960, 15000,15030,15060,15090,15120,15150,15190, 15210,15240,15260,15400,15500 252 if d i f f = 3 then d y = d x 253 return:
132
260: rem Achsenkreuz-, Raster-Verteiler 261 on kr gosub 262,4500,4600:return: 262 gosub 4500:gosub 4600:return 270: rem Punkt-, Linien-Zeichnen-Verteiler 271 If n = l then gosub 4300 else on plo gosub 4300,4400:return: 280: rem Fenster-Inltlalislerungs-Verteiler 281 on nf gosub 2500,2600,2700,2700:retum: 282: rem abwechselndes Zeichnen in 1,2,3 oder 4 Fenstern 283 ik=l:al=xi(ik):a2=xs(ik):bl=yi(ik):b2=ys(ik): 284 gosub 2600:gosub 270:return:'eln Fenster F I 286 J=l:al=xi(J):a2=xs(j):bl=yi(j):b2=ys(j) 286 if i k = l then gosub 2600:gosub 270:return:'2 Fenster F I 287 if ik=2 then gosub 2650:gosub 270:return:'Fenster II 288 j=l:al=xi(j):a2=xs(j):bl=yi(j):b2=ys(j) 289 if i k = l then gosub 2700:gosub 270:return:'3-4 Fenster F I 290 if ik=2 then gosub 2740:gosub 270:return:'F II 291 if ik=3 then gosub 2770:gosub 270:return:'F III 292 if lk=4 then gosub 2800:gosub 270:return:'F IV 300: rem 1,2,3 oder 4 Fenster installieren 301 gosub 280: 302 for J=1 to nf 303 al=xi(j):a2=xs(j):bl=yi(j):b2=ys(j): 304 if j = 2 then gosub 2650:if nf=3 or nf=4 then gosub 2740 306 if j = 3 then gosub 2770: 306 if j = 4 then gosub 2800 307 gosub 4000:gosub 260 308 oben$=f$(j): 309 gosub 3400 310 next j 311 return 320: rem Intervall-Initialisierung 321 gosub 250:'Funktionswahl-Verteiler 322 xi=xia:xs=xsb:yi=yia:ys=ysb:'Intervall-Vorgabe 323 n=nf:for i = l to n:xi(i)=xi:xs(i)=xs:yi(i)=yi:ys(i)=ys:next i 324 nmax=abs(cint((xs-xi)/h)):'maximale Bildpunkt-Anzahl 325 nmax0=nmax 326 return 340: rem Intervall-Initialisierung nach Eingabe 342 xs=xs(ik):xi=xi(ik):ys=ys(ik):yi=yi(ik) 344 nmax=abs(cint((xs(ik)-xi(ik))/h)):'maximale 345 nmaxO=nmax 346 return
Bildpunkt-Anzahl
400: rem drei Fenster installieren, Standardeinstellung für 401 i=3:xi(i)=0:xs(i)=nmax:yi(i)=xi:ys(i)=xs:'Fenster 3 402 i=2:xi(i)=0:xs(i)=nmax:yi(i)=yi:ys(i)=ys:'Fenster 2 403 gosub 2700:'drel bzw. vier Fenster initiieren 404 gosub 4000:'Fensterlage (xf.yf,breit,hoch) Fenster I 405 i=l:al=xi(i):a2=xs(i):bl=yi(l):b2=ys(i): 406 gosub 260
133
407 oben$="Potential: x - > y": 408 gosub 3400:'Beschriftung 409 gosub 2740:'Fenster II initiieren 410 gosub 4000:'Fensterlage (xf.yf,breit,hoch) Fenster II 411 I=2:al=xi(i):a2=xs(i):bl=yi(i):b2=ys(i): 412 gosub 260 413 oben$="Trajektorie: t - > y":gosub 3400:'Beschriftung 414 gosub 2770:'Fenster III initiieren 416 gosub 4000:'Fensterlage (xf,yf,breit,hoch) Fenster III i=3:al=xi(i):a2=xs(i):bl=yi(i):b2=ys(i): 416 gosub 260 417 418 oben$="Hodograph: t - > x": 419 gosub 3400:'Beschriftung 420 return 610: rem Fenster-Intervalle (aktuelle Nr. 1k): erstes Fenster 611 al=xi(ik):a2=xs(ik):bl=yi(ik):b2=ys(ik):if n f = l then gosub 2600:return: 612 If nf=2 then gosub 2600:return:'Fenster I von zwei Fenstern 613 gosub 2700:return:'Fenster I von drei/vier 620 'zweites Fenster 621 al=xi(ik):a2=xs(ik):bl=yi(ik):b2=ys(ik):if nf=2 then gosub 2650:retum:'Fenster II 622 gosub 2740:return:'Fenster II, Trajektorie 630 'drittes Fenster III, Hodograph 631 al=xi(ik):a2=xs(ik):bl=yi(ik):b2=ys(ik):gosub 2770:return: 640 'viertes Fenster 641 al=xi(ik):a2=xs(ik):bl=yi(ik):b2=ys(ik):gosub 2800:retum 650: rem in drei Fenstern simultan zeichnen. Standardeinst. 662 i k = l : a l = x i ( i k ) : a 2 = x s ( i k ) : b l = y i ( i k ) : b 2 = y s ( i k ) : g o s u b 2700: 664 gosub 270:'Graph (Position/Geschwindigkeit) 666 ik=3:al=xi(ik):a2=xs(ik):bl=yi(lk):b2=ys(ik) 668 gosub 2770:x=i:y=xl 660 gosub 270:'Hodograph, Fenster III 662 ik=2:al=xi(lk):a2=xs(ik):bl=yi(ik):b2=ys(ik) 664 gosub 2740:x=i:y=yl 666 gosub 270:'TraJektorle, Fenster II 667 ik=l:'Bezugsfenster FI 668 return 669: rem Verteiler: Information unter dem Fenster und Dialog in Zeile 1 bzw. 25 670 if n f = l then gosub 2600 671 if nf=2 then gosub 2600:if ik=2 then gosub 2660 672 if nf=3 or nf=4 then gosub 2700: 673 if t t = 0 then gosub 4700 eise gosub 4717:'Anzeige,Tastatur b$ 674 if b$=chr$(27) then :return: 675 if b$=chr$(13) and t t = 0 then :gosub 690:return 676 if b$=chr$(13) and t t = l or t t = 2 then return 677 i=val(b$):ik=i:if i>0 and l < n f + l then gosub 6000:else goto 670 678 i=ik:on i gosub 610,620,630,640:oben$=f$(i):gosub 3400: 679 if n f = l then gosub 3380:goto 689 680 if n f = 2 then :for 1=1 to 2:on i gosub 2600,2650: oben$=f$(i): gosub 3380: next i 681 if nf=3 or nf=4 then :for i = l to 2:on i gosub 2700,2740:
134
689
goto 670:
oben$=ft(i):gosub 3380:next i
690: rem Zufallsentscheidung für xO.yO-Startwerte 691 randomize timer'Relnitialisierung des Zufallszahlengenerators 692 xO=xi(nlk)+(xs(nik)-xi(nik))*rnd(l): 693 yO=yi(nik)+(ys(nik)-yi(nik))'rnd(l): 694 return: 700: rem Subroutine Runge-Kutta für zwei Differentialgleichungen 701 rem dx=f(x,y) und dy=g(x,y): Eingabe:x,y,h SUB:250 Ausgabe:xl,yl 702 x x = x : y y = y 712 kOx=h'dx:kOy=h*dy:xl=x:yl=y:'RKO 720 x = x 1 +k0x/2:y=y 1 +k0y/2:gosub 250: 722 klx=h'dx:kly=h*dy:'RKl 730 x = x l + k l x / 2 : y = y l + k l y / 2 : g o s u b 250: 732 k2x=h'dx:k2y=h'dy:'RK2 740 x = x l + k 2 x : y = y l + k 2 y : g o s u b 250: 742 k3x=h"dx:k3y=h*dy:'RK3 '(RK4) als Mittelwert 750 x l = x l + ( k 0 x + 2 ' k l x + 2 * k 2 x + k 3 x ) / 6 : y l = y l + ( k 0 y + 2 * k l y + 2 " k 2 y + k 3 y ) / 6 : 751 x = x x : y = y y 780 return 800: rem Euler-dx-dy ein:x,y,dx,dy,h,nmax a u s : x l , y l , n , ( d , s ) 810 d=sqr(dx"dx+dy*dy):s=.000001* 820 if d7 then b r e i t = 2 5 6 : 2624 if c c c = 9 or c c c = 1 0 then hoch=230 2626 if c c c = l l or ccc=12 then hoch=280 2630 f o n d = 0 : r a n d = l : i f o b e n $ = " " then o b e n $ = " F e n s t e r " 2632 z n x = 2 : z n y = 5 2640 return 2650 x f = 2 0 0 : y f = 10:'Fensterursprung II rechts 2651 b r e i t = 1 0 0 : h o c h = 1 0 0 : 2652 if ccc=2 or ccc>7 then x f = 3 6 0 : b r e i t = 2 5 6 : 2653 oben$=f$(2):if o b e n $ = " " then o b e n $ = " F e n s t e r " 2670 if c c c = 9 or c c c = 1 0 then hoch=230 2672 if c c c = l l or ccc=12 then hoch=280 2690 return 2700: rem 3 - F e n s t e r bzw. 4 - F e n s t e r 2710 x f = 5 0 : y f = 10:'Fensterursprung I links oben 1 ]":obenS=f$(l) 2720 b r e i t = 1 0 0 : h o c h = 6 4 : w $ = " [ l ) |2] (3] [< 2721 if n f = 4 then w $ = " [ l ] [2] [3] [4) [< ']" 2722 if ccc=2 or ccc>7 then b r e i t = 2 5 6 2723 f o n d = 0 : r a n d = l : z n x = 2 : z n y = 2 : 2724 if oben$="" then o b e n $ = " F e n s t e r ": 2730 return 2740: x f = 2 0 0 : y f = 1 0 : ' F e n s t e r u r s p r u n g II rechts oben 2741 oben$=f$(2) 2750 b r e i t = 1 0 0 : h o c h = 6 4 : i f ccc=2 or ccc>7 then x f = 3 6 0 : b r e i t = 2 5 6 2751 hf o b e n $ = " " then o b e n $ = " F e n s t e r < 2 > " : f o n d = 0 : r a n d = l 2760 return 2770: x f = 2 0 0 : y f = 106:'Fensterursprung rechts unten 2771 oben$=f$(3)
136
2780 breit=100:hoch=64:if ccc=2 or ccc>7 then xf=360:breit=256 2781 if oben$="" then oben$="Fenster ":fond=0:rand=l 2790 return 2800: rem 4. Fenster 2810 xf=50:yf=106:'Fensterursprung IV links unten 2820 breit=100:hoch=64:w$="[l] [2] |3] [4] [< ' ] [Esc|": 2821 if ccc=2 or ccc>7 then breit=256 2822 oben$=f$(4) 2830 if oben$="" then oben$="Fenster ":fond=0:rand=l 2840 return 3300 rem Ueberschriften 3380: lo=len(oben$):lob=breit/8:if lo> lob then oben$=left$(oben$,lob) 3381 locate yf/8,xf/8+2:print space$(lob); 3382 locate yf/8,xf/8+2:print oben$;:'Oberschrift 3383 return 3400: rem Beschriftung mit LOCATE 3402 'Eingabe: znx,zny,xf 1 yf,hoch,breit,al,bl,a2,b2 3410 gosub 3380:'Ueberschrift 3415 rem unterer Rand (x-Achsenwerte) 3416 if ccc=l or ccc=7 then 11=40 else 11=80 3418 if ccc>8 then return 3420 sx=(a2-al)/znx:z=0: 3425 for i = a l to a2+sx/3 step s x : z = z + l 3430 z$=str$(i):if a b s ( v a l ( z $ ) ) < e x p l 0 ( - 5 ) then z$="0" 3431 if len(z$)>4 then :sf=instr(z$,"."):if sf=0 then s f = l else sf=0 3432 z$(z)=left$(z$,5) 3435 next i 3438 sx=breit/znx:lz=z:z=0: 3440 zeile=(yf+hoch)/8+2:spalte=int(xf/8)-l: 3441 if zeile>24 then zeile=24 3442 locate zeile,spalte:if nf>2 then zl=len(z$(z)):spalte=41 - z l : 3456 end if:'in GW BASIC i f - . . . - e n d if-Anweisung in einer Zeile 3457 if ccc=2 or ccc>7 then 3465 if z=lz and znx>2 then zl=len(z$(z)):spalte=81-zl: 3466 end if 3468 if zeile>24 then zeile=24 3470 locate zeile,spalte:print z$(z); 3480 next i: 3485 rem linker Rand (y-Achsenwerte) 3490 sy=(b2-bl)/zny:z=0: 3495 for i = b l to b2+sy/2 step s y : z = z + l 3500 z$=str$(i):z$(z)=left$(z$,5):if a b s ( v a l ( z $ ) X e x p l 0 ( - 5 ) then z$="0" 3505 if len(z$)24 then 3550 3535 locate zeile,spalto:print space$(5); 3540 locate zeile,spalte:print z $ ( z ) ; : z = z - l
137
3550 next i 3560 return Subroutinen 4000 - 4600 a u s Programm 5 4700: rem Information und Dialog unter dem F e n s t e r 4701 z z = z z + l : z e i l e = ( y f + h o c h ) / 8 + 2 + z z : s p a l t e = i n t ( x f / 8 ) : ' z z Zahl der Durchläufe 4702 if zeile>=23 then z z = l : z e i l e = ( y f + h o c h ) / 8 + 2 + z z : 4703 if n f = 4 then z e i l e = 2 4 : s p a l t e = 2 : l o c a t e zeile,spalte:print using"[##]";ik;:spalte=spalte+4 4704 if zeile>24 then z e i l e = 2 4 4705 locate zeile,spalterif breit>260 or n f = 4 and ccc=2 then print using " x 0 = # # . # # # # y 0 = # # . # # # # z = # # h = # # . # # # np=###";xO,yO,z,h,nmax;:goto 4714 4706 if breit>100 or n f = 4 then print using " x 0 = # # . # # y 0 = # # . # # h = # # . # # z = # # " ; x 0 ; y 0 ; h ; z ; : g o t o 4714 4707 locate zeile,spalte:print s p a c e $ ( 1 4 ) ; : l o c a t e zeile,spalte:print using "x0=##.####";x0;:zz=zz+l:zeile=(yf+hoch)/8+2+zz: 4708 if zeile>=23 then z z = l : z e i l e = ( y f + h o c h ) / 8 + 2 + z z : 4709 if zeile>24 then z e i l e = 2 4 4710 locate zeile,spalte:print using " y 0 = # # . # # # # " ; y 0 ; : z z = z z + l : 4711 z e i l e = ( y f + h o c h ) / 8 + 2 + z z : i f zeile>=23 then z z = l : z e i l e = ( y f + h o c h ) / 8 + 2 + z z : 4712 if zeile>24 then z e i l e = 2 4 4713 locate zeile,spalte:print using " h = # # . # # # z = # # " ; h , z ; 4714 s p a l t e = l l - l e n ( w $ ) 4715 locate 2 5 , l : p r i n t s p a c e $ ( l l - l ) ; : l o c a t e 25,spalte:print w$;: 4716 locate 25,1: 4718 if c c c = l or ccc=7 then print l e f t $ ( f $ ( w a h l ) , 8 ) ; : e l s e print f$(wahl);" ";left$(time$,5);: 4719 b$=inkey$:if b $ = " " then 4718 4730 if b$=chr$(27) then return else locate 2 5 , l : p r i n t s p a c e $ ( l l - l ) ; : r e t u r n 4800: rem SUB: Eingabe in Zeile 1 mit Einsprung in 4830 4810 locate l , l : p r i n t space$(ll);:locate l , l : p r i n t ik;:input "Intervallgrenzen x i , x s " ; a , b 4811 if a>b then swap a,b 4812 if a = 0 and b = 0 then 4820 4819 x i ( i k ) = a : x s ( i k ) = b : locate 1,1 ¡print space$(ll);: 4820 locate 1,1 ¡print ik;:input "Intervallgrenzen y i , y s " ; a , b 4821 if a>b then swap a,b 4822 if a = 0 and b = 0 then 4899 4829 y i ( i k ) = a : y s ( i k ) = b : g o t o 4899 4830: t t = 0 : l o c a t e 1,1 ¡print s p a c e $ ( l l ) ; : l o c a t e l , l : i n p u t "Anfangswert xO=",a$:locate 1,1 ¡print space$(ll); 4831 if a $ = " " then 4840 else x 0 = v a l ( a $ ) : t t = l : x 0 0 = x 0 4840 locate 1,1: input "Anfangswert yO=",a$:locate 1,1 ¡print space$(ll); 4841 if a $ = " " then 4850 else yO=val(a$):tt=l:yOO=yO 4850 locate 1,1: input "Schrittweite h = " , a : l o c a t e 1,1 ¡print space$(ll); 4851 if a = 0 then 4860 e l s e h = a : 4860 locate 1,1: input "Bildpunkt-Anzahl n p = " , a $ : l o c a t e 1,1 ¡print space$(ll); 4861 if a $ = " " then nmax=nmaxO else n m a x = v a l ( a $ ) 4862 locate 1,1: input "Kurvenzweige (1) (2)",a$:)ocate 1,1 ¡print space$(ll); 4863 if a $ = " " then goto 4870 else z k = v a l ( a $ ) 4870 locate l , l : i n p u t "Kurven-Anzahl z = " , a : s c h r a n k e = a 4899 locate l , l : p r i n t spaceS(ll);:return
138
5000: rem SUB Menu II 5001 if c c c = l or ccc=7 then l l = 3 9 : a l = 2 else l l = 7 9 : a l = 4 5010 choix$( 1 ) = " I n t e r v a l l e " 5020 choix$(2)="Parameter" 5030 choix$(4)="Option" 1" 5040 c h o i x $ ( 3 ) = " < 5050 a n z a h l = 4 : l i g n e = 2 5 . a e $ = " [ " : b e $ = " ] " 5051 for i = l to anzahl: choice$(i)=choix$(i):next i 5070 l i g = 3 5090 while - 1 5100 if c c c = 0 then color 7,0: 5101 locate „0:'Curseur nicht sichtbar 5110 11(1) = 1: 5111 locate ligne.l 5112 print space$(ll); 5113 for i = l to anzahl:choix$(l)=choice$(l):next i 5114 for 1=1 to anzahl: 5116 locate ligne.lKl): 5117 print c h o i x $ ( l ) ; : l l ( l + l ) = l l ( l ) + l e n ( c h o i x $ ( l ) ) + a l : n e x t 1 5120 locate ligne.ll(lig): 5121 if c c c = 0 then color 0,7: 5122 choix$(lig)=aeS+choice$(lig)+be$ 5123 print choix$(lig);: 5124 choix$(lig)=choice$(lig) 5125 if c c c = 0 then color 7,0 5126 locate l , l : p r i n t space$(ll); 5130 locate l , l : p r i n t "mit (Cursor] wählen,[< '] bestätigen"; 5150 c$=inkey$:if l e n ( c $ ) = 0 then goto 5150 5170 if l e n ( c $ ) = 2 then c = a s c ( r i g h t $ ( c $ , l ) ) else c = a s c ( c $ ) 5180 if c = 2 7 then b$=c$:return 5200 if c = 7 5 or c = 3 2 then if lig>l then l i g = l i g - l 5210 if c = 7 7 or c = 3 2 then if ligl then lig=lig-l if c=77 or c=32 then if lig0 and wahl0 and met schranke then z=zahl-l:gosub 670: 6323 if b$=chr$(27) then return 6330: rem Sprungadresse für anderen Zweig der gleichen Kurve 6331 n=0:x=x0:y=y0: 6340: rem Schleifen-Anfang innerhalb eines Kurvenzweiges 6341 n=n+l:locate 25,l:print "z=";zahl;"np=";nmax;"n=";n;: 6342 gosub 250:'Funktion 6350 on met gosub 800,700:'Euler,Runge-Kutta (x,y;xl,yl) 6380: 'Beendigung 6382 if n>nmax or xlxs or ylys then 6440: 6390 if n=l then x=xO:y=yO else x=xl:y=yl: 6391 i=n:on nf gosub 282,285,650,288: 6392 x=xl:y=yl
140
6420 goto 6340:'Schleifen-Ende 6440: h = - h : i f h>0 then 6290:'neue Kurve, wenn h>0 6460 if zk=2 then 6330 else 6290:'zk=2 anderer Zweig der gleichen Kurve sonst neue Kurve 6499 return 6900 rem Hamming-Verfahren für eine Differentialgleichung dy=y'=f(x,y) mit Zeichnen in Punkten 6901 zahl=0:rem ein:x,yO,h,xi,xs,sub 2400 (RK),270(plo),250(wahl) 6902 zahl=zahl+1 ¡locate l,l:print " z = " ; z a h l - l : n = 0 : 6903 if hschranke then z=zahl-l:yO=yOO:gosub 670: 'Ausstieg, Änderung oder Fortsetzung 6906 if b$=chr$(27) then return 6907 if t t = 0 then nik=l:gosub 690:y00=y0 6909 y ( l ) = y 0 : y = y 0 : n = n + l : o n nf gosub 282,285,288,288: 6910 if met=l or met=2 then nrk=nmax eise nrk=3 6911 for i = l to nrk 6920 x0=x:y0=y:locate 25,l:print "f";ik; "z=";zahl;"np=";nmax;"n=";i;: 6921 gosub 260:dx=0:on met gosub 850,2400,2400: 6930 if met=3 then y ( i + l ) = y : g o s u b 2 5 0 : f ( i + l ) = d y 6940 n=i:on nf gosub 282,285,288,288: 6941 next i 6942 if zk=2 and met >=b+h 6955 p=y(l)+4*h*(2*f(2)-f(3)+2"f(4))/3:'Prädiktor 6956 m = p - l 12"(k-pl)/121:'Modifikator 6957 y=m:gosub 250:m=dy 6958 k=(9'y(4)-y(2)+3 , h*(m+2*f(4)-f(3)))/8:'Korrektor 6959 y ( 5 ) = k + 9 ' ( k - p ) / 1 2 l ¡'Schrittfunktion 6960 if h>0 then gosub 4400 eise gosub 4300 6961 yz=y:y=y(5):gosub 250:f(5)=dy:pl=p:y=yz 6962 for i = l to 4 6963 y(i)=y(i+l):f(i)=f(i+l) 6964 next i 6965 x = x + h 6966 wend 6970 goto 6902: 6971 k = 0 : p l = 0 : x = x + h 6972 while x0 then gosub 4400 eise gosub 4300 6981 yz=y:y=y{6): 6982 gosub 250 6983 f(5)=dy:pl=p:y=yz 6991 for i = l to 4
141
6992 y(i)=y(i+l):f(i)=f(i+l) 6993 next i 6994 x = x + h 6995 wend 6999 goto 6902: 7000: cls:'Haupt-MENU 7002 c h o i $ ( l ) = " Funktionswahl" 7003 choi$(2)=" mit Standardeinstellung" 7010 choi$(3)=" Screen-änderung " 7020 choi$(4)=" Screen 2" 7030 choi$(5)=" 1 Fenster" 7040 choi$(6)=" 2 Fenster" 7050 choi$(7)=" 3 Fenster" 7060 choi$(8)=" 4 Fenster" 7070 choi$(9)=" Fenster-Titel" 7072 choi$(10)=" mit Achsenkreuz und Rand-Raster" 7073 c h o i $ ( l l ) = " mit Achsenkreuz ohne Rand-Raster" 7074 choi$(12)=" ohne Achsenkreuz mit Rand-Raster" 7075 choi$(13)=" ohne Achsenkreuz ohne Rand-Raster" 7080 choi$(14)=" Euler" 7090 choi$(15)=" Runge-Kutta" 7100 choi$(16)=" Hamming" 7110 choi$(17)=" Punkte " 7120 choi$(18)=" Linien " 7130 choi$(19)=" Intervalle [xi,xsl.[yi.ys]" 7140 choi$(20)=" Parameter (x0,y0,h,np,zk,z)" 7200 choi$(21)=" weiter zum Zeichnen " 7210 choi$(22)=" Ende" 7220 nnn=22:cont=2: if ccc=l then screen 2 7230 if ccc=7 then screen 8 7240 screen 0:ae$="[":be$="]" : l i g = l 7250 while - 1 7260 color 7,0:locate „ 0 7270: for 1=1 to nnn:locate l + l , l : p r i n t (" "+choi$(l)+" ");:next 1 7271 locate l + l i g , l : c o l o r 0,7:print (ae$+choi$(lig)+be$);: color 7,0 7272 locate l,l,0:print "mit [Cursor] wählen, mit [< ' ) bestätigen"; 7273 locate 25,l,0:print s p a c e $ ( l l - l ) ; : 7275 gosub 7970:datum$=a$: 7276 locate 25,l:print d $ ( d i f f ) + " Funktion: ";"(";wahl;") ";f$; 7279 locate 25,61,0:print datum$;" ";time$;: 7280 c$=inkey$:if len(c$)=0 then goto 7279 7281 if len(c$)=2 then c=asc(right$(c$,l)) else c=asc(c$) 7282 if c=27 then screen 0,0,0:end 7283 if c=79 then l i g = n n n - l 7284 if c=71 then l i g = l 7285 if C=72 then if lig>l then l i g = l i g - l 7286 if C=80 then if lig1 and K z f + 2 then print using" ";1— 1;:
143
xs
7641 7650
print (" " + f k $ ( l ) + " "):next 1 locate al+li,l:color 0,7:if li> 1 and li2 then : l i = l i - l 7720 if c=80 then if li y
-i-I
f f 1,1
"
' f
1
\ \ 1
-6
PJ J
H
x0= 0 . 7 8 x0= 5 . 5 5 x0=-2.00 x0= 3 . 8 7 x0= 2 . 2 1
1
y0=-1.61 y0=-0.35 y0=-1.65 y0= 0 . 4 5 y0= 0 . 5 6
Trajektorie:
h= h= h= h= h=
0.10 0.10 0.10 0.10 0.10
z= 0 z= 7 z= 8 z= 9 z=10
t -> y
-vt-
V
V/
0
6
120 Hodograph:
-6
146
1
Runge-Kutta-Intégrâtion
0
harMonische Schwingung
1
-6 0 x0= 0 . 7 8 y 0 = - 1 . 6 1 h= 0 . 1 0 z—11
>
-6 0 x0= 5 . 6 2 y 0 = - 3 . 5 8 h = - 0 . 0 5 z= 1
Beispiel la:
:
1 2 3 4
B e i s p i e l 1 : V e r g l e i c h von E u l e r - Mit
P o t e n t i a l : 6
f
:" -
-3.59
-6 0 x 0 = - 5 . 8 0 y 0 = - 1 . 2 1 h= 0 , 1 0 z = 5 x0= 0 . 7 8 y 0 = - 1 . 6 1 h= 0 . 1 0 z= 0 x0= 4 . 9 2 x0= 4 . 7 4 x0= 1 . 3 0 x0=-4.96
'
li il
y'=x
-V. ^ ^ ^ V. "
. (x)
x
Kasten -
ft = m *>(x)
Masse
des
definiert
Teilchens
im
1 Länge
Intervall
0
s x
V ( x ) = 0 im I n t e r v a l l 0 < x < 1 Randbedingungen: V(x=0) = V(x=l) V(x=0) Lösungen:
?
n
(x)
ist
En
a • w
/E
1
n
(V
=
—j—
-
-E
n
=
sin
n
und für
für
)
12
0 x
nicht V0
mit
n e IN
normierbar)
= ®
endliche 1 «
=
tan
VO
1 , 6 0 2 0 5 • 10"
Potentialbarriere
n
— 2-
Lösung
O
= V0
"j
K a s t e n s in 10
Werte
y
1
/2mE
von V
n
h erg
stellt sich dabei die Aufgabe, solche Energie-Eigenwerte
(Energieparameter)
zu bestimmen, für die die Sctirödinger-Gleichung physikalisch sinnvolle
149
8
cm
s 1
*>(x=l)
trivial 2 3
=
2 En 1 eV
J
(n=0
allgemeine
y
=
=
des
i n 10
- 1 3
erg
Lösungen liefert. Lösungen sind solche Funktionen, die die Randbedingung erfüllen, für große Abstände gegen Null zu gehen. (2): harmonischer V (x) k
Oszillator
=
(fflr biatomare Moleküle)
(x Q - x ) J
Kraftkonstante
Potential
k = ( 2 « c o ) J • fi
i>0 S c h w i n g u n g s f r e q u e n z v
~
v
0
=
o
in s
Wellenzahl
co
in cm
xQ Gl e i c h g e w i c h t s a b s t and i n Lösungen:
tpn ( x )
15.11J
= Nn e" *
2
1
-1 10
-6
cm
Hn ( x )
.n d
2
2
He rm J t es che P o l y n o m e : H (x) = (-1) e e x n für n i 0 dx" R e k u r s i o n s,f o r m e l n : Hn+1„ ( x ) = 2x Hn ( x ) - 2n H n-1. ( x ) für n i 1 H'n ( x ) = 2n Hn-1A x ) speziell:
H 0 ( x )
Orthogonalitfitsrelation: + OD 2 f e~ * Hn ( x ) H• ( x ) - «o
=
a =
(3):
E„
=
(n
anharmonischer Oszillator Jlforse-Potential V(x)
= D0-
(1 - e b ) 3
~J~*
+
h
i(x)=
2x
dx = 2 " n ! w 1 / 3 6nm a 2 N = * 1 / 3 2n n.
Normierungskonstante:
Eigenwerte:
H
4
n
2
fi
"o
(fflr biatomare Moleküle)
; b = c-(
x -
x0)
; c = «
[6.12]
/_2£ / ' on - 1 2
D0 B i n d u n g s e n e r g i e im G l e i c h g e v i c h t s a b s t a n d in 10 D experimentelle Bindungsdissoziationsenergie D o= D + 4 " (Nullpunktsenergie) Diese Funktlons- und zugleich Energie-Suche ?elgt das Programm 16 160
erg
an den Beispielen (1) Elektron Im Kasten, (2) harmonischer und (3) anharmonischer Oszillator für das Wasserstoff-Molekül. Das Programm Ist dabei so gestaltet, daß auch die spektroskopischen Daten anderer biatomarer Moleküle verwendet werden können. Im nachstehenden Bildschirmausdruck wird nach Auswahl aus den drei Beispielen zunächst die Voreinstellung gezeigt: - Energie-Startwerte ega, egb,
_g
- für Beispiel 1 die Zahlenwerte der Kastenlänge 1 in 10
cm, des
Wandpotentials VO In eV, für Beispiel 2 und 3 die Zahlenwerte des Gleichgewichtsabstandes rg in 10~ cm, der Grundschwlngungswellenzahl nO in cm 1 , der reduzierten Masse mu in u, sowie für (3) die Bindungsenergie DO in eV im Glelchgewlchtsabstand. Die anschließende Anzeige der Standardeinstellung betrifft: - die Genauigkeitsschranke in der Energiesuche eps in eV, - die Anzahl der Zeichenpunkte pn, mit der die Integrationsschrittweite festgelegt wird, - die maximale Anzahl der bei der Iteration zu zeichnenden Kurven zk, - die Intervallgrenzen der x,y-Bereiche, sowie schließlich - die Integrationsstartwerte yQ und x 0 , die dem Funktionswert der Eigenfunktion bzw. ihrer Ableitung an der Startstelle der Integration entsprechen. Im Programm kann diese Integration von links nach rechts über das gesamte Intervall oder vom Gleichgewichtsabstand in der Mitte nach rechts mit anschließender Integration nach links eingestellt werden. Dabei ist zu beachten, daß für Eigenfunktionen, die symmetrisch zur Gleichgewichtslage sind, y Q = 1 und xQ = 0 sind, während für antisymmetrische Funktionen y 0 = 0 und x 0 i 1 gilt. (Im Programm muß zur graphischen Darstellung xQ ä 10Ö eingestellt werden), über die Dialog-Zeile 26 wird zeilenweise nach einer gewünschten Änderung der vorgegebenen Einstellungen gefragt. Bildschirm Quantenchemie mit Personal Computern Programm: Eigenwerte des Elektrons im Kasten. Oszillators Filename: EIGENWER.BAS Kapitel 6: Operatoren und Eigenwerte (c) Walter de Gruyter & Co. (1990) Autor: F. Marschner Version: 1.0 SCREEN 2 (1)
Elektron im Kasten
(2)
harmonischer Oszillator
151
(3)
anharmonischer Oszillator
Auswahl (1)
Elektron im Kasten
in Dialog-Zeile 2 6 : Frage nach Auswahl, Voreinstellung und Standardeinstellung. Voreinstellung e g a = 1 . 2 4 8 4 3 9 eV egb= 0 . 6 2 4 2 2 0 eV 1= 1 2 . 0 0 0
V0=
1 0 . 0 0 0 0 eV
Standardeinstellung eps= x[ y0=
0 . 1 0 0 0 0 eV pn= 0.0000 0
; x0=
2 6 zk=
12.0000
]
y(
20 -2.0000 ;
2.0000 1
60000000
in Dialog-Zeile 26: Frage nach Änderung der Zellenwerte und Wahl der I n t e g r a t i o n s d a r s t e l l u n g (0) Mitte
• r e c h t s oder ( 1 ) links
• r e c h t s Integrieren
Programm 10 eis: 12 t i t e l $ ( 0 ) = " Quantenchemie mit Personal Computern " 14 t i t e l $ ( l ) = " Programm: Eigenwerte des E l e k t r o n s im Kasten, des harm. und anharm. Oszillators" 16 t i t e l $ ( 2 ) = " Filename: EIGENWER.BAS" 18 t i t e l $ ( 3 ) = " Kapitel 5: Operatoren und Eigenwerte" 20 titel$(4)=" (c) Walter de Gruyter & Co. (1990)" 22 t i t e l $ ( 5 ) = " Autor: F. Marschner Version: 1.0" 2 6 for i = 0 to 6:print t i t e l $ ( i ) : n e x t 1 30 key 16, c h r $ ( & H 0 8 ) + c h r $ ( 3 3 ) : ' A l t - F 4 0 on k e y ( 1 6 ) gosub 1100 6 0 k e y ( 1 6 ) on 100 rem Programm Eigenwerte 105 defdbl a - z 110 rem Dimensionierung des Diff.glgs.systems 116 n=2:'Grösse des Gleichungssystems 120 dim y ( n ) , y l ( n ) , d ( n ) , k l ( n ) , k 2 ( n ) , k 3 ( n ) . k 4 ( n ) 126 n l = 6 0 0 : d i m dynamic x x ( 2 * n l ) , y y ( 2 * n l ) : ' Koordinaten 135 dim dynamic a ( n l ) , b ( n l ) : ' H i l f s k o o r d i n a t e n zum Sortieren 140 dim b l l d ( 4 0 0 0 ) , z e i l e $ ( 2 4 ) 145 rem Konstanten 150 pi=4*atn(l) 166 c 0 = 2 . 9 9 7 9 2 4 5 8 e l 0 : ' L i c h t g e s c h w . in cm/s 160 n a = 6 . 0 2 2 1 3 6 7 3 6 e 2 3 : ' A v o g a d r o - K o n s t a n t e 165 h p = 6 . 6 2 6 0 7 5 6 4 e - 2 7 : ' P l a n c k - K o n s t a n t e in erg s 170 r e i = l e - 8 : ' U m r e c h n u n g s e i n h e i t Länge 176 e i = l e - 1 2 : ' U m r e c h n u n g s e i n h e i t Energie 180 eVerg=1.602"ei:'Umrechnung eV in erg 185 dialog$=" Fortsetzung: [Enterl F l - F l O - T a s t e n - M e n u : |Alt]-F Ende: [Esc) " 187 gosub 1000
162
190: rem Eingabe 195 ccc=2 200 zeil=7:kol=l 210 locate zeil.kol 215 input "Eingabe: Bildschirmkonstante SCREEN >= ( 0 ) ";ccc 220 w a h l $ ( l ) = " ( 1 ) Elektron im Kasten" 225 w a h l $ ( 2 ) = " ( 2 ) harmonischer Oszillator" 230 w a h l $ ( 3 ) = " ( 3 ) anharmonischer Oszillator" 235 wn=3 240 for i = l to w n : z e i l = z e i l + l : l o c a t e zeil,kol:print wahl$(i):next i 245 d i a l o g $ = " B i t t e wählen: ( 1 ) ( 2 ) (3)":gosub 1000 250 w a h l = v a l ( a $ ) 255 z e i l = z e i l + l : l o c a t e zeil,kol:print "Auswahl":print wahl$(wahl) 260 if wahl>l then gosub 7000:'Voreinstellung Oszillator 265 on wähl gosub 6000, 5000, 5500 275 n=2: 'Grösse des Gleichungssystems 285 rem I n t e r v a l l g r e n z e f ü r x - A c h s e 290 kn=2:' I n t e r v a l l g r e n z e n - P a r a m e t e r (kn->°°, x a - > 0 , x e - > 2 r g ) 295 xa=rg/kn:'linker Wert (Startwert f ü r x ) 300 x e = r g ' ( 2 - l / k n ) : ' ( 3 / 2 ) * r g rechter Rand (Endwert) 305 if w a h l = l then x a = 0 : x e = l : r g = l / 2 : 'für Teilchen im Kasten 315 rem Window Koordinaten 320 a l = x a : a 2 = x e : 325 b l = - 2 : b 2 = 2 340 x 0 0 = r g : ' x - S t a r t w e r t im Gleichgew.abstand 355 f a $ = " $ ( a s ) " : f s $ = " $ ( s ) " : 'symm. bzw. antisymm. Funktion 360 if y 0 = 0 then f $ = f a $ + " " + f $ eise f $ = f s $ + " " + f $ 365 if o p t = l then x 0 0 = x a : ' x - S t a r t w e r t links, sonst Mitte 375 e p s = l e - l : ' G e n a u i g k e i t s s c h r a n k e für Energie 385 zahlmax=20:'max. Kurvenzahl der Iteration 390 ymax=100:'0bergrenze f ü r y - W e r t e zur Beschleunigung in der Testphase 400 n l = 2 5 : ' A n z a h l der Zeichenpunkte maximal 300 s.a. Zeile 125 410 h = ( x e - r g ) / n l : ' S c h r i t t w e i t e über rechte halbe Breite 415 if o p t = l then h = ( x e - x a ) / n l : ' S c h r i t t w e i t e über Gesamtbreite 425 dialog$="mit Voreinstellung (J/N)":gosub 1000 430 if a $ = " N " then gosub 7500:'Anderung der Energiestartwerte, Eingabe neuer molekülspektroskopischer Daten 435 dialog$="mit Standardeinstellung (J/N)":gosub 1000 440 if a $ = " N " then gosub 8000:'Anderung der Z e i c h e n - und Rechengenauigkeit, Eingabe der I n t e g r a t i o n s s t a r t w e r t e 450: rem Bildschirm und Window 470 screen ccc: if ccc=0 then 540 480 x w = l : y w = 1 0 : 'Fensterpunkt links oben 490 if c c c = l or ccc=7 then y w = 3 0 492 ccs=2: if c c c = l or ccc=2 then c c s = l 495 b r e i t = 3 1 7 * c c s : h o c h = 1 9 0 - y w : f o n d = 0 : m o t i v = & h a a a a 496 if ccc=9 or ccc=10 then h o c h = 3 2 0 - y w 497 if c c c = l l or ccc=12 then h o c h = 3 8 0 - y w 500: v i e w ( x w , y w ) - ( x w + b r e i t , y w + h o c h ) , f o n d , 3 510 window ( a l , b l ) - ( a 2 , b 2 ) 520 line ( r g , b l ) - ( r g , b 2 ) , , , m o t i v : l i n e ( a l , 0 ) - ( a 2 , 0 ) , , , m o t i v 540: rem Konstante 1/a in SeTiröd/nger-Gleichung Beispiel 3 550 f=8*pi"pi*mu/hp/hp 555 anfang=timer:zahl=l:'Kurvenzähler 560 rem 1. Kurvenpunkte rechnen und zeichnen
153
565 570 575 580 585 590 600 610 615 620 635 640 645 650 655 660 670 675 680 700: 701 702 704 706 710 715 720 730 800
eg=ega: yl(l)=y0: yl(2)=x0: zz=0:gosub 14000: ' Runge-Kutta-Verfahren mit Anzeige a$=inkey$:if a$=chr$(27) then 700 vza=sgn(y(l)):vz=vza zahl=zahl+l rem 2. Kurvenpunkte rechnen und zeichnen eg=egb: yl(l)=y0: y l ( 2 ) = x 0 : 'für automat. Änderung des Startwertes der Ableitungsfunktion y l ( 2 ) = x x 0 0 setzen, s.a. Zeile 2070 zz=0: if ccc>0 then locate l , l : p r i n t space$(39'ccs); gosub 14000 a$=inkey$:if a$=chr$(27) then 700 vzb=sgn(y(l)):vz=vzb if v z b = v z a then dialog$=" kein Vorzeichenwechsel! eine Taste!":gosub 1000:goto 700 gosub 2000:'Bisektionsverfahren gosub 1050:on wähl gosub 16500, 16600, 16700:'Anzeige g$="(N)eu (E)nergie (D)arst. (K)urve (P)otential Ende: [Esc]" h$="(N) (E) (D) (K) (P) [Esc]" if ccc=l or ccc=7 then dialog$=h$ eise dialog$=g$ gosub 1000 if a$="N" then screen 2:screen 0:goto 190 if a$="E" then gosub 7500:gosub 8180:goto 450 if a$="D" then cls:gosub 8000:goto 450 if a$="K" then gosub 12600:goto 700 if a$="P" then gosub 12400:goto 700 if a$=chr$(27) then end else goto 700
Subroutinen zur Bildschirm- und Diskettenbehandlung sowie Dialog wie in den vorangehenden Programm-Beispielen 2000: rem Subroutine: Bisektions- oder 'Intervallhalbierungsverfahren nach dem Zwischenwertsatz: ändert 'eine stetige Funktion in einem Intervall ihr Vorzeichen, so hat 'sie dort mindestens eine Nullstelle. Im Fall einer 'Vorzeichenänderung zwischen den beiden Funktionswerten y ( l ) [ e g a ] 'und y ( l ) [ e g b ] am Rand des Intervalls )xa;xe] wird iterativ in 'Form des binären Suchens aus den Energie-Startwerten ega und egb 'ein Energiewert egm mit ym[egm]=l or xj
'xH eines
Bildungswärme
E e, 1 + eines
A Hf = E tot +
- a
- 1
r ab
-
r a.b
+
e
1«
- 1 r xH
xH J xH
Moleküls: nach
MINDO/3
core
£ E a0 b ab
Moleküls: E
ab
r
ab
gilt
Elektronenenergie
E,tot = 4
2
2
Gesamtenergie Eel
e
ah"
-
180
E
E
- r xH
x = O, N
Atomparameter im MINDO/3 - Verfahren
[6.13|
I. ausgewählte Elemente der 1. und 2. Periode Atom a:
H
K
B
1,300000
Ks P
C
N
0
F
1.211156
1,739391
2,704546
3,640575
3,111270
0,972826
1,709645
1,870839
2,168448
1,419860
nachfolgende Werte in eV I
s
I
p AH f -E a
13,605
15,16
21,34
27,51
35,30
8,52
11,54
14,34
17,91
20,89
2,2599
-u s s -u (ss (PP (ss (pp (sp (pp
7,4124
4,9014
2,5834
61,70
119,47
187,51
307,07
475,00
12,505
33,61
51,79
66,06
91,73
129,86
25,11
39,18
56,40
78,80
105,93
12,848
ss) 12,848 pp) pp) p'p') sp) lpp->
8,958 10,59 8,86 9,56 7,86 1,81 0,50
10,833
12,377
13,985
16,250
12,23 11,08 11,47 9,84 2,43 0,62
13,59 12,98 12,66 11,59 3,14 0,70
15,42 14,52 14,48 12,98 3,94 0,77
16,92 16,71 17,25 14,91 4,83 0,90
II. ausgewählte Elemente der 3. Periode Atom a:
Si
KS K
P
P
S
C1
1,629173
1,926108
1,719480
3,430887
1,381721
1,590665
1,403205
1,627017
nachfolgende Werte in eV I
s Ip
AHf -E -U
9
17,82
21,10
23,84
25,26
8,51
10,29
12,41
15,09
4,5978
a S
- U pp r aa (ss | ss) (pp|pp) (ss | pp) (ppjp'p') (spfsp) (pp'|pp')
0,8180
12,505
pp
raa
5,8860
43,70
3,4613
2,8476
1,2557
90,98
150,81
229,15
345,93
39,82
56,23
73,39
98,99
29,15
42,13
57,25
76,43
7,57
9,00
10,20
11,73
9,82 7,31 8,36 6,54 1,32 0,38
11,56 8,64 10,08 7,68 1,92 0,48
12,88 9,90 11,26 8,63 2,26 0,54
181
15,03 11,30 13,16 9,97 2,42 0,67
Bindungsparameter im MINDO/3 - Verfahren B
a b
[6.14]
-Parameter
I. ausgewählte Elemente der 1. und 2. Periode Atom a: H B C N 0 P
H 0,244770
B 0,185347 0,151324
C
N
0,315011 0,250031 0,419907
0,360776 0,310959 0,410886 0,377342
O 0,417759 0,349745 0,464514 0,458110 0,659407
0,195242 0,219591 0,247494 0,205347 0,334044 0,197464
II. ausgewählte Elemente der 3. Periode Atom a: H C o F Si P S C1 a
a b
Si 0,289647 0,411377
P
C1
0,320118 0,457816 (0,5000) 0,4700 0,3000
0,220654 0,284620
0,231653 0,315480
0,291703 0,311790
0,2800
0,202489 0,258969 -Parameter
I. ausgewählte Elemente der 1. und 2. Periode Atom a:
H
H B C N 0 F
1,489450
N
B 2,090352 2,280544
1,475836 2,138291 1,371208
O
0,589380 1,909763 1,635259 2,029618
0,478901 2,484827 1,820975 1,873859 1,537190
1,700698 1,761370
2,089404 1,676222
3,771362 2,862183 2,726913 2,861667 2,266949 3,864997
II. ausgewählte Elemente der 3. Periode Atom a: H C O F Si P S C1 (kursiv:
Si 0,940789 1,101382
C1
P 0,923170 1,029693 1,6625 1,7600
(0,8700)
0,918432 1,186652
1,5400 1,751617
1,792126 Werte nach G. Frenking, H. Goetz, F. Marschner)
Zusätzlich wird eine Übersicht der in dem QCPE-Programmpaket MOPAC enthaltenen Elemente angegeben, für die MINDO/3- bzw. MNDO-Parameter vorhanden sind.
182
Elemente im MOPAC-Programm Be H Be B C N 0 F AI Si P S C1 Br I
X
B
z
S
C1
X
X
X
X
X
X X
X
X
X X X
X X X
AI X
X
X
X X
X X
X X
X X
X X X
[6.15] Si
Br
z
x X X X X X X X
X
X X
X
X X X X
X
z X
X X
X X
X X
X X
X
x MINDO/3- und MNDO-, z nur MNDO-Parameter integriert Die Optimierung der Bindungsparameter erfolgt im MNDO-Verfahren im Vergleich zu MINDO atom- und nicht bindungsspezifisch. Außerdem werden zur Eichung der Parameter zusätzlich zu den Bildungsenthalpien und Geometrien der Standardmoleküle auch die experimentellen Ionisierungsenergien und Dipolmomente verwendet. Die Geometrieoptimierung wird ebenfalls nach dem
Davidon-Fletcher-Poire/Z-Verfahren
vorgenommen. Beide Methoden berechnen
offenschallge Moleküle nach dem Halb-Elektronen-Verfahren (engl., h a l f electron method), in der ein ungepaartes Elektron als halbes a - und halbes ß-Elektron betrachtet wird. Dadurch ist es möglich eine offenschallge Struktur auf die Berechnung einer geschlossenen Schale zurückzuführen. MINDO/3 und MNDO berücksichtigen die Näherungsfehler der SCF-Methoden sowie auch die Korrelationsenergie implizit in den Parametern. Dies führt zu verhältnismäßig großer Genauigkeit im Bereich der Verbindungsklassen der Bezugsmoleküle. Die durchschnittliche Fehlerabweichung von Verbindungen der ersten Achterperiode des periodischen Systems der Elemente zeigt abschließend nachstehende Obersicht. Fehler in der Reproduktion experimenteller Befunde MINDO/3
MNDO
Bildungsenthalpien
2,63 kJ/mol
1,50 kJ/mol
Bindungslängen
2,2- 10" 1 2 n
1,4- 10" 1 2 m
Bindungswinkel
5,6°
2,8"
Ionisationsenergien
0,71 eV
0,48 eV
Dipolmomente
0,49 D
0,30 D
183
[6.16]
6.6 Molekülmechanik: das empirische MM-Modell Ziel quantenchemischer Arbeiten ist nicht nur die möglichst exakte Reproduktion statischer Moleküleigenschaften, viel größeres Interesse hat der Chemiker an der Moleküldynamik und der chemischen Reaktivität. Während die Moleküldynamik sich primär mit der Suche nach der stabilsten Konformation eines Einzelmoleküls beschäftigt, ist die Untersuchung der Reaktivität von Molekülen ein viel umfassenderes Projekt. Fragen der Reaktivität werden heute im Rahmen der Theorie des Übergangszustandes (engl, transition State theory) behandelt. Diese statistisch-mechanische Theorie, die auch als Theorie des Reaktionsübergangszustandes oder des aktivierten Komplexes bezeichnet wird, ist neben der Stoßtheorie die gegenwärtig am häufigsten benutzte Theorie zur Berechnung oder Abschätzung von absoluten Reaktionsgeschwindigkeiten. Übergangszustände und Zwischenstufen einer Reaktion entsprechen Sattelpunkten und Minima auf einer Reaktionshyperfläche. Die Suche nach diesen Punkten kann mit der bekannten "Suche nach der Stecknadel im Heuhaufen" verglichen werden und wird heutzutage überwiegend mit den in den vorangehenden Abschnitten beschriebenen MO-Methoden semiempirisch oder ab-initio durchgeführt. Als hilfreich für erste Orientierungen bei dieser Suche können sich qualitative Untersuchungen erweisen. Beispiele für solcherart erfolgreiche Anwendungen sind: a) die Woodward-Hoffmann-Regeln
zur Erhaltung der Orbitalsymmetrie bei
pericyclischen Reaktionen, b) das Konzept der Bestimmung von Lokalisierungsenergien im Rahmen von HMO und c) die Grenzorbitalmethode im Rahmen der Störungsrechnung ebenfalls in HMO. Für die Darstellung mit einem PC eignen sich mehr die beiden zuletztgenannten Beispiele. Daher wird das Thema Reaktivität innerhalb des HMO-Modell's im Kapitel 8 behandelt. Auch die Konformationssuche der Moleküldynamik ist äußerst aufwendig, wenn das zu untersuchende Molekül über eine große Anzahl innerer Freiheitsgrade verfügt, wie z.B. Hexadecan mit 50 Atomen. In diesem acyclischen Alkan können Millionen von Minima auftreten. Das Molekül fluktuiert zwischen mehreren Konformationen. Es ist damit nicht mehr möglich von der stabilsten Konformation zu sprechen. Fluktuierende Strukturen lassen sich heutzutage im Computerexperiment
184
modellieren. Analog zum computergestützten Entwickeln im Ingenieurbereich (CAD, engl. Computer a6slsted design) wird in diesem Zusammenhang von einem computergestützten Moleküldesign (CAMD, engl. Computer assisted molecular design) gesprochen. In einem Computerexperiment wird die Reaktion eines Modells auf äußere Störungen untersucht, übertragen auf das Problem der Konformationssuche muß also die zeitliche Entwicklung der Geometrie eines Moleküls in einer Folge von reversiblen Änderungen simuliert werden. Da die Optimierung einer Geometrie quantenchemisch gleichbedeutend mit der Suche nach dem Minimum auf einer Energie-Hyperfläche ist, genügt es oftmals bei guter Startgeometrie, d.h. bei nicht all zu großer Entfernung vom Minimum, die Koordinaten der Atome so lange zu variieren, bis die Energie nicht mehr niedriger wird. Diese Art der Geometrieoptimierung wird auch als Struktur-Relaxieren
bezeichnet.
In der Praxis genügt es oftmals die Konformationssuche durch Variation der Torsionswinkel auszuführen. Bei höheren Anforderungen an die Genauigkeit werden mit einem Raster plausible Startkonformationen ausgewählt, die anschließend relaxiert werden. Die Berechnung der Energie kann dabei nach den beschriebenen quantenchemischen Methoden oder im Rahmen der K r a f t f e l d - M e t h o d e molekülmechanisch erfolgen. Die ( V a l e n z ) - K r a f t f e l d - M e t h o d e (engl, valence force f l e l d method) wird auch als molekülmechanisches Modell (MM, engl, molecular mechanics model) bezeichnet. Sie ist ein empirisches Rechenverfahren mit dem großen Vorteil, daß der Rechenaufwand nur mit dem Quadrat der Zahl der Atome steigt. Daher eignet sie sich auch für Computersimulationen der Moleküldynamik und wird in der medizinisch-chemischen Forschung an biologisch wirksamen Substanzen eingesetzt. Es existieren MM-Computer-Programme, die für den PC-Einsatz geeignet sind. Hinweise dazu finden sich im Literaturverzeichnis. Im Folgenden soll eine kurze Darstellung des K r a f t f e l d - M o d e l l s gegeben werden, das in seinen Ansätzen auf D. H. Andrews insbesondere von N. L. Allinger
(1930)
zurückgeht und
etwa seit 1974 für den Rechner entwickelt
wurde. Grundlage ist wie bei den MO-Methoden die Born-Oppenheimer-N&heTunz, der die elektronische Energie der Sahrödj.n|*er-Gleichung das Potential für die Bewegung der Atomkerne darstellt. Diese Energie ist eine Funktion der Kernkoordinaten und beschreibt somit eine Energie-Hyperfläche. Aus dem Gradienten der Energie-Hyperfläche lassen sich die Kräfte berechnen, die auf die Kerne wirken. - Während also in der MO-Theorle die Bewegung der
185
in
Elektronen in einem fixierten Kerngerüst u n t e r s u c h t wird, b e t r a c h t e t die Molekülmechanik die Bewegung der Kerne in einem Feld elektronischer Kräfte. Minima auf der Energie-Hyperfläche entsprechen k r ä f t e f r e i e n Anordnungen der Atome. An diesen Stellen sind alle Abstände und Winkel, also die Geometrie eines Moleküls im Gleichgewicht. Gleichgewichtsgeometrien werden in der Chemie auch als Konformationen bezeichnet. Die Konformation eines Moleküls läßt sich in analytischer Form approximieren durch eine Funktion der interatomaren Bindungslängen, Bindungs- und Torsionswinkel, sowie der und van-der-IPaa./s-Wechselwirkungen. Eine solche Funktion wird
C o u l o m b -
nachstehend skizziert. [6.17]
Valenzkraftfeld Kraftfeld:
=
Energie
der
-
grad
(V)
Elektronen
Potential
der V
E
Potential
I
k k
V
kd
( i
v ,eq
-
cos
(n d i> d
der
1. B i n d u n g s 1 ä n g e n
r .b, «q )
b
Atomkerne
rt
Kraftkonstante
2. B i n d u n g s w i n k e l
&V
3. T o r s 1 o n s w i n k e 1
6
y2 then y2=y:' Maximum next x ex=breit/(b2-bl):pl=3 if y 2 = y l and y2=0 then ey=ylo:goto 1830 if y 2 = y l and y2 0 then ey=hoch/y2:goto 1770:'konstante Funktion ey=hoch/(y2-yl): if b2>=0 and bl=0 and y l < = 0 then y = h o c h + y l ' e y : l i n e ( l + x l o , y + y l o ) - _ (l+xlo,y+ylo-pl) if y2>=0 and y l < = 0 then y=hoch+yl"ey:line ( b r e i t + x l o , y + y l o ) - _ (breit+xlo,y+ylo-pl) for x = bl to b2 step schritt on bb gosub 2430,2460,2490,2520,2560,2590,2630,2660,2681,2690 sx=(x-bl)'ex if y>y2 then y = y 2 if y < y l then y = y l if y 2 = y l and y2=0 then sy=0:goto 1900 sy=hoch-(y-yl)*ey pset(sx+xlo,sy+ylo) next x if w$="w" or w$="ff" then 1970 y = h o c h + y l " e y + 3 : x = - 7 2 : b = b l ¡gosub 2120:'x-Achsen-Beschriftung
200
1940 1950 1960 1970
y=hoch+yl *ey+3:x=breit-l:b=b2:gosub 2120:'x-Achsen-Beschriftung y = h o c h + 8 : x = a b s ( b l ) " e x - 4 0 : b = y l : g o s u b 2120:'y-Achsen-Beschriftung y = - 1 0 : x = a b s ( b l ) " e x - 4 0 : b = y 2 : g o s u b 2120:'y~Achsen-Beschriftung if a a = 2 then f r a g e $ = f $ + " neu (j) Schrift/Menu (2"m) Multi-Graph (2*w)":goto 2000 1980 if a a = 4 then f r a g e $ = f $ + " Multi-Graph (2*w) Beschriftung/Menu (2*m)":goto 2000 1990 f r a g e $ = f $ + " Neu (j) Integral (i) Menu (2*m) Multi-Gr.(2"w)" 2000 gosub 2160:if a$=chr$(27) then end 2010 if a$="j" or a $ = " J " then cls:goto 1330 2020 if a$="i" or a$="I" then return 2030 if a a = 4 or bb=9 then fragel=mid$(f$,l,len(f$)):goto 2050 2040 frage$="f(x)="+mid$(f$,4,len(f$)): 2050 anzeige$=anzeige$+" "+frage$ 2060 locate 3,l:for i = l to 2:print space$(79);:next i:locate 3,1 2070 print anzeige$:gosub 2160: 2080 if a$="m" or a$="M" then cls:goto 440 2090 if a$="w" or a$="W" then if a a = 4 then w$=a$:goto 1440 2100 if a$="w" or a$="W" then w$=a$:goto 1340 2110 return 2120:if x>breit+10 then x=breit/2:'Beschriftung 2130 if y>hoch+10 then y=hoch/2 2140 locate ( y + y l o ) / 8 + l , ( x + x l o ) / 8 + l : p r i n t using " # # # . # # # # " ; b 2150 return 2160:locate 25,l:print space$(79);:'Dialog-Subroutine im screen 2 2170 locate 25,l:print frage$; 2180 a$=inkey$:if a$="" then 2180 2190 :locate 25,l:print space$(79);: 2200 if a$=chr$(27) then end else return 2210: rem Verteiler für Integranden-Funktion 2220 frage$="(l)Laguerre- (2)Hermite-Integrandenfunktion":gosub 680 2230 zzz=val(a$) 2240 zz=9: 2250 frage$=titel$(21):gosub 680: 2260 if a $ = " s " or a $ = " s " then 2270 else 2310 2270 frage$=titel$(22):gosub 680: 2280 if a $ = " s " or a$="S" then 2290 else 2310 2290 frage$=titel$(23):gosub 680: 2300 if a $ = " s " or a$="S" then 2250 2310 aa=val(a$):if a a = 0 then cls:goto 440 2320 if a a = l or a a = 4 then 2360 2330 if a a = 3 then 2360 2340 bitte$="(7-Wert eingeben ":gosub 2790: 2350 locate l,l:print space$(79);:locate l,l:input "o = ",sig:locate 1,1: print space$(79);: 2360 cdc=aa:aa=3:gosub 1330:aa=cdc 2370 on aa gosub 730,730,940,940,940,940 2380 frage$="letzte Zeile löschen (j) Menu (m) Ende (|Esc])":gosub 680 2390 if a$=chr$(27) then end: 2400 if a$="m" or a$="M" then cls:goto 440 2410 frage$="f(x)="+mid$(f$,l,len(f$)):gosub 2160:goto 2380 2420 return
201
'Funktionswertberechnung 2430: y = l : i f z z z = l then y = f n y 7 ( x ) : f f $ = " ' ( " + m i d $ ( f 7 $ , 4 , l e n ( f 7 $ ) ) + , T : 2440 if zzz=2 then y = f n y 8 ( x ) : f f $ = " ' ( " + m i d $ ( f 8 $ , 4 , l e n ( f 8 $ ) ) + " ) " : 2450 y = y * f n y l ( x ) : f $ = f l $ + f f $ : r e t u r n 2460: y = l : i f z z z = l then y=fny7(x):ff$="'("+mid$(f7$,4.1en(f7$))+")": 2470 if zzz=2 then y=fny8(x):ff$="*("+mid$(f8$,4,len(f8S))+")": 2480 y=y"fny2(x):f$=f2$+ff$:return 2490: y = l : i f z z z = l then y=fny7(x):ff$=""("+mid$(f7$,4,len(f7$))+")": 2500 if zzz=2 then y = f n y 8 ( x ) : f f $ = ' " ( " + m i d $ ( f 8 $ , 4 , l e n ( f 8 $ ) ) + " ) " : 2510 y=y"fny3(x):f$=f3$+ff$:return 2520: if abs(x) 9 0 konrot., om2=180-oml disrot. 492 aa=0:ae=90:sa=30:t=0 494 for a=aa to ae step sa 496 omla=aa: 498 if wahl=2 then om2a=180-aa 500 om2a=aa 602 om=a'pi/180:rem Inklinations-Winkel im Bogenmaß 504 oml=om:om2=om 506 if wahl=2 then om2=pi-om: 508 p=0:xl=p:yl=fnSi2p2p(oml,om2,p,t):'l. Punkt 510 x=xl:y=yl 512 locate 2,l:print using form2$;omla,oml*180/pi,om2a,om2*180/pi 514 locate l,l:print using form$;zeit,t,x,y,wahl,typ$ 516 for p=pa to pe step sp 518 zeit=timer-anfang 520 x2=p: 522 y2=fnSi2p2p(oml,om2,p,t):typ$="2p2p-Inklination" 524 x=xl:y=yl 526 locate 1,1.-print using form$;zeit,t,x,y,wahl,typ$ 528 if ybl then line (xl,yl)-(x2,y2),,,motiv2: , pset (x,y) 530 a$=inkey$:if a$=chr$(27) then end 532 xl=x2:yl=y2 534 next p 536 next a 538 end sub 542 544 546 548 550 552 554 556 558 560 562 564 566 568 570 572 574 576 578 580 582
sub Overlap(tp$) shared motiv2,b2,bl,typ$,p,t rem t.p-Kurven-Auswahl ta=0:te=0.75:st=.25 pa=0:pe=10:sp=.25 anfang=timer f o r m $ = " # # # s t = # # . # # # p = # # . # # S = # # . # # # # # # &" for t=ta to te step st p = 0 : x l = p : y l = f n S t y p ( t p $ , p , t ) : ' l . Punkt x=xl:y=yl for p=pa to pe step sp zeit=timer-anfang x2=p: y2=fnStyp(tp$,p,t): locate 1,1 ¡print using form$;zeit,t,x2,y2,typ$ if y2bl then line ( x l , y l ) - ( x 2 , y 2 ) , , , m o t i v 2 a$=inkey$:if a$=chr$(27) then exit sub xl=x2:yl=y2 next p next t end sub
212
586 588 590 592 594 596 598 600 602 604 606 608 610 612 614 616 618
sub Ueberlappung(tp$,t) shared motiv2,b2,bl,typ$,p pa=0:pe=10:sp=.25 anfang=timer f o r m $ = " # # # s t = # # . # # # p = # # . # # S = # # . # # # # # # &" p = 0 : x l = p : y l = f n S t y p ( t p $ , p , t ) : ' l . Punkt x=xl:y=yl for p=pa to pe step sp zeit=timer-anfang x2=p: y2=fnStyp(tp$,p,t): locate l,l:print using form$;zeit,t,x2,y2,typ$ if y2bl then line ( x l , y l ) - ( x 2 , y 2 ) , , , m o t i v 2 a$=inkey$:if a$=chr$(27) then exit sub xl=x2:yl=y2 next p end sub
622 sub Integralwertanzeigen(tp$,p,t) 624 shared motivi,b2,bl,typ$ 626 formi="Integralwert: t = # # . # # # p = # # . # # S = # # . # # # # # # &" 628 S=fnStyp(tp$,p,t): 630 locate l,l:print using form$;t,p,S,typ$ 632 line (p,0)-(p,S)„,motivi 634 end sub 638 640 642 644 646 648 650 652
sub TypEingabe(tp$,t) locate l,l:print space$(79); locate l,l:input "Oberlappungstyp ",tp$ locate 2,l:print space$(79); locate 2,1 input "Slater-Orbitalexponenten: zea.zeb ",zea,zeb t=(zea-zeb)/(zea+zeb) end sub
656 658 660 662 664 666 668 670 672 674 676 678 680
sub Eingabe(tp$,p,t) locate l,l:print space$(79); locate l,l:input "Oberlappungstyp ",tp$ locate 2,l:print space$(79); locate 2,1 input "Slater-Orbitalexponenten, Abstand in A: zea.zeb,r ",zea,zeb,r rem Konstanten ah=5.291772228743774e-l 1 :'Bohr-Radius in m r=r'le-10:'in m rem p,t-Parameter p=.5'(zea+zeb)*r/ah t=(zea-zeb)/(zea+zeb) end sub
682 rem Hauptprogramm 684: cls:ccc=0:screen ccc 686 titel$(0)=" Quantenchemie mit Personal Computern " 688 titel$(l)=" Programm : ttberlappungsintegrale von Slater-Orbitalen" 690 titel$(2)=" Filename : OVERLAP.BAS" 692 titel$(3)=" Kapitel 7: Integrale " 694 titel$(4)=" (c) Walter de Gruyter & Co. (1990)"
213
696 698
titel$(5)=" Autor: F. Marschner Version: 1.0" titel$(6) = "Graphische Darstellung der Funktionen von Slater-AO-Überlappungsintegralen" 700 titel$(7) = "Es stehen folgende Überlappungen zur Auswahl:" 702 titel$(8)=" I s i s ls2s 2s2s ls2psi 2s2psi 2psi2s 2psi2psi" 704 titel$(9)=" 2ppi2ppi 2ppi3dpi 3dpi3dpi 3dd3dd 2te2te 2tr2tr 2di2di " 706 titel$(10)=" (1) konrotatorische und (2) disrotatorische 2ppi2ppi-Inklination" 708 t i t e l $ ( l l ) = " (3) Anzeige einzelner Integralwerte" 710 for i=0 to 11 :print titel$(i):next i 711 input "Eingabe: Bildschirmkonstante SCREEN >= (1) ",ccc 712 input "Eingabe: Überlappungstyp oder Nr. ",a$ 714 wahl=val(a$): if len(a$)>3 then wahl=0: tp$=a$ 718 if wahl=3 then call Eingabe(tp$,p,t) 720 dialog$=" Weiter: (Enter] F l - F 1 0 - T a s t e n - M e n u : [Alt]-F Ende: [Esc|" 722 gosub 1000 724: screen ccc:cls:xw=3:yw=20:ccs=2:if ccc=l or ccc=7 then ccs=l 725 breit=310"ccs:hoch=180-yw:fond=0 726 if ccc=9 or ccc=10 then yw=30:hoch=290 727 if c c c = l l or ccc=12 then yw=40:hoch=330 730 view (xw,yw)-(xw+breit,yw+hoch),fond,3 732 rem F e n s t e r - I n t e r v a l l e 734 a l = 0 : a 2 = 1 0 : b l = - l : b 2 = l 736 window ( a l , b l ) - ( a 2 , b 2 ) 738 line ( a l , 0 ) - ( a 2 , 0 ) , , , m o t i v l : ' x - A c h s e 739 if a$="L" then 746 740 if wahl>0 and wahl24 then z z = l : c l s locate zz,l:input "Eingabe: Anzahl der Basisfunktionen ",n print "Anzahl der redundanten (ij.kl)-Integrale ".n'n'n'n nl=n*(n+l)*(n*n+n+2)/8 print "Anzahl der nicht redundanten (ij,kl)-Integrale ",nl n2=.5'n'(n+l) print "Anzahl der Einelektronen-Integrale (S,H) ",n2 print "Anzahl aller Integrale ",nl+n2 print "Anzahl der Integrale in der ZDO-Näherung ",n"n dialog$="Integrale anzeigen (J/N) F l - F 1 0 - T a s t e n - M e n u : [Alt)-F Ende: [Esc]" gosub 1000:if a $ = " J " then 58 dialog$="Neu-Eingabe (J/N) F l - F l O - T a s t e n - M e n u : [Alt]-F Ende: (Esel" gosub 1000:if a $ = " J " then zz=zz+7:goto 39 if a$="N" then end els print "Nr. redundante Integrale" kol=l zahl=0 for i = l to n.-'n-fache Ausfuehrung for j = l to n:'n-fache Ausfuehrung for k = l to n:'n-fache Ausfuehrung for 1=1 to n:'n-fache Ausfuehrung zahl=zahl+l if nbl and y= (8) ",ccc end if r a = 0 : r e = 5 : s r = . 5.screen ccc: on wähl gosub 633,637,646,654,666,685 dialog$="(M)enü ( E ) i n z e l - A n z e i g e F l - F l O - T a s t e n - M e n u : [ A l t ] - F Ende: [Esci" if c c c = l or ccc=7 t h e n dialog$="(M) (E) [Alt.J-F [Esc]" gosub 1000: if a$="M" t h e n cls:screen O:goto 616 if a$="E" t h e n call E i n g a b e u n d E i n z e l a n z e i g e . g o t o 624 if a $ = c h r $ ( 2 7 ) t h e n end goto 624
633: 635 636
if w a h l 9 = l t h e n c l s : p r i n t " I n t e g r a l - und E n e r g i e w e r t e f ü r H2+": call I n t e g r a l w e r t e a n z e i g e n ( r a , r e , s r ) return
637:
if w a h l 9 = l t h e n c l s : p r i n t " E l e k t r o n e n w e c h s e l w i r k u n g s i n t e g r a l e G r u n d z u s t a n d s e n e r g i e von H2"
229
und
639 640
call ElWWIntegralwerteanzeigen(ra,re,sr) return
646: if w a h l 9 = l then cls:print "Anzeige der MO-Energien und Matrixelemente" 648 call MOEnergieenanzeigen(ra,re,sr):'fuer H2 649 return 654: 655 656 657 658 659 660 661 662 663 664 665
ra=0:re=5:sr=.05:print " r a = ";ra;" r e = ";re;" s r = ";sr; dialog$="Aenderung (J/N)": gosub 1000:if a$="J" then input ,ra,re,sr al=ra:a2=re bl = - 1 :b2 = 1 call linkesFenster(ccc,al,a2,bl,b2) call Zeichnenderintegrale re=7 al=ra:a2=re bl = - 1 :b2= 1 call rechtesFenster(ccc,al,a2,bl,b2) call ZeichnenderElektronenWWIntegrale return
666: 667 668 669 670 671 673 674 675 676 677
re=7:sr=.05:print " r a = ";ra;" r e = ";re;" sr= ";sr; dialog$="Aenderung (J/N)": gosub 1000:if a$="J" then input ,ra,re,sr al=ra:a2=re bl = - 2 : b 2 = 2 call rechtesFenster(ccc,al,a2,bl,b2) call ZeichnenderEnergiendesH2Ions al=ra:a2=re bl=-2:b2=2 call linkesFenster(ccc,al,a2,bl,b2) call ZeichnenderElektronenEnergleundGesamtenergievonH2 return
685: call
EingabeundEinzelanzeige:return
Subroutinen 1000 - 1899 wie in vorangehenden Programmen. In den Bildschirm-Anzeigen und Abbildungen sind die Energieeinheit in Hartree ( = a.u.), der Abstand in a Q
angegeben.
Beispiel (Option 3) Anzeige der MO-Energien und Matrixelemente c(s) 1.00 1.50 2.00
2.50 3.00 3.50 4.00 4.50 5.00
0.5187 0.5384 0.5614 0.6855 0.6089 0.6301 0.6484 0.6634 0.6753
c(a) 1.8790 1.3488 1.0996 0.9607 0.8761 0.8215 0.7853 0.7608 0.7439
e(s) -0.6173 -0.5198 -0.4425 -0.3824 -0.3358 -0.2994 -0.2694 -0.2441 -0.2322
Fl 1
e(a) -0.4781 -0.1528 -0.0965 -0.0986 -0.1143 -0.1316 -0.1484 -0.1635 -0.1672
0.5381 0.5797 0.6303 0.6857 0.7416 0.7942 0.8409 0.8802 0.9119
230
-0.6074 -0.4694 -0.3709 -0.3055 -0.2637 -0.2373 -0.2203 -0.2093 -0.2028
F12 -0.5397 -0.4274 -0.3310 -0.2521 -0.1892 -0.1398 -0.1000 -0.0680 -0.0518
Hl 1 -1.2293 -1.0837 -0.9725 -0.8906 -0.8300 -0.7845 -0.7496 -0.7221 -0.6999
H12 -1.1650 -0.9204 -0.6992 -0.5165 -0.3734 -0.2655 -0.1862 -0.1291 -0.0887
Beim nachfolgenden Vergleich der Gesamtenergien von H^ und 6einem Kation nach der Roothaan-Hall-Methode
mit dem Experiment ist zu bedenken, daß sich
die Energien der Kurven aus der Differenz großer Beträge ergeben. Die prozentuale Genauigkeit der Differenzen ist wesentlich geringer als die der Einzelbeträge, deshalb f ä l l t der Vergleich mit dem Experiment nicht so gut aus: LCAO-MO-Rechnung H
2
Experiment
i = - ° ' 0 6 4 8 a uDissoziationsenergie
: E
170,13 kJ/mol
267,96 kJ/mol
Abstand Im Minimum r = 2 , 6 - a 0 = 1,323 A Hj
: E
1,06 A
= - 0 , 9 4 1 2 a.u. mit Interpolationsfehler = - 1 , 1 a.u. ohne Interpolationsfehler
Dissoziationsenergie 256,68 kJ/mol
457,34 kJ/mol
Abstand im Minimum r = 1,6-a Q
= 0,793 A
0,74 A
Für große Abstände müßte die Energie-Kurve des Rj gegen - 1 a.u. gehen. Dieses falsche asymptotische Verhalten i s t eine wesentliche Schwäche der MO-Methode. Zur weiteren kritischen Vertiefung sei auf die Literatur verwiesen (z.B. W. Kutzelnlgg). In der nachstehenden Graphik werden die Optionen (4) und (6) abgebildet.
231
r= 5.00 a0 T=-0.0079 au S= 0.0966 U= 0.2000 K=-0.0404 J=-0.1999 au
r= 7.00 a0
f
c
c . . .
^
Molekülorbitalenergie:
« „ If H j X >
z
>
c
C . . .
N1
^
Differentiation:
3N
N1
,
Z1
L(l
=
dz d c
i
dN
-
d c
ß
m
£
= 0
Säkulargleichungssystem:
^¿j^V
l jj (H ' i lf n >
c
(W '1
- e is
= 0
für
v
=
*l i,
»•n
2
EHT-Mat r i x e 1 e m e n t e :
Coulomb-P&Tame H
te r:
= a
=
-
ip
Ionisationspotential im V a l e n z z u s t a n d
Resonanz-Parameter: M u l l i i e n - N ä h e r u n g XHXV
*
°'
5
S
^ivUl
Wo 1 f s be r g - H e lmhol H
=
0,5
der
des
AO's
x
eines
Über1appungsdichte : +
*l
}
t z - G l e i chung :
k S
Die Diagonalelemente der
(a
+ a
Hückel-H&trlx
)
mit
z.B.
werden als
k =
1,76
Coulomb-Integrale
oder
-Parameter bezeichnet und können bei gleichartigen Atomen in einem Molekül, z.B. bei reinen Kohlenstoff-Verbindungen gleich gesetzt werden. Dieser Parameter beschreibt dann die Energie eines Elektrons an einem Zentrum im Feld der übrigen Elektronen. In erster Näherung entspricht er der negativen
234
Atoms
Ionisierungsenergie eines in diesem Atomorbital lokalisierten " - E l e k t r o n s . Die Nichtdiagonalelemente beschreiben die Wechselwirkungsenergie zwischen zwei Orbitalen und werden als Resonanz-Parameter bezeichnet. Veranschaulichen läßt sich dieser Parameter als überlappungsdichte durch Rückführung auf Überlappungsintegrale und Ionisierungsenergien mit der und Wolfsberg-Helmholtz-Gleichung.
MuUiken-Näherung
Im Rahmen des
eigentlichen HMO-Modells wird dieser Parameter auch reduziertes Resonanz-Integral genannt. Mit der Annahme gleicher Bindungslängen wird dieser Parameter zwischen Orbitalen nichtgebundener Atome Null gesetzt, was sicherlich nicht realistisch ist, jedoch damit gerechtfertigt wird, daß das Überlappungsintegral zwischen benachbarten p-Orbitalen mit " - S y m m e t r i e des Kohlenstoffs S=0,24 ist und in 2. Ordnung (S 2 =0,0576) vernachlässigt werden kann (s. dazu das Programm-Beispiel
18).
Wie im Kapitel 6 gezeigt wurde ist wiederum der spinfreie LCAO-MO-Ansatz Ausgangspunkt. Die Energieminimierung der ScArödi/iger-Gleichung mit dem in bezug auf die Eigenvektoren der Linearkombination l i e f e r t
Häckel-Operator
nach dem Variationsprinzip das bekannte Säkulargleichungssystem mit Überlappung. Zur Veranschaulichung der Matrixelemente ist eine mögliche Parameterwahl innerhalb von EHT angegeben. (8.21
Postulate
des
HMO-Modells
1. e r / r r - s e p a r i e r u n g : ( x , y , z )
=
w-Orbital:
V> ( x . y . z )
=
2. L C A O - M O - A n s a t z n-MO =
£
< X
I
H
J
V
a
%
s
ßuv
(
1
von
=
a
=
a
o
N
+
kuv
H
ß
H
a n t i symme t r i sch
bzgl.
x-y
(ohne
Überlappung):
So
— S ( l + S ) o o'
235
=
V
:
V-v
m i t
Mulliken's
+
= V
3
Coulomb-Integral,
ß mit
= ß
x-y
Hückel-Operators
Mode 1 1 - P a r a m e t e r : Veranschaulichung V
bzgl.
AO ' s
und
des
HIHhIXv>
V
(x,y,-z)
orthonormierten
Ciß
3. D e f i n i t i o n „
-v
symmetrisch
p z -AO
n
»i
«
mit
y> ( x , y , - z )
gebunden, ß
sonst
Resonanz-Integral
"magischer"
Formel:
ß
° ' 2 4 f ü r rc=c = 1 ' 4 A = ß M o d e 11 - E n e r g i e e i nhe i t
ß
reduziertes
=
= 0
Resonanz-Integra 1
HMO-Heteroatom-Parameter Element
Bindungstyp
mit
n-v
C=C i n C=C i n C-C i n
B
B-C B-N
N
N=C i n P y r i d i n N =C im P y r i d i n i u m - I o n N=N N=C i n Ani 1 i n N=C im P y r r o l N-C N-N 0=C i n K e t o n e n 0 =C i n O x o n i u m - V e r b O-C im P h e n o l a t i o n F - C im F l u o r b e n z e n
F P
P=C P-C P -C P=N S-C S=C
S C1 Br C H
3
«3 1
c 2
Benzen Ethen Butadien
in P ( V ) - V e r b . in P(V)-Verb . 1n P ( V ) - V e r b . in P ( V ) - V e r b . in T h i o p h e n o l in T h i o k e t o n e n
Cl-C
in
Chlorbenzol
Br-C
in
Brombenzol
C
im T o l u o l ,
C- c=
H3
- 1 .0 -1 , 0 0.6 2,0 0,5
Anzahl
*mit
dx z -d y
der z
»-Elektronen
des
1•0 1.5 1 .5
2 2 2 2
1,0 2,5 2,0
1.0 1.0 0.8
1 1 2
3,0
e
0.7
2
-0,3 -0.3 -0,2 -0,5
o.8: 0.7 0.8 0, 8
1 1 0 1
1 ,3 0,4
0.6 1,2
2 1
2
0,4
2
0,3
2
0
0
2
3 b„
b
1,0 1,0 1.0 0.8 1.0 0,8 0,6
i,
1 Hyperkonjugation
fIV
1,0 1, 1 0,9 0.7 0,6
1.5 -0,4
induktiv
3
k
»V 0 0 0
C
0
Beispielen
-0.1 0
1-2
0,8
2-3
3,0
-0,5
1 1 1
AO's X
-w-AO's
Die Postulate des HMO-Modells zeigen, daß der wesentliche Unterschied zu EHT darin besteht, daß in HMO die Überlappung vernachlässigt wird. Mit Hilfe von dimensionslosen Hetero-Atom-Parametern lassen sich die Matrixelemente allgemein auf die modellspezifischen a - und 3-Parameter des entsprechenden isokonjugierten w-Elektronensystems beziehen. Die Lösung des repräsentativen Eigenwertproblems liefert die //ile/rei-MO-Energien als lineare Funktionen der negativen Energiegrößen a und ß. Mit der Hückel-Energie
8 wird Jene
zusätzliche Stabilisierung beschrieben, die auftritt, wenn sich ein Elektron
236
über weitere benachbarte AO's delokalisiert. Die dimensionslosen EigenwertKoeffizienten xi
erlauben eine Klassifizierung der
Häckel-Molekülorbitale;
positive Werte von x £ entsprechen bindenden, negative Werte antibindenden MO's.
8.2 Die charakteristischen Gleichungen des HMO-Modella Nachstehend sind die charakteristischen Gleichungen dieses Modells aufgeführt. Ihre Anwendung auf physikalische und chemische Eigenschaften von Molekülen wie z.B. die Interpretation von Photoelektronen- und UV-Spektren, oder auf w-Dipolmomente und Reaktivitäten wird ausführlich In der Literatur beschrieben. In diesem Buch genügt eine exemplarische Beschränkung auf die Interpretation der HMO-Energien. HMO-Gl e 1 c h u n g e n Erwartungswert c
i
=
< v
il
H
des „l
der
w-Ladungsdi chte 9e q
/" ^
b
n
=
da
fj
# ö e i r e 7 - O p e r a t o r s , Mo 1 e k ü 1 o r b l t a l e n e r g i e :
V
P-Matr1xe1emente n v ^ i=i
18
=
£ E c /¿=1 t> = l
=
n T t-> /i=i
^
c2i u a u
C1P
b
\ ^
n- 1 + 2 ^F ß=i
H j n T c iU v=n+i
c iv
ß uv
w-Bindungs-Ladungsordnung:
am Z e n t r u m ft i.
10 then while not instat:wend:a$=inkey$ 3870 return 3900: rem Zeichnen der eingelesen Punkte 3902 a=2:def seg=sog:call absolute adr(a,b,c,d):'Maus loeschen 3904 for i = l to n 3906 zeile=(y(i)/8)+l:spalte=(x(i)/8)+l 3908 locate zeile,spalte:print i; 3910 pset ( x ( i ) , y ( i ) ) : 3912 next i 3914 a = l : d e f seg=sog:call absolute adr(a,b,c,d):'zeigen 3916 return 9990: rem Subroutine zur Fehlerbehandlung
252
9992 locate l,l:print space$(79);:locate 1,1 9994 print "Fehler in Linie ";erl," vom Typ ";err;" Fortsetzung: Taste Ende: [Esc]" 9996 while not instat:wend:a$=inkey$:if a$=chr$(27) then end 9998 locate l,l:print space$(79); 9999 resume next 10000: rem Subroutine zur Cursor-Bewegung im Screen 0 10002 on k e y ( l l ) gosub 10100:'nach oben 10004 on key(12) gosub 10200:'nach links 10006 on key(13) gosub 10300:'nach rechts 10008 on key(14) gosub 10400:'nach unten 10010 for i = l l to 14:key(i) on:next i 10012 screen 0:x=40:y=10:'Bildschirm-Mitte 10014 n=0:locate l,l:print " n=";n;" Zeile=";y;" Spalte=";x 10016 do 10018 locate y,x,l,0,7 10020 a$=ucase$(inkey$) 10022 if a$=chr$(27) or a$=chr$(13) then return 10024 if a$=chr$(0)+chr$(71) then gosub 10500:'Home 10026 if a$=chr$(0)+chr$(73) then gosub 10600:'PgUp 10028 if a$=chr$(0)+chr$(79) then gosub 10700:'End 10030 If a$=chr$(0)+chr$(81) then gosub 10800:'PgDn 10032 if a$="P" then print chr$(250):' 10034 if a$="N" or a$=chr$(0)+chr$(67) then gosub 11000:'N Oder F9 10036 loop 10100:'nach oben 10102 y = y - l 10104 if y80 then x = l 10306 locate l,l:print " n=";n;" Zeile=";y;" Spalte=";x 10308 return 10400:'nach unten 10402 y = y + l 10404 if y>24 then y = l 10406 locate l,l:print " n=";n;" Zeile=";y;" Spalte=";x 10408 return 10500: 'Home 10510 gosub 10100:gosub 10200:return 10600:'PgUp 10610 gosub 10100:gosub 10300: return 10700:'End 10710 gosub 10400:gosub 10200:return 10800:'PgDn 10810 gosub 10400:gosub 10300:return 11000: rem Punkte numerieren und speichern 11002 n = n + l : i f n>100 then n = l : ' s . Zeile 22
253
11004 print n; 11006 x(n)=x"8:y(n)=y*8 11010 return 20000: rem Subroutine: Maus-Initialisierung ( a a = l zeigen, aa=2 loeschen) 20010 def seg=0 20012 rem Maus-Lokalisierung im Speicher mit peek 20020 sog=256*peek(&h33"4+3)+peek(&h33"4+2) 20030 ofg=256"peek(&h33"4+l)+peek(&h33'4)+2 20040 if sog=0 or ofg=2 then print "Maus-Fehler":end 20050 def seg=sog:if peek(ofg)=207 then print "Maus-Fehler":end 20060 adr=ofg:a=0:def seg=sog:call absolute adr(a,b,c,d) 20070 if not (a) then print "Maus-Fehler":end 20080 a=10:b=0:c=&hffff:d=&h7700:def seg=sog:call absolute adr(a,b,c,d):' im Textmodus 20090 a=4:c=320:d=100:def seg=sog:call absolute adr(a,b,c,d):' Cursor-Position festlegen 20100 a=aa:def seg=sog:call absolute adr(a,b,c,d):' im Graphikmodus 20110 return
z= 8 g-Koord. 142 o b e n Dreiecks-Matrix Punktzahl = 3 Bindungszahl = 3 1 2 3 1 0 1
x-Koord.
478
links 0
rechts 0
Mitte 0
0
graphische Erzeugung der topologischen Matrix des cyclo-Propenyls Mit der Maus
254
8.6 Programm-Beispiel 22: Matrizen-Algebra Das nachfolgende Kapitel ist zur Wiederholung einiger wesentlicher Begriffe der Matrizenalgebra gedacht. Gleichungssysteme lassen sich z.B. elegant in Matrixform darstellen und lösen. Eine Matrix kann dabei als ein Anordnungsschema von mehreren Zeilen- oder Spalten-Vektoren angesehen werden. W M aV t r i.z e n a l1g e bXr a 1. D e f i n i t i o n :
» n Spalten i
m x n Mat r i x A
a
Ii
„ 2
...
a
I
+ b ,
J
(Kolonnen)
In
a
ID
m Zeilen M
n
Addition A + B = — -
C -
mit
3. M u l t i p l i k a t i o n t 4.
a
[8.14]
= a , ml
2.
...
12
IT
B A = B — —
mit
a
einem
mit
ij
nicht
z.B.
kommutativ:
t
}
J ••• m j = l . . . n
a, , i j
c . , = > a . , b, . l J ¿j l Ii kl k» 1
A B * D —
Einheitsmatrix:
6. q u a d r a t i s c h e
f ü r ij
1
n mit
5. D i a g o n a l m a t r i x :
= c .
Skalar:
b. . = 1 J
Multiplikation: A B = C — — —
ij
mit 1 —
Matrizen:
für
n ( A ) = m(B) — —
B A d , . = 5 . . d. i j i j i mit
d.h.
d. . = 0 f ü r IJ
i " j
d. = 1 i
m = n
Für die Quantenchemie sind besonders die quadratischen Matrizen von Bedeutung, und für die numerische Anwendung Matrizen mit reellen Elementen. Im HMO-Modell spielt die symmetrische Struktur-Matrix eine besondere Rolle, was im vorigen Programm-Beispiel 21 gezeigt wird. Im diesem Beispiel 22 können die beschriebenen Operationen an Matrizen über ein KEY-Tasten-Menü ausgeführt werden. Zusätzlich lassen sich über ein zweites KEY-Tasten-Menü Symmetrieeigenschaften von Matrizen untersuchen. Dazu werden die Zeilen-, Spalten-, Haupt- und Nebendiagonal- Summen gebildet, sodaß sich z.B. prüfen läßt, ob ein Zahlenquadrat 'magisch' ist. Es empfiehlt sich zur Unterscheidung der symmetrischen und unsymmetrischen Matrizen eine erzeugte m x n -Matrix in einem File mit der Extension DAT zu speichern (engl. save).
255
Matrizenalgebra 6. q u a d r a t i s c h e 6.1 Spur
einer
Matrizen: Matrix:
Sp
ra
=
A
II
(8.15)
n n
=
^
a.i
i
i « 1 Determinante
einer
algebraisches ct.i j. = 6.3 I n v e r s e
( - l )
i
Komplement i + J
Matrix:
iterative
Matrix:
a
—
Ia I = 1 1
der
) a. , L i J j- i
a. . iJ
Unterdeterminante
Ia1'
I A 11' J |1
A~1 —
A = —
I terations1 aufzah 1 ,
A A~ — —
n
x
n
~
c-
!) —
C
=
"
Cn-1
l
1 -
mit D.
a~1 ij
K.
mit
c .l
= ct.
|a| l j ' 1
Faddejew:
Startmatrix
= —o —l
=
=
1
nach
A —l + I.
=
AQ Sp A . —l
i
- 1
^n1
Cn
6.4 T r a n s p o n i e r t e
Matrix:
6.5 B e z e i c h n u n g e n
bei
Adjungierte
=
aus
Matrizeninversion
|AJ
n
det(A)
a)
Matrix:
(A —
T
).. i j
=
(A)., ~ ji
mit
konjugiert
komplexer
+ (A ) — i j
•
=
(A —
a
T ij
=
b)
reeller
) . j i
hermitesch t A = A unitär A+
=
A"
A —
+
=
Matrix A —
T
symmetrisch T A = A orthogonal
1
Eine Anleitung zur Programmbenutzung geben die nachstehenden Bildschirm-Anzeigen. Bildschirm Seite 0: Quantenchemie mit Personal Computern Programm : Matrizen-Algebra Filename : ALGEBRA.BAS Kapitel 8: Das Hückel-Molekülorbital-Modell ( c ) Walter de Gruyter & Co. (1990) Autor: F. Marschner Version: 1.0 Dieses Programm zeigt mit einem KEY-Tasten-Menü
256
a.. JI
AT
= Ä
1
Operationen der Algebra an Matrizen. Die Matrizen A und B können ( a ) in Form von D A T A - W e r t e n eingelesen werden, ( b ) von Hand elementweise eingelesen werden oder ( c ) über das 2. K E Y - T a s t e n - M e n ü von einem D i s k e t t e n - F i l e übernommen werden. Es stehen zwei K E Y - T a s t e n - M e n ü s zur Verfügung. Mit der |Enter]-Taste e r f o l g t j e w e i l s die
Fortsetzung.
Seite 1: 1. K E Y - T a s t e n - M e n ü f ü r Funktionstasten F l , 'A_HMO'
top. HMO-Matrix lesen
F3, 'A = B'
A in B übergeben
F5, 't A = C '
A skalar mit t multipl.
F7, ' A " - 1 = C ' M a t r i x - I n v e r s i o n F9, ' A t r p = C ' transponierte Matrix
F2, 'Korrektur' der Matrix A F4, ' A + B = C ' F6, 'AxB=C'
Summe in C M a t r i x - P r o d u k t in C
F8, ' ( A x A ) ~ r = C ' Potenzen von A FlO.'C = A'
C in A übergeben
Die M a t r i x - I n v e r s i o n l i e f e r t auch charakt. Polynom und Determinante. 2. K E Y - T a s t e n - M e n ü f ü r Funktionstasten F l , 'disk' D i s k e t t e n - I n h a l t anzeigen
F2, ' s c r _ s a v e ' Bildschirminhalt
F3, ' A _ s a v e ' m ' n - A - M a t r i x saven
saven
F4, 'Haupt' an Hauptdiagonale
spiegeln
F5, 'Neben' an Nebendiagonale spiegeln F6, ' A _ l e s e n ' m ' n - M a t r i x aus File lesen F7, 'horizont' - a l spiegeln F9, '90°links' herumdrehen
F8, ' v e r t i k a l '
spiegeln
F10,'90°rechts' herumdrehen Programm
10 11 12 13 14 16 18 20 22 24 26 28 30 32 34 36 38 42 44
cls:key o f f sub Vorspann shared a$,dialog$ t i t e l $ ( 0 ) = " Quantenchemie mit Personal Computern " titel$(l)=" Programm : M a t r i z e n - A l g e b r a " titel$(2)=" Filename : ALGEBRA.BAS" titel$(3)=" Kapitel 8: Das H ü c k e l - M o l e k ü l o r b i t a l - M o d e l l " titel$(4)=" ( c ) Walter de Gruyter & Co. (1990)" titel$(5)=" Autor: F. Marschner Version: 1.0" t e x t $ ( l ) = " D i e s e s Programm z e i g t mit einem K E Y - T a s t e n - M e n ü " t e x t $ ( 2 ) = " O p e r a t i o n e n der Algebra an Matrizen." t e x t $ ( 3 ) = " D i e Matrizen A und B können" t e x t $ ( 4 ) = " ( a ) in Form von D A T A - W e r t e n eingelesen werden," t e x t $ ( 5 ) = " ( b ) von Hand elementweise eingelesen werden oder" t e x t $ ( 6 ) = " ( c ) über das 2. K E Y - T a s t e n - M e n ü von einem D i s k e t t e n - F i l e übernommen werden." t e x t $ ( 7 ) = " E s stehen zwei K E Y - T a s t e n - M e n ü s zur Verfügung." t e x t $ ( 8 ) = " M i t der [ E n t e r ] - T a s t e e r f o l g t j e w e i l s die Fortsetzung." text2$(l)=" 1. K E Y - T a s t e n - M e n ü f ü r Funktionstasten" t e x t 2 $ ( 2 ) = " F l , 'A_HMO' top. HMO-Matrix lesen F2, 'Korrektur' der Matrix A "
257
46
text2$(3)="F3, lA = B' A in B übergeben F4, 'A+B=C' Summe in C" 48 text2$(4)="F5, 'tA=C' A skalar mit t multipl. F6, 'AxB=C' Matrix-Produkt in C" 50 text2$(5)="F7, 'A~-1=C' Matrix-Inversion F8, '(AxA)"r=C' Potenzen von A" 52 text2$(6)="F9, 'Atrp=C' transponierte Matrix F10,'C = A' C in A übergeben" 54 text2$(7)="Die Matrix-Inversion liefert auch charakt. Polynom und Determinante." 56 t e x $ ( l ) = " 2. KEY-Tasten-Menü für Funktionstasten" 58 t e x S ( 2 ) = " F l , 'disk' Disketten-Inhalt anzeigen F2, 'scr_save' Bildschirminhalt saven" 60 tex$(3)="F3, 'A_save' m ' n - A - M a t r i x saven F4, 'Haupt' an Hauptdiagonale spiegeln" 62 tex$(4)="F5, 'Neben' an Nebendiagonale spiegeln F6, 'A_lesen' m'n-Matrix aus File lesen" 64 tex$(5)="F7, 'horlzont' - a l spiegeln F8, 'vertikal' spiegeln" 66 tex$(6)="F9, '90"links' herumdrehen F10,'90'rechts' herumdrehen" 68 dialog$="Seite: (0) Vorspann (1) Anleitung Forts.: (Enter) Ende: [Esc]" 70: rem Seiten-Vorbereitung 72 seite=0:'wenn genügend Platz dann: screen 0„seite,0:'Bildschirm Seite 0 ist aktiv 74 Seite$="Seite "+chr$(48+seite)+":" 76 eis 78 print S e i t e ! 80 for i=0 to 5:print titel$(i):next i 82 print 84 for i = l to 8:print text$(i):next i 85 gosub 25060:if a$=chr$(13) then exit sub 86 seite=l:'screen 0„seite,0:'Bildschirm Seite 1 ist aktiv 88 Seite$="Seite "+chr$(48+seite)+":" 90: els 92 print SeiteS 94 for i = l to 7:print text2$(i):next i 96 print 97 for i = l to 6:print tex$(i):next i 98 gosub 25060:if a$Ochr$(13) then on v a l ( a $ ) + l goto 70,90 99 end sub 100 : rem Matrizen-Algebra 104 rem m'n Ordnung der A - , p'q Ordnung der B - , u ' v Ordnung der C-Matrix 108 defdbl a-c,h:' double precision 110 m=15:n=m:p=m:q=m:u=m:v=m:'m,p,u Zeilen, n,q,v Spalten der Matrix 112 dim dynamic a(m,n),b(p,q),c(u,v),z(n),zeile$(24) 114 dim dynamic al(n,n),h(n,n):'Hilfsfelder notfalls durch b und c zu ersetzen 118 rem die Matrix A bleibt bei allen Operationen erhalten, die Ergebnisse sind in C. 120 key 15, chr$(&h08)+chr$(33):'Alt-F 122 on key(15) gosub 25170 124 key(15) on 126 on error goto 9990:'Fehlerbehandlung
258
128 call Vorspann 130: screen 0:cls 140 print"(a) Liegen die Zahlenwerte der A - und B-Matrix als data-Werte vor ?" 150 p$=inkey$:if p$="" then 150 152 if p$="J" or p$="j" then 166 154 print "(b) Wollen Sie die Elemente der A-Matrix eingeben ? " 156 p$=inkey$:if p$="" then 156 158 if p$="J" or p$="j" then gosub 900:'Eingabe einer Matrix 160 goto 180 166: rem Einlesen der data-Werte 168 read m,n: 170 for i = 1 to m:for j = l to n:read a ( i j ) : n e x t j:next i 172 read p.q.for i = 1 to p:for j = l to q:read b ( i j ) : n e x t j:next i 174 'restore:'ohne diesen Befehl können sukzessive die angegebenen DATA-Werte benutzt werden 180: rem A-Matrix gleich C-Matrix setzen 190 u=m:v=n 192 for i = l to m 194 for j = l to n 196 c(i j ) = a ( i j ) 198 next j: 200 next i: 202 rem Ausgabe der A - und B-Matrix 204 eis 206 titel$=str$(m)+" x"+str$(n)+" A-Matrix: " 208 call MatrixAusgabe(titel$,m,n,aO) 210 titel$=str$(p)+" x " + s t r $ ( q ) + " B-Matrix: " 212 call MatrixAusgabe(titel$,p,q,bO) 290: dialog$=" 1 .KEY-Tasten-Menü: [Enter] 2.KEY-Tasten-Menü: [ A l t ] - F (N)eu Ende: [Esc]" 296 gosub 25060 297 if a$=chr$(13) then gosub 450:gosub 1090:goto 290 298 if a$="N" then 130 299 end 300: key off:print:gosub 1100:print "an Hauptdiagonale spiegeln" 301 gosub 1000:gosub 1800:gosub 1900:gosub 1930:gosub 1090:key on 302 return 310: key off:print:gosub 1200:print "an Nebendiagonale spiegeln" 311 gosub 1000:gosub 1800:gosub 1900:gosub 1930:gosub 1090:key on 312 return 320: key off:print:gosub 1300:print " horizontal spiegeln " 321 gosub 1000:gosub 1800:gosub 1900:gosub 1930:gosub 1090:key on 322 return 330: key off:print:gosub 1400:print " vertikal spiegeln " 331 gosub 1000:gosub 1800:gosub 1900:gosub 1930:gosub 1090:key on 332 return 340: key off:print:gosub 1500:print "Drehung nach links um 90* " 341 gosub 1000:gosub 1800:gosub 1900:gosub 1930:gosub 1090:key on 342 return
259
350: key off:print:gosub 1600,-print "Drehung nach rechts um 90° " 351 gosub 1000:gosub 1800:gosub 1900:gosub 1930:gosub 1090:key on 352 return 450: rem 1. K e y - T a s t e n - M e n ü 452 key 1 ,"A_HMO":'symm. A - H M O - M a t r i x lesen (oberes Dreieck) 454 key 2,"Korrektur" 456 key 3,"A = B" 458 key 4 , " A + B = C " 460 key 5,"t A = C " 462 key 6,"AxB=C" 464 key 7 , " A ~ - l = C " : ' m i t charakt. Polynom und Determinante 466 key 8 , " ( A x A ) " r = C " 468 key 9, " A t r p = C " : ' t r a n s p o n i e r t e Matrix 470 key 10,"C = A " 472 f o r i = l to 10:key ( i ) on:next i 474 on k e y ( l ) gosub 3530:'symm. A - M a t r i x lesen als top.HMO-Matrix 476 on k e y ( 2 ) gosub 3 3 1 0 : ' A - M a t r i x korrigieren 478 on k e y ( 3 ) gosub 600:'A in B 480 on k e y ( 4 ) gosub 620:'A+B=C 482 on k e y ( 5 ) gosub 640:'t A = C 484 on k e y ( 6 ) gosub 660:'AxB=C 486 on k e y ( 7 ) gosub 6 8 0 : ' A _ i n v = C mit charakt. Polynom 488 on k e y ( 8 ) gosub 700:'A~r=C 490 on k e y ( 9 ) gosub 720:'A_transp.=C 492 on k e y ( l O ) gosub 740:'C in A 494 key on 499 return 500: rem A - M a t r i x saven 502 gosub 26150:'filename holen 504 gosub 26180:'eröffnen 506 print # l , m , n 508 f o r i = l to m:for j = l to n:print # l , a ( i , j ) : n e x t j : n e x t i 510 gosub 26210:'Schließen 512 return 600: t i t e l $ = s t r $ ( m ) + " x " + s t r $ ( n ) + " A - M a t r i x : " 604 call M a t r i x A u s g a b e ( t i t e l $ , m , n , a ( ) ) 606 call AgleichBsetzen(n,m,p,q,a(),bO): 608 t i t e l $ = s t r $ ( p ) + " x " + s t r $ ( q ) + " B - M a t r i x : " 610 call M a t r i x A u s g a b e ( t i t e l $ , p , q , b ( ) ) : r e t u r n 620: t i t e l $ = " Summen-Matrix: A + B = C" 622 call SummenMatrix(n,m,a(),b(),c()): 624 u = m : v = n : c a l l M a t r i x A u s g a b e ( t i t e l $ , u , v , c ( ) ) : r e t u r n 640: print:input "Skalarprodukt-Matrix: t A = C mit t = 642 call SkalarproduktMatrix(t,n,m,a(),cO): 644 u = m : v = n : c a l l M a t r i x A u s g a b e ( t i t e l $ , u , v , c ( ) ) : r e t u r n
",t:titel$=""
660: t i t e l $ = " P r o d u k t - M a t r i x : A x B = C" 662 call P r o d u k t M a t r i x i n . m . p . q . u . v . a O . b O . c O h ' A - S p a l t e ' B - Z e i l e 664 if n=p then call M a t r i x A u s g a b e ( t i t e l $ , u , v , c ( ) ) 665 return
260
680: call Matrizeninversion(n,a(),c(),d,z()) 682 call AusgabeinverseMatrix(n,c(),d,z()):return 700: print:input "Potenzen der A-Matrix (AxA)~r mit 702 call PotenzMatrixir.n.m.n.m.aO.aO.cOhreturn 720: titel$=" Transponierte-Matrix: A'= C" 722 call TransponierteMatrixin.m.u.v.aO.cO): 724 call MatrixAusgabe(titel$,u,v,c()):return 740: titel$=str$(u)+" x"+str$(v) + " C-Matrix: " 742 call MatrixAusgabe(titel$,u,v,c()) 744 call CgleichAsetzen(n,m,u,v,a(),c()): 746 titel$=str$(m)+" x " + s t r $ ( n ) + " A-Matrix: " 748 call MatrixAusgabe(titel$,m,n,a()):return 900: rem spaltenweise Eingabe der A-Matrix 902 input "Eingabe: Anzahl der Zeilen der Matrix m 904 input "Eingabe: Anzahl der Spalten der Matrix 906 for i= 1 to m:'Zeilen 908 for j = 1 to n:'Spalten 910 print "Zeile i=";i;", Spalte j=";j; 912 input a(i,j) 914 next j:print 916 next i 919 return 1000: 'Ausgabe der A-Matrix 1002 for j = l to n:print tab(j'6-3);j;:next j:print 1004 for i = l to m:print 1006 for j = l to n 1008 print tab(j'6-3);a(i,j); 1010 next j:print tab(j'7-7);i 1012 next i: 1019 return 1020: 'Ausgabe der B-Matrix 1022 for j = l to q:print tab(j*6-3);j;:next j:print 1024 for i = l to p:print 1026 for j = l to q 1028 print tab(j'6-3);b(i,j); 1030 next j:print t a b ( j ' 7 - 7 ) ; i 1032 next i: 1039 return 1090: rem Tastendruck, s. vorherige Programme 1100: 'Matrix a(i,j) an der Hauptdiagonale spiegeln 1110 for i=2 to n 1120 for j = l to i - 1 1130 h=a(i,j):a(i,j)=a(j,i):a(j,i)=h 1140 next j 1150 next i 1151 return 1200: 'Matrix a(i,j) an der Nebendiagonale spiegeln
261
1210 for i=l to n - 1 1220 for j = l to n - 1 1230 z=n+l-j:s=n+l-i 1240 h=a(ij):a(ij)=a(z,s):a(z,s)=h 1250 next j 1260 next 1 1261 return 1300: 'Matrix a ( i j ) horizontal spiegeln 1310 for j = l to n 1320 for i=l to int(n/2) 1330 z=n+l-i: 1340 h=a(ij):a(ij)=a(zj):a(zj)=h 1350 next i 1360 next j 1361 return 1400: 'Matrix a ( i j ) vertikal spiegeln 1410 for i=l to n 1420 for j = l to int(n/2) 1430 s=n+l-j: 1440 h=a(i j):a(ij)=a(i,s):a(i,s)=h 1450 next j 1460 next i 1461 return 1500: 'Matrix a ( i j ) nach links drehen um 90* 1510 gosub 1700 1520 for 1=1 to n 1530 for j = l to n 1540 a(ij)=b(j,n+l-i) 1550 next j 1560 next i 1561 return 1600: 'Matrix a ( i j ) nach rechts drehen um 90* 1610 gosub 1700 1620 for i=l to n 1630 for j = l to n 1640 a(ij)=b(n+l-j,i) 1650 next j 1660 next i 1661 return 1700: 'Matrix a ( i j ) wird in Matrix b(ij) zwischengespeichert 1710 for i=l to n 1720 for j = l to n 1730 b(i j)=a(i j ) 1740 next J 1750 next i 1751 return 1800: rem Summenbildung, Zeilensummen 1803 knl=6:'max. 5 Ziffern mit Vorzeichen 1804 for i= 1 to n:s=0 1806 for j = l to n
262
1808 s=s+a(i,j) 1810 next j 1812 z(i)=s 1814 next i 1815 print "Zeilensummen: " 1816 for i = l to n:print tab(i'knl-3);z(i);:next i 1818 print 1820 return 1900: rem Summenbildung, Spaltensummen 1904 for j = 1 to n:s=0 1906 for i = l to n 1908 s=s+a(i,j) 1910 next i 1912 z(j)=s 1914 next j 1915 print "Spaltensummen: " 1916 for i = l to n:print t a b ( i ' k n l - 3 ) ; z(i);:next i 1918 print 1920 return 1930: rem Diagonalsummen 1932 sh=0:sn=0:for i = l to n 1934 sh=sh+a(l,i):'Hauptdiagonale 1935 s n = s n + a ( i , n - i + 1 ): 'Nebendiagonale 1936 next i 1938 print "Hauptdiagonalsumme: ";sh;" Nebendiagonalsumme: ";sn 1940 return 3310: ' Matrixelemente korrigieren 3330 locate 23,l:input "wieviel A-Matrixelemente korrigieren"; co 3340 if co=0 then return 3360 for k = l to co 3361 locate 23,l:print space$(39);:locate 23,1: 3370 input "Zeile, Spalte, Elementwert";ij,a(ij) 3380 next 3390 titel$=str$(m)+" x"+str$(n)+" A-Matrix: " 3400 call MatrixAusgabe(titel$,m,n,aO) 3410 return 3530: ' obere HMO-Dreiecks-A-Matrix ohne Diagonalelemente lesen 3532 rem Diagonalelement Null setzen 3540 d a t e i = l : l e s e n = l : l o c a t e l,l:print space$(79);:locate 1,1 3550 input "Dateinamen angeben:";dateiname$ 3560 open "i",#datei, dateinameS 3570 input #datei,punktzahl 3580 for i = l to punktzahl-1 3590 for j = i + l to punktzahl 3600 Input # d a t e i , a ( i j ) 3610 next j:next i:n=punktzahl:m=n 3620 close #datei 3622 for i = l to m:a(i,i)=0:for j = i to n : a ( j , i ) = a ( i j ) 3624 next j:next i:u=m:v=n: 3626 cls:titel$=str$(m)+" x"+str$(n)+" A-Matrix: " 3628 call MatrixAusgabeititeli.m.n.aOh'HMO-Matrix zeigen 3630 return 263
'Subroutinen zur Matrizen-Algebra 5010: sub AgleichBsetzen(n,m,p,q,a(2),b(2)) 5020 p=m:q=n 5030 for i = l to m 5040 for j = l to n 5050 b(i,j)=a(i,j) 5060 next j: 5070 next i: 5080 end sub 5100: sub CgleichAsetzen(n,m,u,v,a(2),c(2)) 5110 m=u:n=v 5120 for i = l to m 5130 for j = l to n 5140 a(i,j)=c(ij) 5150 next j: 5160 next i: 5170 end sub 5190: sub SummenMatrix(n,m,a(2),b(2),c(2)) 5200 for i = l to m 5210 for j = l to n 5220 c(i,j)=a(i,j)+b(ij) 5230 next j 5240 next i 5250 end sub 5270: sub SkalarproduktMatrix(t,n,m,a(2),c(2)) 5280 for i = l to m 5290 for j = l to n 5300 c(i,j)=fa(ij) 5310 next j 5320 next i 5330 end sub 5350: sub TransponierteMatrix(n,ra,u,v,a(2),c(2)) 5360 u=n:v=m 5370 for i=l to m 5380 for j = l to n 5390 c(j,i)=a(i,j) 5400 next j 5410 next i 5420 end sub 5440: sub ProduktMatrix(n,m,p,q,u,v,a(2),b(2),c(2)) 5450 if n O p then print" Fehler: Spaltenzahl der A-Matrix muß mit":_ print" Zeilenzahl der B-Matrix übereinstimmen":exit sub 5470 for i = l to m 5480 for j = l to q 5490 s=0 5500 for k = l to n 5510 s=s+a(i,k)"b(k,j) 5520 next k 5530 c(i,j)=s: 5540 next j 5550 next i 5560 u=m:v=q:'m"q- oder u"v-C-Matrix 5570 end sub
264
5590: sub PotenzMatrix(r,n,m,p,q,a(2),b(2),c(2)) 5600 if r6 t h e n if m>8 t h e n while next k end s u b
inkey$="":wend:'Zwischenhalt
9990: rem S u b r o u t i n e zur F e h l e r b e h a n d l u n g 9992 l o c a t e 1,1 ¡print s p a c e $ ( 7 9 ) ; : l o c a t e 1,1 9994 p r i n t "Fehler in Linie ";erl;" vom Typ ";err_ ;" F o r t s e t z u n g : T a s t e Ende: [Esc]" 9995 if e r r = 4 t h e n r e s t o r e : g o t o 290:'out of d a t a 9996 while not i n s t a t : w e n d : a $ = i n k e y $ : i f a $ = c h r $ ( 2 7 ) t h e n end 9998 locate 1,1 ¡print space$(79); 9999 resume n e x t 10200 :sub M a t r i z e n i n v e r s i o n ( n , a ( 2 ) , c ( 2 ) , d , g ( l ) ) 10202 rem M a t r i z e n i n v e r s i o n n a c h D. K. Faddejew 10204 s h a r e d a l ( ) , h ( ) 10210 rem n i s t die Ordnung der zu i n v e r t i e r e n d e n A - M a t r i x im Array a(2) 10220 rem zu A i n v e r s e C - M a t r i x im Array c(2) 10230 rem K o e f f i z i e n t e n des char. Polynoms im Array g ( l ) 10240 rem d i s t der Wert der D e t e r m i n a n t e der A - M a t r i x 10250 rem bei Problemen mit S p e i c h e r p l a t z a l durch b, h durch c e r s e t z e n 10260 f o r i = l to n:for j = l to n : a l ( i , j ) = a ( i j ) : n e x t j : n e x t i: 10280 for i = l to n 10290 s=0 10300 for j = l to n 10310 s=s+a(j j) 10320 next j 10330 g ( i ) = s / i : ' S p u r in g(n) 10340 rem Berechnung von (A - g) = H 10350 for j = l to n 10360 for k = l to n 10370 if j = k t h e n h ( j , j ) = a ( j j ) - g ( i ) eise h ( j , k ) = a ( j , k ) 10380 next k 10390 next j 10410 if i = n - l t h e n 10420 else 10480 10420: for j = l to n 10430 for k = l to n 10440 c(j,k)=h(j,k) 10450 next k 10460 next j 10470 rem M a t r i z e n m u l t i p l i k a t i o n A l ' H 10480: for j = l to n 10490 f o r k = l to n 10500 s=0 10510 f o r 1=1 to n 10520 s=s+al(j,l)*h(l,k) 10530 next 1 10540 a(j,k)=s 10550 next k 10560 next j 10570 n e x t i 10590 if g ( n ) = 0 t h e n print"Matrix i s t singular.":goto 10670 10610 for i = l to n
266
10620 for j = l to n 10630 c(ij)=c(ij)/g(n) 10650 next j 10660 next i 10670 d = ( - l ) ~ ( n + l ) " g ( n ) : ' W e r t der Determinante 10680 rem Koeffizienten des charakteristischen Polynoms 10690 if n mod 2 =0 then s = - l else s = l 10700 g(0)=-s 10710 for i = l to n 10720 g(i)=s*g(i) 10730 next i 10740 for i = l to n:for j = l to n : a ( i j ) = a l (i,j):next j.next i: 10750 end sub Nachfolgende Subroutinen sind mit solchen aus vorhergehenden Programmen identisch. Es werden nur Änderungen angegeben. 25060 25140 25170 25180 25190 25200 25210 25220 25230 25240 25250 25260 25270 25280 25290 25300 25310 25320 25330 25340 25350 25360 25370 25380 25390 25400 25410 25420
'Subroutine: Dialog-Anzeige in Zelle 25 und Tastaturabfrage 'Zeile 1 löschen nr= 10:'KEY-Tasten-Menü key l,"disk" key 2,"scr_save" key 3,"A_save" key 4,"Haupt" key 5,"Neben" key 6,"A_lesen" key 7,"horizont" key 8,"vertikal" key 9,"90'links" key 10,"90'rechts" for i = l to nr:key(i) on:next i on k e y ( l ) gosub 25880 on key(2) gosub 25760:'Zusammenfassung Bildschirmsicherung on key(3) gosub 500 on key(4) gosub 300 on key(5) gosub 310 on key(6) gosub 26270:'Zusammenfassung Matrix lesen on key(7) gosub 320 on key(8) gosub 330 on key(9) gosub 340 on key(10) gosub 350 key on a$=inkey$:if a$="" then 25400 if a$=chr$(27) or a$=chr$(13) then key off:key(15) on:return goto 25390
Subroutinen in den Zellen 25550 - 26240 wie die in den Zeilen 1000 - 1899 anderer Programme. 26270: 26280 26290 26300 26310 26320 26330 26360 26362
rem Subroutine für m'n-Matrix: öffnen, lesen, anzeigen, schliessen 'eines sequentiellen files mit Eingabe des filenamen cls:gosub 25880 gosub 26150:'filename eingeben open filenames for input as # l : ' O e f f n e n zum Lesen input #l,m,n:'m*n-Matrix for i = l to m:for j = l to n:input # l , a ( i , j ) : n e x t j:next i gosub 26210:'Schliessen cls:titel$=str$(m)+" x"+str$(n)+" A-Matrix: "
267
26364 call M a t r i x A u s g a b e ( t l t e l $ , r a , n , a O ) 26370 return rem T e s t d a t e n f ü r M a t r i x - P r o d u k t : z.B. l i n e a r e s Gleichungssystem rem l i n k e A - M a t r i x d a t a 5,5 data 2 , - 1 , - 1 , 3 , 2 data 6 , - 2 , 3 , 0 , - 1 data - 4 , 2 , 3 , - 3 , - 2 data 2 , 0 , 4 , - 7 , - 3 data 0 , 1 , 8 , - 5 , - 1 rem r e c h t e B - M a t r i x d a t a 5,1 data 6 , - 3 , - 5 , - 8 , - 3
lösen
Das Programm e n t h ä l t w e i t e r e T e s t d a t e n aus der L i t e r a t u r (s. z.B.
D. Herrmann
oder R. Zurmühl)
zu den Themen: M a t r i z e n p r o d u k t , P o t e n z
M a t r i z e n (Afar/row-Ketten), M a t r i z e n i n v e r s i o n ,
'magisches'
von
Quadrat.
JL Beispiel: Lösung e i n e s l i n e a r e n Gleichungssystems A x C = B durch M a t r i z e n - I n v e r s i o n und - M u l t i p l i k a t i o n gemäß A 5 x 5
1
x A x C
= C = A
A-Matrix: 1 3.0000 0.0000 -3.0000 -7.0000 -5.0000
2.0000 -1.0000 -2.0000 -3.0000 -1.0000
-0.2500 -0.8333 0.1667 0.1667 -0.3333
5.0000 13.3333 -1.1667 0.8333 -0.1667
3.0000 7.6667 -0.8333 0.1667 0.1667
-2.2500 -5.8333 0.6667 -0.3333 0.1667
-1.0000 -2.0000
2.0000
2.0000
0.0000 5 x 1
0.0000 1.0000
-1.0000 3.0000 3.0000 4.0000 8.0000
2.0000 6.0000 -4.0000
B-Matrix: 1 6.0000
-3.0000 -5.0000 -8.0000 -3.0000 i n v e r s e Matrix: A ~ - l
= C
1 8.2500 21.5000 -2.0000 1.0000 0.5000
Wert der D e t e r m i n a n t e : 24 K o e f f i z i e n t e n des c h a r a k t e r i s t i s c h e n Polynoms: a( 5 ) a( 4 ) a( 3 ) a( 2 ) a( 1 ) a( 0 ) -1.00 -5.00 17.00 - 1 0 8 . 0 0 - 1 5 8 . 0 0 24.00 Matrix C wird in A ü b e r w i e s e n durch K e y - T a s t e 'C = A ' und das Produkt g e b i l d e t ; dies i s t z u g l e i c h L ö s u n g s v e k t o r C:
268
1
xB
Produkt-Matrix: A x B = C 1 8.0000 21.0000 -2.0000
1.0000 3.0000 2^ Beispiel: Produkt der Matrizen A und B aus dem 1. Beispiel Produkt-Matrix: A x B = C 1 -10.0000
30.0000 -15.0000 57.0000 0.0000 J3. Beispiel: Symmetrie eines magischen Quadrates nach A. Dürer (1514) 4x4
A-Matrix: 2
1
3.0000
16.0000
5.0000 9.0000 4.0000
10.0000 6.0000
15.0000
3 2.0000
11.0000 7.0000 14.0000
4 13.0000 8.0000 12.0000
1.0000
an Hauptdiagonale spiegeln 1 16
3
2
3
4
5
9
10 11 8
6
4 15 14 1
7 12 13 Zeilensummen: 34 34 34 34 Spaltensummen: 34 34 34 34 Hauptdiagonalsumme: 34 2
Nebendiagonalsumme:
34
an Nebendiagonale spiegeln 1
2
3
1 14 15 12 10 6 8 11 7 13 2 3 Zeilensummen: 34 37 31 Spaltensummen: 34 37 31 Hauptdiagonalsumme:
4 4 9 5 16
1 2 3 4
34 34 34
Nebendiagonalsumme:
269
34
8.7 Programm-Beispiel 23: Das JacoM-Diagonallsierungsverfahren Das Jacobi -Verfahren ist ein Standard verfahren zur numerischen Bestimmung von Eigenverten und Eigenvektoren hermitescher und damit auch reeller und symmetrischer Matrizen, wie sie z.B. die topologische Matrix des HMO-Modells darstellt. In dieser Methode wird iterativ durch eine Serie von Orthogonaltransformationen eine symmetrische Matrix A Q auf Diagonalform gebracht, d.h. die Eigenwerte als Lösungen des charakteristischen Polynoms der Determinante von A^ stehen in der n - t e n Matrix A r auf der Diagonalen, während die Nlchtdiagonalelemente in A n beliebig klein werden. Wie im voranstehenden Kapitel erklärt, ist eine Matrix orthogonal, wenn ihre transponierte gleich ihrer inversen Matrix ist. Dies wird an nachfolgendem Beispiel verdeutlicht. Das
Jacobi
nach Orthogona1-Matrix: 1
0
0
cos
0
0
sin
0
AT
0 -
sin
[8.16]
Diagona1is1erungsverfahren
=
bzw.
A"1
1 0
cos 0
A
0
T
A =
mit
Beispiel:
0
1
0
0
cos
0
sin 0
0
1
0 -
sin
0
cos 0
0
0
Or t h o g o n a 1 - T r a n s f o r m a t I o n e n : T T . . . T—I2 i— 1 A—O „ T—1T —2 , . . . T— n = A—n
Dlagonal-Matrlx
—n
Algorithmus:
q Spalten-Index
des
größten
AQ-Elementes
z.B.:
In
4,
p Zeilen-,
-
P =
1
l
0
cos
0
sin
0
1
l
1
•sin
0
cos
0
0
l
1
1; q
So
=
0
0
= 2 ; a 12
aa
i
=
1
Orthogona 1 - T r a n s f o r m a t l o n : für
1 ,k «
(2) (4)
p.q —
V
(6)
b
(7)
b
(8a)
b
pp q
=
V V
=
a
=
a
=
a
pp pp pp
gilt:
( 1)
= B = a
ik
ik
cos
0
-
sin
0
(3)
bi
sin
0
+
cos
0
(6)
bA
cos
2
0 + a
. 2 0 + a sin sin
2
0 + a
qq qq qq
. 2 0 sin COS COS
2 2
270
-
2a
0 + 2a 0
+ 2a
pq pq pq
cos 0
-
0 i p sin
+
p
~
ai
q
~
a
p
sin
0 cos 0
sin
0
sin
0 cos 0
cos 0
a
iq
a
iq
sin 0 cos 0
(8b)
bpq
mit
=
sin
bqp 20
=
=
2sin
aqq )
0 cos
(a
0
=
0,5
tan"1
(-2a
für
den
Fall:
ap p = a q q
pp
a pq
aqq )
-
pp
0,5
X =
-
(a
und
ß =
+ 1 -1
s gn (AO
im B e i s p i e l : und
cos
0
=
sin
PQ
[a
l ;
und cos
pq
qq
PP
fi > /i
a(k,k) t h e n goto 7680 q=a(k,k):i = k next k rem V e r t a u s c h u n g der Vektoren if i = j t h e n goto 7740 a(i,i)=a(j,j):a(j,j)=q for k = l to n q=s(k,j):s(k,j) = s(k,i):s(k,i)=q next k next j end sub
7900: 7902 7904 7906 7908 7910 7940
sub Pmatrix(tit.el$,n,nn,g2,bb( 1 ),s(2),pp(2)) rem bei S p e i c h e r p l a t z - P r o b l e m e n : pp(2) durch a(2) e r s e t z e n titel$="allgemeine n-Bindungs-Ladungsordnungsmatrix" rem Bestimmung der MO-Besetzungszahlen rem g2 Nummer des HOMO's ( h i g h e s t oceupied MO) for i = l to n:for j = l to n : p p ( i , j ) = 0 : n e x t j : n e x t i pmn=0
281
7942 for mu=l to n: 7944 for nu=l to n: 7950 for i = l to g2:'über besetzte MO's 7960 pmn=bb(i)*s(mu,i)*s(nu,i):'Zwischenwert 7970 pp(mu,nu)=pmn+pp(mu,nu):'Summation 7980 next i 7990 next nu: 7992 next mu 7999 end sub 8000 rem Datawerte; Ira Programm sind als DATA die oberen Dreiecke der Struktur-Matrizen von folgenden w-Elektronensystemen integriert: Ethen, Propen, Cyclopropen, Cyclopentadien, Benzen, Cycloheptatrien, Naphthalin und ein Literaturbeispiel (s. K. J. Johnson, S. 415). Nachfolgende Subroutinen sind mit solchen aus vorhergehenden Programmen identisch. Es werden nur Änderungen angegeben. 9990: rem Subroutine zur Fehlerbehandlung 9995 if err=4 then restore:goto 290:'out of data 25170: nr= 10:'Key-Tastenzahl 25180 key l,"disk" 25190 key 2,"Scr_save" 25200 key 3,"Scr_drucken" 25210 key 4,"A_save" 25212 key 5,"Titel" 25220 for i=6 to 10:key i," ":next i 25280 for i = l to nr:key(i) on:next i 25290 on k e y ( l ) gosub 25880:'Disketteninhalt 25300 on key(2) gosub 25760:'Zusammenfassung Bildschirmsicherung 25310 on key(3) gosub 25710:'gespeicherter Bildschirminhalt ausdrucken 25320 on key(4) gosub 690:'oberes Dreieck u. Diagonale von A saven 25322 on key(5) gosub 25970:'Text-Eingabe in Zeile 1 (max. 255 Zeichen) 25390 key on 25400 a$=inkey$:if a$="" then 25400 25410 if a$=chr$(27) or a$=chr$(13) then key off:key(15) on:return 25420 goto 25390 26270: rem Subroutine: Oeffnen, lesen, anzeigen, schliessen 26280 'eines sequentiellen files mit Eingabe des filenamen 26320 input #l,n:'Diagonale u. oberes Dreieck der n"n-Matrix 26330 for i = l to n:for j = i to n:input # l , a ( i j ) : n e x t j:next i 26360 gosub 26210:'schliessen 26362 cls:titel$=str$(n)+" x " + s t r $ ( n ) + " A-Matrix: " 26364 call MatrixAusgabe(0,titel$,n,n,a(),aO) 26370 return
282
Ausdruck-Beispiele Beispiel: Cyclopropen 3 x 3
A-Matrix 1 0.0000 1.0000 1.0000
Iterationsschranke = Rotation:
14
Zeit:
1.0000 0.0000 1.0000
1.0000 1.0000 0.0000
8.164965947798919E-007 1.148 s
Thresh:
0.000001
Theta:
35.26
E i g e n w e r t - K o e f f i z i e n t e n und Hückel-MO-Koeffizienten 1
2
3
2.0000
-1.0000
-1.0000
0.5774 0.5774 0.5774
0.7071 -0.7071 0.0000
-0.4082 -0.4082 0.8165
Cyclopropenyl-Radikal: Zahl der w-Elektronen = 3 Gesamt-n-Elektronenenergie:
3 a
+
3.0000 ß
f r e i e Valenz als Reaktivitätsindex eines Zentrums p und P-Matrix 1
2
3
0.8987
0.8987
0.3987
1.1667 0.1667 0.6667
0.1667 1.1667 0.6667
0.6667 0.6667 0.6667
Cyclopropenyl-Kation:
Zahl der w-Elektronen = 2
Gesamt-w-Elektronenenergie:
2 a
+
4.0000 ß
f r e i e Valenz als Reaktivitätsindex eines Zentrums u und P-Matrix 1
2
3
0.3987
0.3987
0.3987
0.6667 0.6667 0.6667
0.6667 0.6667 0.6667
0.6667 0.6667 0.6667
Cyclopropenyl-Anion-Diradikal: Eingabe: Anzahl der « - E l e k t r o n e n =4 Gesamt-re-Elektronenenergie:
4 a
+
2.0000 ß
f r e i e Valenz als Reaktivitätsindex eines Zentrums u und P-Matrix 1
2
3
1.0654
1.0654
1.0654
1.3333 0.3333 0.3333
0.3333 1.3333 0.3333
0.3333 0.3333 1.3333
283
Beispiel: Propen 3 x 3
A-Matrix 1 0.0000 1.0000 0.0000
1.0000 0.0000 1.0000
0.0000 1.0000 0.0000
Iterationsschranke = 6.666666649834951E-007 Rotation:
14
Zeit:
2.320 s
Thresh:
0.000000
Theta:
-0.00
Eigenwert-Koeffizienten und Hückel-MO-Koeffizienten 1
2
3
1.4142
0.0000
-1.4142
0.5000 0.7071 0.5000
-0.7071 -0.0000 0.7071
0.5000 -0.7071 0.5000
Gesamt-n-Elektronenenergie:
3 a
+
2.8284 ß
freie Valenz als R e a k t i v i t ä t s i n d e x eines Zentrums p und 2
1
P-Matrix
3
1.0249
0.3178
1.0249
1.0000 0.7071 -0.0000
0.7071 1.0000 0.7071
-0.0000 0.7071 1.0000
3^ B e i s p i e l : B e n z e n Iterationsschranke = 5.773502493866545E-007 Rotation:
9
Zeit:
7.875 s
Thresh:
0.000000
Theta:
-0.00
Eigenwert-Koeffizienten und Hückel-MO-Koeffizienten 1 1 2 3 4 5 6
2
3
4
2.0000
1.0000
1.0000
-1.0000
-1.0000
-2.0000
0.4082 0.4082 0.4082 0.4082 0.4082 0.4082
0.2888 -0.2886 -0.5774 -0.2888 0.2886 0.5774
-0.4999 -0.5001 -0.0001 0.4999 0.5001 0.0001
0.1037 0.4400 -0.5437 0.1037 0.4400 -0.5437
-0.5680 0.3738 0.1941 -0.5680 0.3738 0.1941
0.4082 -0.4082 0.4082 -0.4082 0.4082 -0.4082
Gesamt- w-Elektronenenergie:
6 a
+
8.0000 ß
f r e i e V a l e n z a l s R e a k t i v i t ä t s i n d e x e i n e s Z e n t r u m s ji u n d P - M a t r i x 5 1 2 3 4 5 6
0.3987
0.3987
0.3987
0.3987
0.3987
0.3987
1.0000 0.6667 0.0000 -0.3333 -0.0000 0.6667
0.6667 1.0000 0.6667 -0.0000 -0.3333 -0.0000
0.0000 0.6667 1.0000 0.6667 0.0000 -0.3333
-0.3333 -0.0000 0.6667 1.0000 0.6667 -0.0000
-0.0000 -0.3333 0.0000 0.6667 1.0000 0.6667
0.6667 -0.0000 -0.3333 -0.0000 0.6667 1.0000
284
8.8 Programm-Beispiel 24: Diagramme von
ffüc/reY-Eigenwert-Koeffizienten
und Molekülorbitalen Die nachstehende Bildschirm-Anzeige informiert über die Funktionsweise dieses Programmes zur graphischen Auswertung der mit den Programm-Beispielen 21 und 23 erhaltenen Matrizen, Koordinaten, Eigenwerten und Eigenvektoren. Bildschirm Quantenchemie mit Personal Computern Programm : HMO-Diagramme Filename : HUECKEL.BAS Kapitel 8: Das Hückel-Molekülorbital-Modell ( c ) Walter de Gruyter & Co. (1990) Autor: F. Marschner Version: 1.0 Das Programm dient zur graphischen Darstellung von Diagrammen der H ü c k e l - E i g e n w e r t - K o e f f i z i e n t e n und M o l e k ü l - O r b i t a l - K o e f f i z i e n t e n . A l s D A T A - W e r t e oder von einem File können gelesen werden: ( a ) top. HMO-Matrix und Koordinaten mit F i l e - E x t e n s i o n .TOP und ( b ) zugehörige Eigenwerte und M O - K o e f f i z i e n t e n - M a t r i x ( F i l e - E x t e n s i o n
.JAC).
K E Y - T a s t e n - M e n ü f ü r Funktionstasten F l , ' N e u ' - b e g i n n mit anschl. [Enter]
F2, ' T i t e l '
eingeben
F3, 'GET' graph. Bildschirm speichern F4, 'PUT' graph. Bildschirm restaurieren F5, 'invers' Graphik in v i d e o i n v e r s F7, 'BLOAD' Bild laden F9, 'FNAME' Filename eingeben
F6, 'BSAVE' Bild saven F8, ' S c r _ s a v e ' T e x t - B i l d s c h i r m FlO.'Disk' Disketteninhalt
saven
zeigen
Programm 10 cls:key o f f 11: sub Vorspann 12 shared a$,dialog$,n 13 t i t e l $ ( 0 ) = " Quantenchemie mit Personal Computern " 14 titel$(l)=" Programm : HMO-Diagramme " 16 titel$(2)=" Filename : HUECKEL.BAS" 18 titel$(3)=" Kapitel 8: Das H ü c k e l - M o l e k ü l o r b i t a l - M o d e l l " 20 titel$(4)=" ( c ) Walter de Gruyter & Co. (1990)" 22 titel$(5) = " Autor: F. Marschner Version: 1.0" 24 t e x t $ ( l ) = " D a s Programm dient zur graphischen Darstellung von Diagrammen der" 26 t e x t $ ( 2 ) = " H ü c k e l - E i g e n w e r t - K o e f f i z i e n t e n und Molekül-Orbital-Koeffizienten. " 27 t e x t $ ( 3 ) = " A l s D A T A - W e r t e oder von einem File können gelesen werden:" 28 t e x t $ ( 4 ) = " ( a ) top. HMO-Matrix und Koordinaten mit F i l e - E x t e n s i o n .TOP und " 29 t e x t $ ( 5 ) = " ( b ) zugehörige Eigenwerte und M O - K o e f f i z i e n t e n - M a t r i x ( F i l e - E x t e n s i o n .JAC)." 30 t e x t $ ( 6 ) = " M i t den Tasten PgUp (page up) und PgDn (Page down)
285
werden sukzessive" text$(7)="die Diagramme der Molekülorbitale angezeigt." text2$(l)=" KEY-Tasten-Menü f ü r Funktionstasten" text2$(2)="Fl, 'Neu'-beginn mit anschl. [Enterl F2, 'Titel' eingeben" 46 text2$(3)="F3, 'GET' graph. Bildschirm speichern F4, 'PUT' graph. Bildschirm restaurieren" 48 text2$(4)="F5, 'invers' Graphik in video invers F6, 'BSAVE' Bild saven " F8, 'Scr_save' 50 text2$(5)="F7, 'BLOAD' Bild laden Text-Bildschirm saven" FlO.'Disk' 52 text2$(6)="F9, 'FNAME' Filename eingeben Disketteninhalt zeigen" 68 dialog$="KEY-Tasten-Menü: [Altl-F Forts.: [Enter] max.(Ordnung Ende: [Esc)" 70 rem Seiten-Vorbereitung 76 cls:for i=0 to 5:print titel$(i):next i 80 print:for i = l to 5:print text$(i):next i: 81 print:for i = l to 6:print text2$(i):next i 82: color 0,7:'video invers im Screen 0 83 gosub 1000:color 7,0:'Rücksetzen 84 if a$=chr$(13) then exit sub 85 if a$="0" then cls:input " max. Ordnung der A-Matrix n= ",n:exit sub 86 goto 82 99 end sub 100 key 15. chr$(&H08)+chr$(33):'Alt-F 104 on key(15) gosub 1100 106 key(15) on 108 on error goto 9990 112 call Vorspann 116 defint d,m,n,r,x,y: 118 if n=8 t h e n s c r e e n ccc else 210 218 rem D a r s t e l l u n g von MO-Eigenwerten ( H ü c k e l - M O - K o e f f i z i e n t e n ) 220 a ( l , l ) = a l l : a ( 2 , 2 ) = a 2 2 : ' R ü c k g a b e der Eigenwerte 222 t i t e l $ = " H ü c k e l - K o e f f i z i e n t e n - D i a g r a m m in ß": gosub 19000 228 230 232 234 236 238 240 242 244 246 248 250 252 254 256 258 260 264 266 268 270 272 274 280
rem D a r s t e l l u n g der Mo-Diagramme a ( l , l ) = x l I : a ( l , 2 ) = y l 2 : a ( 2 , 2 ) = y 2 2 : ' R ü c k g a b e der Koordinaten rem F e n s t e r f ü r MO-Diagramm a l = 3 0 0 : a 2 = 638:bl = 12:b2 = 190 call r e c h t e s F e n s t e r ( c c c , a l , a 2 , b l , b 2 ) locate l , 4 0 : p r i n t " M o l e k ü l - O r b i t a l - D i a g r a m m " rao=l do eis call MODiagramm(n,mo,al2,a(),sO) key o f f : l o c a t e 25,40: p r i n t " PgUp PgDn [ A l t - F Enter] [Esc)";:key (15) on if n e u = l t h e n e x i t loop while not i n s t a t : w e n d a$=inkey$:a$=ucase$(a$) if n e u = l or a$="N" t h e n e x i t loop if a $ = c h r $ ( 2 7 ) t h e n end if a $ = c h r $ ( 0 ) + c h r $ ( 7 3 ) t h e n m o = m o + l : ' 7 3 = PgUp if a $ = c h r $ ( 0 ) + c h r $ ( 8 1 ) t h e n m o = m o - l : ' 8 1 = PgDn if mo>n t h e n mo=n if mo 2 ) 15720 rem Zeichnen der Achsen 15730 line ( 2 , 0 ) - ( a 2 , 0 ) , , , m o t i f 2 : ' x - A c h s e 15740 line ( 2 , b l ) - ( 2 , b 2 ) , , , m o t i f l : ' y - A c h s e 15750 end sub 15770: 15780 15790 15800 15810 15820 15830 15840
sub r e c h t e s F e n s t e r ( c c c , a l ,a2,bl ,b2) breit = 338 :hoch = 178 :fond = 0 : f a = 3 0 0 : f b = 12 if ccc=9 or ccc=10 then fb=20:hoch=300 if c c c = l l or ccc=12 then fb=20:hoch = 350 view ( f a , f b ) - ( f a + b r e i t , f b + h o c h ) , f o n d , 3 rem v i r t u e l l e r Bildschirm window screen ( a l ,bl ) - ( a 2 , b 2 ) end sub
289
15860: sub MODiagraram(n,mo,al2,a(2),s(2)) 15870 rem a l 2 enthält Matrixelement (1,2) der oberen Dreiecksmatrix A 15880 rem mo ist Nummer des Molekülorbitals; M O - K o e f f i z i e n t e n in S 15890 rem Koordinaten in a ( i , l ) und a ( i , 2 ) f ü r x resp. y 15900 shared ccc 15920 rem Paint-Codierung 15930 motif$ = " " + c h r $ ( 1 7 0 ) + c h r $ ( 8 5 ) 15940 rem L i n i e n - M o t i f 15950 motif=130:'oder &h82 15960 motif=&haaaa:'oder motif=&h41: 15970 rem Berücksichtigung, daß x : y = 2 : l im Screen 2 15980 ks=.5:pi=4"atn(l) 16000 rem 1. Abstand und Kreis-Radius rO als Bezugsradius 16010 m u = l : x l = a ( m u , l ) : y l = a ( m u , 2 ) : n u = 2 : x 2 = a ( n u , l ) : y 2 = a ( n u , 2 ) 16030 rl2=sqr((x2-xl)'(x2-xl)+(y2-yl)'(y2-yl)) 16040 rO=rl2/4:'Radius (auch 1/3) oder über input ändern 16060 rem Punkte verbinden mit oberer Dreiecks-Matrix als Kriterium. 16070 rem Berechnung der Schnittpunkte ( x a , y a ) von Kreis 1 (Radius r l ) , ( x b , y b ) von Kreis 2 (Radius r2) mit der Verbindungsgeraden durch die Punkte ( x l , y l ) , ( x 2 , y 2 ) . Verbindung von ( x a . y a ) mit (xb,yb). Dadurch wird das Zeichnen von Linien im Kreis im Rahmen der Rechengenauigkeit vermieden. 16110 f o r m u = l to n - 1 16120 for n u = m u + l to n 16130 rem Zwischenspeichern der 1. y - K o o r d i n a t e 16140 b l 2 = a ( l , 2 ) : a ( l , 2 ) = a l 2 : ' Ü b e r g a b e 16150 if a(mu,nu)=0 then a ( l , 2 ) = b l 2 : goto 16340 16160 a ( l , 2 ) = b l 2 : ' Rückgabe 16170 xl=a(mu,l):yl=a(mu,2):x2 = a(nu,l):y2=a(nu,2) 16180 ' p s e t ( x l , y l ) : p s e t ( x 2 , y 2 ) : ' z u m Setzen der Mittelpunkte 16190 rem Bestimmung des Steigungswinkels alpha 16200 dx=x2-xl:dy=y2-yl 16210 if a b s ( d x ) < l then alpha=.5"pi eise alpha=atn(dy/dx): 16220 ks=.5:if a b s ( d y ) < l then k s = l : ' V e r b i n d u n g s l i n i e in x - R i c h t u n g 16230 rem Bestimmung der Schnittpunkte der Verbindungsgeraden mit dem Kreis 16240 rem Berechnung des Radius um die Zentren mu,nu 16250 rl=r0*abs(s(mo,mu)):r2=r0'abs(s(mo,nu)) 16260 rem Berechnung der Kreisschnittpunkte 16270 rem rechter Schnittpunkt mit Kreis 1 16280 if dx>=0 then x a = x l + k s " r l * c o s ( a l p h a ) : y a = y l + k s ' r l * s i n ( a l p h a ) 16290 if dx=0 then x b = x 2 + k s " r 2 " c o s ( p i + a l p h a ) : y b = y 2 + k s " r 2 " s i n ( p i + a l p h a ) 16320 if dx|Xm fj
-
L>
7„„ W 0
k = \ L
- ±ro
}
L( qu Wv + k)
ßm 1
für
q^ = 2 " andernfalls
« - D i polmoment:
U i, u.w,2 * + u«,2 y + -»2 u «, ' f tt -— f^ r
»M =
I
= 13 ",n:goto 50 'nl = . 5 " n * ( n - l ) : ' A n z a h l der Elemente in der oberen Dreiecks-Matrix dim dynamic x ( n ) , y ( n ) , z ( n ) : r e m Koordinaten dim dynamic t y p $ ( n ) : ' E l e m e n t - T y p dim dynamic q ( n ) : ' A n z a h l der Elektronen eines Zentrums dim dynamic z e ( n ) : ' e f f e k t i v e Kernladung dim dynamic w(n):'Parameter des Valenzzustandsionisationspotentials dim dynamic g(n):'Parameter der Zweielektronen-Einzentrum-Wechselwirkung dim dynamic Dg(n):'Korrekturterm der E1WW (ab 10 Heteroatomen) dim dynamic Db(n):'Korrekturterm des Resonanz-Parameters ß dim dynamic Dr(n):'Korrekturterm der Bindungslänge r dim dynamic f(n,n):'SCF-Matrix später CI-Matrix dim dynamic p ( n , n ) : ' l . P - M a t r i x dim dynamic pp(n,n):'2. P - M a t r i x später C I - K o e f f i z i e n t e n , mit Zwischenspeicher f ü r SCF-Eigenwerte dim dynamic c ( n , n ) : ' M O - K o e f f i z i e n t e n - M a t r i x dim dynamic bb(n):'MO-Besetzungszahlen dim dynamic Dx(n):'Übergangsmoment in x - R i c h t u n g und CI-Energien dim dynamic Dy(n):'Übergangsmoment in y - R i c h t u n g und Extinktionen dim dynamic Dz(n):'Übergangsmoment in z - R i c h t u n g und Oszillatorstärke m=4000:dim dynamic b i l d ( m ) , z e i l e $ ( 2 4 ) rem System-Informationen locate zeile, 1 tO=timer-tO:print using "Zeit: # # . # # # s ";t0 print " f r e i e r Speicherplatz: Strings Felder " print tab(23) f r e ( O ) t a b ( 3 6 ) f r e ( - l ) rem Grund-Parameter, Konstanten und Voreinstellung rem atomare Konstanten aH=.529177249:'Bohr-Radius in A Hartree=27.2113961 :'eV =[e'2/aH) pi=4'atn(l) t a u l = .47f>:'in A, Modell-Parameter der part. Bindungslokalisierung tau2=. 1 :'Ladungslokalisierungs-Parameter rem steht im Zusammenhang mit der Kraftkonstanten einer " - B i n d u n g a=1.4:'Bindungsabstand kx=.5:ky=.65:'Abbildungsfaktoren rem Berücksichtigung von Verdrillung um eine Bindung rem Voreinstellung: n u l , nu2 Zentrennummern nul = l : n u 2 = 2 : T h e t a = 0 : rem Eingabe f ü r PPP-SCF-Programm print "Eingabe f ü r SCF-Berechnung: " zeile=csrlin d i a l o g $ = " ( A ) bei. SCF-Daten ( B H F o r t s . Koordinaten+Parameter (C) Ring+Parameter " 325
111 112 113 115 116 117 118: 119 120 121 123: 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 140 141 142 143 144 145 146 148 152 153 154: 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
gosub 1000:locate zeile,1 if a $ = " A " then 188 if a$="C" then 118 rem Zentrenzahl n und Koordinaten von File lesen d i a l o g $ = " Koordinaten aus File lesen (J/N)":gosub 1000:locate zeile, 1 if a$="J" then call K o o r d i n a t e n F i l e l e s e n ( n , x ( ) , y ( ) ) : g o s u b 1050:goto 123 input "Eingabe: Ringgröße n = ",n if n = 0 then n = 6 : ' 6 - R i n g - K o o r d i n a t e n berechnen call R i n g K o o r d i n a t e n ( n , a , x ( ) , y O ) for i = l to n : z ( i ) = 0 : n e x t i rem Parameterliste rem Parameterliste wird in pp(n,n) eingelesen. rem npz Zahl der Zeilen der Parameterliste rem nps Zahl der Spalten der Parameterliste d i a l o g $ = " Parameterliste aus File lesen (J/N)":gosub 1000 locate zeile,1 if a $ = " J " then call ParameterFilelesen(npz,nps,typ$(),ppO) if a$"J" then call ParameterMatrix(npz,nps,typ$(),pp()):'als DATA rem Parameterliste anzeigen, ergänzen oder saven dialog$="Parameterliste anzeigen (J/N)":gosub 1000 locate z e i l e . l if a$="J" then call P a r a m e t e r l i s t e ( n p z , n p s , t y p $ ( ) , p p ( ) ) rem Folgende Parameter werden aus der Parameterliste erzeugt: rem "q,Z,W,g,6g,Sß,6r"; Anzahl der Elektronen eines Zentrums rem (atomare Besetzungszahl), e f f e k t i v e Kernladung, VSIOP, rem Z w e i - E l e k t r o n e n - E i n z e n t r u m - I n t e g r a l , drei Korrekturterme. rem Isokonjugiertes System a u f s t e l l e n i=l:'Kohlenstoff for k = l to n q(k) = pp(i,l):ze(k)=pp(i,2):w(k)=pp(i,3): g(k)=pp(i,4):dg(k)=pp(i,5):db(k)=pp(i,6):dr(k)=pp(i,7) next k nn=n:'Zahl der Elektronen rem graphische Zuordnung der H e t e r o - A t o m e , A n z e i g e der Molekül-Struktur im Screen 2 oder 8 mit Numerierung, Element-Nr., A O - T y p input "Eingabe: Bildschirmkonstante SCREEN ( 2 ) ( 8 ) ",ccc screen ccc: a a = 2 : ' F e n s t e r - I n t e r v a l l a l = - a a : a 2 = a a : b l = - a a : b 2 = a a : ' l i n k s unten nach rechts oben call A u s w a h l F e n s t e r ( c c c , a l , a 2 , b l , b 2 ) call Z e i c h n e n ( n , a , x ( ) , y O ) call P u n k t e ( n , x ( ) , y O ) d i a l o g $ = " F e n s t e r - I n t e r v a l l ändern (J/N)":gosub 1000 if a $ = " J " then gosub 1050:print " I n t e r v a l l z a h l ";aa;:_ input "Eingabe: ",aa:goto 154 gosub 1050:'Zeile 1 löschen, Cursor in 1 locate 6 , l : p r i n t " i Element AO-Typ" f o r m 2 $ = " # # # &" f o r i = l to npz print using form2$;i,typ$(i) next i rem np Zahl der H e t e r o - A t o m - P a r a m e t e r im Molekül dialog$="Eingabe: Anzahl der H e t e r o - A t o m e ":gosub 1000 n p = v a l ( a $ ) : i f np>n then np=n rem Auswahl des E l e m e n t - T y p s , Zuordnung der Nummern der Heteroatome rem Übergabe der Parameter locate 3,1: 326
173 174 175 176 177 178 179 180 181 182 183 184 185 186 188: 189 190 191 192 193 194 195 196 197 199: 200 202: 203 204 205 206 207 208 209 210 211 212 214: 215 216 217 218 219 220 221 224: 225 226 227
if np0 then print " i k q Z W g 6g Sß 6r" form$="## # # # ## ##.######.#######.######.######.#### ##.####" f o r j = l to np gosub 1050 input "Hetero-Atom-Zuordnung: Element-Nr. i zu Zentrum-Nr. k Eingabe: i,k ",i,k tp$=typ$(i):q(k)=pp(i,l):ze(k)=pp(i,2):w(k)=pp(i,3): g(k)=pp(i,4):dg(k)=pp(i,5):db(k)=pp(i,6):dr(k)=pp(i,7) locate 4,1: print using f o r m $ ; i , k , q ( k ) , z e ( k ) , w ( k ) , g ( k ) , d g ( k ) , d b ( k ) , d r ( k ) rem graphische A n z e i g e des Heteroatoms x=kx"x(k):y=ky"y(k):x=pmap(x,0):y=pmap(y,l) x=x/8:y=y/8:t$=mid$(tp$,4,2):locate y,x:print t$; next j d i a l o g $ = " Änderung (J/N)":gosub 1000:if a $ = " J " then 154 else 224 rem bei. SCF-Daten eingeben dialog$="Daten: (M)anuell (L)esen (Z)eigen (A)endern (E)rgänzen ( S ) a v e n Forts.: [Enter)":gosub 1000:locate z e i l e . l if a$=chr$(13) or a $ = " " then 224 if a$="M" then cls:goto 199 if a$="Z" then cls:goto 214 if a $ = " A " then input "Eingabe: Nummer der Änderung ",k:na=k:ne=k:goto 202 i f a $ = " E " then input "Eingabe: Anzahl der Ergänzungen " , n e r : n a = n + l : n = n e r + n : n e = n : g o t o 202 if a $ = " L " then call DatenLesen if a$="S" then call DatenSaven goto 188 input "Eingabe: Anzahl der Zentren n = ",n na=l:ne=n for i = n a to ne print "Zentrum: i = " ; i input "Eingabe: Koordinaten x,y,z " , x ( i ) , y ( i ) , z ( i ) input "Eingabe: Elektronenzahl des AO's " , q ( i ) input "Eingabe: e f f e k t i v e Kernladung " , z e ( i ) input "Eingabe: Valenzzustandsionisationspotential " , w ( i ) input "Eingabe: Zweielektronen-Einzentrum-Wechselwirkung " , g ( i ) input "Eingabe: Korrekturterm der E1WW ",Dg(i) input "Eingabe: Korrekturterm des Resonanz-Parameters ",Db(i) input "Eingabe: Korrekturterm der Bindungslänge ",Dr(i) next i rem K o n t r o l l - A n z e i g e print " i x(i) y(i) z(i) q(i) ze(i) w(i) g(i) Dg(i) Db(i) Dr(i)" form$="### # # . # # # # . # # # # . # # ## ##.## ###.## ###.## ##.## ##.## ##.##" f o r 1=1 to n print using form$;i,x(i),y(i),z(i),q(i),ze(i),w(i),g(i),Dg(i),Db(i),Dr(i) next i zeile=csrlin goto 188 rem SCF-Berechnung ccc=0:screen ccc:cls rem System-Informationen print "SCF-Berechnung:" 327
228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255: 256 257 258 259 260 261 262 264 266 267 268 269 270 271 272 273 274 275 276 278:
print " f r e i e r Speicherplatz: Strings Felder " print t a b ( 2 3 ) fre(O) t a b ( 3 6 ) f r e ( - l ) print "Modell-Parameter der Bindungslokalisierung t a u l = "; using "#.###";taul print "Modell-Parameter der Ladungslokalisierung tau2= "; using "#.###";tau2 zeile=csrlin rem Eingabe von tau d i a l o g $ = " Änderung (J/N)":gosub 1000:locate zeile,1: if a$="J" then input "Eingabe: t a u l , t a u 2 " , t a u l , t a u 2 : print "Verdrillungswinkel:"; using " T h e t a = # # # # . # # T h e t a " 180/pi;:print " um die Bindung " ; n u l ; " ";nu2; beta=fribeta(a,nul,nu2) print " Resonanz-Parameter: ß(";nul;",";nu2;")";using " = # # . # # # # eV beta zeile=csrlin d i a l o g $ = " Änderung (J/N)":gosub lOOO.locate zeile, 1: if a $ X " J " then 255 input "Eingabe: n u l , nu2, Theta in ",nul,nu2,Theta:_ Theta=Theta"pi/180 print "Verdrillungswinkel:"; using " T h e t a = # # # # . # # T h e t a ' 180/pi;:print " um die Bindung " ; n u l ; " ";nu2; print " Resonanz-Parameter: ß(";nul;",";nu2;")";using " = # # . # # # # eV f n b e t a ( a , n u l ,nu2) zeile=csrlin dialog$="Drehung um x - A c h s e : (M)olekülteil-Nummern Forts.: [Enter)":gosub lOOO.locate zeile,1 if a$=chr$(13) or a $ = " " then 255 ' Drehung nur bei f o r t l a u f e n d e r Numerierung möglich gosub 1050 input "Nummer Anfang, Nummer Ende " , i l , i 2 f o r i = i l to i2 y(i)=y(i)"cos(Theta)-z(i)'sin(Theta) z(i)=y(i)"sin(Theta)+z(i)"cos(Theta) next i rem SCF-Matrix a u f s t e l l e n und anzeigen rem Startwerte für die P - M a t r i x und Zahl der Elektronen bestimmen nn=0:for i = l to n : p ( i , i ) = q ( i ) : n n = n n + q ( i ) : n e x t i print "Zahl der Elektronen = ";nn for i = l to n - l : f o r j = i + l to n : p ( i , j ) = 0 : p ( j , i ) = 0 : n e x t j : n e x t i call S C F M a t r i x ( a , n , w ( ) , p ( ) , q ( ) , f O ) titel$=str$(n)+" x"+str$(n) + " F-Matrix" call M a t r i x A u s g a b e ( 0 , t i t e l $ , n , n , f ( ) , f ( ) ) : g o s u b 1090 rem SCF-Zyklus rhol=4:'Jacobi-Genauigkeit lambda=3:'SCF-Toleranz itermax=10 print "SCF-Zyklus: Jacobi-Genauigkeit ro= ";rhol;"SCF-Toleranz 1 lambda;" max. Iterationszahl i = "jitermax zeile=csrlin dialog$ = " Änderung (J/N)":gosub 1000: if a$="J" then locate z e i l e , l : i n p u t "Eingabe: ro,l,i " , _ rhol .lambda,itermax locate zeile,1: lambda= 10" ( - l a m b d a ) iter=0:'lterationszähler tO=timer rem Beginn des Zyklus 328
279 iter=iter+l: 280 rem 1. P - M a t r i x in 2. P - M a t r i x übergeben (i — > i + 1 ) 281 for i = l to n:for j = l to n : p p ( i , j ) = p ( i j ) : n e x t j : n e x t i 282 rem neue SCF-Matrix a u f s t e l l e n 283 call S C F M a t r i x ( a , n , w ( ) , p ( ) , q ( ) , f O ) 284 rem Diagonalisierung und Sortieren 285 call EinheitsMatrix(n,cO) 286 h a l t = 0 : r h o = r h o l :call J a c o b i ( h a l t , r h o , n , f ( ) , c O ) 287 call S o r t i e r e n ( n , f ( ) , c ( ) ) 288 rem neue P - M a t r i x 289 call MOBesetzungszahlen(nn,g2,bb()) 290 call Pmatrix(titel$,n,nn,g2,bb() 1 c(),pO) 291 rem K o n v e r g e n z - T e s t 292 call WurzelPMatrizen(n,p(),pp(),wurz) 293 tl=timer-tO 294 rem Zwischenausdruck 295 form$=" # # # s Iteration: # # # W u r z e l = # # . # # # # # # l a m b d a = # # . # # # # # " 296 print using form$;tl,iter,würz,lambda 297 rem Beschleunigung: ohne zwischenzeitliche Energieberechnung 298 rem a l t e r n a t i v e K o n v e r g e n z - A b f r a g e über Energie 299 'call MOBesetzungszahlen(nn,g2,bbO) 300 'call E n e r g i e ( n , g 2 , b b ( ) , f ( ) , q ( ) , w ( ) , g ( ) ) 301 ' E p i ( i t e r ) = E p i : ' e v t l . als Feld vereinbaren, f a l l s iter > 10 302 'if i t e r >= itermax or a b s ( E p i ( i t e r ) - E p i ( i t e r - l ) ) < lambda then 305 else 278 303 if iter >= itermax or würz < lambda then 305 else 278:'Fortsetzung des Zyklus 305: rem S C F - E n d - A n z e i g e 306 t i t e l $ = " S C F - E i g e n w e r t e und Eigenvektoren:" 307 call Matrix A u s g a b e ( l , t i t e l $ , n , n , f ( ) , c ( ) ) : g o s u b 1090 308 t2=timer 309 rem Energieberechnung 310 call MOBesetzungszahlen(nn,g2,bb()) 311 call E n e r g i e ( n , g 2 , b b ( ) , f ( ) , q ( ) , w ( ) I g ( ) ) 312 t 2 = t i m e r - t 2 : p r i n t using "Zeit: # # # . # # # s ";t2 314 d i a l o g $ = " ( A ) n f a n g neue (S)CF-Berechriung Graph: [Enter] (P)-Matrix Ende: [EscJ " 315 gosub 1000 316 if a $ = " P " then 354 317 if a$="S" then 224 318 if a $ = " A " then erase x,y,z,typ$,q,ze,w,g,Dg,Db,Dr,f,p,_ pp,c,bb,Dx,Dy,Dz,bild,zeile$:goto 50 320 rem graphische Darstellung von Eigenwerten und Orbitalen 322 screen ccc:cls 323 locate l,2:print " Eigenwertschema in |eV]" 324 call EigenwertDiagramm(n,f()) 325 rem Fenster für MO-Diagramm 326 aa=3 328: al = -aa:a2=aa:bl = -aa:b2=aa 329 gosub 1050:locate l,2:print " Eigenwertschema in |eV]" 330 call r e c h t e s F e n s t e r ( c c c , a l , a 2 , b l , b 2 ) 331 locate l,40:print " Molekül-Orbital-Diagramm " 332 mo=l:opt=l 333 do 334 eis 335 call MODiagramm(n,mo,opt,x(),y(),c()) 336 key o f f : l o c a t e 25,40: 337 print " PgUp PgDn (L)eg. (Z)oom [Enterl";:key (15) on 329
338 339 340 341 342 343 344 345 346 347 348 349 350 352 354: 355 356 357 358 359 360 361 362 363 364 365 368 370: 371 372 373 374 375 376 377 380 381 382 383 384 385: 387 389 390 391 392 393 394 395 396 397
while not instat:wend a$=inkey$:a$=ucase$(a$) if a $ = " L " then opt=0 else o p t = l i f a$="Z" then gosub 1050:print " I n t e r v a l l z a h l ";aa;:input "Eingabe: ",aa:exit loop if a $ = c h r $ ( 0 ) + c h r $ ( 7 3 ) then m o = m o + l : ' 7 3 PgUp if a $ = c h r $ ( 0 ) + c h r $ ( 8 1 ) then m o = m o - l : ' 8 1 PgDn if mo>n then mo=n if mo . 5 then 20340 rem Bestimmung des Steigungswinkels alpha aus Differenzenquotient dx=x2-xl:dy=y2-yl rem Berechnung des Radius um die Zentren mu.nu rl=r0*abs(s(mo,mu)):r2=r0*abs(s(mo,nu)) rem Berechnung der Kreisschnittpunkte rem Fall dx=0 ks=1.6 if abs(dx)= x mit "; 81 print " y= ";using form$;al;:prlnt" x +";using form$;aO 82 print "Werte-Tabelle:" 83 prlnt"x-unabh. y-abh. y-ber." 84 form2$="###.#### # # # . # # # # ###.####" 86 form3$="+#.#### +#.#### +#.#### " 86 form$=form2$: 87 if al=10 then form$=form3$ 88 for i = l to n 89 x=x(l):y=y(i): 90 yy(i)=al*x(i)+aO:yy=yy(l):'Funktionswerte Regressionsgerade 91 print using form$;x,y,yy 92 next i 93 zeile=csrlin 95: dialog$=" (A)nfang (G)raphlk (V)arlanz-Analyse Ende: [Escl":gosub 1000 96 If a$="A" then 25 97 If a$="G" and ccc>0 then gosub 2000:'Diagramm zeichnen mit Kreuz-Punkten 98 if a$ "V" then 95 100 screen 0:cls: rem Varianz-Analyse 101 print " Varlanz-und Regressions-Analyse:" 102 print " Varianz um x-Werte Varianz um y-Werte Kovarianz " 103 print using " ###.###### ###.###### ###.###### Sxx,Syy,Sxy 104 yreg=Sxy/Sxx:'Regressionskoeffizlent von y bzgl.x auch Steigung 106 xreg=Sxy/Syy:'Regressionskoeffizient von x bzgl.y 106 rcorr=Sxy/(sqr(Sxx *Syy)): 'Korrelationskoeffizient 351
108 print "Regression: (y bzgl. x ) (x bzgl. y ) K o r r e l a t i o n s k o e f f i z i e n t " 109 print using " ##.### ##.### # # . # # # # "; yreg,xreg,rcorr 110 1 Summe der Quadrate der Gesamt-Ab weichungen ist in Syy enthalten 111 SQgesamt=Syy 112 ' Quadratsumme der durch die Regression bedingten Abweichungen 113 SQbedingt=Sxy'Sxy/Sxx 114 ' Summe der Quadrate um die Regression (auch Residuumquadrat) ist ein Maß f ü r die Streuung der x , y - W e r t e p a a r e um die Regressionsgerade. Dabei wird v o r a u s g e s e t z t , daß die Fehler in den y - W e r t e n enthalten sind, die x - W e r t e also unabhängig sind. 118 SQum=SQgesamt-SQbedingt 119 ' Die entsprechenden Durchschnittsgrößen ( M i t t e l w e r t e ) der Quadrat-Summen ergeben sich durch Division durch den Freiheitsgrad. 121 DQum=SQum/(n-2) 122 print "Tabelle der V a r i a n z - A n a l y s e : " 123 ns=71:c$=chr$(196):print string$(ns,c$) 124 print " Abweichungen Quadratsumme Freiheitsgrade Durchschnittswert"; 125 print string$(ns,c$) 126 print using " bedingt ###.#### ### # # # . # # # # ";SQbedingt,l,SQbedingt 127 print using " um die Regression ###.#### ### # # # . # # # # ";SQum,n-2,DQum 128 print string$(ns,c$) 129 print using " gesamt ###.#### ### ";SQgesamt,n-l 130 print string$(ns,c$) 132 rem Standardabweichungen 133 ' Der Durchschnittswert der Summe der Quadrate um die Regression DQum ist ein Maß f ü r die Streuung der y - W e r t e um die Regressionsgeraden und wird auch als Varianz der y - W e r t e bezeichnet. Aus ihm errechnet sich die Standardabweichung (engl, standard error). 137 SEy=sqr(DQum) 138 rem Standardabweichung der Steigung a l der Regressionsgeraden 139 SEal=SEy/sqr(Sxx) 140 ' Standardabweichung des Achsenabschnittes aO der Regression 141 SEaO=SEy"sqr((xmittel~2/Sxx) + l/n) 142 print "Standardabweichung: 143 print " -in y - in der Steigung - im A c h s e n - A b s c h n i t t " 144 print using " # # # . # # # # ###.#### ###.####"; SEy,SEal,SEaO 145 ' Die prozentuale Anpassung der W e r t e - P a a r e an eine Gerade kann zur t-Wert-Bestimmung bei einem Freiheitsgrad benutzt werden, sie entspricht also der Wahrscheinlichkeit in % bei F = l : p ( t , l ) . 148 twert=abs(al)/SEal:proz=100"SQbedingt/Syy:Fwert=l 149 print "Prozentuale Anpassung ( P - W e r t ) : " 150 print " F - W e r t P - W e r t in % t-Wert " 151 print using " # # ##.### ##.### "; Fwert,proz,twert 152 p=proz:t=twert 153 ' Zur Berechnung der O b e r - und Untergrenzen kann a) der Wahrscheinlichkeitswert P eingegeben und der zugehörige t - W e r t aus der S t u d e n t ' s - V e r t e i l u n g in SUB 5000 berechnet werden oder b) der t - W e r t wird eingegeben und der P - W e r t in SUB 4000 berechnet. 155 dialog$="Eingabe: ( t ) - W e r t % - ( P ) - W e r t ( A ) n f a n g Forts.: [Enter] Ende: [Esc]":gosub 1000 157 eis 352
158 if a$="A" then 25 159 if a$="T" then gosub 4000 160 if a$="P" then gosub 5000 162 els 164 form5$="x-unabh. y-abh. y-ber. y-oben y-unten " 165 form6$="###.#### # # # . # # # # ###.#### ###.#### ###.####» 166 form7$="###.#### ###.#### ###.#### ###.####" 167 ns=len(form5$) 168 print "Werte-Tabelle mit t=";using "##.###";t;: 169 print " und P= "¡using " # # # . # # % :";p: 170 print string$(ns,c$) 171 print form5$ 172 print string$(ns,c$) 173 for 1=1 to n 174 x=x(i):y=y(i) 178 yy=al"x+aO 179 SEyneu=SEy*sqr(l+(l/n)+(x-xmittel)"2/Sxx) 180 yoben=yy+t*SEyneu 181 yunten=yy-t'SEyneu 182 print using form6$;x,y,yy,yoben,yunten 183 next i 184 print string$(ns,c$):zeile=csrlin 185: dialog$=" (A)nfang (Y)- (X)-Wert berechnen (G)raphik Ende: [Esc|":gosub 1000 187 if a$="Y" then call YWert 188 if a$="X" then call XWert 189 if a$="G" and ccc>0 then gosub 3000:' Zeichnen der Signifikanzgrenzen 190 if a$="A" then 26 195 goto 185 199 end:' Hauptprogrammende rem Funktionen 203 def fnGamma(x) 204 if x=0 then fnGamma=l:exit def 205 if (x mod 2)=0 then fnGamma=fnGammaXhalbegerade(x) 206 if (x mod 2)>nSeite then nel=nSeite zahl=0:nZeilen=24 320 321 do 322 els 323 zahl=zahl+l 324 print "Seite ";zahl: 325 ns=len(form$):c$=chr$(196): print" Daten-Anzeige und -Korrektur: " 326 print strlng$(ns,c$);: 327 if n>nZeiien then print tab(40) string$(ns,c$) else print 328 form0$="Nr. x-unabh. y-abh." 329 print formOS;: 330 if n>nZeilen then print tab(40) formO$ else print 331 zeile=csrlin:Zeile2=zelle-1 332 print strlng$(ns,c$);: 333 if n>nZellen then print tab(40) stringj(ns.ci) else print 334 zelle=csrlln:ZeileO=zeile:Spalte=l 335 for i=nal to nel 336 x=x(l):y=y(i): 337 338 locate Zeile,Spalte: print using form$;i,x,y 340 Zelle=csrlin: 341 if zeile >=nZeilen then Zeile l=Zeile:Zeile=Zeile0:Spalte=40 342 next 1 343 if SpalteH then locate Zellel,l:print strlng$(ns,c$) tab(40) string$(ns,c$) else print string$(ns,c$) 365
345 nal=Zahl*nSeite+l: 346 nZahl=(zahl+l)*nSeite 347 n e l = n : i f n>nZahl then nel=nZahl 348 if n>nSeite then dialog$=" Forts.: [Enter]":gosub 1000 349 loop until zahl>=ceil(n/nSeite) 350 zeile=csrlin 351: dialog$=" (K)orrektur (E)rganzung x,y-(V)ertauschen Exit: [Enterl ": gosub 1000 352 if a$=" " or a$=chr$(13) then exit sub 353 if a$="V" then for i = l to n:swap x(i),y(i):next i:goto 305 354 if a$="E" then n l = n + l : n 2 = n : c a l l ManuelleDatenEingabe(nl,n2,x(),y(),nr()): n=n2:goto 305 355 locate zeile,l:input "Eingabe: Nummer, x - , y-Wert ",i,x(i),y(i) 356 if i>n then n=i: 357 goto 305 358 end sub 359 sub YWertzeichnen 360 shared zeile,ns,c$,al,aO,n,xmittel,Sxx,SEy,_ form7$,form5$,t,axl,ax2,p,byl,by2 361 gosub 1050:input"Eingabe: x-Wert ",x:gosub 1050: 362 f o r m $ = " # # # . # # # # " 363 y = a l *x+a0 364 SEyneu=SEy'sqr(l + (l/n) + (x-xmittel)"2/Sxx) 365 yoben=y+t"SEyneu 366 yunten=y-t*SEyneu 367 print "x= "¡using form$;x;: 368 print " y = ";using form$;y;: 369 print " "¡using form$;t'SEyneu;: 370 print " mit t=";using " # # . # # " ; t ; 371 print " und P=";using " # # # . # # %";P 372 call horizontalStrich(axl,ax2,x,y) 373 call vertikalStrich(byl,by2,x,y) 374 call horizontalStrich(axl,ax2,x,yoben) 375 call horizontalStrich(axl,ax2,x,yunten) 376 line (x,yoben)-(x,yunten) 377 end sub 379 sub XWertzeichnen 380 shared zeile,ns,c$,al,a0,n,xmittel,ymittel,Sxx,SEy,t 1 axl,ax2,byl,by2,P 381 gosub 1050:input"Eingabe: y-Wert ",y:gosub 1050 382 f o r m $ = " # # # . # # # # " 383 rem Fieller1 s Theorem: DQum < DQbedingt 384 if al0 then x = x m i t t e l + ( y - y m i t t e l ) / a l 385 if al0 then S E y n e u = ( S E y / a l ) ' s q r ( l + ( l / n ) + ( y - y m i t t e l ) " 2 / ( a l ' a l ' S x x ) ) 386 xoben=x+t"SEyneu 387 xunten=x-t"SEyneu 388 print " y = "¡using form$;y;: 389 print " x = "¡using form$;x;: 390 print " "¡using form$;t'SEyneu;: 391 print " mit t=";using " # # . # # " ; t ; 392 print " und P=";using " # # # . # # %";P 393 call horizontalStrich(axl,ax2,x,y) 394 call vertikalStrich(byl,by2,x,y) 395 call vertikalStrich(byl,by2,xoben,y) 396 call vertikalStrich(byl,by2,xunten,y) 397 line (xoben,y)-(xunten,y) 398 end sub 356
400 sub YWert 402 shared zeile,ns,c$,al,a0,n,xmlttel,Sxx,SEy,form7$,form5$,t 403 lnput"Eingabe: x-Wert ",x 404 locate zeile.l 406 y=al"x+a0 406 SEyneu=SEy"sqr(l+(l/n)+(x-xmittel)~2/Sxx) 407 yoben=y+t*SEyneu 408 yunten=y-t'SEyneu 409 print using form7$;x,y,yoben,yunten 410 end sub 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426
sub XWert shared zeile,ns,c$,al,aO,n,xmittel,ymittel,Sxx,SEy,t form6$="x-unabh. y-abh. x-ber. x-oben x-unten" form7$=" ###.#### ###.#### ###.#### ###.####" input"Eingabe: y-Wert ",y locate zeile.l print string$(ns,c$) print form5$ print string$(ns,c$) rem Fiellei's Theorem: DQum < DQbedlngt if alOO then x=xmlttel+(y-ymittel)/al if alOO then SEyneu=(SEy/al)'sqr(l+(l/n)+(y-ymittel)*2/(al*al*Sxx)) xoben=x+t*SEyneu xunten=x-t'SEyneu print using form7$;y,x,xoben,xunten;:print " mit t=";using "##.##";t 427 print string$(ns,c$) 428 end sub
430 sub DiaFenster(ccc,fz,fs,al,a2,bl,b2) 431 ' (fz.fs) linker oberer Fensterpunkt: (Zeile,Spalte) im Textscreen 432 fond=0:fa=fs'8:fb=fz'8:breit=2*(300-fa):hoch=168-fb 433 if ccc=9 or ccc=10 then hoch=290:fb=22 434 if c c c = l l or ccc=12 then hoch=320:fb=40 435 view (fa,fb)-(fa+breit,fb+hoch),fond,3 436 rem virtueller Bildschirm 437 window ( a l , b l ) - ( a 2 , b 2 ) 438 end sub 439 sub Dlagramm(n,a(l),e(l)) 440 shared ccc,axl,ax2,byl,by2,nr(),titel$,dialogt,a$ 441 ka=.26:'Faktor für Fenster-Grenzen oben/unten 442 rem virtuelle Fenster-Koordinaten links/rechts bestimmen 443 rem a() sortiert nach fallenden Werten 444 call ZweiVektorenSortieren(n,a(),e()):'nach a() sortieren 445 axl=a(l):ax2=a(n) 446 axl=int(axl-axl'ka):ax2=ceil(ax2+ax2*ka) 447 call ZwelVektorenSortieren(n,e(),a()):'nach e() sortieren 448 byl=int(e(l)+e(l)'ka):'untere Fenster-Grenze 449 by2=ceil(e(n)+e(n)*ka):'obere Fenster-Grenze 450: gosub 1060:print titelt 462 fs=7:fz=3:call DiaFenster(ccc,fz.fs,axl,ax2,byl,by2) 454 1 Zeichnen der Punkte als Kreuze und Numerieren am oberen Rand in der Reihenfolge der Daten-Paare 456 for i = l to n 457 x=a(i):y=e(l) 458 rem Zeichnen der horizontalen Punktlinie 367
459 call horizontalStrich(axl,ax2,x,y) 460 rem Zeichnen der vertikalen Punktlinie 461 call vertikalStrich(byl,by2,x,y) 462 If a$="N" then call Numerleren(x,y,nr(i)) 463 next i 466 rem Raster am linken Rand 466 xk=100:le=10 467 for 1=0 to l e - 1 468 x a = a x l : x e = a x l + ( a x 2 - a x l ) / x k : y = b y l + i ' ( b y 2 - b y l ) / i e 469 line (xa,y)-(xe,y) 470 next i 471 rem linke Beschriftung 472 for 1=0 to ie+1 step 2 473 y0=byl+l*(by2-byl)/ie:y=pmap(y0,l):x=pmap(axl,0) 474 if cccx "
In den nachfolgenden Subroutinen werden nur die Veränderungen gegenüber den anderen Programmen angegeben. 1100 1102 1110 1130 1138
nrn=10:'KEY-Tasten Belegung key 1,"X,Y-Lesen" key 10,"X.Y-SAVE" on key(l) gosub 800 on key(10) gosub 900
2000: rem graphische Darstellung der Regressionsgeraden 2010 screen ccc:cls 2020 titel$= "y Diagramm: x.y-Wertepaare " 2030 call Diagramm(n,x(),y()) 2040 dialog$="(R)egressionsgerade (V)arianz-Analyse Ende: (Esc]":gosub 1000 2060 if a|="R" then call Regressionsgerade(al.aO) 2060 dialog$=H (V)arianz-Analyse Ende: [Esc]":gosub 1000 2070 return 3000: rem Zeichnen der Vertrauensgrenzen 3002 screen ccc:cls 3004 titel$= "y Diagramm: x.y-Wertepaare " 3006 call Diagramm(n,x(),yO) 3010: dialog$="(D)iagr. (R)-Gerade (V)-Grenzen ( t ) - (P)- (Y)- (X)-Wert Forts.: [Enterl ": 3014 gosub 1000 3016 if a$=chr$(13) or a$=" " then return 3018 if a$="R" then call Regressionsgerade(al,aO):goto 3010 3020 if a$="Y" then call YWertzeichnen:goto 3010 3022 if a$="X" then call XWertzeichnen:goto 3010 3024 if a$="D" then 3000 369
3026 3028 3030 3032 3034 3036 3038 3040 3042 3044 3046 3048 3050 3052
if a $ = " T " then gosub 4000 if a $ = " P " then gosub 5000 t i t e l $ = "y Diagramm: Regressionsgerade y » x gosub 1050:print titel$;:print " ( t = " ; u s i n g " # # . # # " ; t ; print "; P=";using " # # # . # # %)";P for i = l to n x=x(i):y=y(i):yy=al'x+aO SEyneu=SEy'sqr(l + (l/n)+(x-xmittel)"2/Sxx) yoben=yy+t"SEyneu:yunten=yy-t"SEyneu call h o r i z o n t a l S t r i c h ( a x l , a x 2 , x , y o b e n ) call h o r i z o n t a l S t r i c h ( a x l , a x 2 , x , y u n t e n ) line ( x , y o b e n ) - ( x , y u n t e n ) next i goto 3010
mit ":
4000: rem t - W e r t Eingabe und P - W e r t - B e r e c h n u n g 4010 gosub 1050:input "Eingabe: t - W e r t ",t 4020 n F = n - 2 : ' F r e i h e i t s g r a d 4030 p p = f n P r o b a b i l i t y ( t , n F ) 4040 V = f n G a u s s L e g e n d r e ( t , n F ) " f n K o n s t a n t e ( n F ) 4050 p=V"100:gosub 1050: 4060 print " F = " ; n F ; " t = "¡using " # # # . # # # " ; t ; : 4070 print " P = ";using " # # # . # # %";V*100 4080 dialog$="Anderung (J/N)":gosub 1000:if a$="J" then 4000 4090 return 5000: rem i t e r a t i v e Bestimmung des t - W e r t e s zu einem P - W e r t durch A b f r a g e nach Vorzeichenwechsel in der D i f f e r e n z dpv zwischen Z i e l - und Rechen-Wert. 5020 tk=.25:'Faktor zur 2. t-Wert-Bestimmung 5030 nF=n-2:'Freiheitsgrad 5040 gosub 1050:input "Eingabe: % - P - W e r t ",p0 5050 p 0 = p 0 / 1 0 0 : p 0 = l - p 0 5070 num=0:eps=0.001:nummax=20:'Zähler, Genauigkeit 5080 rem l.Mal t näherungsweise aus Dichte bestimmen 5090 t=fnT(nF,p0) 5100 num=num+l 5110 t ( l ) = t : ' l . Mal 5120 rem dazugehörige Verteilung bestimmen 5130 V=fnGaussLegendre(t,nF)"fnKonstante(nF) 5140 v = ( l - v ) 5150 d p v = p 0 - v : v z ( l ) = s g n ( d p v ) 5160 d p v ( l ) = d p v 5170 if a b s ( d p v ) < = e p s or num>=nummax then 5550 5180 if dpv < 0 then t = t + t k " t 5190 if dpv > 0 then t = t - t k ' t 5200: ' (2.) Berechnung mit Fallunterscheidung: f a l l s außerhalb I n t e r v a l l [ t + k • t ; t - k • t j , dann I n t e r v a l l vergrößern allerdings nur solange wie dpv(num) nicht beginnt zu d i v e r g i e r e n oder stagnieren. 5240 n u m = n u m + l : t ( n u m ) = t : ' 2 . Mal 5270 V=fnGaussLegendre(t,nF)*fnKonstante(nF) 5280 v = ( l - v ) : d p v = p O - v : v z ( n u m ) = s g n ( d p v ) : d p v ( n u m ) = d p v 5320 if a b s ( d p v ) < = e p s or num>=nummax then 5550 5330 if a b s ( d p v ( n u m ) ) > a b s ( d p v ( n u m - l ) ) and v z ( n u m ) = v z ( n u m - l ) t h e n _ t = t ( n u m - l ) : V = f n G a u s s L e g e n d r e ( t , n F ) " f n K o n s t a n t e ( n F ) : g o t o 5550:'Divergenz 5350 if dpv < 0 and v z ( n u m ) = v z ( n u m - l ) then t = t + t k * t : g o t o 5200 5360 if dpv > 0 and v z ( n u m ) = v z ( n u m - l ) then t = t - t k ' t : g o t o 5200 5370 t(2)=t(num):vz(2)=vz(num) 5380: rem Mittelwertbildung 360
5400 5430 5440 5480 5490 5500 5510 5520 5530 5540 5550: 5590 5600 5610 5620 5630 5640
t = . 5 " ( t ( 2 ) + t ( l ) ) : n u m = n u m + l : t ( 3 ) = t : ' 3 . Mal V=fnGaussLegendre(t,nF)'fnKonstante(nF) v = (l-v):dpv=p0-v:vz(3)=sgn(dpv):dpv(3)=dpv if a b s ( d p v ) < = e p s or num>=nummax then 5550 rem linke Seite if dpV0 and v z ( 2 ) = v z ( 3 ) then t ( 2 ) = t ( 3 ) : g o t o 5380 if dpV>0 and v z ( l ) = v z ( 3 ) then t ( l ) = t ( 3 ) : g o t o 5380 p = ( l - V ) " 100:gosub 1050:print " F = " ; n F ; " t = "¡using " # # # . # # # # " ; t ; : print " P = "¡using " # # # . # # % " ; ( 1 - V ) * 1 0 0 ; : print " Fehler: "¡using " # # . # # # # " ; d p v ; : print " Iteration: "¡using " # # # " ; n u m ; : dialog$="Änderung (J/N)":gosub 1000 if a $ = " J " then 5000 return
Im Programm sind verschiedene D A T A - W e r t e z.T. aus der Literatur z.B. E. Heilbronner,
H. Bock,
(s.
S. 236) i n t e g r i e r t . Nachstehend wird als
Beispiel die Bindungsordnung-Bindungsabstand-Regression
von Ethen, Benzen und
Graphit im HMO-Modell angegeben. Solche Vergleiche sind insbesondere bei alternierenden Kohlenwasserstoffen s i g n i f i k a n t , jedoch wurden auch n i c h t lineare Regressionen z.B. bei hochannellierten Benzen-Systemen
gefunden.
D a t e n - A n z e i g e und - K o r r e k t u r : Nr. x-unabh. y-abh 1.0000 1.3400 1 0.6670 2 1.3900 3 0.5350 1.4200 Regressionsgerade: y — > x mit y = - 1 6 . 7 7 9 1 E - 0 2 x +15.0649E-01 Werte-Tabelle: x-unabh. y-abh. y-ber. + 1.0000E+00 +1.3400E+00 +1.3387E+00 + 6.6700E-01 +1.3900E+00 + 1.3946E+00 +5.3500E-01 + 1.4200E+00 +1.4167E+00 Varianz-und Regressions-Analyse: Varianz um x - W e r t e Varianz um y - W e r t e Kovarianz 0.114846 0.003266 -0.019270 Regression: ( y bzgl. x ) (x bzgl. y ) Korrelationskoeffizient -0.168 -5.899 -0.9949 T a b e l l e der V a r i a n z - A n a l y s e : Abweichungen
Quadratsumme
Freiheitsgrade
bedingt um die Regression
0.0032 0.0000
1 1
gesamt
0.0033
2
Standardabweichung: -in y - in der Steigung - im A c h s e n - A b s c h n i t t 0.0058 0.0170 0.0129 Prozentuale Anpassung ( P - W e r t ) : F-Wert P - W e r t in % t-Wert 1 98.985 9.876 361
Durchschnittswert 0.0032 0.0000
Werte-Tabelle mit t = 3.124 und P = 80.01 % : x-unabh. y-abh. y-ber. y-oben 1.0000 0.6670 0.5350
1.3400 1.3900 1.4200
0.2000 x-unabh. 1.2500
y
y-abh. 1.5286
Diagram*:
y-unten
1.3387 1.3946 1.4167
1.3638 1.4156 1.4400
1.3136 1.3735 1.3934
1.4729
1.5081
1.4378
x-ber.
x-oben
x-unten
1.2484
1.8088
mit t = 3.12
Regressionsgerade y — > x
Mit = 3 ?
Eingabe: N
Ist die Haupt-Drehachse C2(z): (Drehung um 180° um z-Achse) ? 363
Eingabe: J
Ist die Drehspiegelung S4(z) ? (Drehung um 90° um z - A c h s e und Spiegelung c h )
Eingabe: N
Liegt eine w e i t e r e Drehachse C2(x) oder C2(y) v o r ? Ist die Spiegelung crxy =