全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
16374 20
2012-12-26
悬赏 5 个论坛币 已解决
一个迭代循环过程中,要对矩阵求逆,但是经常遇到矩阵条件数很小,基本不可逆了,想判断出基本不可逆,然后跳过去,继续循环,请大家帮忙想想该怎么办?多谢啦啦

最佳答案

qoiqpwqr 查看完整内容

这样吧,用try来控制错误信息。如果solve出错的话就进入下一个循环。 这是一个简单的程序。我从0,1,2里面任选四个数字组成一个2乘以2的矩阵,然后求它的逆。这个矩阵有可能是不可逆的,用solve的话就会出错。 这个是没有try控制的语句 set.seed(1) count
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-12-26 22:08:08
这样吧,用try来控制错误信息。如果solve出错的话就进入下一个循环。

这是一个简单的程序。我从0,1,2里面任选四个数字组成一个2乘以2的矩阵,然后求它的逆。这个矩阵有可能是不可逆的,用solve的话就会出错。

这个是没有try控制的语句
set.seed(1)
count <- 1
inverses <- vector(mode = "list", 100)
repeat {
    x <- matrix(sample(0:2, 4, replace = T), 2, 2)
    inverses[[count]] <- solve(x)
    count <- count + 1
    if (count > 100) break
}
在第三个循环就会出错,然后就结束程序了。

然后我们加入try的控制
set.seed(1)
count <- 1
inverses <- vector(mode = "list", 100)
repeat {
    x <- matrix(sample(0:2, 4, replace = T), 2, 2)
    x.inv <- try(solve(x), silent = TRUE)
    if ('try-error' %in% class(x.inv)) next
    inverses[[count]] <- x.inv
    count <- count + 1
    if (count > 100) break
}
如果那个try语句有错误的话,下面那个if语句就会控制结束当前的循环而进入下一个循环。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-12-26 22:28:12
自己先顶了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-12-26 22:34:20
你把数据,程序发下呢, 大家也可以一起学习看看撒
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-12-26 22:43:08
这种数值上的问题比较难搞,比如说什么叫基本不可逆。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-12-27 05:41:36
先算他rank, 如果rank小于矩阵维数,那么肯定是不可逆的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群