2017-12-19 5 views
-1

これは私が解決しようとしている境界線を持つ2番目のODEですが、わかりません。これは熱伝達の問題です。あなたが洞察力を持っているなら、それは非常に認められるでしょう。IVPとBVPが混合された第2のODE(すなわち、y)(0)およびy '(L)。の解き方?

基本的に境界の問題ですが、場所が異なります。 1つは0に、もう1つは最後に。

T(0)不明、y '(0)はfuncです。 T(0.06)の値であるが、T(0.06)が与えられる。 重要な点は、問題を解決するために既知の値T(0.06)= 300を接続する方法です。

Y '' = 0、Y(0)= T 0、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) 

答えて

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) 
関連する問題