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
来创建生成器。