情人节特献:有心之函数必然就有分手函数
icon2 Brain Storm | icon4 2011-02-13 18:20| icon368 Comments | 本文内容遵从CC版权协议 转载请注明出自matrix67.com

    首先,祝大家情人节快乐。不过,对于单身 Geek 来说,情人节或许并不快乐。情人节可以说是各种 Geek 们永久的伤痛了。即使是热爱数学的你,或许看到已经被转发到烂的“心之函数”今日再度走红,心中也会觉得不爽:我们发明出来的 Geek 玩物,竟然都被你们这些非 Geek 人士拿去装 Geek 泡妞用了,最终情人节宅在家里面向显示器编程度过平凡一天的反而还是我们这群 Geek 。

  

    于是乎,“订完全部大床房”、“买光影院单号位”、“扎破所有安全套”等经典段子年年少不了。当然,我也没有闲着。为什么有 Geek 式的爱情祝福,就没有 Geek 式的分手诅咒?我计划着创作一个“分手函数”,它的函数图像是一个裂成两半的心。


    要制造分手函数,首先要有一个等待被恶搞的心形原型。我所选用的原型函数则是 2006 年 5 月 4 日本 Blog 所发文章里的函数(看到五年前的文章真是让我感慨万千啊)。这个函数的形式相当对称美观: 17 x^2 - 16|x|y + 17 y^2 < 225 。用 Mathematica 画出来大概是这样:

  

    这个心形函数的成因非常简单,去掉中间一项的绝对值后你就明白了:

  

    原来,17 x^2 - 16 x y + 17 y^2 < 225 将会画出一个椭圆,因此给 x 加上绝对值,相当于把平面直角坐标系 y 轴右半部分镜像过来,就得到一个大致的心形了。我们的目标,便是要沿着 y 轴方向给这颗心加上一道的裂缝。

    裂缝一般都是锯齿形的。什么函数也是锯齿形的呢?最常用的估计就是三角函数和取余函数了吧。这里,我决定用大家熟知的并且也是相对容易控制的正弦函数来描绘裂缝的形状。考虑二元函数 f(x, y) = x ,由于所有 x 坐标相同的点函数值都一样,它的“等高线图像”就是一条条简单的竖直线,如图所示:

  

    那么,函数 f(x, y) = x + sin(y) 就是对上图中纵坐标为 y 的所有点偏移 sin(y) 的量,也就把一个个带状区域扭成了波浪。

  

    不过,这个波浪似乎还不够剧烈,离我们的“裂缝”要求远了些。我们不妨加大正弦函数的频率:

  

    哇, f(x, y) = x + sin(5 y) 的周期倒是变短了,不过这波动得也太剧烈了一些。看来,我们应该让 x 的变化也稍微剧烈一些,让它能适应 sin(5 y) 的步伐。于是,我把 f(x, y) 改成了 5 x + sin(5 y)

  

    这就有点裂缝的味道了。注意,图里看上去裂缝带有些宽,这无所谓——这只是生成图形中等高线画得比较稀而已。光从无差异曲线的分布形状来看,我们已经实现裂缝效果了。

    但是,怎样把这个裂缝应用到之前的心之函数里呢?注意到心之函数其实是一个不等式 17 x^2 - 16|x|y + 17 y^2 < 225 。如果我们能找一个两侧值小、靠近 y 轴部分陡然增大的波浪形函数 f(x, y) 就好了。把这样的 f(x, y) 加到心之函数上,就相当于给 y 轴附近的一个波浪形范围加上一个大得出奇的值,让不等式左边超过 225 ,出现裂缝状的空缺;同时,这以外的部分 f(x, y) 几乎为 0,该小于 225 的还是小于 225 , 该大于 225 的还是大于 225 ,对心形不会造成任何实质性的影响。

    什么操作能够让一个函数变得两边小到几乎为 0 ,靠近 y 轴的地方陡然增大呢?答案是“绝对值分之一”。

  

    把它应用到之前的 f(x, y) 上(函数也就变成 1/|5 x + sin(5 y)| 了):

  

    哈哈,这个有效果,中间的函数值陡然增大,大到都亮得发白了。

    让我们把这个 f(x, y) 加到心之函数上,也就是说画出不等式 17 x^2 - 16|x|y + 17 y^2 + 1/|5 x + sin(5 y)| < 225 :

  

    咦?怎么没有效果呢?且慢,仔细看图的中间,已经有一些要裂开的痕迹了。我想到了一个可能的原因:裂缝带的函数值还不够大。心形图形是由所有满足 17 x^2 - 16|x|y + 17 y^2 小于 225 的点组成的,但是这些点的函数值并不是刚好 225 ,以至于加上了一个大数后仍然比 225 小。为了扩大裂缝的影响,让我们把 1/|5 x + sin(5 y)| 的分子改成 150 :

  

    让我们祈祷这次裂缝的函数值足以把心形破坏掉吧:

  

    哈哈,这次成功了,裂开的心形!我原创的“分手方程”就此出炉了: 17 x^2 - 16|x|y + 17 y^2 + 150/|5 x + sin(5 y)| < 225 。让我们把这个不等式本身标在图上,方便在网络上传播:

  

    不过,这个分手函数有一些美中不足的地方:它用到了分式运算,不能和已有的部分很好地合并在一起,很容易看出这是由心形函数和裂缝函数拼合而成的,看上去有些平凡。另外,对于某些特殊的取值(比如 x 和 y 都为 0 ),不等式左边有可能因分母为 0 而无意义,虽然在分母上加个很小的常数可以避免,但作为完美主义者我仍然感觉很不爽。

    这个方程有诸多不完美之处,如何构造一个看上去更酷的方程呢?写了这么多我也有些累了,脑子有点不够使了。既然“情侣去死去死团”年年都少不了 Geek 方阵, Geek 恋爱困境似乎百年不能动摇;如何寻找更完美的分手函数,不妨留着我们明年再来讨论。

