2025年2月17日月曜日

Python extra ファースト・インプレッション

 先日、K 様よりの情報で、fx-CG50 向けの Python Extra というものを知り、この程、ようやく試用してみまして、その第一印象を記しておきます。

ref. Releases - Lephenixnoir/PythonExtra - Forge de Planète Casio
https://git.planet-casio.com/Lephenixnoir/PythonExtra/releases

まず、導入の方法としましては、fx-CG50 の Flash メモリーの root 階層に PythonExtra.g3a と modules ディレクトリを放り込んでやります。examples ディレクトリの中身はサンプルコードが収録されているので、余裕があったら入れておくと良さそうです。
PythonExtra.g1a の方は、おそらく Graph 35+E II, fx-9750GIII, fx-9860GIII とかのものらしく、まだ、入れていないので、よう判りません。

導入後、menu キーを押すと、PythonExtra のアイコンが表示されます。これを選択して EXE キーを押せば、Python Extra が動きます。

F1, F2 キーに、[FILES], [SHELL] が割り当てられています。

  • [FILES] を押すと、ファイル一覧が表示され、
  • [SHELL] を押すと、Python shell が開きます

Python Extra 自体は ver 0.3 との事で、まだ改良する点があるらしく、コードエディタは用意されていない様です。

[FILES] を押してファイル一覧から、python コードのファイルを選択し、EXE キーを押すと、そのコードを評価する様ですが、exmaples のスクリプトは、階層が root にないからか、import する module が見つからない、というエラーを出す場合があります。
これは、import する modules フォルダが内部的に相対 path のため、エラーになっているような感触です。
そこで、exmaples ディレクトリのサンプルコードを、最初から root フォルダに配置しておけば良さそうです。

コードエディタがないのですが、では、どうしましょう ?

  1. fx-CG50 の 内蔵 Python のエディタを使う
  2. PCでfx-CG50 のフォルダを開いて、PCで編集する

という手段が考えられます。

ファイル一覧で、python スクリプトを選択し、EXE キーを押すと、その python スクリプトが評価され、shell 画面に移行します。
右下に小さなアイコン状のインジケーターがあります。これは、キーボードの Alpha Lock 状態を示している様です。

いくつか、サンプルコードを実行してみましたが、結構早い様な印象でした。
また、fx-CG50 の System API を独自に呼び出す gint module があり、色々と興味深い動きを書き出せる感触です。

簡単なコードを用意できると良いのですが、まだ不慣れな所があり、そこまでには至らずとも、以前に作成した biomorph のコード biom.py を Python Extra で動かしてみました。 

https://akatuki-724.blogspot.com/2024/09/fx-cg50-biomorph.html

 当初は、TypeError: 'module' object isn't callable というエラーで実行できなかったのですが、色々といじっている内に、ようやく動くように変更できました。
File から実行する場合、そのスクリプトは「実行される」形式でないとならないらしいのです。
biom.py には、biom() という関数を呼ぶ記述が入っておらず、単純に関数定義を記述しているだけです。
Python Extra では、こうしたファイルを評価し、shell で 関数名を入力すると、上記のエラーが発生する様です。
そこで、 biom.py の末尾に、biom() を実行する、という記述を付け足す事で解決出来ます。
更に、Python Extra では、実行終了時に画面の保持をする機能がないので、スクリプトの方で対応しないとなりません。
 最終的に、biom.py の末尾に、つぎの記述を付け足します。

biom()
import gint
gint.getkey()

これで一応は、biom.py を Python Extra で実行する事が出来るのですが、実際に実行してみると、CASIO Python と比較して、つぎの差異がありました。

  • Python Extra の方が、実行速度が遅かった
  • Python Extra では、フルスクリーンで画像表示できる (画面の枠などが出ない)
  • Python Extra には、自前の cmath module があるみたい

 システム向きのAPI が用意されているので、プログラムの幅は広がりそうです。

また、現在は、beta 段階 (ver. 0.3) であり、不具合が残っている様です。
Python Extra で、キーボードハンドラを独自に設定しているからではないか、と思うのですが、fx-CG50 がハイバネーション (電源を切って、永らく置いておくと、RAMの内容をFlashメモリに自動で退避するのですネ) から復帰した際、復帰するポインタが参照できないみたいで、Menu キーで別アプリに切り替える事ができなくなるという事象がありました。
こうなると、リセット・ボタンを押すしかありません。

以上、ファースト・インプレッションという名前の「つまみ食い」レポートでした !
かなり面白そうな環境です。Flash メモリに余裕があったら、お試し戴きたく。

2025年2月10日月曜日

fx-CG50 で描くグラフのポストを見かけて、少し考えていた

 過日、つぎの post を見かけました。

ref. https://x.com/BlackcatKrnk/status/1887028082487517373

fx-CG50 で x^x のグラフを描くと、x<0 の領域でも、飛び飛びの点ガ描かれる、というお話。
手元の fx-CG50 で試したら、確かにこうした結果が得られます。

しかし、若干注意が。グラフを描く前に、Run-Matrix ( 計算機メニューですネ ) のset-up で、comp. mode ( 複素数計算モード ) を Real ( 実数計算 ) にしておく、この手順が必要なのです。
逆に、real にしてグラフの x<0 領域の点々を確認したら、comp. mode を a+bi, a∠θ などに変更して、グラフを描き直してみて下さい、x<0 の点々が消えてしまうのですネ。

今回は、何でこんな具合になるのか、チョット調べてみましたのヨ。

点々の内、代表として x=-2.4 の点を計算してみる事とします。

y = f(x=-2.4) = (-2.4)^(-2.4) となります。

指数が負数となっているので、普通はEuler公式などで値を計算します。たいていのグラフ電卓では複素数計算の動作であり、y の値が複素数になって、グラフに点すら描かれないのですが、
fx-CG50 で real (実数計算) を指定すると、この値が計算できてしまうらしいのですネ !

2.4 という数値を有理数変換、2.4 = 12/5 として、上記の計算を書き直しますと、

y = f(x=-2.4) = (-2.4)^(-2.4) = (-12/5)^(-12/5) = (-5/12)^(12/5) = ( (-5/12)^(1/5) )^12
 
とできます。この計算で、一番の難所である、

(-5/12)^(1/5)

を計算するのですが、
ある数 a ( a>0 ) について、(-a)^5 = -a^5 と計算できますから、この関係から、

(-5/12)^(1/5) = -(5/12)^(1/5) としても良いのでしょう。

すると、(-5/12)^(1/5) = -(5/12)^(1/5) = -0.8393783275 となります。( 但し、real モード設定の場合 )
あとは、これを12乗すれば、x=-2.4の点が得られるという寸法です。

同じ計算を、複素数・極座標計算 a∠θ にて行うと、
(-5/12)^(1/5) = -(5/12)^(1/5) = -0.8393783275∠1/5 π という値が返ります。
これを12乗すると、x=-2.4 の点が得られるのですが、複素数拡張で計算しているので、やはり複素数になります。これではグラフに点を描くのは無理であります。

こうして、real 実数モード設定のグラフでは、x<0 領域で、飛び飛びの点々が描かれるとなると解ります。

fx-CG50 、実数計算モードによって、こうしたグラフが描けるというのは、結構興味深いものです。