開口部には外部から侵入できないようだ

無限ビリヤードだけで6436本もファイルが入っている.久留島喜内で100本だ..vscodeが入っている.インテリセンス用のデータベースだ.いや,ここにはsetting.jsnというファイルが1本入っているだけだ..condaに6千本以上詰まっている.これを追い出す必要がある.どうなるのか分からないが,とりあえず,.vscodeと.condaをCドライブに移動した.また,厄介なことにならなければよいが… ⇒VS Codeを再起動してみたが,とりあえず,問題なく立ち上がってきた.⇒ランさせてみたが,特に問題は起きていない.

公開サンプルでは,開始点から直下に下がったところで関数曲線にぶつかり,そこから左に向かったあと,曲線の反対側から螺旋運動が始まるような動作になっている.この螺旋運動の領域をハニーポットと呼んでいるが,最初に関数曲線に出会う点は図版ではハニーポットに含めていない.しかし,この点(X点としよう)は関数曲線上の点なのだから,軌跡の動く領域に含まれないというのもおかしい.100回ループを1000回に変えてみた.この図を見る限りでは,確かにX点はハニーポットの外側にある.これはなぜか?

image

10000回周回させると半日掛かってしまうので,2000回で取り直ししてみよう.2000回走らせると下図のようになる.

image

やはり,X点はハニーポットには入っていない.今度は,開始点を(0, 0)にしてみた.出力は開始点(1.5, 1.5)の場合とほとんど変わらない.

image

開始点を(-1, –1)に変えてみよう.この点はスィートスポットより左に位置する点だ.塗り潰しの濃淡はあるが,構図はほとんど変わらない.

image

開始点を(2, 2) とすると発散してしまうが,これは開始点がビターポイントの右にあるためと考えられる.開始点が(-2, –2)でどうなるか見てみよう.⇒発散してしまう.発散してしまうのはよいが,垂線1本とそれから水平に曲がる直線しか表示されない.多少は中間点が表示されてもよいと思うのだが…X, Yのレンジを巨大数まで拡げてみようとしたが,どうも難しい.このくらいが限界だ.

image

これ以上拡げると曲線がほとんど垂直線になって軌跡が見えなくなってしまう.ビタースポットの近傍からスタートした場合,内側ならハニーポットに入り,外側なら発散するという予想通りの結果になった.下図は,β-0.00000001からスタートした場合(2000ステップ)

image

スィートスポットはハニーポットの内部にあるが,この点からスタートした場合にはどういうことになるか?結果が出た.

image

この結果はビターポイントの左側の点はすべてスィートポイントに収束することを意味する.いや,ちょっと違うかもしれない.これは開口部の内側からスタートしたもので,開口部の外側からスタートした軌跡がこのスタート地点に到達することを意味するものではない.開口部の内部に少し階段線が出ているが,これは螺旋経路に入るまでのステップであり,おそらく,その後は通常の渦巻きになっているのだろう.逆に言うと,外側から開口部の内部に到達する経路は存在しないということになる!これはかなり予想外の結果だ.

開始点の座標は(α, α)になっているが,これはもちろん厳密値ではないから,真のα点からはスタートすることもできないはずだ.

x=-0.8228756555322951918404514665129771760095302098202120214329299482947099875218555

y=-0.8228756555322951918404514665129771760095302098202120214329299482947099875218555

Y=-0.8228756555322951918404514665129771760095302098202120214329299482947099875218555

どうも計算のどこかで桁落ちが起きているようだ.最初のステップでは確かにX=Y=αの状態になっているのに,どこかでそれが崩れている.次のステップで値が変化している.

x=0.8228756555322954654385375167383836510883458373747302040693228205013915750026478

データの受け渡しは sweetspot という変数を使って行っている.step!が3回目に呼ばれたときには値が変わっている.

-0.822875655532295358085548286908306181430816650390625
-0.822875655532295358085548286908306181430816650390625
-0.8228756555322951918404514665129771760095302098202120214329299482947099875218555

値が変わっているだけではなく,桁数も伸びている.CharacteristicFuncではx^2-3/2 の計算値を返している.⇒BigFloatを明示的に返すようにしたが,変化なし.CharacteristicFuncの値を見てみよう.

-0.8228756555322951918404514665129771760095302098202120214329299482947099875218555

α=-0.822875655532295358085548286908306181430816650390625 であるとすると,α’=CharacteristicFunc(α) で α≠α’ になっている.これは避けられないのではないだろうか?

Julia で x = x^2-3/2 という方程式を解けるだろうか?できそうだ.この値を使ってやればよいのではないだろうか?

printf のパッケージを導入する必要がある.Julia と VS Code のどちらに入れたらよいのだろう?VS Code で入れると現在のプロジェクトフォルダに入ってしまような気がするのだが… Julia の場合はUsers\babalabo\.julia に入る.

Base.@kwdef mutable struct BallPositionには,xとyという変数があるはずだが,アクセスできない.type SimpleVector has no field x 

BallPosition というのは,Base.@kwdefのインスタンスではなくて,型のようだ.変数を宣言することで動作するようになったが,日本語が出せない.フォント不在エラーになる.

ENV[“GKS_ENCODING”] = “utf8”
using Plots
gr(fontfamily=”IPAMincho”)

なんとか,画面に出せるようになった

なんとか,画面に出せるようになった.本当は実時間で描画したいのだが,適当なルーチンが見つからないので,最後にまとめて出力するような動作になっている.

image

アニメへの保存と画面出力は個別にはできるようになったが,両方やろうとすると,アニメに静止画像のデータが入ってしまう.おそらく,一つしかない画面なのでそのまま残ってしまうのだろう.画面クリアできればよいのだが…あるいは,先にアニメを保存してしまってから,画面を表示するというのも考えられる.その方式を試してみよう.⇒うまくいったような気がする.とりあえず,バックアップを取っておこう.

一つ不審な点がある.静止画面では出ているのだが,アニメでは開始点から下がって折れ曲がる線分が表示されていない.なぜだろう?⇒BallPositionは mutable になっているので,書き込まれてしまっているのだろう.開始点の座標を別に持つ必要がある.というか,2つのループを合体させてしまった方が早いのではないか?⇒できた.これでよいことにしよう.念のため,もう一度バックアップを取っておこう.

無限プールアニメが動き始めた

そろそろ作業に入れるのではないだろうか?目標はとりあえず,f(x)=x^2-3/2 のときの無限数列 x_n = f(x_{n-1}) をトレースするグラフを描画することだ.ローレンツ・アトラクタのグラフはこの仕様にかなり近いので,少しアレンジすればできると思う.本当は実時間で軌跡をトレースするようなものが作りたいのだが,とりあえず,GIF で出力するという方法から入ることにする.まず,このファイル(Lorentz attractor.jl)を解析してみよう.

Base.@kwdef mutable struct PoolGame

mutable というのは,可変という意味で,書き込み可能ということだが,Base.@kwdef というのは何だろう?Base は Julia の基本モジュールと考えてよいと思われるが,kwdef というのが分からない.

What does @kwdef do?
https://discourse.julialang.org/t/what-does-kwdef-do/51973

help?> Base.@kwdefで情報が取れる.

This is a helper macro that automatically defines a keyword-based constructor for the type declared in the expression typedef, which must be a struct or mutable struct expression. The default argument is supplied by declaring fields of the form field::T = default or field = default. If no default is provided then the keyword argument becomes a required keyword argument in the resulting type constructor.

これはある種の連想配列ないし辞書のようなもののように思われる.以のような使い方が想定されている.

julia> @kwdef struct Foo
              a::Int = 1         # specified default
              b::String          # required keyword
          end
   Foo

しかし,実際の使い方を見るとキーワードは指定されていない.

Base.@kwdef mutable struct PoolGame

    dt::Float64 = 0.02
    σ::Float64 = 10
    ρ::Float64 = 28
    β::Float64 = 8/3
    x::Float64 = 1
    y::Float64 = 1
    z::Float64 = 1

end

a, b という変数はデフォルトで使えるようになっているのだろうか?上の構造体では,7個の変数が定義されている.x, y, z は3D空間の座標と見られる.σ,ρ,βはなんだろう?Step! では,引数のPoolGameから座標値を取り出し,σ,ρ,βを使ってそれらを加工した後,x, y, z に戻している.つまり,この3つはあらかじめ初期化されたパラメータと見てよさそうだ.dtも同様のパラメータだ.

これは3Dなので2Dに変えようとしているのだが,うまくゆかない.plot3d という関数が3Dの作りになっているのだろう.⇒plot3dをplotに書き換えたら動作するようになった.あとは,座標を決めてやればとりあえず描画できるはずだ.⇒開始点が(X, Y)だとすると,次の点はもし,(X, Y)が関数y上の点であれば,(Y, Y) となるはずだ.もし,(X, Y)がy上の点でなければ,次の点は(X, f(x))となる,というのでよいだろうか?⇒一応動き始めた.

Infinte Pool Game

もう少しマニュアルを読み進めよう

Julia の入口で多くの人が躓く原因の一つが display であることは間違いなさそうだ.Julia は REPL (read-eval-print-loop) として開発されてきたので,GUI というのは元々想定されていなかったため,あちこつぎはぎだらけのバラック建築になってしまっている.いろいろな美辞麗句でその欠陥を覆い隠そうとしているが,隠しようもないというのが実態だ.従って,できる限り安定に動作する地点を探るしかない.ともかく,もう少しマニュアルを読み進めよう.

Visual Studio Code Tips and Tricks
https://code.visualstudio.com/docs/getstarted/tips-and-tricks#vscode

このマニュアルは Getting Started や User Guide の前に読むべきものと位置付けられている.Help→Welcome→Walkthroughsは自己案内ツアーになっているが,進捗管理されていて,すでに完了したことになっている?どうもよく分からない.画面と解説が一致しない.テーマはライト・ハイコントラストに決めた.VS Code のテーマは暗いものが多い.設定は階層化されているが,上位レイヤーの設定を継承するという選択肢がないというのは不便だ.

ことのついでにPythonをインストールしておこう.ついでにJavaも.JDK(Javaのランタイム)もインストールした.WalkthroughsでPythonコードファイルの作成という課題が出されたので,Fukuzo氏のコードをコピペして走らせたら,エラーになった.⇒今度は通った.Visual Studio Code Tips and Tricks は一通り読んだが,まだよく飲み込めていないところがある.まぁ,やってるうちに少しづつ慣れてくるだろう.Debugging in Visual Studio Code を読んでみよう.

これはPythonベースの解説のようだ.別にフォルダを作っておこう.Node.js は msi 形式で提供されている.上でインストールしたJDK(Jave ランタイム)と同じだ.いや,そもそも Node.js はJava スクリプトだ.⇒一通りすべての Introductory Videos を見た.

次は,Setting up Visual Studio Code だ.Gitもインストールすることにした.⇒Git を使うのか使わないのか?で揺れている.ネット上にバックアップがあるというのはいざというときの備えになるが,Git とのインタフェースは追加作業になる.それだけのコストメリットがあるかどうか?漏洩ということも考えておかなくてはならない.

Home – Plots を通読してみよう

Julia でグラフを出力できるようになった.複数のサンプルが動くようになったので,もうほとんど大丈夫だろう.グラフをGIF出力ではなく画面にも出したいのだがどうしたらよいのだろう?module_Foo.jl には画面を出してキー待ちになるサンプが入っている.このサンプルでは先にプロット配列を生成し,それをまとめてプロットしているのだが,ループの中で毎回プロットするようにできるだろうか?

Plots の辺りをもう少し勉強しておいた方がよいのではないか?とりあえず,Home – Plots を通読してみよう.

https://docs.juliaplots.org/stable/

Processing Pipeline という項目に出てきたサンプルを実行するには,PythonPlot パッケージが必要だ.解説では,backendは自由に切り替えることができるという話なので,インストールしても問題は発生しないはず.やっておこう.⇒かなり時間が掛かる.ギガを使い切っているので,最後まで終わればラッキーというところだ.19/20のところで手間取っている.1Mbpsくらいは出ているのだが… Ponta ポイントが4165あるので使ってみよう.インストールは完了したが,VS Codeでは別途インストールが必要だ.

Julia REPL では一応動くが,グラフは表示されない.VS Code ではエラー(警告)になる.いずれにしてもグラフは出ない.

Warning: backend `PythonPlot` is not installed.
└ @ Plots C:\Users\babalabo\.julia\packages\Plots\a3u1v\src\backends.jl:43
┌ Warning: Keyword argument `orientation` is deprecated.
│ Please use `permute` instead.
└ @ Plots C:\Users\babalabo\.julia\packages\Plots\a3u1v\src\args.jl:1552

同一内容の別サンプルではSVGを出力している.こちらは動作している.

image

MyVecWrapperというのも出してみたが,やなり画面は出ない.ただし,これを動かすには using Plots を追加する必要がある.おそらく基本的なコードは既知であるという前提で省略されているのだろう. terminal に出力する UnicodePlots というのをインストールしてみた.あまり関係なさそうだ.

The graphic is not shown implicitly, only when “displayed”.

とあるので,ともかく Display しなくてはならないのだろう.gui()で表示できるようだが,やはり,ポーズを入れないと見えない.

A Plot is only displayed when returned (a semicolon will suppress the return), or if explicitly displayed with display(plt), gui(), or by adding show = true to your plot command.

ということなので,show = trueでもよいのかもしれない.しかし,いずれにしてもプロットの最終結果を表示ないし保存というのが基本的な考え方のようだ.Makie というのがある.使えるかもしれない.JuliaのEXEをビルドするコンパイラというのがある.PackageCompiler という名前だ.GTKというのもある.

https://goropikari.hatenablog.com/entry/julia_gui_app

Julia REPLでは冒頭でgr()を実行することでウィンドウが開いた.いや,REPLでは何もしなくてもウィンドウが開く.つまり,うまくゆかないのはVS Codeの場合だけだ.⇒JL HUB というサイトを見つけた.公式マニュアルより,こちらの方が分かり易いような気がするので,先にこちらを読んでみよう.mmm… 自サイトの中でリンク切れになっている.大丈夫かな?⇒これは,解説書というより,関数リストのような作りになっている.読み物にはなりそうもない.これはどうだろう?

Displaying computation results in Julia
https://subscription.packtpub.com/book/programming/9781788998369/1/ch01lvl1sec20/displaying-computation-results-in-julia

この記事ではPyPlotが必須なのでインストールした.⇒MyPlot というのはかなり大きなパッケージのようだ.using MyPlot で相当な本数のモジュールが展開されている.

using PyPlot, Random
function f()
    Random.seed!(1)
    r = rand(50)
    @show sum(r)
    display(transpose(r))
    print(transpose(r))
    plot(r)
end
f()

このコードでは,@show, display, print, plot の4つの手続きが呼ばれている.実行結果は:

done
sum(r) = 24.687009959109595
1×50 transpose(::Vector{Float64}) with eltype Float64:
  0.0491718  0.119079  0.393271  0.0240943  0.691857  0.767518  0.087253  0.855718  0.840384  0.89077  0.138227  0.347737  0.198521  0.00819786  0.592041  0.801055  0.564185  0.327726  0.977264  0.0994036  0.972564  0.124189  0.941894  0.983662  0.743445  0.805318  0.989476  0.839891  0.117166  0.291122  0.114068  0.43047  0.570276  0.53366  0.825586  0.32119  0.279424 
0.682005  0.805025  0.211005  0.267188  0.343875  0.440831  0.116041  0.547515  0.589217  0.19932  0.364128  0.802561  0.661425
[0.0491718221481211 0.11907881640750706 0.3932710232252806 0.024094310524527707 0.6918572875342215 0.7675180540873912 0.08725304891274233 0.8557176841095734 0.8403841370820818 0.8907696748195567 0.138227024723224 0.3477368477058109 0.19852090963358837 0.008197858843363659 0.5920407556271403 0.8010551449181886 0.5641848519912193 0.3277260730851096 0.9772642076169137 0.09940363694051435 0.9725641606703476 0.1241890127157469 0.9418941527940101 0.9836615941923371 0.7434447269076069 0.8053175847115641 0.9894764460236303 0.8398907896025322 0.11716604842787648 0.29112215301979427 0.11406795780290624 0.43047012103110294
0.5702762508836267 0.5336600074808578 0.8255859228330473 0.3211901705171226 0.2794235399691639 0.6820050160336559 0.8050245353412276 0.21100502806555133 0.2671882107649258 0.3438753675415538 0.4408314844038338 0.11604055879014974 0.5475146896778691 0.5892167646241558 0.1993200843257663 0.3641283484132992 0.8025607099234905 0.661425351684768]

のような感じだ.rというのは乱数配列でサイズは50,@show sum(r) ではこの配列の和を取って,それを表示している.この配列は1×50でこれを転置して 50×1のベクトルとしたものをdisplya, print しているが,この2つの違いは小数点以下の桁数の違いだけだ.display では 0.0491718,print では 0.0491718221481211 となる.JuliaのREPLではplot()の結果は見えてこない.VS Code の julia terminal で以下を実行する. julia> include(“display.jl”)

showとdisplayまでは動作するが,plotでエラーが発生する.

Please submit a bug report with steps to reproduce this fault, and any error messages that follow (in their entirety). Thanks.
Exception: UNKNOWN at 0x7fff2fc7cf19 — RaiseException at C:\WINDOWS\System32\KERNELBASE.dll (unknown line)
in expression starting at none:0
RaiseException at C:\WINDOWS\System32\KERNELBASE.dll (unknown line)

画面はちらっと見えるがすぐ消えてしまう.出口で realdline を実行しても同じだ.include(“display.jl”)をJulia のREPLで実行すると動作はしているようだが,画面をちら見せして消えてしまう.readlineは効いていない.下のようなグラフが表示されるはずなのだが…

plotの後に,show()を追加すると,VS Codeでも画面が出るようになる.ただし,エラーが起きてすぐに閉じてしまう.plotの引数にshow=trueを追加しても効果なし.⇒PyPlotをPlotsに変えて動作するようになった.今度はplotの引数でshow=trueが効いた.出口のreadlineは必須だ.どうも,このやり方しかないような気がする.これかな?

https://docs.juliaplots.org/latest/output/

ようやく VS Code でグラフが出せた

なんじゃ?これは!まだ午後3時前だというのに,来訪者カウントが1371もある.
image
理由は全然分からない.Julia を再インストールしてかなりいい線が出ていたのだが,どこかでまた逆戻りしてしまった.テーマその他のセッティングをいじったためだろう?ともかく,動くところまで戻らなくてはならない.⇒不良の原因はエンコードにあるような感じもしてきた.以下で Partse Error が発生している.

msg=”Hello World”
println(msg)
x = 1:10; y = rand(10); # These are the plotting data
plot(x,y, label=”my label”)
x = 1:10; y = rand(10); # These are the plotting data
plot(x,y, label=”my label”)
x = 1:10; y = rand(10); # These are the plotting data
plot(x,y, label=”my label”)

Julia のREPLで手打ちすれば,println(msg)までは問題なく動く.Merry で読み直しても同じだ.Merry はデフォルトでUTF8なので問題ないはずなのだが… Julia が別のエンコードを使っているのだろうか?どうも,テキストの””が全角になっていたようだ.打ち直してこのエラーは消えたが,まだエラーが収まらない.

WARNING: both Plots and GR export “plot”; uses of it in module Main must be qualified
ERROR: UndefVarError: `plot` not defined
Stacktrace:
  [1] top-level scope

qualifiedというのは,「資格がある」という意味だ.つまり,管理者として実行する必要があるということではないか?⇒ダメだ.管理者として実行しても同じエラーになる.VS code でも同じだ.⇒動いた.

using GR
using Plots

がバッティングしていたようだ.

https://discourse.julialang.org/t/warning-both-a-and-b-export-func-uses-of-it-in-module-c-must-be-qualified/64402

カスペルスキーから「お支払いは承認されませんでした(「カスペルスキー VPN セキュアコネクション」の定期購入)」というメールが入っている.金額は\2900.修正期限は2024/04/11 なのですでに解約されているかもしれない.いや,カスペルスキーVPNの現物のバージョンは「無制限」になっているので,まだ大丈夫なようだ.カスペルスキーの支払いにはMastercardが使われているので,auカードだろう.ゆうちょに切り替えれば支払いは可能だが… かなりきびしい.ここまで来たら一旦VPNは止めてもよいのではないだろうか?有償VPNを止めても,まだ無償VPNは使えたはずだ.

同じ金額で請求が2つはいっている.Unlimited traffic-1 year と Unlimited traffic –1- year with Trial というものだ.1年契約なら続けて請求が入るというのはおかしい.with Trial というのはなんだろう?契約がダブっているのではないだろうか?だとすれば,1本解約してももう1本は残るはずだ.後の方は,7月24日請求になっている.とりあえず,これはこのまま放置することにしよう.

これが出ればとりあえず,動いていることになる.

image

ただし,VS Code ではエラーは残っている.

`plot` not defined

using Plots は冒頭で実行されているのだが… ⇒pkg>st で見ると PlotsとPlutoしかインストールされていない.Julia 本体にはGR, JuliaFormatter, Plots が入っている.VS CodeのJulia→pkg>add GR を実行して入ってきた.これでエラーは発生しなくなったが,グラフは表示されない.⇒ようやくグラフが出た.

image

using Plots
println(“Plot Test”)
x = 1:10; y = rand(10); # These are the plotting data
display(plot(x,y, label=”my label”))
dummy = Base.prompt(“何かキーを入力すると終了します”)

displayで別ウィンドウが開いて,その中にグラフが表示される.アプリ終了すると閉じてしまうので,Base.promptでREPLの中で待つようにしている.FBにアップロードした Lorentz Attractor が表示できるかどうか?見てみよう.

Lorentz Attractor

このGIFはJuliaで作っているはずだが,どこにあったのだろう?リンクは保存されていない.これは,Julia のマニュアルの Plots の項目にあったサンプルだ.無限ビリヤードの中にどこかで拾ったサンプルが一つ入っていた.CirclePlotというもので,グルグルカーソルのようなものを描くサンプルだ.画面出力はなく,GIFが生成される.

anim_fps15

できた!上とまったく同じものだ.

jl_Hm9KR8fclm

ループの中でdisplay(plt)を実行することで画面も出るようになったが,呼び出しのたびに新しいウィンドウに切り替わってしまう.まぁ,いろいろ問題はあるが,ともかくこれが出せれば後は何とかなるだろう.もう一つGIFアニメを作ってみた.

test

JuliaでグラフのGIFアニメを作ってみた
https://qiita.com/MTNakata/items/0418ae3493a26ac44603

ローレンツ・アトラクタは@gifでファイルを出力しているが,格納先が自動で決まってしまうため,使い勝手が悪い.gifを使えば保存ファイル名を指定できる.

Julia を再インストールする

なぜだろう?GeoGebraでエラーが出るようになってしまった.何をやっても,どこにいてもこのエラーが発生する.

image

EStartというアプリがいつの間にかインストールされていて,しかも,アンインストールができない.プログラムと機能にEstartが表示されない.⇒CCleanerを使ってスタートアップから外した.

とりあえず,GeoGebraを使って速攻でシミュレーションしてみようと思ったのだが,どうも要領が分からない.GeoGebra はオブジェクトを単体で定義する操作が主となっているため,全体の作りが見えてこない.つまり,どこで何をすればよいのか?が分からない.通常はネット上のサンプル・ソースをコピペすればすぐ動くものだが,GeoGebra の場合はそれができない.プログラムはモジュール単位でダウンロードして走らせることができるが,その中がどうなっているのかがつかめない.編集画面もバージョンによってさまざまあるようで,解説記事通りになっていないことがしばしばある.GeoGebra には公式のマニュアルがなく,熟練者(主に英語圏)が書いた解説記事を読解したユーザが自分なりのマニュアルを起こすような作りになっている.

どうも埒が明かないので,Python に乗り換えることにしたのだが,こちらもそうそう易しいものではない.サンプルのソースコードはネットで見つけることができるのでGeoGebraよりはましだが,結構敷居が高い.難易度から言うと Julia の方がとっつきやすいような気がする.Python は最後の手段として,Julia に戻ってもう少し粘ってみるという方針に切り替えることにした.それには,どこで躓いているのか?もう少し正確に把握する必要がある.Julia 単独ではなく,VS Code と抱き合わせで動かしているというのも問題をこじらせる原因になっている気がするが,VS Code を使わないという選択肢はないだろう.モジュールが分散しているところが最大の問題なので,一度更地に戻して出直してみたいのだが… できるだろうか?

これまで Julia を使って開発したプロジェクトは「再帰関数JL」だけではないかと思う.無限ビリヤードというのが最新プロジェクトだが,これは動いていない.参った.何も動かなくなってしまった.これはもう完全な認知症と認定するしかないのではないか?再帰関数JLの中には少なくとも4つファイルがある.いや,どうもコマンドが別のアプリとごっちゃになってしまっているのではないか?コードを実行するときにどのキーを押すかだが… メニューからRunしてとりあえず動いた.デバッグ付き実行はF5だ.ともかく動いていることは確かだが,ほとんど「死んでいない」というのに近い.

y=x^2-3÷2.jl は動くが,エラーが起きている.

BoundsError: attempt to access 676-element Vector{UInt8} at index [698]

エラーなしで動くものを保存しているはずなのだが… バックアップされているフォルダにはワークスペースが入っていない.ワークスペースなしで走らせていたのだろう.無限ビリヤードを作った時点で始めて保存したのではないかと思う.「無限ビリヤード」を開いて実行しようとしたら,以下のエラーになった.

image

Julia extension というのは多分 VS Code の拡張のことではないかと思われるのだが,それがないというのはどういうことだろう?View→ Extensions で見ると Julia は INSTALLED に入っているのだが… EXPLORER には NO FOLDER OPENED が表示されている.再帰関数JLもフォルダは持っていない.ともかく,最低限,再帰関数JL がエラーなしで動作する状態を確保しておく必要がある.もう一度 Hello World からやり直す必要があるのではないか?⇒Hello World ではすべての行をコメントアウトしていた.

hello.jl には,plot 関数も入っている.ただし,UdefVarError になってしまう.using Plots を追加しても同じ.usingまで入力して出てくる候補の中に Plots が入っていない.⇒モジュールはpkgでダウンロードする必要がある.VS Codeのターミナルから pkg を起動できない.⇒VS CodeのターミナルのコマンドプロンプトはJulia REPLとは別物なのだろう.⇒Juliaを起動して,Julia>] と入力し,pkg>add Plots でダウンロードが始まった.Users\babalabo\.julia にインストールしている.このコマンドは前にも実行していたはずだが,今回は何もエラーを出さずに完了した.

image

julia のREPLではjulia>using Plots が効くが,VS Code では効いていない.⇒再起動で認識できたようだ.動作するようになったが,まだエラーが出ている.

Exception has occurred: ErrorException
Failed to precompile Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80] to “C:\\Users\\babalabo\\.julia\\compiled\\v1.10\\Plots\\jl_3B8B.tmp”.

Stacktrace:
  [1] top-level scope
    @ d:\再帰関数JL\hello.jl:4

一番最初に以下のエラーが発生しているように思われる.

ERROR: LoadError: InitError: could not load library “C:\Users\babalabo\.julia\artifacts\f9f799e6ae3fe7f244bb55052db7ff1cea876c27\bin\libgettextlib-0-21.dll”
Access is denied.

libgettextlib-0-21.dllというDLLにアクセス拒否されている.VS Code を管理者として実行してみよう.今度は,

Exception has occurred: ErrorException

Failed to precompile Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80] to “C:\\Users\\babalabo\\.julia\\compiled\\v1.10\\Plots\\jl_BE50.tmp”.

Stacktrace: [1] top-level scope @ d:\再帰関数JL\hello.jl:4

のようなエラーになった.冒頭で

ERROR: LoadError: InitError: UndefVarError: `GR_jll` not defined

のエラーが起きている.GR がインストールされていないということだろうか?⇒julia のREPMでpkgを実行し,GRをインストール⇒VS Code を管理者権限で再起動で,上のエラーは消えたが,InitError というのが残っている.

Exception has occurred: InitError

InitError: UndefVarError: `GR_jll` not defined during initialization of module GRPreferences

Stacktrace: [1] top-level scope @ d:\再帰関数JL\hello.jl:4

GR_jl1 というのが,定義されていないという.GR_jl1というのはパッケージには入っているようだ.Julia REPLでコードを実行してみたが,やはりエラーが起きている.

ERROR: The following 1 direct dependency failed to precompile:

Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80] 

Failed to precompile Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80] to “C:\\Users\\babalabo\\.julia\\compiled\\v1.10\\Plots\\jl_51CD.tmp”.

ERROR: LoadError: InitError: could not load library “C:\Users\babalabo\.julia\artifacts\f9f799e6ae3fe7f244bb55052db7ff1cea876c27\bin\libgettextlib-0-21.dll”

Access is denied.  

jl_51CD.tmpというファイルとlibgettextlib-0-21.dllでエラーが起きている.⇒どうもJuliaも管理者として実行する必要があったようだ.⇒JuliaとVS Codeをアンインストールしてもう一度インストールし直してみる.⇒VS CodeはProgramFiles\WindowsAppにインストールされているが,ここは開くことができない.⇒今回はJulia をmicrosoft store からダウンロードすることにした.今回はきっちりインストールできたようだ.pkg>add GRの動作がまったく違う.ネットワークの問題だった可能性はある.今回はpovo1.0に24時間使い放題でダウンロードしている.以下のコードを実行してみた.

msg=”Hello World”
println(msg)

using GR
using Plots
x = 1:10; y = rand(10); # These are the plotting data
plot(x,y, label=”my label”)

x = 1:10; y = rand(10); # These are the plotting data
plot(x,y, label=”my label”)
x = 1:10; y = rand(10); # These are the plotting data
plot(x,y, label=”my label”)

GRがパッケージに含まれていないというエラーが出ていたが,実行されたようで,以下の画面が出ている.

image

julia> import Pkg; Pkg.add(“GR”) を実行して再インストールしたところ,今度は完全にエラーなしで動作するようになった.Julia REPL 画面への貼り込みも CTRL+SHIFT+V でできるので,VS Code を使わなくても最低限のことはできそうだが,ともかく手順に従ってインストールしておこう.⇒VS Codeは以下のフォルダにインストールされる.

C:\Users\babalabo\AppData\Local\Programs\Microsoft VS Code

VS Code の使い方もよく分からないので,少し勉強しておくことにしよう.VS Code ではHTMLの編集もできる.これは役に立つときがあるかもしれない.⇒何本か,チュートリアル動画を見てみた.

Julia Plots が動かない

無限ビリヤードゲームの図版をGeoGraphで作成しているところだが,なかなか難しい.隣り合った直線がほとんど重なってしまうため,作図困難な状態に陥っている.むしろ,リアルタイムのシミュレーションのが見易いのではないかと考えているところだが,何を使えばよいか?それが問題だ.候補はとりあえず,GeoGebra, GRAPES, Julia, Maxima の4つだ.※→FB上で,Tomoyuki Suzuki 氏から,Pythonが使えるというアドバイスを頂いた.おそらく,Python ならこれほど手こずることはないのではないかと思う.Julia には未練もあるが,もし,どうしてもダメなら Python に移るしかなさそうだ.

GeoGebraには豊富なサンプルがあり,特に,Bunryu Kamimura 氏のサンプルなどは参考になりそうだ.プログラミング言語として GeoGebra Script と JavaScript の2種類が使えるが,GeoGebra Script というのは基本的に入力バーへの命令と同じなので,かなり敷居が高い(最近ようやくちょっとだけ使い始めたところだ).いまさら JavaScript はないと思われるのでこの選択肢は消える.GeoGebra の問題は浮動小数点数の精度だ.最大でも小数点以下15桁ないし,有効数字13桁までしか使えない.GeoGebra はネット上で公開することもできるので,その意味では最適なのだが…

GRAPES ではグラフウィンドウとデータパネルを表示することができる.かなり高度なことまでできそうだが,まだ触ったことがない.GRAPES スクリプトは GeoGebra と同様コマンドの逐次実行タイプのようで,関数などは使えないようだ.できることは限られているが,それだけシンプルに使えるということかもしれない.マニュアルには精度についての記述は見当たらないので,多分倍精度までということではないかと思う.GRAPES は国産なので使いたいという気持ちはあるのだが…

Julia は任意精度の浮動小数点数が使えるので最有力候補だが,どちらかというと数値計算に強いというイメージがあり,シミュレーションに使うという話はあまり聞いたことがない.いや,かなり強力なビジュアライズ用のツールがそろっているようだ.今のところはおそらく,Plots.jl だけで間に合いそうだが… ということで using Plots を実行してみたが,どうもかなりエラーが出ている.パッケージがインストールされていないのだろうか?どうも,Julia Plots には外部のバックエンド環境が必要なようだ.これを実行する必要があるのではないだろうか?

import Pkg
Pkg.add(“Plots”)

# if you want the latest features:
Pkg.pkg”add Plots#master”

どうもそういうことのようだ.

julia> import Pkg
julia> Pkg.add(“Plots”)
Updating registry at `C:\Users\babalabo\.julia\registries\General.toml`
Resolving package versions…               
No Changes to `C:\Users\babalabo\.julia\environments\v1.10\Project.toml`
No Changes to `C:\Users\babalabo\.julia\environments\v1.1\\Manifest.toml`
julia> # if you want the lates features:
julia> Pkg.pkg”add Plots#master”            
Cloning git-repo `https://github.com/JuliaPlots/Plots.jl.git`
Updating git-repo `https://github.com/JuliaPlots/Plots.jl.git` 
Resolving package versions…
Updating `C:\Users\babalabo\.julia\environments\v1.1\Project.toml`
[91a5bcdd] ~ Plots v1.40.1 ⇒ v1.40.2 `https://github.com/JuliaPlots/Plots.jl.git#master` 
Updating `C:\Users\babalabo\.julia\environments\v1.10\Manifest.toml`
[91a5bcdd] ~ Plots v1.40.1 ⇒ v1.40.2 `https://github.com/JuliaPlots/Plots.jl.git#master`
Precompiling project…
✗ Plots
0 dependencies successfully precompiled in 22 seconds. 145 already precompiled. 9 skipped during auto due to previous errors.
1 dependency errored.                                               
For a report of the errors see `julia> err`. To retry use `pkg> precompile`

どうも,まだ何か不足しているようだ.この記事には以下のようなアニメーションのアニメが掲載されている.これはまさに,いま我々がやろうとしていることそのものだ.このコードが動きさえすれば…

はて,何をどうしたらよいのだろう?

docs.juliaplots.org/stable/

バックエンドパッケージをインストールする別コマンドがあるので,実行してみよう.

Pkg.add(“GR”)
Pkg.add(“PGFPlotsX”)
Pkg.add(“PlotlyJS”); Pkg.add(“PlotlyBase”)
Pkg.add(“PythonPlot”)
Pkg.add(“UnicodePlots”)

GRはデフォルトでインストールされることになっている.また,PGFPlotsXを使うためにはLaTexが別途必要だ.Pythonはとりあえず使う予定はないし,UnicodePlotsがなくても済みそうな気はする.とりあえず,Pkg.add(“GR”) だけ実行してみたが,状況は変わらない.plot3d という関数が未定義になっている.

https://docs.juliahub.com/CalculusWithJulia/AZHbv/0.0.7/differentiable_vector_calculus/plots_plotting.html

上記リンクでは,以下を実行している.

using CalculusWithJulia
import Contour: contours, levels, lines, coordinates
using LinearAlgebra, ForwardDiff

LazySets.plot3dという関数はどこかにあるようだが… 

https://discourse.julialang.org/t/error-using-lazysets-plot3d/52994/3

https://github.com/JuliaReach/LazySets.jl/blob/master/src/Plotting/mesh.jl#L117

LazySets.jl というものがあり,そこにはplot3dという関数も定義されている.どうもいま一つ分からない.もう少し,シンプルなサンプルから入ってみよう.@gif というマクロも未定義になっている.

https://qiita.com/MTNakata/items/0418ae3493a26ac44603

どうも訳が分からないが,パッケージが分散しているのも問題だ.多分別のところにあったものを移動してしまったのではないかと思われるが,Julia というフォルダは開発履歴(G:)が最終版ではないかと思われる.多分これは開発用(D:)にあったもと思われる.タスクバーにあるアイコンは C:\Program Files\WindowsApps\Julia にあるもので,これが最初にインストールされた場所ではないかと思う.

C:\Userts\babalabo\.julia というフォルダがあり,その下にpackages がある.GRなどもこの中に入っている.VS Code はまた別の場所に保管されているはずだが,VS Code では拡張機能として Julia をインストールしているはずだから,上記とはまた別のモジュールを使っているのではないか?

開発環境が開発履歴にあるというのもおかしいので,とりあえず,開発用ドライブに戻してみよう.いや,いっそもう一度インストールし直した方が早いのではないか?Julia はアプリとしてはインストールされていないように思われる.いや,どうもインストールされているのはProgram Filesに入っているもののようだ.これを活かしてみよう.いや,どうもこのバージョンは少し古いのではないか?アイコンが古ぼけて見える.パッケージ GR と Plots はインストールできたようだが,以下のコードが実行できない.

#パッケージのインポート
using Plots
gr()
#uとvの定義
function u(x,y)
return x^3 – 3*x*y^2
end
function v(x,y)
return 3*y*x^2 – y^3
end
#yの範囲設定
y = [i*0.1 for i in -100:100]
#アニメーションのインスタンス生成
anim = Animation()
#xを-10から10まで0.5刻みで動かしてグラフを描き、フレーム画像として保存
for x0=-20:20
x = x0*0.5
u_result = map(u,[x for i in 1:length(y)],y)
v_result = map(v,[x for i in 1:length(y)],y)
plt = plot(u_result,v_result,label=”x=$x”,
xlims=(-1000, 1000), ylims=(-500, 500),
xlabel=”u”,ylabel=”v”)
frame(anim, plt)
end
#gifに変換
gif(anim, “test.gif”, fps = 5)

