生活百科知识

经验知识首页 > 服饰 > 详细经验讲解内容页

[视频]【抽象代数】格和子格怎么用Mathematica绘制?

关于腾势【抽象代数】格和子格怎么用Mathematica绘制?,期待您的经验分享,你无异于雪中送炭,让我感激涕零 !
无情天魔精致 2018-12-12 13:11:22 34197人看过 分享经验到微博

更新:2024-04-01 22:23:16优质经验

来自阿里云https://www.aliyun.com/的优秀用户无情天魔精致,于2018-12-12在生活百科知识平台总结分享了一篇关于“【抽象代数】格和子格怎么用Mathematica绘制?将军家的小娘子”的经验,非常感谢无情天魔精致的辛苦付出,他总结的解决技巧方法及常用办法如下:

设矩阵a等于{{3, 1}, {-1, 2}},Z是整数环,V=Z^2,代表的是平面上的整点,还可以视为格。本文,就用Mathematica来绘制格V和它的子格a*V。

工具/原料

电脑Mathematica

方法/步骤

1/6分步阅读

我们先写一个自定义函数,用来根据给定的格基绘制相应的格。

f[w_, J_, color_, opacity_]

其中,w代表格子的某个顶点,J是由格基组成的矩阵,color代表格子的颜色,opacity代表透明度。

[图]2/6

比如,Z^2的一个以原点为顶点的格子可以画为:

Show[f[{0, 0}, {{1, 0}, {0, 1}}, Green, 1], Axes -> True]

[图]3/6

我们当然可以把一定范围内所有的格子全部画出来:

A = Tuples[Range[-12, 11], 2];

Show[f[#, {{1, 0}, {0, 1}}, Green, 0.5] & /@ A,Axes -> True]

[图]4/6

用矩阵a左乘,会把格子变成别的形状:

a = {{3, 1}, {-1, 2}};

Show[

f[#, {{1, 0}, {0, 1}}, Green, 0.5] & /@ A,

f[{0, 0}, a, Blue, 1], Axes -> True]

a把一个绿色的小正方形变成了一个蓝色的平行四边形。

注意,这里直接把a当成了格子的基,因为a乘以2*2的单位矩阵,仍等于a。

[图]5/6

我们也可以把附近所有的蓝色格子全部画出来:

Show[

f[#, {{1, 0}, {0, 1}}, Green, 0.5] & /@ A,

f[#, a, Blue, 1] & /@ (A.a\[Transpose]),

Axes -> True]

[图]6/6

参考《【抽象代数】Z矩阵的对角化》里面的方法,可以把矩阵a简化为:

b={{1,0},{0,-7}};

那么我们可以画出b对应的格子:

Show[

f[#, {{1, 0}, {0, 1}}, Green, 0.5] & /@ A,

f[{0, 0}, b, Red, 1]]

这是一个长条形的格子,恰好是由7个1*1的格子组成。

[图]