Corollaryは必然に。

このブログは「コロちゃんぬ」の提供でお送りします

minとmaxで簡単☆本格数式お絵描き♪

この記事は、日曜数学会 Advent Calender 2019の6日目の記事であり、2019年11月3日に行われたロマンティック数学ナイトプライム@筑波大学で発表した内容をブログ用に加筆修正したものです。前回はAlweさんの「帰納的に定義する」とはなにか?で、帰納的に定義することは○○○○○を与えることと同じという話でした。Bernsteinの定理の証明といえば、まず集合を2つの単射でひゅんひゅん往復させたもの(伝われ~)帰納的に定義することから始めますが、これを○○○○○に言い換えて証明を簡潔にしていて面白かったです。


はじめに

数式お絵描きとは「Desmos」「GeoGebra」「GRAPES」などといった数学ソフトウェアに、数式を並べることで曲線や領域を表現するお絵かきのことです。数式の中にパラメータを用意すれば、グラフが変化する作品も作れます。

例. メタモンのへんしん by コロちゃんぬ
www.desmos.com
メタモンの作り方はコチラをどうぞ:
corollary2525.hatenablog.com

数式お絵描きで表現したい曲線は区分的になめらかなものがほとんどなので、描きたい曲線を適当に分割し、目分量で近似した数式を1つ1つ書けばなんでも描けます。

例. 直線と放物線で作成した Deadpool by Yousef Hassenさん
www.desmos.com

ただ、分割する作戦で数式お絵かきをすると、複雑であればあるほど数式を多く並べる必要があり、数式の管理が大変です。



突然ですが、次のような曲線を描くことを考えましょう:
f:id:corollary2525:20191130141631p:plain

はい、つながった3つの円ですね。純然たる3つの円です。



表現方法は色々ありますが、例えば
f:id:corollary2525:20191130142611p:plain
のように、変数の条件を課した円の方程式を3つ並べれば絵を描くことができます。
f:id:corollary2525:20191130142144p:plain

これでもいいのですが…式が増えると動作が重くなる原因になりますし、あとで円の位置を微調整したいと思ったとき、変数の条件もいじる必要があるのが面倒くさいんですよね。

できることなら1本の式で表現した方が管理しやすいですし、その方が“数式映え”しますよね。

そんなときに便利なのが\color{red}{\min}\color{red}{\max}です!これらを上手く使えば、2つ以上の曲線に沿うような道を「お手軽に」「一本の式」にまとめることができ、煩わしい変数の範囲指定も不要になります!



それでは、数式お絵かきを始めます!

f:id:corollary2525:20191130151017p:plain

minの使い方

まずは下準備として、\min を使ってこの曲線を1本の式で表現します。
f:id:corollary2525:20191130152056p:plain



円を2つ用意します。
f:id:corollary2525:20191130152730p:plain
そして
\begin{align*}
\color{red}{x^2+y^2-1}=0\\
\color{blue}{(x-0.95)^2+(y-0.95)^2-0.55^2}=0
\end{align*}のように「=0」の形(陰関数表示)にし、左辺の\minをとって「=0」にすると…!?

f:id:corollary2525:20191206122655p:plain

所望の曲線が得られてしまいます!簡単でしょう?

なぜこれでよいのか、仕組みを解説しましょう。

minとmaxの秘密

実数a,bに対して、

  • \color{red}{\min(a,b)}abのうち、小さい方を表します。
  • \color{red}{\max(a,b)}abのうち、大きい方を表します。

正確には
\[
\min(a, b) := \begin{cases}
a & \text{if}\; a\le b\\
b & \text{if}\; a>b
\end{cases},\quad
\max(a, b) := \begin{cases}
a & \text{if}\; a\ge b\\
b & \text{if}\; a < b
\end{cases}
\]ですね。また、\min\{a,b\}のように中括弧{}を用いる記法もよく見るのですが、本記事ではふつうの括弧()を使うことにします。

例えば
\[\min(2,3)=2,\quad\max(3,4)=4\] といった感じです。

\min(a,b)=0 について

それでは、abを実数として、次のような式を考えてみましょう:
\begin{equation}\tag{1}\label{min}
\min(a,b)=0.
\end{equation}この式を言葉で表すなら、

