我在python中编写了一个关于runge-kutta方法的代码,但每当程序实现任何微积分时,程序都需要微分方程。
这是我的代码:
from math import *
import numpy as np
#Initial Values
n=input("Enter the number of equations n:")
n=int(n)
x=np.array([])
for i in range(0,n):
x0=input("Enter the initial value of x{}:".format(i))
x=np.append(x,[x0])
t=input("Enter the initial value of t:")
tf=input("Enter the final value of t:")
h=input("Enter the time interval h:")
m=int((tf-t)/float(h))
#Definition of differential equations
def f(t,x):
f=np.array([])
for i in range(0,n):
f0=input("Enter the equation f{}:".format(i))
f=np.append(f,[f0])
return f
a=1.0/6
for i in range(0,m):
k1=f(t,x)
k2=f(t+0.5*h,x+0.5*h*k1)
k3=f(t+0.5*h,x+0.5*h*k2)
k4=f(t+h,x+h*k3)
x=x+a*h*(k1+2*(k2+k3)+k4)
t=t+h
print t, x
使用等式dx / dt = x,x(0)= 1,xf = 1,h = 0.1:
的示例Enter the number of equations n:1
Enter the initial value of x0:1
Enter the initial value of t:0
Enter the final value of t:1
Enter the time interval h:0.1
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
Enter the equation f0:x[0]
1.0 [ 2.71827974]
如果程序的微分方程计算全部,我应该怎么做?
答案 0 :(得分:1)
您必须将等式输入代码移出函数f(x,y)
要求在同一个区块中输入方程式,而不是要求所有其他输入。
现在你的代码会在每个时间间隔调用函数,因此会在每个时间间隔请求输入。
答案 1 :(得分:0)
如果我不理解,请纠正我。 您是否尝试通过用户手动输入表达式并将其视为函数? 我找到了this topic,其中解释了如何使用sympy解析公式。您可以尝试使用sympy修改程序。通过这种方式,您应该能够为所有人获得一次方程式。
编辑:如果您的问题只是“如何从输入中获取整个公式...”,您可以尝试使用raw_input()方法。还要看看here: