gpt4 book ai didi

python - 在复平面加corr中找到A(x)和B(y)的交点。 x和y

转载 作者:行者123 更新时间:2023-11-28 20:20:32 25 4
gpt4 key购买 nike

假设我有以下问题:
。我知道这些函数在复平面上交叉。。最聪明的方法是什么?
这是我的出发点:

import matplotlib.pyplot as plt
import numpy as np
from numpy import sqrt, pi

x = np.linspace(1, 10, 10000)
y = np.linspace(1, 60, 10000)

def A_(x):
return -1/( 8/(pi*x)*sqrt(1-(1/x)**2) - 1j*(8/(pi*x**2)) )
A = np.vectorize(A_)

def B_(y):
return 3/(1j*y*(1+1j*y))
B = np.vectorize(B_)


real_A = np.real(A(x))
imag_A = np.imag(A(x))

real_B = np.real(B(y))
imag_B = np.imag(B(y))

plt.plot(real_A, imag_A, color='blue')
plt.plot(real_B, imag_B, color='red')
plt.show()

我不一定非得画出来。我只需要 A(x)B(y)(有些错误取决于 xy)。

编辑:
。为了澄清我需要的:
x_intersectiony_intersection是numpy数组,我需要每个数组的交点的索引加上相应的 xy值(这同样不是交点本身,而是数组 xy的一些值)。

最佳答案

。。

import matplotlib.pyplot as plt
import numpy as np
from numpy import sqrt, pi
from scipy import optimize

def A(x):
return -1/( 8/(pi*x)*sqrt(1-(1/x)**2) - 1j*(8/(pi*x**2)) )

def B(y):
return 3/(1j*y*(1+1j*y))

# The next three lines find the intersection
def dist(x):
return abs(A(x[0])-B(x[1]))
sln = optimize.minimize(dist, [1, 1])

# plotting everything....
a0, b0 = A(sln.x[0]), B(sln.x[1])
x = np.linspace(1, 10, 10000)
y = np.linspace(1, 60, 10000)
a, b = A(x), B(y)

plt.plot(a.real, a.imag, color='blue')
plt.plot(b.real, b.imag, color='red')
plt.plot(a0.real, a0.imag, "ob")
plt.plot(b0.real, b0.imag, "xr")
plt.show()

。。
。。可以这样做:
data = dist((X, Y))
fig, ax = plt.subplots()
im = ax.imshow(data, cmap=plt.cm.afmhot, interpolation='none',
extent=[min(x), max(x), min(y), max(y)], origin="lower")
cbar = fig.colorbar(im)
plt.plot(sln.x[0], sln.x[1], "xw")
plt.title("abs(A(x)-B(y))")

。。
对于其他的交叉路口,人们必须多挖一点。“也就是说,”艾玛在评论中问到了其他的根,我在评论中提到,没有一种普遍可靠的方法可以找到任意方程的所有根,但下面是我寻找其他根的方法。。
首先,很明显在我的第一张图中显示的域中只有一个交集,并且在左边的区域中没有交集。。。然后带有交叉点的图变成
。这显示了上面找到的交叉点,加上两条曲线可能接触的点(红色曲线, vectorize,到达一个几乎与向上的蓝色曲线相接的点),所以这是一个新的有趣的东西,我要找的东西。

It's difficult to understand sln.x[0] from the above plot, so I'll look at the real and imaginary parts independently:

现在很明显,曲线的另一个相等时间是在 sln.x[1]A(sln.x[0])=B(sln.x[1])处。。
就这样。。所以使用:
def dist2(x):
return abs(A(x[0])-B(1./x[1]))

其中右边的min是最初发现的,而0,现在是 numpy.searchsorted(x, sln.x[0])x是另一个(同样,这对于在这里应用优化器来说不够有趣,但是在其他方程中可能会很有趣)。
当然,也可以通过找到进入上述图表的数据的最小值来估计这一点,如下所示:
X, Y = np.meshgrid(x, y)
data = dist((X, Y))
r = np.unravel_index(data.argmin(), data.shape)
print x[r[1]], y[r[0]]
# 2.06306306306 1.8008008008 # min approach gave 2.05973231 1.80069353

但这只是近似值(对 y的分辨率),而且涉及更多的计算(比几百个百万分之一)。我之所以发这篇文章,是因为我认为这可能是OP最初的想法。

关于python - 在复平面加corr中找到A(x)和B(y)的交点。 x和y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102754/

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