ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 14790|回复: 36

[原创] 美丽的数学 之 复平面

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-13 14:34 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:其他结构和算法
本帖最后由 lee1892 于 2014-10-21 17:09 编辑

相关帖子:美丽的数学 之 奇妙的分形

在前面的贴中提到了复平面的概念,此贴将会由基础知识逐渐展开讨论。
0.PNG

一、高中的数学知识的复习

附件: 复平面_之_高中的数学_By Lee1892.rar (17.26 KB, 下载次数: 242)

我们知道可以用复数来代表复平面中的点,于是在解析几何中涉及的所有计算都可以转化成复数的计算来完成。

首先,需要编写一套基本的复数基本四则运算函数集,附件中包括如下内容:
  1. ' /================================================\ '
  2. '                复数计算的基本函数集                '
  3. '  By Lee1892, 2014.10.13                            '
  4. ' |================================================| '
  5. '   函数名    返回值    参数表       功能描述        '
  6. '  ------------------------------------------------  '
  7. '   cRe       实数      cmpA 复数    复数的实数部分  '
  8. '   cIm       实数      cmpA 复数    复数的虚数部分  '
  9. '   cAbs      实数      cmpA 复数    复数的绝对值    '
  10. '   cCjg      复数      cmpA 复数    复数的共轭      '
  11. '   cUni      复数      cmpA 复数    复数的单位复数  '
  12. '  ------------------------------------------------  '
  13. '   cAdd      复数      cmpA 复数    两复数相加      '
  14. '                       cmpB 复数                    '
  15. '   cMin      复数      cmpA 复数    两复数相减      '
  16. '                       cmpB 复数                    '
  17. '   cMtp      复数      cmpA 复数    两复数相乘      '
  18. '                       cmpB 复数                    '
  19. '   cDvd      复数      cmpA 复数    两复数相除      '
  20. '                       cmpB 复数                    '
  21. '  ------------------------------------------------  '
  22. '   cSqr      复数      cmpA 复数    复数的开方      '
  23. '                       bNeg 布尔                    '
  24. '   cXr       复数      cmpA 复数    复数乘实数      '
  25. '                       dRe  实数                    '
  26. '   cRcp      复数      cmpA 复数    复数的倒数      '
  27. ' \================================================/ '
复制代码


其中,几个基本计算的几何含义:
加减法:坐标系的偏移,比如 z1+z2,表示的复数就是由点z1到z2的向量,换言之 点 z2 在坐标系由原点偏移到点z1后在新坐标系中的复数。
乘法:复数绝对值的缩放以及绕原点的旋转,计复数的绝对值为 |z|,计复数的单位向量为 I (z) = z / |z| 其与X轴夹角为a,则 z1 * z2 表示 z1 的绝对值放大了 |z2| 倍,并旋转了 a 角度。
除法另外讨论。

于是,可以很容易获得下列基本的点线间的函数:
1、两点距离:
  1. Public Function geoDist(pntA As COMPLEX, pntB As COMPLEX) As Double
  2.     geoDist = cAbs(cMin(pntA, pntB))
  3. End Function
复制代码

2、点到线的垂足:
  1. Public Function geoPedl(pntLnA As COMPLEX, pntLnB As COMPLEX, pntX As COMPLEX) As COMPLEX
  2.     Dim cTemp As COMPLEX
  3.     cTemp = cMin(pntLnB, pntLnA)
  4.     cTemp = cUni(cTemp)
  5.     geoPedl = cMtp(cMin(pntX, pntLnA), cCjg(cTemp))
  6.     geoPedl = cXr(cTemp, cRe(geoPedl))
  7.     geoPedl = cAdd(geoPedl, pntLnA)
  8. End Function
复制代码

3、点到线的垂直距离:
  1. Public Function geoDistPnToLn(pntLnA As COMPLEX, pntLnB As COMPLEX, pntX As COMPLEX) As Double
  2.     Dim cTemp As COMPLEX
  3.     cTemp = cMin(pntLnB, pntLnA)
  4.     cTemp = cUni(cTemp)
  5.     geoDistPnToLn = Abs(cIm(cMtp(cMin(pntX, pntLnA), cCjg(cTemp))))
  6. End Function
复制代码

4、两线交点:
  1. Public Function geoItsc(pntLnA_1 As COMPLEX, pntLnA_2 As COMPLEX, _
  2.                         pntLnB_1 As COMPLEX, pntLnB_2 As COMPLEX) As COMPLEX
  3.     Dim rDist1 As Double, rDist2 As Double, rLen As Double
  4.     rDist1 = geoDistPnToLn(pntLnA_1, pntLnA_2, pntLnB_1) ' 点 B_1 到线A的距离
  5.     rDist2 = geoDistPnToLn(pntLnA_1, pntLnA_2, pntLnB_2) ' 点 B_2 到线A的距离
  6.     rLen = geoDist(pntLnB_1, pntLnB_2) * rDist1 / (rDist1 + rDist2) ' 点 B_1 到交点的距离
  7.     geoItsc = cMin(pntLnB_2, pntLnB_1) ' 点 B_1 到 点 B_2 的向量
  8.     geoItsc = cXr(cUni(geoItsc), rLen) ' 点 B_1 到 交点的向量
  9.     geoItsc = cAdd(geoItsc, pntLnB_1)
  10. End Function
复制代码

附件演示了上述几个函数。
001.PNG
000.PNG


另外,此贴估计会写得很慢~~~



评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-9-23 11:50 | 显示全部楼层
本帖最后由 lee1892 于 2015-9-24 08:31 编辑

此贴附件: 复平面_之_珍珠项链_By Lee1892.rar (192.51 KB, 下载次数: 203)

忽然想起了这一贴。

把这个半成品放上来吧,实在是没精力也没兴趣继续作了。

如我的头像和之前的一贴:录了个动画
http://club.excelhome.net/thread-1166338-1-1.html
(出处: ExcelHome技术论坛),这个半成品目前只能较好的形成这个图形,对于其它的参数还有很多工作要做:
1、修改代码使得不会产生堆栈溢出的问题,同样是由两点间距离太远造成的
2、加入功能以消弭因步长过大带来的长直线连接的问题

此贴中除了最基础的部分,基本上是一个读书笔记,书名叫:Indras Pearls: The Vision of Felix Klein,Amazon的链接是:http://www.amazon.com/Indras-Pea ... Klein/dp/0521352533
上述的问题在书中有解决方法,有兴趣的可以在网上找一下。

此贴我不再更新了......

附Indra's Pearls这本书,一共18个文件:

Indras Pearls.part01.rar (1.43 MB, 下载次数: 113) Indras Pearls.part02.rar (1.43 MB, 下载次数: 107)
Indras Pearls.part03.rar (1.43 MB, 下载次数: 104) Indras Pearls.part04.rar (1.43 MB, 下载次数: 114)
Indras Pearls.part05.rar (1.43 MB, 下载次数: 110) Indras Pearls.part06.rar (1.43 MB, 下载次数: 100)
Indras Pearls.part07.rar (1.43 MB, 下载次数: 103) Indras Pearls.part08.rar (1.43 MB, 下载次数: 114)
Indras Pearls.part09.rar (1.43 MB, 下载次数: 103) Indras Pearls.part10.rar (1.43 MB, 下载次数: 99)
Indras Pearls.part11.rar (1.43 MB, 下载次数: 102) Indras Pearls.part12.rar (1.43 MB, 下载次数: 99)
Indras Pearls.part13.rar (1.43 MB, 下载次数: 96) Indras Pearls.part14.rar (1.43 MB, 下载次数: 100)
Indras Pearls.part15.rar (1.43 MB, 下载次数: 98) Indras Pearls.part16.rar (1.43 MB, 下载次数: 107)
Indras Pearls.part17.rar (1.43 MB, 下载次数: 93) Indras Pearls.part18.rar (194.39 KB, 下载次数: 95)



TA的精华主题

TA的得分主题

发表于 2014-10-13 18:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
涨姿势了,感谢楼主。复数在实际中有什么用处?
挽尊

点评

你可以找一个电子系的本科生问问,或则找找你自己头像的出处,sigh~~  发表于 2014-10-17 14:46

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-14 14:25 | 显示全部楼层
本帖最后由 lee1892 于 2014-10-15 11:29 编辑

二、如何复制猫

附件: 复平面_之_如何复制猫_By Lee1892.rar (101.01 KB, 下载次数: 115)
前面我们提到了复数的计算都有其几何含义,为了更加清楚地表示,让我们用一只宠物蓝猫来演示。

由于这只猫没有腿,为了带它到处逛逛,我们用复数的计算来复制它。

1、加复数,平移
000 加复数.PNG
前面说过,复数加复数表示平移,猫到了一个新地方变成了红色,什么都没改变,仅仅是换了个地方。
图右侧的滚动条用来缩放,横竖两个微调按钮用来平移。

2、乘实数,缩放
002 乘实数.PNG
如果是乘一个实数,则是完全按比例缩放,图中猫变大了

3、乘单位复数 |z| = 1,旋转
003 乘单位复数.PNG
所谓单位复数是指 z = x + yi,x^2 + y^2 = 1,即 |z|=1。那么乘一个单位复数就如图示,绕原点旋转。

4、乘复数加复数,全部的平移、旋转、缩放
004 乘复数加复数.PNG
结合上述的3、4,不难知道乘一个复数 z,意味着 缩放了 |z| 倍,再绕原点旋转其单位复数 I (z),如图。

5、除复数,同乘复数,旋转、缩放
005 除复数.PNG
我们知道一个复数的倒数还是一个复数,所以除一个复数的效果意味着乘它的倒数。

6、倒数,变形啦
006 倒数.PNG
上一节我们没有讨论除法的几何意义,其原因是对于除法而言,变量作为除数和被除数是完全不同的。
让我们先看一下倒数,即变量作为除数,被除数是 1,如果被除数是一个复数就是在倒数的基础上再旋转、缩放。
效果如上图,可以放大看一下,如下:
006.1 倒数 放大.PNG
看猫变形了,椭圆的身体变成了鸡蛋的形状,嘴和眼都跑到一边去了!
再放大看一下耳朵:
006.2 倒数 可怜的耳朵.PNG
原本是正三角形的耳朵,现在变成了三段弧线围合的弧三角!

z = |z| * (cos α + i ·sin α)
1 / z = 1 / |z| * (cos α - i ·sin α)
于是,倒数的几何含义是:其绝对值为原绝对值的倒数,其单位复数为原单位复数的共轭。
如下图:
006.1 倒数的几何含义.PNG

7、莫比乌斯变换

007 莫比乌斯变换.PNG
大名鼎鼎的莫比乌斯:z' = (a * z + b) / (c * z + d)
包含了所有可能的上述变化。
需要注意的是,经过莫比乌斯变换后,圆仍然是圆,而直线变成了弧线,如果定义两弧夹角等于其交点处各自切线的夹角的话,可以发现两线的夹角在经过莫比乌斯变换后没有变化!

这还是哪只猫吗?
007 莫比乌斯变换 2.PNG







TA的精华主题

TA的得分主题

发表于 2014-10-14 16:15 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-15 14:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 lee1892 于 2014-10-17 10:44 编辑

三、运动的轨迹

附件: 复平面_之_运动的轨迹_By Lee1892.rar (610.28 KB, 下载次数: 117)
奇妙的分形 的 第七小节 中,提到过几个概念:

映射(Projecting 或 Mapping)
    一种规则使得某集合元素对应于另一集合中唯一元素,在复平面中可以把一个函数看作是一种映射,比如前面提到的倒数 f(z) = 1 / z 就是把单位圆外的点映射到其内部或反之。

仿射变换
    形如 f(z) = az + b 的变换称为仿射变换,显然它是一种特殊的莫比乌斯变换。

不动点
    对于一个函数 f(z),如果 f(z) = z,则称 z 为 f(z) 的不动点。则计算可得,仿射变换有一个不动点,而莫比乌斯变换则通常有两个不动点,比如 倒数 f(z) = 1 / z 的两个不动点为 1 和 -1。

倒函数
    对于一个函数f(z),设 z' = f(z),如果函数 d(z') = z,则称 d(z) 为 f(z) 的倒函数。记函数为 T,则可记其倒函数为 T^-1 或 T'。显然有,T'(T(z)) = z。

