《星星公主》——冒牌神作

前一阵子在知乎上看到了「求推荐虐心漫画」的问题,有人推荐了鬼头莫宏的漫画「星星公主」。于是我就兴高采烈的去看了(绝对是有病)。

漫画讲述了主角玉依希娜小学毕业之际回老家探亲,去海里游泳意外遇险即将溺亡之时与名为「星丸」的「龙之子」相遇,并因此展开奇妙冒险的故事。

这部漫画特点倒是鲜明,优点突出,问题也很明显。

首先最明显的问题就是作者的画风问题。人物外形之间的差别有些微妙,导致人物的可辨识度略低。作为故事中主要人物的涅见子、小明、里美和典夫不仔细看的话,甚至有些难分清。这点说起来有些好笑,典夫这个伪娘混在一群小姑娘中间,竟然能做到安能辨我是雄雌,不得不说鬼头画伪娘很有一套,也从侧面验证了那个画伪娘的方法(1.画一个女孩子2.硬说他是男性)的可行性。人物可辨识度降低带来了一个问题,当场景切换时,尤其是翻页时,思维无法快速的随之切换,两格之间的人物和剧情都有可能连不上。即使漫画天生具有可以自行调整阅读节奏的优点,无法做到行云流水的阅读的漫画看起来还是有些难受,毕竟看书老得往回翻还是挺烦的。关于这个问题的出现,作者也在单行本的卷首做出了说明。每卷的卷首作者都会把自己初期的设定放上去。有一卷作者放上了希娜的各种人设作为说明,其中任意一种都比现在被采用的形象更容易辨识。不过作者还是采用了目前的人设,据作者所说是因为「如果采用了其他的任一种形象,画到后面会麻烦的疯掉」。对比之下,作者对于飞机的描绘却细致入微到桑心病狂的地步。所以说矫情是一种没药医的病啊!

其次一个比较明显的问题是分镜问题。场景切换的太突然,经常上一个场景还没有把事情说清,就切入了下一个场景或是某段回忆。加上之前说的人物的辨识度问题,会让人觉得自己是不是少看了一段。

另外,故事的分节安排也有问题。「小广校园欺凌事件」和「苏联大妈寻子记」和主线剧情关系不大,在分支剧情上花的笔墨有些多。这导致本来应当是主角的小明等一众人的出场率降低,而且会有一大段不露面,降低了其存在感。看完之后让人觉得小明几乎就是个从头到尾自怨自艾、歇斯底里的酱油角色。故事完全就是希娜一个人在推进。主要角色缺少导致故事单薄。

还有,剧情有的时候实在是没什么逻辑。本木的飞机被接连击落也好,希娜和他爸陷入种种危机也好,希娜他爸在俄罗斯碰见的灵异事件也好,一个人经过这种事情中的任一个,都会心情大起大落、难以平复,理智上也会遭受重大冲击,事后被当局控制进行询问也是理所应当的。可是希娜和他爸上一节还性命不保,下一节就又回到家里愉快的做饭唠嗑了,故事与故事之间没有线性联系。这个叙事问题在「上古卷轴5」体现的也很明显,本来宏大的世界就被分解成了一个一个小家子气且不互相联系的地洞。

最后,作品对于环境的描写过于单薄,对于主角的描写太多。故事中除了出动空自、陆自围歼龙之子和龙之子研究机构以外,没有涉及任何政治环境和经济环境的描写。最后一本中主角自说自话般的就翻手为云覆手为雨的将人类社会毁灭了,实在是有些突兀,给人一种小兔子暗黑无限破的错觉,这也是世界流作品的常见问题。相比之下「the end of evangelion」的补完结局则因为之前进行了世界观的种种铺垫,selee的翻脸则显得很容接受。当然也正是因为前期没什么铺垫,才导致故事的主线剧情极富有冲击力,前11本的铺垫,在第12本中瞬间爆炸,之前没有解释的种种疑点,一瞬间都有了解释。剧情的风格也急转直下,直接变成了黑暗童话作品。

从故事的展开方式看,其实这部漫画颇为老套。往前看有「数码宝贝」(话外音:心跳宝贝,心跳心跳宝贝,小盆宇们的最爱,和主角敏民还有一百种以上神受们一起踏上征途吧!),往后看有最近正在热播的「寄生兽」(话外音:凉宫春日是宇宙人!)。事实上,大多数作品也都是在循规蹈矩的沿着前人的道路前行,而沿袭的方面并不只包括剧情结构,也包括题材和表达方式,像「恶之华」那样突(you)破(bing)的作品并不是很多。而「恶之华」也验证了难有突破的道理,理所应当的大宝石了。

