У меня есть матрица [8x4], 'A', и матрица [8x1], 'B'. Как проверить, существует ли матрица [4x1] 'x', такая, что A * X = B
?
Это можно сделать с помощью linprog
в MATLAB, но я не уверен, как задать ограничения. Я пытался x = linprog([],[],[],A,B);
, но, похоже, это не сработало.
Как указать условие x>=0
и оптимизировать его для A*X-B
, чтобы, если оно возвращает 0, мы знали, что X
.
Обновление:
pinv
в MATLAB работает не во всех случаях. Рассмотрим следующий пример:
A= [1 0 0 0
0 1 -1 -1
-1 -1 1 -1
-1 -1 -1 1
0 0 0 0
0 0 0 0
0 0 0 0
1 1 1 1]
B = [0
0
0
-1
0
0
0
1]
с использованием pinv
дает значение X как:
X = [-2.7756e-017
0.5000
0.5000
0]
но когда используется линейное программирование, я получаю x как:
X = [ 0
0.5000
0.5000
0]
Именно поэтому я предпочел инструмент linprog
в MATLAB. Я просто использовал его так, как упомянул ранее, но он выдает много предупреждений. Я все еще думаю, что есть лучший способ использовать эту функцию правильно. Это не для этой матрицы, но в целом, когда я перебираю много матриц, мое командное окно переполняется предупреждениями.