from sympy import *
import matplotlib.pyplot as plt
import numpy as np
V0 = 1
L = 1
x = Symbol('x')
y = Symbol('y')
v = -V0*y/(cosh(x/L)*cosh(x/L))
dv = diff(v,y)
u = -integrate(dv,x)
print(dv)
print(u)
plt.figure()
x = np.arange(0,5,1)
y = np.arange(0,5,1)
plt.quiver(x,y,u,v)
这部分无法绘图,错误是
ufunc' isfinite'不支持输入类型,并且根据投射规则无法安全地将输入强制转换为任何支持的类型'''
答案 0 :(得分:2)
您正在混合符号和数字。 quiver
需要数字输入,您无法为其指定符号表达式u
和v
。此外,您将x,y重新定义为符号后的数组 - 这不是“为符号赋值”,它只是变量重用的一个令人困惑的实例。不要那样做。找到符号表达式u和v后,执行此操作(请注意x,y将其原始含义保留为SymPy符号):
from sympy.utilities.autowrap import ufuncify
X, Y = np.meshgrid(np.arange(0,5,1), np.arange(0,5,1))
uxy = ufuncify((x, y), u)
vxy = ufuncify((x, y), v)
plt.figure()
plt.quiver(X, Y, uxy(X, Y), vxy(X, Y))
这里,ufuncify生成支持numpy数组广播的二进制函数(uxy,vxy)。这样就可以插入X,Y数组并获得一组值。然后绘图按预期工作。