来訪者数が25万人を越えている

来訪者数が25万人を越えている.最近は1日の来訪者が2千を超す場合もある(滅多にないが).どこから湧いてくるのかよく分からないが,数が増えるのは単純にうれしい.

image

べき乗和の一般公式を求めているところだが,ゴールがやや近付いたという雰囲気が出てきた.黒木の公式とファウルハーバーの公式を架橋するというのが目標だが,黒木の公式を一般化できる可能性が出てきた.まだ,どこかに計算ミスが残っているようだが,もし,これで基本的なところが通っているとすれば,解決は時間の問題だ.そのためには少し環境整備しなくてはならない.複数の公式・恒等式を使わなくてはならないが,その中にはまだ数値的に動作確認されていないものも含まれる.その辺りは黒木氏にお願いしているところなのだが,あまり積極的ではないように見かけるので,そろそろ自分でやる必要が出てきた.まず,julia のサビ落としから始めなくてはならない.

動作確認する必要のある関数(アルゴリズム)には以下がある.

  1. 黒木の公式 ✓
  2. ファウルハーバーの公式
  3. べき乗和の公式 ✓
  4. ベルヌーイ数列の一般項
  5. ベルヌーイ数マトリックスの生成
  6. 黒木の恒等式
  7. べき指数の逆順変換
  8. べき乗和の一般公式

まず,黒木の公式から確認したいのだが,方法はあるだろうか?今の環境では変数の入った多項式を文字式として扱うことはできない.従って,できるとしても,kとnを指定して値を基準値と比較するしかない.そのためには,まず第3項のべき乗和の公式を作る必要がある.これはkごとにF_k(n)=F(n)のような多項式として表示した式だ.現在,julia 環境には,仕掛りのプロジェクトとして「階乗素因数のべき」というのが上がっている.走らせると,以下のような出力が吐き出される.

n=14^16 ゼロ=2494949494949492 n=10000000000000000 r=6.000000000000000041323199371444658202404150485
572577732799965364508923497182429

多分,これはAMSのDaily Epsilonに関係するものと思われるが,すっかり忘れてしまった.TrailingZeros という関数名があるので,巨大数末尾のゼロの個数をカウントしていたものと思われるが… その他に,primeExponent という関数も入っている.階乗数Nをb進数表記したときの末尾ゼロの個数をカウントしているのだろう.使っているモジュールは Printf と Primes だけだ.高精度演算が必要なので,setprecision などが使われている.データ型はBigIntとBigFloatを使っている.あとは,@printf や println だけだ.

べき乗和公式というフォルダを作って,ここから始めることにした.⇒PowSum1~5という関数セットを作った.動作している.べき乗和を単純に計算する処理を組み込んで結果が一致していることを確認した.べき乗するところはbig(n)^kのような形式で実行する必要がある.さもないと桁落ちが発生してしまう.さて,いよいよ黒木の公式だ.これは大きいのでかなり大変だろう.

いや,かなり簡単に実装できた.実際,この関数はべき乗和関数を再帰実行しているので,既成のPowerSumがそのまま使えた.これで3つの関数が出揃ったことになる.動作確認が必要なルーチンがあと,2つある.黒木の恒等式とべき指数の逆順変換だ.黒木の恒等式は片付いた.べき指数の逆順変換も通った.これで準備は整った.

サビ落とししてゼルコバの木を動かす

、「OG Xavier: Official Group Xavier· •10h Big Big brain time. Xavier! How can become my own grandpa? Suppose you marry a widow who already has has a grown up daughter, and your father marries the widow's grown up daughter. Now the widow's daughter becomes your mother. Since your mother's mother is your wife, your wife is also your grandmother. As the husband of your grandmother, you become your own grandpa.」というテキストの画像のようです

前にもどこかでこのような話題が出たことはあるが,どこでだったか覚えていない.G++をやっていた時期ではないかと思う.この時期には海外の系図研究者と活発な対話が成立していた.ゼルコバの木に入力してみようと思っのだが,動かない.サブ機にはコラッツ特注版というのが入っているが,起動時エラーになる.開発機に入っているのはこれとは別バージョンだが,フォントサイズを変更しようとしてエラーが止まらなくなってしまった.

開発環境でリビルドして以下のエラーになった.

