Я думаю, что первый результат связан с числовой ошибкой, принимая
sys = {a,b,c}/.FindInstance[
{a, b, c}.v1 == 0 && (Chop@a != 0. || Chop@b != 0. || Chop@c !=0.),
{a, b, c}, Reals, 4];
затем MatrixRank@sys
возвращает 2, поэтому сама система является только двухмерной. Для меня это означает, что первый экземпляр Orthogonalize
генерирует числовую ошибку, а второй использует ошибку вне плоскости, чтобы дать вам три вектора. Удаление условия Chop
исправляет это,
Orthogonalize[{a, b, c} /.
N@FindInstance[{a, b, c}.v1 == 0,{a, b, c}, Reals, 4]]
, где N
необходимо, чтобы избавиться от появившихся терминов Root
. Это дает вам двумерную систему, но вы можете получить третью, взяв перекрестное произведение.
Редактировать : Вот еще одно доказательство того, что его числовая ошибка из-за Chop
.
С Chop
, FindInstance
дает мне
{{64., 3.6, 335.108}, {-67., -4.3, -350.817}, {0, 176., 0},
{-2., -4.3, -10.4721}}
Без Chop
, я получаю
{{-16.8, 3.9, -87.9659}, {6.6, -1.7, 34.558}, {13.4, -4.3, 70.1633},
{19.9, -4.3, 104.198}}
, что является существенной разницей между ними.