x2+y2=1のもとで 2x+3yの最大値・最小値「ラグランジュの未定乗数法」をChatGPTとMathematicaとWolframAlphaとsympyでやってみたい。

　＞等式制約付きの関数最大化・最小化問題
**・何も「ラグランジュの未定乗数法」を使わなくても？です。
　別解という事でよろしくお願いします。**
・WolframAlphaで3Dプロットがでます。

オリジナル 
高校数学の美しい物語 様より 三変数のラグランジュ関数

https://manabitimes.jp/math/879

# ChatGPTで(xxxラグランジュの未定乗数法で、できませんでした。xxx) できました。
入力文
```
x2+y2=1のもとで 2x+3yの最大値、最小値をラグランジュの未定乗数法を使ってもとめよ.
```
＞..したがって、制約条件x^2 + y^2 = 1の下で2x + 3yの最大値は13/2で、最小値は-13/2です。
すばらしいです。答えが違うけど、どこが？違うかわからない。
```
x2+y2=1のもとで 2x+3yの最大値、最小値をもとめよ.
```
＞...この問題は、ラグランジュの未定乗数法を使用する必要はありません。
＞...したがって、制約条件 x^2 + y^2 = 1 の下で、2x + 3y の最大値は √13 であり、最小値は -√13 です。
つづき？会話になっています。
**すばらしいです。答えも正解です。**　私がこう言えるのも今だけでしょうか？

# Mathematicaで
勉強中。Mathematicaならではです。

# WolframAlphaで(いつも？のやつ)
・ラグランジュの未定乗数法を使っていません。
・WolframAlphaで3Dプロットがでます。

https://www.wolframalpha.com/input?i=x2%2By2%3D1%2C2x%2B3y%E3%81%AE%E6%9C%80%E5%A4%A7%E5%80%A4%E3%80%81%E6%9C%80%E5%B0%8F%E5%80%A4+&lang=ja

結果 すばらしいです。

# sympyで(高校数学の美しい物語 様の方法を参考に) 
ラグランジュの未定乗数法で
```python
from sympy import *
var('x,y',real=True)
var('λ,L',real=True)
eq=Eq(x**2+y**2,1)
f =2*x+3*y
L=f-λ*(eq.lhs-eq.rhs)
# 
eq_dLdx=Eq(diff(L,x),0)
eq_dLdy=Eq(diff(L,y),0)
eq_dLdλ=Eq(diff(L,λ),0)
eq_dxdy=Eq(x,solve( Eq(solve(eq_dLdx,λ)[0],
                       solve(eq_dLdy,λ)[0]),x)[0])
ans=solve( [eq_dxdy,eq_dLdλ],[x,y] )
#
print("#",eq_dxdy)
print("#",ans[0])
print("#",ans[1])
print("#",f.subs({x:ans[0][0],y:ans[0][1]} ))
print("#",f.subs({x:ans[1][0],y:ans[1][1]} ))
# Eq(x, 2*y/3)
# (-2*sqrt(13)/13, -3*sqrt(13)/13)
# (2*sqrt(13)/13, 3*sqrt(13)/13)
# -sqrt(13)
# sqrt(13)
```

# sympyで(いつものx+y=kで)Plot Moduleで作図
ラグランジュの未定乗数法を使っていません。
minimum,maximum関数です。
```python
from sympy import *
var('x,y,k',real=True)
eq   =Eq(x**2+y**2,1      )
eqk  =Eq(k        ,2*x+3*y)
# 
y_ans=solve(eq,y)
k0   =eqk.rhs.subs({y:y_ans[0]})
k1   =eqk.rhs.subs({y:y_ans[1]})
k0_min=minimum(k0,x,Interval(-1,1))
k0_max=maximum(k0,x,Interval(-1,1))
k1_min=minimum(k1,x,Interval(-1,1))
k1_max=maximum(k1,x,Interval(-1,1))
print("#",solveset(Eq(k0,k0_min),x,Interval(-1,1)).args[0],k0_min)
print("#",solveset(Eq(k1,k1_max),x,Interval(-1,1)).args[0],k1_max)
# -2*sqrt(13)/13 -sqrt(13)
# 2*sqrt(13)/13 sqrt(13)

l0=solve( Eq(k0_min,eqk.rhs),y)[0]
l1=solve( Eq(k1_max,eqk.rhs),y)[0]
(st,en)=(-4,4)
p1=plot(sqrt(1-x**2),-sqrt(1-x**2),(x,-1,1), aspect_ratio=(1.0,1.0),xlim=(st,en),ylim=(st,en),show=False)
p2=plot(l0   ,(x,st,en), aspect_ratio=(1.0,1.0),show=False)
p3=plot(l1   ,(x,st,en), aspect_ratio=(1.0,1.0),show=False)
p1.extend(p2)
p1.extend(p3)
p1.show()
```
x+y=kの最大値,最小値
![0png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/6a75de24-c626-433d-fcbf-9c4cfae4a7e2.png)

# sympyで(微分で)
勉強中です。

# sympyで(sin,cosで)
勉強中です。

# sympyで(図形的に)
勉強中です。


# sympyの実行環境
①私の環境は,pycharmです。
②よく聞くのは、Jupyterです。
③web上で、上記のソースを「SymPy Live shell」に、コピー貼り付けでもできました。
黒背景の右上に、マウスを移動すると、コピーマークが発生します。
???　タブレット環境で、コピー貼り付けが実行できませんでした。???

https://live.sympy.org/

# 参考
wikipedia

https://en.wikipedia.org/wiki/Lagrange_multiplier

https://ja.wikipedia.org/wiki/ラグランジュの未定乗数法

2次元の場合＜

https://ja.wikipedia.org/wiki/ラグランジュの未定乗数法#2次元の場合

以下、いつもの?おすすめです。

https://qiita.com/mrrclb48z/items/75904cdc6e84ecef4d03#%E5%8F%82%E8%80%83wolframalpha-%E9%96%8B%E7%99%BA%E7%89%A9%E8%AA%9E