如何找到两个图的数值交点,SYMPY

问题描述

我遇到了一些问题,我认为这很容易,但是我真的不知道该怎么办。 我有两个功能

f =(1 + 1/4)* sp.cos(t)+(1/4)* sp.cos((4-1)* t)

g =(1 + 1/4)* sp.sin(t)-(1/4)* sp.sin((4-1)* t)

我需要使用lambdify绘制它们,得到的东西看起来像菱形。 但是现在我需要搜索该图形与单位圆的交点,而我真的不知道该怎么做。单位圆的等式为:x ^ 2 + y ^ 2 = 1(我不知道其他公式),我只是不知道如何使用这些等式找到交点。

我尝试使用Nsolve进行操作,但由于错误而返回...

解决方法

单位圆既可以表示为公式x²+y²=1,也可以表示为参数公式:x=cos(u); y=sin(u)

我尝试了几种方法来求解组合方程,但似乎只有以下几种可行。将fg的方程式代入圆方程式,然后调用sympy的标准solve。这给出了4个解决方案,正如该图所预期的那样。

如sympy的gotchas中所述,Python在sympy有机会将其表示为适当分数之前,将分数1/4转换为浮点数0.25。当遇到浮点数时,许多sympy的符号运算都开始使用数字近似值。可以使用分母或分母上的S运算符将分数转换为对称分数来避免这种情况。

Sympy的plot_parametric可以绘制菱形曲线,plot_implicit可以绘制圆方程。

from sympy import symbols,Eq,pi,cos,sin,solve,plot_parametric,plot_implicit,S

t,x,y = symbols('t x y')
f = (1 + S(1) / 4) * cos(t) + (S(1) / 4) * cos((4 - 1) * t)
g = (1 + S(1) / 4) * sin(t) - (S(1) / 4) * sin((4 - 1) * t)
circle = Eq(x ** 2 + y ** 2,1)
sol = solve([circle.subs({x: f,y: g})],t)
print(sol)
print([s.evalf() for s,in sol])

p1 = plot_parametric(f,g,(t,2 * pi),line_color='b',show=False)
p2 = plot_implicit(circle,line_color='r',show=False)
p1.append(p2[0])
p1.show()

t的解决方案:-3/4 π,-1/4 π,1/4 π and 3/4 π

数字:[-2.35619449019234,-0.785398163397448,0.785398163397448,2.35619449019234]

resulting plot

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...