Seite 1 von 1
Wahrscheinlichkeitsfunktionen
Verfasst: Mittwoch 17. September 2008, 15:11
von Goswin
Kann es wahr sein, dass nirgendwo im WWW Funktionen programmiert sindt, welche die Wahrscheinlichkeiten bekannter Zufallsverteilungen liefern?
Ich finde stundenlang Funktionen, die Zufallszahlen erzeugen, aber nie eine für (kumulierte) Wahrscheinlichkeiten oder Dichtefunktionen, nicht einmal die in jedem Statistikbuch vorhandenen Tabelleneinträge sind vertreten.
Auf der Scipy-Seite bin ich schon gewesen, da finde ich auch nichts. Hat jemand anderswo so etwas gesehen?
Verfasst: Mittwoch 17. September 2008, 15:17
von sea-live
Verfasst: Mittwoch 17. September 2008, 15:28
von Goswin
Wenn ihr das immer genau wissen wollt, mache ich euch doch nur noch mehr Arbeit!
Heute suche ich eine Funktion, die mir kumulierte Wahrscheinlichkeiten einer negativen Binomialverteilung (mit beliebigem Erwartungswert und Varianz) liefert. Für große Erwartungswerte strebt diese nach einer Normalverteilung, aber für Normalverteilungen habe ich ja auch nichts gefunden...
Verfasst: Mittwoch 17. September 2008, 17:21
von abgdf
Ich hab' keine Ahnung, wovon Du schreibst, aber ich bin sicher, wenn Du die Funktionen programmierst (vielleicht in einem "Statistik"-Modul ?) und als erster OpenSource ins www stellst, wären Dir sicher ein paar Mathematiker dankbar

.
Gruß
Re: Wahrscheinlichkeitsfunktionen
Verfasst: Mittwoch 17. September 2008, 18:14
von Hyperion
Goswin hat geschrieben:Kann es wahr sein, dass nirgendwo im WWW Funktionen programmiert sindt, welche die Wahrscheinlichkeiten bekannter Zufallsverteilungen liefern?
Naja, im random Modul gibt es doch einige - vielleicht nicht die, die Du jetzt suchst

Verfasst: Mittwoch 17. September 2008, 18:19
von sea-live
Diese Frage würde ich mal ins Mathematik Forum Stellen
da kanste sicherlich mit glänzen !
und auch minimale richtungsvorgaben von Profesoren solten dann kommen.
die dann schlussendlich zu einem Wahrscheinlich unwarscheinlichen Programm Fuhren !
Verfasst: Mittwoch 17. September 2008, 18:58
von BlackJack
@Hyperion: Im `random`-Modul gibt es keine einzige solche Funktion. Goswin sucht keine Funktion die Zufallszahlen erzeugt, sondern welche die die Wahrscheinlichlkeitsverteilung berechnen.
Verfasst: Mittwoch 17. September 2008, 19:40
von numerix
Verfasst: Donnerstag 18. September 2008, 16:27
von Goswin
@sea-live: Danke für den Hinweis, ich wusste garnicht dass es ein Mathematikforum überhaupt gab, meinst du den Matheplaneten Matroid? Inzwischen habe ich die Frage auch dort gestellt, bin gespannt, was dabei herauskommt.
Verfasst: Donnerstag 18. September 2008, 16:39
von numerix
@Goswin: Was ist mit sympy? Genügt dir das nicht?
Verfasst: Freitag 19. September 2008, 09:34
von Goswin
@numerix: Sympy könnte auch interessant sein, obwohl es derzeit nur Wahrscheinlichkeiten für die Gaussverteilung anbietet und es kein direktes Download für SuSE-Linux gibt. Ob ich für große Erwartungswerte auf die Gaussverteilung ausweichen soll oder nicht, das ist ja gerade ein impliziterTeil meiner Frage. Jedenfalls bin ich auch für diesen Hinweis dankbar.
Re: Wahrscheinlichkeitsfunktionen
Verfasst: Freitag 19. September 2008, 12:47
von CM
Goswin hat geschrieben:Auf der Scipy-Seite bin ich schon gewesen, da finde ich auch nichts. Hat jemand anderswo so etwas gesehen?
Du mußt ggf. auch in scipy reingucken:
binom.cdf dürfte sein, was Du suchst.
HTH,
Christian
PS sympy und simpycore sind Algebrasysteme. Zwar kann man damit sicher auch CDFs abbilden (wenn nicht, wird das auf Wunsch sicher schnell implementiert), aber wenn man damit weiterrechnen will, muß man ggf. doch wieder in die "Niederrungen der Numerik" abtauchen.

