-
ラプラス変換マスター?の方へ。アドバイスをいただけると助かります。
Laplace_transform風で、やってみました。
「ヴォルテラ(Volterra)積分方程式」をsympyで解いてみたい。 - mathematicaにありますか?
オリジナル
上と同じです。大学入試数学問題集成 様>テキスト 【3】(3)
ChatGPT-3.5先生へ(???間違っています。???)
2回微分可能な関数f(x)が,すべての実数xについて次の等式を満たしている.
f(x)=2+integrate(sin(x-t)*f(t),(t,0,x))
このとき,f''(x)が定数であることを示せ.また,f(0)およびf'(x)の値から,
f''(x)とf(x)をそれぞれ求めよ.
- ??? したがって、結論として、f(x) は定数であり、f ′′(x) も定数です。
sympyで
- sympyのソースコードあり。(省略) ??? 私は、修正、対応できませんでした。
Mathematicaで
- いつの日か、実行してみたい。
(参考)
WolframAlphaで(できませんでした。)
- >次をお試しください:
でした。
sympyで(数学入試問題 様の方法を参考に)
- 以下は、プログラムでは、ありません。数学入試問題 様の解答を転写です。
# プログラムでは、ありません。数学入試問題 様の解答を転写です。
from sympy import *
var('x,t' ,real=True)
var('C1,C2',real=True)
f,f0,f1,f2=map( Function,('f','f0','f1','f2'))
fx=2+Integral( sin(x-t) *f(t),(t,0,x)) ;print("# f =",fx)
f0=2+Integral(expand(sin(x-t),trig=True)*f(t),(t,0,x)) ;print("# =",f0)
f0=2+sin(x)*Integral(f(t)*cos(t),(t,0,x)) \
-cos(x)*Integral(f(t)*sin(t),(t,0,x)) ;print("# =",f0)
print()
f1=f0.diff() ;print("# f1 =",f1)
print()
f2=f1.diff() ;print("# f2 =",f2)
f2=-sin(x)*Integral(f(t)*cos(t),(t,0,x))+cos(x)*f(x)*cos(x) \
+cos(x)*Integral(f(t)*sin(t),(t,0,x))+sin(x)*f(x)*sin(x ) ;print("# =",f2)
f2=f2.simplify() ;print("# =",f2)
print()
f2 =f2.subs({f0:f(x)}) ;print("# f2 =",f2)
print()
f1s=f2*x+C1 ;print("# f1 =",f1s)
f1s=f1s.subs({C1:solve( Eq(f1.subs({x:0}),f1s.subs({x:0}) ),C1)[0]}) ;print("# =",f1s)
f0s=integrate( f1s,x )+C2 ;print("# f0 =",f0s)
f0s=f0s.subs({C2:solve( Eq(f0.subs({x:0}),f0s.subs({x:0}) ),C2)[0]}) ;print("# =",f0s)
# f = Integral(-f(t)*sin(t - x), (t, 0, x)) + 2
# = Integral((-sin(t)*cos(x) + sin(x)*cos(t))*f(t), (t, 0, x)) + 2
# = sin(x)*Integral(f(t)*cos(t), (t, 0, x)) - cos(x)*Integral(f(t)*sin(t), (t, 0, x)) + 2
# f1 = sin(x)*Integral(f(t)*sin(t), (t, 0, x)) + cos(x)*Integral(f(t)*cos(t), (t, 0, x))
# f2 = f(x)*sin(x)**2 + f(x)*cos(x)**2 - sin(x)*Integral(f(t)*cos(t), (t, 0, x)) + cos(x)*Integral(f(t)*sin(t), (t, 0, x))
# = f(x)*sin(x)**2 + f(x)*cos(x)**2 - sin(x)*Integral(f(t)*cos(t), (t, 0, x)) + cos(x)*Integral(f(t)*sin(t), (t, 0, x))
# = f(x) - sin(x)*Integral(f(t)*cos(t), (t, 0, x)) + cos(x)*Integral(f(t)*sin(t), (t, 0, x))
# f2 = 2
# f1 = C1 + 2*x
# = 2*x
# f0 = C2 + x**2
# = x**2 + 2
sympyで(Laplace_transform風で)
-
途中、ウソをついてます。申し訳ありません。 ???x→t→x t単体だと、動くはずです。
アドバイスいただけると助かります。
???そのため、2.00000000000000 がでるのかもしれません。
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
# 途中、ウソをついてます。申し訳ありません。
from sympy import *
var('x,s',real=True)
var('t' ,real=True,positive=True)
Y,y,f=map( Function,('y','Y','f'))
def myLap (g):
if g==y(t): return Y(s)
else: return laplace_transform(g,t,s)[0]
def myLapInv(g):
return inverse_laplace_transform(g,s,t).evalf().simplify()
def myMain(myEq):
myEq=myEq.subs({f(x):y(t)}) #;print(myEq)
myEq=myEq.subs({sin(x-t)*f(t):sin(s-t)*y(s)}) #;print(myEq)
myEq=myEq.subs({x:t}) #;print(myEq)
myEq=Eq(myLap(myEq.lhs),myLap(2)+ myLap(sin(t)) *myLap(y(t)) ) #;print(myEq)
return myLapInv(solve(myEq,Y(s))[0]).subs({t:x})
myEq=Eq(f(x),2 +Integral(sin(x-t)*f(t),(s,0,x))) ;print("#",myEq )
fx =myMain(myEq) ;print("#",fx ,",",fx .subs({x:0}) )
fx1 =fx.diff(x,1) ;print("#",fx1,6*" ",",",fx1.subs({x:0}) )
fx2 =fx.diff(x,2) ;print("#",fx2 )
# Eq(f(x), Integral(-f(t)*sin(t - x), (s, 0, x)) + 2)
# x**2 + 2.0 , 2.00000000000000
# 2*x , 0
# 2
いつもの? sympyの実行環境と 参考のおすすめです。
(テンプレート)
いつもと違うおすすめです。
wikipedia
>A linear Volterra equation of the second kind is
Qiita内