mathe algorithmen
-
numerische Verfahren...
also Gauß, Simplexverfahren etc...
-
Matlab (bzw. den freien Clone GNU Octave) eignet sich ganz gut, wenn es dir darauf ankommt, möglichst schnell etwas funktionierendes zu haben, um das Verfahren z.B. auszuprobieren. Falls du die ganze Numerik schon geklärt hast und es auf hohe Performanz ankommt, C oder Fortran.
Python (mit NumPy) soll auch geeignet sein, allerdings habe ich damit keine Erfahrungen.
-
Bashar schrieb:
Falls du die ganze Numerik schon geklärt hast und es auf hohe Performanz ankommt, C oder Fortran.
Falls du die ganze Numerik schon geklärt hast und es auf hohe Performanz ankommt, C++ oder Fortran.
-
Dafür hättest du mich nicht nachäffen müssen.
-
Bashar schrieb:
Dafür hättest du mich nicht nachäffen müssen.
Doch.
"Ein Fortran-Programm kann leichter optimiert werden als beispielsweise ein C-Programm, da Fortran restriktiver ist."
http://de.wikipedia.org/wiki/Fortran
-
Und C bringt mittlerweile Optimierungsmöglichkeiten die C++ nicht bietet.
-
volkard schrieb:
"Ein Fortran-Programm kann leichter optimiert werden als beispielsweise ein C-Programm, da Fortran restriktiver ist."
Das halte ich als ehemaliger FORTRAN-Programmierer schlicht für ein Gerücht. FORTRAN auf PCs erforderte für viele Dinge die Einbindung von ASSEMBLER, was schon mal sehr mühsam war. Bei den zu programmierenden Algorithmen sehe ich die Optimierung oft mehr in der Intelligenz des eingesetzten Compilers.
-
Tim schrieb:
Und C bringt mittlerweile Optimierungsmöglichkeiten die C++ nicht bietet.
Spielst Du auf restrict pointers in C99 an?
#ifdef __GNUC__ #define RESTRICT __restrict__ #else #define RESTRICT #endif void dings(double * RESTRICT p, double * RESTRICT q) { ... }
Gut, das ist eine Compilererweiterung des g++. Aber portabel bleibt's immerhin mit den Makros. Ob das jetzt der Bringer ist, weiß ich nicht. Zumindest hat keiner ein restrict-Proposal für den nächsten C++ Standard eingereicht. Und nur wegen einem offiziellen restrict-Support würd ich jedenfalls nicht nach C99 wechseln.
-
krümelkacker schrieb:
Tim schrieb:
Und C bringt mittlerweile Optimierungsmöglichkeiten die C++ nicht bietet.
Spielst Du auf restrict pointers in C99 an?
restrict und z.B.
void foo(int arr [static 10]); /* arr points to the first of at least 10 ints */ void foo(int arr [const 10]); /* arr is a const pointer */ void foo(int arr [static const i]); /* arr points to at least i ints; i is computed at run time. */ void foo(int arr [const static i]); /* alternate syntax to previous example */ void foo(int arr [const]); /* const pointer to int
(schamlos kopiert von http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage%2Fref%2Faryin.htm)
Eigentlich wollte ich nur ein Gegenpol zu volkards "Beitrag" sein.
edit: restrict wurde iirc schon vorgeschlagen aber abgelehnt da es ja gefährlich ist und damit offensichtlich für C++-Programmierer nicht geeignet ist
-
Wow. Wer hat sich denn so einen Schei** ausgedacht.
btw: ich kann davon auf der verlinkten Seite nix finden
-
Assembler ist total geil für sowas (z.B. mit http://www.flatassembler.net/). Mathestudies schreiben öfter noch ihren Arbeitskram in Fortran (siehe wiki)
Im Buch
http://www.amazon.com/Numerical-Recipes-3rd-Scientific-Computing/dp/0521880688/
wurde früher mit Fortran gecoded, jetzt mit C++. Auch andere Bücher gehen in diese Richtung, mathematische Algos in C, C++, Java gibts an jeder Straßenecke.
Aber Fortran wurde auch immer wieder weiterentwickelt und sieht wie ein richtiges Beast aus.Octave und Co haben neben der geforderten Genauigkeit auch was mit Grafikausgabe dabei. Wenn du was mit Parallelisierung machen willst, -> C und Cuda
(Oder C/Fortran und SPE-Asm oder OpenCL)Das Handyprogramm Jasymca von Helmut Dersch orientiert seine Syntax an Gnu-Maxima.
Genauigkeit gibts z.B. auch hier: http://www.xsc.de/
Neuere Ideen und ein gutes Rundumpacket bietet Haskell ( http://www.haskell.org/haskellwiki/Introduction ).
Letzlich ist auch Basic super, aber das will wohl keiner hören, geschweige denn Lesen.
Wenn du die Mathematik drauf hast, dann kannst du mit Assembler am meisten machen, und musst gleichzeitig dafür am wenigsten wissen. Nur gelegentlich nachdenken. Wenn du die Mathematik nicht so drauf hast, dann lernst du mit Assembler mehr. Die Assemblercompiler wurden wie Fortran weiterentwickelt, aber leider gibt es nicht mehr so tolle Infos und Parallelisierung ist auch schwierig.
Mit Seitenblick auf Cuda und und OpenGl empfiehlt sich aber auch C + Asm, etwa wie hier:
http://www.c-plusplus.net/forum/277755?sid=c48c034858985a9eec56208568d48416
bzw. Cuda
http://developer.download.nvidia.com/compute/cuda/3_2_prod/toolkit/docs/CUDA_C_Programming_Guide.pdf
bzw. OpenCL
http://de.wikipedia.org/wiki/OpenGLSpricht einiges für C, man bedenke aber auch:
http://www.frauen-informatik-geschichte.de/index.php?id=113
und man bedenke auch, dass in einem cpp forum die frage, welche Sprache soll ich nehmen, immer ein bißchen komisch rüberkommt.