所以现在的市场上流行的作品——动漫也好,游戏也好——都是一波一波的。上世纪80年代机器人比较火,一堆萝卜片;最近僵尸题材比较火,「行尸走肉」加「Last of us」。20年前宏大叙事,「银英」、「攻壳」;现在日常废萌,「KON」、「Love Live」。市场和制作商像是形成了正反馈,输出的作品随着时间推移在某一个方向上偏移的越来越多。

除非遇见经济危机什么的,貌似作品的风格可能很难发生变化了。可能这也是种补偿效果的体现,经济繁荣的时候,生活太平淡,人们就喜欢看些复杂的作品,让现实生活显得不是那么无聊;现在经济下行了,人生已经如此艰难,有些事情就不要拆穿,所以大家都去看些日常废萌的作品,才让现实生活显得不是那么绝望。

「星星公主」和「eva」之类的作品能让人愉悦,从补偿的观点来看,也是因为满足了人们部分自我意识膨胀的欲望。让读者收到潜移默化的暗示,即使是一个人,也可以像希娜和小碇一样,拥有改造周遭环境的能力。只不过「星星公主」有点虐,改造失败了。让读者能从某种程度上逃避人类在铁板一样的现实面前,往往显得束手无力的事实。

这种补偿式的设定虽然能让人分泌多巴胺和内啡肽,不过问题也很明显。主角要么像桐人一样顺风顺水人生赢家,要么就是被各种虐。没有人的人生是这样的,我理解的现实应当是悲喜交加的才对。从这个角度上看,「欢迎来到NHK」在这点上做得不错,主角从悲到喜,又从喜到悲,又从悲到喜,最后悲喜交加之下放弃抵抗,默默的接受了自己的现实,选择与无常和谐共处。就像「活着」里那个放牛的老人一样,也许这才是生活的本来面目。

面对着满目疮痍的现实,默默的点上一根烟,疲惫的选择无力,和无常共处也许才是唯一的选择。

面对着满目疮痍的现实,默默的点上一根烟,疲惫的选择无力,和无常共处也许才是唯一的选择。

小波与滤波器组学习笔记2:Haar System与MRA

小波这个课已经越来越神了。上了大概八周课之后,现在已经出了第二节课开头的心灵鸡汤20分钟以外,完全都听不懂了。相对比之下,数值分析这门课还真是如开学选课时听说的“亲民”,一如既往的能勉强听懂。

对比之下就更显得Mallat大神有多么牛...在那么年轻的年纪就随随便便的建立了我们怎么都学不会的理论。人和人的资质果然是有差距的啊。

话归正题,今天上完课老师要求我们到时候推Haar Function和其对应的nested sets符合Multiresolution Analysis(MRA)的定义要求。被老师拽着鼻子拽了两节课,下了课照着老师说的想了想节课,还真是心里没谱。遂翘了半节晚上的AI就回到宿舍趁热看看这部分内容。鉴于考试要考这个,所以还是赶紧记下来为重。

其中MRA的定义各个地方的叙述方式都有写差别,主要集中在嵌套集合的下标顺序上。老师课件上和wikipedia上写的都是 [V_{j+1}subset V_j]

不过网上找了几篇论文和几个网站(GT和bell的官网上等)上的说明pdf,都是写的 [V_jsubset V_{j+1}]

鉴于本文的目的暂时是为了最后的考试,所以暂时采用老师的定义方式。

最后MRA的定义如下,要求嵌套集合(V_j)和函数(varphi)满足如下五个条件。

  • (cdotcdotcdot V_2 subset V_1 subset V_1 subset V_0 subset V_{-1} subset V_{-2} cdotcdotcdot)
  • (overline{bigcup V_j}=L_2(R))且(bigcap V_j = {0})
  • (f(t)in V_i Leftrightarrow f(2^it)in V_0)
  • (f(t)in V_0 Leftrightarrow f(t-n)in V_0)
  • 存在(V_0)的标准正交基({varphi (t-n)|nin Z})

以下将对以上各点进行不严谨的证明。(数学没学好啊!)

5.对于Haar小波的尺度函数,当scale为1时,由于其长度为1,且幅值为1,所以其天然构成(V_0)的标准正交基。

4.若(f(t)in V_0),由于(V_0)可以分布在整个实轴上,则对其进行平移,得到的函数依然属于该集合。

