2025年10月30日木曜日

生産終了の fx-CG50 に アプデが登場しました

 既に fx-CG100 が発売、fx-CG50 は生産終了となっておりますが、珍しい事に、fx-CG50 のアプデが登場しておりました。

ref. fx-CG50 アプデ
https://support.casio.jp/download.php?cid=004&pid=2126

- バージョン履歴
(2025年10月29日)  fx-CG50 OSアップデーター(⇒Version 3.81)及び関連アプリソフトの公開 (Windows/Mac OS)

- バージョンアップ内容
  (Ver3.80.XX1X → Ver3.81)
    軽微な修正

との事で、内部的な不具合の修正、という具合のようです。

これで casioplot.getkey() とかが追加になれば興味深いのですが、マニュアルの更新はなさそうですから、機能面は変更なし、として差し支えなさそう。
他方で、OS に lock を掛ける、というイヤな更新もあるかも知れません。

確か、XCAS は、OS 3.7 では問題なしだったものの、3.8 になって、導入が困難になったそうで、3.7 へ roll back する必要があると記されておりました。
今般の 3.81 は、OS の downgrade を阻止する、そんなイヤなメカが入っていたりしないか、などと思う所。
(当方、未だに 3.40 だったりします)
 
で、XCAS, PythonExtra を使っていない皆さん、おそらく最後のアプデが提供されましたので、是非ともご利用戴きたく ... !

突然のアプデ襲来に驚いてしまい、出だしはこんな事で始めましたが、先日から、チョット手遊びで、こんなコードを作っておりました。

四角形の中に少し傾けた線を引き、それを繰り返していくと、規則性のある図柄が現れる、というものです。

# recsq.py 2025-10-27
from math import *
#from casioplot import *
from u import *

a=(86,191)
b=(86,0)
c=(277,0)
d=(277,191)

def sqlin(a,b,c,d):  
  line(int(a[0]),int(a[1]),int(b[0]),int(b[1]))
  line(int(b[0]),int(b[1]),int(c[0]),int(c[1]))
  line(int(c[0]),int(c[1]),int(d[0]),int(d[1]))
  line(int(d[0]),int(d[1]),int(a[0]),int(a[1]))

def tr(r,p,q):
  return (p[0]*(1-r)+q[0]*r,p[1]*(1-r)+q[1]*r)

def recsq(n,r,a,b,c,d):
  for i in range(n):
    sqlin(a,b,c,d)
    b=tr(r,b,c)
    c=tr(r,c,d)
    d=tr(r,d,a)
    a=tr(r,a,b)

recsq(60,0.05,a,b,c,d)
但し、やす親分作成の線引き module 「u.py」を使用しております。折角作っていただいたので、有り難く使わせて戴いております。
親分、多謝であります ! 

ref. Casio Python - グラフィックス出力関数の追加 - e-Gadget - プログラム関数電卓
https://egadget.blog.fc2.com/blog-entry-739.html

このコード、元々は再起処理っぽい感じで書いておりました。
def recsq(n,r,a,b,c,d):
  if n<=0:
    return
  sqlin(a,b,c,d)
  b=tr(r,b,c)
  c=tr(r,c,d)
  d=tr(r,d,a)
  a=tr(r,a,b)
  recsq(n-1,r,a,b,c,d)
しかし、繰り返しの回数が 50 になると stack overflow になってしまいました。なんだよ、オイ !
upython では、バルクデータを扱う必要もあって、heap oriented らしく、Stack は少し控えめに配分するのだと思う所です。
で、作業中のコード、入力している最中、「無理に recursive にする必要はなさそうだナ」と、単純な繰り返しにした所、stack 消費がないため 50 を越えて 100 でも問題なく動くと判明しました。

先日来、ダイソーで買ってきた NiMH 電池を使っていたのですが、今日になって、Low Batt replace が出る様になったものの、一度電源をサスペンドすると、一時的に復帰する事をいい事に、使い続けておりました。
流石にこのままではキツそうと、電池交換のため、編集中のコードを保存しておこうとすると、Low Batt 警告が出るのであります。Flash memory は書き込みに電力が要るのです。そこで、一旦サスペンドで電圧回復を図り、保存しなおすという際どい操作で、切り抜けたという具合。(良い子はマネしちゃダメよ)

昔のポケコンでは、RAM に BASIC プログラムを置いておりました。電池が切れると、内容をすっかり忘れてしまうのですが、それを思うと、隔世の感、ではあります。

2025年10月26日日曜日

fx-CG50 : Julia 集合のグラフィクス

 理屈はさておいて、Julia 集合のグラフィクスというのが、Mandelbrot set graphics のコードをいじるだけで作成できるとの話で、作業してみました。


from math import *
from casioplot import *

clear_screen()

def julia(deg):
 tbl=[ (0,0,0),(255,0,0),(0,255,0),(0,0,255),(255,255,0),(255,0,255),(0,255,255),(255,255,255) ]
 n=len(tbl)*deg
 xmin = -3.84/2
 xmax = 3.84/2
 ymin = -1.92/2
 ymax = 1.92/2
 dx = (xmax-xmin)/384
 dy = (ymax-ymin)/192
 for yp in range(192):
  for xp in range(384):
   z = xmin+(xp*dx) + (ymax-(yp*dy))*1j
   c = -0.8 + 0.156j
   cnt = 0
   while (abs(z) <= 4.0 ) and ( cnt < n ):
    z = z*z+c
    cnt = cnt+1
   rgb = int(cnt*255/n)
   #col = (int(rgb),int(rgb*0.75),int(rgb*0.25))
   col = tbl[cnt%8]
   set_pixel(xp,yp,col)
  show_screen()

julia(6)
末尾の julia(6) で「計算深度」を指定しております。
この計算深度は、反復回数を指定するもので、カラーテーブルの大きさの倍数となっていて、カラーテーブルの大きさが 8 なので、最大で 6*8 = 48 回の計算繰り返しを行います。

