首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >浮点计算调试

浮点计算调试
EN

Stack Overflow用户
提问于 2013-10-30 19:29:41
回答 1查看 144关注 0票数 1

所以我最近决定学习python,作为一个练习(加上一些有用的东西),我决定用Euler改进的方法来求解高阶微分方程。例如,输入如下:

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。即使你用笔和纸完成程序并执行代码,你的(和计算机)结果会在第二次迭代中分道扬镳)。知道是什么导致的吗?

注:我在os上使用python 2.7

这是我的密码:

代码语言:javascript
运行
复制
#! /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')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-30 19:52:21

当您说y_derivative=y时,它们是相同的列表,具有不同的名称。也就是说,当您更改y_derivative[i]=y[i+1]时,两个列表都在更改。您想要使用y_derivative=y[:]制作y的副本,以便放入y_derivative

有关更多信息,请参见How to clone or copy a list?

还请参见http://effbot.org/zone/python-list.htm

注意,通过用您提供的示例替换sys.argv,我能够在空闲状态下调试这一功能。然后,如果打开调试器并逐步执行代码,则可以看到两个列表都发生了更改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19692178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档