基于matlab的矩阵奇异值(SVD)分解

2023-11-11

目录

1 计算原理

 1.1求解V

1.2求解D

 1.3求解U

2 MATLAB程序

 2.1 注意


1 计算原理

  设矩阵A的大小m*n(m>n),A = UDV^{_{H}}

 1.1求解V

      首先求出A^{H}A的特征值及特征值u_{1},u_{2},u_{3},u_{4}...u_{r},0...0,对应的正交单位特征向量x_{1},x_{2},x_{3}...x_{n},。将A^{H}A的特征值从大到小按顺序排列,对应的正交特征向量也要按特征值的顺序排列。排列好的正交的特征向量即为V = [V1,V2],其中V1为非零特征值的特征列向量组成的矩阵,V2为零值的特征列向量组成矩阵。V的大小为n*n。

1.2求解D

D的形式为:

\begin{bmatrix}\Delta &0 \\ 0 & 0 \end{bmatrix}      大小为m*n。其中\Delta为一r*r的矩阵,其主对角线的元素为A^{H}A 的奇异值,对角线的元素按从大到小排列。即\Delta =diag {\delta _{1},\delta _{2},\delta _{3}...\delta _{r}}。

 1.3求解U

 U1 = AV1\Delta ^{-1}它是一个m*r的形的次酉矩阵。U2AA^{H}的零特征值对应的正交单位列向量组成的矩阵。U = [U1,U2],是一个m*m的矩阵。

2 MATLAB程序

function [U,D,V]=MySVD(A)

[m,n] = size(A);
B=A;
if m<n %仅适用于m>n的情况 如果m<n 现将矩阵转置再分解
    A = A'; 
