2

我正在尝试绘制以下函数:

f(x) = 0 if x is rational else 1 # so 1 if x is irrational 

我的计划是使用 python 和 matplotlib。如何在 Python 中生成随机无理数?

4

4 回答 4

12

这被称为狄利克雷函数,它是无处连续函数的例子。这是一个简单的数学事实,在任何一对数之间,都有无限个有理数和无限个无理数。

在实践中绘制此函数等效于绘制f(x) = 0 和f(x) = 1,因为您使用离散像素进行绘制。

有两个陷阱:

无论哪种方式,这种“问题”都不应该作为严格的编程问题来处理。

于 2012-09-20T12:24:00.173 回答
4

The answer is you can't.

What you can do is figure out some epsilon after which this number is considered irrational.

It will look the same.

consider this: square root of 2 is an irrational number.

wolframlpah gives you an approximation : 1.4142135623730950488016887242096980785696718753769480...

python only sees 1.4142135623730950488016887242096980785696718753769480 which means: 1+ 4142135623730950488016887242096980785696718753769480/ 10000000000000000000000000000000000000000000000000000

于 2012-09-20T12:32:31.967 回答
3

随机数几乎总是无理数(即概率为 1)

def f(x): 
    return 1

几乎总是随心所欲地工作!

于 2012-09-20T12:23:36.930 回答
0

不能在计算机程序中表示无理数是不正确的。它不适合记忆,你不能打印整个无理数,但你仍然可以用它们做一些计算,并做一些操作,比如“给我前 100 位数字”。您可以将它们表示为一种惰性枚举器。问题是,这并不真正符合您的需求,因为检查这种数字是否有理相当于停止问题,因此无法确定。

但是在区间中选择一个无理数,例如在 0 和 1 之间,并不总是不可能的,它只取决于你想做什么。我最近这样做了,但是这些数字的应用只是因为它们必须进行比较,并且算法的一些决定取决于这些比较。在这里,将它们表示为惰性枚举器可以正常工作:如果进行比较,则从左侧开始并比较每个数字,直到一个数字具有更大的数字。所以我们只是动态生成随机数字并将生成的数字存储在一个数组中,直到它们与我们要比较的数字的对应数字不同。

只是为了弄清楚有限数和无限数之间的区别,我们只需要有限部分:在第一种情况下,数字的长度是固定的和有界的,在第二种情况下,我们只需要存储一个有限的位数,但这个数字可能会超出任何范围,所以如果我们比较足够多的数字,每个有限数都不同于这样的无限数。

于 2012-09-20T16:27:36.067 回答