matlab基础学习(5)之映射和正交基

一、映射

在matlab中,矢量y正交映射到矢量x上的定义如下:



Px(y) = <y, x>/(x^2)*x


对于长度为N的列矢量y映射到长度为N的列矢量x上的计算方法如下:


yx = (x' * y) * (x' * x) ^ (-1) * x


更一般的, 长度为N的列矢量y映射到M维的子空间的 N x M的矩阵x,计算方法如下:


yX = X * (X' * X)^(-1) * X' * y


正交映射,像任何的有限维线性操作符,可通过矩阵表示,对于N x M矩阵,计算方法为:


PX = X * (X' * X)^(-1) * X'


PX被称为映射矩阵。


子空间映射是一个例子,其中矩阵的功率线性代数记号非常重要。


代码实现如下:

>> X = [[1;2;3],[1;0;1]]

X =

     1     1
     2     0
     3     1

>> PX = X*(X'*X)^(-1) * X'

PX =

   0.66666666666667  -0.33333333333333   0.33333333333333
  -0.33333333333333   0.66666666666667   0.33333333333333
   0.33333333333333   0.33333333333333   0.66666666666667

>> y = [2; 4;6]

y =

     2
     4
     6

>> yX= PX* y

yX =

   2.00000000000000
   4.00000000000000
   6.00000000000000

>> 


二、正交基

在matlab中,函数orth()对于给定的矢量集空间计算正交基。

在matlab中输入help orth查看orth的使用:

>> help orth
 ORTH   Orthogonalization.
    Q = ORTH(A) is an orthonormal basis for the range of A.
    That is, Q'*Q = I, the columns of Q span the same space as 
    the columns of A, and the number of columns of Q is the 
    rank of A.
 
    Class support for input A:
       float: double, single
 
    See also svd, rank, null.


    Reference page in Help browser
       doc orth



>> 

以下通过对N=3的线性独立的基利用orth()进行正交化。

>> v1 = [1;2;3]

v1 =

     1
     2
     3

>> v2 = [1;-2;3]

v2 =

     1
    -2
     3

>> v1' * v2

ans =

     6

>> V=[v1,v2]

V =

     1     1
     2    -2
     3     3

>> W= orth(V)

W =

  -0.31622776601684   0.00000000000000
   0.00000000000000  -1.00000000000000
  -0.94868329805051   0.00000000000000

>> W= orth(V)

W =

  -0.31622776601684   0.00000000000000
   0.00000000000000  -1.00000000000000
  -0.94868329805051   0.00000000000000

>> W1=W(:,1)

W1 =

  -0.31622776601684
   0.00000000000000
  -0.94868329805051

>> W2=W(:,2)

W2 =

   0.00000000000000
  -1.00000000000000
   0.00000000000000

>> W1' * W2

ans =

   -3.157438761082832e-016

>> W1'*W1

ans =

   1.00000000000000

>> W2'*W2

ans =

     1

>> W'*W

ans =

   1.00000000000000  -0.00000000000000
  -0.00000000000000   1.00000000000000

>> x = 2 * v1 - 3 * v2

x =

    -1
    10
    -3

>> c1 = x' * W1

c1 =

   3.16227766016838

>> c2 = x' * W2

c2 =

   -10

>> xw = c1 * W1 + c2 * W2

xw =

  -1.00000000000000
  10.00000000000000
  -3.00000000000000

>> error = x - xw

error =

  1.0e-014 *

   0.13322676295502
                  0
   0.08881784197001

>> norm(error)

ans =

    1.601186416994689e-015

>> x = [1; 0; 0]

x =

     1
     0
     0

>> ca = x' * W1

ca =

  -0.31622776601684

>> c1 = x' * W1

c1 =

  -0.31622776601684

>> c2 = x' * W2

c2 =

    1.387778780781446e-016

>> xw = c1 * W1 + c2 * W2

xw =

   0.10000000000000
  -0.00000000000000
   0.30000000000000

>> error = x - xw

error =

   0.90000000000000
   0.00000000000000
  -0.30000000000000

>> norm(error)

ans =

   0.94868329805051

>> W* error
??? Error using ==> mtimes
Inner matrix dimensions must agree.

>> W'* error

ans =

  1.0e-015 *

  -0.16653345369377
  -0.09984698057522

>> 



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值