end
[v,D] = eig(A'*A);%D特征值
 V = flip(v,2);
 si = size(D);
 n=0;
  D(D<1e-10)=0;%很关键的一个限制,将小于某一个数的特征值设为0 否则无法判断非零特征值的数量
 for i=1:si(1)
     if  D(i,i)>0
        n=n+1; 
     end
 end
  si = size(V);
  V1 = zeros(si(1),n);

%  for i=1:n
%       V1(:,i) = V(:,i); %非零特征值向量
%  end
  V1(:,1:n) = V(:,1:n); %非零特征值向量
  si = size(D); %分离零和非零特征向量
  if n==si(1)%无零特征值
       V = V1;
  else 
       V2 = V(:,n+1:si(1));
       V = [V1,V2];
  end
 h = zeros(n,n);%特征值对角矩阵
 for i=1:n
     h(i,i) = D(si(1)-i+1,si(1)-i+1)^0.5; %奇异值矩阵
 end
 h = inv(h);
 U1 = A*V1*h;
 

[v1,D1] = eig(A*A');%D特征值 V特征向量
si = size(D1);
m = zeros(si(1),1);
for i=1:si(1)
    m(i) = D1(i,i);
end
 m(m<1e-10)=0; %很关键的一个限制,将小于某一个数的特征值设为0,否则无法判断非零特征值的数量
%求U2
% m = eig(A*A'); %求A*A'特征值个数
si = size(m);
m = flip(m); %从大到小排列
n=0;%奇异值个数
 for i=1:si(1)%计算零特征向量
     if m(i)==0
         n = n+1;
     end
 end
 si = size(v1);
 U2 = zeros(si(1),n);
 U2 = v1(:,1:n);
 U = [U1,U2];
 D = zeros(size(A));
 si = size(m);
 for i=1:si(1)-n
     D(i,i) = m(i)^0.5;
 end
[m,n] = size(B);
if m<n %A = UDV'  A' = VD'U'
   u = zeros(size(U));
   u = U;
   U = V;
   V = u;
   D = D';
end

 2.1 注意

       使用MATLAB计算矩阵奇异值分解时,会遇到计算过程中MATLAB 的输出为零,但是查看变量时却不为零,是为一个远小于零的数。这个数极小,但是在变量中MATLAB却不认为等于零,会影响判断非零特征值和零特征值的个数,因此在程序中特定一个限定值,将MATLAB的特征值计算结果与限定值比较,小于限定值则认为特征值为零。产生这种结果的原因应该是浮点运算的精度问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于matlab的矩阵奇异值(SVD)分解 的相关文章

  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • Matlab的导入函数的范围是什么?

    我正在尝试将一些用 Matlab 编写的代码转换为独立的 编译的 Matlab 应用程序 然而 在出现一些奇怪的错误之后 我意识到代码大量使用了从路径中添加和删除的操作 以避免多次使用多个具有相同名称 但结果 计算不同 的函数这一事实 环顾
  • matlab中更快的插值方法

    我正在使用 interp1 来插值一些数据 temp 4 30 4 rand 365 10 depth 1 10 dz 0 5 define new depth interval bthD min depth dz max depth ne
  • 禁止 MATLAB 自动获取焦点[重复]

    这个问题在这里已经有答案了 我有以下问题 在我的 MATLAB 代码中 我使用如下语句 figure 1 更改某些数据的目标数字 问题是 在此 MATLAB 之后 系统将焦点集中在具有该图形的窗口上 当我在后台运行一个大脚本并尝试在计算机上
  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and
  • FMINCON 的替代方案

    除了 fmincon 之外还有其他更快 更高效的求解器吗 我正在使用 fmincon 来解决特定问题 但对于中等大小的向量变量来说 我的内存不足 我也没有任何超级计算机或云计算选项可供使用 我知道任何替代解决方案仍然会耗尽内存 但我只是想看
  • MATLAB - 通过垂直连接子矩阵重新排列矩阵

    我在执行以下任务时遇到问题 假设一个 3x6 矩阵 A 0 2787 0 2948 0 4635 0 8388 0 0627 0 0435 0 6917 0 1185 0 3660 0 1867 0 2383 0 7577 0 6179 0
  • 轴标注问题

    通过运行我编写的以下 matlab 函数 可以互换图中的 x 轴和 y 轴 谁能告诉我问题出在哪里或者帮我解决它吗 预先感谢您的任何帮助 function axislabeling n x 1 1 n y 1 1 n z zeros n n
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 如何在Matlab中将图像从笛卡尔坐标更改为极坐标?

    我正在尝试将图像的像素从 x y 坐标转换为极坐标 但我遇到了问题 因为我想自己编写该函数 这是我到目前为止所做的代码 function newImage PolarCartRot read and show the image image
  • MATLAB 中的逻辑数组与数值数组

    我正在比较两个二进制数组 我有一个数组 其中值可以是一或零 如果值相同则为 1 如果不同则为零 请注意 我正在做检查之外的其他事情 因此我们不需要进入矢量化或代码的性质 在 MATLAB 中使用数值数组和逻辑数组哪个更有效 Logical
  • 基本矩阵错误?

    我试图通过扫描从相机拍摄的两个图像 检测图像中的特征 匹配它们 创建基本矩阵 使用相机内在函数计算基本矩阵 然后分解它以找到旋转和翻译 这是matlab代码 I1 rgb2gray imread 1 png I2 rgb2gray imre
  • matlab中优先级队列的实现方法

    matlab中有没有提供minpriorityqueue功能的库 import java util PriorityQueue import java util public class MyQueue Comparator
  • Matlab 中的 3D 堆叠条形图

    我想在一个图中绘制多个堆叠条形图 detached 条形图 例如 准确地想象一下bar http mathworks com help matlab ref bar3 detached png绘图 但堆叠在一起 而不是单一颜色 Set up
  • 在 MATLAB 中验证输入的最佳实践

    在验证 MATLAB 函数中的输入时 什么时候使用 inputParser 比使用断言更好 或者还有其他更好的工具可用吗 我个人发现使用 inputParser 不必要地复杂 对于 Matlab 始终需要检查 3 项内容 存在 类型和范围
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • 计算向量的导数

    我有以下函数 维维亚尼曲线 Phi t cos t 2 cos t sin t sin t 只需检查它是否有效 s linspace 0 T 1000 plot3 cos s 2 cos s sin s sin s 如何推导函数Phi 可能
  • 使用 scipy.io 将 python pandas dataframe 转换为 matlab 结构

    我正在尝试使用 scipy io 将 pandas 数据帧保存到 matlab mat 文件 我有以下内容 array1 np array 1 2 3 array2 np array a b c array3 np array 1 01 2
  • Matlab 错误:()-索引必须出现在索引表达式的最后

    我有这段代码 想要在制表符分隔的 txt 文件中写入一个数组 fid fopen oo txt wt for x 1 length s fprintf fid s t n s x 1 end fclose fid 但我收到此错误 Error
  • 可以避免迭代元胞数组时的“s{1} 烦恼”吗?

    The s 1 标题的 烦恼 指的是下面的 for 块中的第一行 for s some cell array s s 1 unpeel the enclosing cell do stuff with s end This s s 1 业务

随机推荐

  • xShell操作Linux的常用命令

    我们需要在本地连接Linux服务器 可以用winscp来进行连接 优点是图形化界面 文件的层级关系类似于Windows 更容易操作 也可以使用xShell来进行连接 查看和操作文件就需要使用Linux命令 文件的层级关系没有前者直观 但作为
  • 力扣刷题-210.课程表Ⅱ、图的表示方式、BFS

    一 图的基本概念 定义和基本术语 图是由节点以及连接这些节点边组成 无向图 每条边连接的两个节点可以双向访问 有向图 每条边连接的两个节点只能单向访问 出度 有向图的某个节点作为起点的次数和 入度 有向图的某个节点作为终点的次数和 权重 图
  • springMVC 绑定前台穿来的时间类型数据

    当前台传来的数据 对时间类型的数据其实是无法绑定的 解决办法1 DataTimeFormat pattern yyyy MM dd 标注在实体类的时间字段上 解释 这个注解的支持是来自
  • Cmake简介和简单使用方法

    cmake 简介 CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 能测试编译器所支持的C 特性 类似UNIX下的automake CMak
  • 定义字符串

    目录 一 什么是字符串 二 定义字符串的具体格式 三 求字符数组和字符串长度比较 一 什么是字符串 所谓字符串本质上就是以 0 作为结尾的特殊字符数组 二 定义字符串的具体格式 1 char 字符串名称 字符串长度 字符串所含元素 注意点
  • LabView的简单例题,尽量做到一题多解

    Question 1 亮灯 难度 以组合框为输入条件 分别完成亮红灯 亮黄灯 亮绿灯 灯全灭 Question 2 波形图和波形图表的区别 难度 在波形图和波形图表中显示一个sin函数 sin函数没有定性要求 注意 波形图表输入是数字 而波
  • svn 命令行操作

    文章目录 help checkout help svn help update up checkout co checkout checkout co svn co URL username xxx password xxx svn co
  • IMX6学习记录(10)-挂载SD卡,数据掉电存储

    上面是我的微信和QQ群 欢迎新朋友的加入 目前使用的文件系统是打包成镜像文件的 通过UBOOT挂载镜像 在RAM里面运行起来了 这有个问题 数据不会被存储下来 掉电就会丢失 1 挂载SD卡 fdisk l mount dev mmcblk0
  • Java垃圾回收器

    Java垃圾回收器 1 GC分类与性能指标 1 1 垃圾回收器概述 1 2 垃圾回收器分类 1 2 1 按照线程分 1 2 2 按照工作模式分 1 2 3 碎片处理方式分 1 2 4 工作的内存区间分 1 3 评估GC的性能指标 1 4 吞
  • 另一个Kubernetes(k8s)指南

    从头开始学习Kubernetes Photo by Bobby Burch on Unsplash 近年来 Kubernetes k8s 的受欢迎程度激增 如果您要部署许多容器化的应用程序 那么无论在私有云还是公共云环境中 k8无疑都是当前
  • easyx图形库-----贴图技巧之双缓冲消除闪屏(BeginBatchDraw 与 EndBatchDraw)

    目录 前言 案例1 作图时闪屏 案例2 贴图时闪屏 双缓冲解决闪屏问题 原理 前言 学了easyx图形库的朋友们都知道 我们可以在easyx图形库上面画出连续运动的图片 或者通过贴图的方式把每一帧图片连起来达到动态效果 但是我们每次贴完图片
  • 【react从入门到精通】React父子组件通信方式详解(有示例)

    文章目录 人工智能福利文章 前言 React技能树 通过 props 实现父子组件通信 通过 state 实现父子组件通信 通过回调函数实现父子组件通信 使用 React Context 实现组件通信 总结 写在最后 人工智能福利文章 分享
  • 参考文献期刊首字大写_干货

    解读论文写作与发表策略 助您成功发表 关注 在论文的写作过程中 参考文献必不可少 参考文献的引用体现作者对所研究领域的熟悉程度 作者的学术眼光以及对他人学术成果的尊重 根据GB T 7714 2015 信息与文献 参考文献著录规则 参考文献
  • 给大家排个雷,ensp中nat不成功原因

    用ensp做网络设计 nat一直不成功 内网ping外网能通 但是抓包显示地址没有转换成功 检查了所有配置没问题 最后将Router换成了AR1 配置不变 实验成功 建议大家以后做实验不要用Router
  • Docker中搭建FastDFS文件系统(多图)

    关于FastDFS FastDFS 是以 C 语言开发的一项开源轻量级分布式文件系统 他对文件进行管理 主要功能有 文件存储 文件同步 文件访问 文件上传 下载 等 特别适合以文件为载体的在线服务 如 图片网站 视频网站等 外话 FastD
  • 一种排序方法 C#

    int array new int 10 3 2 4 90 50 20 34 22 49 int newArray new int array Length int Min 100000000 for int i 0 i lt array
  • 【习题之Python篇】习题4

    1 输入一个字符串 内容是个带小数的实数 例如123 45 输出是两个整数变量x和y x是整数部分123 y是小数部分45 s input 输入带小数的数字 s s split print int s 0 是整数部分 int s 1 是小数
  • 大模型技术实践(三)|用LangChain和Llama 2打造心灵疗愈机器人

    上期文章我们实现了Llama 2 chat 7B模型的云端部署和推理 本期文章我们将用 LangChain Llama 2 的架构打造一个定制化的心灵疗愈机器人 有相关知识背景的读者可以直接阅读 实战 部分 01 nbsp 背景 1 1 微
  • Linux高性能服务器编程|阅读笔记:第1章 - TCP/IP协议族

    简介 Hello 非常感谢您阅读海轰的文章 倘若文中有错误的地方 欢迎您指出 昵称 海轰 标签 程序猿 C 选手 学生 简介 因C语言结识编程 随后转入计算机专业 获得过国家奖学金 有幸在竞赛中拿过一些国奖 省奖 已保研 学习经验 扎实基础
  • 基于matlab的矩阵奇异值(SVD)分解

    目录 1 计算原理 1 1求解V 1 2求解D 1 3求解U 2 MATLAB程序 2 1 注意 1 计算原理 设矩阵A的大小m n m gt n A UD 1 1求解V 首先求出的特征值及特征值 对应的正交单位特征向量 将的特征值从大到小