0

所以我在 Sympy 中与这些参数方程作斗争。

() = cos() − sin() and () = sin() + cos() ∈ ℝ∖{0}.

import matplotlib.pyplot as plt
import sympy as sp
from IPython.display import display

sp.init_printing()
%matplotlib inline

这就是我必须定义它们的内容:

f = sp.Function('f')
g = sp.Function('g')
f = sp.cos(th) - sp.sin(a*th)
g = sp.sin(th) + sp.cos(a*th)

我不知道如何定义aℝ∖{0},当我想求解方程时它给我带来了麻烦解决 ()+()=0 方案应该是:

=[3/4,3/4,/2(−1),/(+1)]

接下来我想绘制参数方程a=2, a=4, a=6 and a=8。我想为每个值使用不同的颜色a。最有效的方法可能是使用for-loop。我还需要使用lambdify有一个值列表,但我对此很陌生,所以有点模糊。

这是我已经拥有的:

fig, ax = plt.subplots(1, figsize=(12, 12))
theta_range = np.linspace(0, 2*np.pi, 750)
colors = ['blue', 'green', 'orange', 'cyan']
a = [2, 4, 6, 8]

for index in range(0, 4):
    # I guess I need to use lambdify here but I don't see how
plt.show()

先感谢您!

4

1 回答 1

1

你问的是两个非常不同的问题。一个关于解决符号表达式的问题,一个关于绘制曲线的问题。

首先,关于象征性的表达。a可以定义为a = sp.symbols('a', real=True, nonzero=True)和。无需将 f 和 g 定义为 sympy 符号,因为它们被分配了一个 sympy 表达式。要解方程,只需使用. Sympy 给出了结果。thetath = sp.symbols('theta', real=True)sp.solve(f+g, th)[pi, pi/a, pi/(2*(a - 1)), pi/(a + 1)]

Sympy 还有一个绘图功能,可以称为sp.plot(*[(f+g).subs({a:a_val}) for a_val in [2, 4, 6, 8]]). 但是对颜色等选项的支持非常有限。

为了获得更多控制,matplotlib 可以基于 numpy 函数进行绘图。sp.lambdify转换表达式:sp.lambdify((th, a), f+g, 'numpy').

然后,matplotlib 可以进行绘图。有许多选项可以调整结果。

这是一些示例代码:

import matplotlib.pyplot as plt
import numpy as np
import sympy as sp

th = sp.symbols('theta', real=True)
a = sp.symbols('a', real=True, nonzero=True)

f = sp.cos(th) - sp.sin(a*th)
g = sp.sin(th) + sp.cos(a*th)
thetas = sp.solve(f+g, th)
print("Solutions for theta:", thetas)

fg_np = sp.lambdify((th, a), f+g, 'numpy')

fig, ax = plt.subplots(1, figsize=(12, 12))
theta_range = np.linspace(0, 2*np.pi, 750)
colors = plt.cm.Set2.colors
for a_val, color in zip([2,4,6,8], colors):
    plt.plot(theta_range, fg_np(theta_range, a_val), color=color, label=f'a={a_val}')
plt.axhline(0, color='black')
plt.xlabel("theta")
plt.ylabel(f+g)
plt.legend()
plt.grid()
plt.autoscale(enable=True, axis='x', tight=True)
plt.show()

示例图

于 2019-12-30T00:45:54.650 回答