「卍関数」を書いてみる

こんにちは。寝起き(@teimon0)です。

これはョョョAdvent Calender 2020の16日目の記事です。
adventar.org

これが本来ョョョAdbentCalenderに書く予定だった記事です。AdCに空きがあったので、なにか書けることないかなーーと考えたんですが、新規性のあるネタを吐き出せないなあと思って諦めの舞を踊っていました。でも、なぜか突然「卍関数」を思い出したので、ここに吐き出すことにしました。本稿では私が1年半前くらいに考えたネタを再検討し、考察を加えていくことにします。

難しい話はあまりなくて、高校数学を前提にして(それも一部がっつり高校数学の焼き直し)書いたので、まあちゃららーーーと読んでください。

せぷねこニキ周辺の各位が関心を持つ分野やョョョAdCの想定分野(要するに技術系のさむしんぐ)とは大きく異なりますが、まあ適当に読んでいただけると嬉しいです。

ョョョねこ要素はかけらもないので、ョョョねこをお求めの方はご注意ください。

目標

卍関数とは?


卍関数といって、なんのことやねんと思った方がほとんどだと思います。別に学問的な呼び方というわけではなく、ただ「まじ卍~~~」が流行っている時期にふと思ってやっただけです。
ここで、卍関数とは、「それがとる点を座標平面上にプロットすると、全体の形が『卍』の形になる式」を指します。これを作成することが第一の目標です。

適切でない例 - 複数本の式

しかし、これはたとえば次のような式でもって簡単に実現できるでしょう。
\displaystyle{
\left\{ \begin{array}{ll}
x=-1 & (-1\leq y\leq 0) \\
x=0 & (-1\leq y\leq 1)) \\
x=1 &(0\leq y\leq 1) \\
y=-1 & (-1\leq y\leq 0) \\
y=0 & (-1\leq y\leq 1) \\
y=1 &(0\leq y\leq 1) \\
\end{array} \right.
}
これは要するに卍を縦3本横3本で合計6本の直線によって表現しています。
しかし、これは正直当然の結論です。複数本の線をばらばらに使ったら当然できるに決まっています。

適切でない例 - 関数と定義域

そこで、もっとスマートな形を考えてみましょう。
\displaystyle{
\lim_{c \to \infty} (x^c-y^c)=xy \;\; (-1\leq x\leq1,-1\leq y\leq1)
}

f:id:neoki_teimon0:20201216003202j:plain
図1


xyに範囲を与えずcを変化させて描画すると上図の通りです。c=2(紫),3(青),5(水),8(緑),10(黄),100(桃),500(赤)の7つの場合を示しています。c=2は当然として、cの値が小さい時は興味深い振る舞いをすることがわかりますが、それはともかくとして、x,yの絶対値がともに1以下の領域についてみれば、cが大きいほどより卍の字に近づいていくことを見て取ることができます。

恣意的な定義域

しかし、これらは正直つまらないと思うのです。というのも、定義域を課している時点でその式のいわば「おいしいところ」だけつまみ食いしているようなものです。定義域はたしかに式の一部ですが、式そのものというよりは式を拘束しているというべきで、そのように拘束をかける根拠ガ「たまたま卍になるから」というのは非常につまらないものです(しかし、上に示したグラフを見る限り、範囲内の格子点、すなわち(-1,-1),(-1,0),(-1,1), (0,-1),(0,0),(0,1), (1,-1),(1,0),(1,1)の9点が明らかに特徴的なので、なにか面白い性質があるのかもしれません。)。

関数とは

また、卍関数が「関数」を名乗る以上、完全にそうではなくとも、可能な限り関数の要件を備えておきたいものです。
ここで、関数の定義を示します。つまり、定義域内の変数xに対して、f(x)がただ一つの値yを返すとき、f(x)xの関数である、とします。定義域内で必ずf(x)が値を返す必要があるので、定義不可能な点(発散してしまう点やゼロ除算となる点)があれば、そこは定義域から排除する必要があります。たとえば中学生でやる反比例の式\displaystyle{y=\frac{a}{x}}x=0で定義できませんから、定義域から排除する要請が式からあらわれることになります。

関数の定義を踏まえた上で、先に示した\displaystyle{\lim_{c \to \infty} (x^c-y^c)=xy}を見てみましょう。これは関数といえるでしょうか(極限が入っているとまずいので、極限をとるまえの十分に大きいが有限の値であるcをとっていると考えてみましょう。今回の場合であれば、グラフを見る限りc>8くらいでは卍の表現に近づいていることがわかるので、たとえばグラフでは桃色の線で示したx^{100}-y^{100}=xy \;\; (-1\leq x\leq1,-1\leq y\leq1)でいいでしょう)。

f:id:neoki_teimon0:20201216003136j:plain
図2

これは、関数とはいえません。なぜなら、たとえば\displaystyle{\frac{1}{2}}を代入すればy\approx-9.93\times10^{-1}y\approx1.58\times10^{-30}という2つの値を返してしまいます。図に示すように、\displaystyle{x=\frac{1}{2}}と2つの交点を持ってしまいます。

陰関数と陽関数

ところで、先述の式はすべて左辺に移行してしまえば、次のように書くことができます。(面倒なので定義域は省略します)
\displaystyle{
x^{100}-y^{100}-xy=0
}


このように、f(x,y)=0の形で記述されるものを陰関数と呼びます。このほかにも、たとえば中心が原点で半径が$r]である円はx^2+y^2-r^2=0と書けますから、これは陰関数です。また、たとえば比例の式は-ax+y=0と書けますから、これも陰関数です。

一方、y=f(x)という式で記述されるものを陽関数と呼びます。先の比例の式はy=axと書けますから、これは陽関数です。
比例の式はうまく陰関数から陽関数への変形ができました。また、逆に陽関数から陰関数へ変形することもうまくできることは明らかにわかります。しかし、円の式は陽関数の形にしようとするとy=\pm \sqrt{r^2-x^2}となりますから、複数(今回の場合は2本)の陽関数へ変形されます。つまり、1本の陽関数は1本の陰関数に変形できますが、1本の陰関数が1本の陽関数に変形できるとは限りません。

関数の定義を思い出してください。xを与えればyがただ1つ定まるfが関数でしたから、陽関数表示されている式は(やばい特性を持っていない限り)関数の定義を満たしますが、陰関数表示されている式はかならずしも関数の定義を満たしません。たとえば半径$r]で中心を原点に持つ円の式はx=0に対してy=\pm rのように2つのyの値を返してしまいますから、これは明らかに関数の定義を満たしません。

このように、陰関数の形で示す式は必ずしも関数の性質を満たさないのですから、卍関数を名乗る以上はできるだけ陽関数で書きたいというモチベーションが現れます。

まとめ

以上をまとめると、卍関数をこれから書くにあたって、
1.1本の式で書ける
2.陽関数で書くことができる
3.式の中の要請によって定義域が出現する
ことを要求することにします。

直角の表現

まず、卍をどう表現するか考えます。この文字の中にある直角変化を陽関数でどう表現すべきでしょうか。

delta関数

ここで、Diracのdelta関数という便利なものがありますので、紹介します。

f:id:neoki_teimon0:20201216003121j:plain
図3

このように、0\leq x\leq1ではひょこっとy=1になっていて、それ以外の領域では0になっている連続関数D_1(x)(ここですでに「関数」性を持っていないという批判はもっともですが、とりあえず便宜的に関数と呼びます)を考えます。(矩形パルスというべきですかね)

ここで、ぴょこっと飛び出している部分は縦1横1の正方形ととらえられますから、この関数の全域積分は当然
\displaystyle{
\int_{-\infty}^{\infty} D_1(x)dx =1
}
となります。

この正方形のうち、x軸にくっついている辺の長さを考えましょう。小学校でいうところの「よこの長さ」です。ここの長さを今後lと呼ぶことにします。
ここで、先の関数D_lを思い出してください。あれは、「よこの長さ」lが1の長方形(つまり正方形)の部分をグラフに持っていました。この「よこの長さ」lに対してそれぞれDが決められそうです。

