Почему я продолжаю получать ошибку в sign(out $ vectors[, 8]): нереализованная сложная функция при запуске моего Rcode?

#r

#r

Вопрос:

Для справочных целей я изложу проблему, которую я делаю, вместе с моим RCode.

Проблема: Спектральная кластеризация (разделение) сети (классификация сети). Рассмотрим сеть, показанную на рисунке, запишите матрицы смежности, степени и Лапласа для этой сети, вычислите собственные значения и собственные векторы матрицы Лапласа. Собственный вектор, соответствующий второму наименьшему собственному значению, может быть использован для разделения сети на две группы. Что это за две группы? Изображение проблемы, которую я делаю

Вот мой Rcode для решения проблемы:

 '''{r, echo = T}
# list your R codes here!
A <- matrix(
  c(0,0,0,0,0,0,0,1,0,
    1,0,0,0,0,0,0,0,0,
    1/2,0,0,0,0,0,1/2,0,0,
    0,0,1/2,0,0,0,1/2,0,0,
    0,1/2,0,0,0,1/2,0,0,0,
    0,0,0,0,0,0,0,1,0,
    0,0,0,0,0,1,0,1,0,
    0,1/2,0,0,1/2,0,0,0,0,
    0,0,1/2,0,0,0,1/2,0,0),
  nrow = 9,
  ncol = 9,
  byrow = TRUE)

D<- diag(c(1,1,1,1,1,1,2,1,1))
D

L<- D-A
L

out<- eigen(L)
sign(out$vectors[,8])

'''
  

Каждый раз, когда я запускаю свой код, он выдает мне эту ошибку: Ошибка в sign(out $ vectors[, 8]): нереализованная сложная функция

Я не уверен, как это исправить, может кто-нибудь мне помочь?

Комментарии:

1. Связанный: math.stackexchange.com/questions/788164 /. … Я не достаточно чистый математик, чтобы взвесить теоретическое решение этого, но… out это не реально complex , так что «знак» такого немного сложнее?

2. Я не понимаю вашу помощь. Можете ли вы объяснить, в чем проблема с утверждением, что я продолжаю получать ошибку и / или что я могу сделать, чтобы это исправить?

3. Посмотрите out$vectors . Это не «real», это матрица «комплексных» чисел (как в i = sqrt(-1) ). Функция sign и, связанная с этим сообщением, на которое я ссылался, концепция положительности / отрицательности с комплексными числами не так понятна, как для действительных чисел. В качестве более наглядной демонстрации см., Что as.complex(0) это 0 0i (сложный), но as.complex(0) > as.complex(1) недопустимое сравнение. Если вы ожидаете, что в вашем выводе будут все действительные числа, то, возможно, ваши данные неверны / повреждены или в процессе, ведущем к eigen(.) чему-то отсутствует.