簡體   English   中英

浮點計算調試

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM