関数の増減表作成プログラム_Markdown表(1/2) sympyで作ってみたい。

**(2023/07/02) バグあり。調査中。**


csv形式も出力しています。csv形式→Markdown表へ変換しました。
おすすすめがあれば、教えて下さい。

# 会話記録(2022年6月梅雨時編)　
会話記録は誘導です。久しぶりに,中学生のA子さんとB子さん登場。(5月GW編自転車君以来)

https://qiita.com/mrrclb48z/items/297442a71820732d3ea3

中学生A子(以下A子)「この暑い時期にどうして私たちが登場しないとだめなの。」
中学生B子(以下B子)「何か増減表とか言っているわよ。」
私 「増減表は、関数のグラフを書くのに必要です。」
A子「スマホのwolframalphaで、グラフが簡単に書けるのに必要なの？」
B子「wolframalphaで、最大値、最小値に続けて関数を入力すれば、最大値、最小値も計算してくれるわよ。」
A子「wolframalphaで、極値に続けて関数を入力すれば、極大値、極小値も計算してくれるね。」
A子,B子「スマホで関数のグラフが書けるのに、めんどくさいわね。」
私 「それで、増減表作成アプリを探したけど、みつかりませんでした。」

# sympyでVer0.11
online sympyでうごきませんでした。Error.
わかる方,教えて下さい。

```python
# 関数の増減表作成プログラム_Markdown表 Ver0.11
from sympy import *
var('x')
def myZogenhyoCsv(y):
    dy=diff(y, x)
    ans=myList(dy)
    n=len(ans)
    m=n*2+1
    myHyo0 = [".... "]
    myHyo1 = [myFugo(dy, ans[0] - 3)]
    myHyo2 = [myYajirusi(myHyo1[0])]
    j=0
    for i in range(n):
        j=j+1
        myHyo0 = myHyo0 + [ans[i]]
        myHyo1 = myHyo1 + ["0"]
        myHyo2 = myHyo2 + [y.subs({x:ans[i]}).simplify()] #20220808
        if i<n-1:
           j = j + 1
           myHyo0 = myHyo0 + ["..."]
           myHyo1 = myHyo1 + [myFugo(dy,(ans[i]+ans[i+1])/2)]
           myHyo2 = myHyo2 + [myYajirusi(myHyo1[j])]
    j = j + 1
    myHyo0 = myHyo0 + ["...."]
    myHyo1 = myHyo1 + [myFugo(dy, ans[i] + 3)]
    myHyo2 = myHyo2 + [myYajirusi(myHyo1[j])]
    myHyo0 = ["x"]    +myHyo0
    myHyo1 = ["f'(x)"]+myHyo1
    myHyo2 = ["f(x)"] +myHyo2
    return myHyo0,myHyo1,myHyo2
def myList(y):
    l0 = solve(y)
    ll0 = []
    for i in range(len(l0)):
        ll0 = ll0 + [l0[i]]
    return ll0
def myFugo(z, xi):
    Fugo = "-"
    if (z.subs({x: xi}) > 0):
        Fugo = "+"
    return Fugo
def myYajirusi(PlusMinus):
    Yajirusi = "↘"
    if (PlusMinus == "+"):
        Yajirusi = "↗"
    return Yajirusi
def myCsv2Markdown(Gyo):
    Md=""
    for i in range(len(Gyo)):
        Md = Md + "|" +str(Gyo[i])
    return Md + "|"
def myDefMarkdown(nCol):
    ans='|'
    for i in range(nCol):
        ans=ans+':-:|'
    return ans
def myCsv(ans):
    print("[csv形式増減表]")
    for i in range(3):
        print(",".join(map(str,ans[i])))
    return
def myCsvMarkdown(y):
    ans = myZogenhyoCsv(y)
    print("y=", y)
    print("")
    myCsv(ans)
    print("")
    print("[markdown形式増減表]")
    print(myCsv2Markdown(ans[0]))
    print(myDefMarkdown(len(ans[0])))
    print(myCsv2Markdown(ans[1]))
    print(myCsv2Markdown(ans[2]))
    return
myCsvMarkdown(2*x**3-4*x**2+2*x)
plot         (2*x**3-4*x**2+2*x)
myCsvMarkdown(3*x**4+2*x**3-6*x**2-6*x-1)
plot         (3*x**4+2*x**3-6*x**2-6*x-1)
```
実行結果は、次ページです。


# sympyでVer0.2

