Hausübung 2 Aufgabe 6

kechler
Mausschubser
Mausschubser
Beiträge: 46
Registriert: 21. Nov 2004 22:33
Wohnort: Darmstadt

Hausübung 2 Aufgabe 6

Beitrag von kechler »

Hallo,

erstmal wollte ich fragen, ob heute keine Pool-Sprechstunde war oder der Tutor sein Schild nicht gut sichtbar aufgestellt hat? Habe bis 15 Uhr im Pool gewartet und geschaut, aber leider niemanden gefunden...

Naja, dann frag ich einfach mal so in die Runde, ob mir jemand nen Tipp bei folgenden Problem bei der Teilaufgabe 3 geben kann:

Ich wollte eine Abfrage wie bei der Teilaufgabe 2 starten, um zu überprüfen, welches das erste Element meiner übergebenen Liste ist:
(symbol=? (first dexp) 'make-mul)... ;; um Multiplikation durchzuführen
Das Problem hierbei ist allerdings, das make-mul kein Symbol ist. Ich habs auch schonmal mit equal? versucht, hat aber leider auch nicht funktioniert.
Meine anderer Lösungsansatz war dieser hier gewesen:
(symbol=? (parse (first dexp)) '*)
Hat aber auch leider nicht hingehauen...

Als Fehlermeldung gibt er mir folgendes aus:
first: expected argument of type <non-empty list>; given (make-mul 'x 3)

Über nen weiteren Lösungsansatz wäre ich sehr dankbar :!:

banshee
Nerd
Nerd
Beiträge: 684
Registriert: 22. Okt 2006 18:46

Beitrag von banshee »

(cond
[(symbol? 'make_mul) 'error_message]
[else (cond
[symbol=? (first dexp) 'make_mul ... etc.

wenn ich das richtig verstanden hab

Tutor16
Windoof-User
Windoof-User
Beiträge: 30
Registriert: 25. Okt 2006 16:52

Beitrag von Tutor16 »

1. Ja es war Sprechstunde und der Tutor war auch da (linke Seite ganz hinten)

2. make-mul ist keine Liste sondern die Prozedur um eine Struktur mit dem Namen mul zu erstellen, wie man auf Strukturen zugrifft und diese kontrolliert solltet ihr hoffentlich wissen. Ansonsten nochmal nachlesen.

Benutzeravatar
Tapion
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 220
Registriert: 14. Okt 2006 19:16
Wohnort: Darmstadt

Beitrag von Tapion »

Dann frag ich grad ma weiter...

unsere ableitungsfunktion klappt nur, wenn 'x an zweiter stelle steht. sollen wir die funktionen (nach muster) auch so implementieren, dass z.b. (make-mul (make-pow x' 3) 2) abgeleitet werden kann oder dürfen wir in diesem Fall davon ausgehen, dass der Faktor immer links und der Term mit 'x immer rechts steht? Und sollen wir auch bedenken, dass statt einer Zahl z.B. ein 'a eingegeben wird? "Denken sie sich weitere Beispiele aus und experimentieren sie mit ihrer Lösung" ist eine sehr schwammige Aufgabenstellung...
WS 2010/11 - Tutor GDI 1
SS 2010 - Tutor FGI 1+2

Ondori
Mausschubser
Mausschubser
Beiträge: 89
Registriert: 28. Okt 2006 19:50

Beitrag von Ondori »

soweit ich das verstanden habe, möchtest du abfragen, von welchem typ deine erste struktur ist, das kannst du z.B mit

(mul? <struktur>)

machen

Benutzeravatar
Tapion
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 220
Registriert: 14. Okt 2006 19:16
Wohnort: Darmstadt

Beitrag von Tapion »

ne, das habe ich ja schon lange. Die aufgabe, einfach nur nach den Bedingungen umzusetzen war irgendwie pipifax. Deshalb frage ich mich, ob da nicht noch irgendwas fehlt.

Im Beispiel ist das 'x bei (make-mul .. ..) immer im 2ten Argument und darauf beschränkt habe ich meine implementierung der Regel "f(x) = n * g(x) -> f'(x) = n * g'(x)" umgesetzt. Meine Implementierung beachtet dabei noch nicht die Kommutativität des Ausdrucks, denn statt n * g(x) könnte man ja auch g(x) * n schreiben, was zum gleichen Ergebnis führt, aber für den Computer eben extra implementiert werden muss.

Ich könnte das jetzt mit hilfe der Produktregel implementieren, hätte dann aber ein anderes Ergebnis, da aus
(make-mul 2 (make-pow x 3)) statt (make-mul 2 (make-mul 3 (make-pow x 2))) eben
(make-mul 2 (make-add (make-mul 3 (make-pow x 2)) (make-mul 0 (make-pow x 3)))) würde, was mathematischen gesehen genau das gleich ist, für Scheme aber eben nicht.

Dementsprechend würde es notwenig auch noch einen vereinfacher zu schreiben, der z.B. Operationen mit 2 Zahlen direkt berechnet, multiplikation mit 0 entfernt, mult. mit 1 und add. zu 0 vereinfacht etc.

Daher nur die Frage, ob die Betrachtung des Sonderfalls (make-mul (make-pow x 3) n) innerhalb der bepunkteten Musterlösung ist.
WS 2010/11 - Tutor GDI 1
SS 2010 - Tutor FGI 1+2

Benutzeravatar
Robert
Ehemalige Fachschaftler
Beiträge: 511
Registriert: 6. Okt 2004 17:38
Wohnort: DA

Beitrag von Robert »

ne musst du nicht einbauen .. geh einfach davon aus das es immer n*f(x) ist

Benutzeravatar
blowfish
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 241
Registriert: 18. Okt 2006 16:00

Beitrag von blowfish »

mach's doch einfach!!! die eine zeile mehr oder weniger...
du hast mit deinen beiträgen mehr geschrieben und wahrscheinlich mehr drüber nachgedacht, als du für die entsprechende implementierung benötigt hättest.
Ein Hemd ist Einstellungssache!

Drudge
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 13. Apr 2004 20:17

Beitrag von Drudge »

Auch für den Fall das ich mich hier gerade zum Affen mache, aber kann mir jemand sagen, wie die 2 Regel gemeint ist???

meinen die sowas wie n* (derivative (X^Y) = n* XY^(Y-1))
da ich sonst annehmen würde das: derivative n* (X^Y) eigentlich 0*(XY^(Y-1)) wäre, also 0?!?!?

also ich tendiere ja zu erstem beispiel, weil das andere sinnlos wäre, aber irgendwie bin ich grad etwas verpeilt und hätte gerne gewissheit!

danke schon mal im vorraus :D


edit: ok, ich hab mich zum affen gemacht :P aber ich habe eben meinen denkfehler bemerkt!

Benutzeravatar
E.d.u.
Nerd
Nerd
Beiträge: 633
Registriert: 3. Feb 2004 17:01
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von E.d.u. »

äh also können wir davon ausgehen dass
(make-mul 2 (make-add (make-mul 3 (make-pow x 2)) (make-mul 0 (make-pow x 3)))) auch richtig ist, auch wenn es "unnötige" multiplikationen mit 0 vorkommen?

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Beitrag von MisterD123 »

die unnötigen multiplikationen fallen ja raus wenn mans am ende ausrechnen würde.. die art des ausdrucks ist ja fürs ergebnis irrelevant. Sogar in den Beispielen steht als ergebnis ja einmal (make-pow 'x 1) drin, das is eigentlich auch schwachsinn.. aber du sollst ja erstmal nur ableiten und nix optimieren / zusammenfassen, von daher denk ich dass ne multiplikation mit 0 kein problem sein sollte..

Benutzeravatar
Twister11
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 26. Nov 2005 14:18
Kontaktdaten:

Beitrag von Twister11 »

Darf es nur die Variable 'x geben oder sind generell konstanten bzw. variablen
erlaubt?
zb.: 'a

Benutzeravatar
Martin K
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 110
Registriert: 13. Okt 2006 17:56

Beitrag von Martin K »

ich würde mal sagen, nur die Variable 'x.
Alle anderen Konstanten, wie 'n müssen in Form einer Zahl, also number? vorliegen (s. Definition von aexp).

Aber ich habe auch noch mal ne Frage:
Es soll also nichts vereinfacht werden?
(s. Multiplikation mit 0, oder (make-pow 'x 1))

Also beim 3. Beispiel bei der 6.3 bekomme ich:

Code: Alles auswählen

(make-add
     (make-mul 3 (make-pow 'x (make-sub 3 1)))
     (make-sub
           (make-mul 2 (make-mul 2 (make-pow 'x (make-sub 2 1))))
           (make-mul 3 1)))
heraus.
Auf dem Aufgabenblatt ist aber (make-sub 3 1) schon zu 2
und (make-sub 2 1) zu 1 ausgerechnet.
Wo ist denn bitte verlangt, dass das ausgerechnet wird?
Warum wird dann z.B. (make-mul 3 1) nicht ausgerechnet?

Benutzeravatar
Tapion
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 220
Registriert: 14. Okt 2006 19:16
Wohnort: Darmstadt

Beitrag von Tapion »

UNser Tutor hat uns gesagt, dass diese Optimierungen nicht in der Musterlösung drin sind.

Ich denke, bei der Aufagbe könnte es neben dem ableiten an sich auch darum gehen, dass wir eben erkennen, dass sich da noch einiges verbessern läasst.

Sobald du z.B. die Potenz auch an erster Stelle der Multiplikation zulassen willst, musst du im Prinzip schon die Kettenregel anwenden. (Ableitregel ist im Prinzip die halbe Kettenregel). Damit kannst schon fast gar nichts optimieren, ohne in die freiwilligen Zusatzaufgaben zu gelangen. Von daher sind Optimierungen meines Erachtens nicht verlangt. Die Kettenregel haben wir trotzdem noch eingebaut. Verkürzungen des Ergebnisses sind aber innerhalb der Ableitungsfunktion nicht möglich. Von daher kann man die m.E. ebenfalls weglassen.
WS 2010/11 - Tutor GDI 1
SS 2010 - Tutor FGI 1+2

Benutzeravatar
Martin K
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 110
Registriert: 13. Okt 2006 17:56

Beitrag von Martin K »

Hab rausgefunden, woran es lag, dass es Abweichungen bei meiner 6.3, 3. Beispiel zu der vorgegebenen Lösung auf dem Blatt gab:

Bei der ersten Ableitungsregel soll anscheinend der Exponent n-1 wirklich ausgerechnet werden und nicht mit (make-sub n 1), wie ich es erst hatte....

Vielleicht soll man das an dieser Stelle deshalb so machen, weil der Exponent eine Zahl (number) ist und keine aexp.

Antworten

Zurück zu „Archiv“