裏 RjpWiki

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

算額(その607)

2024年01月03日 | Julia

算額(その607)

高山忠直編: 算法評論
国立国会図書館 デジタルコレクション

https://dl.ndl.go.jp/pid/3508431/1/12

直角三角形内に,3 つの頂点が 3 つの辺上にある正方形を入れる。直角三角形の直角を挟む 2 辺の長さ(鈎,股とする)が与えられたとき,正方形の一辺の長さを得る方法を示せ。

辺上の頂点座標を (x1, 0), (0, y2), (x3, y3) とおき,以下の連立方程式を解く。
正方形の大きさは x1 により変わるので,鈎,股,x1 を含む式になる。
この問題は,算額(その491)と基本的に同じである。正方形の大きさは x1 に依存するので,算額(その491)は最小の正方形になるときの x1 を求めるものであった。

include("julia-source.txt");

using SymPy
@syms 鈎, 股, x1, y2, x3, y3, x4, y4
@syms 鈎::positive, 股::positive, x1::positive, y2::positive, x3::positive, y3::positive, x4::positive, y4::positive
x4 = x1 + x3
y4 = y3 - y2
eq1 = x3^2 + (y3 - y2)^2 - (x1^2 + y2^2)
eq2 = -y2/x1 * (y3 - y2)/x3 + 1
eq3 = y3/(股 - x3) - 鈎//股
res = solve([eq1, eq2, eq3], (y2, x3, y3))

   2-element Vector{Tuple{Sym, Sym, Sym}}:
    (股*(-x1 + 鈎)/(股 + 鈎), 股*(-x1 + 鈎)/(股 + 鈎), 鈎*(x1 + 股)/(股 + 鈎))
    (股*(x1 + 鈎)/(股 - 鈎), -股*(x1 + 鈎)/(股 - 鈎), 鈎*(x1 + 股)/(股 - 鈎))

2 組の解が得られるが,最初のものが適解である。

正方形の一辺の長さは sqrt(x1^2 + y2^2) = sqrt(x1^2 + (股*(-x1 + 鈎)/(股 + 鈎))^2) である。

sqrt(x1^2 + (股*(-x1 + 鈎)/(股 + 鈎))^2) |> println

   sqrt(x1^2 + 股^2*(-x1 + 鈎)^2/(股 + 鈎)^2)

鈎 = 3,股 = 5, x1 = 1.2 のとき,y2 = 1.125,一辺の長さは sqrt(1.2^2 + 1.125^2) = 1.644878414959598 である。

鈎 = 3
股 = 5
x1 = 1.2
y2 = 股*(-x1 + 鈎)/(股 + 鈎)
y2 |> println
sqrt(x1^2 + (股*(-x1 + 鈎)/(股 + 鈎))^2) |> println
sqrt(1.2^2 + 1.125^2) |> println

   1.125
   1.644878414959598
   1.644878414959598

一辺の長さ = 1.64488;  x1 = 1.2;  y2 = 1.125; x3 = 1.125;  y3 = 2.325;  x4 = 2.325;  y4 = 1.2

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (鈎, 股) = (3, 5)
   x1 = 1.2
   (y2, x3, y3) = (股*(-x1 + 鈎)/(股 + 鈎), 股*(-x1 + 鈎)/(股 + 鈎), 鈎*(x1 + 股)/(股 + 鈎))
   方面 = sqrt(x1^2 + (股*(-x1 + 鈎)/(股 + 鈎))^2)
   x4 = x1 + x3
   y4 = y3 - y2
   @printf("一辺の長さ = %g;  x1 = %g;  y2 = %g; x3 = %g;  y3 = %g;  x4 = %g;  y4 = %g\n", 方面, x1, y2, x3, y3, x4, y4)
   plot([0, 股, 0, 0], [0, 0, 鈎,  0], color=:black, lw=0.5)
   plot!([x1, x4, x3, 0, x1], [0, y4, y3, y2, 0], color=:blue, lw=0.5)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(x1, 0, "x1  ", :blue, :right, :bottom, delta=delta)
       point(x1 + x3, y3 - y2, " (x1+x3,y3-y2)", :blue, :left, :vcenter)
       point(x3, y3, " (x3,y3)", :blue, :left, :vcenter)
       point(0, y2, "  y2", :blue, :left, :vcenter)
       point(0, 鈎, "  鈎", :red, :left, :vcenter)
       point(股, 0, "股", :red, :center, :bottom, delta=2delta)
   end
end;

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

算額(その606)

2024年01月03日 | Julia

算額(その606)

高山忠直編: 算法評論
国立国会図書館 デジタルコレクション

https://dl.ndl.go.jp/pid/3508431/1/20

大円,中円,小円は同心円である。大円と中円の円周の和は173.8寸,直径の差は 5 寸,中円と小円の矢(半径の差)は 3.828 寸である。小円の直径と中円に内接する正六角形の一辺の長さを求めよ。

大円,中円,小円の半径を r1, r2, r3 とする。また円周率を 3.16(円積率 = 7.79)として,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms r1::positive, r2::positive, r3::positive, 円周率::positive
円周率 = 3.16
eq1 = 2円周率*(r1 + r2) - 173.8
eq2 = 2(r1 - r2) - 5
eq3 = r2 - r3 - 3.828
solve([eq1, eq2, eq3])#, (r1, r2, r3))

   Dict{Any, Any} with 3 entries:
     r3 => 8.67200000000000
     r2 => 12.5000000000000
     r1 => 15.0000000000000

小円の直径は 2✕8.672 = 17.344 = 1尺7寸3分4厘4毛
中円に内接する正六角形の一辺の長さは中円の半径と同じ 1尺2寸5分である。問では「正六角形の一辺の長さ」を問うているが,答では「方面1尺2寸2分」としている。

