Постройте матричное уравнение в 2d или 3d с помощью matplotlib - PullRequest
0 голосов
/ 05 мая 2020

У меня есть следующее уравнение:

y = x^T * A * x + b^T * x + c

где x, b, c - векторы в пространстве n, а A - матрица nxn.

Я могу построить линейный уравнение в matplotlib, но не уверен, как матричное уравнение (если возможно) может быть показано также на трехмерном графике.

Я пробовал со следующим кодом, A задана матрица, а w, c и b - столбцы векторы. X и Y - это я sh, а 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 Ответ

1 голос
/ 05 мая 2020

В вашем коде две проблемы: 1) meshgrid использовался некорректно (нужны два массива, а не два int); 2) на поверхностном графике вы использовали X, A, Z вместо X, Y, Z - X, A, Z будет работать и может иметь смысл, но я предполагаю, что это не было вашим намерением.

Вот рабочий раствор:

enter image description here

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)
...