2021年4月17日土曜日

HP Prime CASの計算の数値範囲

HP PrimeのCASは色々と楽しく、ネットで見掛けた問題を幾つか解くのに使ってみました。

1. x^sqrt(x) = x*sqrt(x)

Can you solve this rational equation ?

cf. https://www.t-3.com/thinking/brilliant-orgs-brilliant-crm/

CASで

fsolve(x^sqrt(x)=x*sqrt(x), x)


と入力します。すると、一度、こんな警告が出ますが、

ENTERキーを押して送ると、[1, 2,25] と、答えを返します。ウマイッ !

2. x! = (7!)! / 7!

what is x ?

cf. https://sites.google.com/a/g.coppellisd.com/coppell-ib-math/math-sl/topics---sl/probability/counting-principles

これは、すんなりと解けるものではなく、別に色々とやって答が判明していたので、その検証に使おうとしました。

答は x=5039 となるらしい。PCで動くmaximaで手当たりしだいに試し結果を得たですが、検証をHP PrimeのCASで出来ないか、試した次第。

(7!)!/7!-5039!
    undef

所が ... 計算できまへん。undefとなってしまいます、アカン。

では、何処までの階乗が計算できるのか、調べてみました。どうも、1006! までは計算できますが、1007! になるとお手上げです。ウーム。

ちなみに、1006! がどんな数値なのか、そこを見ておこうと思います。
整数では結果が得られますが、結構桁数があります。浮動小数点表記だと、どうなるのか ?

HP Primeの浮動小数点表示は、10 E 500 以上でエラー、もしくは Inf となります。1006! は、この範囲にはないでしょう。そこで、対数を取って階乗を計算し、それを浮動小数点表記にする、という作業を行います。

log(1006!) の計算
ΣLIST(MAKELIST(LOG(X),X,1,1006,1))  Shift+ENTER (概数計算の入力)
    2585.61374471
これより、1006! = 4.10908107239 E 2585 と概算されます。
(10^0.61374471 = 4.10908107239 ですネ)

log(1007!) の計算
ΣLIST(MAKELIST(LOG(X),X,1,1007,1))  Shift+ENTER
    2588.616774418
これより、1007! = 4.13784463462 E 2588 と概算されます。

浮動小数点数は10E500まででしたが、整数は、この程度まで計算してくれる模様。
そこで、限界を調べるべく、電卓のキー (実際にはシミュレータのボタン)を叩きまくり、つぎの様な値までは扱えるらしい事が判りました。
3605227827*10^2579 = 3.605227827 E 2588
そして、この整数は、おそらく2進数integerで内部的に保持しているであろうから、何ビットで表現できるのか、と考えてみました。

2を底とする対数を取ったりしてみると、2^8599 が3.605 E 2588 に近い値となる様子。
HP Prime CASでは、2^8599以上の整数値は扱えないらしい、と考えられます。

所が、こんな結果が !
s=2^8598
    1802613913 ... 2262841344 (途中省略の表記です)
s*s
    undef
ここまでは当然ですネ。
s=2^8597
    9013069568 ... 1131420672
s+s
    1802613913 ... 2262841344
s*4
    undef
2進数的に1桁落として加算します。ここも十分理解できます。
s+s+s+s
    3605227828 ... 4525682688

ムムッ !? コレはオカシイ、undefにならんじゃないの !!


調子に乗って、64回加算を行いましたが、一応結果が得られました。
加算の処理が簡易だからなのか、回数を増やしても、ある程度ならば計算してくれる様です。

こんな具合で、整数の場合、3.6 E 2588 程度まで計算してくれる事が判りました。
欲を書くと、もっと長い桁数の整数計算が出来ると良かったのですが、普通の関数電卓では、ここまで扱えないのが当たり前なので、コレ以上の計算の需要はPCの利用を、という事ですネ、ハイ。


仰るとおりでございます ...

https://twitter.com/dentaku_sister/status/1380909436592480262
https://twitter.com/dentaku_sister/status/1382660888658792449
そうなんですヨ。当方、オツムが弱いもんで ... 。

https://twitter.com/dentaku_sister/status/1382962907936301060

Mathematica, 高いしィ !

https://twitter.com/dentaku_sister/status/1382577833436860420
仰る通りです。「この世に果たしてロマンはあるか、人生を彩る愛はあるか」(「ジェームス三木のブラックジャーック」より)。
PCの普及した今日、スマートフォンでもCASが利用できる中で「電卓にロマンを求めるのは間違ってる」のではあります。
でも、当方、コレくらいしかできんのですよ、申し訳ない。(余計なお世話か)

https://twitter.com/dentaku_sister/status/1382789203453378565
HP、PC部門も分社化しております、大きくなりすぎちゃったので、改革、分社化は世の習い ... 。

https://twitter.com/dentaku_sister/status/1382283551299629058

なのかも知れません。だから、どうしたの ? CANON, CASIOの電卓も海外で製造しているし、どこで作れというのか ?

