创建变量之前可以使用它吗?

时间:2018-09-03 19:15:22

标签: python

我想创建一个绘制二维微分方程组的函数,但是如果我使用2 * x + 3 * y之类的参数调用该函数,显然会遇到异常,因为我尚未定义在执行时x和y。

在代码中,我想做这样的事情:

import numpy as np
import matplotlib.pyplot as plt

def streamplot(xdot, ydot, xxrange, yyrange):
    """Displays the stream plot of a two-dimensional system of equations."""
    x, y = np.meshgrid(np.arange(0,xxrange,1),np.arange(0,yyrange,1)
    plt.streamplot(x, y, xdot, ydot)
    plt.show()

,但显然xdot和ydot将取决于尚未分配的x和y。我认为应该可以捕获在函数执行时Python会创建的异常,并在那时创建这些变量,但是应该有一种更简单的方法,对吧?

3 个答案:

答案 0 :(得分:1)

像xdot和ydot这样的外观是函数而不是变量。 您可以将函数作为参数传递给其他函数:

import math

def applyTwice (f, x):
    return f (f (x))

print (applyTwice (math.sqrt, 16))

print (applyTwice (lambda x: 2 * x, 10))

'''
Output:
2.0
40
'''

答案 1 :(得分:0)

如果您尝试使用python描述数学方程,则可以尝试使用simpy:

from sympy import *
x = Symbol('x')
y = Symbol('y')
x+y+x-y
>>>2*x

您可以将xdotydot定义为简单符号。

此处有更多详细信息:https://www.scipy-lectures.org/advanced/sympy.html

答案 2 :(得分:0)

这里采用了雅克·德·豪格(Jacques de Hooge)在回答中和我在评论中所说的内容,但使之与您的代码更加相关。请注意,f可以是从R ^ 2到R ^ 2的任何函数,并且可以传递给您的streamplot函数。

import numpy as np
import matplotlib.pyplot as plt

def f(x, y):
    return x + y, x*y

def streamplot(f, x_min=0, x_max=1, y_min=0, y_max=1,
        x_num_divisions=100, y_num_divisions=100):

    """Displays the stream plot of a two-dimensional system of equations."""

    x, y = np.meshgrid(
        np.linspace(x_min, x_max, x_num_divisions),
        np.linspace(y_min, y_max, y_num_divisions)
    )
    xdot, ydot = f(x, y)
    plt.streamplot(x, y, xdot, ydot)
    plt.show()

streamplot(f)

enter image description here