• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

OCaml

d00mfreak

Hobby-Spieler/in
Registriert
09.03.2005
Beiträge
882
Reaktionspunkte
9
Hi Leute

Hoffe, dass sich hier jemand findet, der mir helfen kann.
Unser Uniprofessor ist der Meinung, dass wir unbedingt eine der schrecklichsten Programmiersprachen die ich bisher erlebt habe, können müssen: OCaml.

Tjo, nun sitze ich hier, soll ein Programm schreiben, dass differenzieren, diese Ergebnis auch vereinfachen, sowie auch Ableitungen höheren Grades berechnen kann. Bei letzterem hänge ich atm, da ich es nich schaffe, so eine schei**** for-Schleife zum Laufen zu bekommen.

Das komplette Prgramm sieht so aus:
type fun_expr = Const of int
| Var of char * int
| Add of fun_expr * fun_expr
| Sub of fun_expr * fun_expr
| Mul of fun_expr * fun_expr
| Div of fun_expr * fun_expr
| Sin of fun_expr
| Cos of fun_expr
| Exp of fun_expr;;

let rec d f dx = match f with
Const _ -> Const(0)
| Var(x,e) -> if x=dx then Mul( Const(e), Var(x, e-1)) else Const(0)
| Add(f,g) -> Add( (d f dx), (d g dx) )
| Sub(f,g) -> Sub( (d f dx), (d g dx) )
| Mul(f, g) -> Add( Mul( (d f dx), g ), Mul( f, (d g dx) ) )
| Div(f, g) -> Div(
Sub(
Mul((d f dx), g),
Mul(f, (d g dx))
),
Mul(g,g)
)
|Sin(f) -> Mul( Cos(f), d f dx)
|Cos(f) -> Mul( Mul( Sin(f), Const(-1)), d f dx)
|Exp(f) -> Exp(f);;

let rec v f = match f with
| Add(g, Const(0)) -> v g
| Add(Const(0), g) -> v g
| Add(f, g) -> Add(v f, v g)
| Sub(f, g) -> Sub(v f, v g)
| Mul(f, g) -> Mul(v f, v g)
| Div(f, g) -> Div(v g, v g)
| _ -> f;;

Zum Verständniss: v = vereinfachen
d = differenzieren

f stellt dabei die zu differenzierende Funktion dar

Diese möchte ich um eine Funktion erweitern, dass es das mehrfache Ableiten einer Funktion beherrscht. Das hatte ich mir in etwa so vorgestellt:
let diff f j= let t = f in
for i = 0 to j do
let t = v(d(t))
done;
t;;

diff = differenzieren bis zur j-ten Ableitung


Nur leider quittiert es der Compiler immer mit einem Syntax Error, obwohl die Formulierung bis auf die Variablennamen und der Rechenanweisung der der offiziellen OCaml-Doku entspricht.

Mfg und OCaml sucks!

DooM
 
Zurück