gpt4 book ai didi

python - 动态填充列表或向量

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:04 27 4
gpt4 key购买 nike

使用 Python 3.4 和 numpy

嘿大家,花了大约一个小时寻找,不确定这是否可能。

我正在创建一个具有 1000 次迭代的动态模型。我可以编写一个从状态 1 到状态 2、状态 2 到状态 3 等的转换函数。

在进行 1000 次迭代后,我使用 np.arange 来查找一些变量的初始值,在给定外生变量的情况下,这些变量将在第 1000 次迭代时达到收敛。

我想知道是否有一种方法可以快速创建所有 1000 次迭代,即编写一些如下所示的代码:

for y_0 in np.arange(0.0001, 2, 0.0001):
x_0 = 2
z_0 = 1
# something # (y_i+1 = x_i + y_i, 1000)
# something # (x_i+1 = z_i + y_i, 1000)
if abs(y_1000 - y_999) < 1:
print(y_0, y_1 ... y_1000)
break
else:
print('fail')

返回类似这样的内容:

y_1 = x_0 + y_0
x_1 = z_0 + y_0
...
y_1000 = x_999 + y_999
x_1000 = z_999 + y_999

这有道理吗?有什么功能可以帮助我吗?提前致谢。

编辑:

所以,想一想,我想有两种方法可以实现我想要的,但我不确定是否可行。

第一个是创建代码,通过以更新最后一位数字的方式粘贴我的初始转换函数。所以我可以生成

y_i+1 = x_i + y_i
x_i+1 = z_i + y_i

一千次(希望以自动化的方式),结果

 y_1 = x_0 + y_0
x_1 = z_0 + y_0
y_2 = x_1 + y_1
x_2 = z_1 + y_1
...
y_1000 = x_999 + y_999
x_1000 = z_999 + y_999

第二个函数会迭代转换函数,并在找到满足 abs(y_1000 - y_999) < 1 的 y_0 值时返回 y 的 1000 个值。

我的实际函数要复杂得多,超过20行,所以我不想发布它们。

编辑2:

感谢您的帮助,这就是我到目前为止所得到的。但是,这是我得到的输出:

Convergence reached [ 1.5 1.6473105 0. 0. 0. 0. 0.

等等很多零。这让我很困惑,因为如果我只进行数学计算,我的系统中的第三步将不为零。看起来系统只运行了两个周期,然后在剩余周期内恢复为零(不填充数组),然后拍拍自己的背以进行收敛。

再次非常感谢您提供的任何建议。

编辑:弄清楚了。在第 99 次收敛时使代码中断之前,我需要运行迭代

最佳答案

只需使用 Numpy 数组索引来存储动态模型的数据,

import numpy as np

dtype = 'float128'
abs_tolerance = 1.0

y = np.arange(0.001, 2, 0.02).astype(dtype)
N = y.shape[0]

x = np.zeros(N, dtype=dtype)
z = np.zeros(N, dtype=dtype)
x[0] = 2
z[0] = 1 # initialize the first step

for idx in range(1, N):
y[idx] = x[idx-1] + y[idx-1]
x[idx] = z[idx-1] + y[idx-1]
if np.abs(y[idx] - y[idx-1]) < abs_tolerance:
print('Convergence reached')
break

else:
print('Convergence failed, exiting after {} steps'.format(idx))

x = np.asarray(x)
z = np.asarray(z)
print(x)
print(y)
print(z)

请注意,就像现在一样,xyz 之间的关系没有多大意义,并且它将很快就会溢出(因此使用 128 位 float )。

此外,如果您可以在state-space representation中阐述您的问题,你应该使用 scipy.signal.lti这是专为解决此类问题而设计的。

关于python - 动态填充列表或向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30385868/

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