Lizard - Skriptsprache für symbolische Berechnungen, beliebig große und genaue Zahlen, Parallel-Computing und mehr

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Lizard - Skriptsprache für symbolische Berechnungen, beliebig große und genaue Zahlen, Parallel-Computing und mehr

Beitrag von STARGÅTE »

Vorwort:
Ich sehe eure Gedanken praktisch schon vor mir: "Noch jemand mit (s)einer Scriptsprache, haben wir nicht schon genug?" oder "Hat er nicht genug andere (unvollendete) Projekte?"
Beides mag stimmen, allerdings arbeite ich an Lizard bzw. deren Vorgängerversionen seit knapp 8 Jahre, sodass es ehr das Projekt Lizard war, was immer wieder von mir pausiert wurde. Des Weiteren unterscheidet sich Lizard deutlich von anderen Scriptsprachen, wie ihr weiter unten in den Features sehen könnt. Lizard ist sehr stark an das mathematisch-naturwissenschaftliche Programm Mathematica orientiert. Lizard soll es ermöglichen Rechnungen, Datenanalyse u.v.m mit einem kleinen Script ohne viel Code durchzuführen. Aktuell stelle ich euch nur die Lizard.dll (Lizard.so), deren Include Datei sowie einige Beispiele und eine ausführliche Dokumentation zu Lizard bereit. Die Veröffentlichung des Quellcodes ist aber geplant.
Bitte testet Lizard in diesem frühen Stadium und gebt mir Feedback zu den aktuellen Features. Außerdem möchte ich mich noch bei folgenden Personen explizit bedanken, die vermutlich gar nicht wussten das sie mir geholfen haben: Helle (ASM Optimierung), CSHW89 (Idee und Divisionsalgorithmus)

Download:
Lizard - Symbolic computation script language (Version 0.4.4-0002, 28. August 2022)
Beinhaltet die Lizard.dll (Windows x64 und x86), die Lizard.so (Linux x64), die Lizard.pbi, einige Beispiele zur Einbindung in Pure Basic und eine ausführliche Dokumentation zu Lizard mit vielen Beispielen.
Lizard - Documentation (Dokumentation alleine, zum gucken^^)

Features von Lizard:
  • Lizard ist eine vollständig auf symbolischen Ausdrücken basierende Scriptsprache.
  • Verarbeitet werden: ganzen Zahlen (unlimitiert!), Bruchzahlen (unlimitiert!), reellen Zahlen (unlimitiert!), komplexen Zahlen, Zeichenketten (UTF-8 oder binär), Symbole (Variablen) und Ausdrücke mit Kopf und beliebig vielen Elementen.
  • Übliche arithmetische und logische Operationen arbeiten formal mit allen Objekttypen und führen entsprechende Berechnungen oder Vereinfachungen aus.
  • Sehr flexibles arbeiten mit Untergruppen von Listen/Arrays, Ausdrücken und Strings.
  • Unterstützt die parallele Auswertung von Ausdrücken auf mehreren CPU-Kernen
  • Definition und Verwendung von polymorphen oder anonymen Funktionen.
  • Sehr mächtige Mustervergleichs-Engine bei Funktionsdefinitionen oder Ersetzungsregeln.
  • Unterstützt benannte Parameter in Funktionen.
  • Befehle für das Verteilen einer Berechnung auf mehrere Kerne, Parallel-Computing.
  • Verschiedene Konvertierungsfunktionen von Zahlen und Zeichenketten mit Formaten wie int32 über float64 bis hin zu verschiedene String-Codierungen wie UTF16, UTF32 u.a.
Details:
In Lizard ist alles, wirklich alles, ein Ausdruck bestehend aus einem Kopf und beliebig vielen Argumenten. Das hießt, auch Objekttypen selbst, z.B. Listen, oder bekannte Schlüsselwörter wie If, And usw. sind wieder nur Ausdrücke und können als solches auch wieder verwendet werden. Das macht Lizard sehr flexibel und mächtig, allerdings auf der tiefen Ebene auch langsamer als übliche Scriptsprachen, bei denen diese Sachen klar getrennt und unterschieden werden.

