×

希尔伯特曲线

希尔伯特曲线(希尔伯特曲线海岸线有多长)

fwxlw fwxlw 发表于2024-11-14 04:13:49 浏览7 评论0

抢沙发发表评论

本文目录

希尔伯特曲线海岸线有多长

无限长。什么叫希尔伯特曲线?首先,由下图中开始,非常简单的三段式曲线;然后把其中的每一段即每一个基本单元一分为二,用自相似的结构去取代,当然用自相似的结构取代之后,它不连续了,中间有了一些没有连上的地方,我们人为的连上;不断重复以上操作,进行无穷多次,所得到的曲线就叫做希尔伯特曲线。

希尔伯特曲线的希尔伯特曲线的作法

其构造方法如图:取一个正方形并且把它分出9个相等的小正方形,然后从左下角的正方形开始至右上角的正方形结束,依次把小正方形的中心用线段连接起来;下一步把每个小正方形分成9个相等的正方形,然后上述方式把其中中心连接起来……将这种操作手续无限进行下去,最终得到的极限情况的曲线就被称作希尔伯特曲线。

球面被锥面所截的曲面如何表示

可以用希尔伯特曲线来表示。只要正确选择了函数,就可以画出连续的参数曲线。当参数t在0,1范围内时,曲线将遍历单位正方形中的所有点,得到一条充满空间的曲线。一般来说,一维的东西不可能填满二维的方块。但皮亚诺曲线只是举了个反例。这说明我们对维度的理解是有缺陷的,有必要重新审视维度的定义。这就是分形几何所考虑的。在分形几何中,维数可以是称为分形维数的分数。

什么是希尔伯特曲线

希尔伯特曲线是一种奇妙的曲线,只要恰当选择函数,画出一条连续的参数曲线,当参数t在0,1区间取值时,曲线将遍历单位正方形中所有的点,得到一条充满空间的曲线。 希尔伯特曲线是一条连续而又不可导的曲线。

希尔伯特曲线的一些不同的观点

1877年,数学家康托提出了从一维到二维的映射,后来这个结论得到了另外一些数学家的支持,包括皮亚诺、希尔伯特等。但也有一些数学家对此持怀疑或反对的态度。最著名的就是与康托一起对实数做出定义的数学家戴德金,他对康托的结论一直持反对意见,并指出了康托最初证明中的一些错误。另外,后来戴德金又证明,如果平面和直线之间的对应是连续的,则不可能是一一对应。下面一种观点认为,皮亚诺曲线等是和实数的不可数性相矛盾的。 关于康托的集合论,罗素于1901年提出了一个悖论,指出一个包含自己的集合将导致逻辑上的混乱。分析发现,在康托对实数的定义中也包含了罗素悖论。康托对实数的定义是:“1872年,康托在一篇文章中,用一章的篇幅专门讨论实数问题,特别是无理数问题。他为自己提出了一个目标,在不预先假定无理数存在的条件下,建立一个令人满意的无理数理论。显然,全体的有理数集合为此提供了一个基础。康托用有理数的无穷序列来定义无理数及它们之间的顺序关系。定义:无穷序列(2.12) a1,a2,...,an,...称为一个基本序列,如果对任何有理数值e,都存在一个整数N,使得对任何n》 N和任何m,有{an+m - an} 《 e.如果序列是一基本序列,则说它有一个确定的极限,假定用b来表示。于是每个基本序列就有一个确定的符号b与之相联。康托使用“符号”一词来形容b的作用。常数序列显然是一个基本序列,并恰好以a为极限。康托希望将有理数域A的算术运算推广到这些新数b构成的域B上,并放弃“符号”一词改用“数”称呼B中的元素。尽管“数”的术语的使用十分自然,但仍有关于由A生成的域B的性质及它们的存在性的哲学问题。康托认为B中的数本身是无意义的,它们只具有一种与序列相联系的客观实在性。显然这种实在性不同于域A中有理数所具有的客观性。一个B中的元素被考虑,仅仅为了某种方便之故,仅仅由于它代表了一个基本序列。分析上面对实数的定义,每个实数域中的数实际上是一个有理数的序列,所以有: 1.对实数域的任一有理数a,a按定义等于一序列;2.对实数域的任一无理数b,b按定义等于一序列{b1,b2,...,bn,...}。从集合论的观点来看,由于数的序列对应的是数的集合,而不是数元素本身,即使形如⑴中只有一个元素的序列对应的也应该是一个数的集合。上面对有理数的定义显然构造了一个包含自指的集合:数a等于一个集合,这个集合中有一个元素,就是数a本身。这样的集合包含了罗素悖论。虽然在康托对实数的定义中,对无理数的定义部分却没有包含类似的悖论。这里仍将认真讨论康托对无理数的定义,因为这个定义常被理解成包含罗素悖论的形式出现,第二节将举出一些包含这种错误的例子。在定义中,无理数代表的基本序列中的元素都是有理数,显然按定义无理数作为极限点不在无穷序列里。可以用归纳法证明,无理数作为极限点不在基本序列里有数学依据,而不是出于人为的定义。例如,对于pi的序列:= {3.1, 3.14, 3.141, 3.1415, 3.14159, 3.141592, 3.1415926, ……}令m表示0到9的整数,把序列中的一个小数表示成其前一个小数与尾数相加的形式(如3.14 = 3.1 + 0.04),则:(1) P1 = 3.1,为一个有理数;同时10^1为整数,而m/10^1为两个整数相除的形式,按有理数的定义两个整数相除商为一个有理数;(2) 对任意属于自然数的n,设m/10^n为有理数,则m/10^(n+1),亦为两整数相除,所以m/10^(n+1)为有理数;设Pn为有理数。则P(n+1)为Pn+m/10^(n+1)的形式,为两个有理数相加,所以P(n+1)为有理数;(3) 所以序列中任意元素为有理数。归纳法证明的是这个无穷序列中所有元素的性质,所以这个序列的极限点作为一个无理数不在序列里。无理数对应的基本序列中包含无穷多个元素,讨论能不能多加一个极限点似乎有点诡辩。但这涉及到有理数域中的四则运算是否封闭,以及对无理数的定义是否包含罗素悖论。而且,由于所有无理数都是有理数集的极限点,分清基本序列和极限点的关系可以避免把有理数集当成实数集。这一节分析了康托对实数的定义,指出在实数域中对有理数的定义包含了罗素悖论。同时指出,按康托的定义,无理数作为基本序列的极限点并不在基本序列中。下面将讨论希尔伯特曲线等一维到二维映射的曲线。因为一维与二维之间的关系,与可数无穷多与不可数无穷多的关系类似;或者说可以通过作截线的方法,把一维与二维之间的关系转化为可数无穷多与不可数无穷多的关系,所以在进一步讨论前先总结一下可数无穷多与不可数无穷多的关系:1.可数无穷多和不可数无穷多之间不能建立一种一一对应的关系;2.康托在从包含可数无穷多元素的集合出发,用取极限的方法去定义包含原始集合且自己元素为不可数无穷多的新集合时,在对前者集合的元素的定义包含了罗素悖论。 1877年,康托给出了从一维到二维的一一映射。皮亚诺和希尔伯特分别于1890年和1891年给出了一种可以充满整个平面的曲线。希尔伯特曲线由一个大正方形分成9个小正方形,再不断的把每个小正方形分成更小的正方形得到的边组成的曲线。这实际上是一个递归过程。也可认为希尔伯特曲线是在上面基础上把小正方形的中心点连接起来得到的曲线。这两种表示方法在本节的讨论中并没有区别,在下面的过中位线作截线的过程中可以发现,这两种曲线与截线的交点是一一对应的。过原正方形的中位线作一条数轴,并假设数轴上位于正方形内的区间是中的有理数点。下面在坐标系中进一步讨论这个问题。为了方便在十进制中讨论,假设每个大正方形分裂成100个小正方形,即每个正方形分裂后与其中位线产生9个交点。把第一次分裂得到的交点记为s1,把第二次分裂得到的交点记为s2……这就得到了一个序列{s1,s2,...,sn,...},序列中任一元素sn又为一个数的序列:s1:0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9s2:0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.090.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19......0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99s3:0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.0090.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019......0.991 0.992 0.993 0.994 0.995 0.996 0.997 0.998 0.999如果希尔伯特曲线和中位线的交点覆盖了整条中位线的话,那么序列{s1,s2,...,sn,...}也就覆盖了实数区间区间中所有的实数组成的一个序列。这和实数的不可数性是矛盾的。有一点需要明确一下,就是无穷序列的构造过程以及对无穷序列取极限的过程的关系。我们已经知道区间中的无理数都是有理数集合的极限点。但有理数集和无理数集显然是不一样的。这就是说,构造有理数集的无穷过程并不包括取极限的过程,不能认为取极限的过程一定包含在无穷过程中。否则,按第一节的论述,对无理数的定义将包含罗素悖论。事实上,许多宣称找到了实数可数证据的例子都是犯了认为无穷过程一定包含取极限过程的错误。对希尔伯特曲线,取极限后得到的图形是一个完整的正方形。由于对集合取极限操作的过程不能保持一一对应关系,所以这并不足以证明希尔伯特曲线建立了一种从曲线到平面的一一映射。在取极限前,希尔伯特曲线与中位线的交点包含了中所有有理数,这时候希尔伯特曲线完成的是构造基本序列的过程,图形是曲线但不是一个平面;取极限后,图形将覆盖整个平面,这时中位线与图形的交点是整条线段。因为我们知道在取极限前,图形与中位线的交点是可数无穷多个,取极限后交点是不可数无穷多个,这两者之间并不能够建立一一对应关系,所以除非有特别的论证,否则不能从取极限前是曲线而取极限后是平面就得出曲线和平面有一一对应的关系。事实上,由于产生希尔伯特曲线的过程是递归过程,而递归过程与自然数是一一对应的,在理论上这个过程产生的图形与中位线之间的交点只能是可数无穷多,而不可能是不可数无穷多。这样,对于平面上坐标为无理数对的点,如(sqrt⑵-1,sqrt⑵-1),既不能被希尔伯特曲线的横边所覆盖,也不能为纵边所覆盖。这节论述了希尔伯特曲线没有覆盖整个平面。这个问题的焦点在于定义无理数的基本序列有没有包括极限点:如果包括了极限点,那么构造了基本序列就等于所有有理数和无理数;如果不包含极限点,那么构造了基本序列等于只构造了有理数。 上节论述了希尔伯特曲线没有覆盖整个平面。那么能不能仿照康托从有理数集出发去定义无理数集的例子,借助希尔伯特曲线来建立一种从曲线到平面的一一映射呢?希尔伯特曲线中的编码映射就是这样的一个例子。希尔伯特曲线通过把一个正方形不断大的分成4个小正方形,再把小正方形的中心点连接起来得到的曲线,即希尔伯特曲线。把第一次分裂得到的曲线称为H-1,第二次分裂得到的称为 H-2,……;把H-1与y轴的交点(也即H-1的中点)称为H-1(1/2),H-2与y轴的交点称为 H-2(1/2)……。由于正方形的边和中位线有一一对应关系,这两种表示方法在一定程度上是相同的。在希尔伯特曲线的编码映射中,对分成的4个小正方形按顺时针顺序进行二进制编码,为0.00,0.01,0.10,0.11。后面的分裂同样在前面编码的基础上加上2位二进制小数,如第一格第二次分裂后,得到的4个小正方形编码为0.0000,0.0001,0.0010,0.0011。这样就给正方形中的每个点一个区间的一一映射。分析这种编码方法,实际上也是用收敛的点序列来定义一个点,例如正方形的中心点,是由序列{H-1(1/2),H-2(1/2),...,H-N(1/2),...}来定义的,也就是正方形中心点对应在中的为1/2。这就是说,1/2在平面中对应的不是一个点,而是有无穷多个点。另外,可以用反证法证明,希尔伯特曲线并没有建立一种从曲线到平面的一一对应关系。假设曲线的坐标区间为映射到p点。由于希尔伯特曲线是左右对称的,则立即可以得到数(1-x)也映射到p点。又由于这种映射是一一映射,所以有x=1-x=1/2,即与1/2对应的是y轴上的一条线段,这与前面的一一对应假设矛盾。这节讨论了无法利用希尔伯特曲线的编码映射来完成从1×1的平面到:假设y为一个实数,且:y = 0.a1 b1 a2 b2 …… an bn ……则令:x1 = 0.a1 a2 …… an ……x2 = 0.b1 b2 …… bn ……这样就完成了从y到(x1,x2)的映射。实际上,上面的证明过程使用了递归方法。正如第一节所论述,递归方法所论证的只能是基本序列中的元素,而基本序列的极限点不一定包含在基本序列里。所以这个证明只对有理数有效。 这种观点指出,在康托用有理数的基本序列去定义实数中,实数域中的一个有理数a按定义等于序列,这实际上构造了一个包含自指的集合:数a等于一个集合,这个集合中有一个元素,就是数a本身。这样的集合包含了罗素悖论。本文还分析了皮亚诺曲线等一维到二维映射的例子,指出它们实际上也包含了上述悖论。

