矩阵奇异值计算的一种新方法——基于R语言实现
传统奇异值分解
奇异值分解技术(Singular Value Decomposition,SVD)是一种矩阵分解方法,实际上是计算矩阵的特征值。若A是实对称矩阵,并且矩阵的A的阶次为n,则存在正交矩阵Q使得:
其中,lamda为矩阵A的特征值。对于非实对称矩阵,式(2.24)不再适用,但存在两个正交矩阵P和V使得:
其中,T代表矩阵的转置运算,r代表矩阵U的秩,矩阵D是一个的对角矩阵,如下所示:
是矩阵U的全部奇异值,即。其中奇异值是按从大到小排列的。一般来说,信号的能量越大,它的奇异值越大。
传统奇异值分解的不足
文献1中指出传统的SVD方法可能存在两点不理想:1、尽管Householder变换本质上是平行的,但每一步的有效向量长度都会减少,从而导致效率低下;2、Sameh和Kuck的并行QR方法在数值上可能不稳定。相比之下,文献2的单边正交化方法很容易适应于并行机上的计算。所以该文介绍了一种新的奇异值的方法。
R语言代码实现
SVD_new<-function(A){U<-diag(nrow(A))V<-matrix(NA,nrow = nrow(A),ncol = ncol(A))squre_epm<-1*10^-30squre_tau<-1*10^-24c<-0squre_A<-c()for (i in 1:nrow(A)) {squre_A[i]<-norm(as.matrix(A[i,]),"F")^2}squre_delta<- squre_epm*(norm(A,"F")^2)for (i in 1:(nrow(A)-1)) {for (j in (i+1):nrow(A)) {if (squre_A[j]<squre_delta){c<-c+1}else if(squre_A[i]<squre_delta){C<-c()C<-A[i,]A[i,]<-A[j,]A[j,]<-CD<-c()D<-U[i,]U[i,]<-U[j,]U[j,]<-D}else if((sum(t(A[i,])*A[j,])/(norm(as.matrix(A[i,]),"F")*norm(as.matrix(A[j,]),"F")))^2<squre_tau){if(squre_A[i]<squre_A[j]){C<-c()C<-A[i,]A[i,]<-A[j,]A[j,]<-CD<-c()D<-U[i,]U[i,]<-U[j,]U[j,]<-D}}else{alpha<-2*sum(t(A[i,])*A[j,])beta<-squre_A[i]-squre_A[j]gamma<-sqrt(alpha^2+beta^2)if(beta>0){cos_fi<-sqrt((gamma+beta)/(2*gamma))sin_fi<-alpha/(2*gamma*cos_fi)}else{sin_fi<-sqrt((gamma-beta)/(2*gamma))cos_fi<-alpha/(2*gamma*sin_fi)}w<-cos_fi*A[i,]+sin_fi*A[j,]A[j,]<--sin_fi*A[i,]+cos_fi*A[j,]A[i,]<-wsqure_w<-cos_fi^2*squre_A[i]+sin_fi^2*squre_A[j]+alpha*cos_fi*sin_fisqure_A[j]<-sin_fi^2*squre_A[i]+cos_fi^2*squre_A[j]-alpha*cos_fi*sin_fisqure_A[i]<-squre_wz<-cos_fi*U[i,]+sin_fi*U[j,]U[j,]<--sin_fi*U[i,]+cos_fi*U[j,]U[i,]<-z}}}#compute singular valuesi<-1sigma<-c()while(i<=nrow(A)&&norm(as.matrix(A[i,]),"F")>sqrt(squre_delta)){sigma[i]<-norm(as.matrix(A[i,]),"F")V[i,]<-A[i,]/norm(as.matrix(A[i,]),"F")i<-i+1}r<-i-1return(sigma)
}
该代码可以返回矩阵A的奇异值,并且该奇异值并不是按照从大到小的顺序进行排列的。解决了传统SVD方法计算的奇异值可能与矩阵的列不对应的问题。
参考文献
[1] Luk F T . Computing the Singular-Value Decomposition on the ILLIAC IV[J]. ACM Transactions on Mathematical Software (TOMS), 1980.
[2] Hapko A K . Inversion of matrices by the orthogonalization method.[J]. Methods in Enzymology, 2007, 427(427):139-54.
矩阵奇异值计算的一种新方法——基于R语言实现相关推荐
- dataframe数据标准化处理_对数据集做标准化处理的几种方法——基于R语言
数据集--iris(R语言自带鸢尾花包) 一.scale函数 scale函数默认的是对制定数据做均值为0,标准差为1的标准化.它的两个参数center和scale: 1)center和scale默认为 ...
- [性能优化]UITableView性能优化的一点感悟及计算UILabel高度的新方法
前言 在使用过程中发现,我们App的首页在快速滑动时会出现掉帧,以及在上拉加载更多时会抖动,因为首页模块是以前的同事写的,很多代码已不适应当前的需求,所以产生了优化的想法,优化主要分为以下几个方面: ...
- [性能优化]UITableView性能优化的一点感悟及计算UILabel高度的新方法 1
前言 在使用过程中发现,我们App的首页在快速滑动时会出现掉帧,以及在上拉加载更多时会抖动,因为首页模块是以前的同事写的,很多代码已不适应当前的需求,所以产生了优化的想法,优化主要分为以下几个方面: ...
- 同伦算法matlab程序,一种新的基于Matlab环境的同伦路径跟踪算法
MATLAB 第28卷第5期2007年5月 东北大学学报(自然科学版) V01.28.No.5 JournalofNortheasternUniversity(NaturalScience) May ...
- R实战| PCA、tSNE、UMAP三种降维方法在R中的实现
降维 在组学分析中,一般通过降维算法得到低纬度如二维或三维的新坐标数据,再结合可视化技术去展示样本的在新坐标的空间分布,接着加上统计检验结果证实整体组学水平上组间的差异性.降维算法有基于线性模型的PC ...
- 提出了一种新的基于一致性算法的直流微电网均流和均压二级控制方案 关键词:一致性算法;直流微电网;下垂控制;分布式二次控制
关键词:一致性算法;直流微电网;下垂控制;分布式二次控制;电压电流恢复与均分;非线性负载;MATLAB/Simulink;顶刊复现, 主题:提出了一种新的基于一致性算法的直流微电网均流和均压二级控制方 ...
- r library car_基础方法 | 用R语言完成量化论文全流程示例!附超详细R脚本
基础方法 ♪ Method R语言的优点 对于有一定数据分析基础的朋友们来说,要入门R语言并不是十分困难的.但是这毕竟是一门专业性很强的技术,我们当然希望投入精力掌握R语言之后能够得到相应的回报. 在 ...
- 基于wiki中文语料库的gensim模型使用方法以及R语言的调用方式
基于wiki中文语料库的gensim模型使用方法以及R语言的调用方式 近期想要整理下硬盘里的东西,看到本科毕设做情感倾向分析相关的数据,想起当时使用gensim训练词向量模型训练了超级久,决定将训练好 ...
- 基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用
Meta分析是针对某一科研问题,根据明确的搜索策略.选择筛选文献标准.采用严格的评价方法,对来源不同的研究成果进行收集.合并及定量统计分析的方法,最早出现于"循证医学",现已广泛应 ...
最新文章
- python绝对路径的区别_python学习:绝对路径和相对路径
- 优秀学生是如何高效利用时间的?
- java DOS 命令行代码
- oracle循环插入数据用于测试
- 高度随宽度适应的响应式方案
- WeChat:微信小程序设计流程注册完善、设计开发、审核发布之详细攻略
- 如何删除GIT中的.DS_Store
- Java分析股票涨跌走势
- Android笔记 消息机制handler+http之 网络图片浏览器demo
- asp,net 读写cookie(个人笔记)
- 微信的 Bug 差点让我被老板炒鱿鱼!
- k60的FTM模块:配置电机、编码器、舵机
- 系统与漏洞的风云人物
- options请求是什么?
- 计算机人要具备的基础知识!
- MicroStation:MDL常用API(持续更新)
- 【Win10】打开控制面板提示:操作系统当前的配置不能运行此应用程序
- 第6、7章 Java复习
- Python 教你哄女票开心
- w10你的计算机配置似乎是正确的,解决win10中出现“你的电脑未正确启动”的方法...