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

そろそろ作業に入れるのではないだろうか?目標はとりあえず,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

を出して停止する.





Julia を始めて何日になるだろう?

Julia を始めて何日になるだろう?何とか動かすところまでは漕ぎ着けたが,まだ問題は解けていない.関数自体は簡単なものなのですぐにでも終わると思っていたのだが,どうにもこうにも動いてくれない.Julia は発想的にかなりわたしに近いような気がしていのだが,どうも真逆だったような気がする.右ハンドルから突然左ハンドルの世界に放り出されたようで,車を出すたびにあちこちぶつかって車体もボコボコという感じだ.そもそも ^C でコピー,^Vでペーストが通用しないなんてのは始めてだ.Julia はおそらく UNIX の世界から出てきているものと思われるが,^C, ^V は UNIX から始まったものだったはずなのだが…

その意味では,まるきり独自の世界観に基づくと言ってよいが,それもかなりアナーキーな世界であるように感じる.ショートカットで,^Shift+C,^Shift+Vが使えることがわかったのでとりあえず,編集はできるようにはなったが… ファイルやモジュールの管理もかなりルーズな感触がある.一応 module とか package のような概念はあるが,VS のような構造化したものではない.アバウトと言えばアバウトで,勝手をわきまえればそれほど不自由はしないのかもしれないが… 最大の問題は,再帰関数で戻り値を引数に書き込んでも返ってこないという点だ.

ほとんどワケワカリませ~んというレベルだが,これを何とかして動かさないと今までの苦労も水の泡になってしまう.Julia では引数はすべて参照渡し(コピーを作らない)と理解しているのだが,通常の参照渡しの作法がまったく通用しない別世界になっている.マニュアルでは引数並びでいくらでも複数の戻り値を返せるような書き方になっているが,実はその正反対で,本心では「それは本則に反する」と呟いているのではないかという気がする.つまり,誰かが書いていたように,「Pure Function」が彼らの理想なのではないか?それが,関数名の後ろに「!」を付けるという「慣例」はそれに準拠しているような気がする.ともかく,もう少し調べてみることにしよう.

どうしたのだろう?昨日の終業時の状態とまったく違う画面が出ている.端末にはPS D:\再帰関数JL>というプロンプトが出ている.PowerShellなど起動した覚えはない.Shift+F5でデバッグ付き実行ができない.⇒勘違い.Shift+F5はデバッグ中止,Shift なしで実行だ.

Julia 事始め:

Julia 事始め:

image

https://julialang.org/downloads/platform/#:~:text=Adding%20Julia%20to%20PATH%20on%20Windows%2010%2C&text=cpl%2CEditEnvironmentVariables%20and%20hit%20enter,noted%20from%20the%20installation%20stage.

Open Run (Windows Key + R), type in rundll32 sysdm.cpl,EditEnvironmentVariables and hit enter

https://stackoverflow.com/questions/61238046/workspacefolder-can-not-be-resolved-please-open-a-folder-on-visual-studi

おかしい.昨日の時点ではエラーはすべてクリアできていたはずなのに,また同じエラーが出るようになってしまった.

image

始業時にバックアップを取った後,開発用フォルダ名をリネームしているが,動作には影響しないはず… ⇒再起動して収まった.module Foo.jl というファイル名で始めているので,このまま続けてみよう.この関数はどこから拾ってきたのだろう?

module Foo
import Base.show
export MyType, foo
struct MyType
    x
end
bar(x) = 2x
foo(a::MyType) = bar(a.x) + 1
show(io::IO, a::MyType) = print(io, “MyType $(a.x)”)

多分,ドキュメントの中だったと思うが… Julia の REPL にはヘルプモードというのがあるので試してみよう.?を入力するとプロンプトが help?>に変わる.Julia を使うためには,少なくとも,①変数,②関数,③再帰呼び出しの方法を知らなくてはならない.変数は基本的に型宣言なしで使い始めることができるようだ.⇒Julia の REPL で行を戻って新しい行を挿入できない!つまり,最初から打ち直さなくてはならないようだ.リターンキーでその行を実行してしまう.ネット上で拾った対処策:https://blog.sgry.jp/entry/2019/08/04/152533

①外部テキストエディタで編集しておいたものをコピペする,②キーバインドを設定する.startup.jl でのキーバインド追加方法でのポイント⇒実装してみたが,効果なし.訳がわからない.キーバインドのリストはどこかで一度見たような気はするが,見つからない.もう一度一からやり直してみる.JuliaとVSCodeをアンイストールし,コマンドプロンプトから,winget install julia -s msstore を実行する.

ダメだ.失敗してしまった.しかし,リンクはまだ繋がっているように思われる.PowerShellではUnicodeが文字化けしてしまうようだ.Yボタンを押すところで止まっていたようだ.今度は成功した.
winget install julia -s msstore

Juliaupもインストールされたようだ.上掲のページではPlease star us on GitHub.とある.多分,これはJuliaがGitHub経由で配布されていることによるものだろう.

https://github.com/JuliaLang/julia

Julia も VSCode もデフォルト位置にインストールした.これで動かなければお手上げだ.⇒VSCodeを起動したら,前回の状態で立ち上がってきた.アンインストールしたので,何も残っていないものと安心していたのだが… VSCodeの拡張にJuliaが復活してきた.どうもまずいことになったが,ともかく一度アンインストールして再インストールすることにする.再帰関数Juliaというすでに削除してしまったフォルダ名がWORKSPACEとして残っている.これを消したかったのだが…

新規ファイルを名前を付けずに作ってしまったが,どこに作ったのだろう?⇒再帰関数Juliaフォルダは削除できた.代わりに再帰関数JLを登録したら,中に入っているJLファイルがそっくり出てきた.UNTITLED(WORKSPACE)に名前を付けたいのだが… Users/babalabo/.Julia というフォルダはあるが,EXEの置き場所がわからない.LOGなどもそっくり残っている.D:\Juliaは空っぽになっている.⇒エディタで,以下を入力→実行してようやく少し動き始めた.

msg=”Hello World”
println(msg)

  Installing known registries into `C:\Users\babalabo\.julia`
   No Changes to `C:\Users\babalabo\.julia\environments\v1.10\Project.toml`
   No Changes to `C:\Users\babalabo\.julia\environments\v1.10\Manifest.toml`
[ Info: Precompiling VSCodeServer [9f5989ce-84fe-42d4-91ec-6a7a8d53ed0f]
Hello World

ともかく,「Julia in VS Code」を一通り読んでみよう.^F5でコードを実行しようとしたら,初めてファイルの置き場所を聞かれた.Julia ExtensionのPlotを導入しみた.かなりエラーが発生している.pkg> precompile というのをやるようにと言われたが,うまくゆかない.以下のコードも実行できない.

using Plots

x = 1:10; y = rand(10); # These are the plotting data

plot(x,y, label=”my label”)

ERROR: `Plots` is a direct dependency, but does not appear in the manifest. If you intend `Plots` to be a direct dependency, run `Pkg.resolve()` to populate the manifest. Otherwise, remove `Plots` with `Pkg.rm(“Plots”)`. Finally, run `Pkg.instantiate()` again.

Julia REPL で Julia>using Plots を実行してみたが,山のようなエラーが出ただけだ.