一条线段和一个正方形中的点哪个多

在数学当中,任何直线或者线段上点的势,与任何平面上点的势相同,可以看成直线和平面上的点一样多,甚至与立体图形中的点也是一样多。我们可以建立一个函数把直线和平面的点一一对应起来,这样的函数叫做皮亚诺函数,其曲线叫做皮亚诺曲线或者希尔伯特曲线。

集合的势

在现代集合论当中,用“势”来描述一个集合规模的大小,对于有限集合,集合的元素个数就是该集合的势,比如集合{e,π,i,0,1}的势就是5;对于无限集合,我们需要用射映的方法来确定集合的势。

在中学时,我们认为所有的无穷大都是一样的,无法对无穷大进行比较;实际上,当我们涉及更深的集合论时,会发现无穷大也是存在等级的,首先发现无穷大存在等级的是十九世纪的德国数学家康托尔,他创立了超穷数理论。

假设有A、B两个集合,这两个集合中的元素可以实现一一映射,那么我们就认为两个集合的势相等;如果A可以映射到B中的部分元素,但是B中的元素无法全部映射到A,则称B的势大于A的势,或者说B的元素比A多)。

比如:

自然数集合为{0,1,2,3……}

非负偶数集合为{0,2,4,6……}

虽然非负偶数的元素是自然数中的一部分,但是两者之间可以实现一一映射(0→0,1→2,2→4,3→6……),所以自然数和非负偶数的个数是相等的。