どうして、こんな事をしているのか、と申しますと、計算回数の上限を上げる事で、色々と画像が変化してくるのですネ。
fx-CG50 のスクショを取る方法がわからないので、パソコで擬似的に行ったのが、つぎの画面であります。

中心部から黒の領域がウネウネと出ておりますが、回数を増やすと、黒の部分にも細かい色が現れるのです。
しかし、fx-CG50 ではチョット荷が重いので、上限を 6*8 にしているという次第です。

さて、このコードをやっていて、隘路に入ってしまったので、メモを書いておきます。
当初、ファイル名を jul-1.py としていたのですが、実行すると、「Syntax error」が出るのですネ。色々とコードを手直ししてみましたが、どうにも見通しがつかない。
結局、実行時に 「from jul-1.py import * 」と出ていて、ファイル名にあるハイホンを「コレって、引き算じゃね ? エラーじゃんかよ !」となっていたらしい。
そういや、CG50 本体で python コードを作成するとき、ファイル名にハイホンは入力できんのですね。道理で。

... なんとも情けないオチでありました。スマソ。

 

 

2025年10月11日土曜日

電卓の話題で、こんな話を見た

 確か、以前にもあったと思うけれども、6÷2(1+2) の答えが色々と悩ましいとの事。

ref. 6÷2(1+2) - Wikipedeia
https://ja.wikipedia.org/wiki/6%C3%B72(1%2B2)

電卓で計算しても処理方式が様々で、答えが 9 であったり 1 であったりするのだそうです。

まずは、CASIO fx-CG50 でやってみましたヨ。
6÷2(1+2) を 6÷(2(1+2)) と自動で書き換え、1 を返しますネ。教育用途という所で、配慮されているようであります。

続いて、fx-CG50 の upython ですが、プログラム言語なので、こうなりました。

>>>6/2(1+2)
TypeError : 'int' object is not callable
エラーです。なるほど。2は関数として呼び出せない、という具合です。

HP Prime の simulator でもやってみました。


"6/" まで入力した所、自動で分数表記になり、以降の 2(1+2) を入力すると 2(1+2) の分子の扱いとなって、結果は 1 になりました。これはこれでウマイ回避法です。

HP電卓で広く使われていた RPN でやるならば、こんな具合になりましょうか ?

6 [ENTER] 2 [ENTER] 1 [ENTER] 2 [+] [*] [/]  → 1 を返します
また、6÷2*(1+2) として計算するには、

6 [ENTER] 2 [/] 1 [ENTER] 2 [+] [*]  → 9 を返します

括弧で括った項と数値の掛け算で、掛け算記号が省略されてしまう事から、演算子の優先順位に混乱が生じるため、こんな具合になるのでしょう。

Wikipedia の記述によると「この式自体の記述がオカシイ」とする方式もあるそうで、式記述について、曖昧にならない様な指導が期待される所でもありますが、学校教育の現場では、今暫く、この問題に悩まされることになりそうです。

【おまけ】
fx-CG50 XCAS で試したら、

6/2(1+2)
Warning : using implicit multiplication for (2)(1+2)
                  1
でした。暗黙の掛け算処理を適用、という具合です。

2025年9月14日日曜日

HP50G がイカれてしまった ...

 永らく使っていた HP50Gのキーボード。遂に入力できないキーが出てしまい、泣く泣く使用を断念する事にしました。エーン ...
接点復活剤をキーの隙間から吹き付けると回復するらしい、という話をみたので試してみたのですが、好転せずショボーンなのであります。

その為もあって、目下、手遊びのお供としては、fx-CG50 を使っているばかりなので、そろそろ HP電卓についての話題も止めざるを得ないのであります。ウーン。

そうした折、以下の post を見ました。

bockring 様 ( @bockringElec ) X post

圧倒的にHP Prime
fx-CG50持ってるし

CASIOくんのほうが3Dグラフは多機能だけど、全体的にPrimeが上かな
まぁレビュー記事でも読んでくれぃ

https://qiita.com/bockring/items/53b4b887d8885be4da50
https://x.com/bockringElec/status/1966761390204768714

bockring 様は、以前にお知らせを戴いた方だと思います。HP Prime fimware の翻訳、更新などに貢献されて居られる様で、誠に頭の下がる思いであります。

Sentaro 様も、HP Prime G2 は電卓の中では"爆速"の部類に入る様子のお知らせを戴きまして、正直、いじってみたい気もあるのです。
しかし、電卓とPCをリンクする際、Windows 版 Linker Apps が要るのが、正直クルシイ。なんと言っても、未だに Windows 持っておらんのですヨ、ハイ。

そりゃ、PCといえば  Windows と言う位ですから、一般常識としては抑えておくのが当然ではあります。
所が、今まで Windows を使わず過ごしてきた身としては、今から電卓の為に Windows PC を用意するというのは、懐にも堪えるものがあるのでありまする。
今般、近所の家電量販店に行ってみましたら、今時の ノートPC, 15万円が最低線の様な印象を受けました。代わりに、RAM 16GB とか。ゲゲゲのゲーッ ! と思いましたが、最近では生成AIを使うとかで、コレくらいの RAM は当たり前、という風潮。まぁ、ついていけまへんなぁ、コレは。
生成AIという新しい「活用法」が提示され、同時に Win 10のサポート終了とあって、Windows (11) PC もより売上を伸ばす事になるのでしょう。しかしながら、価格が低廉になるには、今暫くの時間を要する様でもあります。

HP Primeは、上記の bockring 様など、様々な方が翻訳やBug Fix に貢献されて居られる様で、今後の発展も気になるのですが、如何せん、Windows PC を持っていないと、ついて行けないという哀しみがあるのですネ。

Windows PC を持っていないと、fx-CG100 も「ゴニョゴニョ」出来ない、という意味では通じる所がありますから、目下の所、「生産完了品」fx-CG50 でポツポツと遊んでいる日々であり。

