LoginSignup
1
0

高校入試整数 反比例「2024 愛知県高校入試 数学大問1(7)」をChatGPTとsympyでやってみたい。グラフ作図追加

Last updated at Posted at 2024-03-12

長文です。

グラフ作図追加しました。(2024/03/13)
・パイソニスタの方へ
・ChatGPT-3.5先生への、私の質問の仕方が悪いですか?
・sympyの直し方もわかりませんでした。
・結果だけなら2,3行で、できますか?

オリジナル

中日進学ナビ 様

https://edu.chunichi.co.jp/site_home/highschool/pdf/2024_sugaku_q.pdf#page=4
 

東進 様

大問1(7)
2024/03/13
現在、ご利用いただけない状態となっております。
時間を置いて再度ご利用願います。

https://www.toshin.com/koukou_nyushi/files/2024/sugaku_q/aichi_sugaku_q.pdf#page=4
<2024年全国公立高校入試解答速報|大学受験の予備校・塾 東進
https://www.toshin.com/koukou_nyushi/

東亜紗美moveforward数学教室 様

youtube 大問1(7)。途中からです。(1:06:07) 2024年愛知県公立高校入試<数学>解説
https://youtu.be/ogDFpAdUqW0?t=90

➀ChatGPT-3.5先生へ(計算のみ)

yがxに反比例し,x=4のときy=3である関数のグラフ上の点で、x座標とy座標がとも
に整数であり,x座標がy座標よりも小さい点は何個あるか。

???

...y 座標よりも小さい点は3つあります。
負の数も含めて下さい。

???

...全部で 12 個あります。
6個になりませんか
申し訳ありません、数え方に誤りがありました。再度、正しい方法で計算してみましょう。
...6+6=12 個の点が求められます。
sympyで

(途中省略)
・以下は、ChatGPT-3.5先生が出力されたソースコードです。

from sympy import symbols, Eq, solve

# 変数の定義
x, y = symbols('x y')

# 与えられた関数
y = 12 / x

# x座標とy座標が整数である条件
integer_condition = Eq(y, 12 / x)

# x座標がy座標よりも小さい条件
inequality_condition = x < y

# x座標とy座標が整数であり、かつx座標がy座標よりも小さい点を求める
integer_points = []

for i in range(-12, 0):
    if integer_condition.subs(x, i).is_integer and inequality_condition.subs(x, i):
        integer_points.append(i)

for i in range(1, 13):
    if integer_condition.subs(x, i).is_integer and inequality_condition.subs(x, i):
        integer_points.append(i)

# 結果の出力
print("x座標とy座標がともに整数であり、かつx座標がy座標よりも小さい点の個数:", len(integer_points))

・SymPy Liveで(PC?でのみ実行できます。)

x座標とy座標がともに整数であり、かつx座標がy座標よりも小さい点の個数:0

(私)??? 私は、どこが間違っているかわかりませんでした。教えて下さい。

wolframalpha でも

>Wolfram|Alphaは,このクエリが理解できません.

➁ChatGPT-3.5先生へ(作図したい) 

・直し方がわからなかったのであきらめました。 なんだかスゴすぎる。

yがxに反比例し,x=4のときy=3である関数のグラフ上の点で、x座標とy座標がとも
に整数であり,x座標がy座標よりも小さい点をsympyで作図したい。

(途中省略)
・以下は、ChatGPT-3.5先生が出力されたソースコードです。負の数が考慮されていません。

import sympy as sp
import matplotlib.pyplot as plt

# 変数の定義
x = sp.Symbol('x')
y = sp.Symbol('y')

# 与式
eq = sp.Eq(y, 12 / x)

# x = 4 のときのyの値
y_value = eq.rhs.subs(x, 4)

# yが整数のときのxの値の範囲を求める
x_values = [i for i in range(1, 5)]

# x座標がy座標より小さい点を見つける
points = []
for val in x_values:
    y_val = eq.rhs.subs(x, val)
    if sp.Integer(y_val):
        if val < y_val:
            points.append((val, y_val))

# グラフの描画
x_points = [point[0] for point in points]
y_points = [point[1] for point in points]

plt.plot(x_points, y_points, 'bo')  # プロット
plt.xlabel('x')
plt.ylabel('y')
plt.title('Graph of the Function')
plt.grid(True)
plt.show()

1.png

③sympyで(私のいつもの方法で)

・私のこれで十分な気もします。
https://www.geeksforgeeks.org/python-sympy-divisors-method/

from sympy import *
var('i',integer=True)
n =4*3
ic=0
for i in divisors(n):
    if -i< n/-i:
        ic+=1
for i in divisors(n):
    if i< n/i:
        ic+=1
print("#",ic)
# 6

・ついでに作図も。
・わからなかったので、stackoverflowをコピーしました。
https://stackoverflow.com/questions/73380769/how-to-plot-an-array-of-points-in-sympy-python3-onto-the-plot-of-a-function

from sympy import *
from sympy import sympify, plot
var('x')
string = '12/x'
func = sympify(string, convert_xor=True)

from sympy import *
var('i',integer=True)
n =4*3
xp=[]
for i in list(reversed(divisors(n))):
    if -i< n/-i:
        xp=xp+[-i]
for i in divisors(n):
    if i< n/i:
        xp=xp+[i]
# 
string = '12/x'
guess = xp
guess_y = [func.subs('x', g).evalf() for g in guess]
ax1=plot(func, xlim=(-15, 15), ylim=(-15, 15), markers=[{'args': [guess, guess_y, 'ro']}],show=False)
ax2=plot(x,show=False)
ax1.extend(ax2)
ax1.show()

・おしい。でした。6個でした。
1.png

オリジナル 様の方法で

勉強中
???比例定数

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

いつもと違うおすすめです。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0