这是一个热方程积分问题。
所以我们有u(x,0)
,我们想要积分的初始条件,即:
1.x,当0 <= x <= 10
1.20-x,当10 <= x <= 20
现在,问题是,如果我想计算u(x,0)
从0到20的积分,如果我们用手,它应该是:int_{0}^{10} x dx + int_{10}^{20} (20-x) dx
使用Python的SymPy代码,这是我可以创建的,非常手动(u(x,0)
从0到20的积分由函数g
表示):
import numpy as np
import sympy as sm
from sympy import *
from spb import *
x = sm.symbols("x")
t = sm.symbols("t")
n = sm.symbols("n", integer=True)
L = 20
f1 = (2/L)*x*sin(n*np.pi*x/20)
f2 = (2/L)*(20-x)*sin(n*np.pi*x/20)
fint1 = sm.integrate(f1,(x,0,10))
fint2 = sm.integrate(f2,(x,10,20))
D = 0.475
g = (fint1+fint2)*sin(n*np.pi*x/20)*exp(-(n**2)*(np.pi**2)*D*t/400).nsimplify()
是否有SymPy'技术的集成这种情况下,所以我不需要手动写fint1
,fint2
,.?
1条答案
按热度按时间cnh2zyt31#
你可以使用
Piecewise
来实现:现在,您可以对分段表达式进行一次积分: