2変数関数の最大最小「学習院大学文学部2023年度数学第4問」をMathematicaとWolframAlphaとsympyでやってみたい。

パイソニスタの方へ
・python、sympyで、**abs→Piecewiseのコンバータ**を探しています。
例
abs(x)     --->Piecewise((-x, x < 0), (x, True))
abs(x**2-4)--->?
abs(sin(x))--->?

・maximum,minimumの引数について。
absは,わからなかったので、Piecewiseで対応しました。

よろしくお願いします。

# 「xy-z」「x-z」,「θ-z」 のグラフがでます。
「今、はやり風?」で言うと、以下でしょうか。
**RｘR→R**
＞Rに棒が一本ついたような数学記号
https://www.deepl.com/ja/translator#en/ja/Essence%20of%20Mathematics
https://www.deepl.com/ja/translator#en/ja/logic%20and%20mapping

# オリジナル(youtube)
なかけんの数学ノート 様

https://youtu.be/tdmQD-6NGM4

上と同じです。大学入試数学問題集成＞【４】テキスト
未登録

# Mathematicaで
勉強中。
以下のMathematicaを使う方法が、一番楽です。
＞制約条件に従って関数を最大化する：

https://reference.wolfram.com/language/ref/Maximize.html.ja?source=footer

```python
In:
ParametricPlot3D[{Cos[t], Sin[t], 
  Sin[t] + Abs[2 Cos[t] + 1] + Abs[2 Sin[t] - 1]}, {t, 0, 2 \[Pi]}]
```
https://www.ms.u-tokyo.ac.jp/~tsuboi/urabe/public_html/geom/param7.html

(表示方法勉強中)

```python
In:
ParametricPlot3D[{Cos[t], Sin[t], 
  Sin[t] + Abs[2 Cos[t] + 1] + Abs[2 Sin[t] - 1]}, {t, 0, 2 \[Pi]}, 
 ViewPoint -> Top]

ParametricPlot3D[{Cos[t], Sin[t], 
  Sin[t] + Abs[2 Cos[t] + 1] + Abs[2 Sin[t] - 1]}, {t, 0, 2 \[Pi]}, 
 ViewPoint -> Front]
```

ViewPoint -> Top
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/85967c5d-e806-7f06-70a0-abe9114750c5.png)

ViewPoint -> Front
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/0e20ac37-99a9-840b-62a5-30a514f52acd.png)

# WolframAlphaで
#### 「xy-z」のグラフがでます。

https://www.wolframalpha.com/input?i=x2%2By2%3D1%2Cz%3Dy%2B%7C2x%2B1%7C%2B%7C2x-1%7C%E3%80%80%E3%81%AE%E6%A5%B5%E5%80%A4&lang=ja

最大値

(x, y) = (-4/sqrt(17), 1/sqrt(17)) のとき, max{y + abs(2 x + 1) + abs(2 x - 1)|x^2 + y^2 = 1} = sqrt(17)

(x, y) = (4/sqrt(17), 1/sqrt(17)) のとき, max{y + abs(2 x + 1) + abs(2 x - 1)|x^2 + y^2 = 1} = sqrt(17)

最小値

(x, y) = (0, -1) のとき, min{y + abs(2 x + 1) + abs(2 x - 1)|x^2 + y^2 = 1} = 1

#### 「θ-z」のグラフがでます。

https://www.wolframalpha.com/input?i=0%3C%3D%CE%B8%3C2%CF%80%2Cz%3Dsin%CE%B8%2B%7C2cos%CE%B8%2B1%7C%2B%7C2cos%CE%B8-1%7C%E3%80%80%E3%81%AE%E6%A5%B5%E5%80%A4&lang=ja

(結果を省略)

#### 参考

https://www.wolframalpha.com/input?i=sin%CE%B8%2Babs%282cos%CE%B8%2B1%29%2Babs%282cos%CE%B8-1%29

https://www.wolframalpha.com/input?i=sin%CE%B8%2Babs%282cos%CE%B8%2B1%29%2Babs%282cos%CE%B8-1%29%E3%81%AE%E6%A5%B5%E5%80%A4

https://www.wolframalpha.com/input?i=0%3C%CE%B8%3C2%CF%80%2Cz%3Dsin%CE%B8%2B%7C2cos%CE%B8%2B1%7C%2B%7C2cos%CE%B8-1%7C&lang=ja

# ①sympyで(なかけんの数学ノート様の方法を参考に)

```python
from sympy import *
θ  =symbols('θ'  ,real=True)
k  =symbols('k'  ,real=True)
x,y=symbols('x,y',real=True)
myEq  =Eq(k,y+abs(2*x+1)+abs(2*x-1))
x1_max=( 4)/(sqrt(1+4**2))
x2_max=(-4)/(sqrt(1+4**2))
y_max =( 1)/(sqrt(1+4**2))
print("# " ,x1_max,x2_max,y_max      ,myEq.rhs.subs({x:x1_max,y:y_max}))
print("# ",0.0    ,' '*24,-1.0 ,' '*6,myEq.rhs.subs({x:0.0   ,y:-1.0 }))
#  4*sqrt(17)/17 -4*sqrt(17)/17 sqrt(17)/17 sqrt(17)
#  0.0                          -1.0        1.00000000000000
```

# ②sympyで(最大最小は、x-zの計算です。)
今回、(1) 関数のグラフの作図　と　(2) 最大最小　に分けています。

#### (1) 関数のグラフの作図
absとPiecewiseで、同じです。
```python
from sympy import *
x,y=symbols('x,y',real=True)
y=3-abs(2*x+1)-abs(2*x-1)
plot(y,(x,-2,2))
p=Piecewise((4*x+3, x < -1/2), (1, x < 1/2), (-4*x+3, True))
plot(p,(x,-2,2))
```

・plotの縦横比異なります。
・点plotの方法。勉強中。
abs
![0png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/4cda1d1c-6abe-2db1-b0df-9919df2a273a.png)

Piecewise
![1Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/b4af08a4-b54b-275a-2661-e303fdf374ff.png)
`
#### (2) 最大最小
xとｚで計算しました。
absはわからなかったので、Piecewiseで対応しました。
```python
from sympy import *
x,y=symbols('x,y',real=True)
y  = sqrt(1-x**2)
# absはわからなかったので、Piecewiseで対応しました。
# zp = sqrt(1-x**2)+abs(2*x+1)+abs(2*x-1)
# zm =-sqrt(1-x**2)+abs(2*x+1)+abs(2*x-1)
zp = sqrt(1-x**2)+Piecewise( (-(2*x+1), x < -1/2), (2*x+1, True))+Piecewise(( -(2*x-1), x < 1/2), (2*x-1, True))
zm =-sqrt(1-x**2)+Piecewise( (-(2*x+1), x < -1/2), (2*x+1, True))+Piecewise(( -(2*x-1), x < 1/2), (2*x-1, True))
# p_zp=plot(zp,(x,-1,1),show=False)
# p_zm=plot(zm,(x,-1,1),show=False)
# p_zp.extend(p_zm)
# p_zp.show()
zmax=maximum(zp,x,Interval(-1,1))
zmin=minimum(zm,x,Interval(-1,1))
xmax=solveset(Eq(zp,zmax),x,Interval(-1,1))   
xmin=solveset(Eq(zm,zmin),x,Interval(-1,1))
print("#",xmax.args[0],xmax.args[1], y.subs({x:xmax.args[0]})      ,zmax)
print("#",xmin.args[0],' '*26      ,-y.subs({x:xmin.args[0]}),' '*9,zmin)
# -4*sqrt(17)/17 4*sqrt(17)/17 sqrt(17)/17 sqrt(17)
# 0                            -1           1
```
「x-z」のグラフです。

![0png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/5b9bca5a-8c37-ae6c-a2db-499b0053b28a.png)

# ③sympyで(θ-zの計算です。)
```python
from sympy import *
θ=symbols('θ',real=True)
z=sin(θ)+abs(2*cos(θ)+1)+abs(2*cos(θ)-1)
# plot(z,(θ,0,2*pi))
# absは,わからなかったので、Piecewiseで対応しました。
# zmax=maximum(z,θ,Interval(0,2*pi))
# zmin=minimum(z,θ,Interval(0,2*pi))
z=sin(θ)+Piecewise( ((2*cos(θ)+1), θ<pi/3*2),(-(2*cos(θ)+1), θ<pi/3*4), (2*cos(θ)+1, True)) \
        +Piecewise( ((2*cos(θ)-1), θ<pi/3*1),(-(2*cos(θ)-1), θ<pi/3*5), (2*cos(θ)-1, True))
zmax=maximum (   z      ,θ,Interval(0,2*pi))
zmin=minimum (   z      ,θ,Interval(0,2*pi))
θmax=solveset(Eq(z,zmax),θ,Interval(0,2*pi))
θmin=solveset(Eq(z,zmin),θ,Interval(0,2*pi))
print("#  #",θmax)
print("#  #",θmin)
print("# "  ,cos(θmax.args[0]),cos(θmax.args[1]),sin(θmax.args[0])      ,zmax)
print("# "  ,cos(θmin.args[0]),' '*26           ,sin(θmin.args[0]),' '*8,zmin)
#  # {pi - atan(1/4), atan(1/4)}
#  # {3*pi/2}
#  4*sqrt(17)/17 -4*sqrt(17)/17 sqrt(17)/17 sqrt(17)
#  0                            -1          1
```
「θ-z」のグラフです。

![0png.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/453bea55-61c9-a226-9e30-4770eaa2387d.png)

# 実行環境

①私の環境は、pycharmです。
②よく聞くのは、Jupyterです。
③web上で、上記のソースを「SymPy Live shell」に、コピー貼り付けでもできました。

黒背景の右上に、マウスを移動すると、コピーマークが発生します。
???　タブレット環境で、コピー貼り付けが実行できませんでした。???

https://live.sympy.org/

web上で、作図plotできません。計算はできます。
計算時間は、1分以上かかると思います。

# 参考
おすすめです。

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

class sympy.functions.elementary.piecewise.ExprCondPair(expr, cond)

https://docs.sympy.org/latest/modules/functions/elementary.html#piecewise


https://reference.wolfram.com/language/ref/ViewPoint.html






# 未整理

https://www.ma.noda.tus.ac.jp/u/tg/mathematica/math3.pdf