そんな具合ですから、HP 電卓のネタは、どうにも触れる機会が減ってしまいました、申し訳ない次第。

HP 電卓の様々な情報がアップされる MoHPC も頻繁にCrackers Attack を受けているらしく、時折、Members only になったりします。そんな具合でもあり、HP電卓の情報を漁ろうにも制約が ... 

マイッタなぁ。


2025年9月7日日曜日

fx-CG50 と fx-CG100 では、何かが違うのかな ? (2)

金欠で fx-CG50 をポツポツと使って物欲という渇愛を癒やす日々、fx-CG100 を購入の皆様、様々御活用されて居られます様で、ご健勝、お慶び申し上げます。(手抜きで、前回のネタと同じ口上)

 Tossy (@Tossy99077342) 様 post より

CASIOのfx-CG100のPython機能のcasioplotモジュールでランダムな色で画面を埋め尽くすサンプル。
何故か描画が途中で遅くなったり速くなったりする。
https://x.com/Tossy99077342/status/1962097774184603800

との事でしたが、その後、コードを改変して試してみた次第。

from casioplot import *
from random import *

def draw_box(i, j, c) :
c = (randint(0,255), randint(0,255), randint(0,255))
  for y in range(16) :
    for x in range(16) :
      set_pixel(i*16+x, j*16+y, c)

while True : 
  i = randint(0,24) :
  j = randint(0,12) :
  c = (randint(0,255), randint(0,255), randint(0,255))
  draw_box(i, j, c)
  show_screen()


実行してみると、カラフルな画素で画面を敷き詰めるのは同じなのですが、前回と異なり、

  • "夢幻"ループ (CASIO ポケコンのnewsletterの題名 ) で、ランダムな位置にタイルを敷き詰めます

四角を描く所でも色コード指定をしているので、色コードタプルをバシバシ生成し、heapを食い尽くすのではなかろうか、と思ったのですが、少しの時間では、目立った変化は認められませんでした。

ウーン ?

未だ、ナゾーは深まるばかりであります。

一方、fx-CG100 がヒソーリと発売された中、電卓ページのトップバナー写真には、相変わらず fx-CG50 (生産終了品) が表示されております。

しかしながら、fx-CG50 のOSアプデは、2025-08-09 のアップデータにて終了という寂しい状態。

もう、fx-CG50 のアプデは提供されない様子でありますが、3.8 に更新すると「XCAS が動かない」という話で、当方は未だに 3.4 のママなんですヨ。

幸い、OSのdowngrade についての知見もあるそうで、3.7 にすると、XCAS が動くとか。

 気になる方は、調査されたし。以上 !

 

2025年9月6日土曜日

方程式 solver 試論

 と、格好つけてみましたけれども、大袈裟な物言いの割には、小ネタであったりします。

以前、fx-5800P に、内蔵公式集が 128本くらい入っていると知り、更に、ユーザーによる公式も登録可能、との事で、こうした公式集をダラリと使っていたら、そうした公式に少しは理解が及ぶ所で、初学者の助けになるんじゃないのか、などとボンヤリ思う所でした。

しかし、公式集をみると、例えば、multiple equation solver の様なメカがないため、公式内の変数に対して、式を変形したものが重複して登録されております。

理想を言うならば、公式を一本、入れておいて、Solver が指定した変数に対して数値解を求めてくれる、のが欲しいなぁ、というヘタレぶり。

fx-5800P の様な、公式内蔵のプロ電は、目下、successor が存在せず、というのが実に押井、と思う次第。

fx-CG50 には、Solver Appsがあり、方程式を登録する事で、所望の変数について数値解を計算する事は可能であります。
そこで、Solver Appsに、内蔵公式 selector の様なメカがあると便利かなァ、と思うのありますが、fx-CG50にはもちろんの事、fx-CG100 にも、そうした便利メカは用意されておりません。そりゃそうだ、学校教育向けでしたから、内蔵公式集の様な「あんちょこ」(「安直」の訛りが語源だそうです)は無いのが当たり前でありました。

斯様に、プロ電が「プロツール」の座位から「学校教育向け」に移って行く今日、プロツールの動きとしては、fx-FD10 が最後の輝きだったのか、などと思う所であります。
fx-FD10 が death-continue に至った今日、fx-5800Pが、プロツールの孤塁を守っている、という認識で良いのかも知れません。

プロツールのsuccessor 登場、という局面は期待できない今日、代替製品として、fx-CG50/fx-CG100 の upython に活路を見出すという試みは「密かなる需要、有用性が在りはしまいか ? 」という淡い期待から思いつくのであります。
幸いにして、fx-CG50/CG100 には、スクリプトを沢山抱えるだけのストレージ容量があります。

内蔵公式集として導入されていなくとも、ユーザーが必要な公式を登録、メニュー形式なりで計算式を選択して計算するといった作業を upython scriptとして記録しておけば、十分に活用できそうです。
実際、fx-5800Pに土木計算ライブラリを書き込んだものを、「専用機」として流通している商売があるとの話。

で、ここまでが長すぎる"前フリ"でありました。以降が本題。

fx-CG50/CG100 の Solver Apps, 結構便利なのですが、「方程式セレクタの様なメカが欲しい」という点もさることながら、f(x)=0 の形式の方程式しか解けない、そこが"押井"かなぁ ... と。

で、本編では、upython の計算能を用いて、2元連立方程式の数値解 Solver を模索しようという試みであります。

2方程式の数値解を求めるには、Newton-Rafson 法が利用できるそうで、ここでは簡易版のスクリプトを提示し、読者の皆様 (そんなに居らんのよなァ)に一考願おうという次第です。

つぎのコード「slv2eq.py」を用意します。

