また軌跡の描線が出なくなっている

なぜだろう?また軌跡の描線が出なくなっている.アニメには出力されている.このサンプルでは例外は発生していない.昨日は完全に動作確認したつもりだったのだが…

image

ポイントは描画できているのに線分が描けないというのはどういうことだろう?2024-03-28-1 では出ている.最新版でまったく同じ設定にしてみたが,やはり動作していない.どうもよく分からないので,ここまで戻ることにする.

image

いや,それより後の28-2でも動作している.ここまで戻れば十分だ.

image

この後,どんな修正が入っているかが問題だ.この版にはすでにRootsは組み込まれていて,Find_zeroで不動点を検出している.実際画面にも描画されている.ここまでできれば立派なものだと思うのだが,何を追加しようとしたのだろう?まず,動線を描画できていないサンプル y=x^2-1.5 初期値α=1.8229を試してみよう.確かに画面には何も出てきていない.

image

ただし,これは計算や動作が誤っているためではない.開始点=(1+√7)/2 から出発した場合,値の変化が遅くて不動点の◯の外に出られないためだ.これを区間[1.8, 2.0] point:30で描画すると,以下が出力される.

image

ただし,ステップを増やして,point=34を超えると動線は消えてしまう.

1: 1.82287565553229535809
2: 1.82287565553229552433
3: 1.82287565553229613042

27: 1.84833257470943420165
28: 1.91633330673200616455
29: 2.17233334249042522319
30: 3.21903215089562309242
31: 8.86216798849970155839
32: 77.03802145638884645281
33: 5933.35674991502828268578
34: 35204720.82176222747503632359
35: 1239372368138217.42496308002819849062

36: 1536043866904533138569813670805.66483330243742956258
37: 2359430761055031115005960802378927230275224692180453704350907.12176434601263055879
38: 5566913516212723332117413654604965054786240836971452633864047785437413116991185624735519798218699259766451175951693774848.00000000000000000000
39: 30990526096991907041511225161593806680067925799018141776028714401452471138227479974234438992180424796522079841327601952168724719696008595440015069056256081311447418248647170548763107745965205691210096638929522670926745027633952745003478417408.00000000000000000000

のように変化するとき,39点目で例外が発生しているが,それよりも手前の35点目で描画上の問題が発生するものと考えられる.例外が発生した場合には,例外の発生点から先を切り捨てて自動再計算するようになっているが,動線を描画するためには,maxloopを68以下に設定する必要がある.下図では区間を[1.8-100.0]まで拡大して32点までを描画している.

image

いずれにしても,軌跡の動点数を調整しないと動線を描くことはできないということが分かった.ここで一度バックアップを取ってから,もう少し整理することにしよう.⇒配列XaとYaは廃止できるはずだ.⇒廃止した.⇒lastpos はループの中では更新せず,最後のsweetposから取り出すというのでよいのではないか?(正確に言うと,この点は描画されていない可能性はあるが…)この図は区間[1.8, 4.0]だが,稲妻型の発散としてはこのくらいが分かり易いのではないか?

image

とりあえず,一旦バックアップを取っておこう.ある程度整理が付いた.稲妻型の収束例として以下をピックアップしておこう.

image

スパイラル型の収束例が欲しい.これがスパイラルではないか?

image

そんな感じだ.通常のメルストロム型とはかなり違う.初期値0.5でもほとんど図柄は変わらない.しかし,x^2-1.5の標準図とは大きな違いだ.下図↓

image

ようやく片付いた

プログラムを少し改造する必要がある.

  1. precision を定数で与える ◯
  2. initialpointを冒頭で定義する ◯
  3. setprecision ブロック内の処理はすべて平場で実施する △
  4. 特性関数を y = (x-a)^2+b の形式に変更する X
  5. 特性方程式 x=(x-a)^2+b の解をあらかじめ取り出しておく ◯
  6. その他のパラメータも変数表示してあらかじめ計算しておく △

これは何だ?まだ午後9時というのに…

image

これはこれまでのレコードではないだろうか?ただし,それほど伸びなかったようだ.2000は超えなかった模様.

初期値を2から100に変更しただけでエラーが起きてしまった.10ならば動作する.-10にしたら,今度はDrawLinesで停止するようになった.⇒これはわたしのミスだ.根号の中の変数に負値を与えていた.√(5+x)なので,-5より小さい値は渡せない.しかし,√(20+x)としても,エラーは解消しない.今度は setprecision のエラーだ.

NaN result for non-NaN input

どうも,シグネーチャの異なる呼び出しを実行しようとしているようだ.⇒setprecisionを引数一つの一番シンプルなタイプに書き換えて動作するようになった.しかし,初期値100ではまだエラーになる.今度は UndefVarError: `Rounding` not defined に変わった.

初期値20なら動作する.初期値によって動作が変わるというところが気に食わないところだ.どうも,この setprecision という関数は本当に始末に悪い関数だ.今度は

BoundsError: attempt to access 920-element Vector{UInt8} at index [923]

どうなっているのか?訳が分からない.⇒わかった.おそらくこれは浮動小数点数の指数部のレンジローバーだ.ここでレンジオーバーするということはこの数値はすでに超巨大数になっていることを意味する.つまり,BigFloatでも扱えないほどの数ということになる.precisionは仮数部のビット数なので,これがどれほど大きくても無関係だ.⇒ざっと見た限りではこのレンジを変更する手段はないように思われる.ここでは,エラーで脱出するしかないだろう.

https://discourse.julialang.org/t/cumbersome-scoping-rules-for-try-catch-finally/4582

ようやく片付いた.以下のように手当して切り抜けた.

  1. 任意精度浮動小数点数では仮数部のビット数は指定できるが,指数部を設定できないので,巨大整数では例外が発生する.これを処理するために try・catch ブロックを設けたが,catch ブロックでは外部変数を参照できないなど,いろいろと制約がある.
  2. このため,try・catch ブロック を最上層に仕掛けて,catch ブロックの中ではフラグを立てるだけで抜けるようにした.後処理を catch ブロックの中で実行しようとすると,動作がおかしくなる.
  3. 後処理は最上層に戻ってから実行するようにした.後処理では,例外が発生してご破算になった計算を安全に計算できる範囲で再計算する.このために,maxloop を書き直して,CalcTrajectory を再実行している.

一応これで片付いたが,まだ軌跡は描画できていない.アニメには収録されているのだが… 多分これはどこかで調整できるだろう.⇒とりあえず出るようになったので,よしとしておこう.大部扱い易くなった.

image

あとは,最低限,不動点を描画するだけだが,これを自動計算することはできないだろうか?ともかく,一度バックアップしておこう.⇒Julia にはいくつかsolverパッケージがある.Roots.jl,NLsolve.jl… NLsolve には x=F(x)を解く機能まで備わっているようだ.NLというのはnon-linearという意味だ.Roots では探索範囲を指定しなくてはならないところがやや難だ.しかし,蜜天法よりはましかもしれない.蜜天法では見つかったとしても一つだけだ.NLsolveは二変数以上の方程式が解ける.今のところはそこまで必要ないので,Rootsでゆくことにする.⇒フォルダ名を蜜蜂天国に変えた.

どうも,find_zeroの引数xはFloat64までしか使えないようだ.

どうも,かなり難しい話になってきた

蜜蜂天国の空域の地割りをやろうとしているのだが,手強い.y=x^2-3/2の代わりにy=x^2を適用すると,初期値s<1の場合には単純に収束してしまう.つまり,この代数系の動作を決定しているのは曲線の形状だけではないということになる.

◎オフセット:-1.5 初期値:α=-0.5 α点を含む白地を残して塗り潰し

image

◎オフセット:-1.0 初期値:α=-0.5 無限ループ

image

◎オフセット:-1.5 初期値:α=-0.7071 卍字型循環経路

image

ミツバチ天国:ハニーポットを探せ

どうも,何か異変が起きている気配がある.初期値-1.5で10000ステップを実行しているところだが,停止しない.いや,これがノーマルなのではないか?これまでは1000と2000でテストしていたが,10000というのはやっていないと思う(以前に試したことはある).これではちょっと掛かり過ぎるので打ち切ることにしよう.グリーン・ゾーンの塗り潰しを見たいのだが,2000くらいでも十分なのではないか?制御が移ってしまっているのだろうか?SHIFT+F5で停止しない.CTRL+Dでターミナルを止めて停止した.

話が大部変わってきたので,タイトルも「無限プール・ゲーム」から「ミツバチ天国」に変えた.これまでは,スィートスポットはボールをすべて吸引するポケットと考えられてきたが,どうもそうではないらし.つまり,スィートスポットは孤立した到達不能点である可能性が高くなってきた.ミツバチ達はこの到達不能なスィートスポットを探して広い緑地空間を飛翔し続けるというストーリィだ.白丸が開始点で赤丸はスイート・スポットないしビタースポットだ.上の図では開始点がスイートスポットに重なっているため,赤丸は1個しか出ていない.

image

IPAMinchoをJapanese Fonts というところからダウンロードして,インストールした.ZIPファイルを解凍してTTFファイルを右クリックすると「インストール」というメニューが出てくるので実行するだけだ.しかし,エラーは消えない.”IPAMincho”を”IPA明朝”に変えても同じ.

ENV[“GKS_ENCODING”] = “utf-8”
gr(fontfamily=”IPA明朝”)

画面は日本語表示されているので,警告を止めるだけでもよいのだが… Plotly というバックエンドを使うと何もしなくても日本語が出るようだが… Plotly はもっぱらJavascriptで使われているようだ.我々はGRを使っているので,この上で動くものでなくてはならない.いや,Plotly はGRの上で動くのではなく,GRを置き換えるものだ.また,Plotlyではplotなどのコマンドはそのまま使えるようだ.Plotlyjsという名前にはなっているが,JavaScriptを使わなくてはならないということではないのではないか?これはPlotlyを使う一択なのではないだろうか?

とりあえず,JuliaのREPLで試してみることにする.しかし,どうにもネットワークが遅い.Plotlyで画面を出すには,electron と Blink.jl が必要なようだ.どちらもまだ入っていない.パッケージのダウンロード中にエラーが起きている.Kaleido で失敗している.やはり,ギガを買わないと無理なのではないか?この代金はポイントで支払えるので,多分決済できるだろう.⇒俄然早くなった.

PlotlyJSとは別にPlotlyというパッケージもある.ポイントがもったいないので,これもインストールしておこう.Electron と Blink も追加インストールした.しかし,まだ動かない.Blink.AtomShell.Install() を実行するように指示されたが,エラーになってしまう.Install を小文字かして install としたら動作した.しかし,まだまだエラーが取れない.

7z.exe というのがない.GITに繋がっていないためだろうか?存在するのに動作がブロックされているという可能性もある.PlotlyBase,PlotlyKaleidoをPkgで導入したが,インストールされていないというエラーになる.⇒インストールしたIPA明朝のファイル名を確認したら(C:\Wndowd\font),IPAMincho Regular となっていたので,このスペルで設定したら日本語表示できるようになった.Plots が使えるようになったので,Plotly などを持ち出す必要はなくなった.

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

無限ビリヤードだけで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を使えば保存ファイル名を指定できる.