データ分析の上限に達しました。さらにご利用を続けるには無料の Plus をお試しください. もしくは、明日の 19:40 以降に制限がリセットされるまでお待ちください。
(本日は)待ちます。
・長文です。
オリジナル
数学①(経営情報・国際関係・人文学部)III < 前期入試A方式・B方式(2025年2月2日)
・問題文 ページの下の方
https://www.chubu.ac.jp/admissions/wp-content/uploads/sites/15/2025/07/03ab1-2025.pdf#page=4
・解答例
https://www.chubu.ac.jp/admissions/wp-content/uploads/sites/15/2025/07/03ab1-2025.pdf#page=132
・過去問題ダウンロード < 中部大学公式Webサイト
https://www.chubu.ac.jp/admissions/entrance-exams/questions/
https://www.chubu.ac.jp
(本日の)ChatGPT先生へ
問題文
・(PDFより)テキスト文です。いつものmathjaxを使っていません。(?私はわかっていない。)
III ABC において,BC = 7,AC = 5,∠A = 60◦ とする。このとき,次の問いに
答えよ。
(1) ABC を図示し,辺 AB の長さを求めよ。
(2) 辺 AC 上に点 D をとり,AD = x とする。辺 AB 上に EB = 2x となるように
点 E をとる。x の取り得る値の範囲を求めよ。
(3) 四角形 CDEB の面積を S(x) とする。x を用いて,S(x) を表せ。
(4) (2) で求めた範囲において,S(x) の最小値を求めよ。
回答抜粋
(4)...S(x)の最小値は S(2)=8√3 である。
座標図を教えて下さい。
角度と長さを追加して下さい。
(表示省略)
BCを水平にして下さい。
sympyで教えて下さい。print 文の(1),(2),(3),(4)でお願いします。
BC を水平にした座標配置を SymPy で計算して求める方法 を示します。
(数値ではなく SymPy による厳密計算 です。)
# ver0.1
# SymPyで(1)〜(4)を表示するコード(そのまま実行できます)
import sympy as sp
from sympy.geometry import Point, Polygon
# シンボル
x = sp.symbols('x', real=True)
# 点の設定(A=(0,0), B=(8,0), C は AC=5, ∠A=60°)
A = Point(0, 0)
B = Point(8, 0)
C = Point( sp.Rational(5)*sp.cos(sp.pi/3), sp.Rational(5)*sp.sin(sp.pi/3) ) # (5*cos60, 5*sin60)
# (1) AB の長さ
AB_len = A.distance(B).simplify()
# (2) x の取り得る範囲
# AD = x -> 0 <= x <= AC (=5)
# EB = 2x on AB (0 <= 2x <= AB=8) -> 0 <= x <= 4
range_x = sp.Interval(0,5).intersect(sp.Interval(0,4))
# (3) S(x):四角形 C-D-E-B の面積
t = x/5 # D は A + t*(C-A)
D = Point( A.x + t*(C.x - A.x), A.y + t*(C.y - A.y) )
E = Point(8 - 2*x, 0) # EB = 2x -> AE = 8 - 2x
poly_CDEB = Polygon(C, D, E, B)
Sx = sp.simplify(poly_CDEB.area) # 面積の式(x の式)
# (4) S(x) の最小値(区間 [0,4])
dSdx = sp.diff(Sx, x)
crit_points = sp.solve(sp.Eq(dSdx, 0), x)
# 区間内の実数解だけ選ぶ
crit_in_interval = [pt for pt in crit_points if pt.is_real and pt >= 0 and pt <= 4]
candidates = crit_in_interval + [sp.Integer(0), sp.Integer(4)]
values = [(pt, sp.simplify(Sx.subs(x, pt))) for pt in candidates]
# 数値で比較して最小を選ぶ
x_min, S_min = min(values, key=lambda item: float(item[1]))
# print 文(要求どおり (1),(2),(3),(4))
print("(1) AB の長さ = ", AB_len)
print("(2) x の取り得る値の範囲 = ", range_x)
print("(3) S(x) = ", sp.simplify(Sx))
print("(4) S(x) の最小値: x =", sp.simplify(x_min), ", S_min =", sp.simplify(S_min))
(1) AB の長さ = 8
(2) x の取り得る値の範囲 = Interval(0, 4)
(3) S(x) = sqrt(3)*(x*(x - 4) + 20)/2
(4) S(x) の最小値: x = 2 , S_min = 8*sqrt(3)
データ分析の上限に達しました。さらにご利用を続けるには無料の Plus をお試しください. もしくは、明日の 19:40 以降に制限がリセットされるまでお待ちください。
待ちます。
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
(その2) を先に投稿しました。勉強中。
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
単なる余弦定理の公式と思っていましたが、手こずっています。
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
S(x)のグラフを表示して下さい。
最大値の位置
sympyで(解答例 を参考に)
・やっぱり楽したら、ダメかも。次ページの 3^4通りのどれかだといいです。
ver1.0
・余弦定理で
# ver 1.0
from sympy import *
var('AB,x',positive=True)
BC,AC,degA=7,5,60
AB =solve(Eq(BC**2,AC**2+AB**2-2*AC*AB*cos(degA*Rational(1,180)*pi)),AB)[0] ;print("#",AB)
range_x=Interval(0,AC).intersect(Interval(0,AB/2)) ;print("#",range_x)
S_x =( Rational(1,2)*AC*AB *sin(degA*Rational(1,180)*pi) \
-Rational(1,2)*x *(AB-2*x)*sin(degA*Rational(1,180)*pi)).expand().simplify() ;print("#",S_x)
S_x_min=minimum(S_x,x,range_x)
print("#",solve(Eq(S_x,S_x_min),x)[0],S_x_min)
# 8
# Interval(0, 4)
# sqrt(3)*(x**2 - 4*x + 20)/2
# 2 8*sqrt(3)
ver1.1
・inequality をもう少し細かく?
# ver 1.1
from sympy import *
from sympy.solvers.inequalities import solve_univariate_inequality
AB, x = symbols('AB x', real=True)
def inequality_to_interval_complete(ineq, var):
if ineq is True:
return S.Reals
if ineq is False:
return S.EmptySet
if isinstance(ineq, And):
intervals = [
solve_univariate_inequality(arg, var, relational=False)
for arg in ineq.args
]
return Intersection(*intervals).intersect(S.Reals)
sol = solve_univariate_inequality(ineq, var, relational=False)
return sol.intersect(S.Reals)
BC,AC,degA=7,5,60
AB =solve(Eq(BC**2,AC**2+AB**2-2*AC*AB*cos(degA*Rational(1,180)*pi)),AB)[1] ;print("#",AB)
k =2
range_x=inequality_to_interval_complete((0 <= k*x) & (k*x <= AB), x) ;print("#",range_x)
S_x =( Triangle(sas=(AB ,60,AC)).area \
-Triangle(sas=(AB-2*x,60,x )).area).expand().simplify() ;print("#",S_x)
S_x_min=minimum(S_x,x,range_x)
print("#",solve(Eq(S_x,S_x_min),x)[0],S_x_min)
# 8
# Interval(0, 4)
# sqrt(3)*(x**2 - 4*x + 20)/2
# 2 8*sqrt(3)
sympyで(いつもの方法で) 力技?
>
ver1.2
# ver1.2
データ分析の上限に達しました。さらにご利用を続けるには無料の Plus をお試しください. もしくは、明日の 19:50 以降に制限がリセットされるまでお待ちください。
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
いつもの? sympyの実行環境と 参考のおすすめです。
sympyのweb上での実行方法
SymPy Live Shellで。FreeCADのマクロは、以下で実行できません。
https://qiita.com/mrrclb48z/items/00dd08b0317069be9342#web%E4%B8%8A%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%96%B9%E6%B3%95sympy-live-shell%E3%81%A7
いつもと違うおすすめです。
sympy のdoc
ver0.1
・