```

# title : slv2eq.py - Newton-Rafson Numeric solver
# begin : 2025-08-28 23:25:08 

# mat[2][3]  for equation difference matrix
mat = [ [0 for i in range(3)]  for i in range(2) ]
eps = 1e-9    # machine epsilon

#  pseudo-diff df/dx
def  dfx(f, x, y) :
  #print('debug ... eps ', eps)
  return  (f(x+eps, y)-f(x, y))/eps

#  pseudo-diff df/dy
def  dfy(f, x, y) :
  #print('debug ... eps ', eps)
  return  (f(x, y+eps)-f(x, y))/eps

#  newton-rafson solver
def solvre(f, g, x0, y0) :
  x, y = x0, y0
  for i in range(20) :
    print('.', end='')
    #report(x, y)
    #  
    mat[0][0] =  dfx(f, x, y)
    mat[0][1] =  dfy(f, x, y)
    mat[0][2] =  -f(x, y)
    # 
    mat[1][0] =  dfx(g, x, y)
    mat[1][1] =  dfy(g, x, y)
    mat[1][2] =  -g(x, y)
    # matrix solvre
    d = mat[0][0]*mat[1][1] - mat[0][1]*mat[1][0]
    if d == 0 : 
      d = eps
    tx = ( mat[1][1]*mat[0][2]-mat[0][1]*mat[1][2])/d
    ty = (-mat[1][0]*mat[0][2]+mat[0][0]*mat[1][2])/d
    mat[0][2] = tx
    mat[1][2] = ty

    x += mat[0][2]
    y += mat[1][2]

  print(' END')

  print('x=',x)
  print('y=',y)

  print('eq1()=',f(x, y))
  print('eq2()=',g(x, y))

  return x, y

def report(x, y) :
    print('x = {0:.6f}  '.format(x), end='')
    print('y = {0:.6f}  '.format(y))

def inpnum(str):
  lin=input(str).split(',')
  if len(lin)>1:
    num=complex(float(lin[0]),float(lin[1]))
  else:
    num=float(lin[0])
  return num
```

これを import すると、つぎの2つの関数が利用できます。

  • slv2eq.inpnum()
    数値入力サービス
  • slv2eq.solvre()
    簡易 Newton-Rafson 数値 Solver 

で、使い方としては、

  • 3*x+2*y-3 = 0
  • 3*x-2*y-8 = 0 

の様な方程式を解くため、つぎのスクリプトを実行します。

```

from slv2eq import *

#  equation #1
def f(x, y) :
  return 3*x+2*y-3

#  equation #2
def g(x, y) :
  return 3*x-2*y-8

#  main part
while True :
  x=inpnum('x0= ')
  y=inpnum('y0= ')
  x, y = solvre(f, g, x,y)

```
のようにします。

  1. def で方程式 = 0 の形式で関数定義をして、
  2. slv2eq.inpnum() で 数値解探索を始める初期値入力、
  3. slv2eq.solvre(f, g, x, y) で Newton-Rafson を動かす 

のですが、2, 3 の部分がループになっているのは、初期値の入力が簡単に行え、何度もリトライする為であります。

