Matlab中矩阵的归一化和正交化函数

来源:互联网 发布:淘宝有卖寿衣 编辑:程序博客网 时间:2024/05/15 01:29

1、归一化:

首先按行归一化:

% Examples

A=[3 4;5 12];

[m n] = size(A);

% normalize each row to unit

for i = 1:m

    A(i,:)=A(i,:)/norm(A(i,:));

end


    按列归一化:

% normalize each column to unit

A=[3 4;5 12];

for i = 1:n

    A(:,i)=A(:,i)/norm(A(:,i));

end

    然而,上述代码最能实现功能,但并不是最优的,它只是一种对该过程的最佳理解代码。在Matlab中,for循环是一件非常费时间的结构,因此我们在代码中应该尽量少用for循环。由此,我们可以用repmat命令得到另一种更加简洁更加快速的代码,只是这种代码对于初学者理解起来比较费劲。可以看错是自己水平的一种进阶吧。

%  normalize each row to unit

A = A./repmat(sqrt(sum(A.^2,2)),1,size(A,2));

%  normalize each column to unit

A = A./repmat(sqrt(sum(A.^2,1)),size(A,1),1);


2、求矩阵正交基
使用方法 B = orth(A) 返回矩阵A的正交基,B的列与A的列具有相同的空间,B的列向量是正交向量,满足B'*B = eye(rank(A)),B的列数是A的秩。 应用举例A=[4 0 0;0 3 1;0 1 3]; B=orth(A) Q=B'*B B = 0 1.0000 0 -0.7071 0 -0.7071 -0.7071 0 0.7071 Q = 1.0000 0 0.0000 0 1.0000 0 0.0000 0 1.0000

1 0
原创粉丝点击