Hier einige Beispiele zu den Features (viele weitere in der Dokumentation):
  1. Code: Alles auswählen

    In(1) := {2^100, 8/12, 1/4.0, (-2.0)^0.4}
    Out(1) = {1267650600228229401496703205376, 2/3, 0.25, 0.40775+1.25493*I}
  2. Code: Alles auswählen

    In(2) := {3*x - 2*x, a && True && b, Sin(Pi/6)}
    Out(2) = {x, a && b, 1/2}
  3. Code: Alles auswählen

    In(3) := 123.456 ^ 6789
    Out(3) = 1.889456296024e14199
  4. Code: Alles auswählen

    In(4) := Calculate(Pi, 60)
    Out(4) = 3.14159265358979323846264338327950288419716939937510582097494
  5. Code: Alles auswählen

    In(5) := Sort( {-3, 2, -1, 0, 4}, Abs(#1) <= Abs(#2) & )
    Out(5) = {0, -1, 2, -3, 4}
  6. Code: Alles auswählen

    In(6) := Select( {1, 2, 3, 4, y, 2.2}, #^2 < 6 & )
    Out(6) = {1, 2, 2.2}
  7. Code: Alles auswählen

    In(7) := Replace( a+b+c+d, a+d -> x )
    Out(7) = b + c + x
  8. Code: Alles auswählen

    In(8) := {a,b,c,d,e}[2..-2]
    Out(8) = {b, c, d}
  9. Code: Alles auswählen

    In(9) := "Hello World!"[-1..1..-1]
    Out(9) = "!dlroW olleH"
  10. Code: Alles auswählen

    In(10) := Iterate(i^2, {i, -3, 3} )
    Out(10) = {9, 4, 1, 0, 1, 4, 9}
  11. Code: Alles auswählen

    In(11) := ToString('\0a\x03» ¬', BinaryFormat->"UTF16", Endianness->1)
    Out(11) = "aλ€"
  12. Code: Alles auswählen

    In(12) := Sort({"NINO", "Nina", "Nino", "Ninu", "Niño"})
    Out(12) = {"Nina", "Nino", "NINO", "Niño", "Ninu"}
Viel spaß beim Testen.

ToDo-List:
  • Weitere built-in Funktionen: Import(file), Export(file, data)
  • Offizielle Einbindung von Zusatzpaketen wie Ableitungen, Gleichungen lösen
ChangeLog:
  • 0.4.4-0002: Hot-Fix DLL-Stringrückgabe
  • 0.4.4-0001: Befehle für Parallel-Computing, reziproke trigonometrische und hyperbolische Funktionen, ein bisschen Kleinkram, wieder ein paar Bug-Fixes und es gibt nun Funktions-Plots bei mathematischen Funktionen in der Dokumentation.
  • 0.4.3-0002: Hot-Fix für Windows 7 Probleme, Code außerhalb von DLL.
  • 0.4.3-0001: Großes Bug-Fix-Update. Außerdem neue Funktionen wie Count und Contain, Flatten und Nest sowie ein paar numerische Funktionen wie ShiftLeft, Bernoulli, Numerator und Abfragen wie IsPrime.
  • 0.4.2-0001: Viele neue Funktionen wie trigonometrische und hyperbolischen Funktionen und deren Inverse, Fibonacci, Binomial, Expand, Funktionen für komplexe Zahlen wie Conjugate, Re, Im, Konstanten wie EulerMascheroni, GoldenRatio, Funktionen für Mengen wie Union, Intersection.
    Außerdem gibt es SubDefine und SubDefineDelayed für eine spezielle Art der Definition von Funktionen (mehr in der Hilfe)
    Zudem wurde ein paar Funktionen umbenannt.
  • 0.4.0-0005: Einige Bugs gefixed und eine erste Linux Version
  • 0.4.0-0001: Implementierung von unlimitierten Fließkommazahlen, neue Funktionen: Factorial(), Precision(), Cos(), Sin(), Cosh(), Sinh(), ArcTan()
  • 0.3.8-0012: x86 Unterstützung, Kleine Bug-fixes, zwei neue erweiterte Beispiele zur Implementierung in Pure Basic, Neue Lizard-Funktionen: Floor, Ceil, Trunc, Order
  • 0.3.8-0003: Bug-Fix bei vergleich von Strings
  • 0.3.8-0002: Erste Veröffentlichung
Zuletzt geändert von STARGÅTE am 07.10.2022 15:16, insgesamt 26-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Lizard - Skriptsprache für symbolische Berechnungen und

Beitrag von Nino »

Das ist ja ein ziemlich anspruchsvolles Projekt, und es sieht so aus dass es gut gelungen ist. :allright: :allright:

Mathematica ist heute eines der am höchsten entwickelten Programmierwerkzeuge in diesem Bereich. Das als Vorbild zu nehmen war eine gute Idee. Vielleicht kannst Du auch noch das eine oder andere von der Programmiersprache R abkucken ... falls noch nicht geschehen. :-)

Also das ist an sich schon eine tolle Sache. Und dass wir das auch direkt in unsere PB-Programme einbauen können, macht Lizard natürlich noch viel nützlicher. Ganz herzlichen Dank schonmal dafür!

Wie kann ich mit Lizard Fakultäten berechnen, gibt es dafür eine eingebaute Funktion, die ich jetzt übersehen habe? Ich könnte eine Fakultät selbst mit einer Schleife berechnen, habe allerdings auch keine Möglichkeit gefunden, mit Lizard Schleifen zu programmieren.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Lizard - Skriptsprache für symbolische Berechnungen und

Beitrag von STARGÅTE »

Hallo Nino, danke für Lob.
Das mit Programmiersprache R guck ich mir mal an.
Nino hat geschrieben:Wie kann ich mit Lizard Fakultäten berechnen, gibt es dafür eine eingebaute Funktion, die ich jetzt übersehen habe? Ich könnte eine Fakultät selbst mit einer Schleife berechnen, habe allerdings auch keine Möglichkeit gefunden, mit Lizard Schleifen zu programmieren.
Fakultäten ist als Operator schon drin, aber die Funktion läuft noch ins leere, da habe ich wohl vergessen weiter zu schreiben.
Dafür kann ich dir jetzt zeigen, wie man die Fakultät berechnen würde:

Code: Alles auswählen

Factorial(n?Integer) := Apply(Times, Table(i, {i, n}))
Table() erstellt eine Liste der Zahlen 1 bis n, also {1,2,3,4,...,n}.
Apply(Times, ) wendet die Multiplikation zwischen allen Listenelementen an, also 1*2*3*4*...*n
Und die Definitionsvorschrift erlaubt nur ganze Zahlen für n in Factorial(n)

Code: Alles auswählen

In(1) := Factorial(50)
Out(1) = 30414093201713378043612608166064768844377641568960512000000000000
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Lizard - Skriptsprache für symbolische Berechnungen und

Beitrag von Nino »

Wow, ist das cool! 8) Lizard ist wirklich sehr flexiibel.
Und die Sprache ist für meine Begriffe sehr, sehr elegant ... mit Sorgfalt und Liebe (zum Detail) gemacht. :-)
Es hat mir von Anfang an großen Spaß gemacht, Lizard zu benutzen.

Lassen sich Strings unabhängig von Groß- und Kleinschreinbung sortieren?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Lizard - Skriptsprache für symbolische Berechnungen und

Beitrag von STARGÅTE »

:allright:
Nino hat geschrieben:Lassen sich Strings unabhängig von Groß- und Kleinschreinbung sortieren?
(Bitte, falls nicht schon geschehen, die neuste Version nutzen (0.3.8-0003), davor gabs genau bei String n Bug :oops:)

Lizard verwendet zum sortieren von Strings den Unicode Collation Algorithm. Darin werden "Auf der ersten Ebene [...] die Zeichenketten gemäß ihrer Grundbuchstaben verglichen. Akzente, Groß- und Kleinschreibung, Satzzeichen und Ähnliches werden dabei üblicherweise ignoriert". Erst in der dritten Ebene kommt die Groß-/Kleinschreibung. Daher sind a und A zwar nicht gleichwertig, jedoch kommt a vor A vor b vor B und es wird nicht nach Codepoint sortiert.
Beispiel ist oben (#10) und hier:

Code: Alles auswählen

In(1) := Sort({"Aa","bA","aa","aB","AB","Ba", "Äb"})
Out(1) = {"aa", "Aa", "aB", "AB", "Äb", "bA", "Ba"}
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Lizard - Skriptsprache für symbolische Berechnungen und

Beitrag von Nino »

Sorry, ich hatte mir Beispiel #10 nicht so genau angesehen.
Hauptsächlich war mir in der Dokumentation der sort()-Funktion aufgefallen, dass dort kein Parameter wie 'SortNoCase' angegeben ist. :-)
STARGÅTE hat geschrieben:Lizard verwendet zum sortieren von Strings den Unicode Collation Algorithm. Darin werden "Auf der ersten Ebene [...] die Zeichenketten gemäß ihrer Grundbuchstaben verglichen. Akzente, Groß- und Kleinschreibung, Satzzeichen und Ähnliches werden dabei üblicherweise ignoriert". Erst in der dritten Ebene kommt die Groß-/Kleinschreibung. Daher sind a und A zwar nicht gleichwertig, jedoch kommt a vor A vor b vor B und es wird nicht nach Codepoint sortiert.
Dafür noch einmal "wow"! Als PB-Benutzer rechnet man nicht unbedingt mit solch einem High-Level-Sortieralgorithmus, daher wohl meine Irritation. :-) Es wäre, glaube ich, gut, diese ausführliche Erläuterung mit in die Dokumentation von sort() aufzunehmen.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Lizard - Skriptsprache für symbolische Berechnungen und

Beitrag von Nino »