出力例
```

x0= 1
y0= 1
.................... END
x= 1.833333333333334
y= -1.25
eq1()= 0.0
eq2()= 0.0

```
解の探索を始める初期値 x0,y0 を入力すると、20回ほどの計算の後、数値解を吐き出します。
再び、初期値入力になりますが、この例題では、他に答えがないので、[AC」キーを押して終了します。お疲れ様。

上記の例は、線形2元連立方程式のため、fx-CG50 の Solver Appsでも解けるものでしたが、このスクリプトの威力は、つぎの様な式でも数値解を得られる所です。

  • x*x+9 = 0
  • x-y*y+4*y+4 = 0 

この方程式の場合、数値解が複素数になってしまうので、素直に解けません。
所が、Newton-Rafson 法では、探索を開始する初期値に複素数を用いると、解けてしまうのですネ。コリャーエエ !!

slv2eq.inpnum() では、実数と複素数の入力に対応しております。
複素数の入力をするには、実部のあと「,」を入れ、続けて虚部を入力します。
例えば、初期値に 1-2j を入力するには、1,-2 という入力をします。

実行例
```

x0= 1
y0= 1
.................... END
x= -1.5216944570145454
y= -0.6115683445992836
eq1()= 11.31555402050879
eq2()= -0.3419836755275885
x0= 1,1
y0= 1
.................... END
x= 3j
y= (-0.8761088075138545-0.5215379877427583j)
eq1()= 0j
eq2()= 0j

```

他にも、色々な式が計算できます。しかし、数値計算で、内部で「数値差分」を使うなどしている所から、ピッタリの数値を得られるとは限りません。飽くまでも、正確な値に"にじり寄る"手段として、活用して戴けると幸いです。

何だか、小ネタと書いた割に、長くなってしまい、申し訳ない。

 

【お・ま・け】

HP50G Users guide の Page 7-5 (242) に、Manning 方程式の計算例があります。
これを slv2eq.py の応用例として、書いてみました。コードを示しておきます。

```

# 
# title : manning.py
# begin : 2024-05-13 14:19:41 , 2022-05-11 16:17 
# note  : manning formulae equation solving test.
#       : ex.  cu/n*(y*(b+m*y))**(5/3)/(b+2*y*sqrt(m*m+1))**(2/3)*sqrt(s0) - q  = 0
#       :      y+(q/(y*(b+m*y)))**2/(2*gv) - h0 = 0
#       : ans. q = 20.6614376636849357
#       :      y = 4.9936961327530183
#  

import  math
import  slv2eq

##  variables

#  constants
h0 =  5.0      # represents the energy head (m, or ft) available for a flow at the entrance to a channel
b  =  1.5      # bottom width (m or ft) of channel
m  =  1.0      # the side slope (1V:mH) of the cross section.
n  =  0.012    # Manning   s coefficient, a measure of the channel surface roughness (e.g., for concrete, n = 0.012)
s0 =  0.00001  # slope of the channel bed expressed as a decimal fraction
gv =  32.2     # gravitic accel coefficient
cu =  1.486    # constant for UNIT convinient (ft, yards)

#  equation #1
def  f(q, y) :
  return cu/n * (y*(b+m*y))**(5/3)/(b+2*y*math.sqrt(m*m+1))**(2/3) * math.sqrt(s0) - q 

#  equation #2
def  g(q, y) :
  return y + (q/(y*(b+m*y)))**2/(2*gv) - h0

#  main part

x, y = slv2eq.solvre(f, g, 2, 1)

```


2025年8月31日日曜日

fx-CG50 と fx-CG100 では、何かが違うのかな ?

 金欠で fx-CG50 をポツポツと使って物欲という渇愛を癒やす日々、fx-CG100 を購入の皆様、様々御活用されて居られます様で、ご健勝、お慶び申し上げます。

 Tossy (@Tossy99077342) 様 post より

CASIOのfx-CG100のPython機能のcasioplotモジュールでランダムな色で画面を埋め尽くすサンプル。
何故か描画が途中で遅くなったり速くなったりする。
https://x.com/Tossy99077342/status/1962097774184603800

との事で、簡単なコードを書いてみましたヨ。

from casioplot import *
from random import *

def draw_box(i, j, c) :
  for y in range(16) :
    for x in range(16) :
      set_pixel(i*16+x, j*16+y, c)

for j in range(12) :
  for i in range(24) :
    c = (randint(0,255), randint(0,255), randint(0,255))
    draw_box(i, j, c)
    show_screen()


実行してみると、カラフルな画素で画面を敷き詰める筈。

 fx-CG50 で試したのですが、当方、ジジィになってしまい反射速度も鈍っているらしく、「何故か描画が途中で遅くなったり速くなったりする。」事象を確認するには至らず。

 あるいは、fx-CG100 で実行すると、重大な「何か」で、実行速度に"揺らぎ"が生じたりするものなのかしらん ?

取り敢えず、そんな具合です。お試し戴きましたら、ご報告を戴けると幸いです。


追記 on 2025-09-01

  藤堂俊介 (@ShunsukeTodo) 様のpost がありました。

fx-CG100 虚数の平方根ができるようになったのか。
#CASIO
#関数電卓
https://x.com/ShunsukeTodo/status/1962465220393328693
 

 以前、藤堂様は fx-CG50 の検討をされておられた様ですが、今般、CG100 登場で興味を惹かれたのかも ?

し・か・し ! fx-CG50 でも 複素数の計算はデキルんですヨ ! そりゃ、足りない部分はあるのは否めませんけれども。

 √i, i^i だったら、計算してくれますゼ。Setupでcomplex mode を a+ib にすればヨロシイのです。

 

2025年8月1日金曜日

fx-CG50 : ローレンツ変換の計算にみる、計算精度の問題

 先日、テレビをダラリと見ておりましたら、ローレンツ変換によって、速度 V で移動し続ける事で、時間の流れがゆっくりとなり、結果として「時間の収縮」という現象が生じる、とやっておりました。

具体例として「時速 285km で走行する新幹線に 100万年(!)乗り続けると、1秒だけ時間が縮む」との事。
まあ「100万年も乗り続ける」というのは現実離れした話ではありますが、飽くまでも思考実験であります。
そこで、手持ちの電卓で、宇宙に思いを馳せるが如く、計算してみようという次第。

まだ勉強しているので、詳細は分かりませんが、ローレンツ変換により、つぎの式で時間が収縮する様子が計算される様です。

  t' = t sqrt(1-(v/c)^2)

但し、

  • v  ; 列車の移動速度 (285 km/h)
  • c  ; 光速度  (299792358 m/sec)
  • t  ; 列車に乗っている人の経過時間
  • t' ; ローレンツ変換により、収縮したあとの時間 

これを計算するのですが、まずは多くのグラフ電卓で利用できる upython を使ってみましょう。

import math

c=299792358.0
v=285.0*1000/3600
t=100.0*10000*365.25*24*3600
k=math.sqrt(1.0-(v/c)*(v/c))
td=t*k
print('a{:24.8f}'.format(t))
print('b{:24.8f}'.format(td))
print('d{:24.8f}'.format(t-td))
これくらいならば、どの upython 電卓でも動くでしょう。
実行結果は ...
a 31557600000000.0000
b 31557599999998.8984
d              1.1015

順番に、
(a) 100万年乗車の経過時間
(b) 100万年乗車の経過時間を車両の外部から観測した経過時間
(d)  (a)-(b) の差 ... 時間収縮の量
でありますネ。

テレビの言う通り、ほぼ 1秒程度の時間収縮が得られました。( 100万年走り続けて、これかよ )

計算の共通 platform として、upython を使用しましたが、fx-CG50 の計算機画面(もしくは BASIC)で行ったら、チョットばかりクルシイ結果が ... (a), (b) が同じ値で、(d) = (a)-(b) = 0 になってしまった ... ウーム。


2025年7月10日木曜日

【速報】fx-CG100、遂に日本上陸 !

 先日、「このページなのか ?」と推測のリンクアドレスを上げましたが、2025-07-10, 遂に出現してしまいました ... !

https://www.casio.com/jp/scientific-calculators/product.FX-CG100/

ClassWiz CG というブランドで登場、ちょっとお値段は高めの様子。

いや、思っていたより早くの"上陸"でありました。
これで、fx-CG50 のファームウェア更新はなくなったのでしょうか。残念 ...

  今回は速報なので、以上 !

 追記 on 2025-07-14

そういや、CASIO 電卓の一覧をみて、面白い事に気付きました。

https://www.casio.com/jp/scientific-calculators/#program

先頃、生産完了品となった fx-CG50 ですが、生産完了品になると「オープン価格」になるのネ。
逆に言えば、「オープン価格」にならない fx-5800P は、当面生産が継続される、という見方ができそう。
ClassWizの関数電卓が出ても、programmable な fx-5800P の代替にはならずで、生産が継続されるのも納得ではありますが、個人的にはSolverを改良するとか、やって欲しいの ... 。
 

2025年7月3日木曜日

マイッタなァ、fx-CG50が「生産完了品」になっていたゾ ...

「遂にその日が来た」のでしょうか !? 我らが(?) fx-CG50 が「生産完了品」になっておりました ! ガーン !!

ref. グラフ関数電卓 fx-CG50 - casio.com
https://www.casio.com/jp/scientific-calculators/product.FX-CG50/

生産完了品、と銘打っている以上、つぎの推移が予想されます。マイッタ。

1. fx-CG50 の後継製品 (fx-CG100 ?) の登場、もしくは グラフ電卓自体の終売
2. 生産完了品 (fx-CG50) に対するアップデート提供の終了

ウーム、コマッタ ... 。

一方、Add-Ons にて開発が進められている PythonExtra が、0.4 に更新されておりました。
どうも、対応機種の拡大と、upython の更新が目玉となっているようです。

ref. Lephenixnoir/PythonExtra - git.planetcasio.com
https://git.planet-casio.com/Lephenixnoir/PythonExtra/releases

対応機種の拡大ですが、タッチパネル・CAS付きの fx-CP400, fx-CG500 への対応と、GRAPH MATH+ への対応が謳われておりますネ。GRAPH MATH+ も Add-Ons に対応している、という具合なのでしょうか ? すると、fx-CG100 でも Add-Ons が稼働する可能性が見えてきた ... ? 

fx-CG50のファーム更新が途絶しても、PythonExtra という「逃げ道」があるのは、救いでもあるのでしょうか。

折角、こうした成果物があるというのに、まともなコードを書けずにいる、不甲斐なさよ ...


2025年6月2日月曜日

fx-CG50 の最終アップデートから 1年以上経ちました

以下のページをご覧頂きたく。 

 ref. グラフ電卓:fx-CG50 OS アップデート
https://support.casio.jp/download.php?cid=004&pid=2126

fx-CG50 のアップデーターですが、最終版の Version 3.80.XX1X が公開された 2024年4月24日から、1年以上が過ぎております。
(2024年8月6日のアップデーターは、Windows Smart App Control 対応版なので、内容は不変 )

Graph MATH+, fx-CG100 が海外で発売されている所で、upython の version が 1.9.4 と fx-CG50 と同じという事なので、

Graph MATH+, fx-CG100 と fx-CG50 は 同じ upython だから、fx-CG50 のアプデは終了ネ ! 日本でも fx-CG100 を発売するから、それを買ってチョ !!

 だったりしたら、サミシイなァ。

 せめて、getkey() くらいは追加して欲しいのヨ。

でも、ゲームプログラム とか書いた事がないから判らんのだけれど、最近のゲームプログラムって、イベントドリブンな構造だったりするのか ? 

loop 内で getkey() でキー入力検出と分岐処理というsingle thread, 手続き型ループ処理だと「もたつくからイヤ」とか贅沢な事を言ったりして ? fxCG50 の upython 実行速度は結構早いと思うので、あとは工夫の問題なのか、と思ってみたり。

まあ、「無駄口叩く前に、面白いコードでも書けや」 と言われたら、ぐうの音も出ません、オソマツ !

 

2025年5月27日火曜日

fx-CG50 : カッシーニの卵形線を描いてみるゾ

 前に「カッシーニの卵形線」というのがあると聞いたので、手持ちの fx-CG50 upython で描いてみた、という小ネタです。

ref. カッシーニの卵形線 - Wikipedia
https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%83%E3%82%B7%E3%83%BC%E3%83%8B%E3%81%AE%E5%8D%B5%E5%BD%A2%E7%B7%9A

 

2025-06-01 追記

やす親分から、線引きなどの機能を実現した module「u.py」のお知らせを戴きまして、大いに刺激を受け、改変致しました。親分、お世話になります ! 

 

こちらのページから u.py を取得して、導入しておいて下さい。 

ref. Casio Python - ユーザー関数 line() - e-Gadget 様
https://egadget.blog.fc2.com/?no=764

 

座標軸の表示を盛り込みましたが、「目盛り」は盛り込んでおらんです。いずれの課題としておきます。

代わりに、デカルトの正葉線の式を追加致しました。 

また、表示領域の指定をチョット凝るなどしております。

元々、関数の絶対値が指定の値よりも小さい時に 0 とみなして、点を打つ具合に動作しておりますから、正確な線と較べると、太くなってしまう所がります。

デカルトの正葉線のWikipedia をみると、媒介関数表示が出来るので、 fx-CG50 のグラフ機能できれいな線を描けます。比較してみると面白いと思います。

 

ref. デカルトの正葉線 - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%AB%E3%83%AB%E3%83%88%E3%81%AE%E6%AD%A3%E8%91%89%E7%B7%9A

  

upython のコード ( 改訂新版 : やす親分の u.py module を使用します)

 
from u import *
from casioplot import *

#
def f(x,y):
return (x*x+y*y)*(x*x+y*y)-2*(x*x-y*y)-(1.02**4-1**4)

#
def f1(x,y):
return x*x*x-3*x*y-y*y*y

#
def scrSize() :
if isCG() :
return 384, 192
else :
return 384/3, 192/3

#
def axis(xs,xe,ys,ye):
i = int(-xs/(xe-xs)*width)
j = int(-ye/(ys-ye)*height)
line(0,j,width,j)
line(i,0,i,height)

#
def draw(func,xs,xe,ys,ye,eps):
for j in range(height):
for i in range(width):
x = (i*(xe-xs)/width +xs)
y = (j*(ys-ye)/height+ye)
if abs(func(x,y))<eps:
set_pixel(i,j)
# show graphix progressively
show_screen()


# main part
width, height = scrSize()
#xs,xe,ys,ye= -1.6,1.8,-0.7,0.9
xs,xe,ys,ye= -2.4,2.7,-1.05,1.35
eps=0.05

draw(f,xs,xe,ys,ye,eps)
axis(xs,xe,ys,ye)
 

( 参考 : 最初のコード )

 
 from casioplot import *
#
def f(x,y):
  return (x*x+y*y)*(x*x+y*y)-2*(x*x-y*y)-(1.02**4-1**4)


def draw():
  width  = 383
  height = 191

  xs=-1.8
  xe= 1.8
  ys=-0.9
  ye= 0.9
  eps=0.05

  for j in range(height):
    for i in range(width):
      x = (i*(xe-xs)/width +xs)
      y = (j*(ys-ye)/height+ye)
      if abs(f(x,y))<eps:
        set_pixel(i,j)
      #  show graphix progressively
      show_screen()
        
draw()

2025年5月22日木曜日

他人様のpostを肴に ...

 Ellefacia Marguerite ( @ellefacia_m ) 様、ポスト

この内部演算での扱いのせいで定数を定数と表示できないバグを何とかしてくれ!! 何でfx-5800Pですらちゃんと表示されるものが,数倍価格の高いfx-CG50でダメなのじゃ!? w →
https://x.com/ellefacia_m/status/1923199772313186771

Machinの公式を自然表記で計算してもpi表示にならないとお怒りの様子。
fx-5800P では、pi表示になる様ですネ、羨ましい。

処理方式が変更された所で、取りこぼしがあったのでしょうか ?

せっかくなので、XCASでやってみましたヨ !

4*(4*atan(1/5)-atan(1/239))=>/

と入力すると「答え一発」ですネ。
( 「=>/」は、「→」、「÷」のキーを使います。式の計算と簡便化、との事 )

2025-05-25 追記
XCAS の入力表記に誤り ( atan(1//5) としておりました ) を訂正しましたヨ

 

2025年5月7日水曜日

( こんな事ァ、書きたくないのだけれど )

目下、Trump大統領の「関税だッ !」大号令もあってか、アメリカからの物品の値段が大きく影響を受けている様子です。

以下は、並行輸入版の fx-CG50 ですが、

ref. カシオ計算機 カシオ 電卓10桁 グラフ関数 FX-CG50 ブラック [並行輸入品] - Amazon JP
https://www.amazon.co.jp/%E3%82%AB%E3%82%B7%E3%82%AA%E8%A8%88%E7%AE%97%E6%A9%9F-%E3%82%AB%E3%82%B7%E3%82%AA-%E9%9B%BB%E5%8D%9310%E6%A1%81-%E3%82%B0%E3%83%A9%E3%83%95%E9%96%A2%E6%95%B0-FX-CG50/dp/B07HYY1DCT

2025-05-07 時点で、17,800 円となっております。以前なら、15,000円くらいで買えましたが、諸物価高騰の折 ...

日本で TI 電卓の正規代理店となっております NAOCO INC. 様の Amazonの販売は、今の所価格に影響は出ていない様子です。

ref. NAOCO INC. 様 の Amazon JP
https://www.amazon.co.jp/s?i=merchant-items&me=AUGV0LKUMT9L3

しかし、以前は在庫していた「TI-84Plus CE Python日本語マニュアル付き[正規輸入元] 」が、今は在庫切れになっております。

以前ほど、入荷に手間取る事はないはずですから、今は何らかの理由で在庫を整理しているのでしょうか ?

円安傾向は継続しており、アメリカも関税政策を進めていて、海外からの輸入品の価格にも大きく影響する可能性があります。
NAOCO INC. 様の TI 電卓も、在庫のない商品から順次「価格改定」となるのかも。

こんな事を書くと「TI-Nspire CX II CAS [正規輸入元]」なんかも、たちまち売り切れになってしまいそう。

ref. TI-Nspire CX II CAS [正規輸入元] - Amazon JP
https://www.amazon.co.jp/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF%E4%BB%98%E3%81%8D-Texas-Instruments-TI-Nspire-CAS/dp/B07XCM6SZ3

マイッタなァ。価格改定でも、安くなれば歓迎なのですが、果たしてどうなるのでしょうか ?

2025年5月3日土曜日

fx-CG100 のマニュアルPDF をみて

 先日、アメリカで販売開始となった、fx-CG100 Classwiz でありますが、マニュアルPDF をみていたら、余り急いで買うようなもんじゃなさそうな気がしてきました。

  • upython version が 1.9.4 
  • casioplot module に、線を引く機能がない

なのヨ。 

もちろん、

  • matplotlib.pyplot, turtle といった module がスグに使える
  • code editor のフォントが小さく、狭い画面を広く使える

という利点は在りますから、ここに使いやすさを求める向きは、是非とも購入をご検討戴きたく。

upython version 1.9.4 と云うと、当方が使っている、fx-CG50 の upython の version とおんなじなのですネ。まだ、OSは古いママ。

なので、もしかして「隠しcommand があったりして ?」と、getkey() の代わりに _getkey(), getkey_() ... とかやってみたのですが、流石にそれは無かった。海外のユーザーはHack済みなのでしょう。

fx-CG50,  fx-CG100 の casioplot には線引きの機能がありませんが、fx-CG50 で動く Python Extra には線引きの機能があったはず (gint module, dline method )で、upython も大分新しいものを導入しております。

casioplot で線を引きたい場合、Bresenham  algorithm により、自前で線引きのmethod を書けばいいのでしょう。それを含めて「学習用途」なのかも知れません。

 確かに、code editor など、導入されていない機能は多くあり、まだ安定していない部分もあります。

 fx-CG50 user としては、fx-CG100 Classwiz に飛びつく前に「射撃待て」 と注意喚起しておこうと思います。

 当方、懐具合が寒いので、こんな事を言っておりますが、懐具合のイイ方は、是非とも fx-CG100 のご購入を !?

 

2025年4月25日金曜日

fx-CG100、アメリカで販売開始

 先日、つぎの X post が出ておりました。

ref. ハリー ( @harycurl ) 様 X post
https://x.com/harycurl/status/1915245139330810017

カシオのグラフ電卓、fx-CG100(fx-CG50の後継)はアメリカで24日から発売とのこと。
日本ではいつから発売するのでしょう。
#関数電卓 #グラフ電卓
との事で、確かに、発売されている模様です。

ref. fx-CG100 ClassWiz® Color Graph - casio.com
https://www.casio.com/us/scientific-calculators/product.FX-CG100/

マニュアルを取得しましたら、Python には、つぎの module があるという記述がありますネ。 

  • math 
  • random
  • matplot.pyplot
  • turtle
  •  casioplot

残念ながら、cmath は無い模様。ながらも、matplot.pyplot、turtle が「標準装備」で、すぐに使える所がウレシイ。

そして、多くのユーザーが期待していた(?)、リアルタイムキー入力機能が準備されました。

  getkey() (No argument)
Returns the key code of the calculator key pressed at the time this function is executed.
The key codes of the keys are shown below.
getkey() は、casioplot module に入っていると、マニュアルにはあります。

Python の機能が充実し、3D plot Apps なども使える様ですが、
一方で、CASIO BASIC が入っていない様です。Python が早く動作するという事で、省略されてしまったのでしょうか ?
また、国設定が4つとなっております。fx-CG50 にはあった、繁体字フォントを削除していたりするのでしょうか ?

fx-CG50 で新しいファームウェアが提供されれば、casioplot に getkey() の追加、という事はありそうです。

さて、どうなるのでしょうか ? 以上、速報でした !



2025年4月9日水曜日

fx-CG50 ユーザーとして、気になる X のポストを見てしまった

 手元にある fx-CG50 の使い方、特に Python Extra のコードを書き出そうかと思っていながらネタづまりで、悶々とする日々。人様の X のネタを肴に、何か刺激に出来ないモンか、と。
そうしたら、幾つか気になるポストがあったので、槍玉、ではなく、少し考えるネタとして。

ref. たほもあ ( @tka32201 ) 様 X post
https://x.com/tka32201/status/1909256664831906297

関数電卓のFX-CG50は、FX-CG100がもうちょいしたら出るから買わないほうが良いよ

確かに、fx-CG100は新製品なので、判らないでもありません。
一方、心配な所もあります。

アメリカでfx-CG100販売開始、fx-CG50が終売となると、アメリカ版fx-CG50が安く買えなくなります。
目下のTrump関税が由来しているのか、今は円高でありますが、これも何時まで続くのか判りません。
日本では fx-CG100 の発売は発表されておりませんから、モウ暫くは fx-CG50-N が継続販売されるでしょう。
円安に転じるまでの若干のタイムラグではありますが、北米版 fx-CG50 を購入するには絶好の(そして最後の ?)機会なのかも知れず、という事を"吹聴"しておきますヨ。


ref. 堀江 伸一 ( @horiesiniti ) 様 X post
https://x.com/horiesiniti/status/1908348559843615064
casio fx-cg50
仕事を頑張った自分へのご褒美、ガジェット満載に惹かれて購入。
casio basicで動くゲームを21本製作しただけで満足してしまい、本来の購入目的である数学独学の補助にはならなかった。
canvas使えばブラウザゲームに移植できそうなのは何本かあるけどどうしよかな。
堀江 氏は、たびたび fx-CG50 BASIC でゲームを作成、公開されて来られたのですが、数学勉強の道具としては使い物にならなかったとの事です。
当方なんぞ、未だにグラフを描いたりなど、勉強の最中。堀江氏のやうな事を言える程度に勉強が進めばいいのでしょうが、オツムが冴えず、ダラダラとしている ... 。

最近は、Python Extra でコードを書こうと思いつつもネタがなく。一方、「調和級数の値」というものを調べていたら、fx-CG50 で XCAS を使うと、興味深い答えを提示してくれるのですね。
sum(1/(k^2), k, 1, inf)
を打ち込んでやると、1/6*pi^2 という、ビックリする答えが返ってくるのヨ、驚いちゃった。

fx-CG50 は、グラフ電卓+BASICで大変面白く、C.BASIC, python でプログラミングの幅も広がり、 XCAS で高度な計算も出来る、と、不勉強な当方には、当面手放せない機能が沢山利用できるのですネ。

北米版ならば、まだ、安価に入手できます。今の内ですヨ。


オマケ。Numworks のポスト。

ref. ~/Funada/ ( @sentoki ) 様 X post
https://x.com/sentoki/status/1902975814431543682
そういや昨日、電卓の日と聞いて、全然使ってないのに何をしても電源が入らなくなったNumWorksを分解したんです。そしたら案の定、のっぺりしたLiPo電池が出てきてヤル気を失ったのでした。捨てLiPoの缶へ放り込んで、蓋を閉じました。

当方、古い Numworks 電卓を知り合いから借りて使ってみたのですが、ドレイン落ちで再起動の時、再起動するのに手間取った憶えがあるので、触れておきます。Numworks 電卓の再起動手順は、つぎの様です。

1. USBケーブルで充電する。説明によると、1時間程度で充電終了。
2. USBケーブルをはずす。コレ、重要です。
3. 裏にあるリセット穴を爪楊枝などで突き、リセット・リブート

充電をしながらだと起動しないのは、ファームウェアが過充電を抑える様にしているから、なんじゃろうか ?
とは言え、上記の記述は、N0100 ( 初代 Numworks ) での話であります。最新版の機体でも同じかどうかは判りません。
これで起動しないとすれば、~/Funada/ 様 の様に LiPo電池を取り出してポイ、は仕方がないと思いますが、一応、出来ることならば、逸らずに再起動の手順を確認してもいいと思います。


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

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