1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

4x+y<= 9, x+2y >= 4, 2x-3y >= -6の時、2x+y、x^2+y^2の最大値と最小値「2010 京都大学 文系【2】」(その2) ChatGPTとsympyでやってみたい。

Last updated at Posted at 2024-06-12

(その1) RとWolframAlphaとCVXPY(非線型計画法)でやってみた。2021年03月30日
https://qiita.com/mrrclb48z/items/57602db64e2133a5f813

(再)オリジナル

・大学入試数学問題集成 様> 文系【2】 テキスト

・望星塾 様> 文系【2】 解答

>最大値は6。最小値は2。
>最大値は11.25。3.2が最小値である。

ChatGPT-3.5先生へ(1回目)

大学入試数学問題集成 様> 文系【2】 テキスト

・ページのソースを表示です。MathMLです。
 省略しようと思いましたが、大学入試数学問題集成 様 の全文から必要部分の抜粋です。

<div class="qbody">
<p class="slevel"><a name="q-0103" 
id="q-0103"></a><span 
class="qnum">【2】</span> 座標平面上の点<math>
<mspace width=".2em"></mspace><mi mathvariant="normal">P</mi>
<mo lspace=".5em" stretchy="false">(</mo>
<mi>x</mi><mo>,</mo><mi>y</mi><mo rspace=".2em" stretchy="false">)</mo>
</math>が<math>
<mspace width=".2em"></mspace><mn>4</mn><mo>&it;</mo>
<mi>x</mi><mo>+</mo><mi>y</mi><mo>&lE;</mo>
<mn>9</mn><mspace width=".2em"></mspace><mtext>,</mtext>
</math><math>
<mrow><mi>x</mi><mo>+</mo><mn>2</mn><mo>&it;</mo>
<mi>y</mi><mo>&gE;</mo><mn>4</mn>
<mspace width=".2em"></mspace><mtext>,</mtext></mrow>
</math><math>
<mrow><mn>2</mn><mo>&it;</mo><mi>x</mi><mo>-</mo>
<mn>3</mn><mo>&it;</mo><mi>y</mi><mo>&gE;</mo>
<mo>-</mo><mn>6</mn></mrow><mspace width=".2em"></mspace>
</math>の範囲を動くとき,<math>
<mrow><mn>2</mn><mo>&it;</mo><mi>x</mi><mo>+</mo>
<mi>y</mi><mspace width=".2em"></mspace><mtext>,</mtext>
</mrow>
</math><math>
<mrow><msup><mi>x</mi><mn>2</mn></msup>
<mo>+</mo><msup><mi>y</mi><mn>2</mn></msup>
</mrow><mspace width=".2em"></mspace>
</math>のそれぞれの最大値と最小値を求めよ.
</p>
</div>
</div>

結果
関数 2𝑥+yの最大値は 6、最小値は 2。
???関数 x^2+y^2 の最大値は 11.25、最小値は 4。

>望星塾 様 
>最大値は6。最小値は2。
>最大値は11.25。3.2が最小値である。

ChatGPT-3.5先生へ(2回目) sympyのソースコード

sympyのソースコードをお願いします
import sympy as sp

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

# 不等式の定義
inequality1 = 4*x + y - 9 <= 0
inequality2 = x + 2*y - 4 >= 0
inequality3 = 2*x - 3*y + 6 >= 0

# 目的関数の定義
f1 = 2*x + y
f2 = x**2 + y**2

# 不等式をリストにまとめる
inequalities = [inequality1, inequality2, inequality3]

# 範囲を求める関数
def find_extrema(func):
    extrema = []
    for ineq in inequalities:
        solution = sp.solve([ineq, sp.Eq(sp.diff(func, x), 0), sp.Eq(sp.diff(func, y), 0)], (x, y), dict=True)
        extrema.extend(solution)
    boundary_points = []
    for i in range(len(inequalities)):
        for j in range(i+1, len(inequalities)):
            boundary_solution = sp.solve([inequalities[i], inequalities[j]], (x, y))
            if boundary_solution:
                boundary_points.append(boundary_solution)
    extrema.extend(boundary_points)
    return extrema

# 極値の計算
extrema_f1 = find_extrema(f1)
extrema_f2 = find_extrema(f2)

# 最大値と最小値の計算
max_f1 = max([f1.subs(point) for point in extrema_f1])
min_f1 = min([f1.subs(point) for point in extrema_f1])
max_f2 = max([f2.subs(point) for point in extrema_f2])
min_f2 = min([f2.subs(point) for point in extrema_f2])

# (max_f1, min_f1), (max_f2, min_f2)
print("#", (max_f1, min_f1), (max_f2, min_f2))

ValueError: can only solve for one symbol at a time

申し訳ありません。私は、ここまでです。

1
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?