裏 RjpWiki

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

算額(その263)

2023年06月04日 | Julia

算額(その263)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額2(94)
長野県長野市三輪 美和神社 文化10年(1813)

図のような,横 4丈2尺,縦  2丈4尺の長方形がある。長方形の内側に図のように糸を張ったところ,糸の長さが 15丈になった。このとき,等弦の本数(折れ線の数)を求めよ。

弦の本数を n とする。各弦は直角三角形の斜辺である。直角を挟む辺の長さは片方は 24尺であり,もう一方は 42/n 尺であるので,弦の長さは sqrt((42/n)^2 + 24^2) である。これが n 本あり,その合計が 15丈 = 150尺なので,以下の方程式を解けばよい。

include("julia-source.txt");

using SymPy

@syms n::positive;

eq = n * sqrt((42/n)^2 + 24^2) - 150
solve(eq)[1] |> println

   6

6 本である

using Printf
using Plots

function draw(more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   plot([0, 42, 42, 0, 0], [0, 0, 24, 24, 0], linecolor=:black, linewidth=0.5)
   plot!([0, 5, 10, 15, 20, 25], [24, 0, 24, 0, 24, 0], linestyle=[:solid, :solid, :solid, :solid, :solid, :solid], linecolor=:blue, linewidth=1)
   plot!([25, 27.5], [0, 12], linecolor=:blue, linestyle=:dash)
   if more == true
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5, xlims=(-2, 60))
   else
       plot!(showaxis=false)
   end
end;

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

算額(その262)

2023年06月04日 | Julia

算額(その262)

中村信弥「改訂増補 長野県の算額」
http://www.wasan.jp/zoho/zoho.html
県内の算額2(71)
長野県長野市 久保寺観音堂 享和3年(1803)

鉤股弦(直角三角形)の中に円と正方形が入っている。
方の一辺と円の直径の積が 672 平方寸,鉤股弦の周と中鉤の積が 5644.8 平方寸であるとき,方面(正方形の一辺)を求めよ。
注:この 2 つの数値を,小数でなくするために 10 倍するのは,正しくない。

以下の連立方程式を解く。

include("julia-source.txt");

using SymPy

@syms  鉤::positive, 股::positive, 弦::positive,
      中鉤::positive, 長弦::positive, 短弦::positive,
      方面::positive, 径::positive;

eq1 = 鉤^2 + 股^2 - 弦^2
eq2 = 短弦^2 + 中鉤^2 - 鉤^2
eq3 = 長弦^2 + 中鉤^2 - 股^2
eq4 = 弦 - 長弦 - 短弦
eq5 = 方面 * 径 - 672.0
eq6 = (鉤 + 股 + 弦) * 中鉤 - 5644.8
eq7 = 鉤 + 股 - 弦 - 径
eq8 = 方面 * (方面 + (股 - 方面)/2 + (鉤 - 方面)/2) - 鉤 * 股 / 2;
res = solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8])  #, (鉤, 股, 弦, 中鉤, 長弦, 短弦, 方面, 径))

   2-element Vector{Dict{Any, Any}}:
    Dict(股 => 56.0000000000000, 弦 => 70.0000000000000, 径 => 28.0000000000000, 短弦 => 25.2000000000000, 長弦 => 44.8000000000000, 方面 => 24.0000000000000, 鉤 => 42.0000000000000, 中鉤 => 33.6000000000000)
    Dict(股 => 42.0000000000000, 弦 => 70.0000000000000, 径 => 28.0000000000000, 短弦 => 44.8000000000000, 長弦 => 25.2000000000000, 方面 => 24.0000000000000, 鉤 => 56.0000000000000, 中鉤 => 33.6000000000000)

2 つの解が求まる。最初の解は「鉤 < 股」で,もう一方は裏返しに反転して回転する「鉤 > 股」のもので,本質的に同じものである。

なお,「solve([eq1, eq2, eq3, eq4, eq5, eq6, eq7, eq8], (鉤, 股, 弦, 中鉤, 長弦, 短弦, 方面, 径))」とすると解が求まらない(有限の時間内にできなさそう)。

for i = 1:2
   println("***** i = $i *****")
   println((res[i][鉤], res[i][股], res[i][弦], res[i][中鉤], res[i][長弦], res[i][短弦], res[i][方面], res[i][径]))
end

   ***** i = 1 *****
   (42.0000000000000, 56.0000000000000, 70.0000000000000, 33.6000000000000, 44.8000000000000, 25.2000000000000, 24.0000000000000, 28.0000000000000)
   ***** i = 2 *****
   (56.0000000000000, 42.0000000000000, 70.0000000000000, 33.6000000000000, 25.2000000000000, 44.8000000000000, 24.0000000000000, 28.0000000000000)

   鉤 = 42.00;  股 = 56.00;  弦 = 70.00;  中鉤 = 33.60;  長弦 = 44.80;  短弦 = 25.20; 方面 = 24.00;  径 = 28.00

答え:方面は 24 寸である。

using Printf
using Plots

function draw(more)
    pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (鉤, 股, 弦, 中鉤, 長弦, 短弦, 方面, 径) = (42.0000000000000, 56.0000000000000, 70.0000000000000, 33.6000000000000, 44.8000000000000, 25.2000000000000, 24.0000000000000, 28.0000000000000)
   # (鉤, 股, 弦, 中鉤, 長弦, 短弦, 方面, 径) = (56.0000000000000, 42.0000000000000, 70.0000000000000, 33.6000000000000, 25.2000000000000, 44.8000000000000, 24.0000000000000, 28.0000000000000)
   @printf("鉤 = %.2f;  股 = %.2f;  弦 = %.2f;  中鉤 = %.2f;  長弦 = %.2f;  短弦 = %.2f; 方面 = %.2f;  径 = %.2f\n", 鉤, 股, 弦, 中鉤, 長弦, 短弦, 方面, 径)
   plot([股, 股, 0, 股, 長弦*股/弦], [ 0, 鉤, 0, 0, 長弦*鉤/弦], linecolor=:black, linewidth=0.5)
   circle(股 - 径/2, 径/2, 径/2)
   plot!([股 - 方面, 股 - 方面, 股], [0, 方面, 方面], color=:black, lw=0.5)
   if more == true
       point(股 - 径/2, 径/2, "\n円:径/2\n(股-径/2,径/2)", :red, :center, :top)
       point(股 - 方面, 方面, "(股-方面,方面)", :red, :right, :bottom)
       point(股, 鉤/2, " 鉤", mark=false)
       point(股/2, 0, "股  ", :green, :right, :bottom, mark=false)
       point((股 + 長弦*股/弦)/2, 長弦*鉤/弦/2, "  中鉤", mark=false)
       point(長弦*股/弦/2, 長弦*鉤/弦/2, "長弦   \n", :green, :right, mark=false)
       point((股 + 長弦*股/弦)/2, (鉤 + 長弦*鉤/弦)/2, "短弦\n", :green, :right, :bottom, mark=false)
       point(股/2, 鉤/2, "弦 = 長弦 + 短弦   ", :green, :right, mark=false)
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
   else
       plot!(showaxis=false)
   end
end;

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

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

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