matlab 연습 프로그램 (3 단계 장 량 T - QR 분해)

10651 단어 matlab
여기 서 이른바 장 량 과 리 만 에 게 있 는 장 량 은 다르다. 그 장 량 은 물리 적 으로 더 많이 쓰 이 고 이 장 량 은 행렬 의 확장 이다.예 를 들 어 0 단계 장 량 은 수 이 고 1 단계 장 량 은 벡터 이 며 2 단계 장 량 은 행렬 이 고 3 단계 4 단 계 는 더욱 높 은 차원 의 수의 집합 이다.이 분 야 는 아직 수학 적 으로 새로운 것 이다. 행렬 의 질 서 를 우 리 는 모두 어떻게 구 하 는 지 알 고 있 지만 3 차원 의 장 량 이나 더 높 은 차원 의 장 량 의 질 서 는 현재 수학 적 으로 도 결과 가 없다.장 량 의 기이 한 값 분해 에 대해 서도 HOSVD 와 같이 일찍 처 리 했 을 뿐 이 라 고 생각 합 니 다. 저 는 이것 이 완전히 적합 하지 않다 고 생각 합 니 다. 새로운 분해 알고리즘 은 노 미 도 연구 하지 못 했 습 니 다. 2 차원 에서 다 차원 까지 기초 이론 이 많이 적용 되 지 않 았 습 니 다. 두 개의 장 량 곱 하기 와 같은 기초 알고리즘 이 지금 은 있 지만 통용 되 지 않 는 다 고 생각 합 니 다.계속 개선 해 야 한다.
다음은 제 가 본 논문 의 장 량 상승 과 분해 방법 입 니 다. 그녀의 이론 도 정확 하지 않 을 수 있 지만 이런 새로운 분 야 는 모두 가 탐색 하고 있 습 니 다.
논문 은 여기 있 습 니 다. 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 의 코드 는 사실 매우 유사 하 다.
main.m
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);

논문 7 페이지 3.3 의 그 공식
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_n3
        A{i}=a(:,:,i);
        B{i}=b(:,:,i);
    end

    index_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;
    end
    
    s=cell(a_n3,a_n3);
    for i=1:a_n3
        for j=1:a_n3
            if i==j
                s{i,j}=A{1};
            end       
            if j>i
                s{i,j}=A{index_up(j-i)};
            end       
            if j<i
                s{i,j}=A{index_down(i-j+1)};
            end      
        end   
    end
    
    re=cell(a_n3,1);
    for i=1:a_n3
        re{i}=zeros(a_n1,b_n2);
    end

    for i=1:a_n3
        for j=1:a_n3
            for k=1:1
                re{i,k}=re{i,k}+s{i,j}*B{j,k};
            end
        end    
    end

    for i=1:a_n3
        c(:,:,i)=re{i};        
    end
    
end

transpos.m  장 량 구 옮 김, 논문 10 페이지 example 3.15 의 공식
function a=transpos(b)    
    [n1 n2 n3]=size(b);
    a=zeros(n2,n1,n3);
    for i=1:n3
        a(:,:,i)=b(:,:,i)';
    end
end

좋은 웹페이지 즐겨찾기