https://twitter.com/dentaku_sister/status/1380456202836975622
キツイなァ ! 今時はWindowsもブートループするとか ... 。

2021年4月11日日曜日

HP Prime CAS でやってみた

こんな話題をみつけました。

cf. https://twitter.com/dentakuin/status/1145548793527459840

陰関数表示のグラフ描図との事です。

以下のコードは、sin(x^2)+sin(y^2)>=1 を描く、CASのpythonコードの例です。


#cas

def sinsqs() :
  wi = 320
  he = 240
 
  Xmin = -6.4
  Xmax =  6.4
  Ymin = -4.8
  Ymax =  4.8
 
  for k in range(he) :
    for j in range(wi) :
      x = Xmin + (Xmax-Xmin)*j/wi
      y = Ymax - (Ymax-Ymin)*k/he
      if sin(x**2)+sin(y**2) >= 1 :
        col = RGB(255,0,0)
      else :
        col = RGB(255,255,255)
      PIXON_P(j,k,col)
  WAIT

#end


今こそ、fx-61f の様な製品を欲す !

個人的に随分前から、少し気になっていたのが「CASIO fx-61f」というプロ電です。

fx-61f は、コンデンサやインダクタの記号キーが用意され、イムピーダンス計算を手軽に実行できる、今日としては「珍品」に属する製品ではありました。なので、今日に至るまで、その後継機種は存在しない模様です。

しかし、CASIOの電卓カタログに登場した時分、大変に面白いモノが出ていたのだと、感銘したのを思い出します。

今から思うに、結構「志」が高かったのは、プロ電として、30ステップのキーストローク言語のプログラミングが使用できたのです。また、電気計算に特化した数式ライブラリを持っていて、固定計算はライブラリ機能で十分、更に、問題解決の手段としてのプログラム機能が利用できたのです。

残念ながら日本語マニュアルPDFは入手できませんが、英語ならば、つぎの情報源が大変詳しいので、御一読戴きたく思います。

cf. Home Other fx series The Formula series fx-61f - ledudu.com
https://casio.ledudu.com/pockets.asp?type=550&lg=eng

このfx-61fの注目点としては、やはり「イムピーダンス計算機能」です。
これは、内部的に複素数計算をイムプリメントしたからこそ、実装できたのであります。
複素数計算機能を「チョット工夫でこのうまさ」で、イムピーダンス計算に応用した、その製品企画は、今日的にも十分刮目するところであります。

また、当時のプロ電としては、30ステップのキーストローク・プログラムが出来ただけでも「儲けもん」でした。
この頃には FX-501P, FX-702P などの高級プロ電、BASICポケコンも登場していて、プログラム容量などは比較になりませんが、価格帯が違います。確か、FX-501Pは29,800円、FX-702Pは39,800円くらいではなかったか ? それに較べ、fx-61f は 9,800円くらいだった様に記憶しています。
当時の半導体技術としては、価格性能比という事で十分な棲み分けがあったのですネ。

fx-61fは、製品企画として結構注目がされたのではないか、と、密かに思う所です。
それは、関数電卓として「一通りの関数計算が出来れば十分」という御時世に、敢えて「電気計算専用機」という企画を世に問うた、そこを評価したい。この企画の流れは、今日では 土木計算専用機・fx-FD10 proへ至っている、そんな風に思えてならない。更には、栄養士、看護師、薬剤師向け専用電卓というソリューションにも連なっている、と。

流石に今日「fx-61fヲ復刻セヨ」とは言いません。
それは、今日的にはもう少し機能を盛り込める筈だからです。
例えば、複素数計算能ですが、当時のfx-61f では四則演算と直交・極座標変換くらいの機能しかイムプリメントされて居りません。この辺り、今日的には対数・指数関数、三角関数程度まで複素数計算機能の拡張がされるとウレシイ。
更に、プログラム機能、その容量はもっと拡充して欲しい。それに伴い、キーストローク言語を更に拡充、プログラム管理機能まで導入されるとタノシイ。
そして、固定計算式ライブラリはもちろんですが、プログラム機能と共にSolver機能もあると便利です。
たしか、fx-61fと同じ様なハードウェア製品に、複素数計算能は無かったものの、キーストローク・プログラムを関数式とした、数値積分機能を持った製品があった、と記憶しております (型番失念)。
この辺り、HP15Cの数値積分機能とSolver機能を彷彿とさせるものですが、プログラム機能を数値積分やSolverで利用できる、というのは、今日的プロ電に必須の項目、といっても過言ではないでしょう。

もちろん、普通の関数電卓、グラフ電卓でも、イムピーダンス計算程度の事は十分こなせます。
しかし、イムピーダンス計算専用機は、言わば、かなりEducationalなものでもあります。専用数式ライブラリを持ったり、イムピーダンス計算に習熟させるなどの「効用」があります。こうした専用ツールを使い込む事で、電気回路計算の知見を涵養する、という事を切に望むものであります。

