2025年3月19日水曜日

アメリカで fx-CG100 が Coming soon になっているとの話

 以下の X ポストによりますと、アメリカで fx-CG100 が Coming soon になっているとの事です。

ref. https://x.com/sekara_kurabu/status/1899817712702071008

ここからたどると、アメリカ・CASIO Education のページには、グラフ電卓の一覧が出ております。

ref. Graphing Calculators - casioeducation.com
https://www.casioeducation.com/graphing-calculators

上記ページには、 

  • fx-CG500 PRIZM CAS
  • fx-CG100 Classwiz CG
  • fx-CG50 PRIZM
  • fx-9750GIII Grapher

が一覧され、星取表ならぬ比較表が出ており、参考になります。
 

  • fx-CG100 ClassWiz
    ストレージ 4.5 MB, 170時間稼働
  •  fx-CG50 PRIZM
    ストレージ 16 MB, 140時間稼働

といった事も出ております。

一応、今のブランディングという事では

  • PRIZM 
  • Classwiz
  • Grapher

と考えていいのでしょうか。

そう考えると、fx-CG50 (PRIZM) と fx-CG100 (Classwiz CG) とで、spec 上の差異など「比較の対象」に当たらない、とも言えそうです。
昔は、型番が上がると、そのラインの後継製品という具合でしたから、型番をみる事で、製品の世代を推し量る目安になったのですが、
今後は「製品の持続的開発」という具合で、頻繁に新製品を繰り出すよりも、製品ライン・ブランディングを確立した上で、ブランディングのIncremental な発展をしていくのか、という見方が出来るのかも知れません。

一方で、CASIO education アメリカでは、プログラマブルな製品ラインナップはグラフ関数電卓に限られる様子。

ref. Scientific Calculators - casioeducation.com
https://www.casioeducation.com/scientific-calculators

フツーの関数電卓は非プログラマブルですね。

怠け者の当方としては「プログラム機能が欲しいなァ」などとヘタレな事を言いますが、
計算式が頭の中に入っている、あるいは、目的とする計算式をしっかりと把握している場合には、関数電卓にプログラム機能は不要ではありましょう。その意味では、関数電卓は「プロツール」ではあります。

この動向を見ていると、日本で奇跡的に販売が継続されている fx-5800P、現在の所、唯一の非グラフ電卓プログラマブルな製品ですが、今後は新製品としての需要が見込めず、という判断もあるのかも知れず。
昔の様に「大量開発、大量販売」と行かない今日の状況を鑑みるに、「製品の持続的開発」となると、製品ラインを整理し、細く、長く改良を進めつつ販売を行う、という方針なのでしょう。

電子機器製品が、以前の様に売れなくなった背景には、IT社会/スマートフォンの普及という側面が大きく影響しているのでしょう。
多くの人口が取り込まれるIT社会のprimary I/Fがスマートフォンとなり、他のディジタル機器、PCやDigital gadgetは、スマートフォンの次、より専門的な分野で利用される所となり、以前の様な繁栄は難しいのではないか、と。

サミシイなァ。



2025年3月18日火曜日

「艶笑ネタ」

 随分前に見かけた、X の post。

https://x.com/mrpanda88888888/status/1874452024420671516

昨今は、理工系の女性割合が増えているそうで、こうしたネタは「セクハラ案件」となりそうではありますが、上記 post に「Ok , 数学之美」としている事を苦し紛れの理由として、紹介。
「非原创」は「オリジナルに非ず」という意味らしく、数式を吟味すれば、言うことも「ごもっとも」であります。

で、fx-CG50 の 3D graph に慎重に入力してやれば、件の画像を得る所ではありますが、x-y面が垂直にならないと、上記と同様にはならないので注意が要ります。

ご参考までに、[V-WIN] で設定する、描図範囲の指定を示しておきます。

Xmin:-10
Xmax:10
grid:50
Ymin:-10
Ymax:10
grid:50
Zmin:-2
Zmax:2

※ くれぐれも、をんなの子の前でやらない様に !

2025年3月17日月曜日

森林火災のシミュレーション

 岩手県 大船渡市の林野火災は、大分延焼を抑えつつあるそうで、鎮火宣言まではあと一息との事。
避難されておられる方々には、お見舞い申し上げます次第です。 

少々不謹慎ながらも、Python Extra for fx-CG50 で、森林火災のシミュレーションをやってみました。
大船渡市の林野火災が、ここまで大規模になる前から着手していたのですが、鎮火宣言が近い様子なので、公開したく思います。

森林火災のシミュレーションは、森林を縦横のセルに分割し、各セルは、以下の状態を表現します。

  • flat ; 平地
  • tree ; 樹木がある
  • fire ; 火災延焼中
  • burn ; 鎮火 (火災後、燃え尽き)

セル平面には、適当な割合を指定して、樹木を置くか、平地にするかを設定します。

ここでは、0.7の割合で、樹木を置いております。

rate=0.7
その後、何処か適当なセルを指定して、そこに火を置きます。
そうしたら、シミュレーション開始です。

シミュレーションは、つぎの手続きで進行します。

すべてのセルについて調査

  1. 上下左右のいずれかに火災のセルがある
    → 調査中のセルに樹木がある場合、延焼として、火災セルに置き換える
  2. 調査中セルが火災延焼中
    → 火災後に、樹木が燃え尽きたとして、鎮火セルに置き換える

重要なのは、Life Gameと同様、すべてのセルの状態更新は同時に行う、という点です。
そのため、セル平面は、ゲーム進行の前後で、2つ用意しておきます。

シミュレーションの処理としては、上記の処理を延々と繰り返すのですが、この過程で、火災セルが無くなったら、終了とできます。

この手続きを書き出したのが、以下のスクリプトです。

#

from gint import *
import random

size=8
wi=int(396/size)
he=int(224/size)
col=[C_RGB(31,31,31),C_RGB(0,31,0),C_RGB(31,0,0),C_RGB(0,0,0)]

flat = 0
tree = 1
fire = 2
burn = 3

grid_0=[[flat for j in range(he)] for i in range(wi)]
grid_1=[[flat for j in range(he)] for i in range(wi)]

rate=0.7

#  is fire near here ?
def firep(x,y):
  c=0
  for k in range(4):
    i=x+[0,1,0,-1][k]
    j=y+[-1,0,1,0][k]
    if (i!=x or j!=y)and i>=0 and j>=0 and i<wi and j<he:
if grid_0[i][j]==fire:
c+=1
return c

# evolve
def evl():
for j in range(he):
for i in range(wi):
c=firep(i,j)
if grid_0[i][j]==fire:
grid_1[i][j]=burn
elif grid_0[i][j]==tree and c>0:
grid_1[i][j]=fire
else:
grid_1[i][j]=grid_0[i][j]
# copy grid def cpy(): for j in range(he): for i in range(wi): grid_0[i][j]=grid_1[i][j] # show field def show(): fire_sum = 0 for j in range(he): for i in range(wi): fire_sum += 1 if grid_0[i][j] == fire else 0 drect(i*size,j*size,(i+1)*size-1,(j+1)*size-1,col[grid_0[i][j]]) dupdate() return True if fire_sum > 0 else False # field gen for j in range(he): for i in range(wi): if rate>random.random(): grid_0[i][j]=tree # ignition i=random.randrange(wi) j=random.randrange(he) grid_0[i][j]=fire # show field flg = True while flg: flg = show() evl() cpy() getkey()

 
セル平面をリストによって実現しているので、残念ながら「劇的に早い」というものでもありません。
画像の状態を読み出せるので、うまく利用すれば、速度の改善につながる変更も出来るかも知れませんが、まだ、着手しておりません。

樹木を配置する割合を 0.7 にしていますが、これが 0.8, 0.9 と上がると、ほとんどのセルが火災に見舞われ、焦土と化します。
そこで、0.3, 0.4 と小さい値にすると、火災の延焼は食い止められるのですが、植樹して樹木を育てる、その収量も減ってしまい、寂しい事になってしまいます。

この辺り、色々と替えて、実行してみてください。
 

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

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