scipy 保角绘图python

1tu0hz3e  于 2022-11-10  发布在  Python
关注(0)|答案(3)|浏览(140)

我正在研究joukowsky变换来绘制翼型,我正尝试用python来做这个,保角Map应该是非常直接的,但是似乎找不到一个如何在python上解决这个问题的指南。
根据数学计算:

z = x + y *1j    ### j = sqrt(-1) as representation of complex number
xi = z + 1 / z**2

根据理论,通过绘制z i应该在那个平面上得到一个圆,而通过绘制xi应该是一个椭圆,然而我得到的结果只是一个随机的数字。不知道是数学上的错误还是程序缺少其他步骤来完成转换。
以防万一,我用的就是这种网格。

N = 50
x_i, x_e = -4.0, 4.0
y_i, y_e = -3.0, 3.0
x = np.linspace(x_i,x_e,N)
y = np.linspace(y_i,y_e,N)
X,Y = np.meshgrid(x,y)
cwxwcias

cwxwcias1#

为方便起见,朱可夫斯基变换是用复数表示法编写的。您仍然需要在z平面上定义要变换到$\zeta$平面的点。下面是一个圆的示例:

import numpy as np
import matplotlib.pyplot as plt 

theta = np.arange(0, np.pi, 0.1)
z = 1.5 * np.exp(1j*theta)

fig, axs = plt.subplots(1, 2, sharex=True, sharey=True)
axs[0].plot(np.real(z), np.imag(z))
axs[0].set_aspect(1)
xi = z + 1.0 / z

axs[1].plot(np.real(xi), np.imag(xi))
axs[1].set_aspect(1)
plt.show()

dkqlctbz

dkqlctbz2#

我不确定你的公式是否正确。如果我这样做:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def z(x,y):
  return x+y*1j
def xi(z):
  return z + 1/(z*z)

x = np.linspace(-4,4,50)
y = np.linspace(-3,3,50)
X,Y = np.meshgrid(x,y)
Z = z(X,Y)
XI = xi(Z)
plt.plot(XI)

那么XI看起来就像这样:

array([[-3.9888    -3.0384j    , -3.82656782-3.04091326j,
        -3.66458717-3.04355918j, ...,  3.68235161-2.95644082j,
         3.84690157-2.95908674j,  4.0112    -2.9616j    ],
       [-3.9869054 -2.91659957j, -3.82456122-2.91928864j,
        -3.66247239-2.92213984j, ...,  3.68446638-2.8329622j ,
         3.84890817-2.8358134j ,  4.0130946 -2.83850247j],
       [-3.98488918-2.79470705j, -3.82241138-2.79757247j,
        -3.66018978-2.80063211j, ...,  3.68674899-2.70957197j,
         3.85105801-2.71263161j,  4.01511082-2.71549703j],
       ...,
       [-3.98488918+2.79470705j, -3.82241138+2.79757247j,
        -3.66018978+2.80063211j, ...,  3.68674899+2.70957197j,
         3.85105801+2.71263161j,  4.01511082+2.71549703j],
       [-3.9869054 +2.91659957j, -3.82456122+2.91928864j,
        -3.66247239+2.92213984j, ...,  3.68446638+2.8329622j ,
         3.84890817+2.8358134j ,  4.0130946 +2.83850247j],
       [-3.9888    +3.0384j    , -3.82656782+3.04091326j,
        -3.66458717+3.04355918j, ...,  3.68235161+2.95644082j,
         3.84690157+2.95908674j,  4.0112    +2.9616j    ]])

它的情节看起来像:

vyswwuz2

vyswwuz23#

joukowsky变换可以被看作是一个复变量的函数,并通过将其应用于圆或正方形,环形等来可视化。
https://github.com/im-AMS/Conformal-Maps
然后,例如,可以用相应的joukowsky变换将圆去模糊为机翼。

相关问题