Diese Datei stammt aus Wikimedia Commons und kann von anderen Projekten verwendet werden. Die Beschreibung von deren Dateibeschreibungsseite wird unten angezeigt.
Die Person, die das Werk mit diesem Dokument verbunden hat, übergibt dieses weltweit der Gemeinfreiheit, indem sie alle Urheberrechte und damit verbundenen weiteren Rechte – im Rahmen der jeweils geltenden gesetzlichen Bestimmungen – aufgibt. Das Werk kann – selbst für kommerzielle Zwecke – kopiert, modifiziert und weiterverteilt werden, ohne hierfür um Erlaubnis bitten zu müssen.
http://creativecommons.org/publicdomain/zero/1.0/deed.enCC0Creative Commons Zero, Public Domain Dedicationfalsefalse
Source code
Python source code.
#!/usr/bin/python3"""Make a stream function for a vector field.We are going to cheat a bit for simplicity - make the stream function firstthen derive vector field from it."""importnumpyasnpfrommatplotlibimportpyplotasplt# make a 1001 x 1001 gridx=np.linspace(0,10,1001)y=np.linspace(0,10,1001)[:,None]dx=x[1]-x[0]dy=y[1,0]-y[0,0]extent=(x[0]-0.5*dx,x[-1]+0.5*dx,y[0,0]-0.5*dy,y[-1,0]+0.5*dy)defvort(x0,y0,r):return-np.log(np.sqrt((x-x0)**2+(y-y0)**2+r**2))# construct some stream function with# overall background flow in x directionstreamfunc=0*x+0.15*y# put an irrotational vortex (singular) with negative vorticitystreamfunc-=0.50*vort(3.5,4.5,0)# make a spread-out vortex with positive vorticitystreamfunc+=0.40*vort(7,6,0.5)# Create a hole in the domain by cutting off the singular vortexstreamfunc[(streamfunc<(+0.0))&(y>2)]=np.nanstreammin=np.nanmin(streamfunc)streammax=np.nanmax(streamfunc)#calculate velocities; just forward difference for laziness.ux=np.diff(streamfunc,axis=0)/dyuy=np.diff(streamfunc,axis=1)/-dxNlevels=9contour_levels=(np.arange(0.5,(Nlevels+1))/(Nlevels+1))*(streammax-streammin)+streamminfig=plt.figure(figsize=(2,4),dpi=300)# bottom axes: 3D plot ax=fig.add_axes((0,0,1,0.5),projection='3d',computed_zorder=False)ax.view_init(30,-60,0)ax.set_xticks([])ax.set_yticks([])ax.set_zticks([])ax.plot_surface(x,y,streamfunc,cmap='RdYlGn',linewidth=0,antialiased=False,)ax.contour(x,y[:,0],streamfunc,levels=contour_levels,colors='k',linestyles='--',linewidths=0.5,zorder=1000)ax=plt.axes((0,0.5,0.997,0.5))ax.set_xticks([])ax.set_yticks([])# draw the hole in the domain as grayplt.imshow(np.isnan(streamfunc),origin='lower',extent=extent,cmap='gray_r',vmin=0,vmax=4)# plot every 67th velocity arrowslicer=slice(33,None,67)plt.quiver(x[slicer],y[slicer,:],ux[slicer,slicer],uy[slicer,slicer],scale=8.,width=0.015,color='red')plt.contour(x,y[:,0],streamfunc,levels=contour_levels,colors='k',linestyles='--',linewidths=0.75)fig.savefig('stream function.png')fig=plt.figure(figsize=(2,2),dpi=300)ax=plt.axes((0,0,0.997,1))plt.imshow(streamfunc,extent=extent,origin='lower')plt.contour(x,y[:,0],streamfunc,levels=contour_levels,colors='k',linestyles='--',linewidths=0.75)fig.savefig('stream function imshow.png')
Kurzbeschreibungen
Ergänze eine einzeilige Erklärung, was diese Datei darstellt.
The [[:w:stream function]] (below) can be used to make streamlines in velocity fields (red, above).
Diese Datei enthält weitere Informationen, die in der Regel von der Digitalkamera oder dem verwendeten Scanner stammen. Durch nachträgliche Bearbeitung der Originaldatei können einige Details verändert worden sein.