首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用RK 45方法求解耦合方程组

用RK 45方法求解耦合方程组
EN

Stack Overflow用户
提问于 2021-12-28 17:43:01
回答 2查看 117关注 0票数 2

,我试图求解耦合微分方程组,但我得到了以下误差,任何一个都能解决这个问题。

dY[1] = (1/M*C_p)((m_c*C_p*(Y[0]-Y[1]))-(U_l*(A_s_2)*(Y[1]-Ta))) TypeError: 'float' object is not callable

代码语言:javascript
复制
import math
import scipy.integrate as spi
import numpy as np
import pandas as pd
def odes(t,Y):                                                                           
    m_c=0.9                                          
    C_p =4200
    Tc_O=91                                                                                   
    U_l =0.8                                          
    D_st=2                                         
    L_s=1
    rho=1000
    V=0.5
    M=(rho*V)/3                                            
    A_s_1=((math.pi*pow(D_st,2))/4)+((math.pi*D_st*L_s)/3)
    A_s_2=((math.pi*D_st*L_s))/3
    A_s_3=((math.pi*pow(D_st,2))/4)+((math.pi*D_st*L_s)/3)
    Ta =20 
    dY = np.zeros((3))
    dY[0] = (1/M*C_p)*((m_c*C_p*(Tc_O-Y[0]))-(U_l*(A_s_1)*(Y[0]-Ta)))
    dY[1] = (1/M*C_p)((m_c*C_p*(Y[0]-Y[1]))-(U_l*(A_s_2)*(Y[1]-Ta)))
    dY[2] = (1/M*C_p)((m_c*C_p*(Y[1]-Y[2]))-(U_l*(A_s_3)*(Y[2]-Ta)))
    return dY
t_start, t_end = 0, 3600.0
Y = np.array([91,89,75]); 
Yres = spi.solve_ivp(odes, [t_start, t_end], Y, method='RK45', max_step=60)
#---- Results ---------------------
yy = pd.DataFrame(Yres.y).T
tt = np.linspace(t_start,t_end,yy.shape[0])
print(yy)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-28 17:53:22

问题在于:

代码语言:javascript
复制
dY[1] = (1/M*C_p)((m_c*C_p*(Y[0]-Y[1]))-(U_l*(A_s_2)*(Y[1]-Ta)))
                 ^
                 |
              No multiplication sign!

Python不像数学。如果两组括号相邻,没有运算符,这并不意味着乘法。它的意思是‘呼叫功能’

所以如果你这么做

代码语言:javascript
复制
print((3)(4))

您将得到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

在这条线下面,你也有同样的问题。

票数 1
EN

Stack Overflow用户

发布于 2021-12-28 18:41:18

你可以让它变得更干净,例如:

代码语言:javascript
复制
def odes(t, Y):
    Tc_O = 91
    D_st = 2
    L_s = 1
    A_s_1 = A_s_3 = ((math.pi * pow(D_st, 2)) / 4) + ((math.pi * D_st * L_s) / 3)
    A_s_2 = ((math.pi * D_st * L_s)) / 3
    dY = np.zeros((3))
    dY[0] = calc(Tc_O, Y[0], A_s_1)
    dY[1] = calc(Y[0], Y[1], A_s_2)
    dY[2] = calc(Y[1], Y[2], A_s_3)
    return dY


def calc(Y1, Y2, A_s):
    m_c = 0.9
    C_p = 4200
    U_l = 0.8
    rho = 1000
    V = 0.5
    M = (rho * V) / 3
    Ta = 20
    x = (1 / M * C_p) * ((m_c * C_p * (Y1 - Y2)) - (U_l * (A_s) * (Y2 - Ta)))
    return x


t_start, t_end = 0, 3600.0
Y = np.array([91, 89, 75])
Yres = spi.solve_ivp(odes, [t_start, t_end], Y, method="RK45", max_step=60)
# ---- Results ---------------------
yy = pd.DataFrame(Yres.y).T
tt = np.linspace(t_start, t_end, yy.shape[0])
print(yy)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70510616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档