函数的迭代
    对于一个函数 T,记 T(T(z)) 为 T^2,类似的记 T'(T'(z)) 为 T^-2。则由不动点的知识可以知道,无限次迭代计算后,如果有一个不动点,则 或则 T^n 为不动点、或则 T^-n 为不动点,如果有两个不动点,则各收敛于一个不动点。
通过迭代计算,可以观察函数变换复数点的位置的运动轨迹。

1、仿射变换

设 a = 1 - 0.5 i,b = 2 + 2 i 则猫的运动如下图,褐色为倒函数,红色为原函数。
000 仿射变换.PNG
这是一个非常漂亮的螺旋形状,放大一点的效果如下:
001 仿射变换.PNG

2、莫比乌斯变换

设 a = 1 - 5 i,b = 1 + 0 i ,c = 1 + 0 i ,d = 1 - 5 i
则猫的运动轨迹如下图
002 莫比乌斯变换.PNG

放大一点的效果
003 莫比乌斯变换.PNG

显然,其两个不动点分别为 1 和 -1
004 莫比乌斯变换.PNG 005 莫比乌斯变换.PNG

这是一个漂亮的双螺旋形状。
如果你会调整代码,把蓝猫挪动到原点附件,并且缩小其比例为0.05倍的话,就会得到下面这样的效果:
006 莫比乌斯变换.PNG


TA的精华主题

TA的得分主题

发表于 2014-10-15 15:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢楼主,太厉害了!

TA的精华主题

TA的得分主题

发表于 2014-10-15 16:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
强势围观,楼主出品,必属精品。

TA的精华主题

TA的得分主题

发表于 2014-10-16 15:09 | 显示全部楼层
真得是高人啊!硬是看不懂,感到知识不行啊!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-17 13:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 lee1892 于 2014-10-17 14:03 编辑

四、连续的轨迹线:进一步了解莫比乌斯变换

附件: 复平面_之_连续的轨迹线_By Lee1892.rar (1.16 MB, 下载次数: 128)
观察上一节中莫比乌斯变换的轨迹线,浅蓝色和粉色,会注意到其两侧的不连续性使得两侧的轨迹线不是一个光滑的螺旋曲线。

显然,造成这一现象的原因是由于步子迈得太大了。
为解决这个问题,需要更加深入的了解莫比乌斯变换。

1、莫比乌斯的倒函数

由前述的倒函数的概念,知 对于 T(z) = (a * z + b) / (c * z + d),设 T(z) = w,则其倒函数 T'(w) = z,则将 w = (a * z + b) / (c * z + d) 改写为 z 为未知数的 w 的表达式就可以获得 T' 。
则 T' (z) = (d * z - b) / (-c * z + a)

如果用2*2的矩阵来表示 T(z)
| a    b|
| c    d|   
同样的 R(z) 用大写字母表示,则 T(R(z)) 的参数可以用矩阵乘法来计算:
| a    b|   | A    B|
| c    d|   | C   D|

