[英]Floating point calculations debugging
因此,我最近決定學習python,並作為一項練習(加上一些有用的東西),決定制作一個Euler的Modified Method算法來求解高一階微分方程。 輸入示例為:
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')
當您說y_derivative=y
它們是具有不同名稱的SAME列表。 即,當您更改y_derivative[i]=y[i+1]
兩個列表都在更改。 您想使用y_derivative=y[:]
制作y
的副本以放入y_derivative
請參閱如何克隆或復制列表? 了解更多信息
另請參閱http://effbot.org/zone/python-list.htm
注意,通過使用您提供的示例替換sys.argv
,我可以在IDLE中調試它。 然后,如果您打開調試器並逐步執行代碼,則可以看到兩個列表都發生了變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.