目录
总结
前言
一、spike- free矩阵是什么?
具体参看文章
概括为
二维直观理解:
2x2的矩阵A,乘以单位圆的任意向量(坐标),得到一个向量(坐标)。所有的坐标构成的区域1.
二、思考过程
1.整体思路
三维图形,先取到单位球的任意/均匀/表面的坐标(x,y,z)和枚举/瞎蒙/试错的3x3矩阵相乘,得到的点,用散点图,连线表示出来,通过观察法,判断该矩阵是否为Spike-free matrice
需要用到的一些绘图函数:
散点图:scatter3
2.具体思路
(一)取单位球的点
方法一:数学分析课本上的
r=[0:1/200:1];
a1=[0:pi/200:pi];
a2=[0:pi/200:pi];
a1=[0:2pi/200:2pi];
x=r.*cos(a1);
y=r.*sin(a1).*cos(a2);
z=r.*sin(a1).*sin(a2).*cos(a3);
%具体变量不一样,笔者改天重写的,就不做统一了
X1=[0:pi/200:pi];
Y1=[0:pi/200:pi];
Z1=[0:2*pi/200:2*pi];
R=[-1:2/200:1];
[A1,A2,A3]=meshgrid(X1,Y1,Z1);
[R,R,R]=meshgrid(R1,R1,R1);
X=R.*cos(A1);
Y=R.*sin(A1).*cos(A2);
Z=R.*sin(A1).*sin(A2).*cos(A3);
meshgird只能三个参数,故让R和自己meshgrid一次,这一步骤相当于在三维空间把各种组合了一遍
方法二:
用sphere函数,最初只知道能画出单位球,取不来点,笔者help scatter看例子是可以的,例子如下
figure
[X,Y,Z] = sphere(16);
x = [0.5*X(:); 0.75*X(:); X(:)];
y = [0.5*Y(:); 0.75*Y(:); Y(:)];
z = [0.5*Z(:); 0.75*Z(:); Z(:)];
scatter3(x,y,z)
(二)坐标变换和乘法
只举一个矩阵,乘法就直接用分量表示。笔者最初实验的是1,2,3,辅以正负号。
A=[-1,2,3;1,-2,3;1,2,-3];
x=-X+2*Y+3*Z;
y=X-2*Y+3*Z;
z=X+2*Y-3*Z;
x1=(x+abs(x))/2;
y1=(y+abs(y))/2;
z1=(z+abs(z))/2;
(三)三维图形
看教材一直用mesh函数,也用到meshgrid。
类比使用总会报错,mesh只能是不超过2d数组,看例子模仿meshgrid只用两个,那我也改,把角度相同,即两个变量r和a。meshgrid之后,其余x,y,z全部由这些表示。
改善之后。
关键问题是,只用两个变量meshgrid,或者混合两两变量meshgird,得到的图只是球的一部分,这点可以用sphere画一个球改透明度观察,因为变量之间存在共线性。
于是改变,用散点图,点都标记出来,点足够多,也可以观察出。于是代码如下
[m,n]=size(x1);
for i=1:m
scatter3(x1(i,:),y1(i,:),z1(i,:),50,'r','o');
hold on;
end
hold on;
[m2,n2]=size(x);
for i=1:m2
scatter3(x(i,:),y(i,:),z(i,:),200,'b','+');
hold on;
end
综合下来这个办法可行,接着就是改善可视化,判断矩阵是否为spike- free矩阵。
X1=[0:pi/20:pi];
Y1=[0:pi/20:pi];
Z1=[0:2*pi/20:2*pi];
R1=[-1:2/20:1];
[A1,A2,A3]=meshgrid(X1,Y1,Z1);
[R,R,R]=meshgrid(R1,R1,R1);
X=R.*cos(A1);
Y=R.*sin(A1).*cos(A2);
Z=R.*sin(A1).*sin(A2).*cos(A3);
A=[1,-2,3;-1,2,3;1,2,-3;];
x=-X+2*Y+3*Z;
y=X-2*Y+3*Z;
z=X+2*Y-3*Z;
x1=(x+abs(x))/2;
y1=(y+abs(y))/2;
z1=(z+abs(z))/2;
[m,n]=size(x1);
for i=1:m
scatter3(x1(i,:),y1(i,:),z1(i,:),50,'r','o');
hold on;
end
hold on;
[m2,n2]=size(x);
for i=1:m2
scatter3(x(i,:),y(i,:),z(i,:),200,'b','+');
hold on;
end
title('test');
xlabel('X');ylabel('Y');zlabel('Z');
hold on;
下面改了一个矩阵
X1=[0:pi/20:pi];
Y1=[0:pi/20:pi];
Z1=[0:2*pi/20:2*pi];
R1=[-1:2/20:1];
[A1,A2,A3]=meshgrid(X1,Y1,Z1);
[R,R,R]=meshgrid(R1,R1,R1);
X=R.*cos(A1);
Y=R.*sin(A1).*cos(A2);
Z=R.*sin(A1).*sin(A2).*cos(A3);
A=[1,-1,1;-1,1,1;1,1,-1;];
x=X-Y+Z;
y=-X+Y+Z;
z=X+Y-Z;
x1=(x+abs(x))/2;
y1=(y+abs(y))/2;
z1=(z+abs(z))/2;
[m,n]=size(x1);
for i=1:m
scatter3(x1(i,:),y1(i,:),z1(i,:),50,'r','o');
hold on;
end
hold on;
[m2,n2]=size(x);
for i=1:m2
scatter3(x(i,:),y(i,:),z(i,:),200,'b','+');
hold on;
end
title('A=[1,-1,1;-1,1,1;1,1,-1;]');
xlabel('X');ylabel('Y');zlabel('Z');
hold on;
(三)扩展题
如何判断:二维三维的可视化判断
总结
(1)要心平气和
(2)先用笔写出来,电脑看着没什么思路,瞎来