2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\ Common7 \IDE\VC\VCTargets\ Microsoft.Cpp.WindowsSDK.targets(46,5):  error MSB8036: Windows SDK バージョン 10.0.17763.0 が見つかりませんでした。必要なバージョンの Windows SDK をインストールするか、プロジェクト プロパティ ページで SDK バージョンを変更するか、ソリューションを右クリックして [ソリューションの再ターゲット] を選択してください。

[ソリューションの再ターゲット] を実行してビルドできるようになった.ビルドできた!実行してみよう.⇒問題なく起動できた.氏名を入力すると下の欄に10という数字が表示されている.多分コラッツ版で入れたものだろう.⇒配偶者を登録し,配偶者に未婚の子どもを入力して例外が発生した.

▲配偶者に連れ子を入力して例外が発生した.GP例外のようだ.いや,TRIBEBOX::StartTribe でスローしている例外だ.group()が空でないために論理エラーとみなされている.MakeUpTree→SortTribeList→StartTribe というシーケンスだ.SortTribeListでは始系列を取り出そうとしているので,動作が矛盾している.⇒暫定的に止めて動作するようになった.

人名枠の中身を出力しているところを探さなくてはならない.関数名を忘れてしまった.NameBox.cppというのがある.PrintParameterでパラメータ類を出力している.

▲所属を表示しようとして停止した. Bobject::setClipRegionでマッピングモードがMM_TEXTになっているためだ.

間取り図、青写真・設計図、テキストのグラフィックのようです

デルタ多面体を三角錐に分解する

デルタ多面体を三角錐に分解する問題:任意の多面体をデルタ多面体に転換することは容易に可能だが,多面体→デルタ多面体の変換には多義性がある.つまり,デルタ多面体には三角錐に分解できるものとできないものがある.それをどのように識別するか?それが問題だ.平面グラフと多面体は等価であると考えられるので,グラフ理論上の問題として考えるのが妥当かもしれない.平面グラフについて少し考えてみよう.

①平面的グラフ:平面的グラフは球面など種数0の曲面に描けるグラフと同値である.②平面グラフにおいて,辺で囲まれた極小な領域を面という.有界な面を有限面,そうでない面を無限面と呼ぶ.③オイラーの公式:種数gの曲面S上に描かれた連結グラフがSをf個の領域に分割しているとき,|V|-|E|+f=2-2g.③ワグナーの定理:グラフが非平面的であるのは,K3,3またはK5を部分グラフとして含むときかつそのときに限る.④クラトフスキーの定理:グラフが平面的グラフであるための必要十分条件は5角形グラフあるいは6角形グラフに縮小し得るようなグラフを元のグラフが含まないことである.⑤四色定理:平面グラフは4色で彩色できる.⑥2連結3平面正則グラフは1因子分解できる.これは四色定理と同値.

外平面的グラフ:すべての頂点が無限面の回りにくるように描ける平面的グラフ.このうち,辺集合が極大となっているものを極大外平面的グラフと呼ぶ.極大外平面的グラフには切断点がなく無限面以外の面がすべて三角形になるように平面描画できる.

タットの定理:グラフGが完全マッチングを持つのは頂点集合Vの任意の部分集合Uに対し,V-Uの導出部分グラフの奇数個の頂点を持つ連結成分の個数が高々|U|であるとき,かつそのときに限る.→ガライの補題

基数が2のときの動作がおかしい

基数が2のときの動作がおかしい.2は素数なので(n-1)/zの値はきっちりpにならなくてはならないはずなのに,端数が出ている.⇒2^kでk=7の場合と,14の場合で不一致が発生している.⇒2^7をダンプして末尾ゼロを目測でカウントしてみたところ,127あった.この数字は正しい.TrailingZeros が返してくる値は126で1小さい.どこかで桁落ちなど起きているのだろうか?

primeExponentが返してくる値が,126になっている.

n=128, p=2, k=6, e=64+32+16+8+4+2=126

どうも,対数関数のlogが誤差を出しているようだ.

p=2 n=128 log =6.999999999999999999999999999999999999999999999999999999999999999999999999999931

この値のfloorを取ると6になってしまう.これは本来7でなくてはならないのではないだろうか?2^7=128だから,log_2(128)=7でなくてはならない.これを回避するにはどうすればよいか?logの引数をBigFloatにしてみたが,効果なし.logの値をBigFloatで受けるようにしてみたが,同じ.BigFloatの精度は256もあるのに,計算値は80桁くらいしかない.⇒やった!primeExponentの冒頭でsetprecision(BigFloat, 512)を実行したら,log=

7.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006

という値が取り出せた.これでrも1.0に落ち着いた.とりあえず,これでよいということにしておこう.⇒この計算誤差は他の数値でも出ている可能性がある.チェックしておこう.⇒数値には変化はなかった.

nの階乗のb進数表記末尾のゼロの個数の数え上げ関数を実装した

階乗の末尾連続ゼロ数は基数のbによって決まる.bの素因数分解に含まれる素数をpとするとき,N=n!に含まれる最小のp^eの個数が連続ゼロ数となるので,最小のp^eの個数を決定する必要がある.一般にはpが大きいほどこの値は小さくなるが,pが小さくてもeが大きければ逆転する可能性がある.

まず,一般的にnとbを指定したときの連続ゼロ数を与える関数を作ってみよう.このためには,nを素因数分解するところから始めなくてはならない.julia には factor という関数がある.以下のダンプは b=2^2・3 を表している.

b=12 f =Primes.Factorization(2 => 2, 3 => 1)

Factorization というのは連想配列で,とりあえず,

for (p, e) in f
 @printf(“%d %d \n”, p, e)
end

の形で取り出すことができる.

Julia がさっぱり動いてくれない

Julia がさっぱり動いてくれない.わたしのボケが進んでいるためかと思ったが,Julia の使いづらさ(不備)というのもあるような気がする.ブレークポイントが聞く既存プロジェクトに対象となるコードを埋め込んでみたが,ブレークしない.既存コードでも同じようなことが起こっているが,plot を呼び出さなければブレークできるところを見ると,どうも,デバッガが動くコードと動かないコードがあるように思われる.停止点がそのコードより前にあっても停止しないので,おそらく実行時に先読みしているのだろう.

確かにplotが動作するようになるまでかなり手間取った記憶はある.plot というのはウィンドウを開いてグラフなどを表示するための関数だが,何も出てこないということはまるきり動作していないということだろう.多分,どこかに plot が動くバージョンは残っているはずだが,どうやって動かしたのか忘れてしまった.現在仕掛りのコードでは,おそらくPrimes というパッケージがそれに該当するのだろう.いや,Primes はコメントアウトしてある.

ファイルは新規生成しただけでは実行されない.外部から持ち込んだだけの場合も同様.「保存」が必須のようだ.

ひさびさにJuliaを起こしてみたが

ひさびさにJuliaを起こしてみたが,使い方をすっかり忘れてしまった!functionの書き方どころか,コメントの付け方さえ忘れている.二重階乗というプロジェクトがあったので,コピーしてここから始めることにしたのだが… 環境も変わってしまっているような感じだ.using Primes が通らないので,再インストールしている.Julia は間に GitHub が入っているのでいまいち何がどうなっているのかよく分からない.というか,その前に Juliaの拡張が入っていない.というか,2,3日前に Windows 11 をインストールしているのだが,それが裏目に出なければよいのだが… エクスプローラの詳細表示で行間が広くなっている.こういう変化はうれしくない.

作図にミスがあった

GeoGebraのIF文がどうやっても通らない.こんなつまらないところで躓くとは… 何かシンプルなサンプルはないだろうか?

q1とp1の交点T2(C_1)は辺CA上に乗っていない.わずかながらずれている.作図ミスと思われる.q1とp1はいずれも円だ.q1(l2, V), p1(T1, V).Vは円周上の点でV(c1, j)だが,これが間違っているのではないか?jは(L, C)という直線でLは直線i上の点だ.i(A, B)でこれは間違いようがない.どうもLは点Aを選択したつもりで新たな点として追加されたものと思われる.⇒これで正しく動作するようになった.Point(…)を総点検する必要がある.Lは削除しておこう.

GeoGebraで軌跡の方程式を求める

周長2等分線図の包絡線図を出せるようになった.できれば,この表示を切り替えるできるようにしたいのだが… オブジェクトの表示・非表示を切り替えるボタンを設置できるようになっている.チェックボックスにはオブジェクト・リストを選択できるようになっているので同時に切り替えが可能だ.ただし,オブジェクトの属性をここで切り替えることはできないので,直線を2種類作らなくてはならない.⇒それはそれでよいのではないか?しかし,このスイッチは表示・非表示を切り替えるだけなので,AとA’を切り替えることはできない…

リストを作るときにはオブジェクトを矩形で囲んで選択する.これは編集できるので,なんとかなりそうだ.ボタンを設置してスクリプトを書くという手も考えられる.オブジェクトの表示・非表示と属性(色と線の太さ)を変えたいのだが… 切断線は3本のはずなので,個別に書き換えてもそれほどの手間にはならないのではないか?

GeoGebraには軌跡の方程式を求める機能が備わっている!「数式処理 (CAS) エンジンでグレブナー基底を用いた計算を行い,軌跡の方程式を求めている」という.なんてこった!⇒ただし,求められるのは点の軌跡だけのようだ.つまり,直線の方程式を求めることはできない.まぁ,点の軌跡を得られればそれから割り出すことは可能だろう.

駆動点はなんらかの動線上の点でなくてはならない.P点をある円周上の点に設定し直すことはできるのではないか?その上で,小三角形上の点の軌跡の方程式を求めれば,その点とPを結ぶ直線の式は導き出せるはずだ.ただし,GeoGebraでは文字式は使えないので,方程式の係数はすべて数値になっているはずだ.それでも,方程式の形式がわかるだけでも有用性はあるだろう.⇒どうだろう?役に立つ場合もあるかもしれないが,あまり役には立たない気もする.

得られるのは軌跡の(駆動点とは独立の)方程式であり,駆動点との関係は捨象されてしまっている.このような式が与えられたとしても,それをどう利用すればよいのか?にわかには思いつかない.以下の記事ではGeoGebraを高校数学の授業に活用することを念頭に動作確認しているが,この機能にはまだまだかなりの限界があることが示されている.

https://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1951-15.pdf

三角形の周長2等分線図(包絡線)を投稿

久留島喜内の道具箱は結構作り込んであるつもりなのだが,まだまだだ.このツールは本来べき乗剰余の周期列を見るためのものだが,対象数の逆数をB進数表記で見ることもできるようになっている.べき乗と逆数には強い関連があるためだ.しかし,ときには対象数の逆というより,除数を分母としてみたい場合もある.そのような見地からすれば,現在の動作はγ=1の場合を見ているに過ぎない.

また,現状ではB進数表記にもかなり制約があるように思われる.対象数が大きくなると簡単に表示不能になってしまう.もっと桁数の大きい数値を扱えるようにする必要がある.1/αの表示形式にもやや問題がある.間仕切りの|は却って邪魔になっているような気がする※.仕様も使い方も忘れてしまったところがあり,stripeなどの意味もわからない.せめてヒントくらい出るようになっていないと… いや,ほとんど忘れてしまっていると言っても言い過ぎではない.マトリックスが2種出るようになっているが,なぜ2つも出しているのかも忘れてしまった.

※本家AMSツイッタの常連投稿者の pink @fourtyonerocks が4/13 = 0.(307692)という書き方をしている.これは読み易いような気がする.

前日のログで,「動作のおかしいところがある」としているが,やはりおかしいと思う.これらの点は⊿XYZの辺の延長と⊿ABCの辺の延長の交点だが,飛び出す点と飛び出さない点がある.飛び出さない点は上図にコーナーを回って隣の辺に移動している.この動作の方が正しいと思う.いや,それでは定義に反するものになるのではないか?たとえば,C1とC2はC点から等距離でなくてはならないはずだ.むしろそうなっていないA2の方が間違っている.A2はIntersect(L1, t1)となっているが,t1というのは⊿ABCそのものだ.

L1は線分ではなく,jとbの交点だ.いや,L1という点とL1という直線があるのではないか?L1というのはC点の別名のようだ.しかし,この修正はかなり難しい.1点を修正するとその副作用で複数の点が未定義になってしまう.A1, A2というラベルの付いている点は表示用で,オリジナルの点は直線上の点になっている.A1, A2のラベルの付いている点を非表示にして,オリジナルの点を表示するようにした.多分これで動くはずだ.⇒すべてのオブジェクトを表示設定して修正した.

三角形の周長2等分線図(包絡線)を GeoGebra に投稿した
https://www.geogebra.org/m/xa7nsrpg