FC_MatrixInversion

 

FC_MatrixInversion - Allgemeine Informationen

Übersicht

Typ

Funktion

Verfügbar ab:

V1.0.3.0

Versionen:

Aktuelle Version

Aufgabe

Berechnung der inversen Matrix einer gegebenen quadratischen Matrix.

Beschreibung

Liefert die inverse Matrix 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. Der Zeiger i_plrInvMatrix muss auf den Beginn des Speicherbereichs zeigen, in den das Ergebnis der Berechnung, also die inverse Matrix, kopiert werden soll. Ist eine Matrix nicht invertierbar, so spricht man von einer singulären Matrix.

Schnittstelle

Eingang

Datentyp

Beschreibung

i_diDim

DINT

Zeilen-/Spaltenzahl der Matrix, deren Inverse berechnet werden soll. 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 inverse Matrix berechnet werden soll.

i_plrInvMatrix

POINTER TO LREAL

Zeiger auf den Beginn des Speicherbereichs, in den die inverse Matrix kopiert werden soll.

Ausgang

Datentyp

Beschreibung

q_etDiag

GD.ET_Diag

Allgemeingültige, bibliotheksunabhängige Aussage zur Diagnose.

Ein Wert ungleich ET_Diag.Ok entspricht einer Diagnosemeldung.

q_etDiagExt

ET_DiagExt

POU-spezifischer, diagnosebezogener Ausgang.

q_etDiag = ET_Diag.Ok -> Statusmeldung

q_etDiag <> ET_Diag.Ok -> Diagnosemeldung

Hinweise

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 der Speicherbereiche, auf die die Zeiger i_plrMatrix und i_plrInvMatrix verweisen (mindestens i_diDim * i_diDim LREALs), muss sorgfältig geprüft werden, da der Funktionsbaustein sonst einen Speicherzugriffsfehler verursacht.

oFür die Belegung und das Lesen von Elementen der beteiligten Matrizen stehen die Funktionen FC_GetMatrixElement() und FC_SetMatrixElement() zur Verfügung.

oSind die Matrizen durch Arrays gegeben und soll die inverse Matrix direkt in einem Array abgelegt werden, so können diese auch direkt (ohne Benutzung der zuvor genannten Hilfsfunktion) belegt werden. Der erste Index der Arrays ist dann der Zeilenindex der Matrizen, der zweite der Spaltenindex.

Diagnosemeldungen

q_etDiag

q_etDiagExt

Enumerationswert

Beschreibung

OK

Ok

0

OK

ControllerConditionInvalid

DynIecDataSizeTooSmall

75

Es ist zu wenig dynamischer Speicher reserviert.

InputParameterInvalid

DimRange

72

Dim ist außerhalb des gültigen Bereichs.

InputParameterInvalid

MatrixSingular

77

Die Matrix ist singulär.

InputParameterInvalid

PointerInvMatrixInvalid

8

Der Zeiger InvMatrix ist ungültig.

InputParameterInvalid

PointerMatrixInvalid

69

Der Zeiger Matrix ist ungültig.

InputParameterInvalid

ZeroLimitRange

74

ZeroLimit ist außerhalb des gültigen Bereichs.

UnexpectedProgramBehavior

UnexpectedFeedback

1

Es ist ein unbeabsichtigter Fehler während der Ausführung aufgetreten.

DimRange

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

DynIecDataSizeTooSmall

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.

MatrixSingular

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.

Ok

Enumerationsname:

Ok

Enumerationswert:

0

Beschreibung:

OK

Die inverse Matrix wurde erfolgreich berechnet.

PointerInvMatrixInvalid

Enumerationsname:

PointerInvMatrixInvalid

Enumerationswert:

8

Beschreibung:

Der Zeiger InvMatrix ist ungültig.

Problem

Ursache

Lösung

-

Am Eingang i_plrInvMatrix wurde ein Nullzeiger übergeben.

Dem Eingang i_plrInvMatrix muss die Addresse des Speichers übergeben werden, in dem die invertierte Matrix liegt.

PointerMatrixInvalid

Enumerationsname:

PointerMatrixInvalid

Enumerationswert:

69

Beschreibung:

Der Zeiger Matrix ist ungültig.

Problem

Ursache

Lösung

-

Am Eingang i_plrMatrix wurde ein Nullzeiger übergeben.

Dem Eingang i_plrMatrix muss die Addresse des Speichers übergeben werden, in dem die Matrix liegt.

UnexpectedFeedback

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.

ZeroLimitRange

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.