裏 RjpWiki

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

算額(その235)

2023年05月16日 | Julia

算額(その235)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額3(225-226)
長野県諏訪市下諏訪 諏訪大社下社 慶応4年(1868)

菱形の中に一辺約 8寸5分5厘2毛6糸あまりの正方形が入っている。菱形の対角線(長い方と短い方)の長さを求めよ。

対角線の長さを,x, y,正方形の一辺の長さを a とおく。

三角形の相似関係で,AD/DE = AB/BC これは (y - a)/a = y/x である。

a について解くと,a = x*y / (x + y) となる。

include("julia-source.txt")

using SymPy

@syms x::positive, y::positive, a::positive;
@syms x, y, a
eq = (y - a)/a - y/x
solve(eq, a)[1] |> println

   x*y/(x + y)

x, y を整数として,x*y / (x + y) ≒ 8.5526寸になるものを探索する。なお,小数なので 1万倍して切り捨てたときに 85526 になるものを解とする。

1 < y < x < 10000000 までを探索してみる。この範囲内では条件を満たすのは,x = 25, y = 13 の場合のみであり,そのときの正方形の一辺の長さは 25*13/(25+13) = 8.552631578947368 であり,題意を満たしていることが確認できる。

正方形の一辺の長さが整数値になる x, y の組み合わせもあるが,解の一意性を保証するために「8.5526寸あまり」という半端な数を指定している。

a = 85526
limit = 10000000
for x in 1:limit
   for y in 1:x
       res = floor(x*y / (x + y) * 10000)
       if res > a
           break
       elseif res == a
           println("x = $x;  y = $y")
       end
   end
end

   x = 25;  y = 13

function draw(more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (x, y) = [25, 13] / 2
   a = 8.5526 / 2
   plot([x, 0, -x, 0, x], [0, y, 0, -y, 0], color=:black, lw=0.5)
   rect(-a, -a, a, a)
   if more == true
       point(0, y, " A", :black, :left, :bottom)
       point(0, 0, " B", :black, :left, :bottom)
       point(x, 0, " C", :black, :left, :bottom)
       point(0, a, " D", :black, :left, :bottom)
       point(a, a, " E", :black, :left, :bottom)
       point(a, 0, " F", :black, :left, :bottom)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       plot!(showaxis=false)
   else
       plot!(showaxis=false)
   end
end;

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

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

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