Ich wurde aufgefordert, diesen kurzen Artikel durch den kĂŒrzlich veröffentlichten Artikel ĂŒber HabrĂ©
Dynamics des Vertikalfluges eines Flugzeugs zu schreiben, das
leichter als Luft ist . Ich wollte einen Kommentar schreiben, aber er entwickelte sich schnell zu etwas mehr und es scheint nĂŒtzlicher zu sein.
Der Originalartikel enthĂ€lt ein Beispiel fĂŒr die Berechnung der Dynamik eines Ballons oder eines Ballons in der AtmosphĂ€re. In diesem Fall werden sowohl der Luftwiderstand als auch Gradienten der Dichte und Temperatur der AtmosphĂ€re berĂŒcksichtigt, so dass sich das Problem auf eine nichttriviale Differentialgleichung reduziert, die mit der Python-Sprache erfolgreich numerisch gelöst werden kann. In dem Artikel ist alles in Ordnung: Der Ball startete, stoppte wo nötig, wir bekamen sowohl die maximale Höhe als auch die Zeit des Aufstiegs. Ich brauchte einen weiteren Ball, um mehr zu starten, ihn grĂŒndlicher zu laden oder Wasserstoff in Helium umzuwandeln - kein Problem - die Parameter im Programm zu Ă€ndern und alles erneut zu berechnen. Das Programm ist verstĂ€ndlich, linear, es funktioniert. Was kann hier also verbessert werden, wenn das Modell nicht kompliziert ist?
Sie können das Modell und die Berechnungen universell nĂŒtzlich machen, nicht fĂŒr einen bestimmten Ball, sondern fĂŒr eine Vielzahl von Aufgaben. Es ist möglich, eine optimale Berechnungsgenauigkeit bei der numerischen Integration der Differentialgleichung sicherzustellen. Sie mĂŒssen die Integrationsgrenzen und -schritte bei der Berechnung in einer Vielzahl von Parametern nicht mehr manuell festlegen. SchlieĂlich können Sie ohne numerische Lösung viel ĂŒber die Dynamik des Fluges unseres Balls erzĂ€hlen. Und fĂŒr all dies gibt es einen alten Trick, wahr und zuverlĂ€ssig, der einst fĂŒr Berechnungen auf Computern und bevor sie erscheinen, obligatorisch ist und jetzt optional und oft mit Magie und Kunst verbunden ist -
Gleichungen in eine dimensionslose Form und ihre eigenen MaĂstĂ€be zu bringen . Ich werde das Problem der Luftfahrt als Beispiel verwenden und zeigen, wie die Analyse des Problems mit dieser Technik aussagekrĂ€ftiger und eleganter wird. Und dann werde ich erklĂ€ren, warum dies fĂŒr Programmierer wichtig sein kann und warum dieser Artikel im Hub âFunctional Programmingâ landete.
Das Wesentliche beim Reduzieren von Gleichungen auf ihre eigenen Skalen besteht darin, solche MaĂeinheiten fĂŒr Zeit, Entfernungen, Massen, Ströme und andere dimensionale Variablen zu finden und einzufĂŒhren, in denen die Aufgabe die einfachste und eleganteste Form annimmt. Solche Einheiten werden als
charakteristische oder
geeignete Skalen des Problems bezeichnet. Gleichzeitig wird die Anzahl der Parameter, die sich auf die Lösung auswirken, erheblich reduziert. Wenn Sie das GlĂŒck haben, auf eine selbstĂ€hnliche Lösung zu stoĂen, verschwinden die Parameter möglicherweise vollstĂ€ndig!
Normalerweise lernt man diese Technik kennen, wenn man die Dynamik eines harmonischen Oszillators untersucht und die Bewegungsgleichung in eine kanonische Form bringt. UnabhĂ€ngig vom Oszillator (groĂ oder klein, nieder- oder hochfrequent, mechanisch oder elektromagnetisch) messen Sie die Zeit nicht in Sekunden, sondern in Perioden freier Schwingungen und die Amplitude nicht in Metern, sondern beispielsweise in der GröĂe der anfĂ€nglichen Abweichung Dann hat die Gleichung fĂŒr jeden Linearoszillator dieselbe Form:
x " + 2 z e t a x ' + x = 0
Es reicht aus, die Eigenschaften der Lösungen dieser Gleichung zu untersuchen, um alles ĂŒber alle harmonischen viskosen Reibungsoszillatoren zu wissen. Ohne Reibung verschwinden die Parameter vollstĂ€ndig im Problem, und wir erhalten als Lösung eine beispielhafte Sinuskurve. Trotzdem sind andere Sinuskurven bis zu einer einfachen linearen Ănderung der Koordinaten absolut identisch, so dass es keinen Sinn macht, sie einzeln zu analysieren.
Dies ist auch bei der Analyse von Kurven zweiter Ordnung der Fall. Nachdem wir die Parabel, Hyperbel oder Ellipse in ihrer kanonischen (kompaktesten) Form untersucht haben, haben wir alle ihre bemerkenswerten Eigenschaften gelernt. Danach erstreckt sich dieses Wissen auf jedes nicht triviale Quadrat. DarĂŒber hinaus wird dieselbe Technik bei der Analyse von Gleichungen der Mathematik zweiter Ordnung (in partiellen Ableitungen) verwendet.
Das Problem in der Physik auf eine eigene dimensionslose Form zu bringen, entspricht der Suche nach der kanonischen Form oder einem Muster in der Programmierung. Und zum GlĂŒck kann es mit einem vollstĂ€ndig formalen Algorithmus ausgedrĂŒckt werden:
- Wir fĂŒhren formale Skalierungsfaktoren fĂŒr Variablen ein.
- wir teilen die ganze Gleichung durch jede GröĂe, die die Dimension ihrer Terme hat;
- Aus den resultierenden dimensionslosen Komplexen, einschlieĂlich Skalierungsfaktoren, wĂ€hlen wir so viele Faktoren wie möglich aus und setzen sie der Einheit gleich.
- Wir lösen die resultierenden Gleichungen, indem wir Skalierungsfaktoren in Bezug auf die Parameter des Problems ausdrĂŒcken und die verbleibenden Komplexe als Ăhnlichkeitskriterien verwenden.
Als Ergebnis erhalten wir Gleichungen in kanonischer Form, die Eigenwerte des Problems sowie Ăhnlichkeitskriterien fĂŒr die Verallgemeinerung von Lösungen fĂŒr physikalisch Ă€hnliche Systeme. Je mehr Skalen Sie eingeben können (z. B. mithilfe von Symmetrie), desto prĂ€ziser wird die Bewegungsgleichung und desto weniger Steuerparameter bleiben im Problem. Der wahre Schatz fĂŒr den Forscher ist die Situation, in der es möglich ist, alle Parameter des Problems auszuschlieĂen und alle möglichen Lösungen in einer Kurve darzustellen. Solche Lösungen werden als selbstĂ€hnlich bezeichnet und vereinfachen das Leben erheblich, indem sie partielle Differentialgleichungen in gewöhnliche Differentialgleichungen oder sogar in algebraische umwandeln. Der zweite und dritte Schritt des obigen Algorithmus erfordern Auswahl und Argumentation, sie sind am wenigsten formal, aber selbst wenn Sie die Brute-Force-Methode verwenden, können Sie in diesem Stadium ein sehr tiefes systematisches VerstĂ€ndnis des Problems erhalten.
Wenden wir uns der ursprĂŒnglichen Bewegungsgleichung zu, die im Artikel ĂŒber Flugzeuge angegeben ist, und zeigen wir anhand ihres Beispiels, wie es auf seinen eigenen Skalen in eine dimensionslose Form umgewandelt werden kann. Die Gleichung hat die Form:
m fracd2hdt2=âmg+gW rho0eâbhâ frac12cS rho0eâbh operatornameZeichen left( fracdhdt right) left( fracdhdt right)2,
mit Anfangsbedingungen
h(0)=hâČ(0)=0.
Hier
h - die Höhe des Balls,
m - Masse des gesamten Flugzeugs mit Fracht,
g - Erdbeschleunigung,
W - das Gasvolumen in der Kugel,
c - Luftwiderstandsbeiwert,
S - charakteristischer Widerstandsbereich,
Ï0 - Luftdichte in Nullhöhe,
b - Koeffizient in der Boltzmann-Verteilung.
Erster Schritt. Wir fĂŒhren die formalen Skalen fĂŒr Zeit und Entfernungen ein:
h=h0y, quadt=t0 tau qquad(1)
und schreiben Sie die Bewegungsgleichung unter Verwendung von Strichen neu, um die Ableitungen zu bezeichnen:
m frach0t20yâł=âmg+gW rho0eâbh0y left[1â fraccS2Wg frach20t20 operatornamesign(yâČ)(yâČ)2 right].
Die Anfangsbedingungen in unserem Fall sind trivial, so dass sie weggelassen werden können, aber im Allgemeinen mĂŒssen wir sie auch neu schreiben.
Der zweite Schritt ist in der Tat die Nichtmessung der Gleichung. Alle darin enthaltenen Begriffe haben die Dimension der Kraft, und wir können sie in jede Kraft aufteilen. Normalerweise geteilt durch die TrĂ€gheitskraft - durch einen Faktor in der zweiten Ableitung der Entfernung. In diesem Fall werden als Parameter des Problems in der Regel bekannte Kriterien fĂŒr die dynamische Ăhnlichkeit wie die Reynolds- oder Euler-Zahlen erhalten. In unserer Aufgabe ordnen wir jedoch alle in der Aufgabe enthaltenen KrĂ€fte der Schwerkraft zu
mg und deshalb. Uns interessiert vor allem die Position des statischen Gleichgewichts - die maximale Höhe der Kugel bei gegebener TragfĂ€higkeit und die Ăbergangszeit dazu. Das statische Gleichgewicht hĂ€ngt nicht von den TrĂ€gheitseigenschaften des Systems ab, sondern direkt von der Schwerkraft. Also teilen und reduzieren wir, was möglich ist:
frach0gt20yâł=â1+ fracW rho0meâbh0y left[1â fraccS2Wg frach20t20 operatornamesign(yâČ)(yâČ)2 right].
Alles, die Gleichung ist dimensionslos, jetzt sind alle Variablen und alle darin enthaltenen Begriffe nur noch Zahlen. Und jetzt können wir solche LÀngen- und Zeitskalen frei wÀhlen, um die Anzahl der Aufgabenparameter zu minimieren. Wir haben zwei Unbekannte
h0 und
t0 und vier dimensionslose Komplexe:
frach0gt20, quad fracW rho0m, quadbh0, quad fraccS2Wg frach20t20
Das heiĂt, wir können zwei von ihnen verschwinden lassen, indem wir sie einfach mit der Einheit gleichsetzen. DarĂŒber hinaus hĂ€ngt der zweite Komplex nicht von groĂen Faktoren ab, und wir mĂŒssen die beiden verbleibenden fĂŒr die Zerstörung auswĂ€hlen. Und wieder wenden wir uns dem Argument ĂŒber das statische Gleichgewicht zu, das uns interessiert. Die Gleichgewichtsposition wird durch den Ausgleich der Nullbeschleunigung bestimmt, dh es spielt fĂŒr uns keine Rolle, welcher Faktor in der zweiten Ableitung der Höhe enthalten ist, und wir können die Anzahl der Parameter auf der rechten Seite der Gleichung minimieren. Wir kommen also zu folgender Lösung: Wir wĂ€hlen die Skalierungsfaktoren so, dass der dritte und vierte der von uns aufgelisteten Komplexe aus der Gleichung verschwinden. DafĂŒr nehmen wir an
bh0=1, quad fraccS2Wg frach20t20=1
und erhalten Sie unser eigenes AusmaĂ des Problems:
h0= frac1b, quadt0= frac1b sqrt fraccS2Wg. qquad(2)
Die ĂŒbrigen Parameter werden wie folgt bezeichnet:
frach0gt20= frac1 gamma, quad fracW rho0m=B.
Dies ist wahrscheinlich die magischste Phase unserer Transformationen, die der Kunst am nĂ€chsten kommt. Erfahrung und einige Ăberlegungen helfen jedoch bei der Auswahl der richtigen Skala. Und diese Erfahrung ermöglicht es uns, Ă€hnliche PhĂ€nomene in verschiedenen Bereichen der Wissenschaft zu beobachten und die charakteristischen Eigenschaften komplexer Systeme zu erraten.
Ich werde mir erlauben, die Analyse der physikalischen Bedeutung der Skalen und Parameter, die wir erhalten haben, zu verschieben, obwohl dies auch sehr angenehm und interessant ist, aber ich werde mich sofort dem köstlichsten zuwenden - der dimensionslosen Gleichung auf ihren eigenen Skalen:
frac1 gammayâł=Beây left(1â operatornamesign(yâČ)(yâČ)2 right)â1, quady(0)=yâČ(0)=0. qquad(3)
Hier! Ich bin bereit, eine solche Gleichung zu lösen, zu analysieren und numerisch zu integrieren. Und wenn ich mich entscheide, kann ich leicht von meiner eigenen Skala zu Metern und Sekunden wechseln, die in den VerhÀltnissen (1) und (2) codiert sind.
Also fangen wir an. Lassen Sie uns zunÀchst herausfinden, wo unser verallgemeinerter Ballon anhalten wird. Dazu setzen wir in Gleichung (3) sowohl Geschwindigkeit als auch Beschleunigung auf Null:
0=Beâyââ1,
Woher bekommen wir?
yâ= lnB.
Sofort schlieĂen: Damit die maximale Höhe existiert, die Bedingung
B>1ââ . Als nĂ€chstes schĂ€tzen wir, wie lange der Ball diese Höhe erreichen wird. Dazu setzen wir die Beschleunigung mit Null gleich und lösen das Cauchy-Problem erster Ordnung:
0=Seieây left(1â(yâČ)2 right)â1, quady(0)=yâ.
Es wird analytisch durch die Methode der Trennung von Variablen gelöst und auf das Integral reduziert:
tauâ= intyâ0 fracBdy sqrtBey=2 operatornamearth left( sqrt1â frac1B rechts).
Schauen Sie, hier sind sie - die FrĂŒchte der richtig gewĂ€hlten Schuppen! Sowohl die maximale Höhe als auch die charakteristische Zeit ihrer Erreichung werden nur durch den Parameter ausgedrĂŒckt
B . Dies bedeutet, dass wir einen Wert festlegen können
B>1ââ konstruieren Sie eine Reihe von Graphen zum Lösen von Gleichung (3) fĂŒr verschiedene Werte
gamma und damit sofort
alle Möglichkeiten zur Lösung des Problems fĂŒr
beliebige Werte beschreiben B !
Dies ist eine universelle Ein-Parameter-Familie von Lösungen, die durch numerische Integration von Problem (3) fĂŒr verschiedene Werte erhalten werden
gamma ::

