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

问题描述 投票:-1回答:1

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

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

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

和''= 0,y(0)= t0,y'(0)=(4.82e-08 * T0 ** 4-208.0)/1.2,(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)
numpy ode
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.