所以我最近决定学习python,作为一个练习(加上一些有用的东西),我决定制作一个欧拉修正法算法来求解更高的一阶微分方程。一个示例输入是:
python script_name.py -y[0] [10,0]
其中第一个参数是微分方程(这里:y''=-y),第二个参数是初始条件(这里:y(0)=10, y'(0)=0)。然后将结果输出到两个文件(x-data.txt 和 y-data.txt)。
问题出在:在运行具有指定最后一行的代码时(在 t=1 处)读取 -0.0,但如果您求解 ODE(y=10*cos(x)),它应该读取 5.4。即使您用笔和纸完成程序并执行代码,您的(和计算机)结果也会在第二次迭代时分开)。知道是什么原因造成的吗?
注意:我在 os x 上使用 python 2.7
这是我的代码:
#! /usr/bin/python
# A higher order differential equation solver using Euler's Modified Method
import math
import sys
step_size = 0.01
x=0
x_max=1
def derivative(x, y):
d = eval(sys.argv[1])
return d
y=eval(sys.argv[2])
order = len(y)
y_derivative=y
xfile = open('x-data.txt','w+')
yfile = open('y-data.txt','w+')
while (x<x_max):
xfile.write(str(x)+"\n")
yfile.write(str(y[0])+"\n")
for i in range(order-1):
y_derivative[i]=y[(i+1)]
y_derivative[(order-1)] = derivative(x,y)
for i in range(order):
y[i]=y[i]+step_size*y_derivative[i]
x=x+step_size
xfile.close()
yfile.close()
print('done')