gpt4 book ai didi

python - 为什么我的 Runge-Kutta Python 脚本以这种异常方式定义数组元素?

转载 作者:行者123 更新时间:2023-11-30 23:02:21 26 4
gpt4 key购买 nike

我是Python的新手,我对编程语言的了解还处于起步阶段,所以我复制了所示的Runge-Kutta Python脚本here并根据我的目的对其进行了修改。这是我当前的脚本:

import numpy as np
from matplotlib import pyplot as plt
a=0
b=np.pi
g=9.8
l=1
N=1000

def RK4(f):
return lambda t, y, dt: (
lambda dy1: (
lambda dy2: (
lambda dy3: (
lambda dy4: (dy1 + 2*dy2 + 2*dy3 + dy4)/6
)( dt * f( t + dt , y + dy3 ) )
)( dt * f( t + dt/2, y + dy2/2 ) )
)( dt * f( t + dt/2, y + dy1/2 ) )
)( dt * f( t , y ) )

from math import sqrt
dy = RK4(lambda t, y: -y)

t, y, dt = 0., 1., np.divide((b-a),float(N))
i=0
T=np.zeros((N+1,1))
DY=T
Y=T
while t < (b-dt):
T[i]=t
DY[i]=dy(t,y,dt)
t, y = t + dt, y + dy( t, y, dt )
Y[i]=y
i=i+1

plt.figure(1)
plt.plot(T,Y)
plt.show()

你可以忽略前几行中的 g 和 l 变量,我本来打算解决单摆问题,但后来我记得这是一个一阶 ODE 求解器,所以现在我的 ODE 是 dy/dx=-y 。我一直在 IPython 中运行它。我在期待T是一个数组,基本上相当于 linspace(0,pi,N+1)在 MATLAB 中。因此 T 是一组介于(并包括)0 和 pi 之间的 N+1 个均匀间隔的值,但这是其内容的样本(作为运行 T 的输出):

In [101]: T
Out[101]:
array([[ 0.99686334],
[ 0.99373651],
[ 0.9906195 ],
...,
[ 0.04334989],
[ 0.04321392],
[ 0. ]])

(包括输入和输出行,以提供一些有关我在这里所指内容的上下文,以防不清楚)。哦,顺便说一句,如果您想知道为什么我不使用 T=np.linspace(a,b,num=N+1)而不是在这个循环中很好地定义它,这是因为这给出了类似的不寻常的 T 数组。

最佳答案

DY=T
Y=T

您只是复制引用,它们都指向同一个数组对象。本质上,all 的内容将为 Y,因为它是最后分配的。

使用T.copy()获取单独的数组对象。

关于python - 为什么我的 Runge-Kutta Python 脚本以这种异常方式定义数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34552670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com