欢迎光临
我们一直在努力

J语言矩阵可视化,极简语句绘制谢尔宾斯基地毯

文章目录

    • 安装与初步使用
    • 谢尔宾斯基地毯
    • 计算原理

安装与初步使用

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=bc,则矩阵

A

A

A的元素为

A

i

j

=

b

i

+

c

j

A_{ij}=b_i+cj

Aij=bi+cj

谢尔宾斯基地毯

谢尔宾斯基地毯是一种经典平面分型,其构造规则为

  • 9等分一个正方形,变换为9个小正方形;
  • 去掉中间的小正方形;
  • 在剩余的8个小正方形上,重复第2步。
  • 效果如下

    在这里插入图片描述

    这是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}

    22222222222212222012

    其中,0,1,2分别表示每次九等分时所在的相对位置

    • 0:左侧或下侧三分之一区间
    • 1:中间三分之一区间
    • 2:右侧或上侧三分之一区间

    然后再看第二行,在这里,viewmat成了二元运算符,其左侧输入为调色板,三种颜色分别是黄色、蓝色、橄榄色。下面详细解读【 Y +./ . *. |: Y】这段代码。

    计算原理

    【Y +./ . *. |: Y】是经典的三进制数位过滤法,其运算顺序为【Y (+./ . *.) |: Y】,其中【|:】用于转置,也就是说,对Y和Y的转置进行这个【+./ . *.】运算,

    其中比较关键的两个运算符是

    • 【*.】 求最大公约数(GCD)
    • 【+.】 最小公倍数(LCM),【+./】表示将该运算插入到列表中去,在J语言中叫归约

    由于Y由三进制表示,此时GCD 与 LCM 表现出极强的逻辑门特性,其真值表如下

    左值右值GCD(*.)LCM(+.)
    0 x x 0
    1 1 1 1
    1 2 1 2
    2 2 2 2

    有了【+./】可以保证上一级是0,则后面所有级都为0。

    【+./ . *.】的完整称呼是,以 GCD 为元素运算、以 LCM 为归约运算的内积,对于【A(+./ . *.)B】而言,其具体计算次序为

  • 遍历行列:对结果矩阵的每个位置 [i, j]
  • 抽取向量:取 A 的第 i 行 R,取 B 的第 j 列 C_col
  • 逐位 GCD:L = R *. C_col → 得到长度相同的列表
  • LCM 归约:C[i,j] = +./ L → 列表坍缩为单个标量
  • 填格:将标量写入 C[i,j]
  • 赞(0)
    未经允许不得转载:171主机测评 » J语言矩阵可视化,极简语句绘制谢尔宾斯基地毯
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址