【发布时间】:2018-09-14 11:02:01
【问题描述】:
我正在努力寻找以1/2 为间隔的值n=[0,6] 的Lane-Emden 方程的绘图解。我是 Python 新手,似乎不知道如何使用 RK4 来完成这项工作。请帮忙!
当前进度。
TypeError: unsupported operand type(s) for Pow: 'int' and 'list' on line 37 in main.py
我在定义为r2、r3、r4 和k2、k3、k4 的方程中添加后才出现错误。
import numpy as np
import matplotlib.pyplot as plt
n = [0,1,2,3,4,5,6,7,8,9,10,11,12,13]
theta0 = 1
phi0 = 0
step = 0.01
xi0 = 0
xi_max = 100
theta = theta0
phi = phi0
xi = xi0 + step
Theta = [[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
Phi = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
Xi = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]
for i in n:
Theta[i].append(theta)
Phi[i].append(phi)
Xi[i].append(xi)
def dTheta_dXi(phi,xi): #r1
return -phi/xi**2
def r2(phi,xi):
return dTheta_dXi(phi+step,xi+step*dTheta_dXi(phi,xi))
def r3(phi,xi):
return dTheta_dXi(phi+step,xi+step*r2(phi,xi))
def r4(phi,xi):
return dTheta_dXi(phi+step,xi+step*r3(phi,xi))
def dPhi_dXi(theta,xi,n): #k1
return theta**(n)*xi**2
def k2(theta,xi,n):
return dPhi_dXi(theta+step,xi+step*dPhi_dXi(theta,xi,n),n)
def k3(theta,xi,n):
return dPhi_dXi(theta+step,xi+step*k2(theta,xi,n),n)
def k4(theta,xi,n):
return dPhi_dXi(theta+step,xi+step*k3(theta,xi,n),n)
for i in n:
while xi < xi_max:
if theta < 0:
break
dTheta = (step/6)*(dTheta_dXi(phi,xi)+2*r2(phi,xi)+2*r3(phi,xi)+r4(phi,xi))
dPhi = (step/6)*(dPhi_dXi(theta,xi,i/2.)+2*k2(theta,xi,n)+2*k3(theta,xi,n)+k4(theta,xi,n))
theta += dTheta
phi += dPhi
xi += step
Theta[i].append(theta)
Phi[i].append(phi)
Xi[i].append(xi)
print i/2., round(xi,4), round(dTheta_dXi(phi,xi),4), round(xi/3./dTheta_dXi(phi,xi),4), round(1./(4*np.pi*(i/2.+1))/dTheta_dXi(phi,xi)**2,4)
theta = theta0
phi = phi0
xi = xi0 + step
【问题讨论】:
-
嗨!欢迎来到 StackOverflow!请考虑写一个Minimal, Complete, and Verifiable example (MVCE)。这将大大增加您为您的问题获得正确帮助的几率。此外,针对您的问题,您可能需要查看
scipy.integrate。 -
感谢norok2的热烈欢迎!希望以上内容有所帮助?
-
这当然会提供更多信息,但也许您还想包含您对上述代码的期望。在某种程度上,您似乎在尝试复制
scipy.integrate.RK45()。你检查过那个功能吗? -
当然。我在链接 [1] 下添加了预期图表的图像。你是绝对正确的,这是预期的功能。但是,我正在尝试对其进行硬编码,而不是利用内置函数。
-
这看起来好多了。谢谢!鉴于您的意见,我将尝试对此进行修改。希望我会为您提供解决方案。非常感谢您的帮助:)
标签: python differential-equations runge-kutta