そこでD_l(x)を、x>0では0をとるが、x=0で瞬間的に\displaystyle{\frac{1}{l}}まで増加しx=lまでその値を維持し、x=lで同様に0まで急激に減少し、以後[texx>l]で0を取り続ける連続関数、としましょう。
定義から、D_lは0より大きいlに対して次のような性質を持っています。
\begin{align}\displaystyle{\int_{-\infty}^{\infty} D_l(x)dx=1}\end{align}
面積1を保ちつつ、l(と、向かい合う辺の長さ)を短くすればするほど「たての長さ」は長くなります。たとえばl=1,2,3,4,5で作図すると、長方形の形は図のようになります。

f:id:neoki_teimon0:20201216003125j:plain
図4

長方形の面積は1に保たれていることに注意してください。
図中で破線で示した曲線はxy=1です。長方形の頂点のうち1つ(右肩側の点)がかならずこの曲線の上にあることがわかりますね(当然といえば当然なのですが)。
これはdelta関数を議論するうえでたいへん重要な性質を示します。つまり、lが小さくなればなるほど、面積1の長方形の「たての長さ」はどんどん大きな値をとることになっていきます。そして、最終的には正の無限大に発散します。
このように極限までlが0に近づいているときのD_l(x)\delta (x)と定義しましょう。つまり、
\displaystyle{\delta(x)\equiv \lim_{l \to +0} D_l(x)}
と定義します。この\delta(x)こそがDiracのdelta関数です。(ここではdelta関数を定義しましたが、delta関数とはこういうようななりたちで理解できる関数である、といったほうが正確です。実際、delta関数の定義というのは
\displaystyle{\delta (x) \equiv \left\{ \begin{array}{ll}\infty & (x=0) \\0 & (x \neq 0) \\\end{array} \right.}
で記述されます。そのため、delta関数の導入までの議論がよくわからなかった、きれいではない、というのであれば別の関数を使っても構いません。たとえばD_l
\displaystyle{D_{l} (x) = \left\{ \begin{array}{ll}l\cos{l\theta} & (-\frac{\pi}{2l}\leq x \leq \frac{\pi}{2l}) \\0 & (\rm{otherwise}) \\\end{array} \right.}
と定義すれば、これは極限をとるまえから明らかに偶関数ですし、(いままでの適当な意味の、ではなく、定義をちゃんと満たした!)関数ですから、こちらの方が綺麗ではありますね。

f:id:neoki_teimon0:20201216015924j:plain
図5

参考までに、図5にこれでlを変化させた場合の非ゼロ部分のグラフの形を示しておきます。)

どれだけlが小さくても長方形の面積は1に保たれるのですから、lのゼロ極限をとってしまっても面積は1に保たれています。つまり、全域積分の結果も1のままです。

このdelta関数、面白い性質、便利な性質がありますし、だからこそDiracもこれを発明したのですが、今回はただ卍を書くことが目標なので、詳しく触れることはしません。

ここで、はじめにせっかく導入したにもかかわらずごまかしてきた、このdelta関数が関数といえるのか、という問題がありますが、まあ端的に言ってしまえば関数ではありません。なぜならx=0で値をとらず正の無限大に発散しているにもかかわらず、x=0は定義域から排除されていません。そのため、このdelta関数は関数(function)ではなく超関数(distribution)という括りに入ります。関数の拡張概念みたいなものらしいですが、詳しく知りません。物理学徒的には使えればどうでもいいです。

ステップ関数

このdelta関数を積分した関数H(x)を考えてみます(Heavisideのステップ関数と呼ばれます)。つまり、
\displaystyle{H(x)\equiv \int_{-\infty}^x \delta(\xi) d\xi}
と定義します。
ステップ関数は
\displaystyle{H(x) = \left\{ \begin{array}{ll}0 & (x<0) \\1 & (0 \leq x) \\\end{array} \right.}
とふるまいます。これをグラフに起こすと、図のとおりです。

f:id:neoki_teimon0:20201216003154j:plain
図6

delta関数の性質から、ステップ関数もx=0においてちゃんと連続しています。

これでまず、卍という形の中で特徴的な、直角にふるまう陽関数を手に入れることができました。

定義域の設定

次に必要なことは、定義域の獲得です。

先述した通り、定義域を「たまたま都合がいいので」という理由で決めるのは、別に物理的な要請とかがあるわけでもないので、不自然です(自然じゃないものを作ろうとしているのに不自然という理由を持ち出すのは整合性がないという批判は甘んじて受け止めます)。
そこで、使いたくない(つまり今回の場合は、卍の文字を表示するために必要ではない)エリアを排除することが、関数の定義から数学的に要請されるように、うまいこと係数をつけてやればよさそうです。

どういう係数をつけてやればよいか、ですが、使いたい領域(つまり、定義域内にしたい領域)では1を返して、定義域外のxを代入すると値が定義できない(つまり、無限大に発散してしまうなど)ようなものができれば嬉しいです。

では、定義域をどう決めましょう。これは簡単で、-1\leq x\leq1にしてしまいましょう。これは見てわかる通り、なんとなく都合がよさそうです。今後-1\leq x\leq1の領域を便宜的に領域\mathrm{A}と呼ぶことにします。

これから、なんとなく都合がよさそうな定義域、を、式から当然に要求される定義域、に変えることを試みます。

定義域外では値が定義できないと述べましたが、要するに、定義域外ではゼロ、定義域内では非ゼロの値が出るような\alpha(x)というものを考えつくことができれば、\displaystyle{\frac{1}{\alpha(x)}}は定義域内では有限の値を返しますが、定義域外ではゼロ除算となり定義できなくなります。\alpha(x)を探してみましょう。

床関数

高校数学で、「ガウス記号」というものを扱います。これは、実数aに対して、aを、aを超えない最大の整数として定義するものです(この四角カッコがガウス記号ですね)。このような関数を一般に「床関数」と呼び、
[x]\displaystyle{,\lfloor x \rfloor,\mathrm{floor}(x)\nonumber}
などと書き表します。

f:id:neoki_teimon0:20201216020218j:plain
図7

このグラフは図に示すようになります。

もっとゼロ付近だけ拡大してみましょう。

f:id:neoki_teimon0:20201216003149j:plain
図8

白い丸は、そこで値がとられていないことを示しています。たとえばx=1のとき、yは0ではなく1をとります。

基本構想

これをうまいこと使えないでしょうか。つまり、床関数は0\leq x<1でゼロを返すのですから、領域\mathrm{A}外のxに対してだけ0\leq \beta(x)<1となるうまい関数\beta(x)というものを考えてやれれば、\lfloor\beta(x)\ \rfloorは領域\mathrm{A}内でゼロを返すことになります。

方針としては、領域\mathrm{A}内のxに対して取りうる\beta(x)の値と、領域\mathrm{A}外のxに対してとりうる\beta(x)の値が一切違えばよさそうです。言い換えれば、領域\mathrm{A}内のxに対してとりうる\beta(x)の値の集合\beta_{\mathrm{in}}=\{\beta_{\mathrm{in}1},…,\beta_{\mathrm{in}m}\}(何個あるかわからないので、とりあえず要素m個としました。無限個ある可能性も否定できませんが、卍関数を書く上では問題ありません。)と、領域\mathrm{A}内のxに対してとりうる\beta(x)の値の集合\beta_{\mathrm{out}}=\{\beta_{\mathrm{out}1},\cdots,\beta_{\mathrm{out}n}\}(こちらも何個あるかわからないので、とりあえず要素n個としました。)が共通の要素を持たない、つまり、実数xに対しておよそ\beta(x)がとりうる値の集合\beta_{\mathrm{all}}\beta_{\mathrm{in}}\beta_{\mathrm{out}}の直和で表されるならば、次に示す関数\alpha_{\rm{proto}}(x)は選択的に領域\mathrm{A}内で非ゼロの値を返し、領域\mathrm{A}外ではゼロのみをとります。
\begin{align}\alpha_{\mathrm{proto}}(x)&=(\beta_{\mathrm{out}1}-\beta(x))(\beta_{\mathrm{out}2}-\beta(x))\cdots(\beta_{\mathrm{out}n}-\beta(x))\\&=\prod_{a=1}^{n}(\beta_{\mathrm{out}a}-\beta(x))\end{align}


(補足:ここで出てきた記号はギリシャ文字のパイの大文字ですが、総積をあらわします。たとえば、関数f(x)に3から6を代入して得られるすべての数f(3),f(4),f(5),f(6)を全てかけたもの、はこの総積の記号を使うと
\displaystyle{f(3)\times f(4)\times f(5)\times f(6) =\prod_{k=3}^{6}f(x)}
と書くことができます。)

しかし、ここで\beta(x)として\lfloor x \rfloorを使うのはあまり都合がよくありません。なぜなら領域\mathrm{A}内のxの1つであるx=1に対して\lfloor 1 \rfloor=1ですが、これは領域\mathrm{A}外の一部のx(たとえばx=\displaystyle{\frac{3}{2}})でも、\lfloor x \rfloorは同じように1を返してしまいます。領域\mathrm{A}の内外ではとりうる\beta(x)の値が一切重複してほしくないので、これは問題です。

かつての私はこれをどう解決しようとしたかというと、xの絶対値をとったうえで\lfloor |x| \rfloorを考え、

f:id:neoki_teimon0:20201216003134j:plain
図9

これがx=-1,1で0になるように、\lfloor |x| \rfloorの値が変化するポイントを少し(無限小)だけ右にずらす、ということをしました。つまり、
\displaystyle{\beta(x)=\lim_{c \to +0}\lfloor |x| -c\rfloor}
とおきました。しかしこれは、閉集合と開集合の違いを無視していて、ちゃんとx=-1,1でうまくふるまうか、領域\mathrm{A}の境界でもきっかり\beta(x)が違う値をとってくれるか、よくわかりません。(もっとも、ただ図形を描く、という意味ではこれでよいのかもしれません。)

ところで、xの絶対値をとるというアイデアを使えば、\beta(x)のふるまいは0\leq x\leq1x>1だけみればよくなります。いま、\beta(x)\lfloor x \rfloorは使えないねえ、\lfloor |x| \rfloorも使えないねえ、となったのは、この関数が領域\mathrm{A}の境界であるx=1での振る舞いが都合が悪いからでした。絶対値をとるというアイデアを使ったり、ずらしたり、ということを使うことで、床関数のおいしい部分を使うことができないでしょうか。

天井関数

床関数の0付近を見ると、-1\leq x\leq0は非常に使いやすそうです、これが0\leq x\leq1にあればよかったのに、と思ってしまいます。

そこで、\lfloor x \rfloor\lfloor-x\rfloorにして(左右反転)、図10のような振る舞いをする関数を得ます。

f:id:neoki_teimon0:20201216003146j:plain
図10

さらに、-\lfloor -x\rfloorにして(上下反転)、図11のような振る舞いをする関数を得ます。

f:id:neoki_teimon0:20201216003114j:plain
図11

この関数は床関数\lfloor x \rfloorと似た振る舞いをしていますが、見比べるとわかる通り、白丸の場所や線分の場所がかわっています。この関数はxに対して、xを下回らない最小の整数を返していることがわかります。この関数のことを天井関数といい、
\displaystyle{\lceil x \rceil,\mathrm{ceil}(x)\nonumber}
などと書き表します。

この天井関数について、xのかわりにxの絶対値を代入する(\lceil |x| \rceil)と、次のようなグラフが得られます。(白丸がそこで値をとらないという意味だったのに対して、塗りつぶされた丸はその点で値をとることを示します。)

f:id:neoki_teimon0:20201216003143j:plain
図12

グラフをみてわかる通り、これは領域\mathrm{A}についていままでの要請を満たしています。つまり、領域\mathrm{A}内のxに対しては0か1を返し、領域\mathrm{A}外のxについては1以外の自然数のどれかを返します。これは\beta(x)にうってつけでしょう。

よって、\alpha(x)
\displaystyle{\alpha(x)=\prod_{n=2}^{\infty}(\lceil |x| \rceil-n)}
と設定すれば、これは領域\mathrm{A}内で非ゼロ、領域\mathrm{A}外では常にゼロをとることになります。

以上から、係数
\displaystyle{\prod_{n=2}^{\infty}\frac{\lceil |x| \rceil-n}{\lceil |x| \rceil-n}}
をつけることで、領域\mathrm{A}内では1、領域\mathrm{A}外はゼロ除算で定義不能となるから定義域からの排除が要請されるようになりました。

若干の補足

なお、お気づきかもしれませんが、\lfloor-|x|\rfloor(=-\lceil |x| \rceil)は図13

f:id:neoki_teimon0:20201216003111j:plain
図13

のようにふるまいますから、これも領域\mathrm{A}内で-10、領域\mathrm{A}外で-2以下の整数のどれかをとることになり、\beta(x)に使うことができます。

特異点

もっとも、ここで「それって\displaystyle{\frac{x}{x}}だからどこでも1なんじゃないの?」という疑問が湧くことかと思います。しかし、たとえば\displaystyle{\frac{x^2-1}{x-1}}x+1と同じではありません。\displaystyle{\frac{x^2-1}{x-1}}はたしかにx+1とおなじような形になりますが、ただ1点x=1ではx+1と異なりゼロ除算で定義できません。このような点を(実数範囲の解析学は知りませんが)複素関数論では「除去可能な特異点」と呼びます。

結論として、\displaystyle{\prod_{n=2}^{\infty}\frac{\lceil |x| \rceil-n}{\lceil |x| \rceil-n}}は、間違いなく一部の領域で1と同じようにふるまいますが、分母がゼロとなる場合は1とことなる振る舞いをすることになります。

複数の曲線の同時表現

妥協

最後に、卍関数を議論するうえで避けて通れない、1つのxに対して少なくとも2個のyが対応している状態にする、という問題を議論します。冒頭から申し上げると、1つのxに対して少なくとも2個のyが対応している状態というのは1.3.2で述べた通り関数の定義に大きく反することになります。そのため、今回は「卍を描く」ことにフォーカスし、若干妥協せざるを得ません。しかし、delta関数がそうであったように、せめて少なくとも、極限をとるまえの段階では関数としてふるまうように仕向けます。

基本構想

2つの曲線を同時に表現するには、どのような手段をとればよいでしょうか。

ここに対する発想として、定期的に2つの曲線を行き来するように仕向ければよい、というものを思いつきました。つまり、xの関数p(x)q(x)を考え、これらはいずれも定期的に0と1を交互に取り続けます。そして、p(x)=1のときq(x)=0、またq(x)=1のときp(x)=0となるようにしましょう。p(x)q(x)]の間につねに、p(x)q(x)=0p(x)+q(x)=1がなりたっていることを要求します。

図に示すと、図14のようにふるまうようにします。たとえば青線がp(x)、赤線がq(x)]だったりするわけですね。

f:id:neoki_teimon0:20201216003139j:plain
図14

この1本の線の長さ(p(x)q(x)も同じ長さの線分がずらーーーーーーっと並んでいるわけですが、そのぶちぶちの線分の1つ当たりの長さ、という意味)は式の中で適当にいじくることができて、たとえば非常に長くしたり、非常に短くすることができることにしましょう。以降この長さを\lambdaと呼びます。

これが得られるとどういうことができるかというと、

f:id:neoki_teimon0:20201216003207j:plain
図15

このように互いに独立した関数f(x),g(x)(青がf(x)、赤がg(x))に対して、p(x),q(x)をそれぞれかけた、p(x)f(x),q(x)g(x)を考えると、例えばグラフは次のようになります。ただし以後、端点の白丸などは省略することにします。

f:id:neoki_teimon0:20201216003117j:plain
図15

そして、\lambdaを小さくすると

f:id:neoki_teimon0:20201216003138j:plain
図16

こうなって、、、

f:id:neoki_teimon0:20201216003130j:plain
図17

こうなります。

ところで、お気づきかもしれませんが、y=0のカラフルな線が出現したこと以外には、これはもとの何も掛かっていないf(x),g(x)のグラフとほぼ変わりません。

そして、\lambdaを図17のままにしたまま、これらの和、すなわちp(x)f(x)+q(x)g(x)のグラフは次の通りです。

f:id:neoki_teimon0:20201216003157j:plain
図18

もとのf(x),g(x)のグラフから全く逸脱していません。なぜなら、先述した条件「p(x)q(x)]の間につねに、p(x)q(x)=0p(x)+q(x)=1」によって、あるxを定めれば必ずp(x)q(x)はどちらかが0、どちらかが1をとりますから、p(x)f(x)+q(x)g(x)の値はつねにf(x)g(x)のどちらかしかとりません。そして、そのf(x)g(x)のいずれかをとるx区間はそれぞれに等間隔かつ交互にやってきますから、\lambdaが小さくなればなるほど、よりきれいに2曲線をいずれも表示することができます。

