get_points 当使用奇点函数时

如何解决get_points 当使用奇点函数时

我想在一张图中绘制来自 sympy 的多个函数,但具有 matplotlib功能。 (所以我可以做图例等)有一个帖子 here 展示了如何做到这一点。当情节包含类似 Heaviside()内容时,我的问题就出现了。

这里我定义了三个不同的函数来绘制:

from sympy import *
x = symbols('x')

a = x
b = x*(x-1/2)
c = x*Heaviside(x-1/2)

我可以像这样用 a 绘制 bmatplotlib

line1,line2 = plot((a,(x,1)),(b,show = False)
x1,y1 = line1.get_points()
x2,y2 = line2.get_points()
plt.plot(x1,y1)
plt.plot(x2,y2)

这在一张图上显示了两个图。但是如果我尝试绘制 ac,它不起作用。

line3,line4 = plot((a,)),(c,show = False)
x4,y4 = line4.get_points()

这会因错误 AttributeError: 'ImmutableDenseNDimArray' object has no attribute 'as_coefficient'

而崩溃

有什么想法吗?

解决方法

您可以使用 sympy 的 Lambdify() 将 sympy 函数转换为 numpy 函数。然后使用 matplotlib 进行所有绘图。 Lambdify() 似乎不知道 HeavisideLambdify 也在 sympy 的绘图内部使用)。提供显式转换规则可以解决该问题。

请注意,from sympy import * 可能会导致令人困惑的错误,尤其是当还涉及 numpy 时,因为许多名称重合。通常最好只导入真正用到的函数。

from sympy import symbols,Heaviside,lambdify,latex

x = symbols('x')

a = x
b = x * (x - 1 / 2)
c = x * Heaviside(x - 1 / 2)

modules = [{'Heaviside': lambda x: np.heaviside(x,1)},'numpy']
a_np = lambdify(x,a,modules=modules)
b_np = lambdify(x,b,modules=modules)
c_np = lambdify(x,c,modules=modules)

import numpy as np
import matplotlib.pyplot as plt

xs = np.linspace(-5,5,200)
plt.plot(xs,a_np(xs),label='$' + latex(a) + '$')
plt.plot(xs,b_np(xs),label='$' + latex(b) + '$')
plt.plot(xs,c_np(xs),label='$' + latex(c) + '$')
plt.legend()

sympy with Heaviside and matplotlib plotting

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?