Freeware ähnlich Matlab

Neue Frage »

superconductor Auf diesen Beitrag antworten »
Freeware ähnlich Matlab
Das Thema sollte eigentlich selbsterklärend sein, trotzdem:
Ich suche ein Freeware Programm, dass am besten gleich Matlab ist. Ich bräuchte es vorallem um Matrizen-Rechnungen zu tätigen (um viele Zahlen zu jonglieren).

Im Netz dazu gefunden habe ich bis jetzt:
1. SciLab, das auch etwas ähnliches wie Simulink enthält (SciCos), www.scilab.org
2. Octave, www.octave.org


Kennt jemand noch weiter Programme bzw. hat jemand schon mit den oben genannten Programmen gearbeitet (wie Matlab - Syntax?, können m-Files von Matlab genutzt werden).
tigerbine Auf diesen Beitrag antworten »
RE: Freeware ähnlich Matlab
octave war mit meinen matlab files kompatible. Allerdings konnte weder matlab noch octave ein Matrizenprogramm (große matrix) von mir in angemessener Zeit bearbeiten. 1 Durchlauf = 1Tag. Ich hatte dort 2 Sortierungen der Matrix implementiert.

Das "alte" FreePascal schaffte das "gleiche" (hier wurde Quicksort von Hand programmiert) unter 1min Laufzeit.
 
 
Tomtomtomtom Auf diesen Beitrag antworten »

Es mag schnelle und langsame Programmiersprachen geben, aber von einem solchen qualitativen Unterschied bei der Implementierung desselben Algorithmus habe ich noch nicht gehört. Da muß dann schon doch ein substantieller Unterschied vorliegen, der dir nicht aufgefallen ist. Ein beliebter Fehler bei soetwas ist beispielsweise, daß man in der einen Sprache mit reinen numerischen Werten rechnet, und in der anderen mit symbolischen Ausdrücken, die bei manchen Operationen viel schwieriger zu handhaben sind.
tigerbine Auf diesen Beitrag antworten »

Der einzige Unterschied der mir einfällt ist eben, dass ich in matlab via matlab befehl sortiert habe und in pascal selbst den befehl geschrieben habe. Erstaunt2

Es hatte mich halt geschockt, dass es mit matlab so langsam lief.

Kannst Du dem hier

Zitat:
Ein beliebter Fehler bei soetwas ist beispielsweise, daß man in der einen Sprache mit reinen numerischen Werten rechnet, und in der anderen mit symbolischen Ausdrücken, die bei manchen Operationen viel schwieriger zu handhaben sind.

mal ein konkretes Beispiel nennen.
Tomtomtomtom Auf diesen Beitrag antworten »

Naja ein ganz konkretes Beispiel nicht, aber bleiben wir mal bei Matrizen.

Angenommen unser Nutzer hat eine riesige Matrix A und einen riesigen Vektor b und will das GLS Ax=b lösen. Nehmen wir weiterhin an, er hat keine Ahnung von Numerik, und versucht die "naive" Methode, A zu invertieren und dann x durch zu berechnen.

Nun hat er beispielsweise ein Computeralgebrasystem und eine Programmiersprache. In beiden gibt es einen Befehl "invert()", von dem er weiß, dass er für eine Matrix die man übergibt nach demselben numerischen Verfahren die inverse Matrix ausspuckt. In der Programmiersprache stammt dieser beispielsweise aus einer frei zugänglichen numerischen Funktionsbibliothek irgnedwo aus dem Internet, in dem CAS ist er fest im Kern implementiert, dazu ist so ein System schließlich da. Der grundlegende Algorithmus ist derselbe, die Implementierung ist von kleinen Programmierkniffen abgesehen vergleichbar, so daß sich daraus keine wesentlichen Laufzeitunterschiede ergeben.

Bei ersten Tests ist die Programmiersprache nach wenigen Sekunden fertig, und das CAS rechnet und rechnet und rechnet, und damit wird augenscheinlich das alte Vorurteil gestärkt, daß CAS eher langsam sind und für numerische Rechnungen unbrauchbar.