探索

では、このようなp(x),q(x)はどうやって見つければよいでしょうか。

まず条件から、q(x)=1-p(x)である(反対もおなじ)ことがわかります。これはそれぞれどちらかを見つけることは、もう一方を見つけることに等しいということです。

次に、定期的に2つの値をとり続けるという点から、先述した天井関数・床関数の利用が有効そうであることが推測できます。また、関数全体がつねに同じ動きを定期的に繰り返していますから、三角関数の利用も有効でしょう。

以上の発想から、適当に手を動かすと、条件を満たす関数として\displaystyle{p(x)=\cos\left(\pi\lfloor\frac{ x }{\lambda}\rfloor\right)}を見つけました。これで\lambdaのゼロ極限をとれば、2本の関数をばっちり同時に描写できるという算段です。

よって、\displaystyle{p(x)= \lim_{\lambda \to +0} \cos\left(\pi\lfloor\frac{ x }{\lambda}\rfloor\right))}が得られました。

実際に描いてみる

卍を書くためには、卍を先のf(x),g(x)に相当するように2つに分けなければいけません。そこでこのように分けることにします。青をm_1(x)、赤をm_2(x)ということにしましょう。

f:id:neoki_teimon0:20201216031632j:plain
図18

それぞれ、ステップ関数を使って次のように書くことができます。
m_1(x)=1-2H(x)
m_2(x)=-1+H(x+1)+H(x-1)

