Numerisch gesehen ist dein Zahlen-Beispiel sehr "ungeschickt", denn es enthält eine sehr große (1e+30) und kleine Zahlen (1e-4).
Da tut sich Gleitkomma-Rechnung grundsätzlich schwer und man muss schon sehr genau hinschauen, ob da noch das Richtige rauskommt.
Ein weiterer Fehler ist, dass du bei bei der LabVIEW-Pseudo-Inversen die Standard-Toleranz nicht geändert hast, vgl. Hilfe:
Code:
tolerance: defines a level such that the number of singular values greater than this level is the rank of Input Matrix. The default is –1. If tolerance is negative, the internal tolerance used to determine rank is set as shown in the following equation.
tolerance = max(m,n)*||A||*epsilon,
where A represents the Input Matrix, m represents the number of rows in A, n represents the number of columns in A, ||A|| is the 2-norm of A, epsilon is the smallest, floating point number that can be represented by type double, as shown in the following relationship.
epsilon = 2^–52 = 2.22e–16
Bei deinem Zahlenbeispiel ergibt sich eine erlaubte Toleranz von ca. 2,6e+15. Kein Wunder, dass da etwas anderes herauskommt als bei einer anderen Berechnung. Schließe bei Tolerance einmal einen kleinen positiven Wert an, und du erhältst dasselbe Ergebnis.
Wie aber schon eingangs gesagt, das Ergebnis ist mit Vorsicht zu genießen. Der Test A-inv x A geht z.B. bei deinem Zahlenbeispiel nicht auf.
Gruß, Jens