簡體   English   中英

用python繪制流線

[英]plotting streamlines with python

我正在嘗試繪制基本勢流(均勻,源/匯,渦旋等)的流線和速度勢。

我剛開始使用python,所以有點困惑。 我正在遵循本指南 ..

我可以使用此功能繪制圍繞圓柱體的流線

def cylinder_stream_function(U=1, R=1):
  r = sympy.sqrt(x**2 + y**2)
  theta = sympy.atan2(y, x)
  return U * (r - R**2 / r) * sympy.sin(theta)

而且有效。 但是當我將return語句更改為

return U * r * sympy.cos(theta)

為均勻流動我得到以下錯誤

Traceback (most recent call last):
   File "test.py", line 42, in
<module>
    plot_streamlines(ax, u, v)
   File "test.py", line 32, in plot_streamlines
    ax.streamplot(X, Y, u(X, Y), v(X, Y), color='cornflowerblue')
   File "/usr/local/lib/python3.6/site-packages/matplotlib/__init__.py",
line 1710, in inner
    return func(ax, *args, **kwargs)
   File "/usr/local/lib/python3.6/site-packages/matplotlib/axes/_axes.py",
line 4688, in streamplot
    integration_direction=integration_direction)
   File "/usr/local/lib/python3.6/site-packages/matplotlib/streamplot.py",
line 136, in streamplot
    if (u.shape != grid.shape) or (v.shape != grid.shape):
   AttributeError: 'int' object has no attribute 'shape'

余檢查返回的對象的類型,它是<class 'sympy.core.mul.Mul'>與所述第一返回語句和<class 'sympy.core.symbol.Symbol'>與所述第二個。 也許這與為什么它不起作用有關,但是我不確定如何?

我用以下內容繪制流線型

import numpy as np
import matplotlib.pyplot as plt
import sympy
from sympy.abc import x, y 

def uniform_flow_stream_function(U=1):
  r = sympy.sqrt(x**2 + y**2)
  theta = sympy.atan2(y, x)
  return U * r * sympy.sin(theta)

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

def plot_streamlines(ax, u, v, xlim=(-4, 4), ylim=(-4, 4)):
    x0, x1 = xlim
    y0, y1 = ylim
    # create a grid of values
    Y, X =  np.ogrid[y0:y1:100j, x0:x1:100j]
    ax.streamplot(X, Y, u(X, Y), v(X, Y), color='cornflowerblue')

psi = uniform_flow_stream_function()
u, v = velocity_field(psi)
fig, ax = plt.subplots(figsize=(5, 5))

plot_streamlines(ax, u, v)
plt.show()

有人可以幫我了解為什么這不起作用以及如何使它起作用嗎? 謝謝!

之所以不起作用,是因為類的差異。 您的函數U * r * sympy.cos(theta)= y。 這意味着您將返回僅y的函數。 因此,您的-psi.diff(x)= 0,您將獲得v的整數。

用一維數據繪制流線是不可能的。 因此,為了在2D中繪制流線,您必須在uniform_flow_stream_function同時包含x和y。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM