二维函数不返回值数组?

2024-05-04 02:34:46 发布

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

我试着画一个二维函数(特别是二维拉普拉斯解)。我定义了我的函数,当我输入特定的数字时,它返回正确的值,但是当我尝试运行一个值数组(下面的x,y)时,它仍然只返回一个数字。我尝试了一个x和y的随机函数(例如,f(x,y)=x^2+y^2),它给了我一个值数组。你知道吗

def V_func(x,y):
    a = 5
    b = 4
    Vo = 4
    n = np.arange(1,100,2)
    sum_list = []

    for indx in range(len(n)):
        sum_term = (1/n[indx])*(np.cosh(n[indx]*np.pi*x/a))/(np.cosh(n[indx]*np.pi*b/a))*np.sin(n[indx]*np.pi*y/a)
        sum_list = np.append(sum_list,sum_term)

    summation = np.sum(sum_list)
    V = 4*Vo/np.pi * summation

    return V

x = np.linspace(-4,4,50)
y = np.linspace(0,5,50)
V_func(x,y)

出局:53.633709914177224


Tags: 函数定义nppi数字数组listfunc
2条回答

试试这个:

def V_func(x,y):
  a = 5
  b = 4
  Vo = 4
  n = np.arange(1,100,2)
  # sum_list = []
  sum_list = np.zeros(50)

  for indx in range(len(n)):
      sum_term = (1/n[indx])*(np.cosh(n[indx]*np.pi*x/a))/(np.cosh(n[indx]*np.pi*b/a))*np.sin(n[indx]*np.pi*y/a)
      # sum_list = np.append(sum_list,sum_term)
      sum_list += sum_term

  # summation = np.sum(sum_list)
  # V = 4*Vo/np.pi * summation
  V = 4*Vo/np.pi * sum_list

  return V

定义一对数组:

In [6]: x = np.arange(3); y = np.arange(10,13)
In [7]: x,y
Out[7]: (array([0, 1, 2]), array([10, 11, 12]))

尝试2的简单函数

In [8]: x + y
Out[8]: array([10, 12, 14])

因为它们的大小相同,所以可以按元素求和(或以其他方式组合)。结果与2个输入具有相同的形状。你知道吗

现在试试“广播”。x[:,None]具有形状(3,1)

In [9]: x[:,None] + y
Out[9]: 
array([[10, 11, 12],
       [11, 12, 13],
       [12, 13, 14]])

结果是(3,3),第一个3来自重塑的x,第二个来自y。你知道吗

我可以用meshgrid生成一对数组:

In [10]: I,J = np.meshgrid(x,y,sparse=True, indexing='ij')
In [11]: I
Out[11]: 
array([[0],
       [1],
       [2]])
In [12]: J
Out[12]: array([[10, 11, 12]])
In [13]: I + J
Out[13]: 
array([[10, 11, 12],
       [11, 12, 13],
       [12, 13, 14]])

注意meshgrid中添加的参数。这就是我们从一对一维数组生成二维值的方法。你知道吗

现在看看sum做了什么。在函数中使用时:

In [14]: np.sum(I + J)
Out[14]: 108

结果是一个标量。见文件。如果我指定一个axis,我会得到一个数组。你知道吗

In [15]: np.sum(I + J, axis=0)
Out[15]: array([33, 36, 39])

如果你给了V_func正确的xy,那么sum_list可能是一个3d数组。无轴sum将其减少为标量。你知道吗

在这样的代码中,需要跟踪数组形状。如果需要,包括测试打印;不要只是假设什么;测试它。注意尺寸在通过各种操作时是如何增长和收缩的。你知道吗

相关问题 更多 >