利用康托尔提出的对角线法则,我们还可以证明自然数集合与有理数集合的个数也相等;但是我们无法把自然数和无理数一一映射起来,说明无理数的势要大于自然数的势。

直线中点的势

一条直线或者线段中的点组成一个集合,我们很容易证明两端无限延长的直线,与任意长度线段的点一样多,比如利用函数y=tan,可以把长度为a的线段(不含两端点)与无限长直线中的点一一映射起来,加上两个端点的线段势不变。

我们也可以建立一个函数,把线段和平面的势一一对应起来,以边长为1的正方形,长度为1的线段为例,最简单的做法,就是把正方形上的点坐标写作(0.abcd...,0.xyzw...),然后映射到线段上的点坐标0.axbyczdw…。

我们很容易证明,任意大小正方形点的势都是相等的,所以无论你的线段有多长,与任何平面点的个数都是相等的。

希尔伯特曲线

希尔伯特曲线是指定义域在的函数,其函数曲线遍历单位正方形中的所有点;这样的函数最早由意大利数学家皮亚诺作出,该函数把直线上的点和平面上的点一一映射起来。

进一步扩展后,我们可以得到结论:直线和平面上的点一样多,甚至还等于立体空间中点的数量。

怎么用python中的turtle画希尔伯特曲线

代码如下:import sys, math, timeimport turtlecount = 0def moveto(x,y): turtle.penup() turtle.goto(x,y) turtle.pendown()def hilbert(x0, y0, xi, xk, yi, yk, n): if n 《= 0: X = x0 + (xi + yi)/2 Y = y0 + (xk + yk)/2 X2 = X * 600 -300 Y2 = Y * 600 -300 global count if count 《 1: count = count + 1 moveto(X2,Y2) turtle.color(X,Y,X*Y) turtle.goto(X2,Y2) else: hilbert(x0, y0, yi/2, yk/2, xi/2, xk/2, n - 1) hilbert(x0 + xi/2, y0 + xk/2, xi/2, xk/2, yi/2, yk/2, n - 1) hilbert(x0 + xi/2 + yi/2, y0 + xk/2 + yk/2, xi/2, xk/2, yi/2, yk/2, n - 1) hilbert(x0 + xi/2 + yi, y0 + xk/2 + yk, -yi/2,-yk/2,-xi/2,-xk/2, n - 1) def main(): turtle.colormode(1.) turtle.speed(0) for depth in range(9): if 7 》 depth 》 4: # for faster rendering. turtle.getscreen().tracer(0) global count count = 0 hilbert(0.0, 0.0, 1.0, 0.0, 0.0, 1.0, depth) turtle.getscreen().tracer(1) time.sleep(2) turtle.Screen().exitonclick()if __name__ == "__main__": main()

请问怎么用c语言画出希尔伯特曲线呢