Verfasst: Freitag 19. September 2008, 13:56
von HWK
Hier steht etwas zur Normalverteilung.
MfG
HWK
Verfasst: Freitag 19. September 2008, 18:09
von abgdf
Der Schönheit wegen hatte ich mal das geschrieben:
Code: Alles auswählen
#!/usr/bin/env python
import pygame, sys,os
import math
from pygame.locals import *
# Screen resolution:
RESX = 800
RESY = 600
pygame.display.init()
window = pygame.display.set_mode((RESX, RESY))
pygame.display.set_caption('Gauss')
screen = pygame.display.get_surface()
b = 0.3
ULIM = 100.
UDIV = 1.8
for u in range(0, int(ULIM), 1):
# Some mathematical, Gaussian calculations:
a = float(u) / (ULIM / UDIV)
if u > ULIM / 2:
a = UDIV - (float(u) / (ULIM / UDIV))
m = u / 16.
for x in range(50, RESX - 50):
c = x / (RESX / 16.) - 5.
y = a * math.exp(-b * (c - m) * (c - m))
# down:
y = RESY / 10 + (y * RESY / 1.5 + u * 3)
# up:
# y = RESY * 9 / 10 - (y * RESY / 1.5 + u * 3)
pygame.draw.line(screen, (200,200,200), (x, y), (x, y), 1)
pygame.display.update()
def input(events):
for event in events:
if event.type == QUIT:
sys.exit(0)
if event.dict.has_key('key') and event.dict['key'] == K_q:
sys.exit(0)
while True:
input(pygame.event.get())
Keine Ahnung, ob Du sowas in der Richtung meintest ...
Viele Grüße
Verfasst: Dienstag 23. September 2008, 11:08
von Goswin
@HWK:
In der Tat, die Links sind sehr informativ. Ich habe den Algorithmus zur Normalverteilung zwar nicht getestet, aber das haben viele andere getan. Ich glaube, die Normalverteilung kann ich abhaken.
@CM:
Wie auf den scipy-Webseiten über die scipy-Packages bereits geschrieben steht: "unfortunately very few are currently documented". Unter anderem ist scipy.stat nicht auf den Webseiten dokumentiert. Ich habe die vielleicht dumme Angewohnheit, undokumentierten Code unbeachtet zu lassen. Wenn ich es herunterlade, kann ich am Code sehen was das Paket enthält?
@abgdf:
Ich kenne das Paket <pgame> nicht, habe also selber keine Ahnung

, ob ich etwas in dieser Richtung suche. Ich wäre nicht auf die Idee gekommen, in einem Spielepaket zu suchen. Mit etwas Zeit versuche ich mal, das pygame herunterzuladen und dein Programm zu entziffern.
Verfasst: Dienstag 23. September 2008, 12:26
von CM
Goswin hat geschrieben:@CM:
Wie auf den scipy-Webseiten über die scipy-Packages bereits geschrieben steht: "unfortunately very few are currently documented". Unter anderem ist scipy.stat nicht auf den Webseiten dokumentiert. Ich habe die vielleicht dumme Angewohnheit, undokumentierten Code unbeachtet zu lassen. Wenn ich es herunterlade, kann ich am Code sehen was das Paket enthält?
Natürlich:
sagt Dir, was im Namespace so drinne ist. Im Übrigen kann ich Dir die scipy-Mailingliste ans Herz legen. Dort kannst Du bei spezifischen, mathematisch geprägten Fragen rund um Python (fast) sicher brauchbare Information erhalten - auch zu Aspekten neben scipy.
HTH
Christian
Verfasst: Dienstag 23. September 2008, 17:42
von Goswin
@CM: Mach ich. Danke für die Info.
Verfasst: Mittwoch 24. September 2008, 17:08
von abgdf
@Goswin:
In meinem Beispiel oben hatte ich "Pygame" zum Zeichnen verwendet.
Für den Fall, daß Du "Pygame" nicht verwenden kannst, hab' ich's hier nochmal in Tkinter gemacht. Das geht dann mit den "included batteries":
Code: Alles auswählen
#!/usr/bin/env python
import math
import Tkinter
from Tkconstants import *
# Screen resolution:
RESX = 800
RESY = 600
class GaussWindow:
def __init__(self):
self.mw = Tkinter.Tk()
self.mw.option_add("*font", ("Arial", 12, "normal"))
self.mw.title("Gauss")
self.mw.geometry("+90+45")
self.cv = Tkinter.Canvas(self.mw,
bg = "white",
width = RESX,
height = RESY)
self.cv.pack()
self.drawGauss()
self.btn = Tkinter.Button(self.mw,
text = "Ok",
command = self.mw.destroy)
self.btn.bind(sequence = "<Return>", func = self.bindFunc)
self.btn.focus()
self.btn.pack(side = RIGHT,
padx = 10,
pady = 10)
self.mw.mainloop()
def bindFunc(self, a):
self.mw.destroy()
def drawGauss(self):
b = 0.3
ULIM = 100.
UDIV = 1.8
for u in range(0, int(ULIM), 1):
# Some mathematical, Gaussian calculations:
a = float(u) / (ULIM / UDIV)
if u > ULIM / 2:
a = UDIV - (float(u) / (ULIM / UDIV))
m = u / 16.
for x in range(50, RESX - 50):
c = x / (RESX / 16.) - 5.
y = a * math.exp(-b * (c - m) * (c - m))
# down:
y = RESY / 10 + (y * RESY / 1.5 + u * 3)
# up:
# y = RESY * 9 / 10 - (y * RESY / 1.5 + u * 3)
self.cv.create_line(x, y, x + 1, y + 1)
if __name__ == "__main__":
app = GaussWindow()
Viele Grüße