0

我有一个包含多个变量的函数,我需要使用 python 找到函数不再变化的值。

我们以 f(x,y)=exp(-xy) 为例

这是代码:

import numpy as np

def func_opt(x,y):
    return np.exp(-x-y);
    
xmax = 10;
ymax = 10;
dx = 0.1;
dy = 0.1;
Nx = xmax//dx+1;
Ny = xmax//dy+1;
x = np.linspace(0, xmax, Nx);
y = np.linspace(0, ymax, Ny);
s = (len(x), len(y));
result = np.zeros(s);
for i in range(len(x)):
    for j in range(len(y)):
        result[i][j] = func_opt(x[i],y[j]);

print(result)

是否有任何 python 函数可以找到 x 和 y 来验证以下条件:

结果[i][j]- 结果[i-1][j-1] < 1e-9?

4

1 回答 1

0

我会使用numpy.isclose给定公差的函数,它返回一个布尔值,指示传递给它的元素是否接近。

我会将它与一个np.roll函数一起使用,沿着右轴。

np.isclose(result, np.roll(result, shift=1, axis=1), atol=1e-9)

这将返回一个与结果矩阵大小相同的矩阵,其中的布尔值指示此单元格是否足够靠近其邻居。当我说邻居(shift = 1,axis = 1)时。您可能对axis=0 或shigt=-1 感兴趣,因此您可以尝试看看您需要什么(水平或垂直方向-i 或j)。

请注意,roll 存在边界问题(最右边的元素,当右移时,会回到开头),所以我会将数组填充得更大一些。

于 2020-09-28T10:47:44.837 回答