如何使用for循环和if语句

时间:2019-01-13 12:32:26

标签: r for-loop if-statement

第一个问题是计算(z-A)的逆矩阵,其中z是一组不同的复数,而A是2×2矩阵。 第二个问题是在计算了逆矩阵集的2范数后,将其与某个数字进行比较,如何编写if语句,以便如果2的特征值是2,则z的集可以绘制在图上,特征值为A (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 :(得分:0)

这是您的代码被重写

# 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有点奇怪