MATLAB金融风险管理师FRM(高阶实战)
上QQ阅读APP看书,第一时间看更新

2.2 线性相关

给定向量组V = [v1, v2,…, vq],如果存在不全为零b1b2、…、bq使得下式成立:

则称向量组V线性相关(linear dependence);否则,V线性无关(linear independence)。如图2.7(a)所示,线性无关v1v2构造一个二维平面Hv1v2常被称作基底向量(basis vector)。

在二维平面H内,âv1v2表示,从而v1v2â线性相关。图2.7(b)中,a不能用v1v2表示,从而v1v2a线性无关。如果,âaH平面内投影,a中不能被v1v2表达的部分,即a - â,垂直于H平面。

图2.7 线性相关与线性无关

图2.8(a)给出的平面内,x方向单位向量为i = [1, 0]Ty方向单位向量为j = [0, 1]T。图2.8(b)给出空间中,x方向单位向量为i = [1, 0, 0]Ty方向单位向量为j = [0, 1, 0]Tz方向单位向量为k = [0, 0, 1]Tijk这三个向量为相互垂直基底向量,也叫作正交基(orthogonal basis);因为ijk这三个向量正交且模为1,因此它们也叫作标准正交基。如图2.8(c)和(d)所示,在平面内、三维空间中,数据可以通过这些空间基底向量表达。

图2.8 向量直角坐标系

下面举个例子,RGB(red green blue)三原色模型中任意一个颜色看成是以下三个基底向量构成线性组合。v1代表红色,v2代表绿色,v3代表蓝色。

v1v2v3这三个基底向量,模均为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)。w1w2w3也可以是三维空间基底向量;印刷四分色模式(CMYK color model)就引入w1w2w3这三个基底向量。此外,CMYK还有一个维度,灰度。

从RGB模式向CMYK模式转换是一种基底转换。图2.10展示v1v2v3这三个基底向量构造更多空间向量。

图2.10 三原色空间向量分布

除向量以外,在v1v2v3这三个正交向量构造空间中,数据点也是一种重要数据展现形式,图2.11中数据点颜色对应即空间点位置。有这一节内容作为基础,本章下两节要从数据和向量投影两个角度研究数据矩阵。以下代码获得图2.9~图2.11。

图2.11 v1v2v3这三个基底向量构造空间数据点

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