文章目录
-
- 安装与初步使用
- 谢尔宾斯基地毯
- 计算原理
安装与初步使用
viewmat是J语言的矩阵可视化工具,可将数值数组直接渲染为图像窗口,类似于有些语言的imshow。点击菜单栏【Tools】->【Package Manager】,找到【graphics/viewmat】,勾选后点击左下角【install】即可。
安装完成后,在J语言输入框中load即可使用,下面绘制一个简单的矩阵

绘图代码如下
load 'viewmat'
viewmat (i.100) +/ i.100
代码中,(i.100)用于生成
[
0
,
100
)
[0,100)
[0,100)范围内的自然数序列,【+/】为数组外积,若
A
=
b
⊕
c
A=b\\oplus c
A=b⊕c,则矩阵
A
A
A的元素为
A
i
j
=
b
i
+
c
j
A_{ij}=b_i+cj
Aij=bi+cj。
谢尔宾斯基地毯
谢尔宾斯基地毯是一种经典平面分型,其构造规则为
效果如下

这是Gallery中的第一个示例程序,代码如下,简单得令人发指
Y=: 3&#. ^:_1 i.243
(255 255 0,0 0 255,:192 128 0) viewmat Y +./ . *. |: Y
首先看第一行,其运算顺序从右到左,依次是
- 【i.243】生成
[
0
,
243
)
[0,243)
[0,243)范围内的整数,总计243个,即3
5
3^5
35个 - 【^:_1】为二元运算符,对右侧值做左侧函数的逆运算
- 【3&#】三进制转十进制,其逆运算即为十进制转三进制
所以,Y的计算结果就是用三进制表示的从0到242的数组,最后几位分别是
⋯
⋯
⋯
⋯
⋯
2
2
2
1
2
2
2
2
2
0
2
2
2
2
1
2
2
2
2
2
\\begin{matrix} \\cdots&\\cdots&\\cdots&\\cdots&\\cdots\\\\ 2&2&2&1&2\\\\ 2&2&2&2&0\\\\ 2&2&2&2&1\\\\ 2&2&2&2&2\\\\ \\end{matrix}
⋯2222⋯2222⋯2222⋯1222⋯2012
其中,0,1,2分别表示每次九等分时所在的相对位置
- 0:左侧或下侧三分之一区间
- 1:中间三分之一区间
- 2:右侧或上侧三分之一区间
然后再看第二行,在这里,viewmat成了二元运算符,其左侧输入为调色板,三种颜色分别是黄色、蓝色、橄榄色。下面详细解读【 Y +./ . *. |: Y】这段代码。
计算原理
【Y +./ . *. |: Y】是经典的三进制数位过滤法,其运算顺序为【Y (+./ . *.) |: Y】,其中【|:】用于转置,也就是说,对Y和Y的转置进行这个【+./ . *.】运算,
其中比较关键的两个运算符是
- 【*.】 求最大公约数(GCD)
- 【+.】 最小公倍数(LCM),【+./】表示将该运算插入到列表中去,在J语言中叫归约
由于Y由三进制表示,此时GCD 与 LCM 表现出极强的逻辑门特性,其真值表如下
| 0 | x | x | 0 |
| 1 | 1 | 1 | 1 |
| 1 | 2 | 1 | 2 |
| 2 | 2 | 2 | 2 |
有了【+./】可以保证上一级是0,则后面所有级都为0。
【+./ . *.】的完整称呼是,以 GCD 为元素运算、以 LCM 为归约运算的内积,对于【A(+./ . *.)B】而言,其具体计算次序为

