[mathjax]

几天前,小木虫 上有人提问这样一个问题:

在一个有界闭区间 (例如[0,1]) 上连续的凸函数其不可微点构成的集合是否可能没有内点?

由于连续的凸函数在有界闭区间的每个点上至少存在左右导数,也就是说,连续凸函数的导函数至多只有第一类间断点。并且,由凸函数的性质,我们还能证明凸函数的导函数一定是单调函数。因此,要回答上述问题,我们只需要说明:

是否存在这样的单调函数,它的间断点的集合在有界闭区间上稠密?

more

事实上,这样的单调函数是存在的。经过一番搜索,我发现前人已经研究过类似的问题,其结论是:

对于任意可列集 ({a_k}_{k\in\mathbb{N}}), 都能找到一个单调函数 (F(x)),使得 (F(x)) 以 (a_k) 为其间断点。

构造方法很简单,只要令:[ F(x) = \sum_{a_k < x} \frac{1}{r^k} ] 即可,其中(r)是一个大于1的常数。证明 (F(x)) 是单调函数,并且以 (a_k) 为间断点,可以参考

论文一 或者 论文二

下面,以 [0,1] 中的有理数集为对象,我给出函数 (F(x)) 的大致图像:

[caption id=“attachment_165” align=“aligncenter” width=“300”] 在 [0,1] 中有理数集上间断的单调函数[/caption]

为画出这样的图像,我们使用了 Mathematica. 其关键是不重复地列出所有 [0,1] 中分母小于 (n) 的有理数,并对于 (a_k < x) 的 (k) 求和。为此,我们使用了 Table 命令来创建有理数列表,并用 Total 命令对于 (\frac{1}{r^k}) 的列表进行加和,代码如下:

`

n = 20; r = 1.05;

a = DeleteDuplicates[Flatten[Table[Table[i/j, {i, j}], {j, n}]]];

F[x_] := Total[Table[If[a[[i]] < x, 1/r^i, 0], {i, Length[a]}]];

Plot[F[x], {x, 0, 1}]

`

注意,Flatten 命令的目的是把多层列表(nested list)转化为一普通列表,而 DeleteDuplicates 的作用是去掉列表中的重复项。Mathematica 中,取列表中第 i 号元素的方式是两层中括号 a[[i]]。Mathematica 中对于列表的处理是异常强大的,大家可以慢慢体会它的强大与灵活。