目下、高機能電卓、グラフ電卓は、それこそ教育市場へ大きく舵を切っているのですが、他の関数電卓、それはプロツールとしての座を守ると言っても、専門に特化しているでもなく、Generalな対応のまま、というのが少しだけ口惜しい、そんな事を思うのであります。
土木計算向けfx-FD10 proの様な専用電卓を世に問うたCASIOならではの製品企画に期待し度。

2021年4月9日金曜日

HP PrimeのCASで円周率の計算

HP PrimeのCASで円周率の計算をやってみました。

pythonでは多桁整数の計算が出来ますが、PrimeのCAS・XCASでも同様なので、これを利用してMachinの公式による円周率計算を行った次第。

つぎのプログラムをHP Primeのプログラムに書き込み、実行後、CASに移動して

m(100)

の様に打ち込んでやります。すると、円周率の計算を行って、結果が出てきます。

項の計算で末尾まで行っているわけではないので、100と入力しても、100桁の精度があるのかはわかりません。100桁の精度が所望の場合には、120とか、大きな値を設定して実行するとよいと思います。
また、このプログラムもモノホンのpythonで実行できると思います。


#cas
def  machin(n) :

  s = 0
  t1 = 10**n // 5
  t2 = 10**n // 239

  f = 0

  for i in range(n):
    d = 1+2*i
    if f == 0 :
      s = s + t1//d * 4
      s = s - t2//d
      t1 = t1 // 5 // 5
      t2 = t2 // 239 // 239
    else :
      s = s - t1//d * 4
      s = s + t2//d
      t1 = t1 // 5 // 5
      t2 = t2 // 239 // 239
    f = 1 - f

  print(s*4)

#end


2021年3月31日水曜日

HP PrimeのCASでお遊び

HP PrimeのCASは「XCAS」を使っているそうで、独自スクリプトのほかに、python文法に準じたスクリプトを実行できる、との事。
そこで、簡単なスクリプトを作成してみましたヨ。

参考にしたのは、つぎのTweet。

cf. https://twitter.com/RR_Inyo/status/1217489174128758784

少々古いものですが、色々と研究して、どうにか再現できた次第。

使い方

1. HP Primeのプログラム・エディタで、適当な名前でファイルを作成します。この時、CASのチェックボックスにチェックを入れるのを忘れずに。
2. プログラムを実行します。しかし、この時点では、何も実行されません。
3. CASを呼び出し、iter_cos(20) と入力して実行します。

コード解説

HP PrimeのXCASではPPLのグラフィクス命令が使えるので、こんなコードが動くのですネ。
また、XCASのコードなので、頭と尻に#CAS, #END というタグが付いておりますが、同時に、ファイル名として準備されるスクリプトヘッダは、必要無さそうな感じなので削除しております。
スクリプトを自動実行できない所はありますが、グラフィクスのコードも動くので、そこそこ楽しめそうです。


コード

#cas

def iter_cos(n):
  width = 320
  height = 240
  for k in range(height):
    for j in range(width):
      x = j/width*10.0-5.0
      y = 5.0-k/height*10.0
      z = x+y*i
      l = 0
      while l<n and abs(z)<50:
        z = COS(z)
        l=l+1
      col = rgb(l/20*255,0,0)
      PIXON_P(j, k, col)
  WAIT

#end

2021年3月4日木曜日

fx-CG50で「2週遅れのバレンタインデー」

先日のハートカーブのグラフィクスを、量販店に行った折に、店頭のfx-CG50でやってみました。
しかし、グラフ機能で描こうとしても、なかなか思うように行きませんネ、コマッタ。

こうした際には、pythonでプログラムを書け、となりそうですが、店頭の試用機のOSは更新されていないので、python 使えません。「バカ、スクリプトを書くヤツがいるか。pythonは最後の武器だ」

そこでグラフ機能で描く方法を模索した所、ようやく描くことが出来たのでした。

標準のグラフ機能で、Functionを描画形式として行うと、うまく行かない。何故か ?
Function形式では、x軸の増分が1ドットおきに固定されているからです。
しかし、件のハートカーブ式では、1ドットよりも細かい増分で描かないと「塗りつぶし」が現れない。

この限界を突破するには、裏技っぽいですが、FunctionではなくParametric 形式で表示を行います。
Parametric形式で描図を行うと、媒介変数 T の変域と増分が指定できます。

ハートカーブの場合、(4-x^2)^0.01 という項がある事から、-2〜+2の範囲を越えると実数ではなくなるので、グラフに表示できなくなる事が予想されます。

そのため、{ T | -2<=T<=2 } で描いてやれば、ハートカーブが現れるでしょう。
また、媒介変数 T の増分は自由に設定できますが、余り小さいと、その分、計算に時間が掛かります。
店頭で試した際は、0.0025 (2.5E-3) で試した所、十分な図形が得られました。

画像が掲載できませんが、fx-CG50をお持ちの向きはお試し戴き度。