具有混合IVP和BVP的第二ODE,(即)y(0)和y(#);(L)。怎么解决?

时间:2017-12-19 18:35:12

标签: numpy ode

这是我想要解决的第二个有边界的ODE,但我无法弄清楚。这是一个传热问题。如果你有见解,那将是非常值得注意的。

基本上是边界问题,但位置不同。一个在0,另一个在最后。

T(0)未知,y'(0)是一个函数。 T(0.06),但给出T(0.06)。 关键是如何连接已知值T(0.06)= 300来解决问题。

y'' = 0,y(0)= t0,y'(0)=(4.82e-08 * T0 ** 4-208.0)/1.2,y(0.06)= 300

我尝试了这段代码,但没有运气。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from scipy.integrate import odeint

def dU_dx(U, x):
    return [U[1], 0]

#set initial values
y0 = T0
z0 = (4.82e-08*T0**4-208.0)/1.2    
U0 = [y0, z0]
yL = 300     # how do I use this boundary condition?

L=0.006
#solve 2nd ode
xs = np.linspace(0, L, 100)
Us = odeint(dU_dx, U0, xs)
ys = Us[:,0]

plt.xlabel("x")
plt.ylabel("T")
plt.title("2nd ODE")
plt.plot(xs,ys);

from scipy.interpolate import interp1d
g = interp1d(xs,ys)

T=g(0)    
print("Temp(at 0)=",T)

1 个答案:

答案 0 :(得分:0)

这肯定不是一个优雅的代码,但这是我得到我想要的答案的方式。但是,如果你知道更好的代码,请随意摆出姿势。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from scipy.integrate import odeint

def dU_dx(U, x):
    return [U[1], 0]

#Assume initial value
T0=292.75
y0 = T0
z0 = (4.82e-08*T0**4-208.0)/1.2    
U0 = [y0, z0]

L=0.06
xs = np.linspace(0, L, 100)
Us = odeint(dU_dx, U0, xs)
ys = Us[:,0]

plt.xlabel("x")
plt.ylabel("T")
plt.title("2nd ODE")
plt.plot(xs,ys);

from scipy.interpolate import interp1d
g = interp1d(xs,ys)

#Repeat until see T(0.06)=300
T0=g(L)     
print("Temp(0)=",T0)