FC_GaussAlgorithm - Allgemeine Informationen
Typ |
Funktion |
Verfügbar ab: |
V1.0.3.0 |
Versionen: |
Aktuelle Version |
Löser für lineare Gleichungssysteme, die im Gauss-Algorithmus mit Pivotisierung verwendet werden.
Die Funktion berechnet den Vektor SolutionVector, sodass die Gleichung Matrix * SolutionVector = Vector erfüllt ist.
Eingang |
Datentyp |
Beschreibung |
---|---|---|
i_diDim |
DINT |
Anzahl der Gleichungen des zu lösenden Systems bzw. Zeilen-/Spaltenzahl der zugehörigen Matrix. Muss >= 2 sein. |
i_lrZeroLimit |
LREAL |
Numerische Nullgrenze. Matrixelemente, die betraglich kleiner als diese Zahl sind, werden als null betrachtet. Dient dazu, die Rundungsfehlerfortpflanzung zu begrenzen. Der günstigste Wert hängt von den numerischen Eigenschaften der Matrix ab. Muss > 0,0 sein. Ein gängiger Wert ist beispielsweise 1E-12. |
i_plrMatrix |
POINTER TO LREAL |
Zeiger auf den Beginn des Speicherbereichs, in dem die Matrix des linearen Gleichungssystems abgelegt ist. Dieser Bereich muss zusammenhängend sein und mindestens Speicherplatz für i_diDim * i_diDim LREALs bieten. |
i_plrVector |
POINTER TO LREAL |
Zeiger auf den Beginn des Speicherbereichs, in dem der Inhomogenitätsvektor („rechte Seite“) des linearen Gleichungssystems abgelegt ist. Dieser Bereich muss zusammenhängend sein und mindestens Speicherplatz für i_diDim LREALs bieten. |
i_plrSolutionVector |
POINTER TO LREAL |
Zeiger auf den Beginn des Speicherbereichs, in den der Lösungsvektor des linearen Gleichungssystems kopiert werden soll. Dieser Bereich muss zusammenhängend sein und mindestens Speicherplatz für i_diDim LREALs bieten. |
Ausgang |
Datentyp |
Beschreibung |
---|---|---|
q_etDiag |
Allgemeingültige, bibliotheksunabhängige Aussage zur Diagnose. Ein Wert ungleich ET_Diag.Ok entspricht einer Diagnosemeldung. |
|
q_etDiagExt |
POU-spezifischer, diagnosebezogener Ausgang. q_etDiag = ET_Diag.Ok -> Statusmeldung q_etDiag <> ET_Diag.Ok -> Diagnosemeldung |
oDiese POU benötigt (i_diDim + 1) * i_diDim * SIZEOF(LREAL) Bytes dynamischen Speicher. Es muss daher sichergestellt sein, dass der Parameter LMCx00C\C\Konfiguration\Programm\DynIECDataSize (gesamter zur Verfügung stehender dynamischer Speicher) auf einen hinreichend großen Wert gesetzt ist.
oDie korrekte Größe der Speicherbereiche, auf die die Zeiger i_plrMatrix, i_plrVector und i_plrSolutionVector zeigen, muss sorgfältig geprüft werden, da die POU sonst einen Speicherzugriffsfehler verursacht.
oFür die Belegung und das Lesen von Elementen der Matrix und der beteiligten Vektoren stehen die Funktionen FC_GetMatrixElement(), FC_GetVectorElement(), FC_SetMatrixElement() und FC_SetVectorElement() zur Verfügung.
oSind die Matrix und der Inhomogenitätsvektor des Gleichungssystems durch Arrays gegeben, so können diese auch direkt (ohne Benutzung der zuvor genannten Hilfsfunktionen) belegt werden. Der erste Index von A ist dann der Zeilenindex der Matrix, der zweite der Spaltenindex.
q_etDiag |
q_etDiagExt |
Enumerationswert |
Beschreibung |
---|---|---|---|
OK |
0 |
OK |
|
ControllerConditionInvalid |
75 |
Es ist zu wenig dynamischer Speicher reserviert. |
|
InputParameterInvalid |
72 |
Dim ist außerhalb des gültigen Bereichs. |
|
InputParameterInvalid |
77 |
Die Matrix ist singulär. |
|
InputParameterInvalid |
69 |
Der Zeiger Matrix ist ungültig. |
|
InputParameterInvalid |
71 |
Der Zeiger SolutionVector ist ungültig. |
|
InputParameterInvalid |
70 |
Der Zeiger Vector ist ungültig. |
|
InputParameterInvalid |
74 |
ZeroLimit ist außerhalb des gültigen Bereichs. |
|
UnexpectedProgramBehavior |
1 |
Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten. |
Enumerationsname: |
DimRange |
Enumerationswert: |
72 |
Beschreibung: |
Dim ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang i_diDim wurde ein ungültiger Wert übergeben. |
Es muss gelten: i_diDim > 1 |
Enumerationsname: |
DynIecDataSizeTooSmall |
Enumerationswert: |
75 |
Beschreibung: |
Es ist zu wenig dynamischer Speicher reserviert. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Es steht kein oder nicht genügend dynamischer Speicher zu verfügung. |
Erhöhen Sie den dynamischen Speicher Controller > Konfiguration > Programm > DynIECDataSize. |
Enumerationsname: |
MatrixSingular |
Enumerationswert: |
77 |
Beschreibung: |
Die Matrix ist singulär. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Die Matrix am Eingang i_plrMatrix ist singulär. |
Dem Eingang i_plrMatrix muss eine reguläre Matrix übergeben werden. |
Enumerationsname: |
Ok |
Enumerationswert: |
0 |
Beschreibung: |
OK |
Das Gleichungssystem wurde erfolgreich gelöst.
Enumerationsname: |
PointerMatrixInvalid |
Enumerationswert: |
69 |
Beschreibung: |
Der Zeiger Matrix ist ungültig. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang i_plrXMatrix wurde ein Nullzeiger übergeben. |
Dem Eingang i_plrXMatrix muss die Addresse des Speichers übergeben werden, in dem die Matrix liegt. |
Enumerationsname: |
PointerSolutionVectorInvalid |
Enumerationswert: |
71 |
Beschreibung: |
Der Zeiger SolutionVector ist ungültig. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang i_plrSolutionVector wurde ein Nullzeiger übergeben. |
Dem Eingang i_plrSolutionVector muss die Addresse des Speichers übergeben werden, in dem der Lösungsvektor liegt. |
Enumerationsname: |
PointerVectorInvalid |
Enumerationswert: |
70 |
Beschreibung: |
Der Zeiger Vector ist ungültig. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang i_plrVector wurde ein Nullzeiger übergeben. |
Dem Eingang i_plrVector muss die Addresse des Speichers übergeben werden, in dem der Vektor liegt. |
Enumerationsname: |
UnexpectedFeedback |
Enumerationswert: |
1 |
Beschreibung: |
Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten. |
Enumerationsname: |
ZeroLimitRange |
Enumerationswert: |
74 |
Beschreibung: |
ZeroLimit ist außerhalb des gültigen Bereichs. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Am Eingang i_lrZeroLimit wurde eine Zahl <= 0 angelegt. |
i_lrZeroLimit muss größer sein als 0. |