```python
# 関数の増減表作成プログラム_Markdown表 Ver0.2(20220816)
from sympy import *
var('x')
def myZogenhyoCsvXminXmax(y,*XminXmax):
    dy=diff(y, x)
    ans=myList(dy)
    n=len(ans)
    myHyo0 = [XminXmax[0][1]]
    myHyo1 = [""]
    myHyo2 = [y.subs({x:XminXmax[0][1]})]
    myHyo0 = myHyo0 + ["... "]
    myHyo1 = myHyo1 + [myFugo(dy,(XminXmax[0][1]+ans[0])/2)]
    myHyo2 = myHyo2 + [myYajirusi(myHyo1[1])]
    j=0
    for i in range(n):
        j=j+1
        myHyo0 = myHyo0 + [ans[i]]
        myHyo1 = myHyo1 + ["0"]
        myHyo2 = myHyo2 + [y.subs({x:ans[i]})]
        if i<n-1:
           j = j + 1
           myHyo0 = myHyo0 + ["..."]
           myHyo1 = myHyo1 + [myFugo(dy,(ans[i]+ans[i+1])/2)]
           myHyo2 = myHyo2 + [myYajirusi(myHyo1[j])]
    j = j + 1
    myHyo0 = myHyo0 + ["..."]
    myHyo1 = myHyo1 + [myFugo(dy,(ans[i]+XminXmax[0][2])/2)]
    myHyo2 = myHyo2 + [myYajirusi(myHyo1[j+1])]
    myHyo0 = myHyo0 + [XminXmax[0][2]]
    myHyo1 = myHyo1 + [""]
    myHyo2 = myHyo2 + [y.subs({x:XminXmax[0][2]})]
    #
    myHyo0 = ["x"]    +myHyo0
    myHyo1 = ["f'(x)"]+myHyo1
    myHyo2 = ["f(x)"] +myHyo2
    return myHyo0,myHyo1,myHyo2
def myZogenhyoCsv(y):
    dy=diff(y, x)
    ans=myList(dy)
    n=len(ans)
    myHyo0 = [".... "]
    myHyo1 = [myFugo(dy, ans[0] - 3)]
    myHyo2 = [myYajirusi(myHyo1[0])]
    j=0
    for i in range(n):
        j=j+1
        myHyo0 = myHyo0 + [ans[i]]
        myHyo1 = myHyo1 + ["0"]
        myHyo2 = myHyo2 + [y.subs({x:ans[i]})]
        if i<n-1:
           j = j + 1
           myHyo0 = myHyo0 + ["..."]
           myHyo1 = myHyo1 + [myFugo(dy,(ans[i]+ans[i+1])/2)]
           myHyo2 = myHyo2 + [myYajirusi(myHyo1[j])]
    j = j + 1
    myHyo0 = myHyo0 + ["...."]
    myHyo1 = myHyo1 + [myFugo(dy, ans[i] + 3)]
    myHyo2 = myHyo2 + [myYajirusi(myHyo1[j])]
    #
    myHyo0 = ["x"]    +myHyo0
    myHyo1 = ["f'(x)"]+myHyo1
    myHyo2 = ["f(x)"] +myHyo2
    return myHyo0,myHyo1,myHyo2
def myList(y):
    l0 = solve(y)
    ll0 = []
    for i in range(len(l0)):
        ll0 = ll0 + [l0[i]]
    return ll0
def myFugo(z, xi):
    Fugo = "-"
    if (z.subs({x: xi}) > 0):
        Fugo = "+"
    return Fugo
def myYajirusi(PlusMinus):
    Yajirusi = "↘"
    if (PlusMinus == "+"):
        Yajirusi = "↗"
    return Yajirusi
def myCsv2Markdown(Gyo):
    Md=""
    for i in range(len(Gyo)):
        Md = Md + "|" +str(Gyo[i])
    return Md + "|"
def myDefMarkdown(nCol):
    ans='|'
    for i in range(nCol):
        ans=ans+':-:|'
    return ans
def myCsv(ans):
    print("csv形式増減表")
    for i in range(3):
        print(",".join(map(str,ans[i])))
    return
def myCsvMarkdown(y,*XminXmax):
    if XminXmax==():
       ans = myZogenhyoCsv(y)
    else:
       ans = myZogenhyoCsvXminXmax(y,*XminXmax)
    myCsv(ans)
    print("")
    print("markdown形式増減表")
    print(myCsv2Markdown(ans[0]))
    print(myDefMarkdown(len(ans[0])))
    print(myCsv2Markdown(ans[1]))
    print(myCsv2Markdown(ans[2]))
    return
myCsvMarkdown(2*x**3-3*x**2-12*x+6,(x,-2,4))
```


# 参考
増減表作成アプリを探しています。 - mrrclb48z　2022/06/26 (Sun) 13:06:34　＜
第２導関数まで　＜

https://mathexamtest.bbs.fc2.com/

https://www.google.com/search?rlz=1C1CHBD_jaJP908JP908&sxsrf=ALiCzsZLrbt9SA6Yc0b9KotgGZEGUjKXLg%3A1656923293131&lei=naTCYonOB8OH2roPsIWQuAU&q=%E5%A2%97%E6%B8%9B%E8%A1%A8%20%E6%9B%B8%E3%81%8D%E6%96%B9&ved=2ahUKEwjJkLqi6N74AhXDg1YBHbACBFcQsKwBKAB6BAhEEAE&biw=958&bih=491&dpr=1

https://tableconvert.com/csv-to-html

# 予定
第２導関数を追加したい。
~~xの範囲を入力したい。~~
三角関数、log,eでテストしてみたい。

(20220808)エラーがでます。
x^4+12*x^2+16*x+36

**(2023/07/02) バグあり。調査中。** エラーがでます。
(1+sin(θ))/(2+cos(θ))