首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python3中使用Runge-Kutta-4调用数值结果来积分ODE?

如何在Python3中使用Runge-Kutta-4调用数值结果来积分ODE?
EN

Stack Overflow用户
提问于 2015-09-08 01:39:20
回答 1查看 273关注 0票数 0

我正在尝试(对于m_0)数值求解以下常微分方程:

代码语言:javascript
运行
复制
dm0/dx=(((1-x)*(x*(2-x))**(1.5))/(k+x)**2)*(((x*(2-x))/3.0)*(dw/dx)**2 + ((8*(k+1))/(3*(k+x)))*w**2)

W和dw/dx的值已经使用Runge-Kutta四阶得到了数值,k是一个固定的因子。我写了一段代码,我从外部文件中调用w和dw/dx的值,然后将它们组织在一个数组中,然后在函数中调用该数组,然后运行积分。我的结果不是它所期望的:(,我不知道哪里出了问题。如果有人能帮我一把,我将不胜感激。谢谢!

代码语言:javascript
运行
复制
from math import sqrt
from numpy import array,zeros,loadtxt
from printSoln import *
from run_kut4 import *

m = 1.15                         # Just a constant.
k = 3.0*sqrt(1.0-(1.0/m))-1.0    # k in terms of m.

omegas = loadtxt("omega.txt",float)    # Import values of w
domegas = loadtxt("domega.txt",float)  # Import values of dw/dx

w = []    # Defines the array w to store the values w^2
s = 0.0
for s in omegas:
    w.append(s**2)       # Calculates the values w**2
omeg = array(w,float)    # Array to store the value of w**2

dw = []      # Defines the array dw to store the values dw**2
t = 0.0
for t in domegas:
    dw.append(t**2)    # Calculates the values for dw**2
domeg = array(dw,float)     # Array to store the values of dw**2

x = 1.0e-12              # Starting point of integration
xStop = (2.0 - k)/3.0    # Final point of integration 

def F(x,y):      # Define function to be integrated
    F = zeros(1)
    for i in domeg:  # Loop to call w^2, (dw/dx)^2       
        for j in omeg:
            F[0] = (((1.0-x)*(x*(2.0-x))**(1.5))/(k+x)**2)*((1.0/3.0)*x* (2.0-x)*domeg[i] + (8.0*(k+1.0)*omeg[j])/(3.0*(k+x))) 
            return F

y = array([((32.0*sqrt(2.0)*(k+1.0)*(x**2.5))/(15.0*(k**3)))])  # Initial condition for m_{0}

h = 1.0e-5          # Integration step
freq = 0            # Prints only initial and final values
X,Y = integrate(F,x,y,xStop,h)      # Calls Runge-Kutta 4
printSoln(X,Y,freq)                 # Prints solution
EN

回答 1

Stack Overflow用户

发布于 2015-09-08 22:13:08

解释你的口头描述,有一个omega,w'=F(x,w)的颂歌,和一个耦合的m0,m'=G(x,m,w,w')的颂歌。解决这个问题的最好方法几乎总是将其视为ODE系统,

代码语言:javascript
运行
复制
def ODEfunc(x,y)
    w,m = y
    dw = F(x,w)
    dm = G(x,m,w,dw)
    return np.array([dw, dm])

然后您可以将其插入到您选择的ODE求解器中,例如,虚构的

代码语言:javascript
运行
复制
ODEintegrate(ODEfunc, xsamples, y0)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32443712

复制
相关文章

相似问题

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