Animationという関数が未定義になってしまう.Animation.jl というパッケージが別途必要なのではないか?いや,そんなはずはない.

using Plots

@gif for i in 1:50
     plot(sin, 0, i * 2pi / 10)
end

これで出るはずなのだが,@gifが未定義になってしまう.Pluto.jlという話も出てきた.どうも,Julia のREPM環境だけでは足りない模様だ.Pluto.jlをインストールしてみたが,動かない.Plutoというのは,ブラウザ上の実行環境だ.独自のREPMを持っている.using Plots で時間をバカ食いするのは仕方ないとして,@gifがやはり未定義になってしまう.その上,Restart notebookという割り込みが掛かるようになる.リモートとのリンクでタイムアウトしてしまうのだろう.ちょっと使い物になりそうもない.Plutoというのは,notebookの上で走るもののようだが,Jupyter とか Observable などというのもあるようだ.GRという描画環境を持っているのに出せないというのはまったく腑に落ちない.VS Code も試してみたが,やはり,@gif が未定義になってしまう.

来訪者カウントが19万人を超えた

来訪者カウントが19万人を超えた.

image

前回18万人を超えたのはいつ頃だったか?2023年3月31日の記事では106662とある.1年で倍増と言ってよいのではないだろうか?23年12月17日には「17万アクセスにリーチ」とあるので,去年の暮頃には17万を越えようとしていたということのようだ.まぁ,いずれ20万の大台を超えるのは時間の問題と言ってよさそうだ.

ネットアクセス用のサブノートで Libre Office が使えない状態になっている.起動してもなぜか立ち消えてしまう.開発機には別にインストールしてあるが,こちらは特に問題なく起動できている.メモリ不足とか何かその種のリソースが不足していることも考えられなくはないが… あるいは,カスペルスキーがブロックしているのではないかとも思われたが,それでもなさそうだ.打つ手がないので,一度アンインストールすることにする.どうも,このアプリはどこかこじらせてしまっているのではないだろうか?「削除の準備中」パネルを出したまま,まったく進まない状態が続いている.

image

いや,ただ別のパネルが出て応答待ちになっていただけかも知れない.OKで進み始めた.⇒復旧した.問題なさそうだ.show


無限数列の極限を与える特性関数を調べる

無限数列の極限を与える特性関数を調べているところだが,だいぶ分かってきた.特性関数とY=Xのグラフ上の交点を結節点と呼ぶことにしよう.結節点が1個だけなら,この点は数列の極限である.結節点は極限となる場合と収束範囲の境界点になる場合がある.このような点を境界杭と呼んでいる.通常,収束点と境界杭は一つ置きに並ぶものと考えれるが,結節点において特性関数の傾きが1の場合,つまり,Y=Xが特性関数の接線になっている場合には,「象限」が変化しないため,同じ方向に収束することになる.収束点は収束範囲の内部にあり,収束点の上下でいずれも収束点に向かう運動になる.

このことをまず,確認しておくことにしよう.Julia のコードが残っているはずだから,それを修正すればすぐ動かせるだろう.Julia は VS Code 上で使っている.多分これが一番使い易い方法ではないかと思う.最初からウィンドウが2つ開いている.これは何だろう?また,実行してエラーが出た.立ち上がっているのは,「再帰関数呼び出しテスト3」だ.本体でも同じファイルが開かれている.⇒ Shift+Enter で実行してエラーになってしまう.

ERROR: LoadError: UndefVarError: `@printf` not defined
in expression starting at d:\再帰関数JL\x=√6x.jl:20

なぜだろう?動いていたはずなのだが… 現在JLファイルが7個あるが,どこに保存していたのだろう?それをまず確認しておこう.⇒D:\再帰関数JLというフォルダだ.これをまずバックアップしてから開始しなくてはならない.⇒起動した時点でエラーが発生している.

ERROR: LoadError: IOError: connect: no such file or directory (ENOENT)

何だろう?ENOENT なんて聞いたこともない.JULIA 本体は babalabo に置かれている.VS Code 本体は C:\Program Files の中だ.確かに ENOENT というエラーが起きることはネット上でも報告されている.

https://github.com/julia-vscode/julia-vscode/issues/2595

比較的最近出てきたトラブルのようだ.上記によれば,このエラーが出ていても実行は可能であるようだが…

disabling the terminal.integrated.enablePersistentSessions setting

というアドバイスがある.以下のリンクを参照ということのようだ.

https://stackoverflow.com/questions/69889448/how-to-prevent-vs-code-to-remember-terminal-sessions/69894400

settings.json に

“terminal.integrated.persistentSessionReviveProcess”: “never”

と書き込むということのようだ.⇒何とか修正できた.⇒起動時のエラーは解消した.`@printf`が未定義というエラーは残っている.ALT+ENTER で実行できた.SHIFT+ENTERやCTRL+ENTERではおそらくすべてのファイルを実行しようとしているのだろう.この関数は x=√6.jl に入っているものだ.

再帰関数呼び出しテスト3:x=√6x
precision=300 maxloop=300 A=6.00000000000000000000000000000000000000000000000000000000000000000000000000000000

を出して停止する.