刚上手R一个月,前两天为了交作业实现了极大无关组的求解,看网上并没有相关的代码所以分享一下。不足之处还有很多,希望各位大佬多多指教~

求解的大体思想就是化阶梯形,并且把每个阶梯的第一个元素的索引取出,利用索引得到原矩阵的一组极大无关组,验证是否线性无关只需要利用索引得到化为阶梯形后的子矩阵,子矩阵的秩是否为Min{行秩,列秩}

求解方法改进了一下选取列主元的高斯消去法,在其基础上为列主元的坐标定位指针[i, j],这样可以判断对该列进行高斯消去之后,下一列的主元位置和该列的主元位置,是在同一行还是在同一对角线上。倘若这两列线性相关则在同一行平移,若线性无关则对角线移动。

先简单介绍一下列主元高斯消元法,估计高斯看了棺材板会盖不住的。

在化阶梯形的过程中,比如从A[1, 1](不等于0)开始,将A[i, 1](i = 2, 3, 4....)的元素都化为0,这个过程就是在实现高斯消元。在消元的过程中,被用来消其他元素的那个元素叫做主元。而列主元的高斯消去法指的是每一列消元时,都选择本列绝对值最大的元素作为主元,并把那一行换到指针所在的位置。

为什么在列主元的高斯消去法里没有提指针的事请呢?因为它常用来实现n阶方阵的LU分解,指针默认方向是对角线,不用考虑横向平移的过程。

话不多说分享代码~

清空变量,导入数据清洗包dplyr

rm(list = ls())
library(dplyr)

定义行交换函数

# Reorder rows
rarrange = function(dtf, i1, i2){dtf.i1 = dtf[i1, ]dtf[i1, ] = dtf[i2, ]dtf[i2, ] = dtf.i1return(dtf)
}

主题函数部分,tg.tick是主元所在的行标,貌似which可以直接获取行标行交换更方便

(为了逻辑而放弃了美观,在函数体里加了注释,原谅一只菜鸡)

