所以我最近決定學習python和作爲一個練習(加上做一些有用的事情),我決定做一個歐拉的修正方法算法來求解高於一階的微分方程。一個示例的輸入將是:浮點計算調試
python script_name.py -y[0] [10,0]
其中第一個參數是所述順從方程(此處:Y'= - y)和第二個中的初始條件(此處:Y(0)= 10 ,y'(0)= 0)。然後它將把resusts放到兩個文件(x-data.txt和y-data.txt)中。
繼承人問題: 運行指定最後一行(在t = 1時)的代碼讀取-0.0,但是如果您解決ODE(y = 10 * cos(x)),它應該讀取5.4。即使你用筆和紙執行程序並執行代碼,你的(和計算機)在第二次迭代中的結果是分開的)。任何想法可能造成這種情況?
NB:我使用python 2.7在OS X
這裏是我的代碼:
#! /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')
爲什麼y_derivative和y引用同一個列表? 如果我們嘗試使用變量(在使用;而不是換行符): a = 5; b = a; print(a,b)#5 5; a = 6; print(a,b)#6 5; – Michal
變量和列表是完全不同的實體,我添加了另一個鏈接,可以解釋更多的答案 – CDspace