Du musst einem auch alles vorweg nehmen .
Jetzt kümmert sich keiner mehr drum, das möchte ich machen
MathEx UDF
-
MatthiasG. -
12. April 2009 um 19:05
-
-
Hallo @MatthiasG.,
hab gerade deine neue Funktion zur Errechnung aller Primzahlen mit der Zahl 16777215 getestet, die Funktion findet
1.077.871 Prims Die größte ist 16.777.213 benötigte Zeit auf meinem Rechner ungefähr 300 sec. Deine alte Routine benötigt
zum Errechnen dieser Prim (nach einer minimalen Änderung von mir ungefähr 0,56 ms). Aber auf die wirklich einfache Lösung wo die Zeit verlorenging, kommst du sicher selbst.mfg (Auto)Bert
-
So, habe alle Funktionen noch mal überarbeitet, inzwischen habe ich gemerkt, dass man die Kommentare auch auf Deutsch schreiben kann Bitte weitere Kommentare etc.! Hab ich noch Wünsche offen gelassen?
-
Hallo MatthiasG,
hab die neue _MathEx_IsPrime ausprobiert, bin über den Performancegewinn sehr überrascht. Super Zeitgewinn von > 421 ms jetzt ~ 3,5 ms (wobei bei meinen schmalen Resourcen, die Zeitmessung, schon fast wie auswürfeln ist). Wenn du deine _MathEx_IsDivisible noch gegen not Mod austauschst kannst du die Performance noch etwas erhöhen.
Übrigens deine _MathEx_CreatePrimes bildet das Sieb des Sieb des Eratosthenes nach (zumindest sieht es danach aus, als hättest du seine Regeln umgesetzt). Hier hab ich ja schon mal den Wunsch geäussert, die bereits errechneten Prims abspeichern und wieder laden zu können, damit ich endlich in den Wettbewerb wer findet die grösste Prim einsteigen kann .
Das Sieb des Atkin soll noch schneller sein, das ist jetzt aber noch nicht wichtig. Wichtiger erscheint mir dass du ein gutes Beispielprogramm (leichtes Handling) schreibst, damit alle den Wert der Umsetzung deiner UDF erkennen,mfg (Auto)Bert
-
Danke für deine tollen Tests und deine Antwort! Ich werde alle Vrorschläge mit einbeziehen (s. aktualisierte ToDo-List), muss das aber leider auf später vertagen, da ich gerade an einem Groß-Projekt arbeite...
-
Hallo,
vielleicht kannst du diese Funktion noch einbauen: Standard Abweichung
Spoiler anzeigen
[autoit]; Standard Abweichung
[/autoit] [autoit][/autoit] [autoit]
Func _StandardDeviation($aNumber)
If IsArray($aNumber) Then
Local $d = _MathEx_Mean($aNumber)
Local $v = 0
Local $n = UBound($aNumber)
For $i = 0 To $n - 1
$v += (Number($aNumber[$i]) - $d) ^ 2
NextReturn Sqrt($v / $n)
[/autoit] [autoit][/autoit] [autoit]
EndIfSetError(1, "", 0)
[/autoit]
EndFunc ;==>_StandardDeviationdabei ist mir aufgefallen, daß dein arithmetisches Mittel ein quadratisches ist (Zeile 392)
Ach ja und PI:
$pi = 4 * ATan(1)
aber das ist wahrscheinlich zu unspektakulär ...Grüße
Stilgar -
Danke Stilgar!
Habe die Sachen zunächst "nur" in meiner To-Do-Liste aufgenommen, im Moment fehlt mir leider die Zeit, werde es aber auf jedem Fall korrigieren!
-
Hey!
Mir ist grade deine Math-UDF aufgefallen und muss sagen, dass ihr schon gute Arbeit geleistet habt
Und da mir grade langweilig war, hab ich dir auch mal ein paar Funks gebastelt.. Hoffe du kannst sie gebrauchen!Spoiler anzeigen
[autoit]; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name...........: _MathEx_ggT
; Beschreibung...: Gibt den größten gemeinsamen Teiler von 2 Zahlen an.
; Syntax.........: _MathEx_ggT($a,$b)
; Parameter......: $a,$b - Zwei beliebige Zahlen ($a <> 0)
; Rückgabe.......: Erfolg - Gibt einen Integer zurück
; Fehler - Gibt "" zurück und setzt @error
; |1 - $a = 0
; Bemerkungen....: Die Zahl $a darf nicht = 0 sein.
; Autor(en)......: Niko H. bzw. ChaosKeks
; ===============================================================================================================================
Func _MathEx_ggT($a,$b)
If $a = 0 Then
return SetError(1, 0, "")
Elseif $b = 0 Then
return $a
Elseif $a = $b Then
return $a
Elseif $a < 0 Or $b < 0 Then
return 1
Endif
While $a <> $b
If $a > $b Then
$a = $a - $b
Else
$b = $b -$a
EndIf
Wend
return $a
EndFunc ;==>_MathEx_ggT; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name...........: _MathEx_kgV
; Beschreibung...: Gibt den kleinsten gemeinsamen Vielfachen von 2 Zahlen an.
; Syntax.........: _MathEx_kgV($a,$b)
; Parameter......: $a,$b - Zwei beliebige Zahlen
; Rückgabe.......: Erfolg - Gibt einen Integer zurück
; Fehler - Gibt "" zurück und setzt @error
; |1 - $a = 0
; Bemerkungen....: Die Zahl $a darf nicht = 0 sein.
; Autor(en)......: Niko H. bzw. ChaosKeks
; ===============================================================================================================================
Func _MathEx_kgV($a,$b)
Local $ggT = _MathEx_ggT($a,$b)
If $a = 0 Then
return SetError(1,0,"")
EndIF
return $a*$b/$ggT
EndFunc ;==>_MathEx_kgV; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name...........: _MathEx_Faculty
; Beschreibung...: Gibt die Fakultät einer Zahl resultierend aus deren Bezugszahl an.
; Syntax.........: _MathEx_kgV($a, [$b])
; Parameter......: $a,$b - Zwei beliebige positive Intergers
; Rückgabe.......: Erfolg - Gibt einen Integer zurück
; Fehler - Gibt "" zurück und setzt @error
; |1 - $a oder $b ist negativ
; |2 - $a oder $b ist kein Integer
; |3 - $b ist größer als $a
; Bemerkungen....: Rekursive Fakultäten sind nicht eingeschlossen.
; Autor(en)......: Niko H. bzw. ChaosKeks
; ===============================================================================================================================
Func _MathEx_Faculty($a, $b = 1)
Local $fak = 1
If $a < 0 or $b < 0 Then
return SetError(1,0,"")
ElseIf isInt($a) = 0 Or isInt($b) = 0 Then
return SetError(2,0,"")
ElseIf $b > $a Then
return SetError(3,0,"")
EndIf
For $i = $b To $a
$fak *= $i
Next
return $fak
EndFunc ;==>_MathEx_Faculty; #FUNCTION# ====================================================================================================================
[/autoit]
; Name...........: ;==>_MathEx_EulNumber
; Beschreibung...: Gibt die eulerische Zahl relativ genau zurück
; Syntax.........: _MathEx_EulNumber($accuracy = 65)
; Parameter......: $accuracy - Die Genauigkeit von der eulerischen Zahl.
; Rückgaben......: Erfolg - Gibt eine Annäherung der eulerischen Zahl zurück
; Gibt "" zurück und setzt @error
; |1 - $accuracy > 0
; |2 - $accuracy < 0
; |3 - $ccuracy ist kein Integer
; Bemerkungen....: Die eulerische Zahl kann über einer Accuracy von über 65 nicht mehr angegeben werden!
; Autor(en)......: Niko H. bzw. ChaosKeks
; ===============================================================================================================================
Func _MathEx_EulNumber($accuracy = 65)
Local $eul = 1
If $accuracy > 65 Then
return SetError(1,0,"")
ElseIf $accuracy < 0 Then
return SetError(2,0,"")
ElseIf IsInt($accuracy) = 0 Then
return SetError(3,0,"")
Else
For $i = 1 To $accuracy
$eul += 1/_MathEx_Faculty($i)
Next
EndIf
return $eul
EndFunc ;==>_MathEx_EulNumberBitteschön!
EDIT: ups hab grade Beitrag 42 gelesen naja zur not kannste auch den Autorennamen ändern (bin nich so geil auf Titel)..
-
Hallo allerseits!
Habe eine neue Version hochgeladen, inklusive Beispiel. Eine Funktion wurde gelöscht, 11 hinzugefügt. Macht 13-1+11 = 23
Inklusive Beispiel (jetzt wisst ihr, warum ich euch bezgl. Console.au3 von BugFix nerven musste )Einen schönen Tag noch!
-
Hi MatthiasG.
schöne Funktionen
gefällt mirgruss Simon
-
Hallo!
Danke, freut mich zu hören. Werde demnächst weitere geometrische Funktionen im Sinne von _MathEx_Point_xxx oder _MathEx_GraphInfo erstellen...
Würde mich auch freuen zu hören, wofür das benutzt wird -
Hier 2 weitere Funktionen (LN und Fakultät):
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
; #FUNCTION# ====================================================================================================================
; Name...........: _MathEx_LN
; Beschreibung...: Berechnet den natürlichen Logarithmus (logarithmus naturalis)
; Syntax.........: _MathEx_LN($x)
; Parameter......: $x - berechnet den natürlichen Logarithmus von $x
; Rückgabe.......: Erfolg - Gibt das Ergebnis $ln zurück
; Fehler - Gibt False zurück
; Eigenschaften..: Definitionsbereich: 0 < $x < unendlich
; Wertebereich: -unendlich < f(x) < unendlich
; Monotonie: x > 1: streng monoton steigend, 0 < x < 1: streng monoton fallend
; keine Symmetrien (Punkt- und Spiegelsymmertrien), keine Periodizität
; Autor(en)......: UEZ
; ===============================================================================================================================
Func _MathEx_LN($x)
Local $ln, $e = 2.71828182845904523536
If Not IsString($x) And $x > 0 Then
If $x = 1 Then
Return 0
Else
$ln = Log($x) / Log($e)
Return $ln
EndIf
Else
Return False
EndIf
EndFunc ;==>_MathEx_LN; #FUNCTION# ====================================================================================================================
[/autoit]
; Name...........: _MathEx_Fak
; Beschreibung...: Berechnet die Fakultät der Zahl n
; Syntax.........: _MathEx_Fak($n)
; Parameter......: $n - berechnet die Fakultät der Zahl n => f(n) = 1 * 2 * 3 * 4 * ... * n
; Rückgabe.......: Erfolg - Gibt das Ergebnis $fak zurück
; Fehler - Gibt False zurück
; Eigenschaften..: n ist Element der natürlichen Zahlen
; Definitionsbereich: 0! = 1, 1! = 1, n > 1: f(n) = 1 * 2 * 3 * 4 * ... * n
; Näherungsformel nach Stirling (für große n): n! = Sqrt(2*pi*n)*(n/e)^n * (1 + 1/(12*n) + 1/(288*n^2))
; Limitierung....: bis n = 25 möglich, da noch kein long int implementiert
; Autor(en)......: UEZ
; ===============================================================================================================================
Func _MathEx_Fak($n)
Local $fak = 1, $i
If Not IsFloat($n) And Not IsString($n) Then
If $n > 1 Then
For $i = 2 to $n
$fak *= $i
Next
Return $fak
ElseIf $n = 1 Then
Return 1
ElseIf $n = 0 Then
Return 1
Else
Return False
EndIf
Else
Return False
EndIf
EndFunc ;==>_MathEx_FakVielleicht folgen noch weitere ...
Gruß,
UEZEdit: ups, Fakultät gibt es ja schon
-
Hallo UEZ!
Danke für deine Funktionen! Ja, Fakultät gibt es in der neusten Versio. Macht doch nichts, trotzdem danke!
Meinst du mit Ln zufälligerweise Log()?Ich kann mit dem Namen leider nichts anfangen, kannst du bitte kurz erläutern, was damit gemeint ist?
-
- Offizieller Beitrag
Meinst du mit Ln zufälligerweise Log()?
Log() wird (leider) auch zur Bezeichnung des natürlichen Logarithmus verwendet. Eindeutig ist aber Ln().
Der natürliche Logarithmus verwendet als Basis die Eulersche Zahl.Dieser Logarithmus ist wohl einer der beliebtesten. Kann mich an viele Mathestunden erinnern, in denen wir bis zum Geht-Nicht-Mehr integriert und differenziert haben. Was mit diesem Log besser als mit allen anderen geht.
-
Hallo UEZ!
Danke für deine Funktionen! Ja, Fakultät gibt es in der neusten Versio. Macht doch nichts, trotzdem danke!
Meinst du mit Ln zufälligerweise Log()?Ich kann mit dem Namen leider nichts anfangen, kannst du bitte kurz erläutern, was damit gemeint ist?
Da du noch 15 bist, kannst du nichts mit LN anfangen, aber wenn du mal das Vergnügen haben wirst die Oberstufe zu besuchen, wirst du auf jeden Fall LN kennen lernen.
Vorgeschmack hier: http://de.wikipedia.org/wiki/Logarithm…lle_Logarithmen
Gruß,
UEZ -
In Ordnung, danke ihr beiden. Ich baue die Funktion in _MathEx_Log ein, mit einem Flag, oder ist es dir lieber, wenn ich das _MathEx_Ln nenne?
-
In Ordnung, danke ihr beiden. Ich baue die Funktion in _MathEx_Log ein, mit einem Flag, oder ist es dir lieber, wenn ich das _MathEx_Ln nenne?
Log() ist ungleich LN(), deshalb sollte LN als selbststängige Funktion gelistet sein.
UEZ
-
Wird erledigt! In der nächsten Version gibt es die Funktion!
-