Существует ли функция R для поиска комплексных чисел и их подсчета? - PullRequest
1 голос
/ 20 мая 2019

Я сгенерировал 1000 матриц 2х2, элементы которых являются случайными числами в диапазоне от -10 до 10.

Я предоставил коды, которые у меня есть.

Но я не уверен, что это правильный код, чтобы определить, сложен ли мой список собственных значений или нет. Затем для каждой матрицы я должен определить, является ли система устойчивым узлом (оба собственных значения действительны и отрицательны); нестабильный узел (оба собственных значения действительные и положительные); седло (оба собственных значения действительны, одно положительно, другое отрицательно); стабильный фокус (сложные собственные значения с отрицательной вещественной частью); нестабильный фокус (сложные собственные значения с положительной действительной частью); или центр (мнимые собственные значения, действительная часть равна нулю).

У меня также есть счетчики, но я не знаю, как их включить. Когда я ввожу код, ничего не появляется.

M=lapply(1:1000, function(z) matrix(runif(1000,min=-10,max=10), ncol = 2, nrow = 2))

eig=lapply(M, eigen)

V=sapply(eig, `[[`, "values")

SFcounter=0

if (is.complex(V)==T)
Re(V)>0

SFcounter=SFcounter+1

1 Ответ

0 голосов
/ 20 мая 2019

Для каждого node вы должны создать столбец в V.Вы можете использовать функцию Im для извлечения мнимой части (равной нулю или нет) любого комплексного числа.Вы можете извлечь настоящий компонент с помощью Re.Кроме того, если вы заинтересованы в классификации действительных чисел, это все те, которые удовлетворяют Im(V) == 0 [мнимая составляющая равна нулю].

Если вы используете apply, вы можете оценить каждую пару собственных значений в V, которые сгруппированы в каждом столбце.Исходя из ваших различных критериев классификации, вы можете определить эти точки, используя if утверждения:

node.classification <- function(x) {
  if ( (Im(x) == 0) && (Re(x) < 0) ) { #both eigenvalues are real and negative
    return("stable")
  } else {
    if ( (Im(x) == 0) && (Re(x) > 0) ) { #both eigenvalues are real and positive
      return("unstable")
    } else {
      if ( (Im(x) == 0) && sum((Re(x) > 0) == 1) ){ #both real one pos./one neg.
        return("saddle")
      } else {
        if ( (Im(x) != 0) && (Re(x) < 0) ) { #each complex, real part negative
          return("stable focus")
        } else {
          if ( (Im(x) != 0) && (Re(x) > 0) ) { #each complex, real part positive
            return("unstable focus")
          } else {
            return(NA)
          }
        }
      }
    }
  }
}

head(apply(V, 2, node.classification))
[1] "unstable"       "stable focus"   "stable"        
[4] "unstable"       "unstable"       "unstable focus"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...