在同一平面上分别绘制曲线: x :|| x ||1=1,|| x ||2=1,|| x || oo =1. 用python代码实现
时间: 2024-09-18 07:02:50 浏览: 37
在Python中,我们可以使用matplotlib库来绘制三维空间中的不同规范下的曲线。这里我们创建三个函数分别代表L1、L2和无穷范数,并利用matplotlib的plot_surface函数来可视化它们在三维空间中对应于x=1的情况。请注意,无穷范数通常用于表示向量中元素的最大绝对值,而非欧几里得范数。
```python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 定义L1、L2和无穷范数函数
def l1_norm(x):
return abs(x)
def l2_norm(x):
return np.sqrt(np.dot(x, x))
def infinity_norm(x):
return max(abs(element) for element in x)
# 设置x坐标范围
x_values = np.linspace(-5, 5, 100)
y_values = x_values
# 创建3D网格
X, Y = np.meshgrid(x_values, y_values)
Z_l1 = l1_norm(X+Y) * (np.sign(X)+np.sign(Y)) # L1范数需要判断正负
Z_l2 = l2_norm(np.array([X, Y]).T) # L2范数直接计算
Z_infinity = infinity_norm(np.array([X, Y]).T) # 无穷范数取最大绝对值
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 绘制每个范数的曲面
ax.plot_surface(X, Y, Z_l1, label="L1 norm", cmap='viridis')
ax.plot_surface(X, Y, Z_l2, label="L2 norm", alpha=0.7, cmap='coolwarm')
ax.plot_surface(X, Y, Z_infinity, label="Infinity norm", cmap='plasma')
# 添加标签和轴
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Norm value')
ax.legend()
plt.show()
```
这段代码将生成三个表面图,分别代表L1、L2和无穷范数在x+y=1平面上的情况。注意,对于无穷范数,因为它是所有元素中最大值,所以曲面看起来会相对平坦,而在其他两个范数下会有更明显的起伏。
阅读全文