转自:http://www.cnblogs.com/tiandsp/archive/2012/10/31/2747971.html

这里所谓的张量和黎曼那里的张量是不一样的,那个张量更多的用在物理上,这个张量就是矩阵的扩展。比如零阶张量就是数,一阶张量就是向量,二阶张量就是矩阵,三阶四阶就是更高维的数的集合。这个领域现在在数学上还都是很新的东西,矩阵的秩我们都知道怎么求,但是三维的张量或更高维的张量的秩现在在数学上也没有结果。至于张量的奇异值分解也只是也只是用很早的如用HOSVD来处理,我感觉这并不完全合适,新的分解算法就连老美也都没研究出来,从二维到多维的确有很多基础的理论都不适用了,像两个张量相乘这样基础的算法,现在虽然有,但我感觉也不是通用的,还要继续改进。

  下面就是我看的一篇论文的张量相乘和分解方法,她的理论也可能不正确,不过这种新领域,大家都是在探索。

  论文在这里:http://www.cs.tufts.edu/tech_reports/reports/2010-5/report.pdf,他主要介绍的是T-svd,T-svd分解后合成的只是原张量的一个近似结果,而T-QR就能得到一个准确的结果,所以我这里用了T-QR。以Matlab角度来看T-SVD和T-QR的代码其实是很类似的。

首先是两个函数的代码,放在.m文件中,文件名就是默认文件名(函数名)

1   mul.m

function c=mul(a,b)[a_n1 a_n2 a_n3]=size(a);[b_n1 b_n2 b_n3]=size(b);c=zeros(a_n1,b_n2,a_n3);A=cell(a_n3,1);B=cell(b_n3,1);for i=1:a_n3A{i}=a(:,:,i);B{i}=b(:,:,i);endindex_up=zeros(1,a_n3);index_down=zeros(1,a_n3);for i=1:a_n3    index_up(i)=a_n3-i+1;index_down(i)=i;ends=cell(a_n3,a_n3);for i=1:a_n3for j=1:a_n3if i==js{i,j}=A{1};end       if j>is{i,j}=A{index_up(j-i)};end       if j<is{i,j}=A{index_down(i-j+1)};end      end   endre=cell(a_n3,1);for i=1:a_n3re{i}=zeros(a_n1,b_n2);endfor i=1:a_n3for j=1:a_n3for k=1:1re{i,k}=re{i,k}+s{i,j}*B{j,k};endend    endfor i=1:a_n3c(:,:,i)=re{i};        endend

2  transpos.m

function a=transpos(b)    [n1 n2 n3]=size(b);a=zeros(n2,n1,n3);for i=1:n3a(:,:,i)=b(:,:,i)';end
end

最后是在matlab命令行中的代码:

clear all;
close all;
clc;
n1=3;
n2=3;
n3=3;A(:,:,1)=[10 23 34;43 55 63;72 85 96];
A(:,:,2)=[24 17 35;52 36 55;81 94 75];
A(:,:,3)=[65 16 52;21 47 78;92 33 43];
%A=imread('s.jpg');D=fft(A,[],3);for i=1:n3[q r]=qr(D(:,:,i));%[u s v]=svd(D(:,:,i));Q(:,:,i)=q;R(:,:,i)=r;%S(:,:,i)=s;
end
Q=ifft(Q,[],3);
R=ifft(R,[],3);
%S=ifft(S,[],3);B(:,:,1)=eye(n1,n2);
B(:,:,2)=zeros(n1,n2);
B(:,:,3)=zeros(n1,n2);%c=mul(mul(U,S),transpos(V));
c=mul(Q,R);c

