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

2025年1月31日金曜日

「CASIO 電卓 60周年」ですってヨ !

 CASIOの電卓が60周年との事で、サイトが開設されておりました。

ref. CASIO 電卓 60周年記念サイト
https://www.casio.com/jp/basic-calculators/content/60th/

CASIOの計算機は、リレー(継電器)とメカを使う方式の計算機から始まっているらしいのですが、フル電子回路の計算機「電子式卓上型計算機」=電卓の始祖として「001」を世に問うたのが、1965年との事。
そこから60年が経ち、記念サイトの立ち上げと、長く愛用できる、飽きのこない電卓の新製品を発表したようです。

ref. 60年のノウハウを結集した長く愛用できる電卓
https://www.casio.co.jp/release/2025/0116-jt200t/

60周年記念サイト、CASIOの電卓の歴史を総覧するには、とても便利ではあります。CASIO最初の関数電卓「fx-1」、世界初のグラフ電卓「fx-7000G」など、斬新な製品が見られます。

しかし、惜しいなぁ、と思うのは、ポケットコンピューターについて触れられていない所でしょうか。
まあ、ポケットコンピューター、PCは、既に事業を終了してしまったらしく、「終了してしまった事業の事まで掲載するのは、どうなのか ?」という経営判断なのかも知れません。

それでも、ポケコンの末裔に近しいグラフ関数電卓が継続されているのは、やはり奇跡に近い様でもあります。


2025年1月1日水曜日

С Новым Годом 2025 !

あけましておめでとうございます。

今年は巳年。「古き衣を脱ぎ捨て、蛇は新たに生まれ変わるべし」となるのでしょうか。

 

電卓の敗退と逆襲


過日、Androidスマートフォンの比較的新し目の機種をいじる機会があり、電卓を使ってみたのですが、いや、驚いちゃったねェ。標準でも、一部の関数機能の利用が出来ますが、中でも驚いたのが、階乗の計算能。普通の関数電卓でも、69! までしか計算できませんが、Androidスマートフォンの階乗計算、19515! = 6.758099E75235 というキチガイじみた値まで計算しましたよ。マイッタ。

しかし、階乗の計算に限定すれば、upython でもある程度イケるのではないか、と。
 
 ```
def long_f(n) :
  r =  1
  for i in range(n) :
    r = r * (n+1)
  return r

long_f(1000)
```
これで値を返すはずなのですが、fx-CG50 で行うと、メモリが足りないという返事。これはクルシイ。恐らく、整数の全桁を表示するためのメモリが足りない、という所なのではなかろうか。
この面だけみると、「関数電卓の敗北」という具合になりそうですが、Androidスマートフォンの様に概算で良ければ、それなりの値を得る方法はあります。こんなコードはどうでしょうか。
```
import math

def large_f(n) :
  r =  0
  for i in range(n) :
    r = r + math.log10(i+1)
  print(pow(10, r-int(r)), 'e', int(r))
```
以下、パソコで実行した場合の出力を示しておきます。
```
>>> large_f(330)
2.8240846225829777 e 689
>>> large_f(1000)
4.023872600748676 e 2567
>>> large_f(10000)
2.84625968062148 e 35659
>>> large_f(20000)
1.8192063204524245 e 77337
```

やっている事と云うと、階乗の計算の対数を取ると解ります。log(n!) = Σ log(k) です。総和計算をしてから、10のべき乗にすれば、所望の値を得られるという寸法。

fx-CG50 では、複数の手段が利用できます。以下では、20000! の計算をやってみた結果を示しておきます。

  1. 数式計算

    こんな具合です。
    ```
    Σ(log I, I, 1, 20000) →R 
    77337.25988
    ```
    ほぼ、30秒くらい掛かりました。20000までの対数の和を求めるとなると、これくらいは掛かりそうです。

  2. BASIC
    色々と技巧を凝らす余地がありそうですから、ここではBASICのコードを提示する事は止めておきますが、
    当方が試した所、およそ50秒程度の時間が掛かりました。プログラムループですから、時間が掛かるのはやむを得ない所です。その分、プログラムの内容を変更できるという自由度がある訳です。

  3. upython
    上記のコードがそのまま動きます。
    fx-CG50 upython では、圧倒的な速さで、なんと 6秒くらいでした。

まあ、16000! なんて値、日常で使う機会はなさそうなので、今回も「ネタ」という事で御了承戴き度。

  こうしてみると、upython の可能性は目を見張るものがありますが、これだけに突っ込んでしまうと、関数電卓の部分が疎かになったりしないのか、という不安もあります。
それよりは、様々な計算の手段を充実して、社会に貢献して欲しいと、切に願うものではあります。

そんな具合ですが、今年もポツポツとやって行きたく、よろしくお願い申し上げ候。


2024年12月28日土曜日

芝村先生のCASIO関数電卓インタビューが出ていた

 X のポストに、以下の記事へのリンクを示すものがあったので、見てみましたヨ。とっても嬉しい内容。

ref. 【現場の電卓】僕がExcelでなく関数電卓を手にする理由~「刀剣乱舞」のゲームデザイナー・芝村裕吏さんにききました
https://www.casio.co.jp/topics/article/2024/K-071/

驚いちゃったなァ。芝村先生、CASIOグラフ電卓使いだったとは。
こうした記事が年末に出て、やはり、2025年のCASIO は、関数電卓方面で何かやってくれそうな、そんな予感がいたします。

一方で、fx-FD10 が「生産完了品」になっていたのは、チョット残念。


2024年11月26日火曜日

fx-CG50 の X post が増えていたので

 fx-CG50 の X post がやたらと増えていたのですが、殆どが、以下の記事を引用したものでした。

ref. 第1回 Python電卓を使ってみよう Pythonが動くリアル電卓「fx-CG50」
https://news.mynavi.jp/techplus/article/calcpython-1/

大手web媒体の連載で、読み応えもありそうですが ... 残念な事に、メール登録しないと読めない。「一見さん、お断り」なのネ。どうせ広告なんだから、吝い事を言いなさんな。

そんな"広告"の中でも、以下のpostは、やす親分の引用でしたネ。シロン ( @_Chiron__ ) 様、多謝であります !

ref. https://x.com/_Chiron__/status/1860534381561151816

で、CG50の後継機種と目されている、fx-CG100の話は、日本では全く聞かれないのでありますが、最近、妙な事を考えておりまして。
fx-CG100では、Add-Ons や CASIO BASIC などが、対応しなくなりそうという事らしい。ストレージも削減されているとかで、どちらかと言うとfx-CG100より「後退」していそうな印象。

他方で、(Sentaro様曰く、CASIOが追っかけている ?) TI の電卓では、upython 対応が徐々に進められていて、最近では、micro:bit を接続して使用する、などの機能が提供されていると。
この micro:bit 接続機能ですが、TIの電卓では以前から、センサーキットやRoverキットなどの接続機能があって、そうしたハードウェア拡張の一環、という位置付けらしい。

実は、fx-CG50でも、センサーキットと接続して、センサー入力したデータを分析するアプリケーションが用意されておりました。センサーキット自体が入手困難な上、手頃ではなさそうなのですが、この辺りは、TIの電卓を追いかけていた様で、まさに、Sentaro様の言う通りであります。
ちなみに、データ分析アプリでは、FFTなどの機能があったりします。結構実用的な感じですが、データを取得し、分析する機能がアプリ側で閉じられているので、外部からデータを放り込んで分析をする、という芸当が出来ない辺り、ショボーンな訳ですネ。
尤も、FFTを使う、という事であれば、XCASに機能があるので、Add-OnsでXCASを使えば、勉強になるんじゃろか ?

で、TI電卓 の micro:bit 接続機能なんかでも、micro:bit に接続したセンサーなどのデータを読み込むみたいな作業が出来るとかで、そうして取得したデータをグラフ表示する、という作例が、以下で紹介されておりました。

ref. TI-Python と micro:bit の連携について
https://qiita.com/inachi/items/8306c73a9ed76e72b28e

原理的には、fx-CG50でもできそうな気がするのですが、目下の所、fx-CG50 の upython 機能は、イマイチ足りない。
fx-CG100辺りでは、upythonの機能を拡充するらしい、という観測もあって、例えばUSB port 経由で通信機能などを充実する事で、micro:bit 接続機能に類似した事が可能になってくれると、TI の追っかけ風で、チョット面白いかなぁ、などと不埒な事を妄想してしまったのであります、ハイ。

2025年、「CASIOがきっと、何かやる」事を期待しつつ。

2024年11月16日土曜日

「fx-CG50 でもやってみた」チャレンジ ?

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

https://x.com/RR_Inyo/status/1853820210874376698

実機が手元にないのでオンラインシミュレータですが,0になりました!
NumWorksは根号などをある程度そのまま扱うようです。

(sqrt(2)-1)^10 - (3363-2378*sqrt(2)) = 0
Numworks の話題でしたが、それでは、我らが fx-CG50 ではどうなのかと試した所、残念ながら fx-CG50 では、累乗の計算について、整式での計算は行いませんでした。

「くやしいのう、くやしいのう」

しかし、諦めが悪いので、どうにかして、同様の計算結果が得られないモンか、と、考えてみましたヨ。

この整式の計算自体は、2項定理の計算を行えば出来そうです。
(sqrt(2)-1)^n の計算でありますから、sqrt(2) の累乗部分を、うまく括りだすことが出来れば、当初の目的は達する筈であります。

そこで、2項定理の計算で用いる「組み合わせ」の機能をもつ BASIC で、かんたんなプログラムを作成しました。

```
For 0->N To 20

0->A
0->B

For 0->K To N
If MOD(N-K,2)=1
Then
N nCr K*2^((N-K-1)/2)*(-1)^K+A->A
Else
N nCr K*2^((N-K)/2)*(-1)^K+B->B
IfEnd

Next

A->List 11[N+1]
B->List 12[N+1]

Next
```
これを実行すると、20次までの累乗について、List11, List 12 に、係数の数列が保存されます。
この数列は、(sqrt(n)-1)^n = A*sqrt(2) + B と展開した場合、
List 11 ; A
List 12 ; B
が保存されます。

例えば、(sqrt(n)-1)^10 = -2378*sqrt(2) + 3363 でしたが、
List 11[11] = -2378
List 12[11] = 3363
となる寸法。(残念ながら、リストの添字は1始まりなので、10乗の場合には、添字11に保存される具合)

ここまで苦労したものの、fx-CG50 には XCAS が作られております。これを使えば「答えイッパーツ !」でしたね。

(sqrt(2)-1)^10 と入力し、simplify() を適用する事で、所望の結果が得られましたヨ。さすがは XCAS。

で、延々作業したものの、n->inf の極限では、(sqrt(2)-1) < 1 なので (sqrt(2)-1)^inf -> 0 に収束するという、泣けてくるオチまで用意して、このネタを終わりにしたいと思います。