Линейные системы уравнений
Итак, у меня есть система с 6 неравенствами и 3 переменными, и точка, которая может или не может решить эту систему. Чтобы проверить, решает ли эта точка неравенства, достаточно просто, моя проблема заключается в том, когда он не решает неравенства, чтобы найти ближайшую точку, которая решает проблему.
Я приведу пример такой системы: Ax<= b
A =
[ C11, C12, C13]
[ -C21, -C22, -C23]
[ C31, C32, C33]
[ -C41, -C42, -C43]
[ C51, C52, C53]
[ -C61, -C62, -C63]
б =
[ Cb1]
[ Cb2]
[ Cb3]
[ Cb4]
[ Cb5]
[ Cb6]
Pxyz =
[ pX, pY, pZ]
Pxyz решает Ax<=B?
if all(A*Pxyz<=b)
accept point
else
get the closest point to Pxyz (by Euclidean distance) that solves the system. How?
end
1 ответ
Решение
РЕДАКТИРОВАТЬ: Попробуйте один из них (проверено с проблемой 2D):
Подход 1:
[Psol,fval,exitflag] = fmincon(@(Psol) norm(Pxyz-Psol), Pxyz, A, b)
Подход 2:
Если я правильно понимаю, у вас есть проблема линейной оптимизации с ограничениями, точнее, проблема линейных наименьших квадратов с ограничениями, которая может быть решена с помощью lsqlin. Это было бы что-то вроде этого:
if all(A*Pxyz <= b)
% accept point
else
% get the closest point to Pxyz (by Euclidean distance) that solves the system
C = eye(length(b));
[Psolu, resnorm, residual, exitflag] = lsqlin(C, Pxyz, A, b);
end
Надеюсь, это поможет решить вашу проблему.