#include 《graphics.h》#include 《conio.h》int g_len;// Hilbert 曲线的单位长度// 递归绘制 Hilbert 曲线void hilbert(LPCTSTR cmd, int level){static BYTE d = 0;// 方向static POINT c = {1, 0, 0, -1, -1, 0, 0, 1};// 方向对应的轴系数if (level 《 0) return;// 处理命令字符串int i = 0;while(cmd){switch(cmd){case ’+’:d = (d + 1) & 3;break;case ’-’:d = (d - 1) & 3;break;case ’X’:hilbert("+YF-XFX-FY+", level - 1);break;case ’Y’:hilbert("-XF+YFY+FX-", level - 1);break;case ’F’:linerel(c.y * g_len);break;}}}// 主函数void main(){// 设置绘图环境    initgraph(800, 600);// 设置窗口大小outtextxy(20, 550, "按 1~8 显示不同级别的 Hilbert 曲线,按 ESC 退出。");rectangle(143, 23, 657, 537);// 绘制表示范围的矩形框setorigin(144, 24);// 设置原点坐标setcolor(RED);// 设置颜色setfillstyle(BLACK);int level = ’5’;// 设置初始级别do{if (level 》= ’1’ && level 《= ’8’)// 仅处理 1~8{level -= ’0’;// 转换为对应的数字值bar(0, 0, 511, 511);// 清空绘图区g_len = 512 》》 level;// 计算单位长度moveto(g_len / 2, 512 - g_len / 2);// 设定起点hilbert("X", level);// 递归绘制 Hilbert 曲线}}while( (level = getch()) != 27 );// 按 ESC 退出    closegraph();}

用python中的turtle画希尔伯特曲线该怎么写

代码如下,记得采纳:import sys, math, timeimport turtlecount = 0def moveto(x,y): turtle.penup() turtle.goto(x,y) turtle.pendown()def hilbert(x0, y0, xi, xk, yi, yk, n): if n 《= 0: X = x0 + (xi + yi)/2 Y = y0 + (xk + yk)/2 X2 = X * 600 -300 Y2 = Y * 600 -300 global count if count 《 1: count = count + 1 moveto(X2,Y2) turtle.color(X,Y,X*Y) turtle.goto(X2,Y2) else: hilbert(x0, y0, yi/2, yk/2, xi/2, xk/2, n - 1) hilbert(x0 + xi/2, y0 + xk/2, xi/2, xk/2, yi/2, yk/2, n - 1) hilbert(x0 + xi/2 + yi/2, y0 + xk/2 + yk/2, xi/2, xk/2, yi/2, yk/2, n - 1) hilbert(x0 + xi/2 + yi, y0 + xk/2 + yk, -yi/2,-yk/2,-xi/2,-xk/2, n - 1) def main(): turtle.colormode(1.) turtle.speed(0) for depth in range(9): if 7 》 depth 》 4: # for faster rendering. turtle.getscreen().tracer(0) global count count = 0 hilbert(0.0, 0.0, 1.0, 0.0, 0.0, 1.0, depth) turtle.getscreen().tracer(1) time.sleep(2) turtle.Screen().exitonclick()if __name__ == "__main__": main()

希尔伯特曲线的简介

1890年,意大利数学家皮亚诺(Peano G)发明能填满一个正方形的曲线,叫做皮亚诺曲线。后来,由希尔伯特作出了这条曲线,又名希尔伯特曲线。皮亚诺对区间,可规定两个连续函数x=f(t)和y=g(t),使得x和y取属于单位正方形的每一个值。希尔伯特曲线是一种能填充满一个平面正方形的分形曲线(空间填充曲线),由大卫·希尔伯特在1891年提出。 由于它能填满平面,它的豪斯多夫维是2。取它填充的正方形的边长为1,第n步的希尔伯特曲线的长度是2n - 2-n。L系统记法:变量: L, R常数: F, +, -公理: L规则:L → +RF-LFL-FR+R → −LF+RFR+FL−F : 向前- : 右转90°+ : 左转90°一般来说,一维的东西是不可能填满2维的方格的。但是皮亚诺曲线恰恰给出了反例。这说明我们对维数的认识是有缺陷的,有必要重新考察维数的定义。这就是分形几何考虑的问题。在分形几何中, 维数可以是分数叫做分维。此外,希尔伯特曲线是连续的但处处不可导的曲线。因此如果我们想要研究传统意义上的曲线, 就必须加上可导的条件,以便排除像皮亚诺曲线这样的特例。