ラプラス変換で積分方程式に挑戦「（6-2)オンデマンド動画・2020年度東北大学工学部」をChatGPTとWolframAlphaとsympyでやってみたい。

- **パイソニスタ?の方へ教えて下さい。。アドバイスをいただけると助かります。**
**①与式(多項式？)を＋ーで分割する方法を教えて下さい。。xの有無で分けたいです。**
~~②小数を分数に変換したいです。0.16666666666666666 →1/6~~ 　**2023-10-23(済) ver0.3**

オリジナル
＞微分積分。両方混ざったとしても、ラプラス変換で計算することができます。(9:00)
＞畳み込み積分があったとしても..cosとsinの...(9:04)
＞留数定理をだすことができます。　(8:44)？？？
**？？？私は、微分「サンビックリ」からです。？？？**

https://youtu.be/dWBLtjIZsgQ?t=319

# ChatGPT-3.5先生へ(**???できませんでした。???**)
```
f'(t)-Integral(cos(t-s)*f(s),(s,0,t))=1
```
(省略)
```
積分方程式
f'(t)-Integral(cos(t-s)*f(s),(s,0,t))=1
```
...ただし、与えられた積分方程式は一般的に簡単に解ける形ではありません。...
```
sympyで
```
sympyのソースコードあり。(省略) 
＞このコードは、SymPyを使用して与えられた積分方程式を解き、簡略化した形で解を表示します。 
過去に、１回目？で解けなくても,sympyで解ける場合がありました。


# Mathematicaで
いつの日か、実行してみたい。

# WolframAlphaで(できませんでした。) 
標準の計算時間制限を超えました...

https://www.wolframalpha.com/input?i=diff%28f%28t%29%29-Integrate%28cos%28t-s%29*f%28s%29%2C%28s%2C0%2Ct%29%29%3D1&lang=ja

# sympyで
- **初期条件?の対応は、していません。勉強中です**
- sympy内部で記号計算でなくて、数値計算していますか？
- ソースの式eqを、分割したいです。
sympy.integrals.transforms.laplace_transform(f, t, s, legacy_matrix=True, **hints)
https://docs.sympy.org/latest/modules/integrals/integrals.html#sympy.integrals.transforms.laplace_transform
sympy.integrals.transforms.inverse_laplace_transform(F, s, t, plane=None, **hints)
https://docs.sympy.org/latest/modules/integrals/integrals.html#sympy.integrals.transforms.inverse_laplace_transform
#### Ver0.3 ([自作関数myRld](https://qiita.com/mrrclb48z/items/4759b4be4f5fd337b7ad)で小数を分数にしています。) 2023-10-23
```python
# Ver0.3
from sympy import *
import re
var('s,p')
# var('t',nonnegative=True)   # Heaviside(t))がでます。
var('t',positive=True)
f,f1,F=map(Function,('f','f1','F'))
def myRld(f): # ver0.1
     li = re.findall(r'[.0-9]+',str(f))
     sorted_li=sorted(li ,key=lambda s:len(s))
     syosu    =sorted_li[-1]
     bunsu=Rational(sympify(syosu)).limit_denominator(10**12)
     return sympify( str(f).replace(str(syosu),str(bunsu)) )
def myLap(g):
     if   g==f1(t): return p*F(p)
     elif g==f(t):  return   F(p)
     else:          return laplace_transform(g,t,p)[0]
def myInvLap(g):
     return inverse_laplace_transform(g,p,t).evalf().simplify()
def mySol(eq):
     return Eq(f(t),myInvLap( solve(eq,F(p))[0])  )
eq =Eq(f1(t)-Integral(cos(t-s)*f(s),(s,0,t)),1)
eq0=Eq(f(0),0)
# 
eqF=Eq(myLap(f1(t))-myLap(cos(t))*myLap(f(t)),myLap(eq.rhs))
print("#",            eq   )
print("#",      mySol(eqF) )
print("#",myRld(mySol(eqF)))
print("#",8*" ",1/6,"1/6")
# Eq(f1(t) - Integral(f(s)*cos(s - t), (s, 0, t)), 1)
# Eq(f(t), 0.166666666666667*t**3 + t)
# Eq(f(t), t**3/6 + t)
```

#### 旧Ver0.2 (pを使っています。F(p))
```python
# Ver0.２
from sympy import *
var('s,p')
var('t',positive=True)
f,f1,F=map(Function,('f','f1','F'))
def myLap(g):
     if   g==f1(t): return p*F(p)
     elif g==f(t):  return   F(p)
     else:          return laplace_transform(g,t,p)[0]
def myInvLap(g):
     return inverse_laplace_transform(g,p,t).evalf().simplify()
def mySol(eq):
     return Eq(f(t),myInvLap( solve(eq,F(p))[0])  )
eq =Eq(f1(t)-Integral(cos(t-s)*f(s),(s,0,t)),1)
eq0=Eq(f(0),0)
# 
eqF=Eq(myLap(f1(t))-myLap(cos(t))*myLap(f(t)),myLap(eq.rhs))
print("#",eq)
print("#",mySol(eqF))
print("#",8*" ",1/6,"1/6")
# Eq(f1(t) - Integral(f(s)*cos(s - t), (s, 0, t)), 1)
# Eq(f(t), 0.166666666666667*t**3 + t)
#          0.16666666666666666 1/6
```
#### 旧Ver0.1 (pを使っていません。sです。Y(s))
```python
# Ver0.1
from sympy import *
var('x,s,t')
var('t',positive=True)
f,f1,y,y1,Y=map(Function,('f','f1','y','y1','Y'))
def myLap(g):
     if g==y1(t): return s*Y(s)
     if g==y(t) : return   Y(s)
     return laplace_transform(g,t,s)[0]
def myInvLap(g):
     if g==Y(s) :return y(t)
     return inverse_laplace_transform(g,s,t).evalf().simplify()
def myIntegrate(eq1):
     eq1=Eq(myLap(y1(t))-myLap(cos(t)) *myLap(y(t)),myLap(1)           ) # ;print("#1",eq1)
     eq2=Eq(Y(s)                                   ,solve(eq1,Y(s))[0] ) # ;print("#2",eq2)
     eq3=Eq(myInvLap(eq2.lhs)                      ,myInvLap(eq2.rhs)  ) # ;print("#3",eq3)
     return eq3
def myMain(eq,eq0):
     eq =eq.subs({f1(t):y1(t),f(s):y(s)})
     eqa=myIntegrate(eq)
     eqa=eqa.subs({y(t):ｆ(t)})
     return eqa
eq =Eq(f1(t)-Integral(cos(t-s)*f(s),(s,0,t)),1); eq0=Eq(f(0),0)
eqa=myMain(eq,eq0)
print("#",eq             )
print("#",eqa            )
print("#",8*" ",1/6,"1/6")
```

# いつもの? sympyの実行環境と 参考のおすすめです。
(テンプレート)

https://qiita.com/mrrclb48z/items/00dd08b0317069be9342

# いつもと違うおすすめです。
大学入試問題の過去問

https://qiita.com/mrrclb48z/items/ffe244a4876f249a2e3b