-
パイソニスタ?の方へ教えて下さい。。アドバイスをいただけると助かります。
①与式(多項式?)を+ーで分割する方法を教えて下さい。。xの有無で分けたいです。
②小数を分数に変換したいです。0.16666666666666666 →1/62023-10-23(済) ver0.3
オリジナル
>微分積分。両方混ざったとしても、ラプラス変換で計算することができます。(9:00)
>畳み込み積分があったとしても..cosとsinの...(9:04)
>留数定理をだすことができます。 (8:44)???
???私は、微分「サンビックリ」からです。???
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を使用して与えられた積分方程式を解き、簡略化した形で解を表示します。
過去に、1回目?で解けなくても,sympyで解ける場合がありました。
Mathematicaで
いつの日か、実行してみたい。
WolframAlphaで(できませんでした。)
標準の計算時間制限を超えました...
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で小数を分数にしています。) 2023-10-23
# 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))
# Ver0.2
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))
# 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):f(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の実行環境と 参考のおすすめです。
(テンプレート)
いつもと違うおすすめです。
大学入試問題の過去問