Python 我可能在流函数中遇到问题

Python 我可能在流函数中遇到问题,python,python-3.x,fluid,fluid-dynamics,fluid-styled-content,Python,Python 3.x,Fluid,Fluid Dynamics,Fluid Styled Content,我下面的代码应该是绘制物体周围的流函数,我决定在物体上放置漩涡,以使其缩进,除了流函数的均匀流。对于一个简单的流函数,我可以得到一个图,但是对于这个流函数,我面临着许多我无法解决的问题。有人能帮忙吗 import sympy as s import matplotlib.pyplot as plt import numpy as np from sympy import sqrt from sympy import log S_1=[13.966 ,0.2359] S_2=[13.7464 ,0

我下面的代码应该是绘制物体周围的流函数,我决定在物体上放置漩涡,以使其缩进,除了流函数的均匀流。对于一个简单的流函数,我可以得到一个图,但是对于这个流函数,我面临着许多我无法解决的问题。有人能帮忙吗

import sympy as s
import matplotlib.pyplot as plt
import numpy as np
from sympy import sqrt
from sympy import log
S_1=[13.966 ,0.2359]
S_2=[13.7464 ,0.7247]
S_3=[14.0353 ,1.062]
S_4=[14.3243 ,1.2803]
S_5=[14.0657, 1.2803]
S_6=[13.8827 ,1.8382]
S_7=[13.67 ,2.2322]
S_8=[13.1772, 2.6921]
S_9=[12.2791 ,2.8433]
S_10=[11.6264 ,2.8433]
S_11=[11.3163 ,2.4508]
S_12=[11.3127 ,1.9264]
S_13=[11.2179 ,1.4682]
S_14=[11.3474 ,1.0634]
S_15=[11.3127 ,0.5757]
S_16=[11.1604 ,0.1907]

P_1=[7.9398 ,0.5117]
P_2=[7.4442 ,0.9823]
P_3=[6.9758 ,1.4271]
P_4=[6.5624 ,1.8197]
P_5=[6.1236 ,2.2364]
P_6=[5.7148 ,2.6248]
P_7=[4.9071 ,1.9994]
P_8=[4.1875 ,1.4424]
P_9=[3.3127 ,0.7654]
P_10=[2.5914 ,0.2072]

pi=s.pi

x = np.arange(0,20,0.1)
y = np.arange(0,10,0.05)



X,Y = np.meshgrid(x,y)



def cylinder_stream_fct(V_inf=25,C_s=2,C_p=3.25):
    for i in range(1,21):
        for j in range(1,11):

            return (-V_inf*y[i,j]-(C_s/(2*pi))*log(sqrt((x[i,j]-S_1[0])**2+(y[i,j]-S_1[1])**2))
                   +(C_s/(2*pi))*log(sqrt((x[i,j]-S_1[0])**2+(y[i,j]+S_1[1])**2))
                     -(C_s/(2*pi))*log(sqrt((x[i,j]-S_2[0])**2+(y[i,j]-S_2[1])**2))
                +(C_s/(2*pi))*log(sqrt((x[i,j]-S_2[1])**2+(y[i,j]+S_2[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_3[0])**2+(y[i,j]-S_3[1])**2))
                    +(C_s/(2*pi))*log(sqrt((x[i,j]-S_3[0])**2+(y[i,j]+S_3[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_4[0])**2+(y[i,j]-S_4[1])**2))
                    +(C_s/(2*pi))*log(sqrt((x[i,j]-S_4[0])**2+(y[i,j]+S_4[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_5[0])**2+(y[i,j]-S_5[1])**2))
                    +(C_s/(2*pi))*log(sqrt((x[i,j]-S_5[0])**2+(y[i,j]+S_5[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_6[0])**2+(y[i,j]-S_6[1])**2))
                    +(C_s/(2*pi))*log(sqrt((x[i,j]-S_6[0])**2+(y[i,j]+S_6[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_7[0])**2+(y[i,j]-S_7[1])**2))
                    +(C_s/(2*pi))*log(sqrt((x[i,j]-S_7[0])**2+(y[i,j]+S_7[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_8[0])**2+(y[i,j]-S_8[1])**2))
                    +(C_s/(2*pi))*log(sqrt((x[i,j]-S_8[0])**2+(y[i,j]+S_8[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_9[0])**2+(y[i,j]-S_9[1])**2))
                    +(C_s/(2*pi))*log(sqrt((x[i,j]-S_9[0])**2+(y[i,j]+S_9[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_10[0])**2+(y[i,j]-S_10[1])**2))
                     +(C_s/(2*pi))*log(sqrt((x[i,j]-S_10[0])**2+(y[i,j]+S_10[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_11[0])**2+(y[i,j]-S_11[1])**2))
                     +(C_s/(2*pi))*log(sqrt((x[i,j]-S_11[0])**2+(y[i,j]+S_11[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_12[0])**2+(y[i,j]-S_12[1])**2))
                     +(C_s/(2*pi))*log(sqrt((x[i,j]-S_12[0])**2+(y[i,j]+S_12[1])**2))
                -(C_p/(2*pi))*log(sqrt((x[i,j]-P_1[0])**2+(y[i,j]-P_1[1])**2))
                    +(C_p/(2*pi))*log(sqrt((x[i,j]-P_1[0])**2+(y[i,j]+P_1[1])**2))
                -(C_p/(2*pi))*log(sqrt((x[i,j]-P_2[0])**2+(y[i,j]-P_2[1])**2))
                    +(C_p/(2*pi))*log(sqrt((x[i,j]-P_2[0])**2+(y[i,j]+P_2[1])**2))
                -(C_p/(2*pi))*log(sqrt((x[i,j]-P_3[0])**2+(y[i,j]-P_3[1])**2))
                    +(C_p/(2*pi))*log(sqrt((x[i,j]-P_3[0])**2+(y[i,j]+P_3[1])**2))
                -(C_p/(2*pi))*log(sqrt((x[i,j]-P_4[0])**2+(y[i,j]-P_4[1])**2))
                    +(C_p/(2*pi))*log(sqrt((x[i,j]-P_4[0])**2+(y[i,j]+P_4[1])**2))
                -(C_p/(2*pi))*log(sqrt((x[i,j]-P_5[0])**2+(y[i,j]-P_5[1])**2))
                    +(C_p/(2*pi))*log(sqrt((x[i,j]-P_5[0])**2+(y[i,j]+P_5[1])**2))
                -(C_p/(2*pi))*log(sqrt((x[i,j]-P_6[0])**2+(y[i,j]-P_6[1])**2))
                    +(C_p/(2*pi))*log(sqrt((x[i,j]-P_6[0])**2+(y[i,j]+P_6[1])**2))
                -(C_p/(2*pi))*log(sqrt((x[i,j]-P_7[0])**2+(y[i,j]-P_7[1])**2))
                    +(C_p/(2*pi))*log(sqrt((x[i,j]-P_7[0])**2+(y[i,j]+P_7[1])**2))
                -(C_p/(2*pi))*log(sqrt((x[i,j]-P_8[0])**2+(y[i,j]-P_8[1])**2))
                    +(C_p/(2*pi))*log(sqrt((x[i,j]-P_8[0])**2+(y[i,j]+P_8[1])**2))
                -(C_p/(2*pi))*log(sqrt((x[i,j]-P_9[0])**2+(y[i,j]-P_9[1])**2))
                    +(C_p/(2*pi))*log(sqrt((x[i,j]-P_9[0])**2+(y[i,j]+P_9[1])**2))
                -(C_p/(2*pi))*log(sqrt((x[i,j]-P_10[0])**2+(y[i,j]-P_10[1])**2))
                +(C_p/(2*pi))*log(sqrt((x[i,j]-P_10[0])**2+(y[i,j]+P_10[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_13[0])**2+(y[i,j]-S_13[1])**2))
                +(C_s/(2*pi))*log(sqrt((x[i,j]-S_13[0])**2+(y[i,j]+S_13[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_14[0])**2+(y[i,j]-S_14[1])**2))
                +(C_s/(2*pi))*log(sqrt((x[i,j]-S_14[0])**2+(y[i,j]+S_14[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_15[0])**2+(y[i,j]-S_15[1])**2))
                +(C_s/(2*pi))*log(sqrt((x[i,j]-S_15[0])**2+(y[i,j]+S_15[1])**2))
                -(C_s/(2*pi))*log(sqrt((x[i,j]-S_16[0])**2+(y[i,j]-S_16[1])**2))
                +(C_s/(2*pi))*log(sqrt((x[i,j]-S_16[0])**2+(y[i,j]+S_16[1])**2)))



def velocity_field(psi):
    u=s.lambdify((x,y), psi.diff(y), 'numpy')
    v=s.lambdify((x,y), -psi.diff(x), 'numpy')
    return u,v


def plot_streamlines(ax, u, v,xlim=(-1,1), ylim=(-1,1)):
    x0, x1=xlim
    y0, y1=ylim
    Y,X= np.ogrid[y0:y1:100j,x0:x1:100j]
    ax.streamplot(X,Y,u(X,Y),v(X,Y),color='red')
def format_axes(ax):
    ax.set_aspect('equal')
    ax.figure.subplots_adjust(bottom=0, top=1, left=0, right=1)
    ax.xaxis.set_ticks([])
    ax.yaxis.set_ticks([])
    for spine in ax.spines.values():
        spine.set_visible(False)
psi=cylinder_stream_fct()
u,v=velocity_field(psi)
xlim=ylim=(-3,3)
fig, ax=plt.subplots(figsize=(4, 4))
plot_streamlines(ax, u, v, xlim, ylim)
c=plt.Circle((0,0), radius=1,facecolor='none')
ax.add_patch(c)

format_axes(ax)
plt.show()

代码没有c=plt。圆((0,0),半径=1,面颜色为“无”)ax。add_patch(c)
立即返回
结束函数,因此
中的
for
-循环将只执行一次-使用
i=1
j=1
。对于
,循环将值放入列表中,而在
之后对于
,循环使用
返回列表
。您的意思是在列表中迭代而不是使用函数吗?您的函数只返回一个值。如果您使用相同的参数多次运行它,那么您总是得到相同的一项。如果使用
返回i,j
,则它将始终返回
(1,1)
,而不会获得其他值。我想在函数中创建一个包含所有值的列表,然后返回这个列表。但如果您需要函数,则可能需要
yield
而不是
return
来创建生成器。