Ich habe mal ein bisschen mit symbolischen Auswertungen gespielt:

Code: Alles auswählen

Lizard kernel has been initialized.
Kernel version: 0.3.8-0003

In(1)   :=  2*a - 3*a
Out(1)   =  -a

In(2)   :=  (a+b)^2 - a^2
Out(2)   =  -a^2 + (a + b)^2
Die erste Auswertung (Beispiel aus der Dokumentation) funktioniert wie erwartet.
Aber bei der zweiten Auswertung hätte ich als Ergebnis "2*a*b + b^2" erwartet.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Lizard - Skriptsprache für symbolische Berechnungen und

Beitrag von STARGÅTE »

> "Es wäre, glaube ich, gut, diese ausführliche Erläuterung mit in die Dokumentation von sort() aufzunehmen."
Kommt auf die Liste.

> "Ich habe mal ein bisschen mit symbolischen Auswertungen gespielt: [...] Aber bei der zweiten Auswertung hätte ich als Ergebnis "2*a*b + b^2" erwartet."
Der Ausdruck "(a+b)^2 - a^2" besser gesagt "(a+b)^2" ist nicht komplizierter als "a^2+2*a*b+b^2", ehr im Gegenteil. Somit multipliziert Lizard von hause Produkte/Potenzen nicht aus. Dafür gibt es später dann den Befehl "Expand()" den ich noch implementieren werde.
Allerdings kann ich dir auch hier wieder zeigen wie es auch jetzt schon gehen würde mit diesen Definitionen (wobei hier sicherlich einige Prüfabfragen fehlen bezüglich des Wertebereichs):
(Kannst du direkt in die Console des Consolen-Programm-Beispiels einfügen)

Code: Alles auswählen