matlab练习程序(三阶张量T-QR分解)相关推荐

  1. matlab qr分解作用,MATLAB论文_矩阵的QR分解及其MATLAB实现.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspmatlab MATLAB论文_矩阵的QR分解及其MATLAB实 ...

  2. 最优化方法——QR分解

    目录 系列文章目录 一.问题 二.实验思路综述 1.实验工具及算法 2.实验数据 3.实验目标 4.实验步骤 三.相关线性代数知识导入 1.线性无关与基 2.标准正交 3.Gram-Schmidt(正 ...

  3. QR算法的Matlab 程序,三种实现矩阵QR分解的算法与程序

    To learn, to share, to debate, then comes progress. ------------------------------------------------ ...

  4. matlab实现qr分解

    二维平面的qr分解 设列向量 v1=[−12],v2=[68]v_1=\begin{bmatrix} -1\\ 2 \end{bmatrix},v_2=\begin{bmatrix} 6\\ 8 \e ...

  5. qr分解实验 matlab,QR分解与最小二乘

    主要内容: 1.QR分解定义 2.QR分解求法 3.QR分解与最小二乘 4.Matlab实现 一.QR分解 R分解法是三种将矩阵分解的方式之一.这种方式,把矩阵分解成一个正交矩阵与一个上三角矩阵的积. ...

  6. 双步位移求解特征值matlab,数值分析——带双步位移的QR分解求特征值算法

    C语言实现数值分析中带双步位移的QR分解求特征值算法. 数 值 分 析(B) 大 作 业(二) 1.算法设计: ①矩阵的拟上三角化: 对实矩阵A进行相似变换化为拟上三角矩阵A(n 1),其变换矩阵采用 ...

  7. 代码:matlab求QR分解,QL分解,LQ分解和RQ分解。

    Matlab的命令里只有QR分解,如何求QL分解和LQ,RQ分解? LQ分解:  [Q 1,R 1]= qr (H');  H=(Q 1*R 1)'=R 1' *Q 1'=L*Q;  所以下三角阵L= ...

  8. matlab中qr函数 QR分解

    实数矩阵A的QR分解是把A分解为 A = QR 这里的Q是正交矩阵(意味着QTQ = I)而R是上三角矩阵. 类似的,我们可以定义A的QL, RQ和LQ分解. 更一般的说,我们可以因数分解复数m×n矩 ...

  9. 用豪斯霍尔德(Householder)变换进行矩阵的QR分解,及其Matlab和OpenCV实现

    1.豪斯霍尔德变换 一般地,对给定的mmm维向量aaa,考虑分块 a=[a1a2]a=\left[ \begin{matrix} {{a}_{1}} \\ {{a}_{2}} \\ \end{matr ...

最新文章

  1. 新加坡国立大学李千骁:动力学系统与监督学习的关系探索
  2. Linux命令之at
  3. pycharm写python字典_pythonpycharm安装基础语法
  4. 获取客户端网卡MAC地址和IP地址的几种方法(一)
  5. 开源开发工具_3个开源行为驱动的开发工具
  6. _DataStructure_C_Impl:稀疏矩阵三元组
  7. memcached高速缓存学习笔记002---telnet操作memcached
  8. HTML表格修改字段,HTML表格 – 更改列中单个单元格的宽度
  9. BZOJ 1013 球形空间产生器(高斯消元)
  10. RSA加密算法理解(整理自网络)
  11. Docker与容器化-03-使用Dockerfile创建镜像
  12. 181024词霸有道扇贝每日一句
  13. 语义分割学习——残差网络ResNet
  14. batch_size详解
  15. 计算机音乐演奏jojo,【FF14】诗人演奏用 il vento d'oro(动画《JOJO的奇妙冒险 黄金之风》插曲)...
  16. 我的后台Java面经(阿里、腾讯、头条、京东、IBM等)
  17. 最后冲刺—信息系统开发与管理
  18. 2016团体程序设计天梯赛-决赛-部分题解
  19. 零基础想学习插画?入门从这里开始
  20. 域名是否被微信、qq拦截?怎么查询

热门文章

  1. 从EXCEL文件将数据导入数据库的向导程序设计!
  2. SilverLight 4页面跳转大全(转载)
  3. 用inno做setup遇到的一些问题及解决方法
  4. ADSL断流问题分析
  5. PythonDay8
  6. mysql查看数据库和表的占用空间大小
  7. sharepoint 2010 使用WinForm获取 SPSite对象
  8. utf-8 编码出现空白
  9. Elasticsearch未授权访问+Kibana任意操作
  10. vue生命周期(列表详解)