简介
17世纪的瓦里士到19世纪的高斯,复数的几何表示逐渐发展,高斯在1831年详细阐述了复平面。曼德博集合,以分形特征著称,是复平面上点的集合,通过迭代( f_c(z) = z^2 + c )计算。
17世纪时,英国数学家瓦里士已经意识到在直线上不能找到虚数的几何表示。
1797年,挪威的测量学家维塞尔向丹麦科学院递交论文《方向的解析表示,特别应用于平面与球面多边形的测定》,首先提出把复数用坐标平面上的点来表示,使全体复数与平面上的点建立了一一对应关系,形成了复平面概念。但当时没有受到人们的重视。
1806年,日内瓦的阿工在巴黎发表的论文《虚量,它的几何解释》,也谈到了复数的几何表示法。他用“模”这个名词来表示向量的长度,模这术语就源出于此。
伟大的德国数学家高斯是近代数学的奠基人之一,在历史上影响之大,可以和阿基米德、牛顿、欧拉并列。
他在1799年已经知道复数的几何表示,在1799年、1815年、1816年对代数基本定理作出的三个证明中,都假定了复数和直角坐标平面上的点一一对应,到1831年他对复平面作出了详细的说明。
1 复数对称的自相似平面图形
曼德博集合以数学家曼德博命名,它是复数平面组成分形的点的集合。 可以使用复二次多项式进行迭代计算。
f_c(z) = z^2 + c
它最大的特点就是自相似。 对于大多数分形软件,内部已经有比较成熟的代码。
如下,我们通过判断是否处理绘画区域决定是否绘制。
func inMandelbrot(x0 float64, y0 float64, n int) bool {
var (
x float64 = 0.0
y float64 = 0.0
)
for n > 0 {
xtemp := x*x - y*y + x0
y = 2.0*x*y + y0
x = xtemp
n = n - 1
if x*x+y*y > 4.0 {
return false
}
}
return true
}
并依据规则生成图形代码
for y >= ys {
x := xs
lineStr := []string{}
for x < xe {
n += 1
if inMandelbrot(x, y, int(threshhold)) {
lineStr = append(lineStr, "*")
} else {
lineStr = append(lineStr, ".")
}
x += dx
}
if i == 0 {
lines := fmt.Sprintf("%v", strings.Join(lineStr, ""))
endStr = append(endStr, lines)
} else {
stwo := ChangePlace(lineStr)
lines := fmt.Sprintf("%v", strings.Join(stwo, ""))
endStrTwo = append(endStrTwo, lines)
}
y -= dy
}
最后组合成我们期望的对称图形。
3 小结
其中的算法乐趣很多,有兴趣的可以找资料来看看。
高斯的大白话:
迄至目前为止,人们对于虚数的考虑,依然在很大的程度上把虚数归结为一个有毛病的概念,
以致给虚数蒙上一层朦胧而神奇色彩。
我认为只要不把+1、-1、i 叫做正一、负一和虚一,
而称之曰向前一,反向一和侧向一,那么这层朦胧而神奇的色彩即可消失。
此后,人们才接受了复平面的思想,有些人还把复平面称为高斯平面。
利用复数的几何表示法,复数又可以用坐标平面上的向量来表示,两个复数相加可以按照向量加法的平行四边形法则来进行,一个复数乘以i(或-i)相当于表示此复数的向量逆(或顺)时针旋转90。
这就使得物理上的许多向量:力、速度、加速度等等,都可以借助于复数来进行计算,使复数成为物理学和其他自然科学的重要工具
代码路径
https://github.com/hahamx/examples/blob/main/alg_practice/0_mandebot/main.go