В следующем коде я выполнил процедуру для создания случайной положительно определенной матрицы P.Как работает аппроксимация равенства Matlab?
Во-первых, я создал разложение по сингулярным значениям [U, S, V] случайного массива и я пытаюсь проверить, что на самом деле U = U '* == U * U' I (где I - единичная матрица), которая известна из теории. Проблема в том, что если я проверю содержимое матриц самостоятельно, я могу проверить это, но Matlab создает логическую матрицу, которая не проверяет, что, поскольку нуль представлен как -0.000 или 0.0000, результат равен 1, только если знаки совпадают. Почему это?
Но большая проблема возникает в нескольких строках ниже, где положительно определена (все ее собственные значения положительны) матрица P производится, и я просто хочу, чтобы проверить, что P = P». Нажимая на x и y, я вижу, что их содержимое точно такое же, но Matlab также не может это проверить. Я не понимаю, почему это происходит, поскольку в этом случае мы говорим о той же переменной P здесь, которая просто транспонирована.
Вот код:
%Dimension of the problem
n = 100;
%Random matrix A
A = rand(n, n)*10 - 5;
%Singular value decomposition
[U, S, V] = svd(A);
%Verification that U*U'=U'*U=I
U'*U == U*U'
%Minimum eigenvalue of S
l_min = min(diag(S));
%Maximum eigenvalue of S
l_max = max(diag(S));
%The rest of the eigenvalues are distributed randomly between the minimum
%and the maximum value
z = l_min + (l_max - l_min)*rand(n - 2, 1);
%The vector of the eigenvalues
eig_p = [l_min; l_max; z];
%The Lambda diagonal matrix
Lambda = diag(eig_p);
%The P matrix
P = U*Lambda*U';
%Verification that P is positive definite
all(eig(P) > 0)
%Verification that P=P'
x=P;
y=P';
x==y