68 条回复

  • 楼层: 沙发 | | loveskj 说:

    sf

  • 楼层: 板凳 | | 4king 说:

    沙发,一直拿心之函数当签名的路过

  • 楼层: 地毯 | | 4king 说:

    悲剧

  • 楼层: 地板 | | kent 说:

    牛!!!

  • 楼层: 地下室 | | nanoapple 说:

    怎一个膜拜了得啊!大牛,我转了!!!

  • 楼层: 地基 | | Arrow Rowe 说:

    预祝诸位明天节日快乐~!

  • 楼层: 地壳 | | ppwwyyxxc 说:

    果断占座
    右下角要加上matrix67出品

  • 楼层: 地幔 | | ppwwyyxxc 说:

    加了PlotStyle->Red之后变得好丑。。

  • 楼层: 地核 | | hsiadawn 说:

    PlotStyle->Lighter[Red,0.5]就好了

  • 楼层: 10楼 | | hsiadawn 说:

    pic = Table[
    RegionPlot[
    17 x^2 - 16 Abs[x] y + 17 y^2 + t/Abs[5 x + Sin[5 y]] 100,
    PlotStyle -> Lighter[Red, 0.5],
    PlotLabel -> "愿天下有情人皆如此图"], {t, 0, 150, 10}];Export["qingrenjie.gif", pic]
    我觉得可以这么搞。

  • 楼层: 11楼 | | Tweets that mention Matrix67: My Blog » Blog Archive » 情人节特献:有心之函数必然就有分手函数 -- Topsy.com 说:

    [...] This post was mentioned on Twitter by 大巨傻 and 大巨傻, 黄八宝. 黄八宝 said: [GReader Share]情人节特献:有心之函数必然就有分手函数 http://j.mp/i1Oawp [...]

  • 楼层: 12楼 | | Roy 说:

    两个外星人在接吻

  • 楼层: 12a楼 | | mewing 说:

    不行了……好可怕……

  • 楼层: 14楼 | | marvy 说:

    matrix,你好
    我是上次给你留言的marvy
    是关于计算机算法的
    可能邮箱地址留错了~
    不好意思

    不知道你是否对计算机的算法也比较熟悉
    如果可能 希望能够聊一聊
    务请回复!

    谢谢!

  • 楼层: 15楼 | | TenPages66 说:

    感觉地幔的方法比较好

  • 楼层: 16楼 | | wangtao 说:

    有这心思还不如找个女朋友。

  • 楼层: 17楼 | | wecing 说:

    折腾了半天想把图弄得美观一点,无果- -

  • 楼层: 18楼 | | layla 说:

    此贴必火,强帖留名,太牛X了

  • 楼层: 19楼 | | sqybi 说:

    哇,今年好给力。。。果然单身才能有Geek的心情么。。。

  • 楼层: 20楼 | | Crane 说:

    M67牛太强了,我的心就这样了。

  • 楼层: 21楼 | | Push 说:

    牛…可以考虑用分段函数来做么?

  • 楼层: 22楼 | | iwtctw 说:

    确实太平凡了点~~不过也想不到什么美观的处理方法~~

  • 楼层: 23楼 | | Raiel 说:

    這是多麽多麽多麽應景呀!

  • 楼层: 24楼 | | 忘言 说:

    不知不觉在这个心碎的函数中迈进了情人节。

  • 楼层: 25楼 | | alswl 说:

    果然是Geek的恶趣味啊,不过我喜欢~

  • 楼层: 26楼 | | wilyin 说:

    0 0咱用FP试了下(额...是从292那篇学会的..膜拜下)
    按照这个不等式出来是纵向反过来的图形..
    所以我觉得可能要改成
    17*(x*x+y*y)+16*y*abs(x)+(150/abs(5*x-sin(5*y)))<255
    PASCAL的渣表达式T_T...再膜拜

  • 楼层: 27楼 | | 火星人地球观光客 说:

    http://www.wolframalpha.com/input/?i=17+x^2+-+16|x|y+%2B+17+y^2+%2B+150/|5+x+%2B+sin(5+y)|+%3C+225

    高明

  • 楼层: 28楼 | | collvey 说:

    ....

  • 楼层: 29楼 | | lukmy 说:

    很ws的一个方法是用傅里叶变换把一个破碎的心形图像给变成有限个三角函数的叠加……这个方法准确但是更没有数学含量……

  • 楼层: 30楼 | | Vicia 说:

    明天数学考试,今天看到这么篇文章,感觉颇妙。xD

  • 楼层: 31楼 | | loveisp 说:

    换成17 x^2 - 16|x|y + 17 y^2 + 150/(5 x + sin(5 y))^8 < 225 之类的指数函数的倒数,会比绝对值函数的倒数好看些。

  • 楼层: 32楼 | | Eagle_Fantasy 说:

    Orz!!!

  • 楼层: 33楼 | | Eagle_Fantasy 说:

    Matrix神牛 你以后可以在所有图上都加上水印Matrix67 这样就不怕盗图了。。

  • 楼层: 34楼 | | 日月山人 说:

    牛人真多!

  • 楼层: 35楼 | | 虾米 说:

    难道这么有才的gg都米人要么==

  • 楼层: 36楼 | | 情人节特献:有心之函数必然就有分手函数 | orzREAD 说:

    [...] Matrix67: My Blog [...]

  • 楼层: 37楼 | | 御手洗破 说:

    啊,真是有趣额……大神级……

  • 楼层: 38楼 | | Magi 说:

    膜拜+求婚……M67, will you marry me?

  • 楼层: 39楼 | | funphy 说:

    ls亮了,含泪祝福~~

  • 楼层: 40楼 | | layla 说:

    ls好亮。。。。

  • 楼层: 41楼 | | Ernest 说:

    漂亮!!

  • 楼层: Answer to Life, the Universe, and Everything | | Ernest 说:

    Geek就是不平凡!!

  • 楼层: 43楼 | | Aspirin 说:

    膜拜中......

  • 楼层: 44楼 | | 1900 说:

    改了一下,似乎 17 x^2 - 16|x|y + 17 y^2 + 150/|9x + cos(9y)| < 225 这个效果更好一点,有点撕裂的感觉

  • 楼层: 45楼 | | iceberg 说:

    Big Bang Theory里面提到,常用心形的来历,其实是臀部...

  • 楼层: 46楼 | | Si 说:

    这不是函数,是寂寞。

  • 楼层: 47楼 | | 十七 说:

    原来注册是要留言才可以的呀

  • 楼层: 48楼 | | hsiadawn 说:

    M67大,有人分别画了左半心,和右半心。然后我们可以“掰”开它。
    http://tieba.baidu.com/f?z=1000246637&ct=335544320&lm=0&sc=0&rn=30&tn=baiduPostBrowser&word=%CA%FD%D1%A7&pn=0此贴30L

  • 楼层: 49楼 | | KIDzyd 说:

    5月4"日本"Blog
    eeee

  • 楼层: 50楼 | | qyjubriskxp 说:

    此贴必须膜拜

  • 楼层: 51楼 | | hbc 说:

    强烈要求M67大出 mathematica 教程!

  • 楼层: 52楼 | | 棕发少女 说:

    我爱你~!

  • 楼层: 53楼 | | 晓而不羽 说:

    没关系啦,神马分母为零的,两边乘上分母的绝对值不就行了

  • 楼层: 54楼 | | 大大的小蜗牛 说:

    这个,我只能膜拜一下,我已经无法言语。

  • 楼层: 55楼 | | wayne 说:

    原创谈不上吧

  • 楼层: 56楼 | | Mr.Wrogn 说:

    大神。。。

  • 楼层: 57楼 | | ONEBOYS 说:

    顶了。

  • 楼层: 58楼 | | 宇行者 说:

    lz厉害啊,刚在wolfram网站上找到了一个心形分裂的demo,而且还是可以Manipulate的,但那个图形就不如楼主选的这么好看了。可以参看http://demonstrations.wolfram.com/BrokenHeart/。

  • 楼层: 59楼 | | orbea jersey 说:

    你想到这个了吗

  • 楼层: 60楼 | | 画心 « 半个书呆子——大宇的博客 说:

    [...] 看到matrix67的博文关于心形和心碎的数学函数,觉得很有意思。(见《情人节特献:有心于是之函数必然就有分手函数》) 难点的在于函数表达式, 能找出这么个function是很废周折的。想偷懒直接拿来他的方程试试看什么效果。可惜我熟悉的matlab没有把不等式直接出图的函数。于是,编了个简单的程序看了看。并且试了一下3D的桃桃,方程来自 http://www.mathematische-basteleien.de/heart.htm。 [...]

  • 楼层: 61楼 | | 形状特别的数学函数 心形 | Leon 说:

    [...] 也不是所有函数g叔都能画,比如说带有等号、大于号、小于号这样的函数。knowledge engine wolframalpha比google更会绘制函数图。找了几个形状很特别的函数,有些函数来自 matrix67。 [...]

  • 楼层: 62楼 | | phoeagon 说:

    做成动画吧。。。。。。好像这个:http://phoeagon.byethost15.com/blog/wp-content/uploads/2012/03/animate.gif 这样比较有震撼。。。。

  • 楼层: 63楼 | | » Mathematica与Google Earth paradox2 说:

    [...] 首先找一个生成心形的函数,这个网上比较多,我用的是这个(微博图片里的那个)。下面函数的参数也好理解,a表示横坐标偏移,b表示纵坐标偏移,t表示横坐标放大倍数,s表示纵坐标放大倍数: [...]

  • 楼层: 64楼 | | dc 说:

    请问这个是用什么绘制的?

  • 楼层: 65楼 | | 想想 说:

    虽然楼主大神的sin函数还没学,看不懂- - 不过我想那个“绝对值分之一”好像没有这个好:{-|x-1|/[2(x-1)]+|x+1|/[2(x+1)]} ------x取-1~+1时y为1,其他y为0

  • 楼层: 66楼 | | anyway 说:

    虽然楼主大神的sin函数还没学,看不懂- - 不过我想那个“绝对值分之一”好像没有这个好:{-|x-1|/[2(x-1)]+|x+1|/[2(x+1)]} ------x取(-1)~(+1)时y为1,其他y为0

  • 楼层: 67楼 | | Alien 说:

    我想知道有没有一对情侣的.. 能不能把 17 x^2 - 16|x|y + 17 y^2 + 150/|5 x + sin(5 y)| < 225的图像拆成两部分.. 就是有两个方程.. 可以当情侣签名用..

  • 楼层: 68楼 | | cervelo 说:

    看到matrix67的博文关于心形和心碎的数学函数,觉得很有意思。(见《情人节特献:有心于是之函数必然就有分手函数》) 难点的在于函数表达式, 能找出这么个function是很废周折的。想偷懒直接拿来他的方程试试看什么效果。

您也随便说几句吧:

您可以在 Gravatar 设置您的头像。