裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

M1 チップでの Julia の SymPy を使えるようにした

2021年11月07日 | ブログラミング

M1 チップ搭載の Mac mini
macOs Monterey version 12.0.1
Julia 1.6.3
で,
using SymPy しようとすると, 
/Users/foo/.julia/packages/SymPy/jTadH/src/numbers.jl
の 256 行目からの式でエラーがあるので使えないよということになった。

件の式は,

sympy_core_numbers = ((:Zero, 0),
                      (:One, 1),
                      (:NegativeOne, -1),
                      (:Half, 1//2),
                      (:NaN, NaN),
                      (:Exp1, ℯ),
                      (:ImaginaryUnit, im),
                      (:Pi, pi),
                      (:EulerGamma, Base.MathConstants.eulergamma),
                      (:Catalan, Base.MathConstants.catalan),
                      (:GoldenRation, Base.MathConstants.golden),
                      (:TribonacciConstant, big(1)/3 + (-big(3)*sqrt(big(33)) + 19)^(1//3)/3 + (3*sqrt(big(33)) + 19)^(1//3)/3))

一行ずつ潰していくと最後の行
(:TribonacciConstant, big(1)/3 + (-big(3)*sqrt(big(33)) + 19)^(1//3)/3 + (3*sqrt(big(33)) + 19)^(1//3)/3)
が原因ということがわかった。しかも,この1行を実行すると永遠に終わらない。
さらにどこが変なのか,項ごとに見ていくと
big(1) はすぐに解釈されるが,big(1)/3 ですでに無限ループ?に落ちるらしい。
なので,この行をコメントアウトして,再度 using SymPy してみると,無事に通った。
まあ,:TribonacciConstantがどこかで使われていれば問題が出るだろうが,少なくとも私は使いそうにない。
しかし,多倍長演算パッケージがちゃんと使えないとすると,ちょっと困ることもあるだろうな?

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

2020 年日本数学オリンピック予選 問題2

2021年11月07日 | ブログラミング

2020 年日本数学オリンピック予選 問題2
https://www.imojp.org/archive/mo2020/jmo2020/problems/jmo30yq.html

Q2. 一辺の長さが 1 の正六角形 ABCDEF があり,線分 AB の中点を G とする。正六角形の内部に点 H をとったところ,三角形 CGH は正三角形となった。このとき,三角形 EFH の面積を求めよ。

  using SymPy

点 A, B, C, D, E, F, G の座標を定める(C を原点(0, 0) とする)。

  A = (0, 2sind(120))        # 0, sqrt(3)
  B = (cosd(120), sind(120)) # -1/2, sqrt(3)/2
  C = (0, 0)
  D = (1, 0)
  E = (1+cosd(60), sind(60)) # 1.5, sqrt(3)/2
  F = (1, sqrt(3))           # 1, sqrt(3)
  G = 0.5 .*(A .+ B)         # -1/4, sqrt(3)*3/4
  println("A:$A\nB:$B\nC:$C\nD:$D\nE:$E\nF:$F\nG:$G")
  GC = sqrt(sum(G .^ 2))        # sqrt(7)/2
  GH = sqrt(sum((G .- H) .^ 2))
  CH = sqrt(sum(H .^ 2))
  println("GC:$GC\nGH:$GH\nCH:$CH")
  eq1 = Eq(GH, GC)
  eq2 = Eq(CH, GC)
  solve([eq1, eq2], [x, y])
  H = (1, sqrt(3)/2)
  EH = E[1]-F[1] # = 1/2
  FH = F[2]-H[2] # = sqrt(3)/2
  s = EH * FH / 2 # = sqrt(3)/8
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村