Das Programm wurde zuerst auf AMIGA 500 (!) 1MB 8MHz (kein HD) geschrieben und getestet. Ich habe nur Standard IN/OUT Funktionen aus C++ Bibliothek benutzt (Version 1.0). Das Programm war damit nicht komfortabel aber das Quellcode kann auf jedes System, was C++ hat, portiert werden. (Was auf Amiga läuft, läuft überall) .Diese erste Version kann ich mit Quellcode jeden zur Verfügung stellen. Ich habe verzichtet, das Programm auf Amiga weiter zu entwickeln und habe weiter unter Windows gearbeitet. Leider kann ich hier nicht von einen Vorschritt sagen, oft ist das das Gegenteil. Ich habe sehr mühsam eine Oberfläche gebastelt und das Programm ist rasch um 20-fache am Größe gewachsen. So ist die Matrix 2.0 (für Win 3.1) entstanden. Es ist ein Public Domain Programm. Grundcharakteristika: (Negativ + Positiv)
Naher habe ich mit Windows 95 gearbeitet (sich gequält). 80% der Anstrengung ging in die GUI Entwicklung.
Matrix 3.0 Die Neuheiten:
Die beide Versionen sind kostenlos auf meiner Homepage runterzuladen
Ende 1997 habe ich Linux entdeckt. Der Anfang war schwierig aber inzwischen bin ich davon total begeistert. Die Entwicklung unter Win95 habe ich aufgeben und beschränke mich nur noch auf Bugsentfernen. Ich müßte noch ein ganzes Sätzungprogramm dazu schreiben und unter Linux habe ich doch Latex. Ich habe auch keine Lust noch weitere Windows95 feel& look (schnick & schnack) zu interpretieren. Zumindest, weil es nie auf Anhieb funktioniert und man sich unheimlich ärgern muß.
Ende 1998 habe ich entlich Zeit gefunden die graphische Benutzeroberflächer für den Programm auf XWindows Systeme zu schreiben. Statt weiter in C++ zu programmieren beschloß ich die GUI in Tk/Tcl zu schreiben und die ganze Mathe als eine Tcl Biblothek zu kappseln. Die Resultate waren sehr gut, die Entwicklung mit tk was sehr schnell und angenehm. Dagegen sind Visual C++ oder Visual Basic reine Quellerei und sollten durch UNO oder sonst was verboten werden.
Ein paar statistische Daten. Die ich bei der Entwicklung gesammelt habe Zeit in Stunden, LOC = Line of Code
tcl Biblothek (927 LOC)- Design 3 ,Kodierung 11.5, Tests 9
Tk Oberfläche (2550 LOC) - Design 2 ,Kodierung 41, Tests 7
Dokumentation- 10
Gesamtaufwand (nur tk Version) , ohne Reserch, Internetsurfen und Support 70.5 Stunden
Die Entwicklung könnte sich in verschiedene Richtungen bewegen
Ich suche Hilfe: In dieser früheren Phase sind Bugsreports
besonders wichtig.
Ich werde mich freuen, wenn irgendjemand ein Fehler entdeckt.
Wenn irgendjemand sich über Rechtschreib- und Gramatikfehler
aufregt, kann er die korrigierte sgml Dokumentation Quelle an
mich zurückschicken
.
Ich möchte das Programm vorallen auch inhaltlich (mathematisch)
erweitern, leider sind meine Kenntnisse, was lineare Algebra
angeht, hier zu Ende.
Vorschläge zu dieser Erweiterung (Algorithmen) sind willkommen.
Ab Version 0.4 benutzt tkmatrix für Bruchrechnungen die Biblithek gmp (GNU multiple precision arithmetic library). Die Länge der Zahlen ist nur mit dem Speicherplatz des Komputers begrentzt. Man kann aber den Programm mit dem allten Modul kompilieren (siehe Datei rational.h) Dabei gilt Für jedes Bruch werden 3 long integer benutzt (für Ganzzahl, Nenner und Zähler). Die Zahlen Überläufe werden erkannt.
Ich habe das auf allen Aufgaben, die ich bekommen könnte getestet. Es funktionierte wie erhofft. Das heißt es aber nicht, daß das Programm alle möglichen Aufgaben gut lösen kann. Das kann kein Programmierer garantieren. (Verifikation des Codes ist nur theoretisch möglich und darum kann es keine völlig korrekte Programme geben) Deswegen kann es vorkommen, daß sinnlose Ergebnisse ausgegeben werden . Der Komputerabsturz kann wegen Endlosschleifen auch passieren. (Nicht gleich den Programmierer verfluchen) Die Algorithmen können auch (wo passiert das nicht) beim ungewöhnlichen Input Matrizen nicht richtige Ergebnisse liefern oder sogar nicht terminieren.(Aufpassen beim Eckenfindung)
I Ich nehme keine Verantwortung für Schaden, die das Programm anrichten könnte.
Funktionierte etwas bei deiner Maschine nicht. Laß mich davon wissen. Eine genaue Beschreibung von Fehlfunktionen und frühere Eingaben (Inputs) werden die Fehlersuche erleichtern und sogar erst möglich gemacht.
Der Kern des Programms wurde von über 2 Jahren geschrieben und nur für eigene Benutzung bedacht. Irgendwann habe ich die Mathe I Klausur bestanden aber das Programm entwickelte ich weiter. Inzwischen hat der Code ein paar Compiler und 3 Systeme (Amiga, Win95, Linux) beschäftigt.
Daraus ergeben sich zwei Sachen. Erstmals der Code ist manchmal erstaunlich ungleich in Programmiertechnikniveau (von Unbeholfen zum Überreif, mit ein paar Tricks um miese Compiler auszutricksen). Zweitens es hat sich bewahrt.
Es ist alles in C++ geschrieben. Ich habe versucht nur in gutem
Still und zukunftbezogen zu Programmieren.
Das Klassendesign habe ich schon 2 mal mit großen Aufwand
geändert.
Zu diesem Zeit benutzt es nur gute Object Orientiete
Techniken
;),da wo es nötig ist.
Alles ist schön in Klassen geordnet mit Is-A und Has-A
(templates) Beziehungen.
Ich benutzte Standart Template Library und habe das Code mit
Hilfe von Templates klein und verständlich gehalten.
Fehlerbehandlung wird mit Hilfe von Fehlerklassen erledigt
das Code ist geteilt auf Dateien
matrix_p.cc
Steuerungs Modul; Lesen von Parameter und
Interaktivitätrational.h
Bruchzahlen und ein C++ Interface zu der Biblothek gmpmatrix3.h
Kern der Algorithmen in Klase Template
matrix< ... > (darum in .h)polynom.h
Eine Polynomklasse zu Berechnnung des
charakteristischen Polynoms
matrix< ... > (darum in .h)matrix3.cc
Klassen für Bruchberechnung und Überlauf
Abfangprotstream.cc protstream.h
Klasse protstream Container
für Protokollelemente und dessen ausgabe protformat.cc protformat.h
Klasse protformat für
Formatierungsdateien Behandlung protformat.h enthält in Komentar
die Beschreibung aller Ellemente der *.fmat Dateienmatrixtcl.cc matrixtcl-object.cc matrixtcl.h
- tcl Biblothek (Schnittstelle)*.tcl
- Tk SctipteMeine Version von gcc hatte ein paar Probleme mit solchen nicht trivialen Sachen wie Templates und Fehlerklassen (keine parametrisierte Templates) und keine Fehlerklassen mit dynamischen Komponenten waren möglich.
Das Programm ist unter GNU Lizenz geschrieben. Du kannst es für nicht kommerzielle Zwecke benutzen, verändern, aber du kannst kein Pfennie damit verdienen. (Programmierer leben nur von der Behebung der Schäden, die durch ihre Programme entstanden sind)
Werden Sie zum Mitentwickler: Wenn Sie etwas unlogisch, schwer Begreiflich, oder einfach etwas für verbesserungsbedürtig, im Programm halten, lassen Sie mich davon wissen.
Das Programm darf nicht verkauft und auch anders kommerziell verbreitet werden.
Ich nehme keine Verantwortung für die Schaden, die das Programm verursachenkönnte.
Tkmatrix is kein back-end zu Programm matrix im engen Sinne. Ich
habe eine Tcl Biblothek geschaffen, die von Tk/Tcl geladen wird.
Tcl/Tk wird so neue Funktion matrixtcl
bekommen
Benutzung von matizen von tcl wird objektorientiert entworfen.
matrixtcl
wird zu einen Behälter (Konteiner) für matrix
Objekte.
Man kann entweder Operationnen auf dem Konteiner selbst oder auf
die Matrix-Objekte vornehmen.
Operationen auf dem Behälter
matrixtcl create m n [-float|-widefloat|-rational]
Konstuktor für
eine m x n Matrix. Es wird ein Handle zurückgegeben.matrixtcl load file
Konstuktor für eine Matrix. Sie
wird aus der Datei gelesen. Es wird ein Handle zurückgegeben.matrixtcl info
Gibt eine Liste mit Händler von allen
Matrixzen in den Konteiner.matrixtcl destroy HANDLER
Löscht die Matrix mit dem
Händler HANDLER aus dem Konteiner.matrixtcl configure
Optionnen -noprot -dir -onlyfraction -widefloat_prec
benutztung wie tk configure bei Widgetsmatrixtcl HANDLER operation mul|add|sub HANDLER2
matrixtcl HANDLER algorithmus gauss jordan loesung kern
bild inverse determinante pivotiere naehrung eckenfindung simplex
transponiere chpolynom matrixspiel
für pivotiere noch zeile und spalte.matrixtcl HANDLER elemunf (swap col|row index1 index2) | (factormul col|row index factor) | (factoradd col|row index1 index2 factor) | (pivot col|row indexy indexx) (changestep indexy indexx)
elementare Unformungen. Die Ausgagmatrix wird verändert und Protokoll darüber vervollständigt.matrixtcl HANDLER resize m n vonoben vonliks
vonoben
und vonlinks sind Booltypematrixtcl HANDLER duplicate
Es wird ein Handle
zurückgegeben.matrixtcl HANDLER tofloat [-widefloat]
Konventieren zu Fließkommamatrix. Es wird ein Handle zurückgegeben. matrixtcl HANDLER copy y1 x1 y2 x2
Schneidet aus der
Matrix ein Rechteck . Es wird ein Handle zurückgegeben.matrixtcl HANDLER info size|type|issolution|isprotocol
matrixtcl HANDLER save filename
matrixtcl HANDLER getform latex|ascii|tcl [-protocol|-solution]
matrixtcl HANDLER setelem m n elem
Brüche werden als
eine Liste eingegeben eineinhalb als {1 1 2}. Der Element wird
auch gekürzt und zurückgegebenmatrixtcl HANDLER getelem m n
matrixtcl HANDLER deleteprot
Leer Protokollmatrixtcl HANDLER setsolution matrixlist
Setzt das
Ergebnismatrixmatrixtcl HANDLER addprot (type objectlist)|editmatrix
Ergänzt das
Protokoll um eine Formatierte Matrix oder um String.
Type ist ein Element der Liste: matrix, gleichung, simplex,
loesung , determinante, polynom, string. Alle außer ''string''
sind Matrizenlist. Im einer Matrizenliste. ist jede Zeile eine
Liste. Jedes Bruch auch.
{ {2 3 {1 2}} {3 {1 2} 3} {{2 3 4} 3 34} }
Diese Dokumentation wurde mit sgml-tools ertellt. Man kann sie in
verschiedene Formate transferieren. Am besten sieht es aber als
Latex Datei. Übersetzt mit
Kommando sgml2latex -a -g -p matrix.sgml
zu Post Script. So
sind alle mathematische Zeichen ersichtlicht. Für Html
Transformation mußte ich die Datei
/usr/lib/sgml-tools/rep/html/mapping und general
verändern. Sonst würde man überhaupt keine mathematische Zeichen
sehen oder sie sich zudenken können.
Der mathematische Teil habe ich im Latex übergearbeitet und als
mathe1.pdf
und mathe1.ps
zu verfügung gestellt.
Zur Zeit studiere ich Wirtschaftsinformatik an der UGH Essen. Das Programm habe ich noch im 1. Semester des Studium angefangen. Primär um c++ zu lernen. Nacher habe ich immer neue techniken im Programm benutzt, so daß es jetzt ziemlich komplieziert und voll von akademieschen Spinnereien ist.
Einen Wirtschaftsinformatiker unterscheidet man von einem Informatiker, danach daß Informatiker immer Computer einsetzten, Wirtschaftsinformatiker nur sinnvoll.
Artur Trzewik
mail@xdobry.de
Homepage
www.xdobry/tkmatrix