使用 matplotlib 在 2d 或 3d 中绘制矩阵方程
Plot a matrix equation in 2d or 3d using matplotlib
我有一个等式如下:
y = x^T * A * x + b^T * x + c
其中 x、b、c 是 n space 中的向量,A 是 nxn 矩阵。
我可以在 matplotlib 中绘制线性方程,但不确定矩阵方程如何(如果可能)也显示在 3d 图中。
我尝试使用以下代码,给定矩阵 A,w、c 和 b 是列向量。 X 和 Y 是网格,Z 是解。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
# if using a Jupyter notebook, include:
%matplotlib inline
fig = plt.figure(figsize=(10,6))
ax1 = fig.add_subplot(111, projection='3d')
n = 50
i = -5.0
j = 5.0
A = np.random.randint(i, j, size=(n, n))
w = np.random.randint(i, j, size=(n, 1))
c = b = np.random.randint(i, j, size=(n, 1))
X,Y = np.meshgrid(n,n)
Z = w.T*A*w + b.T*w + c
mycmap = plt.get_cmap('gist_earth')
surf1 = ax1.plot_surface(X, A, Z, cmap=mycmap)
fig.colorbar(surf1, ax=ax1, shrink=0.5, aspect=10)
plt.show()
结果情节似乎不是一个令人满意的情节。
您的代码中有两个问题:1) meshgrid
使用不正确(它需要两个数组,而不是两个整数); 2) 在曲面图中,您使用的是 X, A, Z
而不是 X, Y, Z
- X, A, Z
会起作用,并且可能有意义,但我猜这不是您的意图。
这是一个可行的解决方案:
fig = plt.figure(figsize=(10,6))
ax1 = fig.add_subplot(111, projection='3d')
n = 10
i = -5.0
j = 5.0
A = np.random.randint(i, j, size=(n, n))
w = np.random.randint(i, j, size=(n, 1))
c = b = np.random.randint(i, j, size=(n, 1))
X,Y = np.meshgrid(np.arange(n),np.arange(n))
Z = w.T*A*w + b.T*w + c
mycmap = plt.get_cmap('gist_earth')
surf1 = ax1.plot_surface(X, Y, Z, cmap=mycmap)
fig.colorbar(surf1, ax=ax1, shrink=0.5, aspect=10)
我有一个等式如下:
y = x^T * A * x + b^T * x + c
其中 x、b、c 是 n space 中的向量,A 是 nxn 矩阵。
我可以在 matplotlib 中绘制线性方程,但不确定矩阵方程如何(如果可能)也显示在 3d 图中。
我尝试使用以下代码,给定矩阵 A,w、c 和 b 是列向量。 X 和 Y 是网格,Z 是解。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
# if using a Jupyter notebook, include:
%matplotlib inline
fig = plt.figure(figsize=(10,6))
ax1 = fig.add_subplot(111, projection='3d')
n = 50
i = -5.0
j = 5.0
A = np.random.randint(i, j, size=(n, n))
w = np.random.randint(i, j, size=(n, 1))
c = b = np.random.randint(i, j, size=(n, 1))
X,Y = np.meshgrid(n,n)
Z = w.T*A*w + b.T*w + c
mycmap = plt.get_cmap('gist_earth')
surf1 = ax1.plot_surface(X, A, Z, cmap=mycmap)
fig.colorbar(surf1, ax=ax1, shrink=0.5, aspect=10)
plt.show()
结果情节似乎不是一个令人满意的情节。
您的代码中有两个问题:1) meshgrid
使用不正确(它需要两个数组,而不是两个整数); 2) 在曲面图中,您使用的是 X, A, Z
而不是 X, Y, Z
- X, A, Z
会起作用,并且可能有意义,但我猜这不是您的意图。
这是一个可行的解决方案:
fig = plt.figure(figsize=(10,6))
ax1 = fig.add_subplot(111, projection='3d')
n = 10
i = -5.0
j = 5.0
A = np.random.randint(i, j, size=(n, n))
w = np.random.randint(i, j, size=(n, 1))
c = b = np.random.randint(i, j, size=(n, 1))
X,Y = np.meshgrid(np.arange(n),np.arange(n))
Z = w.T*A*w + b.T*w + c
mycmap = plt.get_cmap('gist_earth')
surf1 = ax1.plot_surface(X, Y, Z, cmap=mycmap)
fig.colorbar(surf1, ax=ax1, shrink=0.5, aspect=10)