「aとbを比べて、小さい方を選べば0になる」

ですね。ということは、abどちらかはちょうど0のはずです。また、小さい方が0なので、そうでない方は0以上でなければいけません。ということで、\eqref{min}は次のように言いかえることができます:

\min(a,b)=0の言いかえ
\[
\min(a,b)=0\iff
\begin{cases}
a=0 \;\text{かつ} \; b\ge0,\\
b=0 \;\text{かつ} \;a\ge0.
\end{cases}
\]

\min(a,b)=0という式は、上記の場合分けを1つの式にまとめた式だったのです。

これを応用して、aとbに円の方程式
\begin{align*}
\color{red}{x^2+y^2-1}=0\\
\color{blue}{(x-0.95)^2+(y-0.95)^2-0.55^2}=0
\end{align*}の左辺を代入します。

\[
\min(\color{red}{x^2+y^2-1}, \color{blue}{(x-0.95)^2+(y-0.95)^2-0.55^2})=0
\]
この式は
\[
\begin{cases}
\color{red}{x^2+y^2-1}=0 \quad\text{かつ}\quad \color{blue}{(x-0.95)^2+(y-0.95)^2-0.55^2}\ge0,\\
\color{blue}{(x-0.95)^2+(y-0.95)^2-0.55^2}=0 \quad\text{かつ}\quad \color{red}{x^2+y^2-1}\ge0
\end{cases}
\]と同値です。要するに、

  • 赤い円の円周上であり、青い円の外部にある点の集まりと
  • 青い円の円周上であり、赤い円の外部にある点の集まり

を表すので、図示するとこうなります。

f:id:corollary2525:20191206124122g:plain

ハハッ 変数の範囲指定も不要だし、お手軽だネッ!

\max(a,b)=0 について

次は\maxです。\minと同様に、\max(a,b)=0 は次のように言いかえることができます:

\max(a,b)=0の言いかえ
\[
\max(a,b)=0\iff
\begin{cases}
a=0 \;\text{かつ} \; b\le0,\\
b=0 \;\text{かつ} \; a\le0.
\end{cases}
\]

では、aとbに円の方程式
\begin{align*}
\color{red}{x^2+y^2-1}=0\\
\color{blue}{(x-0.95)^2+(y-0.95)^2-0.55^2}=0
\end{align*}の左辺を代入してみましょう。

\[
\max(\color{red}{x^2+y^2-1}, \color{blue}{(x-0.95)^2+(y-0.95)^2-0.55^2})=0
\]

これはどんな曲線を表すでしょう?



感づいている方も多いと思いますが、こうなります!



f:id:corollary2525:20191206121405p:plain

なるほど、数式お絵かきではminは和集合、maxは共通部分みたいな役割を果たすんですね!?

………に見えますが実は逆で、minは共通部分maxは和集合をとる操作と同じなんです!

私は最初騙されました。詳しくは記事の後半で。


数式お絵かきチキンレース

それでは、minとmaxを駆使して絵を完成させていきましょう。

Step1 輪郭

“3つの円の外側”を表したければ,3つの円の方程式を用意すれば作れます。
f:id:corollary2525:20191206134808p:plain

これはちょっとしたテクニックですが、y軸に関して対称の曲線を描きたい場合、xをすべて|x|に置き換えればよいので、式を短くできます。
f:id:corollary2525:20191206135456p:plain

もうちょっとこだわるとこうですかね。
f:id:corollary2525:20191206141110p:plain
ここで、C(x,y,r)=x^2+y^2-r^2で,e_{ar}(|x|,y)は楕円の方程式をちょっと回転させたものを左右対称に描いた部分、残りは2次関数であごを表現しています(2次関数は無限に伸びていくので、\max(\cdot, y)y=0の高さで打ち止めにしています)。

Step2 長方形

次は都合により(?)ここで長方形を作ろうと思います。まずは正方形から。
f:id:corollary2525:20191206132939p:plain
あ、ちなみにこの正方形をxyに関する式で表したことありますか?
(このあとすぐ想定解が出てきますので、一度自分で考えたい方はスクロールを止めてください)












想定解としては
\[
|x+y|+|x-y|=2
\]がありますが、\maxによる表現もあります。
f:id:corollary2525:20191206140456p:plain

これは\color{red}{L^{\infty}}距離(チェビシェフ距離)と呼ばれる距離関数による“単位円”*1を表しているので、楕円の方程式と同じ要領で長方形を作成できます!
f:id:corollary2525:20191206142631p:plain
今回の場合、長軸の長さが2\times1.5=3,短軸の長さが2\times0.2=0.4の楕円をy軸方向に0.2だけ平行移動したような感覚で長方形を作り,不等式で領域を表現しています。


これで安心して絵が描けますね(?)
この調子でどんどんお絵かきしていきましょう!

Step3 顔(生え際?)

f:id:corollary2525:20191206143044p:plain
式が長くなってきたので独自に関数を定義しました。m_2は口元を表すななめの楕円、e_{ye2}は目元を表す縦長の楕円です。ちなみにmはマウスのmです。口の方のマウスね。

Step4 耳の領域

f:id:corollary2525:20191206143913p:plain
赤の部分、青の部分はそれぞれStep1、Step3で作ったものです。さりげなく青の式に「マイナス」が付いていますが、これは集合演算でいうところの補集合をとる操作になります(後述)。

Step5 口

f:id:corollary2525:20191209193143p:plain
シンプルに2次関数で仕上げてみました。

Step6 舌

f:id:corollary2525:20191209193414p:plain
m_3は舌を表す楕円、もう一方は下唇を表しています。

Step7 あごのしわ

f:id:corollary2525:20191209193809p:plain
完成まであと少しです!

Step8 鼻

f:id:corollary2525:20191209194231p:plain
鼻および鼻のてかりもすべて楕円で作ってみました。

Step9 高い鼻を表現

f:id:corollary2525:20191209194722p:plain
シンプル イズ ベスト

Step10 目

f:id:corollary2525:20191209194930p:plain
楕円の式を少し弄って、4乗にしている箇所がこだわりポイント。







仕上げ

ということで、10本の式で絵が完成しました!
f:id:corollary2525:20191209195438p:plain
目隠しがなければ9本でいけますネ!



仕上げに背景を作ってエレクトリカルにするとよいでしょう。
f:id:corollary2525:20191209195757p:plain

さりげなく関数h_{t_0}にはパラメータt_0を仕込んでいて*2、これを動かすとちょっと賑やかになります。
f:id:corollary2525:20191209213600g:plain
毒を食らわば皿マデ!ハハッ!


minは共通部分、maxは和集合

お絵かきはここまでにして、\min\maxについてもう少し掘り下げていこうと思います。

\min\maxには次のような関係があります:

\min\maxの関係

  • -\min(a,b)=\max(-a,-b)
  • -\max(a,b)=\min(-a,-b)
  • \min(a,\max(b,c))=\max(\min(a,b),\min(a,c))
  • \max(a,\min(b,c))=\min(\max(a,b),\max(a,c))

これらの等式の証明は場合分けでできます。a,b,cの大小関係は全部で6通りですが、上手く場合分けをすれば3通りあるいは2通りで十分です。

これらの等式、何かに似ていませんか?



そうです。ド・モルガンの法則分配法則ですね。

  • -\min(a,b)=\max(-a,-b)
  • -\max(a,b)=\min(-a,-b)

  • \overline{A\cap B}=\overline{A}\cup\overline{B}
  • \overline{A\cup B}=\overline{A}\cap\overline{B}

にそっくりですよね。分配法則は若干見えにくいですが、仮に
\[
\min(a,b)=a\;\text{m}\; b,\quad\max(a,b)=a\;\text{M}\; b
\]と書き直すことにすれば、

  • \min(a,\max(b,c))=\max(\min(a,b),\min(a,c))
  • \max(a,\min(b,c))=\min(\max(a,b),\max(a,c))

  • a\;\text{m}\; (b\;\text{M}\; c)=(a\;\text{m}\; b)\;\text{M}\; (a\;\text{m}\; c)
  • a\;\text{M}\; (b\;\text{m}\; c)=(a\;\text{M}\; b)\;\text{m}\; (a\;\text{M}\; c)

となるので、分配法則

  • A\cap (B\cup C)=(A\cap B)\cup(A\cap C)
  • A\cup (B\cap C)=(A\cup B)\cap(A\cup C)

っぽく見えると思います。



あとは、\min\maxをとる操作は共通部分「\cap」と和集合「\cup」どちらに対応するのかについてです。簡単に説明すると、任意の実数abに対して
\[
\min(a, b)\le\max(a, b)
\]であり、集合Xの任意の部分集合ABに対して
\[
A\cap B\subset A\cup B
\]であるから、minは共通部分、maxは和集合と対応します。

補足 \mathbb{R}に通常の順序を入れたもの(\mathbb{R},\le)と、集合Xの部分集合全体に包含関係を入れたもの(\mathcal{P}(X), \subset)はどちらも(任意の二元集合に対して下限上限をもつ順序集合)になっていて、下限に相当するのが\min\capで,上限に当たるのが\max\cupになっています。

しかし、minとmaxの秘密の節で紹介した図では、\minが和集合、\maxが共通部分のように見えました。これはなぜでしょうか?

円ではなくて放物線で考えてみます。
f:id:corollary2525:20191211185627p:plain
y-x^2=0y-(x-2)^2=0 を並べてみました。

このとき、\min(y-x^2, y-(x-2)^2)=0 はこのようになります。
f:id:corollary2525:20191211185634p:plain
あれ? “共通部分っぽい操作” に見えるかも?



この現象は次のように考えると説明がつきます。
f:id:corollary2525:20191211185640p:plain
放物線より上側の領域 y-x^2\color{red}{\ge} 0) と y-(x-2)^2\color{red}{\ge} 0) を図示してみました。

この2つの領域の共通部分()は \min(y-x^2, y-(x-2)^2)\color{red}{\ge} 0 を表しており、「=0」のときは紫の領域の境界線上になります。
f:id:corollary2525:20191211185647p:plain



円の場合に戻りましょう。不等号の向きに注意して、円の外部の領域
\[
x^2+y^2-1\color{red}{\ge} 0,\quad(x-1)^2+y^2-1\color{red}{\ge} 0
\]を考えます。
f:id:corollary2525:20191211185654p:plain
f:id:corollary2525:20191211185700p:plain

この2つの領域の共通部分はここですね?
f:id:corollary2525:20191211185706p:plain
円の場合で考えたとき、和集合っぽい操作に見えた原因はこれです。「2つの円の内部の和集合」をとっているのではなく、「2つの円の外部の共通部分」をとっていたのでした!\min\maxを使って数式お絵かきをでする際はご注意ください。



また、\max の場合は「2つの円の外部の和集合」なので次のの領域を表します。
f:id:corollary2525:20191211185713p:plain

さらに、\min\max の中にマイナスをかけると「領域が反転」するので、より複雑な領域を表示したいときに便利です。
f:id:corollary2525:20191211214636p:plain

実際に数式を表示させて納得するもいいですし、\min(a, b)=0 の同値な言い換えに戻って証明してもよいでしょう。


まとめ

数式お絵かきにおける \min\max の使い勝手、いかがでしたでしょうか。皆様の今後の数式お絵かきの参考になれば幸いです。数式お絵かき初心者の方も、まずは「3つの円」から始めてみてはいかがでしょうか?DesmosはWebで気軽に遊べるのでオススメです。
www.desmos.com

それでは、よき数式お絵かきライフを!

thank Q for rEaDing.φ(・▽・ )






おまけ

最後まで読んでいただきありがとうございます。読者プレゼントとして、本日の作品のリンクを張っておきます。
www.desmos.com
お絵かきの解説中に出てきた謎の関数の正体が分かるかもしれません。

boxesのファイルのアイコンを押すと、目隠しが消えます(ずっと見てると何かイケナイものを見ている気分になる)。1番目の背景は目隠しを避けているので、2番目の背景をご使用ください。

*1:原点からのチェビシェフ距離が1の点の集合

*2:tもsも使用していたので、しかたなくt_0にしました。t_0と書くと固定されている感じがするので我ながらセンスない。