小円の直径 = 17.344;  正六角形の一辺の長さ = 12.5;  r1 = 15;  r2 = 12.5;  r3 = 8.672

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   (r1, r2, r3) = (15, 12.5, 8.672)
   @printf("小円の直径 = %g;  正六角形の一辺の長さ = %g;  r1 = %g;  r2 = %g;  r3 = %g\n", 2r3, r2, r1, r2, r3)
   plot()
   circle(0, 0, r1, :black)
   circle(0, 0, r2, :red)
   circle(0, 0, r3, :green)
   θ = 30:60:390
   plot!(r2.*cosd.(θ), r2.*sind.(θ), color=:blue, lw=0.5)
   segment(0, r3, 0, r2, :black, lw=2)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(0, (r2 + r3)/2, " 矢", :black, :left, :vcenter, mark=false)
       point(r1, 0, "r1 ", :black, :right, :bottom, delta=delta/2)
       point(r2, 0, "r2 ", :red, :right, :bottom, delta=delta/2)
       point(r3, 0, "r3 ", :green, :right, :bottom, delta=delta/2)
   end
end;

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

万博開催よりも震災復興を優先せよ

2024年01月03日 | 雑感

万博開催よりも震災復興を優先せよ

大規模地震が発生し、その被害が膨大なものとなっている。建物の倒壊、道路の寸断、人々の避難生活──これはまさに国家全体が巻き込まれる災害である。この厳しい状況の中で、我が国は万博の開催に拘る余裕があるのだろうか?

一方で、万博の費用は際限なく膨れ上がり、無駄ではないかとの指摘がある。この経済的な重荷を背負いながら、参加国の準備状況も芳しくない。万博への参加国が十分な準備を整えておらず、それどころか深刻な問題が噴出しているのは否めない。この状態で万博を強行することは、主催国としての信頼をも失墜させる可能性が高い。

今こそ、政府は国民の安全と福祉を最優先に考え、万博の開催を取りやめるべきだ。万博などやっている場合ではない。被災地の復興が喫緊の課題である。資源や予算を万博に費やすのではなく、復興に力を注ぐべきだ。

万博開催には多額の投資が必要であり、建設資材や人員競合の問題を引き起こす。国際的な催しであるとはいえ、今回の災害の現実を直視し、国を挙げて復興支援に注力することこそが重要である。

万博を開催することを既定事実とするのではなく、国家の安全と国民の生活基盤を守り、そして災害復興に全力を注ぐことが求められている。今こそ、冷静な判断と国益を最優先にする視点が必要だ。

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

算額(その605)

2024年01月03日 | Julia

算額(その605)

高山忠直編: 算法評論
国立国会図書館 デジタルコレクション

https://dl.ndl.go.jp/pid/3508431/1/20

半円内に甲,乙,丙の半円が入っている。甲円の直径の半分が乙円の直径,更に乙円の直径の半分が丙円の直径になっている。大円の直径が 11 寸のとき,丙円の直径はいかほどか。

問の図では明瞭ではないが,丙円の中心は乙円の円周上にあり,乙円の中心は甲円の円周上にある(そのように仮定しないと解けない)。

甲円の半径と中心座標を r1, (R - r1, 0)
乙円の半径と中心座標を r2, (R - 2r1, 0)
丙円の半径と中心座標を r3, (r3 - R, 0)
とおき,以下の連立方程式を解く。

include("julia-source.txt");

using SymPy
@syms R::positive, r1::positive, r2::positive, r3::positive
eq1 = r2 - r1//2
eq2 = r3 - r2//2
eq3 = (r3 - R + r2) - (R - 2r1)
solve([eq1, eq2, eq3], (r1, r2, r3))

   Dict{Any, Any} with 3 entries:
     r2 => 4*R/11
     r3 => 2*R/11
     r1 => 8*R/11

丙円の半径は外円の半径の 2/11 倍である(甲円,乙円の半径はそれぞれ 8/11 倍,4/11 倍である)。
よって,外円の直径が 11 寸のとき,丙円の直径は 2 寸(甲円,乙円はそれぞれ 8 寸,4 寸)。

function draw(more=false)
   pyplot(size=(500, 500), grid=false, aspectratio=1, label="", fontfamily="IPAMincho")
   R = 11/2
   (r1, r2, r3) = (8, 4, 2) .* (R/11)
   @printf("丙円の直径 = %g;  R = %g;  r1 = %g;  r2 = %g;  r3 = %g\n", 2r3, R, r1, r2, r3)
   plot()
   circle(0, 0, R, :black, beginangle=0, endangle=180)
   circle(R - r1, 0, r1, :blue, beginangle=0, endangle=180)
   circle(R - 2r1, 0, r2, :red, beginangle=0, endangle=180)
   circle(r3 - R, 0, r3, :green, beginangle=0, endangle=180)
   if more
       delta = (fontheight = (ylims()[2]- ylims()[1]) / 500 * 10 * 2) /3  # size[2] * fontsize * 2
       hline!([0], color=:black, lw=0.5)
       vline!([0], color=:black, lw=0.5)
       point(R - r1, 0, " 甲円:r1\n R-r1", :blue, :left, :bottom, delta=delta)
       point(R - 2r1, 0, " 乙円:r2\n R-2r1", :red, :left, :bottom, delta=delta)
       point(r3 - R, 0, " 丙円:r3\n r3-R", :green, :left, :bottom, delta=delta)
       point(R, 0, "大円:R ", :black, :right, :bottom, delta=delta)
   end
end;

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

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

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