как использовать для цикла и если заявление - PullRequest
0 голосов
/ 13 января 2019

Первая проблема - вычисление обратной матрицы (z-A), где z - набор различных комплексных чисел, а A - матрица 2 × 2. Вторая проблема заключается в том, что после вычисления 2-нормы набора обратных матриц, сравните его с определенным числом, как написать оператор if, чтобы множество z ​​можно было построить на графике с собственными значениями A, если 2- норма обратной матрицы (zA) больше этого числа.

Я попытался сгенерировать разные комплексные числа и вычислить 2-норму.

A <- matrix(c(1, 0, 0, 1), 2, 2, byrow=TRUE)
ev <- eigen(A)
z <- complex(real = stats::rnorm(100), imaginary = stats::rnorm(100))
for (i in 1:100) {X <- solve(z-A)}
Y<- norm(X, "2")
a <- 0.1
if(Y > a){ }

Ожидаемый конечный граф должен быть кругом в комплексном графе с центром в (1,0), который является собственным значением матрицы A.

1 Ответ

0 голосов
/ 13 января 2019

Вот ваш код переписан

# use lapply to define X (also, note that in your loop you didn't have the indexing on z)
X <- lapply(1:100, function(k) solve(z[k]-A))
# let's check
X[[1]] %*% (z[1]-A)
# Almost equal to I_2 (small erorrs are normal)
#                            [,1]                        [,2]
# [1,] 1.000000e+00+0.000000e+00i -1.665335e-16+2.220446e-16i
# [2,] 1.110223e-16-2.220446e-16i  1.000000e+00-0.000000e+00i
Y <- sapply(1:100, function(k) norm(X[[k]], '2'))
# your a value (strange choice since all the Y's are > a)
a <- 0.1
# you can subset the Y's that are bigger than a like this
ind <- Y > a
Y[ind]
# and here are the corresponding z's
z[ind]
# and for plotting
plot(z[ind])

Несколько комментариев:

  • Вы утверждали, что собственные значения 1;0. Моя линейная алгебра ржавая, и я не проверял себя, но R, кажется, считает, что значения 1;1
  • Как указано выше, ваш цикл не содержал индексирования (я предполагаю, что вы хотели написать solve(z[i]-A). Кроме того, Y > 0.1 равно TRUE для всех Y[k], поэтому выбор a <- 0.1 немного странно
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...