Project Description
Simple C#/F# library for Symbolic Differentiation and whatever else comes to mind ;)
This project is about building a library of useful code and at the same time have fun with the latest C# 3.0 / F# CTP features :)
And now also to explore the interoperability between C# and F# :))
At the moment we have a simple implementation of the following:
C# and F#:
- Tokenizer
- Combinator Parsers inspired by Brian's brillian Inside F# blog
- AST
- Symbolic Differentiation Visitor
- Simplifier Visitor
- Functions support
- Conditional expression support (new)
F# only:
- Aggregation of sequences based on Expressions ;)
- Parallel computation of expressions based on depth of AST (Example: Expression like: (A+B) * (D+E) uses 2 cores and ( (A +B) * (D+E) ) + ( (A +B) * (D+E) ) uses 4 cores :))))
- ToString Visitor
Requirements:
- Any code contributed to this project be fully TDDed.
- No code generation code is allowed.
What's next:
- Expand the functionality of each component to cover as many cases as possible and improve the quality of the code and testing along the way.
Recommended Readings
Structure and Interpretation of Computer Programs
Expert F#
References:
http://fsharpcode.blogspot.com
http://en.wikipedia.org/wiki/Differentiation_rules
http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!133.entry?_c=BlogPart
http://blogs.msdn.com/lukeh/archive/2007/08/19/monadic-parser-combinators-using-c-3-0.aspx
http://www.cs.nott.ac.uk/~gmh/pearl.pdf
http://leibnizdream.wordpress.com/2007/12/22/first-class-functions2-multiprogramming/
Parallel versus Sequential Computation Performance:
Expression: (((A + B) * (A + B)) * ((A + B) * (A + B))) + (((A + B) * (A + B)) * ((A + B) * (A + B)))
Data Size: A: 1..1000000 B: 1..1000000
Intel Xeon CPU X5450 QUAD-CORE @ 3.00Ghz X2 (8 cores) 3.25 GB of Ram
Sequential elapsed: 00:06:28.4842822
Parallel elapsed: 00:01:48.6659580
Operations were made more intensive using the following code:
(+) : for (int i = 0; i < 10000; i++) { z = x + y; }
(*) : for (int i = 0; i < 10000; i++) { z = x * y; }
Performance comparison between C# and F# Tokenizer:
(Size of the test data: 100.000 Letters separated by spaces)
C#: 00:09:39.7925956 (hh:mm:ss)
F#: 00:09:42.6639161 (hh:mm:ss)
Enjoy ;)
Edmondo Pentangelo
-
Notifications
You must be signed in to change notification settings - Fork 0
holoed/SymbolicDifferentiation
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
About
Simple C#/F# library for Symbolic Differentiation and whatever else comes to mind ;)
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published