# Function
MLIG = function(mtx){mdtf = as.data.frame(mtx)i = 1j = 1tg.tick = im = dim(mdtf)[1]n = dim(mdtf)[2]index = NAwhile ((i <= (m-1)) & (j <= n)){colmax = mdtf[i, j]# Find column principal and row.numbers it is infor (t in (i+1) : m){if (abs(as.numeric(mdtf[t, j])) > abs(as.numeric(colmax))){colmax = abs(as.numeric(mdtf[t, j]))tg.tick = t}else{tg.tick = i}}# If column principal not equal to mdtf[i, j], no arrange operationsif (as.numeric(colmax) != mdtf[i, j]){mdtf = rarrange(mdtf, i, tg.tick)}else{}# If column principal not equal to zeroif (colmax != 0){for (t in (i+1):m){k = mdtf[t, j] / mdtf[i, j]mdtf[t, j:n] = mdtf[t, j:n] - mdtf[i, j:n]*k}index = c(index, j)i = i + 1j = j + 1}else{j = j + 1}}index = na.omit(index)result.dtf = select(as.data.frame(mtx), index)check.dtf = mdtfreturn(list(result.dtf = result.dtf, check.dtf = check.dtf))
}

用两个矩阵检验效果

# Effect test
MLIG(matrix(1:24, 4, 6))
MLIG(matrix(sample(1:10, 30, replace = T), 5, 6))

运行结果为

> MLIG(matrix(1:24, 4, 6))
$result.dtfV1 V2
1  1  5
2  2  6
3  3  7
4  4  8$check.dtfV1 V2 V3 V4 V5 V6
1  4  8 12 16 20 24
2  0  3  6  9 12 15
3  0  0  0  0  0  0
4  0  0  0  0  0  0> MLIG(matrix(sample(1:10, 30, replace = T), 5, 6))
$result.dtfV1 V2 V3 V4
1  4  5  6  7
2  9  7  3  8
3  7  2  7  9
4  9  4  4  9
5  7  3  8  4$check.dtfV1    V2        V3        V4        V5         V6
1  4  5.00   6.00000  7.000000  6.000000  4.0000000
2  0 -4.25 -10.50000 -7.750000 -4.500000 -5.0000000
3  0  0.00  13.17647  9.058824  6.647059  7.9411765
4  0  0.00   0.00000 -5.812500 -1.316964  0.7098214
5  0  0.00   0.00000  0.000000 -5.222734 -1.4562212

R语言求解矩阵极大无关组并检验是否线性相关相关推荐

  1. 怎么根据矩阵判断极大无关组_什么是极大无关组?怎么判别?

    展开全部 向量组的极大无关组满足2个条件:62616964757a686964616fe59b9ee7ad9431333431353366 1.自身线性无关. 2.向量组中所有向量可由它线性表示. 例 ...

  2. 怎么根据矩阵判断极大无关组_如何判断向量是否是矩阵的极大无关组?

    首先你这个提问不是很严谨哦ε3ε 极大无关组是向量组里面的概念,而在矩阵里没有极大无关组这个概念,虽然向量组合并在一起可以看成一个矩阵,但不能说矩阵有极大无关组. 我们先从概念出发,极大线性无关组:在 ...

  3. 怎么根据矩阵判断极大无关组_怎么根据矩阵判断极大无关组_什么是极大无关组?怎么判别?...

    展开全部 向量组的极大无关组满足2个条件:62616964757a686964616fe59b9ee7ad9431333431353366 1.自身线性无关. 2.向量组中所有向量可由它线性表示. 例 ...

  4. 线性代数之极大无关组的求法

                                                     线性代数之极大无关组的求法 注:行列式常见计算方法链接汇总 三角法 . 降阶法  .迭代法  .拆分凑 ...

  5. 如何用matlab判定线性相关并给出极大无关组

    学过线性代数都知道,先求出秩,根据秩的大小与向量的阶数比较判断出线性是否相关.求秩matlab用rank函数 rank函数格式 rank(A) 求下列矩阵判断是否线性相关并求出极大无关组 >&g ...

  6. 向量组极大无关组和向量组的秩

    向量组的极大无关组定义 极大无关组包含两层含义:1 极大性,2无关性. 1 线性无关向量组的极大无关组就是其本身: 2 向量组与其极大无关组等价: 3 同一个向量组的极大无关组不唯一,但它们之间是等价 ...

  7. R语言生存分析Log-rank假设检验组间生存曲线比较实战

    R语言生存分析Log-rank假设检验组间生存曲线比较实战 目录 R语言生存分析Log-rank假设检验组间生存曲线比较实战 #log-rank检验

  8. R语言Logistic回归模型亚组分析森林图(forest plot)绘制

    R语言Logistic回归模型亚组分析森林图(forest plot)绘制 目录 R语言Logistic回归模型亚组分析森林图(forest plot)R语言Logistic回归模型亚组分析森林图

  9. R语言使用t.test函数进行t检验、使用配对的t检验(paired)检验组间不独立数据的差异是否有统计学意义

    R语言使用t.test函数进行t检验.使用配对的t检验(paired)检验组间不独立数据的差异是否有统计学意义 目录 R语言使用t.test函数进行t检验.使用配对的t检验(paired)检验组间不独 ...

最新文章

  1. webkit入门准备
  2. 让理科生沉默,让文科生落泪的文史综合题
  3. SPOJ - NSUBSTR Substrings(后缀自动机)
  4. HBase性能优化方法总结(三):读表操作
  5. koa操作mongodb,封装mongdb操作方法
  6. 谷歌收购DNNresearch能获得什么?
  7. Python - 列表与字典相互转换
  8. funcode坐标c语言,01 FunCode C 入门.doc
  9. 5.6 深度卷积神经网络(AlexNet)
  10. BPMN,BPEL,XPDL
  11. 【图解CAN总线】-8-CANFD总线网络“负载率”计算
  12. loj6388 「THUPC2018」赛艇 / Citing
  13. 光合作用9月五星推荐图书
  14. ▲ Android自定义方框EditText注册验证码
  15. CTFshow-命令执行(4)
  16. 直流有刷电机调速原理及Matlab/Simulink仿真
  17. 央视春晚歌手王琪,和戏歌双绝吴广全在长春芝华仕会盟
  18. 解决win7 中powershell挖矿占用CPU100%
  19. c语言快速复数的比较大小,c语言中的复数操作
  20. 启元世界获 NeurIPS 2018 多智能体竞赛Learning组冠军,决策智能平台价值凸显...

热门文章

  1. 翻译 - Kafka 介绍
  2. 小型企业网如何利用10G万兆交换机进行连接
  3. tmux操作快捷键精简版
  4. vivox50和华为mate40哪个好
  5. eQTL:连接突变与基因表达的桥梁
  6. Db2查询数据库中的表和表结构查询
  7. docker构建dm8镜像
  8. 高通平台GPU动态调频DCVS . 篇2 . Framework Procedure
  9. hive日期函数-杂谈(一)
  10. python—简单数据抓取七(采取蘑菇API代理设置scrapy的代理IP池并利用redis形成队列依次使用,利用ip池访问网页并将scrapy爬取转移到items的数据存入到数据库)