import numpy as np import matplotlib.pyplot as plt theta = np.linspace(0, np.pi/2, 100) r = 1 / np.sqrt(1 - 0.5 * np.sin(2 * theta)) x = r * np.cos(theta) y = r * np.sin(theta) plt.figure() plt.plot(x, y) plt.xlim(0, 1.2) plt.ylim(0, 1.2) plt.xlabel('x') plt.ylabel('y') plt.title('Plot of x² + y² - xy = 1 in the first quadrant') plt.grid() plt.show()
时间: 2025-06-24 09:40:21 浏览: 16
要绘制方程 \(x^2 + y^2 - xy = 1\) 在第一象限的图像,可以利用 `matplotlib` 和 `numpy` 库完成此任务。以下是详细的实现方法:
### 实现过程
#### 导入必要的库
首先需要导入所需的 Python 库 `matplotlib.pyplot` 和 `numpy`。
```python
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import fsolve
```
[^1]
#### 定义隐函数
由于该方程是一个隐式定义的关系,无法直接解出显式的 \(y=f(x)\),因此可以通过数值求解器来获取对应的 \(y\) 值。这里使用 SciPy 中的 `fsolve` 函数来进行数值求解。
```python
def implicit_function(y, x):
return x**2 + y**2 - x*y - 1
```
[^1]
#### 数值求解并生成数据点
为了在第一象限绘图,限定 \(x \geq 0\) 并逐步增加 \(x\) 的取值范围。对于每一个 \(x\) 值,调用 `fsolve` 来找到满足方程的对应 \(y\) 值。
```python
x_values = np.linspace(0, 2, 500) # 设定 x 范围为 [0, 2],步数为 500
y_values = []
for x_val in x_values:
sol = fsolve(implicit_function, args=(x_val), x0=1)[0] # 初始猜测设为 1
if sol >= 0: # 只保留正半平面的结果
y_values.append(sol)
y_values = np.array(y_values)
```
#### 绘制图像
接下来使用 `plt.plot()` 方法绘制曲线,并添加网格线和图例以便于观察。
```python
plt.figure(figsize=(8, 6))
plt.plot(x_values[:len(y_values)], y_values, label=r'$x^2 + y^2 - xy = 1$', color='blue')
plt.axhline(0, color='black',linewidth=0.5, linestyle='--') # 添加水平辅助线
plt.axvline(0, color='black',linewidth=0.5, linestyle='--') # 添加垂直辅助线
plt.grid(True) # 启用网格线
plt.legend(fontsize=12) # 添加图例
plt.title(r'Plot of $x^2 + y^2 - xy = 1$ in the First Quadrant', fontsize=14) # 图形标题
plt.xlabel('x', fontsize=12) # x 轴标签
plt.ylabel('y', fontsize=12) # y 轴标签
plt.xlim(0, max(x_values)) # 设置 x 轴范围
plt.ylim(0, max(y_values)+0.5) # 设置 y 轴范围
plt.show()
```
[^1]
---
### 结果展示
运行以上代码后,将会得到一张清晰的第一象限中的 \(x^2 + y^2 - xy = 1\) 方程的图像,其中包含了完整的标注、网格以及合理的坐标轴设置。
---
阅读全文
相关推荐















