Я пытаюсь перенести код 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;