以上两条均由于Haar小波的尺度函数,很明显。

3.5和4中只对(V_0)进行了定义,并没有规定集合的嵌套规律。定义(V_j)由对应该集合下标的Haar小波尺度函数为标准正交基展开。则由于本定义,第3条定义也天然成立。

1.首先明确,嵌套集之间的关系和集合中元素的幅值并无关系,因为标准正交基前所乘以的系数是随意的。而(j)越小,其尺度函数自变量(t)前的系数(2^{-j})越大,所以在实轴上细分的份数就越多。直观来看,同样一段直线,(j)越小则细分的分数越多,“自由度”越高,能构成的图形越复杂(而不再是平板一块,可以构成阶梯形之类的)。所以1成立。

2.如果(fin bigcap V_j),则该函数一定是一个常数。而由于(fin L^2(R)),所以(f=0)。后半部分成立。

接下来看前半部分。对于任意(fin L^2(R)),直观上(intuitively,我终于也用上这个词了233)都存在一个(f_j)使得[parallel f^2-{f_j}^2 parallel leq frac{varepsilon}{2} ]

形象点说就像用一个不断变化的阶梯去拟合(f)的曲线一样,当(j)足够大时,上式成立。即前半部分成立。

后记:老师那个嵌套集的下标顺序真的很不好用...而且由于数学基础太差,上述文字也只能撑死称作说明,不能称作证明,实在是太弱了,权当帮助理解顺便期末混分吧。

最后拜Mallat大爷!(和Stuart长得真是像)

StephaneMallat

Matlab中牛顿插值看代码矩阵化的必要性

2014年的国庆假日,来的并不以往晚一些(废话)。小伙伴们都愉快的回家与家人团聚或是进城感受社会主义现代化成果。懒得出奇的我自然没有回家,也没有在这个“良辰吉日”出去玩。在宿舍宅了些许天,片子看了不少,作业倒是没动。这不假期没几天了,赶紧把作业补了。

数值分析作业里有唯一的一道代码题,很是稀疏平常,是求一个四次牛顿插值多项式。想来自己好久没写matlab了,没事动动手,要不都锈死了。

代码也挺稀疏平常,就是把书上的东西搬成了代码而已,不过原来写代码的时候没怎么注意过代码的效率问题。这次突发奇想想看看矩阵运算和循环能差多少。

先把代码贴这把。

首先是函数的m文件,NewtonPoly.m:

function [ out ] = NewtonPoly( pts, fvalue, in )
if length(pts)~=length(fvalue)
    return;
end
ptsLen = length(pts);
inLen = length(in);
bigMtx = zeros(ptsLen,ptsLen+1);
bigMtx(:,1)=pts';
bigMtx(:,2)=fvalue';
tic;
for i=1:(ptsLen-1)
    bigMtx(i+1:ptsLen,i+2)=(bigMtx(i+1:ptsLen,i+1)-bigMtx(i:ptsLen-1,i+1))./(bigMtx(i+1:ptsLen,1)-bigMtx(1:ptsLen-i,1));
end
toc;
out = zeros(1,inLen);
subX = ones(1,ptsLen);
out(1,1:inLen)=bigMtx(1,2);
tic;
for i=1:inLen
    subX(1,1:ptsLen) = in(i);
    subX = subX - pts;
    for j=2:ptsLen
        out(i)=out(i)+bigMtx(j,j+1)*prod(subX(1,1:j-1));
    end
end
toc;
end

然后是调用函数的文件,C2P2.m:

clear;
clc;
in = -4:8/100:4;
tmp = 0.2:0.2:1.0;
fValue = [0.98 0.92 0.81 0.64 0.38];
tic;
out = NewtonPoly(tmp,fValue,in);
toc;
plot(in,out);

输出是:
Elapsed time is 0.000086 seconds.
Elapsed time is 0.001977 seconds.
Elapsed time is 0.002401 seconds.

其中第一个是第一个只有一层的循环所耗费的时间;第二个是两层循环所耗费的时间;最后的是总共的时间。第一个时间耗费的时间少是因为ptsLen比较短,所以不明显。

不过还是可以清晰地看出这个问题,for循环的效率太低。可以想象如果我在第一个循环中不矩阵化,时间肯定会耗费的更多一些。

矩阵化虽然比较好,不过想起来也比较费脑子,又要省空间又要省时间挺难办到的,感觉还是比较需要经验的。