vorherige Seite | 1 2 |
Gepostet: |
Zur Frage | ||||||||||
rechteckregel_l:: Double->Double->(Double->Double)->Double rechteckregel_l x y f=(y-x)*f(x) rechteckregel_r::Double->Double->(Double->Double)->Double rechteckregel_r x y f=(y-x)*f(y) trapezregel::Double->Double->(Double->Double)->Double trapezregel x y f=(y-x)*(f(x)+f(y))/2 Hier sind die Integrale zu meinen Funktionen |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo Christian, zur ersten Fehlermeldung: rechteckregel_l ist vom Typ Double -> Double -> (Double -> Double) -> Double. Das bedeutet, es wird als erstes und zweites Argument ein Wert vom Typ Double erwartet. Das dritte Argument soll eine Funktion sein, die einen Double in einen Double umwandelt. Als Funktionsergebnis wird wieder ein Double geliefert. Bei deinem Aufruf sind die ersten beiden Argumente gegeben, es fehlt aber noch die Funktion, über die integriert werden soll: -- Als Beispiel eine lineare Funktion Zur zweiten Fehlermeldung: Zu erklären, warum genau diese Fehlermeldung kommt, führt jetzt vielleicht etwas zu weit, das hat mit Haskells Typklassen-System zu tun. Kurz gesagt liegt der Fehler darin, daß fromInt nur ein Argument erwartet, du aber zwei Werte übergeben hast. Der Aufruf von fromInt sollte eigentlich nicht nötig sein, aber wenn du es unbedingt verwenden möchtest, dann sollte das so funktionieren: Aufruf: Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
Testproblem bei funktionen in haskel | ||||||||||
f1 x=(x^3)-(3*x^2)+5 f2 x=log x --Näherungswerte für Integral rrl :: Double -> Double ->(Double -> Double) -> Double rrl x y f | x>y = error"x muss kleiner sein als y" |otherwise = (y-x) * f(x) rrr :: Double -> Double ->(Double -> Double) -> Double rrr x y f | x>y = error "x muss kleiner sein als y" |otherwise = (y-x) * f(y) tr :: Double -> Double ->(Double -> Double) -> Double tr x y f | x>y = error "x muss kleiner sein als y" | otherwise =(y-x)*( (f(x)+f(y) )/2) --Intervall->[a,b],fkt->f,schrittweite->h,Näherungsregel->nr b_integral::Double->Double->(Double->Double)->Double->(Double -> Double ->(Double -> Double) -> Double)->Double b_integral a b f h nr= if b-a>h then (nr a c f)+(b_integral c b f h nr) else (nr a b f) where c=a+hHallo kann mir jemand sagen warum ich immer eine fehlermeldung beim testen der einzelnen funktionen bekomme Das hat jemand beim lehrer schon abgegeben und das ok bekommen Ich habe das bekommen und bekomme immer fehlermeldung Was mache ich falsch Kann mir jemand zeigen wie man die funktionen programmiert, so das die beim testen funktionieren Danke Christian |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, welche Testfälle funktionieren denn bei dir nicht und welche Fehlermeldungen bekommst du? Hab grad selbst ein Beispiel ausprobiert und keinen Fehler bekommen. Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hi Danke Für deine Unterstützung Kannst du mir Beispiele geben wie du dia Abfrage gemacht hast. Ich habe garantiert die Abfrage falsch geschrieben. Dann nochwas zu haskell Was sind Lamda Ausdrücke und wann werden die verwendet Danke für deine Ünterstützung |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Das habe ich getestet:Aufruf: b_integral 1 2 f1 0.1 tr Lambda-Ausdrücke sind eine weitere Möglichkeit Funktionen zu beschreiben. Sie werden folgendermaßen gebildet:     \variablen -> ausdruck. Dabei sind variablen eine oder mehrere Variablen, und ausdruck ein Ausdruck, der die Variablen verwendet. Das Ergebnis dieses Lamdba-Ausdrucks ist eine Funktion vom Typ: (Typ von variablen -> Typ von ausdruck). Der Vorteil liegt darin, das man die Funktion nicht mit einem Namen versehen muß. Man kann sie direkt in einem anderen Ausdruck verwenden. Das ist vor allem bei kurzen Funktionen praktisch, die man so "mal schnell" für andere Funktionen verwenden kann, die eine Funktion als Parameter erwarten. Ein Beispiel: -- Normale Funktion: Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo norm::[Double]->Double norm a =(sqrt.quadsum)a g:: [Double]-> [Double]->[Double] g [] [] = [] g (a:ar) (b:br) = (a-b):(g ar br) dist::[Double]->[Double]->Double dist a b = (norm(g a b)) Ich gebbe ein dist [1] [5] bekomme als Antwort: Program error: argument out of range Warum kommt diese Meldung Danke |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, da hilft es, sich mal nachzuvollziehen, was bei der Auswertung passiert: dist [1] [5] = norm (g [1] [5]) = norm ((-4):g [] []) = norm [-4] = (sqrt . quadsum) [-4] = sqrt (quadsum [-4]) Jetzt hast du nicht angegeben, was quadsum macht, aber ich schätze es liefert einen negativen Double-Wert. Von diesem willst du dann die Wurzel ziehen, was nicht erlaubt ist. (Oder der Fehler tritt bereits in der Funktion quadsum auf.) Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
Datentypen | ||||||||||
Ichg habe mal eine frage Wo liegt der Unterschie bei den Datentyoen int in c und Int in Hakell Das war eine Klausurfrage Christian |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, der Haskell-Datentyp Int umfasst mindestens die Werte -2^29 .. 2^29-1, während bei C der Wertbereich von int immer der Registergröße entspricht. Andere Unterschiede sind mir nicht bekannt. (Ist aber ne fiese Klausurfrage, finde ich.) Viele Grüße, Siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
vorherige Seite | 1 2 |