Nach Erreichen der Gleichgewichtshöhe schwingt der Ballon einige Zeit gedÀmpft, die charakteristische Zeit zum Erreichen dieser Höhe wird jedoch korrekt geschÀtzt. Vom Kriterium
gamma nur die Schwingungsdauer und die Zeit ihres Zerfalls hĂ€ngen ab. Je gröĂer dieser Parameter ist, desto âhĂ€rterâ ist unser System.
Es bleibt, diese Familie von Graphen in eine dimensionale Ansicht zu ĂŒbersetzen, indem einfach die Werte entlang der Achsen mit den entsprechenden Skalierungsfaktoren multipliziert werden. Und jetzt ist das numerische Experiment vorbei und seine Ergebnisse haben universelle Bedeutung erlangt. Sie können reale Dimensionsparameter der Aufgabe ersetzen und sofort Zahlen auf den Achsen erhalten, bereits in Metern und Sekunden! Ein solches Ergebnis kann bereits in einem seriösen Handbuch fĂŒr harte Ballonfahrer oder in einem wissenschaftlichen Artikel veröffentlicht werden, der das gesamte PhĂ€nomen in einer Grafik beschreibt.
Nun wollen wir sehen, was wir in Form von Parametern und Variablen erhalten haben. Ersetzen Sie die Masse der Kugel
m Gesamtgasmasse
W rhog und Nutzlastmassen
M ::
m=W rhog+M=W rhog(1+ alpha),
wo
alpha= fracMW rhog - die relative TragfĂ€higkeit des Luftfahrzeugs. ZusĂ€tzlich nehmen wir den Ball kugelförmig und drĂŒcken seine FlĂ€che und sein Volumen durch den Radius aus
R . In dieser Darstellung erhalten wir die Parameter des Problems:
B= frac rho0 rhog(1+ alpha), gamma= frac3cB8Rb.
Der erste ist der Auftriebskoeffizient, der vom verwendeten Gas und der angehobenen Last abhĂ€ngt. Dies ist ein sehr wichtiger Parameter, der alle Massenmengen umfasst. Die zweite zeigt, wie die GröĂe und Form des Balls mit dem Dichtegradienten in der AtmosphĂ€re zusammenhĂ€ngen, dh wie groĂ die atmosphĂ€rischen InhomogenitĂ€ten im VerhĂ€ltnis zur GröĂe des Balls sind.
Die Skala wird wie folgt ausgedrĂŒckt:
h0=1/b tau0= frac12b sqrt frac3cB2gR= sqrt frac gammagb
Die Entfernungsskala wird nur durch den Dichtegradienten bestimmt. Das ist absolut richtig, denn gerade wegen dieses GefĂ€lles hört der Aufstieg des Balls im Allgemeinen irgendwo auf. Die charakteristische Zeit umfasste dynamische GröĂen - Gravitationsbeschleunigung, MassenverhĂ€ltnisse und Luftwiderstand.
Die charakteristische Höhe und Zeit der AnnÀherung des Balls
hâ=yâh0= frac1b lnB,tâ= tauât0=2 sqrt frac gammagb operatornamearth left( sqrt1â frac1B right)
auch ausgedrĂŒckt in Bezug auf die Hauptparameter und den Umfang der Aufgabe.
Lassen Sie uns zum Beispiel sehen, was mit den im Originalartikel angegebenen physikalischen Parametern passiert:
B=4,57 gamma=686h0=8000 m tau0=12,47 minhâ=12166,6 mtâ=13,72 min
Zusammenfassend. Nachdem wir ein wenig auf Papier gearbeitet hatten, bevor wir die Aufgabe der Maschine zufĂŒhrten, konnten wir ein verstĂ€ndlicheres, universelleres Ergebnis erzielen und die wichtigsten Eigenschaften der Lösung erkennen. Gleichzeitig haben wir die âModularitĂ€tâ der Lösung nicht verloren. Hier ist was ich meine. Wir haben das Problem allgemein formuliert und dann, nachdem wir bereits eine Lösung erhalten hatten, neue âMerkmaleâ hinzugefĂŒgt. So haben wir beispielsweise das Konzept der Nutzlast und die Masse des Gases, das es anhebt, geteilt. Diese Komplikation wirkte sich auf die Skalenwerte aus, Ă€nderte jedoch nichts an der Art der Lösung.
Wenn anschlieĂend der Temperaturgradient addiert werden muss, wird der Ausdruck im Exponenten komplizierter, aber sein Wesen und vor allem die Skala Ă€ndern sich nicht:
exp left( fracâbhT0T0âah right)
Nach der Dimensionierung sieht es folgendermaĂen aus:
exp left( fracây1â psiy right),
Wo ist der neue Parameter?
psi= fracabT0 zeigt, wie korreliert die Dichte- und Temperaturgradienten sind. Da dies von uns unabhÀngige atmosphÀrische Parameter sind,
psi Ist eine Konstante gleich
0,17 . Der Wert der Konstante zeigt ĂŒbrigens die Bedeutung des Effekts des Temperaturgradienten, er ist nicht groĂ, aber nicht vernachlĂ€ssigbar. Die Familie der Graphen wird sich ein wenig Ă€ndern, aber vor allem bleibt sie ein Parameter.
Die Verwendung der eigenen Skalen des Problems fĂŒr Berechnungen hat ein weiteres wichtiges Plus: In diesem Fall nehmen Variablen normalerweise âmoderateâ Werte an, dh nahe der Einheit. Dies ist sehr nĂŒtzlich fĂŒr Gleitkommaberechnungen: Bei Operationen mit Werten, die in der GröĂenordnung stark variieren, geht die Genauigkeit nicht verloren. DarĂŒber hinaus wird es möglich, die Rollen einzelner Effekte in einer Aufgabe korrekt zu vergleichen, indem die Werte ihrer Ăhnlichkeitskriterien oder die Werte von Variablen verglichen werden. Zum Beispiel der Wert
B=4,5 gibt an, wie oft die WechselwirkungskrĂ€fte mit der AtmosphĂ€re gröĂer sind als die Schwerkraft. Und das Quadrat der charakteristischen dimensionslosen Anstiegsgeschwindigkeit
(yâ/ tauâ)2 sim0,3 zeigt den Grad der Bedeutung des Luftwiderstands bei der vertikalen Bewegung des Flugzeugs im Vergleich zum Auftrieb, der durch eine Einheit in Klammern ausgedrĂŒckt wird.
SchlieĂlich haben Berechnungen in dimensionslosen Variablen und Parametern eine gewisse interne Ăbereinstimmung mit der Tatsache, dass die Lösungen von Differentialgleichungen fast immer transzendentale Funktionen sind und nur dimensionslose GröĂen ihre Argumente und Ergebnisse sein können. Der Computer arbeitet auch ausschlieĂlich mit Zahlen - dimensionslosen GröĂen. Die statische Typisierung ermöglicht es Ihnen im Prinzip, die Dimensionen physikalischer GröĂen auf Typenebene einzugeben und Programme wĂ€hrend der Kompilierung auf Richtigkeit zu ĂŒberprĂŒfen. In der numerischen Phase arbeiten wir jedoch immer noch nur mit den GröĂen selbst. Alle mit Einheiten und Abmessungen verbundenen Fehler gehen bei solchen Berechnungen verloren. Es ist vernĂŒnftig, die Aufgabe fĂŒr Berechnungen vorzubereiten, ohne das ĂberflĂŒssige auszuschlieĂen und dem Löser nur das Wesentlichste und NatĂŒrlichste zu ĂŒberlassen.
Und was wĂŒrde passieren, wenn wir andere Komplexe wĂ€hlen oder alle KrĂ€fte nicht der Schwerkraft, sondern beispielsweise der TrĂ€gheit zuschreiben wĂŒrden? Zwei Parameter wĂŒrden in der Gleichung verbleiben, aber die Kurvenfamilie wĂŒrde zu zwei Parametern, und sie könnte nicht in einem Diagramm gezeigt werden. Ich gebe zu, zuerst ist es mir einfach passiert, als die LĂ€ngenskala den Radius des Balls bekam. Aber nachdem ich mit diesen Kurven gespielt hatte, sah ich ihre geometrische Ăhnlichkeit (Sie sehen eine in allen Parabeln), und eine weitere flĂŒchtige Analyse der erhaltenen Kriterien und Gleichungen fĂŒhrte mich zu versteckter Symmetrie und schlug vor, wie die âkanonische Formâ unserer Gleichungen aussehen sollte. Dies ist jedoch eine schöne BeschĂ€ftigung! Die Aufgabe selbst beginnt ĂŒber sich selbst zu erzĂ€hlen. Es macht mir so viel Freude, ein System von Typen und Datenstrukturen in einem Programm in Haskell oder C # aufzubauen: Wenn die Architektur des Programms der internen Struktur der Aufgabe entspricht, wird alles ĂŒberraschend natĂŒrlich, elegant, SonderfĂ€lle werden âautomatischâ ausgearbeitet und die Anzahl der Abstraktionsebenen nimmt ab.
Die Dimensionen physikalischer GröĂen an sich sind sehr interessant. Sie bilden einen linearen Raum, und die Suche nach Ăhnlichkeitskriterien kann auf das Problem reduziert werden, einen Kern in einem dimensionalen Raum zu finden, wodurch dieser Prozess formalisiert wird. Sie spielen zum Teil die Rolle von Typen im physischen Computing. Da der Compiler statische Eingaben verwendet, um die Richtigkeit des Programms zu ĂŒberprĂŒfen, verwendet der Physiker Dimensionen, um seine Berechnungen und Ergebnisse zu ĂŒberprĂŒfen.
Wie in einer streng typisierten reinen Funktionssprache (zum Beispiel in Haskell) kann ein Funktionscode aus seinem Typ abgeleitet werden. Ebenso kann man auf der Grundlage der Dimension physikalischer GröĂen dimensionslose Komplexe und charakteristische GröĂen in physikalischen Systemen konstruieren und Ă€uĂerst nĂŒtzliche und universelle Ergebnisse erzielen. Es gibt viele Beispiele dafĂŒr in der Mechanik, Gas- und Thermodynamik, Quantenmechanik usw. Ich empfehle Ihnen, sich mit einer wunderbaren Arbeit vertraut zu machen , die eine Reihe schöner Beispiele fĂŒr die Anwendung der Dimensionsanalyse auf Probleme aus dem Satz von Pythagoras auf die Schwingungen von Sternen und die Rayleigh-Streuung am Himmel bietet. Diese Arbeit zitiert die Worte von John Wheeler, dem Lehrer Richard Feynman, der den Namen "Wheeler Rules" erhielt:« , . : (! ! !) , ; . : , . , . . ».
Dieser Rat fĂŒr Programmierer kommt mir sehr bekannt vor: Schreiben Sie keinen Funktionscode, ohne sich fĂŒr seine Signatur (Typ) und sein Verhalten (Tests) entschieden zu haben. Bevor Sie Code schreiben, sollten Sie Typen, Datenstrukturen und deren Beziehungen berĂŒcksichtigen. Genau dafĂŒr sind OOP und funktionale Programmierung stark - diese Prinzipien funktionieren nicht nur dort, sie schlagen bei geschickter Anwendung selbst die natĂŒrlichsten und elegantesten Lösungen vor, und im Fall von FP tun sie dies auf einer tiefen mathematischen Ebene, wodurch es möglich wird, die Eigenschaften von Programmen zu beweisen und einige zu berechnen Arbeiten Sie an der Ausgabe von Programmeigenschaften an den Compiler.Mathe lernen, schön programmieren und SpaĂ haben!