Factorial(n?)      := Apply(Times, Table(i, {i, n}))
Binomial(n?, k?)   := Factorial(n) / (Factorial(n-k)*Factorial(k))
Expand((x?+y?)^n?) := Apply(Plus, Table(Expand(Binomial(n,k)*Expand(x^(n-k))*Expand(y^k)), {k,0,n})) /* Binomischer Lehrsatz */
Expand(x?*y?Plus)  := Map( Expand(x*#)& , y )    /* Distributivgesetz, multipliziere x mit jedem Element in y */
Expand(x?Plus)     := Map(Expand, x)    /* Expantiere Einzelsummanden */
Expand(exp?)       := exp    /* und sond nix */
Danach sollte folgendes gehen:

Code: Alles auswählen

In(7)   :=  Expand((a+b)^2 - a^2)
Out(7)   =  2*a*b + b^2

In(8)   :=  Expand((a+b+c)^3)
Out(8)   =  a^3 + 3*a^2*b + 3*a*b^2 + b^3 + 3*a^2*c + 6*a*b*c + 3*b^2*c + 3*a*c^2 + 3*b*c^2 + c^3
PS: Danke fürs testen :allright:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Lord
Beiträge: 313
Registriert: 21.01.2008 19:11

Re: Lizard - Skriptsprache für symbolische Berechnungen und

Beitrag von Lord »

Hallo STARGÅTE!

Ein sehr interessantes Projekt. Respekt.

Aber eine Frage:
Ist in der Console eine Art maximale rekursive Tiefe o.ä vorhanden?

Ich habe ausprobiert: 2^2^2^2
Erwartet: 65536
Ergebnis: 65536

Nächster Schritt: 2^2^2^2^2
Erwartet: 4294967296
Ergebnis:
Lizard kernel has been initialized.
Kernel version: 0.3.8-0003

In(1) := 2^2^2^2^2
Out(1) = 20035299304068464649790723515602557504478254755697514192650169737108
94059556311453089506130880933348101038234342907263181822949382118812668869506364
76154702916504187191635158796634721944293092798208430910485599057015931895963952
48633723672030029169695921561087649488892540908059114570376752085002066715637023
66126359747144807111774815880914135742720967190151836282560618091458852699826141
42503012339110827360384376787644904320596037912449090570756031403507616256247603
18637931264847037437829549756137709816046144133086921181024859591523801953310302
92162800160568670105651646750568038741529463842244845292537361442533614373729088
30379460127472495841486491593064725201515569392262818069165079638106413227530726
71439981585088112926289011342377827055674210800700652839633221550778312142885516
75554073345107213112427399562982719769150054883905223804357045848197956393157853
51001899200002414196370681355984046403947219401606951769015611972698233789001764
15171900511334663068981402193834814354263873065395529696913880241581618595611006
40362119796101859534802787167200122604642492385111393400464351623867567078745259
46467090388654774348321789701276445552940909202195958575162297333357615955239488
52975799540284719435299135437637059869289137571537400019863943324648900525431066
29669165243419174691389632476560289415199775477703138064781342309596190960654591
30089018888758808473362595606544488850144733570605881709016210849971452956834406
19796905654698136311620535793697914032363284962330464210661362002201757878518574
09162050489711781820400187282939943446186224328009837323764931814789848119452713
00744022076568091037620399920349202390662626449190916798546151577883906039772075
92793788522412943010174580868622633692847258514030396155585643303854506886522131
14813638408384778263790459607186876728509763471271988890680478243230394718650525
66097815072986114143030581692792497140916105941718535227588750447759221830115878
07019755357222414000195481020056617735897814995323252085897534635470077866904064
29016763808161740550405117670093673202804549339027992491867306539931640720492238
47481528061916690093380573212081635070763435166986962502096902316285935007187419
05791612415368975148082619048479465717366010058924766554458408383347905441448176
84255327207315586349347605137419779525190365032198020108764738368682531025183377
53390886142618480037400808223810407646887847164755294532694766170042446106331123
80211345886945322001165640763270230742924260515828110703870183453245676356259514
30032037432740780879056283663406965030844225855967039271869461158513793386475699
74856867007982396060439347885086164926030494506174341236582835214480672667684180
70837548622114082365798029612000274413244384324023312574035450193524287764308802
32850855886089962774458164680857875115807014743763867976955049991643998284357290
41537814343884730348426190338884149403136613985425763557710533558020662218557706
00825512888933322264362819848386132395706761914096385338323743437588308592337222
84644287996245605476932428998432652677378373173288063210753211238680604674708428
05116648870908477029120816110491255559832236624486855665140268464120969498259056
55192161881043412268389962830716548685255369148502995396755039549383718534059000
96187489473992880432496373165753803673586710175783994818471798498246948060532081
99606618343401247609663951977802144119975254670408060849934417825628509272652370
98986515394621930046073645079262129759176982938923670151709920915315678144397912
48475706237804600009918293321306880570046591458387208088016887445835557926258465
12476308714856631352893416611749061752667149267217612833084527393646924458289257
13888778390563004824837998396920292222154861459023734782226825216399574408017271
44146179559226175083889020074169926238300282286249284182671243405751424188569994
27233160699871298688277182061721445314257494401506613946316919762918150657974552
62361912248480638900336690743659892263495641146655030629659601997206362026035219
17776740668777463549375318899587866282125469797102065747232721372918144666659421
87200347450894283091153518927111428710837615922238027660532782335166155514936937
57784666701457179719012271178127804502400263847587883393968179629506907988171216
90686929538248529830023476068454114178139110648560236549754227497231007615131870
02405391051091381784372179142252858743209852495787803468370333781842144401713868
81242499844186181292711985333153825673218704215306311977485352146709553346263366
10864667332292409879849256691109516143618601548909740241913509623043612196128165
95051866602203071561368473236466086890501426391390651506390819937885231836505989
72991254044794434251667742996598118492331515552728832740283526884424087528112832
89980625912673699546247341543333500147231430612750390307397135252069338173843322
95070104906186753943313078479801565513038475815568523621801041965025559618193498
63159132330360964619059902361126811960234418433633345949276319461017166529138237
17182394299216272538461776065694542297877071383198817036964588689811863210976900
35573588462446483570629145305275710127887202796536447972402540544813274839179412
88264238351719491972097971459368875371987291308317380339110161285474153773777159
51728084111627597186384924222802373441925469991983672192131287035585307966942713
41639103388275431861364349010094319740904733101447629986172542442335561223743571
58259333828049862438924982227807159517627578471094751190334822414120251826887137
28193104253478196128440176479531505057110722974314569915223451643121848657575786
52819756484350895838472292353455946452121583165775147129870822590929265563883665
11206819438369041162526687100445602437042006637090019411855571604720446436969328
50060046928140507119069261393993902735534545567470314903886022024639948260501762
43196930564066636662609020704888743889890749815286544438186291738290105182086993
63826618683039152732645812867828066013375000965933646251460917231803129303478774
21234679118454791311109897794648216922505629399956793483801699157439700537542134
48587458685604728675106542334189383909911058646559511364606105515683854121745980
18071331636125730796111683438637676673073545834947897883163301292408008363568259
39157113130978030516441716682518346573675934198084958947940983292500086389778563
49469321247342610306271374507728615692259662857385790553324064184901845132828463
27092697538308673084091422476594744399733481308109863994173797896570106870267341
61967196591599588537834822988270125605842365589539690306474965584147981310997157
54204325639577607048510088157829140825077773855979012912940730946278594450585941
22731948127532251523248015034665190482289614066468903051025109162377704484862302
29488966711380555607956620732449373374027836767300203011615227008921843515652121
37921574820685935692079021450227713309998772945959695281704458218195608096581170
27980626698912050615607423256868422713062950098644218534708104071289176469065508
36129916694778023822502789667843489199409657361704586786242554006942516693979292
62471452494540885842272615375526007190433632919637577750217600519580069384763578
95868784895368721228985578068265181927036320994801558744555751753127364714212955
36494084385586615208012115079075068553344489258693283859653013272046970694571546
95935365857178889486233329246520273585318853337094845540333656535698817258252891
80566354883637437933484118455801683318276768346462919956055134700391478768086403
22629616641560667508153710646723108461964247537490553744805318226002710216400980
58449752602303564003808347205314994117296573678506642140084269649710324191918212
12132069397691439233683747092282677387081322366800869247034915868409911530983154
12063566123187504305467536983230827966457417620806593177265685841681837966106144
96343254411170694170022265781735835125982108076910196105222926387974504901925431
19006205619065774524161919131875339840493439768233102984658933183730158095925228
29206820862230332585280119266496314441316442773003237792274712330696417149945532
26103547514563129066885434542686978844774298177749371011761465162418361668025481
52963353084908499430067636548061029400946937506098455885580439704859144495844450
79978497045583550685408745163316464118083123079704389849190506587586425810738422
42059119194167418249045270028826398305795005734171148703118714283418449915345670
29152801044851451760553069714417613685823841027876593246626899784183196203122624
21177391477208004883578333569204533935953254564897028558589735505751235129536540
50284208102278524877660357424636667314868027948605244578267362623085297826505711
46248465959142102781227889414481639949738818846227682448516220518170767221698632
65701654316919742651230041757329904473537672536845792754365412826553581858046840
06936771860502007054724754840080553042495185449526724726134731817474218007857469
34654471360369758841180294080396167469462885406791721386012254195038197045384172
68006398820656328792839582708510919958839448297775647152026132871089526163417707
15164289948795356485455355314875497813400996485449863582484769059003311696130376
61279234643231297066284113074270462020320133683503854253603136367635752126047074
25311209233402837482949453104727418969287275572027615272268283376741393425652653
28306846999759709775000556088993268502504921288406827413988163154045649035077587
16800740556857240217586854390532281337707074158307562696283169556874240605277264
85853050611356384851965918968649596335568216975437621430778665934730450164822432
96489127070989807667662567151726906205881554966638257382927418208227896068448822
29833948166709840390242835143068137672534601260072692629694686727507943461904399
96618979611928750519442356402644303271737341591281496056168353988188569484045342
31142461355992527233006488162746672352375123431189344211888508507935816384899448
75447563316892138696755743027379537852625423290248810471819390372206668947022042
58836895840939998453560948869946833852579675161882159410981624918741813364726965
12398067756194791255795744647142786862405375057610420426714936608498023827468057
59825913310069199419046519065311719089260779491192179464073551296338645230356733
45588033313197080365457184791550432654899559705862888286866606618021882248602144
99997312216413817065348017551043840662441282280361664890425737764095632648282525
84076690456084394903252905263375323165090876813366142423983095308065496618793819
49120033919489494065132398816642080088395554942237096734840072642705701165089075
19615537018626479745638118785617545711340047381076276301495330973517418065547911
26609380343113785325328835333520249343659791293412848549709468263290758301930726
65337782559314331110963848053940859283988907796210479847919686876539987477095912
78872747587443980677982496827827220092644994455938041460877064194181044075826980
56880389496546165879839046605876453418102899071942930217745199761044950431968415
03455514044820928933378657363052830619990077748726922998608279053171691876578860
90894181705799340489021844155979109267686279659758395248392673488363474565168701
61662406424242412289611180106156823425393921800524834547237792199112285959141918
77491793823340010078128326506710281781396029120914720100947878752551263372884222
35386949006792766451163475810119387531965724212147603828477477457170457861041738
57479113019085838778901523343430130052827970385803598151829296003056826120919509
43737325454171056383887047528950563961029843641360935641632589408137981511693338
61979733982167076100460798009601602482309694304380695662012321365014054958625061
52825880330229083858124784693157203232336018994694376477267218793768264318283826
03564520699468630216048874528424363593558622333506235945002890558581611275341783
75045593612613085264082805121387317749020024955273873458595640516083058305377073
25339715526204447054295735383611136775231699727402929416742044232481138750756313
19078272188864053374694213842169928862940479635305150560788126366206497231257579
01959887304119562622734372890051656111109411174527796548279047125058199907749806
38215593768855464988229389854082913251290764783863224947810167534916934892881042
03015610283386143827378160946341335383578340765314321417150655877547820252454780
65730134227747061674424196895261316427410469547462148375628829977180418678508454
69656191509086958742511844358373065909514609804512474094113738999278224929833677
96011015387096129749705566301637307202750734759922943792393824427421186158236161
31788639255309511718842129850830723825972914414225157940388301135908333165185823
49672212596218125070581137594955250227472746743698871319266707692991990844671612
28738858457584622726573330753735572823951616964175198675012681745429323738294143
82481437713986190671665757294580780482055951188168718807521297183263644215533678
77512747669407901170575098195750845635652173895441798750745238544552001335720333
32379895074393905312918212255259833790909463630202185353848854825062897715616963
86071238277172562131346054940177041358173193176337013633225281912754719144345092
07118488383668181742633429496118700915030491653394647637177664391207983474946273
97822171502090670190302469762151278521956142070806461631373236517853976292092025
50028896201297014137964003805573494926907353514596120867479654773369295877362863
56601437679640384307968641385634478013282612845891848985280480488441808216394239
74014362903481665458114454366460032490618763039502356402044530748210241366895196
64422133920075747912868380517515063466256939193774028351207566626082989049187728
78338521785227920457718469658552787904475621926639920084093020756739253637356283
90829817577902153202106409617373283598494066652141198183810884515459772895164572
13189779790749194101314836854463961690460703010759681893374121757598816512700076
12627891695104063158576375347874200702220510708912576123616580268068158584998526
31465878086616800733264676830206391697203064894405628195406190685242003053463156
62189132730906968735318164109451428803660599522024824888671155442910472192913424
83464387053685086487490991788126705656653871910497218200423714927401644609434598
45392536706132210616533085662021188968234005752675486101476993688738209584552211
57192347968688816085363161586288015039594941852948922707441082820716930338781808
49362040182552222710109856534448172074707560192459155994310729495781978785905789
40052540122867517142511184356437184053563024181225473266093302710397968091064939
27272268303541046763259135527968383770501985523462122285841055711992173171796980
43393177077507556270560478317798444476375602546370333692471142208155199736913719
75163241302748712199863404548248524570118553342675264715978310731245663429805221
45549415625272402891533335434934121786203700726031527987077187249123449447714790
95207347613854254853115527733010303424768358654960937223240071545181297326920810
58424090557725645803681462234493189708138897143299831347617799679712453782310703
73915147387869211918756670031932128189680332269659445928621060743882741691946516
22676325406650708810710303941788605648937698167341590259251946118236429456526693
72203155504700213598846292758012527715422016629954863130324912311029627923723899
76641680349714122652793190763632613681414551637665655983978848938173308266877990
19628869322965973799519316211872154552873941702436698855938887933167445333631195
41518404088283815193421234122820030950313341050704760159987985472529190665222479
31971544033179483683737322082188577334162385644138070054191353024594391350255453
18864547962522602517629283743304651023610575835145507394433396102162296754614157
81127197001738611494279501411253280621254775810512972088465263158094806633687670
14731073354071771087661593585681409821296773075919738297344144525668877085532457
08889583209938234321027182241147637327913575686154212528496579033350931527769255
05845644010552192644505312073756287744998163646332835816140330175813967359427327
69044892036188038675495575180689005853292720149392350052584514670698262854825788
32673987352204572282392902071448222198855871028969919358730742778151597576207640
23951243860202032596596250212578349957710085626386118233813318509014686577064010
67627861758377277289589274603940393033727187385053691295712671506689668849388088
51429436099620129667590792250822753138128498515269029317002631363289420957975779
59327635531162066753488651317323872438748063513314512644889967589828812925480076
42518658649024111112730135719718138160258317850693224400799865663537154408845486
63931817083957357807990597308390948818040609359591909074739609044101505163217496
81412100765719177483767355751000733616922386537429079457803200042337452807566153
04292901449578062963413838355178359976470885134900485697369796523869584599459559
20907090589568914511414126845054621179450266117501669282602509507707782119504326
17383223562437601776799362796099368975191394965033358507155418436456852616674243
68892037103749532842592713161053783498074073915863381796765842525803673720646935
12486522384813416638080615057048290598906964519364400185971204257230073164100099
16987524260377362177763430621616744884930810929901009517974541564251204822086714
58684925513244426677712786372821133153622430109182439124338021404624222334915355
95168908162884879899882736304453724321742802157557779670216663170479697281724833
92841015642274507271779269399929740308072770395013581545142494049026536105825409
37311465310494338248437971860693721444460082679800247122948940576185389220342560
83026970528766213773735943942241147070740729027254613073585417456914194464876243
57682397065703184168467540733466346293673983620004041400714054277632480132742202
68539369886978760700959004868465062677136307097982100655728510130660101078063374
33447730734786538817426812307437660666433127753564665786037151929227684404582732
83243808212841218776132042460464900801054731426749260826922155637405486241717031
02791999694264562095561981645454766204502241144940474934983220680719135276798674
78134582038595704134661779372285349400316315995440936840895725334387029867178297
70373332806801764639502090023941931499115009105276821119510999063166150311585582
83558260717941005252858361136996130344279017381178741206128818206202326384986151
56564512300477929675636183457681050433417695430675380411139285537925292413473394
81050532025708728186307291158911335942014761872664291564036371927602306283840650
42544174233546454998705531872688792642410214736369862546374715974435494344389973
00517425251108773578863909468120966734281525859199248576404880550713298142993599
11463239919113959926752576359007446572810191805841807342227734721397723218231771
71691640010882611254909336118678057572239101818616854910850088527227437421208652
48523724562486976622453848192986711294529455154970305859193071984971054141816369
68976131126744027009648667545934567059936995464500558921628047976365686133316563
90739570327203438917541526750091501119885687270884819553167693168127289214303137
68180164454773675183534978579242764633541624336011259602521095016122641103460834
65648235597934274056868849224458745493776752120324703803035491157544831295275891
93989368087632768543876955769488142284431199859570072752139317683783177033913042
30609589991373146845690104220951619670705064202567338734461156552761759927271518
77660010238944760539789516945708802728736225121076224091810066700883474737605156
28553394356584375627124124445765166306408593950794755092046393224520253546363444
47917556617259621871992791865754908578529500128402290350615149373101070094461510
11613712423761426722541732055959202782129325725947146417224977321316381845326555
27960427054187149623658525245864893325414506264233788565146467060429856478196846
15936632889542997807225422647904006160197519750074605451500602918066382714970161
10987951336633771378434416194053121445291855180136575558667615019373029691932076
12000925506508158327550849934076879725236998702356793102680413674571895664143185
26790547171699629903630155456450900448027890557019683283136307189976991531666792
08958768572290600915472919636381673596673959975710326015571920237348580521128117
45861006515259888384311451189488055212914577569914657753004138471712457796504817
5856395072895337539755822087777506072339445587895905719156736

In(2) :=
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Lizard - Skriptsprache für symbolische Berechnungen und

Beitrag von Nino »

STARGÅTE hat geschrieben:Somit multipliziert Lizard von hause Produkte/Potenzen nicht aus. Dafür gibt es später dann den Befehl "Expand()" den ich noch implementieren werde.
Alles klar, vielen Dank! Das kann sehr nützlich sein, weil es von Hand manchmal länger dauern kann, komplexe Ausdrücke zu vereinfachen. Und wenn man dann einen Flüchtigkeitsfehler gemacht hat, kann man nochmal von vorne anfangen. :-)
STARGÅTE hat geschrieben:Allerdings kann ich dir auch hier wieder zeigen wie es auch jetzt schon gehen würde mit diesen Definitionen (wobei hier sicherlich einige Prüfabfragen fehlen bezüglich des Wertebereichs):
(Kannst du direkt in die Console des Consolen-Programm-Beispiels einfügen)

Code: Alles auswählen

Factorial(n?)      := Apply(Times, Table(i, {i, n}))
Binomial(n?, k?)   := Factorial(n) / (Factorial(n-k)*Factorial(k))
Expand((x?+y?)^n?) := Apply(Plus, Table(Expand(Binomial(n,k)*Expand(x^(n-k))*Expand(y^k)), {k,0,n})) /* Binomischer Lehrsatz */
Expand(x?*y?Plus)  := Map( Expand(x*#)& , y )    /* Distributivgesetz, multipliziere x mit jedem Element in y */
Expand(x?Plus)     := Map(Expand, x)    /* Expantiere Einzelsummanden */
Expand(exp?)       := exp    /* und sond nix */
Danach sollte folgendes gehen:

Code: Alles auswählen

In(7)   :=  Expand((a+b)^2 - a^2)
Out(7)   =  2*a*b + b^2

In(8)   :=  Expand((a+b+c)^3)
Out(8)   =  a^3 + 3*a^2*b + 3*a*b^2 + b^3 + 3*a^2*c + 6*a*b*c + 3*b^2*c + 3*a*c^2 + 3*b*c^2 + c^3
Ein weiteres sehr beeindruckendes Beispiel für die Flexibilität und Vielseitigkeit von Lizard!
STARGÅTE hat geschrieben:PS: Danke fürs testen :allright:
Das tue ich gerne, zumal es mir Spaß macht. :-)
Antworten