2.2 线性相关
给定向量组V = [v1, v2,…, vq],如果存在不全为零b1、b2、…、bq使得下式成立:
则称向量组V线性相关(linear dependence);否则,V线性无关(linear independence)。如图2.7(a)所示,线性无关v1和v2构造一个二维平面H,v1和v2常被称作基底向量(basis vector)。
在二维平面H内,â用v1和v2表示,从而v1、v2和â线性相关。图2.7(b)中,a不能用v1和v2表示,从而v1、v2和a线性无关。如果,â是a在H平面内投影,a中不能被v1和v2表达的部分,即a - â,垂直于H平面。
图2.7 线性相关与线性无关
图2.8(a)给出的平面内,x方向单位向量为i = [1, 0]T,y方向单位向量为j = [0, 1]T。图2.8(b)给出空间中,x方向单位向量为i = [1, 0, 0]T,y方向单位向量为j = [0, 1, 0]T,z方向单位向量为k = [0, 0, 1]T。i、j和k这三个向量为相互垂直基底向量,也叫作正交基(orthogonal basis);因为i、j和k这三个向量正交且模为1,因此它们也叫作标准正交基。如图2.8(c)和(d)所示,在平面内、三维空间中,数据可以通过这些空间基底向量表达。
图2.8 向量直角坐标系
下面举个例子,RGB(red green blue)三原色模型中任意一个颜色看成是以下三个基底向量构成线性组合。v1代表红色,v2代表绿色,v3代表蓝色。
v1、v2和v3这三个基底向量,模均为1,而且相互垂直,如图2.9(a)所示。
图2.9 三原色空间
图2.9(b)展示,v1([1, 0, 0] red)、v2([0, 1, 0] green)和v3([0, 0, 1] blue)这三个基底向量任意两个组合构造向量w1([1, 1, 0] yellow)、w2([1, 0, 1] magenta)和w3([0, 1, 1] cyan)。w1、w2和w3也可以是三维空间基底向量;印刷四分色模式(CMYK color model)就引入w1、w2和w3这三个基底向量。此外,CMYK还有一个维度,灰度。
从RGB模式向CMYK模式转换是一种基底转换。图2.10展示v1、v2和v3这三个基底向量构造更多空间向量。
图2.10 三原色空间向量分布
除向量以外,在v1、v2和v3这三个正交向量构造空间中,数据点也是一种重要数据展现形式,图2.11中数据点颜色对应即空间点位置。有这一节内容作为基础,本章下两节要从数据和向量投影两个角度研究数据矩阵。以下代码获得图2.9~图2.11。
图2.11 v1、v2和v3这三个基底向量构造空间数据点
B4_Ch1_2.m close all; clear all; clc loc = [0,0,0]; figure(1) x_i = [1,0,0]; y_j = [0,1,0]; z_k = [0,0,1]; plot_vector(loc,x_i); hold on plot_vector(loc,y_j); plot_vector(loc,z_k); fig_dec figure(2) plot_vector(loc,x_i); hold on plot_vector(loc,y_j); plot_vector(loc,z_k); plot_vector(loc,x_i+y_j); hold on plot_vector(loc,x_i+z_k); plot_vector(loc,y_j+z_k); fig_dec figure(3) r = 0.75; [x,y,z] = Spherical_grid(r); subplot(1,2,1) x = x(:); y = y(:); z = z(:); hold on for i = 1:length(x) plot_vector(loc,[x(i),y(i),z(i)]) end fig_dec r = 1; [x,y,z] = Spherical_grid(r); subplot(1,2,2) x = x(:); y = y(:); z = z(:); hold on for i = 1:length(x) plot_vector(loc,[x(i),y(i),z(i)]) end fig_dec steps = [0:0.1:1]; [X,Y,Z] = meshgrid(steps,steps,steps); figure(4) scatter3(X(:),Y(:),Z(:),8,[X(:),Y(:),Z(:)],'filled'); hold on fig_dec view(115,20); function [x_grid,y_grid,z_grid] = Spherical_grid(r) theta = 0:pi/25:pi/2; phi = 0:pi/25:pi/2; [theta,phi] = meshgrid(theta,phi); x_grid = r.*sin(theta).*cos(phi); y_grid = r.*sin(theta).*sin(phi); z_grid = r.*cos(theta); end function plot_vector(loc,vec) h = quiver3(loc(1),loc(2),loc(3),... vec(1),vec(2),vec(3),'color',vec); h.AutoScale = 'off'; h.ShowArrowHead = 'off'; end function fig_dec daspect([1,1,1]) box off; view(135,20); axis tight; grid on xticks([0:0.5:1]); yticks([0:0.5:1]); zticks([0:0.5:1]) xlabel('x, red'); ylabel('y, green'); zlabel('z, blue') xlim([0,1]);ylim([0,1]);zlim([0,1]); grid off hAxis = gca; hAxis.XRuler.FirstCrossoverValue = 0; % X crossover with Y axis hAxis.YRuler.FirstCrossoverValue = 0; % Y crossover with X axis hAxis.ZRuler.FirstCrossoverValue = 0; % Z crossover with X axis hAxis.ZRuler.SecondCrossoverValue = 0; % Z crossover with Y axis hAxis.XRuler.SecondCrossoverValue = 0; % X crossover with Z axis hAxis.YRuler.SecondCrossoverValue = 0; % Y crossover with Z axis end