【发布时间】:2020-09-23 22:30:43
【问题描述】:
我正在尝试创建函数的切线逼近。但是,试图找到一种将其绘制在图表顶部的方法。这两个函数都可以工作,但是当我绘制函数时,我想出了类型错误“'Add' 类型的对象不是 JSON 可序列化的”
x = sp.Symbol("x")
y = sp.Symbol("y")
f = 1*(np.e**(-2*(((x**2 + y**2)**(1/2))-1))-2*np.e**(-1*(((x**2 + y**2)**(1/2))-1)))
fx = f.diff(x)
fy = f.diff(y)
x = np.linspace(-5,5,50)
y = np.linspace(-5,5,50)
[xx,yy] = np.meshgrid(x,y)
ff = 1*(np.e**(-2*(((xx**2 + yy**2)**(1/2))-1))-2*np.e**(-1*(((xx**2 + yy**2)**
(1/2))-1)))
uu = f.subs(x,2).subs(y,2) + fx.subs(x,2).subs(y,2)*(xx) + fy.subs(x,2).subs(y,2)*(yy)
import plotly.graph_objects as go
fig = go.Figure(data=[go.Surface(x=xx,y=yy,z=uu),go.Surface(x=xx,y=yy,z=ff)])
fig.show()
错误发生在最后一行代码。
【问题讨论】:
-
检查您的
uu变量。我怀疑它是一个sympy对象(Add),而不是数字(numpy数组),因为ff和xx,yy是。我不熟悉plotly,但显然它无法处理这个sympy对象。 -
您会发现很多 SO 答案/cmets 警告不要同时使用
numpy和sympy。你有plotly的额外复杂性。 -
您正在用 2 代替
sp.Symbol对象用 2 替换np.linspace对象。您需要重命名 linspace 对象或将uu移动到 linspace 对象的定义上方。我也强烈建议不要在 sympy 表达式中使用 numpy 函数。而是使用sp.exp(...)。我还建议在替换之后执行.evalf(),以便在进一步操作之前删除所有 sympy 对象。
标签: python arrays json numpy sympy