那么对于 T( T' (z)) 则有:
| a    b|   | d   -b|
| c    d|   |-c    a|
= (ad - bc) * I

式中 I 为单位矩阵
| 1    0 |
| 0    1 |

称 D = ad - bc 为莫比乌斯变换 T(z) 的决定值
当 D = 1 时,称为 统一莫比乌斯变换


将一个莫比乌斯变换转化为 统一莫比乌斯变换,只需要将所有参数除其 D 的开方,显然这样的操作不影响 T(z)。
可以自行演算一下,当 D = 0 时,会发生什么。

2、莫比乌斯的不动点

由前述不动点的概念,可知 方程 z = (a * z + b) / (c * z + d) 的解即为 T(z) 的不动点,解方程得:

z = {(a - d) ± Sqr[(d - a) ^ 2 + 4bc]} / 2c

设该莫比乌斯变换为 统一莫比乌斯变换,有 D = 1,
则 (d - a) ^ 2 + 4bc = (a + d) ^ 2 - 4ab + 4bc = (a + d) ^ 2 - 4

称 Tr = a + d 为莫比乌斯变换的 轨迹值。试证明对于两个变换 T、R,Tr( T( R(z))) = Tr( R( T(z))),或记为 Tr(TR)=Tr(RT)。

则不动点为:

z = [a - d ± Sqr(Tr ^ 2 - 4)] / 2c

显然,当 c = 0 时,莫比乌斯变换转化为仿射变换。换言之,仿射变换的另一个不动点是 ∞。

3、函数的共轭

函数 A 和 B,记 A(B(z)) = AB,而 B(A(z)) = BA。注意顺序不同意味着不同的函数。

而对于 函数 T 和函数 S,有 函数 R = STS',称函数 R 和函数 T 互为共轭函数,记 为 T = STS'而其倒函数 T' = ST'S'
且有 S(TU)S' = (STS')(SUS')


具体的证明过程不展开了。

我们知道一个仿射变换 R(z) = kZ 的两个不动点为 0 和 ∞,而对于一个莫比乌斯变换 T 有两个不动点,设为 P、Q,我们可以通过上述的共轭计算求出与 R 共轭的 T,反之亦然。

已知仿射变换 R 求莫比乌斯变换 T,则 S(0) = P, S(∞) = Q,S(z) = (Q * z + P) / (z + 1)
z = 0 时易知,z = ∞ 时,分子分母都除 z 有 (Q + P/z) / (1 + 1/z) = (Q + 0) / (1 + 0) = Q。

已知莫比乌斯变换 T 求仿射变换 R,则 S(P) = 0, s(Q) = ∞,S(z) = (z - P) / (z - Q)
由:
R(S(z)) = k * S(z) = STS'(S(z)) = ST (S'(S(z)) = S(T(z))
S(∞) = (∞ - P) / (∞ - Q) = 1
T(∞) = a / c
k = (a / c - P) / (a / c - Q)
将不动点公式代入上式,得:
k = [Tr + Sqr(Tr ^ 2 - 4)] ^ 2 / 4
称 k 为莫比乌斯变换的 乘值



4、连续的轨迹线


我们知道对于一个螺旋仿射变换 R = k * z,其轨迹前后两点为 z 和 kz,步进为 k 倍,若让其连续则为 k ^ t * z,t = [0, 1] 实数。

由复数相乘的几何含义可知:k ^ t,其绝对值为 |k| ^ t,角度为原角度的 t 倍。

于是我们可以得到螺旋仿射变换的连续函数 R(z) = k ^ t * z,t = [-∞, +∞]。


同样的,利用上述函数共轭的知识就可以获得莫比乌斯变换的连续轨迹线。

000 连续轨迹线.PNG
现在可以试着调整a、b、c、d四个参数的值,带我们的蓝猫四处转转啦


001 连续轨迹线.PNG
002 连续轨迹线.PNG 003 连续轨迹线.PNG



TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-20 13:25 | 显示全部楼层
五、莫比乌斯变换的分类

附件: 复平面_之_莫比乌斯的分类_By Lee1892.rar (647.48 KB, 下载次数: 104)
莫比乌斯变换的轨迹线是不是都是双螺旋曲线呢?
判断一个莫比乌斯的类别,是通过其轨迹值进行的,如下表:
名称不动点 Tr 是否 实数 Tr 的值 共轭仿射变换k 的值 轨迹线描述
斜航等角螺旋
Loxodromic
2 个 T(z) = kz|k| > 1 由源点沿双螺旋线到收敛点
双曲线
Hyperbolic
2 个 Tr < -2, Tr > 2 T(z) = kz实数 k > 1 由源点到收敛点,但沿圆弧运动
椭圆
Elliptic
2 个 -2 < Tr < 2 T(z) = kz|k| = 1 绕其中一个不动点圆周运动,圆心不为不动点(非仿射变换)
抛物线
Parabolic
1 个 Tr = ±2 T(z) = z + ak = 1 由不动点到不动点,沿圆弧运动


1、Loxodromic
001 分类 Loxodromic.PNG

2、Hyperbolic
002 分类 Hyperbolic.PNG

3、Elliptic
003 分类 Elliptic.PNG

4、Parabolic
004 分类 Parabolic.PNG

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-6 00:40 , Processed in 0.056981 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表