VectorLibIndex:OptiVec HomeMatrixLib CMATH Download Bestellung / Registrierung Update Support |
VectorLib4. VectorLib-Funktionen: Ein kurzer Überblick
4.1 Erzeugung, Initialisierung und Freigabe von VektorenVectorLib erlaubt die gleichzeitige Verwendung von statisch (wie z.B. "float a[100];" ) und dynamisch mit Speicherplatz versehenen Vektoren (siehe Kap. 2.3). Wir empfehlen allerdings die Verwendung der flexibleren in VectorLib definierten Vektoren mit dynamischer Speicherzuweisung. Die hierzu verwendeten Funktionen werden in der folgenden Tabelle zusammengefaßt.
Man sollte stets darauf achten, Vektoren freizugeben, wenn sie nicht länger benötigt werden. Intern werden alle Vektoren in eine Tabelle eingetragen, die über den zugewiesenen Speicher Buch führt. Der Versuch, einen nicht (mehr) existierenden Vektor freizugeben, führt zu einer Warnung, nach der der Programmablauf fortgesetzt wird, ohne etwas freizugeben. Daß den bereits in C und C++ reichlich vorhandenen Operatoren und Funktionen für diese Zwecke (malloc, calloc, free, new, LocalAlloc, GlobalAlloc usw.) hier noch mehr hinzugefügt werden, hat seinen Grund darin, daß für jedes Speichermodell und jede Umgebung automatisch die optimale Methode gewählt werden soll. Die Implementation von VF_vector usw. paßt sich also der jeweiligen Umgebung an, was der Portabilität der Programme zugute kommt. Performance-Tips:
Zur Initialisierung ganzer Vektoren (nach der Zuweisung von Speicherplatz!) mit bestimmten Werten stehen die folgenden Funktionen zur Verfügung:
Die folgenden Funktionen dienen dem Zugriff auf einzelne Vektor-Elemente:
Die folgenden Funktionen generieren Fenster zur Verwendung in der Spektrenanalyse (siehe VF_spectrum):
Komplexe Vektoren können mittels der folgenden Funktionen initialisiert werden:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.2 Index-orientierte Manipulationen
Operationen, die nur auf eine Untermenge von Elementen (z.B. auf jedes vierte, zehnte o.ä.) angewandt werden sollen, werden durch die Funktionsfamilie VF_subvector_... zur Verfügung gestellt, wobei die drei Punkte für ein Suffix stehen, daß die jeweilige Operation bezeichnet:
Dem Durchsuchen von Tabellen nach bestimmten Werten dienen:
An Interpolations-Routinen stellt OptiVec zur Verfügung:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.3 Datentyp-UmwandlungenDas erste, was über die nun folgenden Umwandlungsroutinen zu sagen wäre, ist, daß man sie möglichst selten anwenden sollte. Man überlege vorher, welche Genauigkeit und welchen Zahlenbereich man benötigt, und bleibe dann innerhalb dieser Genauigkeit. Da es aber doch immer wieder Gelegenheiten gibt, wo eine Umwandlung sich nicht umgehen läßt, ist für jeden Zweck die passende VectorLib-Funktion gegeben. Die folgende Tabelle faßt einige Beispiele zusammen. Die übrigen Funktionen dürfte sich von selbst ergeben:
Die Umwandlung von Fließkomma- in ganze Zahlen wird durch die folgenden Funktionen bewerkstelligt, die sich in der Behandlung des Rundungsrestes unterscheiden:
Diese Operationen werden als mathematische Funktionen behandelt und in Kap. 4.6.1 beschrieben. Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.4 Nähere Informationen zur Ganzzahl-ArithmetikIm Zusammenhang mit der Arithmetik ganzer Zahlen (engl.: Integers) sollte man sich klar machen, daß alle Integer-Operationen implizit modulo 2n durchgeführt werden, wobei n die den jeweiligen Datentyp darstellende Anzahl von Bits ist. Jedes Ergebnis, das außerhalb des mit dem jeweiligen Typ darstellbaren Zahlenbereiches liegen würde, wird durch Verlust des oder der höchsten Bits auf den darstellbaren Bereich abgebildet. Im Ergebnis sieht das so aus, als wäre das Ergebnis durch Addition oder Subtraktion von soviel mal 2n wie nötig erhalten worden.So wird man im Datentyp short / SmallInt als Ergebnis der Multiplikation 5 * 20000 die vielleicht unerwartete Zahl -31072 erhalten. Das "korrekte" Resultat, 100000, übersteigt den darstellbaren Bereich von short/SmallInt-Zahlen, -32768 <= x <= +32767. short / SmallInt sind 16-bit-Zahlen, also ist n = 16 und 2n = 65536. Man kann sich das Zustandekommen des erhaltenen Resultates also so vorstellen, als ob der Prozessor 2 * 65536 = 131072 von 100000 abgezogen hätte, was -31072 ergibt. Überlaufende Zwischenergebnisse werden nicht durch nachfolgende Operationen "geheilt". Das Ergebnis der Berechnung von (5 * 20000) / 4 ist nicht – wie man vielleicht hoffen könnte – +25000, sondern -7768. Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.5 Grundfunktionen komplexer VektorenFür die Behandlung cartesisch-komplexer Vektoren existieren die folgenden Grundfunktionen:
Die entsprechenden Funktionen für Polarkoordinaten sind:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.6 Mathematische FunktionenIn Ermangelung einer besser begründeten Definition werden hier als "mathematisch" alle diejenigen Funktionen verstanden, bei denen jedes einzelne Element eines Vektors aus genau einem korrespondierenden Element eines anderen Vektors berechnet wird mit Hilfe einer mehr oder weniger einfachen Formel: Yi = f( Xi ) (im Unterschied also zu Funktionen wie der Fourier-Transformation, wo jedes Element des Ergebnis-Vektors von prinzipiell jedem Element des Eingabe-Vektors abhängt).Mit Ausnahme der einfachen arithmetischen Funktionen (Addition, Subtraktion etc.), existieren die mathematischen Funktionen nur für die Fließkomma-Datentypen. Die meisten mathematischen Funktionen von VectorLib sind als vektorisierte Versionen der entsprechenden Funktionen von ANSI-C oder Pascal zu verstehen oder von diesen abgeleitet. In C/C++ werden Fehler grundsätzlich über die vom Compiler zur Verfügung gestellten (oder vom Anwender selbst geschriebenen) Funktionen _matherr und (bei Borland C++) _matherrl behandelt. In Pascal/Delphi bietet OptiVec dem Anwender die Möglichkeit, das Verhalten im Fehlerfall über die Funktion V_setFPErrorHandling festzulegen.
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.6.1 RundungWie schon im Zusammenhang mit den Datentyp-Umwandlungsroutinen erwähnt, ist die Umwandlung von Fließkomma- in Ganzzahl-Typen nicht von vornherein eindeutig möglich. Man hat vielmehr die Behandlung der Stellen nach dem Komma näher zu spezifizieren. Das Resultat der Rundung wiederum kann entweder in dem ursprünglichen Fließkomma-Format belassen oder in einen der Ganzzahl-Typen umgewandelt werden. Die folgenden Funktionen belassen das Resultat als Fließkomma-Zahl:
Die folgenden Funktionen wandeln das Ergebnis in Ganzzahlen um (die Tabelle nennt die Funktionen für Umwandlung in den Typ int / Integer):
Selbstverständlich kann der Ziel-Datentyp auch jeder andere Ganzzahl-Typ sein. Einige wenige Beispiele sollten genügen:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.6.2 VergleicheDie Namen aller Vergleichs-Funktionen werden aufgebaut, indem dem Datentyp-Präfix die Buchstaben quot;cmp" folgen und danach die nähere Angabe der durchzuführenden Vergleichsoperation. Jedes Element eines Vektors kann entweder mit 0 oder mit einem Sollwert C oder auch mit dem korrespondierenden Element eines anderen Vektors verglichen werden. Es gibt hierbei zwei Möglichkeiten. Die erste besteht in der Unterscheidung der Fälle "kleiner als", "gleich" und "größer als". Das Ergebnis des Vergleiches wird als Fließkomma-Zahlen -1.0 (für "kleiner als"), 0.0 (für "gleich") und +1.0 (für "größer als") angegeben. Beispiele sind die Funktionen
Die zweite Möglichkeit ist, daß –durch einen Unterstrich abgesetzt –die zu testende Bedingung angegeben wird. Diese kann Gleichheit, Ungleichheit, "größer als", "größer oder gleich", "kleiner als" oder "kleiner oder gleich" sein. Das Resultat ist TRUE oder FALSE und wird als 1.0 oder 0.0 gespeichert. Beispiele sind:
Alternativ können auch die Indizes derjenigen Elemente in einem Index-Array abgelegt werden, für die die Bedingung als TRUE gefunden wurde:
Während die eben beschriebenen einfachen Vergleichsfunktionen nur bezüglich einer einzigen Grenze testen, existieren einige Funktionen, die feststellen, ob Vektorelemente in einen bestimmten Bereich fallen:
Um zu testen, ob sich in einer Tabelle bestimmte Werte finden, können die folgenden Funktionen benutzt werden:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.6.3 Direkte Bit-ManipulationenFür die Ganzzahl-Datentypen steht eine Reihe von Bit-weisen Operationen zur Verfügung, die beispielsweise für schnelle Multiplikationen und Divisionen durch ganzzahlige Potenzen von 2 eingesetzt werden können:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.6.4 Arithmetische Grundfunktionen, AkkumulationVectorLib stellt die im folgenden aufgeführten Arithmetik-Funktionen in vektorisierter Form zur Verfügung, wobei hier nur die VF_-Version explizit genannt wird. Die VD_- und VE_- Versionen existieren natürlich ebenfalls und – wo immer dies sinnvoll ist – auch komplexe und Ganzzahl-Versionen.
Neben diesen Grundfunktionen sind auch häufig gebrauchte Kombinationen von Addition und Division sowie die Pythagoras-Formel aufgenommen:
Alle Funktionen in der rechten Kolumne der obigen beiden Abschnitte existieren zusätzlich noch in erweiterter Form. Diese wird durch durch das Präfix "VFx_" angegeben (das "x" stammt aus der englischen Bezeichnung "expanded"). Hier wird die jeweilige Funktion nicht für Xi selbst, sondern für (a * Xi + b) berechnet, z.B.
Für die vier Grundrechenarten existiert noch eine weitere Spezialform, bei der das Ergebnis mit einem konstanten Faktor multipliziert wird. Diese "skalierte" Version wird durch den zusätzlichen Buchstaben "s" im Präfix angegeben:
Unter den weiteren einfachen arithmetischen Operationen seien genannt:
Während allgemein alle OptiVec-Funktionen Ein- und Ausgabe-Vektoren desselben Datentyps verarbeiten, existieren die arithmetischen Funktionen auch für "gemischte" Operationen zwischen Fließkomma- und Ganzzahltypen, wobei das Ergenis stets in dem Fließkomma-Typ gespeichert wird, z.B.:
In ähnlicher Weise existieren Funktionen für die Akkumulation von Daten in entweder demselben oder in höher-genauen Datentypen. Diese Funktionen entsprechen der Operation Y += X. Beispiele sind:
Innerhalb der Fließkomma-Datentypen besteht zusätzlich die Möglichkeit, gleich zwei Vektoren auf einmal zu akkumulieren:
Ebenfalls nur innerhalb der Fließkomma-Datentypen existieren Funktionen zur Akkumulation von Quadraten und Produkten:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.6.5 Geometrische Vektor-ArithmetikIm geometrischen Sinne ist ein Vektor ein Zeiger auf einen Punkt im n-dimensionalen Raum, wobei die Elemente des Vektors die Koordinaten dieses Punktes angeben. VectorLib enthält einige Funktionen, die sich auf diese Interpretation von Vektoren beziehen:
Werden andererseits die Koordinaten mehrerer Punkte in einer Ebene entweder in zwei getrennten Vektoren X und Y oder in einem komplexen Vektor gespeichert, so existiert eine Funktion zur Rotation dieser Koordinaten:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.6.6 PotenzenDie folgenden Funktionen erheben Vektoren von Eingabedaten in bestimmte Potenzen. Während die "normalen" Versionen eine volle Fehlerbehandlung für optimale Sicherheit durchführen, können die schnellen "ungeschützten" Versionen in Situationen eingesetzt werden, wo man absolut sicher ist, daß alle Eingabe-Elemente gültige Ergebnisse liefern. Da die Abwesenheit von Fehlerprüfungen hier eine viel effizientere Vektorisierung erlaubt, sind diese Funktionen bis zu 1,8 mal so schnell wie die geschützten Versionen (dies gilt allerdings nur ab der Pentium-CPU, während auf älteren Computern praktisch kein Geschwindigkeitsvorteil erzielt wird). Man sei sich allerdings des Risikos bewußt: Ein eventueller Überlauf wird zum Absturz ohne Vorwarnung führen.
Während bei allen eben genannten Funktionen spezifizierte Potenzen beliebiger Zahlen erhalten werden, ist es bei der nun folgenden Gruppe von Funktionen umgekehrt:
Alle diese Funktionen existieren auch in der erweiterten "VFx_"-Form, wie z.B. VFx_square: Yi = (a * Xi + b)² Die erweiterte Form der ungeschützten Funktionen hat das Präfix VFux_. Die äquivalenten Funktionen für komplex-zahlige Vektoren sind ebenfalls vorhanden, sowohl für cartesische als auch in Polarkoordinaten. Zusätzlich werden zwei Spezialfälle behandelt:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home
4.6.7 Exponential- und Hyperbel-FunktionenEine ganze Gruppe von Funktionen läßt sich auf die Exponentialfunktion zurückführen, aus der sie durch verschiedene einfache Operationen gewonnen wird.
Die vektorisierten Formen der Hyperbel-Funktionen werden zur Verfügung gestellt durch:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.6.8 Logarithmen
Auch hier existieren die cartesisch-komplexen Versionen. Die polar-komplexen Versionen stellen aber insofern eine Besonderheit dar, als sie das Ergebnis stets in cartesischen Koordinaten zurückgeben:
Als Sonderform des Zehner-Logarithmus ist die Formel für die Optische Dichte, OD = log10( X0/X ) anzusehen. Aufgrund ihrer Bedeutung in der experimentellen naturwissenschaftlichen Arbeit ist sie hier in mehreren Varianten aufgenommen, von denen einige Beispiele in der folgenden Tabelle zusammengefaßt sind:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.6.9 Trigonometrische FunktionenEinige der trigonometrischen Funktionen existieren in zwei Varianten. Die erste Variante folgt den üblichen Regeln der Fehlerbehandlung mathematischer Funktionen. Die zweite Variante ist für Situationen, in denen man mit Sicherheit weiß, daß alle Eingabewerte in den Bereich -2p <= Xi <= +2p fallen. Diese "Funktionen mit reduziertem Eingabe-Bereich" arbeiten deutlich schneller als die Normalvariante. Sie werden allerdings ohne Vorwarnung abstürzen, falls sich doch ein Eingabewert außerhalb des genannten Bereiches befindet. Da alle übrigen trigonometrischen Funktionen selbst für Argumente innerhalb dieses Bereiches ohnehin eine Bereichsprüfung und Fehlerbehandlung durchführen müssen, existieren die Varianten mit reduziertem Eingabe-Bereich derzeit nur für den Sinus und den Cosinus.
Die Quadrate der trigonometrischen Funktionen werden gebildet durch:
Ein sehr effizienter Weg zur Berechnung trigonometrischer Funktionen für Argumente, die sich als gebrochenzahlige Vielfache von p (PI) darstellen lassen, wird durch die Funktionen mit dem Suffix "rpi" (für "rationale Vielfache von p") bereitgestellt. Hier ist r = p / q, wobei q konstant und p durch die Eingabevektor-Elemente gegeben ist:
Spezialisierte Versionen gebrauchen Tabellen, um häufig vorkommende Werte direkt zu lesen, anstatt sie berechnen zu müssen. Die werden durch die Suffixe "rpi2" (Vielfache von p dividiert durch eine ganzzahlige Potenz von 2) und "rpi3" (Vielfache von p dividiert durch ein ganzzahliges Vielfaches von 3) bezeichnet. Beispiele sind:
Zwei spezielle trigonometrische Funktionen sind:
Vektorisierte inverse trigonometrische Funktionen (die "Arcus"-Funktionen) stehen zur Verfügung als:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.7 AnalysisEs gibt eine ganze Reihe von Funktionen zur Bestimmung analytischer Eigenschaften von Datensätzen:
Die komplexen Äquivalente der zuletzt genannten Gruppe von Funktionen sind:
Summen, Produkte usw. werden durch die in chapter 4.9 als Statistik-Funktionen zusammengefaßten Routinen gebildet. Zur Berechnung des Schwerpunktes eines Vektors stehen zwei Funktionen zur Verfügung:
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home 4.8 Signalverarbeitung:
Die folgenden Funktionen dienen der Signalverarbeitung mittels Fourier-Transformation: |
VF_FFTtoC | Schnelle Fourier-Transformation (FFT) eines reellen Vektors; das Ergebnis ist ein cartesisch-komplexer Vektor |
VF_FFT | Vorwärts- und Rückwärts-FFT reeller Vektoren; das Ergebnis der Vorwärts-Transformation ist ein gepackt-komplexer Vektor derselben Speicher-Größe wie der Eingabevektor. |
VCF_FFT | Vorwärts- und Rückwärts-FFT komplexer Vektoren |
VF_convolve / VF_convolvewEdit | Faltung mit einer gegebenen Impulsantwortfunktion |
VF_deconvolve / VF_deconvolvewEdit | Entfaltung unter Annahme einer gegebenen Impulsantwortfunktion |
VF_filter | spektrale Filterung |
VF_spectrum | spektrale Analyse |
VF_xspectrum | Kreuz-Leistungsspektrum zweier Signale (komplexe Version) |
VF_xspectrumAbs | Kreuz-Leistungsspektrum zweier Signale (Absolutwert) |
VF_coherence | Kohärenzfunktion zweier Signale |
VF_autocorr | Autokorrelationsfunktion eines Datensatzes |
VF_xcorr | Kreuzkorrelationsfunktion zweier Datensätze |
VF_setRspEdit | Editierschwelle für den intermediär bei Faltungen und Entfaltungen berechneten Filter setzen (entscheidet über die Behandlung "verlorener" Frequenzen) |
VF_getRspEdit | derzeit eingestellte Editierschwelle lesen |
Obwohl sie keine Fourier-Transformation benutzen, sollen in diesem Zusammenhang die Funktionen VF_biquad für bi-quadratische Audio-Filterung sowie VF_smooth (engl. to smooth = glätten) als einer etwas groben Form der Frequenzfilterung genannt werden.
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home
VF_sum | Summe aller Elemente |
VI_fsum | Summe aller Elemente eines Ganzzahl-Vektors, die als Fließkommazahl in double- oder extended- Genauigkeit akkumuliert wird |
VF_prod | Produkt aller Elemente |
VF_ssq | Quadratsumme aller Elemente |
VF_sumabs | Summe der Absolutwerte aller Elemente |
VF_rms | Wurzel des mittleren Quadrats aller Elemente |
VF_runsum | laufende Summe |
VF_runprod | laufendes Produkt |
VF_sumdevC | Summe der Abweichungen von einem Sollwert, Summe( |Xi-C| ) |
VF_sumdevV | Summe der Abweichungen von einem anderen Vektor, Summe( |Xi-Yi| ) |
VF_sumdevVwSaturation | Summe der Abweichungen von einem anderen Vektor, Summe( |Xi-Yi| ) mit Begrenzung eventuellen Überlaufs auf HUGE_VAL |
VF_subV_sumabs | Differenz zweier Vektoren und Summe über die Absolutwerte der einzelnen Abweichungen |
VF_avdevC | mittlere Abweichung von einem Sollwert, 1/N * Summe( |Xi-C| ) |
VF_avdevV | mittlere Abweichung von einem anderen Vektor, 1/N * Summe( |Xi-Yi| ) |
VF_ssqdevC | Quadratsumme der Abweichungen von einem Sollwert, Summe( (Xi - C)² ) |
VF_ssqdevV | Quadratsumme der Abweichungen von einem anderen Vektor, Summe( (Xi - Yi)² ) |
VF_ssqdevVwSaturation | Quadratsumme der Abweichungen von einem anderen Vektor, Summe( (Xi - Yi)² ) mit Begrenzung eventuellen Überlaufs auf HUGE_VAL |
VF_subV_ssq | Differenz zweier Vektoren und Quadratsumme über die einzelnen Abweichungen |
VF_chi2 | Chi-Quadrat-Testwert |
VF_chi2wSaturation | Chi-Quadrat-Testwert mit Begrenzung eventuellen Überlaufs auf HUGE_VAL |
VF_subV_chi2 | Differenz zweier Vektoren und Chi-Quadrat-Testwert |
VF_chiabs | "robuster" Testwert ähnlich VF_chi2, aber auf absoluten statt auf quadratischen Abweichungen basierend |
VF_chiabswSaturation | wie VF_chiabs, aber mit Begrenzung eventuellen Überlaufs auf HUGE_VAL |
VF_subV_chiabs | Differenz zweier Vektoren und chiabs-Testwert |
VF_mean | gleichgewichtetes Mittel (Durchschnitt) aller Elemente |
VF_meanwW | gewichtetes Mittel |
VF_meanabs | gleichgewichtetes Mittel aller Absolutwerte |
VF_selected_mean | Mittel über diejenigen Vektorelemente, die in einen bestimmten Wertebereich fallen; hierdurch lassen sich Ausreißerpunkte von der Mittelwertbildung ausschließen |
VF_varianceC | Varianz einer Verteilung bezüglich eines Sollwertes |
VF_varianceCwW | desgl. mit Einzelpunkt-Wichtung |
VF_varianceV | Varianz einer Verteilung bezüglich einer zweiten |
VF_varianceVwW | desgl. mit Einzelpunkt-Wichtung |
VF_meanvar | Mittelwert und Varianz einer Verteilung |
VF_meanvarwW | desgl. mit Einzelpunkt-Wichtung |
VF_median | Median einer Verteilung |
VF_corrcoeff | linearer Korrelationskoeffizient zweier Verteilungen |
VF_distribution | diskrete eindimensionale Verteilungsfunktion einer eindimensionalen Verteilung |
VF_min_max_mean_stddev | gleichzeitige Berechnung von Minimum, Maximum, Mittelwert und Standardabweichung einer eindimensionalen Verteilung |
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home
Eine detaillierte Beschreibung der verschiedenen Konzepte zur Datenanpassung an die unterschiedlichen Klassen von Modellfunktionen wird in Kap. 13 von http://www.optivec.de/matfuncs/M gegeben. Daher genüge an dieser Stelle eine tabellarische Zusammenfassung der vorhandenen X-Y-Anpassungsroutinen:
VF_linregress | lineare Regression von X-Y-Daten mit gleicher Wichtung aller Datenpunkte |
VF_linregresswW | dasselbe mit ungleicher Wichtung |
VF_polyfit | Koeffizienten eines Polynoms an vorhandene X-Y-Daten anpassen |
VF_polyfitwW | dasselbe mit ungleicher Wichtung der Datenpunkte |
VF_linfit | Koeffizienten einer beliebigen, in ihren Parametern linearen Funktion an vorhandene X-Y-Daten anpassen |
VF_linfitwW | dasselbe mit ungleicher Wichtung der Datenpunkte |
VF_nonlinfit | Koeffizienten einer beliebigen, möglicherweise nicht-linearen Funktion an vorhandene X-Y-Daten anpassen |
VF_nonlinfitwW | dasselbe mit ungleicher Wichtung der Datenpunkte |
VF_multiLinfit | mehrere X-Y-Datensätze gleichzeitig an eine gemeinsame lineare Funktion anpassen |
VF_multiLinfitwW | dasselbe mit ungleicher Wichtung der Datenpunkte |
VF_multiNonlinfit | mehrere X-Y-Datensätze gleichzeitig an eine gemeinsame nicht-lineare Funktion anpassen |
VF_multiNonlinfitwW | dasselbe mit ungleicher Wichtung der Datenpunkte |
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home
VF_cprint | Ausdruck der Elemente eines Vektors auf dem Bildschirm (der "Konsole"; daher das "c" im Namen) im aktuellen Textfenster, wobei Höhe und Breite dieses Fensters automatisch detektiert und die Seiten umgebrochen werden (nur für DOS) |
VF_print | ähnlich VF_cprint; auch hier erfolgt die Ausgabe auf dem Bildschirm, aber ohne automatische Detektion der Bildschirmdaten. Die angenommene Standardbreite wird durch die symbolische Konstante V_consoleWindowWidth angegeben (definiert in <VecLib.h> bzw. in der Unit VecLib als 150). Ein Seitenumbruch findet nicht statt (d.h. alle Seiten laufen durch, bis die letzte schließlich stehenbleibt). (Nur Konsolen-Anwendungen) |
VF_fprint | Ausgabe eines Vektors in einen Stream |
VF_chexprint | ähnlich VF_cprint, aber Ausgabe im Hexadezimal-Format. |
VF_hexprint | ähnlich VF_print, aber Ausgabe im Hexadezimal-Format. |
VF_fhexprint | ähnlich VF_fprint, aber Ausgabe im Hexadezimal-Format. |
VF_write | Ablage von Daten im ASCII-Format auf Festplatte |
VF_read | liest einen Vektor aus einer ASCII-Datei ein |
VF_nwrite | schreibt n gleichartige Vektoren als Spalten einer Tabelle in eine ASCII-Datei |
VF_nread | liest die Spalten einer Tabelle in n gleichartige Vektoren ein |
VF_store | Speichern im Binärformat |
VF_recall | Einlesen im Binärformat |
Die folgenden Funktionen modifizieren die Standardeinstellung für VF_write, VF_nwrite und VI_read:
VF_setWriteFormat | bestimmtes Ausgabeformat vorgeben |
VF_setWriteSeparate | Trennzeichen zwischen aufeinander folgenden Element für VF_write vorgeben |
VF_setNWriteSeparate | Trennzeichen zwischen den durch VF_nwrite geschriebenen Spalten definieren |
V_setRadix | für die ganzzahligen V.._read-Funktionen eine andere als die als Standard angenommene Basis 10 einstellen. |
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home
V_initPlot | Graphikfunktionen von VectorLib initialisieren (Windows und DOS). Es ist unter Windows nicht nötig, nach Gebrauch einen Abschluß durchzuführen, da V_initPlot nur Zahlenwerte initialisiert, aber keine Speicherreservierungen o.ä. durchführt und die Windows-Graphikfunktionen stets vorhanden bleiben. V_initPlot reserviert automatisch einen Bildschirmausschnitt für Plot-Operationen, der etwa die rechten 2/3 des Bildschirms umfaßt und oben noch Raum für eine Überschrift sowie unten ein paar Zeilen für eine Unterschrift freiläßt. Am unteren Rand bleiben einige Zeilen frei. Um die Standard-Einstellung zu ändern, rufe man V_setPlotRegion nach V_initPlot. |
V_initGraph | gleichzeitige Initialisierung des Borland-Graphik-Interface BGI und der VectorLib-Plotfunktionen (nur DOS). Dabei erfolgt automatisch der Aufruf der BGI-Initialisierungsroutine "initgraph" und sollte daher nicht wiederholt werden. Ist initgraph bereits aufgerufen worden, so verwende man statt V_initGraph die Funktion V_initPlot. Nach Abschluß der Arbeit mit den Graphik-Funktionen muß in den Textmodus zurückgeschaltet und Pufferspeicher freigegeben werden durch den Aufruf der BGI-Funktion closegraph. |
V_initPrint | Graphikfunktionen von VectorLib initialisieren und die Ausgabe auf einen Drucker umleiten (nur Windows). Standardmäßig wird eine ganze Seite zum Druck verwandt. Auch diese Einstellung läßt sich mit Hilfe von V_setPlotRegion nach V_initPrint ändern. |
V_setPlotRegion | Definition eines von der automatischen Wahl abweichenden Fensterausschnitts |
VectorLib unterscheidet zwei Arten von Plot-Funktionen: AutoPlot und DataPlot. Alle AutoPlot-Funktionen (z.B. VF_xyAutoPlot) führen die folgenden Schritte durch:
Um Text und Beschriftungen hinzuzufügen, sollte ein neuer Viewport definiert werden. Hierzu verwende man SetViewportOrgEx (32-bit Windows), SetViewportOrg (16-bit Windows) oder setviewport (DOS). Andernfalls werden alle Positionsangaben von der linken oberen Ecke des gezeichneten Koordinatensystems aus gerechnet.
Um unter DOS in den Textmodus zurückzuschalten, gebrauche man restorecrtmode.
Erneuter Aufruf von V_initPlot (nicht V_initGraph!) führt danach wieder in den Graphik-Modus.
Die verschiedenen Darstellungs-Optionen (Symbole, Linien und Farben) werden als Parameter beim Aufruf der jeweiligen Funktion spezifiziert, siehe VF_xyAutoPlot. Hier folgt eine Liste der vorhandenen AutoPlot- und DataPlot-Routinen:
VF_xyAutoPlot | automatisch skalierter Plot eines X-Y-Vektor-Paares |
VF_yAutoPlot | automatisch skalierter Plot eines Y-Vektors gegen den als X-Achse verwendeten Element-Index |
VF_xy2AutoPlot | gleichzeitige Auftragung zweier X-Y-Paare, wobei die Achsenskalierung sicherstellt, daß beide in dasselbe Koordinatensystem passen |
VF_y2AutoPlot | desgl. für zwei gegen ihre Indizes aufgetragene Y-Vektoren |
VF_xyDataPlot | zusätzlichen X-Y-Datensatz auftragen |
VF_yDataPlot | zusätzlichen Y-Vektor gegen seinen Index auftragen |
Vektoren aus cartesisch-komplexen Zahlen werden in der komplexen Ebene dargestellt, d.h. die Imaginärteile gegen die Realteile aufgetragen. Hierzu dienen
VCF_autoPlot | Auftragung eines cartesisch-komplexen Vektors |
VCF_2AutoPlot | gleichzeitige Auftragung zweier komplexer Vektoren |
VCF_dataPlot | Hinzufügung eines weiteren komplexen Vektors zu einer bestehenden Auftragung |
Funktionen zur Auftragung polar-komplexer Vektoren sind derzeit nicht enthalten.
Es ist möglich, mehrere Koordinatensysteme in ein-und-dasselbe Fenster zu zeichnen. Die Position jedes Koordinatensystems muß über die oben erwähnte Funktion V_setPlotRegion spezifiziert werden. Dem Umschalten zwischen ver-
schiedenen Koordinatensystemen (z.B. um neue DataPlots hinzuzufügen) dienen
die folgenden Funktionen:
V_continuePlot | Wiederherstellung des zuletzt für einen Plot verwendeten Viewports und der zugehörigen Achsen-Skalierungen |
V_getCoordSystem | Speichern der Position und Skalierungen eines Koordinatensystems |
V_setCoordSystem | Wiederherstellung von Position und Skalierungen eines Koordinatensystems. Diese müssen zuvor mittels V_getCoordSystem gespeichert worden sein. |
nur DOS:
Wenn mehrere Koordinatensysteme gleichzeitig auf dem Bildschirm dargestellt werden, ist meistens der für die Achsenbeschriftung verwendete Standard-Schriftsatz zu groß, so daß es zum Überlappen benachbarter Zahlen kommt. In diesem Fall verwenden Sie bitte die BGI-Funktion settextstyle, um auf einen anderen Schriftsatz umzuschalten, bevor Sie eine AutoPlot-Funktion aufrufen.
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home
Fortsetzung: Kap. 5. Fehlerbehandlung
Zurück zum VectorLib-Inhaltsverzeichnis OptiVec Home
Copyright © 1996-2020 OptiCode – Dr. Martin Sander Software Development