FC_MatrixDeterminant - Allgemeine Informationen
Typ |
Funktion |
Verfügbar ab: |
V1.0.3.0 |
Versionen: |
Aktuelle Version |
Berechnung der Determinante einer quadratischen Matrix.
Liefert die Determinante einer quadratischen Matrix der Dimension i_diDim x i_diDim zurück. Der Zeiger i_plrMatrix muss auf den Beginn des Speicherbereichs zeigen, in dem die Matrix abgelegt ist.
Mit Hilfe der Determinante einer Matrix kann z. B. folgende Aussage über das zugrundeliegende Gleichungssystem getroffen werden:
oIst die Determinante der Koeffizientenmatrix ungleich null, so ist das Gleichungssystem eindeutig lösbar.
Eingang |
Datentyp |
Beschreibung |
---|---|---|
i_diDim |
DINT |
Zeilen-/Spaltenzahl der quadratischen 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 abgelegt ist, deren Determinante berechnet werden soll. |
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 |
|
q_lrDeterminant |
LREAL |
Determinante der quadratischen Matrix i_plrMatrix. |
oDieser Funktionsbaustein benötigt i_diDim * 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 des Speicherbereichs, auf den der Zeiger i_plrMatrix verweist (mindestens i_diDim * i_diDim LREALs), muss sorgfältig geprüft werden, da der Funktionsbaustein sonst einen Speicherzugriffsfehler verursacht.
oFür die Belegung von Elementen der Matrix steht die Funktion FC_SetMatrixElement() zur Verfügung.
oIst die Matrix durch ein Array gegeben, so kann diese auch direkt (ohne Benutzung der zuvor genannten Hilfsfunktion) belegt werden. Der erste Index des Arrays 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 |
69 |
Der Zeiger Matrix 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: |
Ok |
Enumerationswert: |
0 |
Beschreibung: |
OK |
Die Determinante wurde erfolgreich berechnet.
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: |
UnexpectedFeedback |
Enumerationswert: |
1 |
Beschreibung: |
Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten. |
Problem |
Ursache |
Lösung |
---|---|---|
- |
Es ist ein Fehler in der internen Abarbeitung aufgetreten. |
Bitte informieren Sie das Supportteam über diesen Fehler. |
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. |