浅葱色の計算用紙

数学(広義)を扱っています。

もし応用情報の計算量が応用計算並みに多かったら

随時問題を追加します。解答は用意しておりませんが、応用情報ドットコムなどで同じ種類の過去問の解説を読めば計算方法は分かると思います。

(1) 処理に59.9nsかかる命令が24%、17.7nsかかる命令が76%からなる命令ミックスによるコンピュータの処理性能は、何MIPSですか。(MIPSの小数第1位未満四捨五入)
(2) 稼働率が60.8%, 76.4%, 74.2%のシステムを直列に並べたシステムがある。このシステムの稼働率はいくらですか。(パーセントの小数第1位未満四捨五入)
(3) あるCPUのキャッシュメモリのヒット率は82.1%、キャッシュメモリアクセス時間は38.1ms、主記憶のアクセス時間は93.5msである。このCPUの実行アクセス時間は何ミリ秒ですか。(ミリ秒の小数第1位未満四捨五入)
(4) あるシステムのMTBFは137時間25分であり、MTTRは3時間58分である。このシステムの稼働率はいくらですか。(パーセントの小数第1位未満四捨五入)
(5) 21.798Mバイトのデータを565kビット/秒の回線を使って伝送するとき、転送時間は何秒ですか。ただし、回線の伝送効率を55%とし、1Mバイト=10^6バイト、1kビット=10^3ビットとする。(秒未満四捨五入)
(6) 回線速度が64,000ビット/秒の回線を使ってデータを連続送信したとき、平均して131.8秒に1回の1ビット誤りが発生した。この回線のビット誤り率はいくらですか。(10%を1分とし、埃未満四捨五入)
(7) 売上高が\4,051,381のとき\1,045,742の損失、売上高が\6,881,098のとき\292,116の利益と予想された。損益分岐点は何円ですか。(円未満四捨五入)

筋肉に固定資産税をかける方法

今更ですが、何年か前に筋肉の多い人に対して

「デカすぎて固定資産税がかかりそうだな!」

と声を掛けるのが流行りました。

そこで、この記事ではどのようにすれば筋肉に固定資産税をかけることができるか検証します。

注意: 私は弁護士ではないので、法律の解釈を誤っている可能性があります。その場合はコメントでご指摘ください。


以下、地方税法の条文は全てe-Gov法令検索から引用しています。

elaws.e-gov.go.jp

固定資産税って何?

そもそも、固定資産税は何にかかるのでしょうか。地方税法第343条第1項には、

「固定資産税は、固定資産の所有者(質権又は百年より永い存続期間の定めのある地上権の目的である土地については、その質権者又は地上権者とする。以下固定資産税について同様とする。)に課する。」

と書かれています。つまり、筋肉を固定資産にすることができれば筋肉に固定資産税をかけることができるようですね。

固定資産って何?

では、固定資産とは何なのでしょう。地方税法第341条1項には、

「固定資産 土地、家屋及び償却資産を総称する。」

と書かれています。この条文は定義の一部なので、「固定資産とは、土地と家屋と償却資産の総称である。」という意味だととれます。筋肉は明らかに土地でも家屋でもないので、筋肉を何らかの方法で償却資産にすることができれば、筋肉に固定資産税をかけることができます。

償却資産って何?

用語がどんどんたらい回しにされるだけで、まだ具体的な方法が出てきません。根気良く、次の定義を見ていきましょう。同じ地方税法第343条の第4項には、

「償却資産 土地及び家屋以外の事業の用に供することができる資産(鉱業権、漁業権、特許権その他の無形減価償却資産を除く。)でその減価償却額又は減価償却費が法人税法又は所得税法の規定による所得の計算上損金又は必要な経費に算入されるもののうちその取得価額が少額である資産その他の政令で定める資産以外のもの(これに類する資産で法人税又は所得税を課されない者が所有するものを含む。)をいう。ただし、自動車税の種別割の課税客体である自動車並びに軽自動車税の種別割の課税客体である原動機付自転車、軽自動車、小型特殊自動車及び二輪の小型自動車を除くものとする。」

と書いてあります。長いですが、定義文は「XでYのうちZ以外のものをいう。ただし、Wを除くものとする。」という構造になっています。つまり、集合の表記で書けば(X∩Y-Z)-Wです。

つまり、筋肉が償却資産になるためには、筋肉がXでもYでもあり、ZでもWでもなければよいですね。

では、XYZWをそれぞれ見ていきましょう。

X: 土地及び家屋以外の事業の用に供することができる資産(鉱業権、漁業権、特許権その他の無形減価償却資産を除く。)

さっそく問題が生じました。個人所有の筋肉はXの「事業の用に供することができる資産」の条件に反してしまいます。その個人を個人事業主に仕立て上げて、続けましょう。

Y: その減価償却額又は減価償却費が法人税法又は所得税法の規定による所得の計算上損金又は必要な経費に算入されるもの

もっと大きな問題です。筋肉を購入して減価償却しないと固定資産税の対象にはなりません。おそらく自身の筋肉はこの条件を満たしようがないので、何らかの動物の筋肉を合法的な手段で手に入れたものとしましょう。この時点で本来の趣旨からはだいぶ外れていますが、筋肉に固定資産税をかけるにはこうするしかありません。

Z: その取得価額が少額である資産その他の政令で定める資産以外のもの(これに類する資産で法人税又は所得税を課されない者が所有するものを含む。)

10万円以下だと少額とみなされ、20万円以下だと課税対象とならないらしいので、20万円を超える必要があります。また、償却資産の合計が150万円以下だと課税されないので、何か適当に固定資産を買っておきましょう。

W: 自動車税の種別割の課税客体である自動車並びに軽自動車税の種別割の課税客体である原動機付自転車、軽自動車、小型特殊自動車及び二輪の小型自動車

筋肉は自動車ではないので、この条件は自動的に満たされます。

減価償却

筋肉を減価償却するにはどうすればよいでしょうか。

国税庁のサイトによると、減価償却は時間で価値が減少するものに付けられます。筋肉は生ものなので当然時間で価値が減少します。すなわち、減価償却できる可能性があります。おそらく耐用年数は備品扱いで8年になるものと思われますが、本当にそれでいいのかは分かりません。

結論

筋肉に固定資産税をかけるには、自分以外の何らかの動物の筋肉を150万円分以上購入し、それを8年(たぶん)で減価償却すればよいことがわかりました。

これだけの金額ともなると、筋肉質の動物を直接購入してしまうのもありかもしれませんね。

正十六胞体って何?別名がある?双対は?4次元図形の謎に迫る!

昨日の記事は

mathlog.info

でした。

複素平面との関係を感じたのですが、今後の記事で触れられるのでしょうか。


今日は12月16日です。

16と言えば、正十六胞体ですね。

正十六胞体って、どんな図形なのでしょう?

正十六胞体の基本的性質について調べてみました。

正十六胞体って何?

正十六胞体は、
4次元の正軸体で、
16個の正四面体から構成されています。

正軸体というと
3次元では
正八面体がそうですね。

つまり、
正十六胞体は
正八面体の4次元バージョン
といえそうです。

正八面体は四角錐を
底面で2つ貼り合わせた
ものなので、
正十六胞体は正八面体錐を
底胞で2つ貼り合わせた
ものとも言えますね。

正十六胞体の別名は?

正十六胞体は英語で
Hexadecachoron(ヘキサデカコロン)
というそうです。

数学者のJonathan Bowersは
この立体に
Hex(ヘックス)
という略称を付けました。
おそらく
Hexadecachoronの
最初の3文字です。

正十六胞体の双対は?

4次元立体の双対は
胞が点に
面が辺に
辺が面に
点が胞に
なります。

それでは
正十六胞体の双対は
一体何なのでしょうか。

なんと
正十六胞体の双対は
超立方体です!

3次元でも
正八面体の双対は
立方体なので
似たような感じなのかも
しれませんね。

正十六胞体はどう見える?

ここまできたら
正十六胞体を
見てみたくなりますね。

4次元の図形なので
直接見ることはできませんが
3次元に描いた絵なら
見ることができます。

まず3次元の
正八面体の絵が
どんな形をしているか
復習してみましょう。

f:id:asangi_a4ac:20201204082903p:plain
図1: 正八面体の2次元への射影


この絵を2次元の図形だと思ってみると、
真ん中の潰れた正方形の各頂点から
上下の頂点に向かって線が伸びている

絵だということが分かります。

ということは
正十六胞体の絵は
こんな感じになるのでしょうか。

f:id:asangi_a4ac:20201204100755p:plain
図2: 正十六胞体の3次元への投影

Wikipediaも見てみたのですが、

commons.wikimedia.org

二次元の幾何学模様にしか見えませんね。

正十六胞体には仲間がいる?

どうやら英語版Wikipediaによると
rectifiedとか
cantellatedとか
runcinatedとか
いろいろあって
図を見ているだけでも
4次元の神秘に
触れられそうです。

まとめ

正十六胞体という
4次元図形について
調べてみましたが
よくわかりませんでした。

いかがでしたか?



明日の記事は

mathlog.info

です。

当記事を書くにあたって、以下の記事を参考にした。
[1] りょりょ. 「綾瀬はるかの現在の彼氏が確定!彼氏はどんな人?馴れ初めは?結婚の予定は?」. 芸能ゴシップ. https://芸能ゴシップネタ.com/2020/07/02/haruka-ayases-current-boyfriend-is-confirmed-what-kind-of-person-is-your-boyfriend-how-did-you-get-used-to-it/. (参照日2020年11月29日).
[2] 年収図鑑. 「小坂菜緒の年収がヤバい!不遇のけやき坂時代を乗り越えて…!」. https://italyseek.net/2020/10/09/%e5%b0%8f%e5%9d%82%e8%8f%9c%e7%b7%92%e3%81%ae%e5%b9%b4%e5%8f%8e%e3%81%8c%e3%83%a4%e3%83%90%e3%81%84%ef%bc%81%e4%b8%8d%e9%81%87%e3%81%ae%e3%81%91%e3%82%84%e3%81%8d%e5%9d%82%e6%99%82%e4%bb%a3%e3%82%92/. (参照日2020年11月29日).
[3] ロバ耳日誌運営事務局. 「宮崎謙介の離婚理由と元妻加藤鮎子の現在は|金子恵美とは離婚しない根拠は?」. ロバ耳日誌. https://robamimireport.com/miyazaki-kensuke-rikon-riyuu/. (参照日2020年11月29日).

13平均律~魔界の音楽~

「魔入りました! 入間くん」では、魔界(悪魔の世界)を主題としている。魔界では、13や666といった数字がよく使われる。

そこで私は思った。

魔界の音楽も1オクターブが13音なのだろうか。だとしたら、どんな音楽理論が展開されているのだろうか。

 

そこで、このブログでは13平均律を考えることにする。

 

第1章 音名

 

その前に、まず12平均律について復習する。音名とセント数は、以下の通りである。いつものである。

f:id:asangi_a4ac:20200914190220p:plain

13平均律では、セント数は次のようになる。C以外はまだわからないので空欄とした。

f:id:asangi_a4ac:20200914190651p:plain

空欄のうち両端は簡単に埋めることができる。しかし、真ん中は難しい。完全4度と完全5度が存在しないのだ。

f:id:asangi_a4ac:20200914191328p:plain

 

ここでは、次のように埋めることにする。また、3段目に度数を示した。4度と5度が完全ではなくなることに注意せよ。

f:id:asangi_a4ac:20200915121618p:plain

 11倍音がほぼぴったりだが、3倍音、5倍音、7倍音はことごとく外れている。

第2章 和音

音名が決まったので和音を考えたいわけだが、3度と5度のそれぞれに長短があるためもっとも単純な3和音ですら4種類存在する。

f:id:asangi_a4ac:20200915122333p:plain

 ここで重要なことは、長3度ですら純正の長3度(5:6, 386セント)より短いということである。

 

実際に聞いてみよう。Cm, CmM5, CMm5, Cの順で流れる。

 

soundcloud.com

全体的に暗い感じがする。それもそのはず、長3度ですら純正の長3度(386セント)に達していないからである。もしかしたら悪魔にはこれでちょうどいいかもしれない。

 

最終章 音源

音律ができたからには、ドレミの歌を歌ってみたくなる。そこで、いつものように重音テトに歌ってもらうことにした。明らかにファの位置がおかしいが、そこしかないので仕方ない。

 

soundcloud.com

 

重音テト「これ音程合ってますか?」

因数分解

この記事は、先日行われたロマンティック数学ナイトにインスパイアされたものです。

(注意)この記事は、全編小学校の算数のような文体で進行します。

 

太郎くんと花子さんは、次のようなゲームをしています。

・花子さんは、\( 0 \)でない整数を3つ決めて、太郎くんに伝えます。

・太郎くんは、3つの整数を並べ替えて、それらの係数に持つような\( x \)の2次式を作ります。

・太郎くんがその2次式を因数分解できたら太郎くんの勝ち、できなかったら花子さんの勝ちです。

 

花子「じゃあ、次は\( 1, 2, 3\)でやってみて。」

太郎「そうだな、\( x^2 + 3x + 2 = (x+1)(x+2) \)だから、僕の勝ちだね。」

花子「\( 1, 1, 3 \)だったらどうかな。」

太郎「\( x^2 + 3x + 1 = \cdots \)ぐぬぬ因数分解できないぞ。君の勝ちだ。」

 

それを見ていた京子さんと大地くんが話しています。

京子「このゲームは、花子さんが適切な数を選べば毎回勝てるんじゃないかな。」

大地「そうだね。少し考えてみよう。」

京子「まず、一般の2次式\( Ax^2 + Bx + C \)が因数分解できるときはどんな時か考えてみよう。」

大地「因数分解と言っても、どの範囲で因数分解するか決めないといけないね。」

京子「太郎くんは整数の範囲でしか因数分解していないみたいだから、整数の範囲で考えてみよう。」

大地「\( Ax^2 + Bx + C \)の判別式は\( B^2 - 4AC \)だから、\( B^2 - 4AC \)が平方数になることは\( Ax^2 + Bx + C \)が整数の範囲で因数分解できることの必要条件だね。」

京子「そうだね。だから、\( A, B, C \)をどう並べ替えても\( B^2 - 4AC \)が平方数にならないようにすればいいね。」

大地「もし\( A \)や\( C \)が大きかったら、\( B^2 - 4AC \)は負になるから絶対に平方数にはならないね。」

京子「でも、その大きい数が\( B \)のところに入ったらどうしよう。」

大地「\( B \)がすごく大きかったら、\( B^2 - 4AC \)は\( (B-1)^2 \)と\( B^2 \)の間に入って、平方数にならないんじゃないかな。」

京子「そうだね。」

京子さんは、次のような証明を行いました。

 

\( 0 < 4A^2 < 4C^2 < B \)とする。

このとき、

\( \begin{align*} & B^2 - 4AC \\ &= B^2 - \sqrt{4A^2 \cdot 4C^2} \\ &> B^2 - \sqrt{B \cdot B} \\ &= B^2 - B \\ &= B^2 - 2B + 1 + (B-1) \\ &> (B-1)^2 \end{align*} \)

であるから、\( (B-1)^2 < B^2-4AC < B^2 \)が成り立つ。

 

 

1週間後、太郎くんと花子さんはまた同じゲームをしていました。

花子「京子さんに必勝法を聞いたんだよね。\( 1, 2, 17\)」

太郎「実は昨日解の公式を覚えてきたんだ。\( x^2 + 17x + 2 = \left( x - \frac{-17+\sqrt{281}}{2} \right)\left( x - \frac{-17-\sqrt{281}}{2} \right) \)だね。I WIN!」

花子「(; ・`д・´) ナ、ナンダッテー !! (`・д´・ (`・д´・ ;)」

 

京子さんたちもその様子を見ていました。

京子「今度は太郎くんが実数の範囲で因数分解を始めたね。」

大地「この場合は、整数のときと同じようにはいかないね。」

京子「でも、\( Ax^2 + Bx + C \)が実数の範囲で因数分解できる必要十分条件は、\( B^2 - 4AC \)が\( 0 \)以上であることだから、判別式が使えそうだよ。」

大地「つまり、花子さんは\( a^2 - 4bc < 0, b^2 - 4ca < 0, c^2 - 4ab < 0 \)を満たす\( 0 \)でない整数\( a, b, c \)を選べばいいね。」

京子「でも、そんな整数ってあるのかな。」

大地「たとえば、\( a = b = c = 1 \)があるね。」

京子「この条件を満たす整数の組は、全部でいくつあるんだろう。」

大地「ある\( (a, b, c) \)が条件を満たすなら、\( a \)と\( b \)と\( c \)に\( 0 \)以外の数を掛けても条件を満たすから、無限にあるね。」

京子「ということは、条件を満たす点からなる\( abc \)空間上の点を考えると、原点を通る同じ直線上にある格子点は、原点以外は全部条件を満たすか、全部条件を満たさないかのどちらかだね。」

大地「ということは、単位球面上の点を考えるとうまく図示できそうだね。」

京子「単位球面上の点のうち、条件を満たす\( (a,b,c) \)の組を色で塗って、縦軸を緯度、横軸を経度とする地図に描いてみたよ。緯度経度は赤道が\( c = 0 \)、北極が\( (0, 0, 1) \)、本初子午線が\( (1,0,0) \)を通るように取ったよ。ここでは\( (a,b,c) \)は実数としたことに注意してね。」

 

f:id:asangi_a4ac:20200531074505p:plain

 

大地「東半球では、南半球には条件を満たす点はないんだね。」

京子「東半球では\( b > 0 \)で、南半球では\( c < 0 \)だから、\( a^2 - 4bc \)が必ず正になってしまうからだよ。」

 

太郎「ねぇねぇ、そのWi-Fiみたいな図形は何?」

京子「君たちのやっているゲームを図にしてみたよ。花子さんが最初に選んだ数がWi-Fiの圏内に入れば、花子さんが絶対に勝つよ。」

太郎「難しそうなことをやっているんだね。」

 

先生「おーい、授業始まるぞー、今日は一様多面体についてだからな、よく聞いとけよ!」

全ての有理数が整数であることの証明

\( \newcommand \degree {^\circ} \)

問題:

全ての有理数が整数であることを証明せよ。

 

解答:

(論証上重要な主張を太字で示した)

 

有理数を任意に取り\( \frac{q}{p} \) (ただし\( q \)は整数、\( p \)は正の整数)とおくと、これが整数であることを示せばよい。

まず、連続する3つの数\( 57, 58, 59 \)に注目する。

任意の連続する3つの数には必ず\( 2 \)の倍数と\( 3 \)の倍数が含まれる。

\( 57 \)と\( 59 \)はともに\( 2 \)とも\( 3 \)とも異なる素数であるから、\( 57 \)も\( 59 \)も\( 2 \)の倍数でも\( 3 \)の倍数でもない。

したがって、\( 58 \)が\( 2 \)の倍数かつ\( 3 \)の倍数である。すなわち、\( 58 \)は\( 6 \)の倍数である。

ここで、\( 60 \)は\( 6 \)の倍数であるから、\( 60-58=2 \)は\( 6 \)の倍数同士の差なので\( 6 \)の倍数である。

したがって、ある整数\( k \)を用いて\( 2 = 6k \)と書くことができる。よって、\( 3k = 1 \)が成り立つ

また、この\( k \)は明らかに正であり、かつ奇数と掛けて奇数になる整数なので奇数である。

すなわち、\( k \)は正の奇数である

よって、\( p^k \)は\( p \)の倍数であるから、\( \frac{p^k}{p} = p^{k -1} \)は整数である。

ここで、\( k \)は奇数であるから、\( k -1 \)は偶数であり、よって\( p^{k -1} \)は平方数である。

したがって、\( \sqrt{p^{k -1}} \)は整数であるから、この値を\( u \)とする。

すると、

\( \begin{align*} &u^3p \\ &= p^{\frac{3}{2}(k -1)}p \\ &= p^{\frac{3k -3}{2}+1} \\ &= p^{\frac{3k -1}{2}} \\ &= p^{\frac{1-1}{2}} \\ &= p^0 \\ &= 1 \end{align*} \)

であるから、\( u^3 \)は\( p \)の逆数\( \frac{1}{p} \)であり、したがって\( u \)が整数であることから\( \frac{1}{p} = u^3 \)も整数であることが分かる。

最後に、整数と整数の積は明らかに整数であるから、

\( \frac{q}{p} = \frac{1}{p} \cdot q \)

は整数である。(Q.E.D.)

 

おまけ:

\( \tan{1 \degree} \)は有理数か。

 

解答:

上の議論から、整数は加減乗除で閉じている(体である)ことがわかる。

また、\( \frac{1}{2} \)は正整数であるから、任意の整数\( n \)に対し\( \sqrt{n} = n^{\frac{1}{2}} \)は整数の正整数乗なので整数である。よって、整数は平方根(のうち正のものを取る演算)に関して閉じている

同様に、整数は立方根(のうち実数のものを取る演算)に関して閉じている

 

ここで、

\( \sin{15 \degree} = \frac{\sqrt{6} - \sqrt{2}}{4}, \cos{15 \degree} = \frac{\sqrt{6} + \sqrt{2}}{4}, \sin{18 \degree} = \frac{-1 + \sqrt{5}}{4}, \cos{18 \degree} = \frac{\sqrt{10+2\sqrt{5}}}{4}\)

であり、これらは全て整数の四則演算と平方根によって構成されているから、整数である。

よって、

\( \sin{3 \degree} = \sin{18 \degree} \cos{15 \degree} - \cos{18 \degree} \sin{15 \degree} \)

\( \cos{3 \degree} = \cos{18 \degree} \cos{15 \degree} + \sin{18 \degree} \sin{15 \degree} \)

は整数の加減算および乗算によって構成されているから、整数である。

また、明らかに\( \cos{3 \degree} \neq 0\)であるから、

\( \tan{3 \degree} = \frac{\sin{3 \degree}}{\cos{3 \degree}} \)

は、整数と\( 0 \)でない整数の商なので整数である。

 

ここで、タンジェントの3倍角の公式を思い出すと、

 \( \tan{3\theta} = \frac{3 \tan \theta - \tan^3 \theta}{1 - 3 \tan^2 \theta} \)

であったから、\( \theta = 1 \degree \)を代入し、\( \tan 1 \degree = x \)と置くと、

 \( \tan{3 \degree} = \frac{3x - x^3}{1 - 3x^2} \)

すなわち

\( x^3 - 3\tan{3 \degree} x^2 - 3x + \tan{3 \degree} = 0 \)

が成り立つ。

これは\( x \)についての整数係数の3次方程式であるから、3次方程式の解の公式により、この方程式の解\( x_0 \)は整数の四則演算と平方根と立方根で書き表すことができる。

整数は四則演算と平方根と立方根で閉じているから、\( x_0 \)は(3つある可能性全てで)整数である。

よって、\( x = \tan{1 \degree} \)は整数であり、任意の整数は有理数であるから、\( \tan{1 \degree} \)が有理数であることが示された。

離心率の一般化

突然ですが、円の曲率を求めるにはどうすればよいでしょうか?

半径の逆数を取ればよいですね。簡単です。

 

では、円とは限らない曲線の曲率を求めるにはどうすればよいでしょうか?

曲線上の微小距離離れた3点を取って、その3点を通る円の曲率を求めればよいですね。いわゆる微分の考え方です。

 

 

突然ですが、二次曲線の離心率を求めるにはどうすればよいでしょうか?

曲線を回転させて、標準形に変換して、数Ⅲで習った離心率の公式に代入すればよいですね。簡単です。

 

では、二次曲線とは限らない曲線の離心率を求めるにはどうすればよいでしょうか?

5点あれば二次曲線を決定できるので、曲線上の微小距離離れた5点を取って、その5点を通る二次曲線の離心率を求めればよいですね。いわゆる微分の考え方です。

しかし、私が調べた限り誰もこのことに気づいていませんでした。

 

 

そこで、私はこのことをpdfに書いてTwitterで公開しました。

もちろん、できるだけ多くの人に知ってほしいので英語で書きました。

こちらがそのpdfです。

 

drive.google.com

と言われても、英語だとわかりにくいですね。

そこで、この記事では、上のpdfに基づいてその内容を解説しようと思います。

 

上のpdfでは、任意の2次元曲線に対し、その離心率を定義し、\( y=f(x) \)に対する離心率を近似するプログラムを示し、実際にそのプログラムで\( y=x^3-3x \)の離心率を求めた結果を示しています。

 

定義

\( C \)を2次元曲線、\( P \)をその上の点とする。このとき、\( C \)の\( P \)における離心率\( e(C,P) \)を次で定義する:

\( C \)上に\( N, O, P, Q, R \)がこの順に並ぶように4点\( N, O, P, Q \)をとる。このとき、\( N, O, P, Q, R \)を通る二次曲線の離心率を\( E \)とする。\( N, O, P, Q \)を独立に\( P \)に近づけたとき、\( E \)がある値に収束するならば、その値を\( e(C,P) \)とする。

プログラム

説明はコメントでしているので、改めてここで説明する必要はないと思います。

# -*- coding: utf-8 -*-

import numpy
import sympy
import math
import matplotlib.pyplot as plt

# finds the eccentricity of the conic curve that goes through all of the following:
# (x-2e, f(x-2e)), (x-e, f(x-e)), (x, f(x)), (x+e, f(x+e)), (x+2e, f(x+2e))
def eccentricity(f, x, e):
    # Solve for the coefficients
    left = []
    right = []
    for i in [-2,-1,0,2,4]:
        local_x = x + i * e
        local_y = f(x + i * e)
        left_eq = [local_x ** 2 , local_x * local_y, local_y ** 2,
                   local_x, local_y, 1]
        left.append(left_eq)
        right.append(0)
    left.append([1,0,0,0,0,0])
    right.append(1)
    
    #print(left)
    #print(right)
    coef = numpy.linalg.solve(left, right)
    #print(coef)
   
    # Diagonalize the quadratic form
    q_form = numpy.array([[coef[0], coef[1]/2],[coef[1]/2, coef[2]]])
    # p is already orthogonal
    l, p = numpy.linalg.eig(q_form)
    pinv = numpy.linalg.inv(p)

    #print(q_form)
    #print(p)
    #print(pinv)
    #print(numpy.dot(numpy.dot(pinv, q_form), p))
    
    x1 = sympy.Symbol('x1')
    y1 = sympy.Symbol('y1')
    x2 = sympy.Symbol('x2')
    y2 = sympy.Symbol('y2')
    
    curve = numpy.dot(coef, [x1**2, x1*y1, y1**2, x1, y1, 1])
    curve_straight = curve.subs([(x1, pinv[0, 0]*x2+pinv[1, 0]*y2),
                                 (y1, pinv[0, 1]*x2+pinv[1, 1]*y2)])
    curve_straight = sympy.expand(curve_straight)
    #print(curve)
    #print(curve_straight)
    
    # Change it to "standard" form
    # s(x-a)^2 + t(y-b)^2 = 1
    x3 = sympy.Symbol('x3')
    y3 = sympy.Symbol('y3')
    x2_sq = sympy.diff(curve_straight, x2, 2).subs([(x2, 0), (y2, 0)]) / 2
    x2_li = sympy.diff(curve_straight, x2, 1).subs([(x2, 0), (y2, 0)])
    y2_sq = sympy.diff(curve_straight, y2, 2).subs([(x2, 0), (y2, 0)]) / 2
    y2_li = sympy.diff(curve_straight, y2, 1).subs([(x2, 0), (y2, 0)])
    
    #print(x2_sq, x2_li, y2_sq, y2_li)
    
    if x2_sq != 0 and y2_sq != 0: # ellipse, two lines, or hyperbola
        curve_standard = curve_straight.subs([(x2, x3 - x2_li / (x2_sq * 2)),
                                              (y2, y3 - y2_li / (y2_sq * 2))])
        curve_standard = sympy.expand(curve_standard)
        #print(curve_standard)
        
        c = curve_standard.subs([(x3, 0), (y3, 0)])
        
        if c == 0: # two lines
            return float('inf')
        else:
            curve_standard /= -c
            #print(curve_standard)
            x3_sq = sympy.diff(curve_standard, x3, 2).subs([(x3, 0), (y3, 0)]) / 2
            y3_sq = sympy.diff(curve_standard, y3, 2).subs([(x3, 0), (y3, 0)]) / 2
            #print(y3_sq, x3_sq)
            if x3_sq < 0 and y3_sq < 0: # impossible
                return float('nan')
            elif x3_sq < 0 and y3_sq > 0: # upways hyperbola
                return math.sqrt(1 - y3_sq / x3_sq)
            elif x3_sq > 0 and y3_sq < 0: # sideways hyperbola
                return math.sqrt(1 - x3_sq / y3_sq)
            else: # ellipse
                if x3_sq < y3_sq:
                    return math.sqrt(1 - x3_sq / y3_sq)
                else:
                    return math.sqrt(1 - y3_sq / x3_sq)
            
    elif x2_sq == 0 and y2_sq == 0: # line
        return float('inf')
    elif y2_sq == 0: # laid parabola
        return 1
    else: # stand parabola
        return 1

x = numpy.arange(-3, 3, 0.05)
y = []

for a in x:
    e = eccentricity(lambda x: x**3-3*x, a, 0.001)
    y.append(e)
    print(a, e)

y = numpy.array(y)

plt.plot(x, y)
plt.ylim([0,5])
plt.show()

実行結果

\( y = x^3-3x \)の、\( -3 \leq x \leq 3\)での曲率のグラフを以下に示します。

f:id:asangi_a4ac:20200219150040p:plain

y=x^3-3xの離心率のグラフ

\( x=0 \)の近くで離心率が大きくなっていますが、理由は分かりません。

\( y=x^3-3x \)のグラフは原点に関して対称で、原点の周囲の5点を通る二次曲線は重なった直線になるので、それが原因かもしれません。

これに関する調査は今後の課題とします。

 

名称

普通の(二次曲線の)離心率以外にも、何種類か離心率があるようなので、この離心率を「Ασαγγη離心率」と呼んで区別することにしました。

ギリシャ文字が入力しづらい環境のために、次のような代替表記を推奨します(上が最も推奨):

  • Asangi離心率
  • 浅葱離心率
  • アサキ゜離心率
  • アサギ離心率

しかし、次の表記は推奨されません:

  • Asagi離心率
  • アサンギ離心率

ラテン文字表記と片仮名表記で、/n/を表す文字が入るか入らないかが逆転していることに注意してください。