全部まとめて、卍関数(M(x)ということにしましょう)の全体像は
M(x)=\displaystyle{\prod_{n=2}^{\infty}\frac{\lceil |x| \rceil-n}{\lceil |x| \rceil-n}(p(x)m_1(x)+q(x)m_2(x))}
と書けそうだということがわかりました。終わりが近いぞ!!!!

ここで、こまったことが出てきます。卍関数はステップ関数を使いますから、全体的に適当な点がたくさん見えていればそれっぽく見えた先のf(x),g(x)と違い、ある1点の変化が見えなければ困ります。具体的には、m_1(x)についてはx=0m_2(x)についてはx=-1,1での変化が見えないと困ります。つまり、p(0)=q(-1)=q(1)=1を要求します。


このため先述のp(x)の式を改造し、\displaystyle{p(x)= \lim_{a \to \infty} \cos\left(\lfloor\left(2\lfloor a \rfloor+1\right)x \rfloor \pi\right)}とします。ただし、\displaystyle{\lambda=\frac{1}{2\lfloor a \rfloor+1}}です。床関数に入れてあるので、aが無限大に行く過程でどんな値をとっても、\lfloor a \rfloorは必ず整数になりますから、この\lambdaは奇数分の1の形になっています。

これですべて完成です。わたしの作った卍関数は以下の通りです。

\displaystyle{\begin{align}M(x)=\lim_{a \to \infty} \prod_{n=2}^{\infty}\frac{\lceil |x| \rceil-n}{\lceil |x| \rceil-n}\left(\cos\left(\lfloor\left(2\lfloor a \rfloor+1\right) x \rfloor \pi\right)\left(1-2H\left(x\right)\right)\\\;+\left(1-\cos\left(\left\lfloor(2\lfloor a \rfloor+1\right)x \rfloor \pi\right)\right)\left(-1+H\left(x+1\right)+H\left(x-1\right)\right)\right)\\
\left(-1\leqq x\leqq1\right)\end{align}}

おわりに

途中から見出しつけるの面倒になって大項目しか書いていないので読みにくいところもあるかと思います、、、ごめんなさい、、、、
あと、はてなブログLaTeXが中途半端なところがあって、不自然なところがあるかもしれません。申し訳ない、、、
TEXコードも含めて18000字を超える長文になってしまいましたが、ご容赦ください。
ここで書いた内容は修正・補足・追加検討などして、学科の友人らと一緒に本にしてコミックマーケット99で出したいと思っています。


当選したらTwitterでお知らせするのでぜひ!!!