用Numpy计算两个耦合方程

2024-09-30 20:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

这一次,这不是一个很重要的问题,但也许是一个有趣的问题。在

假设我们有两个变量xansy。这些变量取决于时间(离散时间)。我们有一个开始条件,并希望随着时间的推移进行迭代。假设我们有x[0] = a和{}。现在我们要计算所有给定点的时间,我们知道这两个变量之间的关系:

x[n+1] = x[n] + y[n]
y[n+1] = y[n] + np.sin(x[n+1])

当然,我们可以用一个循环来完成:

^{pr2}$

好吧。这是可能的,如果我没有犯错误的话。我想要的是有一个更好的,更像numpy的方法来解决它,而不需要迭代。 我试着想出一些转移或其他的东西。我只想要一个没有循环的数组的计算,因为循环真的很无聊。我刚有一个递归函数调用的想法,但明天早上我得试试。在


Tags: 方法numpy关系np时间数组sin条件
1条回答
网友
1楼 · 发布于 2024-09-30 20:31:08

正如上面的评论者所说,这不能很好地向量化。如果您想要一个有助于提高速度的快速修复方法,请考虑来自scipy.weaveinline选项。下面的代码是一个脚本,它为您所需的离散系统提供了一个工作示例。对于大型数组,这应该比Python for循环好得多。在

import scipy.weave as weave
import numpy as np

def simulate_x_and_y(x,y,a,b):

    x[0] = a; y[0] = b;
    n_range = len(x)

    code = """
    #include <math.h>

    for(int n = 1; n < n_range; n++){
        x(n) = x(n-1) + y(n-1);
        y(n) = y(n-1) + sin(x(n)); 
    }
    """

    weave.inline(code, ['x','y','n_range'], 
                 type_converters = weave.converters.blitz,
                 compiler = "gcc", headers=["<math.h>"]
                )


if __name__ == "__main__":

    x = np.zeros(10);
    y = np.zeros(10);
    a = 4.0; b = 10.0;

    print "Before:"
    print x
    print y

    simulate_x_and_y(x,y,a,b)

    print "After:"
    print x
    print y

相关问题 更多 >