version 2.0.0.1 (8.04 KB) by
Ivo Houtzager

Generalized Total Least Squares with mixed and/or weighted disturbances

These functions calculates the solution for the generalized and/or mixed total least squares problem.

The total least squares problem, also known as errors in variables, solves the over-determined set of linear equations (A0+dA)X = (B0+dB), where covariance matrix of the unknown disturbances dA and dB is considered to be diagonal and denoted by E([dA dB]^T[dA dB]) = sigma_d.*I.

The mixed total least squares problem solves the over-determined set of linear equations [A1 A2]X = B, where A1 are the error-free variables, and A2 = A0 + dA2 and B = B0 + dB are the variables with disturbances.

The generalized total least squares problem solves the over-determined set of linear equations (A0 + dA)X = (B0 + dB), where the covariance matrix of the disturbances dA and dB is positive definite and given by sigma_d.*W = E([dA dB]^T[dA dB]).

Ivo Houtzager (2021). Total Least Squares with mixed and/or weighted disturbances (https://github.com/iwoodsawyer/gtls/releases/tag/v2.0.0.1), GitHub. Retrieved .

Created with
R2012b

Compatible with any release

- MATLAB > Mathematics > Linear Algebra >

**Inspired by:**
QR/RQ/QL/LQ factorizations

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!Create scripts with code, output, and formatted text in a single executable document.

Ivo HoutzagerThe references are given in the help description of the functions.

matlabaaaRegarding your codes, can you give the corresponding references?

SKeasheI have the same problem. Does anyone know a solution?

A SElliot is right. There must be something wrong with the code.

W = E([dA dB][dA dB]^T) implies that W must be (m+n)*(m+n) where A is m*n, B is n*p. But in the code we have:

R = chol(W);

[U,V,Z,C,S] = gsvd([A B],R)

which implies that number of columns of R and therefore W should be the same as that of [A B]. This implies that W should be n+p. That is why in the example the size of W is 6 (m=1000, n=4, p=2).

Elliot BroussardDear Ivo,

Thank you for this toolbox.

I would like to use the function "wtls" and I have a issue computing the weigh matrix W. In my case, the error dA depends on the line of the matrix A = A0+dA. I know the standart deviation of the error for each line of A. Thoses errors are considered uncorrelated, wich means that W should be diagonal.

Considering my reading, I though the weight matrix was a m by m diagonal matrix, with m the number of equations (1000 in the examples provided). In the wtls function, the weigh matrix should be n by n, with n the number of parameters to be determined.

Could you please explain how to compute W in the case that each line has a different standart deviation disturbance.

I thank you in advance.

Elliot

Sergio HerreraThank you, I works perfect.

Ivo HoutzagerDear Segio,

Try to look at the singular values which are calculated in the function tls. Plot the singular values using semilogy(s,'x'). Look if there is a big gap between the singular values. Choose tol geater than the singular values which are not dominant in the plot, but smaller than the dominant singular values.

Ivo

Sergio HerreraDear Ivo,

I try tls(A,B), and I am getting the same results with my implementation, But I don't understand the third argument varargin, I understand is the tolerance, but how can this be determine? from the data?

Sergio HerreraDear Ivo,

I try tls(A,B), and I am getting the same results with my implementation, But I don't understand the third argument varargin, I understand is the tolerance, but how can this be determine? from the data?

Louie Law