0
点赞
收藏
分享

微信扫一扫

【19377138 王朝祥 数学软件-大作业一】

海牙秋天 2022-04-21 阅读 56
matlab

目录

前言

一、spike- free矩阵是什么?

二、思考过程

1.整体思路

2.具体思路

(一)取单位球的点

(二)坐标变换和乘法 

(三)三维图形

(三)扩展题

总结​​​​​​​


前言

一、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)先用笔写出来,电脑看着没什么思路,瞎来

举报

相关推荐

0 条评论