精华内容
下载资源
问答
  • matlab 奇异值分解

    千次阅读 2019-05-30 22:31:09
    1.奇异值分解 关于matlab中的diag函数(矩阵对角元素的提取和创建对角阵)关于matlab中的diag函数(矩阵对角元素的提取和创建对角阵)

    1.奇异值分解

    关于matlab中的diag函数(矩阵对角元素的提取和创建对角阵)

    展开全文
  • Matlab奇异值分解图像压缩-Untitled.m 我个人编写的一个小程序,希望对大家有帮助
  • 定义:设A是秩为r的m×n复矩阵,则存在m阶酉矩阵U和n阶酉矩阵V ,使得 ,成为A的奇异值分解。 其中, 式中 为A的全部非零奇异值。 三、图片压缩matlab程序 function A=svd_pic(a,yasuo) %a为图片的数据 %...

    一、奇异值的计算

    定义:设A是秩为r的m×n复矩阵,A^H*A的特征值为,   \lambda 1\geq \lambda 2\geq......\geq \lambda (r+1)\geq = ...=\lambda n=0

    则称 \sigma_{i} =\lambda _{i} ^{1/2} 为矩阵A的奇异值。其中\lambda 1\geq \lambda 2\geq......\geq \lambda r称为A的正奇异值,通常称之为奇异值。

    二、奇异值分解

    定义:设A是秩为r的m×n复矩阵,则存在m阶酉矩阵U和n阶酉矩阵V ,使得  A=U*D*V^{H},成为A的奇异值分解。

    其中D=\begin{bmatrix}\Sigma & O\\ O& O \end{bmatrix},    式中  \Sigma =(\sigma _{1}...\sigma _{r})  为A的全部非零奇异值。

    三、图片压缩matlab程序

    function A=svd_pic(a,yasuo)
    %a为图片的数据
    %yasuo为自定义的压缩比
    
    %分别读取图片数据的RGB值
    A1=double(a(:,:,1));
    A2=double(a(:,:,2));
    A3=double(a(:,:,3));
    %对其进行奇异值分解
    [u1,s1,v1]=svd(A1);
    [u2,s2,v2]=svd(A2);
    [u3,s3,v3]=svd(A3);
    %初始化新的s1 s2 s3
    bz1=0;
    bz2=0;
    bz3=0;
    %当新的奇异值>压缩比时退出
    for i=1:min(size(s1))
        S1=sum(diag(s1));
        S2=sum(diag(s2));
        S3=sum(diag(s3));
        bz1=bz1+s1(i,i);
        bz2=bz2+s2(i,i);
        bz3=bz3+s3(i,i);
        if bz1/S1 > yasuo && bz2/S2 > yasuo && bz3/S3 > yasuo
            break;
        end
    end
    %初始化新的A1 A2 A3
    A11=0;
    A22=0;
    A33=0;
    for j=1:i
        A11=A11+s1(j,j)*u1(:,j)*(v1(:,j)');
        A22=A22+s2(j,j)*u2(:,j)*v2(:,j)';
        A33=A33+s3(j,j)*u3(:,j)*v3(:,j)';
    end
    %整型
    A(:,:,1)=uint8(A11);
    A(:,:,2)=uint8(A22);
    A(:,:,3)=uint8(A33);
    
    
    

     

    函数的调用(注意:将要压缩的图片与函数文件放在同一路径之下)

    %命令行空间输入
    
    a=imread('ting.jpg'); %输入要读取的图片名
    imshow(a);%显示图片
    pause(3);显示3秒,之后进行压缩
    svd_pic(a,0.6)%对图片进行压缩
    imshow(a);%显示压缩之后的图片

    四、guide实例

    1、创建空的guide文件

    2、在【工具】中选择【菜单编辑器】,设置如图所示菜单。

    3、利用滑动条,静态文本和坐标区布置如下界面

    4、分别编写其控件回调函数的内容

    function varargout = sv(varargin)
    % SV MATLAB code for sv.fig
    %      SV, by itself, creates a new SV or raises the existing
    %      singleton*.
    %
    %      H = SV returns the handle to a new SV or the handle to
    %      the existing singleton*.
    %
    %      SV('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in SV.M with the given input arguments.
    %
    %      SV('Property','Value',...) creates a new SV or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before sv_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to sv_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
    
    % Edit the above text to modify the response to help sv
    
    % Last Modified by GUIDE v2.5 15-Jul-2018 16:21:00
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @sv_OpeningFcn, ...
                       'gui_OutputFcn',  @sv_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin && ischar(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
    
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
    
    
    % --- Executes just before sv is made visible.
    function sv_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to sv (see VARARGIN)
    
    % Choose default command line output for sv
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes sv wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = sv_OutputFcn(hObject, eventdata, handles) 
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Get default command line output from handles structure
    varargout{1} = handles.output;
    
    
    % --------------------------------------------------------------------
    function file_Callback(hObject, eventdata, handles)%文件菜单回调函数
    % hObject    handle to file (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    
    % --------------------------------------------------------------------
    function dakai_Callback(hObject, eventdata, handles)  %打开菜单回调函数
    % hObject    handle to dakai (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    global pic %设置图片信息为全局变量
    [filename,pathname]=uigetfile({'*.jpg','*.jpg';'*.png','*.png'},'打开');
    if isequal(filename,0)|| isequal(pathname,0)
        return;
    end
    name=[pathname,filename];
    pic=imread(name); %读取图片信息
    axes(handles.axes1);%设置当前坐标去为原图坐标区
    imshow(pic);%显示图片
    % --------------------------------------------------------------------
    function baocun_Callback(hObject, eventdata, handles)%保存菜单回调函数
    % hObject    handle to baocun (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    global A %设置压缩后图片信息为全局变量
    [filename,pathname]=uiputfile({'*.jpg','*.jpg';'*.png','*.png'},'打开');
    name=[pathname,filename]; 
    imwrite(A,name)  %保存压缩之后的图片信息
    
    % --- Executes on slider movement.
    function slider1_Callback(hObject, eventdata, handles)
    % hObject    handle to slider1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'Value') returns position of slider
    %        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
    global pic A
    yasuo=handles.slider1.Value; %设置yasuo的值为滑动条控件的值
    A=svd_pic(pic,yasuo);%调用图片压缩函数
    axes(handles.axes2)%设置当前坐标去为压缩图坐标区
    imshow(A)%显示图片
    
    % --- Executes during object creation, after setting all properties.
    function slider1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to slider1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: slider controls usually have a light gray background.
    if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
        set(hObject,'BackgroundColor',[.9 .9 .9]);
    end
    

    5、效果

    展开全文
  • 设A为mn阶矩阵,A’表示A的转置矩阵,A’A的n个特征值的非负平方根叫作A的奇异值。记为σi(A)。 这几天做实验涉及到奇异值分解...用到svd函数进行奇异值分解找主分量,结果MATLAB提示超出内存,后来想起还有个函数叫...

    设A为mn阶矩阵,A’表示A的转置矩阵,A’A的n个特征值的非负平方根叫作A的奇异值。记为σi(A)。
    这几天做实验涉及到奇异值分解svd(singular value decomposition),涉及到这样的一个问题,
    做PCA时候400幅图像拉成向量按列摆放,结果摆成了比如说10000
    400大小的矩阵,
    用到svd函数进行奇异值分解找主分量,结果MATLAB提示超出内存,后来想起还有个函数叫svds,看到别人用过,以为只是一个变体,没什么区别,就用上了,结果确实在预料之中。但是今天觉得不放心,跑到变量里面看了下,发现这个大的矩阵被分解成了
    三个10000
    6,66,4006大小的矩阵的乘积,而不是普通的svd分解得到的1000010000,10000400,400400大小的矩阵乘积,把我吓了一跳,都得到预期的结果,难不成这里还出个篓子?赶紧试验,
    发现任给一个M
    N大小的矩阵,都是被分解成了M6,66,N6大小的矩阵的乘积,为什么都会出现6呢?确实很纳闷。help svds看了一下,发现SVDS(A) 返回的就是svds返回的就是最大的6个特征值及其对应的特征行向量和特征列向量,
    还好,我们实验中是在svds得到列向量中再取前5个最大的列向量,这个与普通的svd得到的结果是一致的,虚惊一场。。。还得到了一些别的,比如
    改变这个默认的设置,
    比如用[u,d,v]=svds(A,10)将得到最大的10个特征值及其对应的最大特征行向量和特征列向量,
    [u,d,v]=svds(A,10,0)将得到最小的10个特征值及其对应的特征行向量和特征列向量,
    [u,d,v]=svds(A,10,2)将得到与2最接近的10个特征值及其对应的特征行向量和特征列向量。
    总之,相比svd,svds的可定制性更强。
    奇异值分解非常有用,对于矩阵A(m
    n),存在U(mm),V(nn),S(mn),满足A = US*V’。
    U和V中分别是A的奇异向量,而S是A的奇异值。
    AA’的正交单位特征向量组成U,特征值组成S’S,
    A’A的正交单位特征向量组成V,特征值(与AA’相同)组成SS’。

    展开全文
  • 特征值分解函数 eig格式 d = eig(A)%求矩阵A的特征值d,以向量形式存放d。d = eig(A,B)%A、B为方阵,求广义特征值d,以向量形式存放d。[V,D] = eig(A)%计算A的特征值对角阵D和特征向量V,使AV=VD成立。[V,D] = eig(A...

    特征值分解

    函数 eig

    格式 d = eig(A)         %求矩阵A的特征值d,以向量形式存放d。

    d = eig(A,B)       %A、B为方阵,求广义特征值d,以向量形式存放d。

    [V,D] = eig(A)      %计算A的特征值对角阵D和特征向量V,使AV=VD成立。

    [V,D] = eig(A,'nobalance')   %当矩阵A中有与截断误差数量级相差不远的值时,该指令可能更精确。'nobalance'起误差调节作用。

    [V,D] = eig(A,B)    %计算广义特征值向量阵V和广义特征值阵D,满足AV=BVD。

    [V,D] = eig(A,B,flag)   % 由flag指定算法计算特征值D和特征向量V,flag的可能值为:'chol' 表示对B使用Cholesky分解算法,这里A为对称Hermitian矩阵,B为正定阵。'qz' 表示使用QZ算法,这里A、B为非对称或非Hermitian矩阵。

    说明 一般特征值问题是求解方程: 解的问题。广义特征值问题是求方程: 解的问题。

    奇异值分解

    函数 svd

    格式 s = svd (X)          %返回矩阵X的奇异值向量

    [U,S,V] = svd (X)   %返回一个与X同大小的对角矩阵S,两个酉矩阵U和V,且满足= U*S*V'。若A为m×n阵,则U为m×m阵,V为n×n阵。奇异值在S的对角线上,非负且按降序排列。

    [U,S,V] = svd (X,0)   %得到一个“有效大小”的分解,只计算出矩阵U的前n列,矩阵S的大小为n×n。

    奇异值分解压缩图像

    clear all;

    close all;

    clc;

    a=imread('C:\Users\ranji\Desktop\rgb_image.jpg');

    imshow(mat2gray(a))

    [m n]=size(a);

    a=double(a);%r=rank(a);

    [s v d]=svd(a(:,:,1)); %取一个分量%re=s*v*d';

    re=s(:,:)*v(:,1:1)*d(:,1:1)';

    figure;

    imshow(mat2gray(re));

    imwrite(mat2gray(re),'C:\Users\ranji\Desktop\1.jpg')

    33d772756c030013e7c7715f1fb5240c.png

    re1=s(:,:)*v(:,1:20)*d(:,1:20)';

    figure;

    imshow(mat2gray(re));

    imwrite(mat2gray(re),'C:\Users\ranji\Desktop\2.jpg')

    90bd56a9c0729204aad4e08f0bf0824d.png

    re=s(:,:)*v(:,1:80)*d(:,1:80)';

    figure;

    imshow(mat2gray(re));

    imwrite(mat2gray(re),'C:\Users\ranji\Desktop\3.jpg')

    54fdb7cd2aac464cb5df3fdb0685c25e.png

    re=s(:,:)*v(:,1:150)*d(:,1:150)';

    figure;

    imshow(mat2gray(re));

    imwrite(mat2gray(re),'C:\Users\ranji\Desktop\4.jpg')

    af9159bf4c8fc7b1b32af754fd901f45.png

    不同特征值进行重构的效果。。。

    最后说一些奇异值分解的应用:

    1.图像压缩,正如上面的。

    2.噪声滤波。

    3.模式识别。因为svd就是提取主要的成分嘛。

    4.生物,物理,经济方面的一些统计模型的处理。

    展开全文
  • 特征值分解 函数 eig 格式 d = eig(A)%求矩阵A的特征值d,以向量形式存放d。 d = eig(A,B)%A、B为方阵,求广义特征值d,以向量形式存放d。 [V,D] = eig(A)%计算A的特征值对角阵D和特征向量V,使AV...
  • 看到一个博客园里讲解奇异值分解的博文,说的很清楚,加深了对SVD的理解,分享一下!强大的矩阵奇异值分解(SVD)及其应用摘录一些话如下:奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的...
  • 清华大学研究生高等数值分析计算实验奇异值分解SVD以及图像压缩matlab源程序代码_理学_高等教育_教育专区。第 1 部分方法介绍 奇异值分解(SVD)定理: 设 A ? R m......介绍奇异值分解及 Hankel 矩阵的相关理论,描述...
  • 前言:当A是方阵时,使用eig特征值分解和实验svd奇异值分解,有什么异同? (1)特征值分解:函数eig 格式:[V,D] = eig(A)%计算A的特征值对角阵D和特征向量V,使AV=VD成立。 注意:特征值分解时,使用eig,矩阵A...
  • 这个问题困扰我好久了,每次写都不知道用特征值分解好还是用奇异值分解好 计算特征向量不匹配 参考https://blog.csdn.net/weixin_43383558/article/details/83145867 https://zhuanlan.zhihu.com/p/43578482 ...
  • 本图文介绍了Matlab中有关奇异值与奇异值分解的操作。
  • SVD奇异值分解

    2020-12-24 22:01:42
    下面是Matlab奇异值分解压缩图片的程序: 注意图像的存储,不仅和像素值的多少有关,还和图像保存信息的复杂程度有关。有可能相同分辨率的图片大小不同,因为信息的保存方式不一样。 % 奇异值分解 nr = 2; %保留的秩...
  • 特征值分解 如果有一个矢量ν和一个常数λ,使得方阵A满足Aν=λν,则λ称为特征值,而v成为特征矢量 ... 奇异值分解 如果存在两个矢量u、v及一常数σ,使得矩阵A满足: Av=σu; A'u=σv;则σ称为...
  • 基于python 和 matlab的矩阵奇异值分解

    千次阅读 2018-06-18 18:54:30
      一个 mxn的矩阵H可以分解为 U(mxm) ,S(mxn) , V(nxn) 三个矩阵的乘积,这就是奇异值分解。S是一个对角矩阵,一般从大到...Matlab和python均提供奇异值分解的函数:Matlab: >> a = [1,2,3,4;2,3...
  • 内容:一个基于奇异值分解的数字水印源代码,其中可以实现混沌之乱和奇异之分解的数字水印嵌入clcclose allclear all% 保存开始时间start_time=cputime;iTimes=4; %置乱次数alpha=0.2;blocksize=8; % 设置块的大小% ...
  • 第15章、16章 奇异值分解和主成分分析第15、16章实际上都是围绕“数据降维”这一主题展开的。第16章 主成分分析(PCA)介绍了数据降维、压缩的基本思想及原理,具体的实现方法分为:特征值分解和奇异值分解。第15章...
  • (此部分与TXT第二部分相同)下载一个即可,对数据要求和每一句代码做了解释,很容易明白。希望能帮助到大家。运行后可得到奇异值结果图
  • matlab-矩阵的奇异值分解算法

    热门讨论 2008-09-02 11:07:19
    对输入的一个信号进行矩阵化,并对此矩阵进行奇异值分解,以完成对信号的分析和处理
  • matlab练习程序(奇异值分解压缩图像)  介绍一下奇异值分解来压缩图像。今年的上半年中的一篇博客贴了一篇用奇异值分解处理pca问题的程序,当时用的是图像序列,是把图像序列中的不同部分分离开来。这里是用的...
  • svd奇异值分解函数声明翻译 %SVD Singular value decomposition. SVD奇异值分解 % [U,S,V] = SVD(X) produces a diagonal matrix S, of the same % dimension as X and with nonnegative diagonal elements in % ...
  • (第1部分)奇异值分解SVD的理论以及对矩阵的压缩 降维 线性代数基础知识回顾 ...matlab奇异值分解 [U,V,D] = svd() (第2部分)Matlab对于图片以及视频的简单处理 视频转换为图片 ...
  • Matlab中的奇异值分解函数 SVD

    万次阅读 2014-10-17 15:00:22
    MATLAB中的svd与svds 设A为m*n阶矩阵,A'表示A的转置矩阵,A'*A的n个特征值的非负平方根叫作A的奇异值。记为σi(A)。
  • 奇异值:奇异值分解法是线性代数中一种重要的矩阵分解法,在信号处理、统计学等领域有重要应用。定义:设A为m*n阶矩阵,A'表示A的转置矩阵,A'*A的n个特征值的非负平方根叫作A的奇异值。记为σi(A)。如果把A‘*A的...
  • 博主github:https://github.com/MichaelBeechan ...代码下载:https://github.com/MichaelBeechan/Matlab-From-Zero-To-One %% Time:2019.6.4 %% Function:特征值与奇异值 %% 特征值的分解 %% 多重特征...
  •  基于Matlab,将奇异值分解(SVD)用于图像的压缩,并同步显示奇异值的大小分布曲线、奇异值个数对压缩率的影响。对奇异值分解用于图像压缩整个过程的关键步骤都有图像记录。  完整代码如下: %%%%%%%%%%%%%%%%%...
  • 式(4)是matlab的pinv()函数用来求伪逆的方法,即矩阵 的伪逆为: 总结 综上,奇异值分解的原理确实涉及到了很多线性代数和矩阵论的结论,奇异值定义的依据是半正定Hermit矩阵的特征值非负,而非零奇异值的个数的计算...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 290
精华内容 116
关键字:

matlab奇异值分解

matlab 订阅