置換積分 Integralのtransform「2007 京都大学前期理系乙【1】問１」をChatGPTとWolframAlphaとsympyでやってみたい。

・Integralのtransformでやってみました。
**・WolframAlphaでグラフがでます。**

オリジナル(youtube 12:02) PASSLABO 様より 

https://youtu.be/ChFiH7sw4xY

上と同じです。大学入試数学問題集成 様＞テキスト　理系乙【1】問１

https://mathexamtest.web.fc2.com/2007/200710541/2007105410100mj.html#top-0112

# ChatGPT-3.5先生へ(**???間違っています。???**)
**やってて、だんだん自信？がなくなってきました。**
入力文1
```
定積分integrate((2*x+1)/sqrt(x**2+4),x,0,2)を求めよ.
```
??? 返信抜粋
```
...
これで、積分は簡単に計算できます：
...
したがって、与えられた定積分の値は約2.644です。
```
入力文２(続けて)
```
sympyで教えて下さい
```
??? 返信抜粋
```
...
SymPyを使用して計算すると、結果は以下の通りです。
2*sqrt(5)*asinh(1)
...
したがって、SymPyを使用して計算した場合、定積分の値は約2.644です。
```
# WolframAlphaで
グラフがでます。

https://ja.wolframalpha.com/input?i=integrate%28%282*x%2B1%29%2Fsqrt%28x**2%2B4%29%2Cx%2C0%2C2%29

定積分
integral_0^2 (2 x + 1)/sqrt(x^2 + 4) dx = -4 + 4 sqrt(2) + sinh^(-1)(1)≈2.5382

https://ja.wolframalpha.com/input?i=simplify%28integrate%28%282*x%2B1%29%2Fsqrt%28x**2%2B4%29%2Cx%2C0%2C2%29%29

計算結果
簡約 | integral_0^2 (2 x + 1)/sqrt(x^2 + 4) dx = 簡約 | -4 + 4 sqrt(2) + sinh^(-1)(1)

https://ja.wolframalpha.com/input?i=sinh%5E%28-1%29%281%29

別の形
log(1 + sqrt(2))

# sympyで(PASSLABO 様の方法を参考に)　できませんでした。
・私は、あと一歩のような気もしました。深掘りできませんでした。
・transformは、使っていません。

＞困難だと思ったら分割する 部分分数展開,積を和に(01:34)
＞I1:2xはx^2+4の微分した形・・・　　　　　　　　(02:50)
＞　　あえて置換しない方法・・・　　　　　　　　(03:59)
＞I2:置換積分 この√が消えるから。  　　 　　　　　(06:07)
＞三角関数だけの積分の時...　　　 　 　　　　　 　  (08:22)
Converts ratios involving sin and cos as follows::
sin(x)/cos(x) -> tan(x) sin(x)/(cos(x) + 1) -> tan(x/2) if half=True
https://docs.sympy.org/latest/modules/simplify/fu.html#sympy.simplify.fu.TR2i
To apply identities 1 and 2 from right to left, use logcombine().
https://docs.sympy.org/latest/tutorials/intro-tutorial/simplification.html#logcombine
```python
from sympy import *
from sympy.simplify.fu import TR2i
var('x'          ,real=True)
var('g1,I1,I2,g2',real=True)
var('θ,aθ,bθ,dxθ',real=True)
def myEqTanCos():
    eq01=Eq( sin(θ)**2+cos(θ)**2 ,1        )  #;print("#01 ",eq01) 
    eq02=Eq((eq01.lhs/cos(θ)**2).expand(), 
             eq01.rhs/cos(θ)**2            )  #;print("#02 ",eq02)
    eq03=Eq( TR2i(eq02.lhs),eq02.rhs       )  ;print("#00",eq03)
    return eq03 
print("#   (0:57)",50*"-")
eqTanCos=myEqTanCos()
(a,b)=(0,2)
f1=(2*x  )/sqrt(x**2+4)                 ;print("#I1",Integral(f1,(x,a,b)))
f2=(   +1)/sqrt(x**2+4)                 ;print("#I2",Integral(f2,(x,a,b)))
f =f1+f2                                ;print("#I ",Integral(f,(x,a,b)).simplify())
print("#    (2:20)",50*"-")
print("#11  Eq(g1,(",denom(f1),")' )" )
eq12=Eq(g1       ,diff(denom(f1))     ) ;print("#12 ",eq12)
eq13=Eq(eq12.lhs*2,eq12.rhs*2         ) ;print("#13 ",eq13)
eq14=Eq(I1, 2*denom(f1).subs({x:2})
           -2*denom(f1).subs({x:0})   ) ;print("#14 ",eq14)                  
print("#    (4:22)",50*"-")
eq21=Eq(x  ,2*tan(θ)                  ) ;print("#21 ",eq21)
eq22=Eq(dxθ,diff(eq21.rhs).factor()
  .subs({eqTanCos.lhs:eqTanCos.rhs } )) ;print("#22 ",eq22)
eq23=Eq(f2 ,f2.subs({x:2*tan(θ)}) )     ;print("#23 ",eq23)
eq24=Eq(eq23.lhs,eq23.rhs.factor()
  .subs({eqTanCos.lhs:eqTanCos.rhs }))  ;print("#24 ",eq24)
eq25=Eq(eq23.lhs,cos(θ)/2            )  ;print("#25 ",eq25)
print("#    (5:32)")
eq26=Eq(aθ,solve(eq21.subs({x:a}))[0] ) ;print("#26 ",eq26)
eq27=Eq(bθ,solve(eq21.subs({x:b}))[0] ) ;print("#27 ",eq27)
eq28=Eq(dxθ,diff(eq21.rhs)            ) ;print("#28 ",eq28)
eq29=Eq(eq28.lhs,eq28.rhs.factor()
  .subs({eqTanCos.lhs:eqTanCos.rhs }) ) ;print("#29 ",eq29)
print("#    (6:20)")
f =sqrt( 4*(1+tan(θ)**2) )             ;print("# f=",f)
f =sqrt( 4/cos(θ)**2)                  ;print("# f=",f)
print("#    (7:20)")
f =eq25.rhs*eq29.rhs                   ;print("# f =",f)
fn=numer(f);fd=denom(f)                ;print("# f =",fn,"/",fd)
fn=numer(f)*cos(θ);fd=denom(f)*cos(θ)  ;print("# f =",fn,",",fd)
fn=numer(f)*cos(θ);fd=1-sin(θ)**2      ;print("# f =",fn,",",fd)
f=apart(fn/fd,sin(θ))                  ;print("# f =",f )
I2=Integral( f,(θ,eq26.rhs,eq27.rhs))  ;print("#I2 =",I2)
I2=I2.doit()                           ;print("#I2 =",I2)
I2=logcombine(I2,force=True )          ;print("#I2 =",I2)
print("#    (10:20)")
#   (0:57) --------------------------------------------------
#00 Eq(tan(θ)**2 + 1, cos(θ)**(-2))
#I1 Integral(2*x/sqrt(x**2 + 4), (x, 0, 2))
#I2 Integral(1/sqrt(x**2 + 4), (x, 0, 2))
#I  Integral((2*x + 1)/sqrt(x**2 + 4), (x, 0, 2))
#    (2:20) --------------------------------------------------
#11  Eq(g1,( sqrt(x**2 + 4) )' )
#12  Eq(g1, x/sqrt(x**2 + 4))
#13  Eq(2*g1, 2*x/sqrt(x**2 + 4))
#14  Eq(I1, -4 + 4*sqrt(2))
#    (4:22) --------------------------------------------------
#21  Eq(x, 2*tan(θ))
#22  Eq(dxθ, 2/cos(θ)**2)
#23  Eq(1/sqrt(x**2 + 4), 1/sqrt(4*tan(θ)**2 + 4))
#24  Eq(1/sqrt(x**2 + 4), Abs(cos(θ))/2)
#25  Eq(1/sqrt(x**2 + 4), cos(θ)/2)
#    (5:32)
#26  Eq(aθ, 0)
#27  Eq(bθ, pi/4)
#28  Eq(dxθ, 2*tan(θ)**2 + 2)
#29  Eq(dxθ, 2/cos(θ)**2)
#    (6:20)
# f= sqrt(4*tan(θ)**2 + 4)
# f= 2/Abs(cos(θ))
#    (7:20)
# f = 1/cos(θ)
# f = 1 / cos(θ)
# f = cos(θ) , cos(θ)**2
# f = cos(θ) , 1 - sin(θ)**2
# f = cos(θ)/(2*(sin(θ) + 1)) - cos(θ)/(2*(sin(θ) - 1))
# 
#I2 = Integral(cos(θ)/(2*(sin(θ) + 1)) - cos(θ)/(2*(sin(θ) - 1)), (θ, 0, pi/4))
#I2 = log(sqrt(2)/2 + 1)/2 - log(1 - sqrt(2)/2)/2
#I2 = log(sqrt(sqrt(2)/2 + 1)/sqrt(1 - sqrt(2)/2))
#    (7:20)
```
# sympyで(transformで)
＞困難だと思ったら分割する 部分分数展開,積の和 (01:34)
・PASSLABO 様,transform 様のおかげです。
transform(x, u)
https://docs.sympy.org/latest/modules/integrals/integrals.html#sympy.integrals.integrals.Integral.transform
```python
from sympy import *
var('x',real=True)
var('θ',real=True)
# 
(a,b)=(0,2)
f1=(2*x  )/sqrt(x**2+4)   
f2=(   +1)/sqrt(x**2+4)   
f =f1+f2                    ;print("#I  =",Integral(f,(x,a,b)))
print()
I1=Integral(f1,(x,a,b) )    ;print("#I1 =",I1)          
I1=I1.transform(x,2*tan(θ)) ;print("#I1 =",I1)         
I1=I1.doit()                ;print("#I1 =",I1)         
print()
I2=Integral(f2,(x,a,b) )    ;print("#I2 =",I2)         
I2=I2.doit()                ;print("#I2 =",I2)         
#I  = Integral(2*x/sqrt(x**2 + 4) + 1/sqrt(x**2 + 4), (x, 0, 2))

#I1 = Integral(2*x/sqrt(x**2 + 4), (x, 0, 2))
#I1 = Integral(4*(2*tan(θ)**2 + 2)*tan(θ)/sqrt(4*tan(θ)**2 + 4), (θ, 0, pi/4))
#I1 = -4 + 4*sqrt(2)

#I2 = Integral(1/sqrt(x**2 + 4), (x, 0, 2))
#I2 = log(1 + sqrt(2))
```

・以下はうごきません。私は、図々しいみたいです。分割が必要でした。
```python
#これは、うごきません。
from sympy import *
var('x',real=True)
var('θ',real=True)
(a,b)=(0,2)
f=(2*x+1)/sqrt(x**2+4) 
I=Integral(f,(x,a,b) )    ;print("#I =",I)         
I=I.transform(x,2*tan(θ)) ;print("#I =",I)         
I=I.doit()                ;print("#I =",I)         
#I = Integral((2*x + 1)/sqrt(x**2 + 4), (x, 0, 2))
#I = Integral((4*tan(θ) + 1)*(2*tan(θ)**2 + 2)/sqrt(4*tan(θ)**2 + 4), (θ, 0, pi/4))
#I = Integral((4*tan(θ) + 1)*sqrt(tan(θ)**2 + 1), (θ, 0, pi/4))
```
# sympyで(いつものスタイルで)
```python
from sympy import *
var('x',real=True)
print("#", integrate((2*x+1)/sqrt(x**2+4),(x,0,2))  )
# -4 + log(1 + sqrt(2)) + 4*sqrt(2)
```

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

https://live.sympy.org/

# 参考

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

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