Разница между выводом обратной косой черты Matlab (\) и numpy.linalg.solve - PullRequest
2 голосов
/ 23 сентября 2019

Я пытаюсь перенести код MATLAB на python, в котором мне нужно решить систему линейных уравнений.У меня есть квадратная матрица A и вектор B. Вывод данных с использованием оператора обратной косой черты в MATLAB отличается от numpy.linalg.solve, который является пустым эквивалентом квадратной матрицы.

Я попытался использовать pinv (A) * B в Matlab и сравнить его с np.linalg.pinv (A) * B в python.Они оба дают результаты, соответствующие предыдущему методу, опробованному на каждом языке, но не равны друг другу.Мне интересно, связана ли эта ошибка с точностью, которую MATLAB и Python используют для хранения целых чисел.

В Matlab:

x = A\B

В Python

x = np.linalg.solve(A, B) 

Матрица ввода:

            A = np.array([[1.4496, 1.6599, 0.7432, 1.1793, 0.9570],
                         [1.6599, 2.1355, 0.7412, 1.6223, 1.1561],
                         [0.7432, 0.7412, 0.5723, 0.6121, 0.5772],
                         [1.1793, 1.6223, 0.6121, 1.5197, 0.9168],
                         [0.9570, 1.1561, 0.5772, 0.9168, 1.1206]])
            B = np.array([0.6908, 0.9390, 0.5756, 0.8842, 0.7343])

Выход Matlab:

x =

   -5.4568   
    5.7049    
    4.6153    
   -2.5657   
   -0.7871   

Выход Python:

x = 
[-4.24662995  
 3.54417096  
 3.29377257 
-1.15847853 
-0.12329431]

Редактировать: Вот код MATLAB

    for i = 1:class_num1
        A = (XX+r1*diag(D1(:,class_num1+i))+r2*D2);
        B = XY1(:,i);
        P(:,i) = A\B;
    end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...