Итак, если я правильно понимаю, вам дается xp
, проекция вектора x
на подпространство P
, которое определяется набором базисных векторов {p[i]}
. Вы хотите найти некоторый неотрицательный вектор, который проецирует туда. Проблема тривиальна, если вы пропустите неотрицательное условие - просто выберите ваш спроецированный вектор:
x = sum(xp[i]*p[i])
Просто чтобы уточнить, длина xp
- это размерность подпространства P
и равна числу строк в p. Длина каждого p [i] равна размерности исходного многомерного пространства (именно это делает их базисными векторами).
Тот факт, что вы не выполняете вышеизложенное, говорит мне, что проекция не неотрицательна, поэтому вам нужно добавить некоторый вектор, ортогональный к P
, чтобы получить желаемый результат. Проблема в том, что вы действительно не знаете, существует ли такой вектор. Например, представьте, что исходное пространство - это плоскость, а P
- это линия alpha*(1,1)
. Если у вас отрицательная проекция (-1,-1)
, то независимо от того, какой вектор формы a*(1,-1)
вы добавите, вы не сможете получить положительный результат. То же самое относится к любому измерению и любой проекции, которая является отрицательной в более чем одном базисе (я предполагаю, что ваши базисы ортогональны. Если это не так, все становится немного более волосатым).
Итак, чтобы подвести итог, посмотрите на то, как выглядит ваш спроецированный вектор в полном размерном пространстве, и если вы найдете более одной отрицательной записи, вы в значительной степени сомневаетесь, когда речь идет о нахождении неотрицательного вложения проекции в полное размерное пространство.