Was der Nutzer übersehen hat: der Befehl "invert()" in seinem CAS ist überladen, je nachdem was man hineinschickt, macht er verschiedene Sachen. Die Matrix, mit der er sein Programm testet besteht nur aus natürlichen Zahlen, und somit versucht das CAS, diese nicht mit einem schnellen Algorithmus numerisch zu invertieren, sondern exakt, beispielsweise einfach mit dem Gaussverfahren. Dabei treten riesige Brüche auf, die Nenner bewegen sich in den letzten Schritten etwa in der Größenordnung des Produktes sämtlicher Einträge, und natürlich wird auch immer schön gekürzt, das heißt es läuft nebenbei noch zigmal der Euklidische Algorithmus ab usw. usf. Die exakte Invertierung ist halt einfach ungleich schwieriger und langsamer als die Numerik.


Natürlich kann man auch durch Implementierungstricks, eine andere Sprache und ähnliches Laufzeitvorteile erreichen, auch ziemlich große, aber bei verbreiteten Systemen, bei denen überall kluge Köpfe dahintersitzen, ist es erfahrungsgemäß wahrscheinlicher, daß bei solchen riesigen Unterschieden in der Größenordnung 10^3 der Nutzer irgendwo etwas substantielles übersehen hat.

Aber ich wollte den Thread hier nicht zu sehr ins Offtopic ziehen. Deshalb möchte ihc zumindest noch auf das "freie" System MAXIMA

http://maxima.sourceforge.net/

hinweisen.
tigerbine Auf diesen Beitrag antworten »

Da der fragende hier auf matlab angespielt hat, habe ich mal vermutet, dass er dann auch integrierte Befehle nutzen will.

Ich hatte mir damals meine Programmausgabe unterteilt, so dass klar ist, dass die große Laufzeit für den Befehl

code:
1:
sortrows


benötigt wurde. Wie matlab das nun im Hintergrund umsetzt weiß ich nicht. In Pascal musste ich notgedrungen die Sortierung selbst schreiben. Ich hatte auch nachgefragt, woher die großen Unterschiede kommen, es konnte mir aber niemand explizit sagen.

Die Matrix hatte 3 Spalten und n² Zeilen.
superconductor Auf diesen Beitrag antworten »
lösungsgeschwindigkeit
Na, wenn ich einen schnelleren Algorithmus für ein Problem kenne, werde ich nicht unnötig den Rechner belasten. Dennoch sind natürlich integrierte Befehle verführerisch. Wie auch immer meine Matrix wird nicht so gross sein, ich möchte einfach viele Beispiele dazu Durchrechnen um Daten zu sammeln.
Leider habe ich jedoch für meine Problemstellung noch keinen Ansatz gefunden der mich zum Ziel bringt.
AD Auf diesen Beitrag antworten »

Zitat:
Original von tigerbine
Kannst Du dem hier

Zitat:
Ein beliebter Fehler bei soetwas ist beispielsweise, daß man in der einen Sprache mit reinen numerischen Werten rechnet, und in der anderen mit symbolischen Ausdrücken, die bei manchen Operationen viel schwieriger zu handhaben sind.

mal ein konkretes Beispiel nennen.

Ich nenne mal ein kleines Beispiel, wo zwar noch nicht eigentlich symbolisch gerechnet wird, aber trotzdem das Problem des "genauen" Rechnens verdeutlicht:

Rechne mal die Partialsumme der harmonischen Reihe einmal numerisch (mit FreePascal, C oder sonstwas) aus - und dann wieder mit einem CAS-Sytem, z.B. MuPAD:

_plus(1/k $ k=1..1000000)

Ersteres sollte in einem Sekundenbruchteil erledigt sein, letzteres dürfte einige Minuten dauern - dafür liefern die CAS dann aber auch das genaue Ergebnis, also einen "Monsterbruch", der die Bildschirmausgabe sprengt. Augenzwinkern

Mit

_plus(float(1/k) $ k=1..1000000)

kann man dann auch MuPAD auf Trab bringen, natürlich auf Kosten der Genauigkeit.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »