Линейные системы уравнений

Итак, у меня есть система с 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

Надеюсь, это поможет решить вашу проблему.

Другие вопросы по тегам