如何用matplotlib绘制一般方程?

2024-09-27 23:23:15 发布

您现在位置:Python中文网/ 问答频道 /正文

已经研究了以下问题-主要是python中的matplotlib

“基本”函数是可能的,例如y = x^2,但如果我想绘制一个方程(由于多个x-y关联,它不一定是函数),例如:

x^2 + y^2 = 1(在二维坐标系中,围绕点(0/0)的半径为1的基本圆)

有没有办法用matplotlib或类似的库绘制这样的方程

我想到了将方程重新写入可绘制函数的想法,但由于绝对值赋值,它看起来比原始方程更难,例如,将上面的方程转换为“函数”:|y| = sqrt(1-x²)带有-y+y

//编辑:应@mkrieger1的请求,编辑此问题。 我的软件的目的是使用一个输入(由另一个函数给出;表示任何方程的字符串,例如"y^3-sqrt(sin(x^2)-2)*2 = 3x"),并将其转换为绘图。我个人在解决y的函数的方法上失败了(如前所述),尤其是对于更复杂的函数。考虑到各种各样的数学输入,将这些方程分解为“更小的部分”也相当困难,因此我认为采用轮廓求解方法将是最好的部分。(如@mkrieger1所示)。 同样,由于在plt.contour(X, Y, func, [0])中实现之前需要对等式进行“编辑”,以及稍后的用户警告,这种方法非常关键


Tags: 方法函数字符串目的编辑软件matplotlib半径
2条回答

如果使用matplotlib,您会注意到plot接受一对长度相等的数组,表示x-y对序列。它不了解函数、方程或您提到的任何其他概念

因此,支持绘制简单函数的断言在很大程度上是毫无意义的,即使是真的。也就是说,转换笛卡尔空间中的非函数(如圆)的标准方法是将其参数化。对于许多流行的非函数,一种可能的参数化方法是使用极坐标

例如:

t = np.linspace(0, 2 * np.pi, 100)   # the parameter
x = np.cos(t)
y = np.sin(t)

您还可以使用sympyconvert字符串中的表达式转换为方程,然后再转换为plot。我省略了示例中的-2,因为这将导致一个非常空的绘图。Symphy的解析器支持特殊函数,以允许省略乘法(如3x),并将Python的xor函数(^)转换为幂函数

from sympy import plot_implicit, Eq
from sympy.parsing.sympy_parser import parse_expr
from sympy.parsing.sympy_parser import standard_transformations, convert_xor, implicit_multiplication

string = "y^3-sqrt(sin(x^2))*2 = 3x"
transformations = (standard_transformations + (implicit_multiplication,) + (convert_xor,))
lhs = parse_expr(string.split('=')[0], transformations=transformations)
rhs = parse_expr(string.split('=')[1], transformations=transformations)

plot_implicit(Eq(lhs, rhs))

sample plot

另一个例子:

from sympy import plot_implicit, Eq, cos
from sympy.abc import x, y

plot_implicit(Eq(x/y, cos(y)), (x, -10, 10), (y, -10, 10))

请注意,如果不显式设置变量的范围,plot_implicit假定默认范围在-5和5之间

another example

相关问题 更多 >

    热门问题