Ich versuche, eine 3D-Oberfläche zu plotten, aber ich habe einige Probleme, weil die Dokumentation für matplotlib
nicht sehr gründlich scheint und in Beispielen fehlt. Wie auch immer das Programm, das ich geschrieben habe, ist es, die Wärmegleichung numerisch über die Methode der endlichen Unterschiede zu lösen. Hier ist mein Code:Erstellen eines 3D-Oberflächendiagramms mit Matplotlib in Python
## This program is to implement a Finite Difference method approximation
## to solve the Heat Equation, u_t = k * u_xx,
## in 1D w/out sources & on a finite interval 0 < x < L. The PDE
## is subject to B.C: u(0,t) = u(L,t) = 0,
## and the I.C: u(x,0) = f(x).
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
# Parameters
L = 1 # length of the rod
T = 10 # terminal time
N = 40 # spatial values
M = 1600 # time values/hops; (M ~ N^2)
s = 0.25 # s := k * ((dt)/(dx)^2)
# uniform mesh
x_init = 0
x_end = L
dx = float(x_end - x_init)/N
x = np.arange(x_init, x_end, dx)
x[0] = x_init
# time discretization
t_init = 0
t_end = T
dt = float(t_end - t_init)/M
t = np.arange(t_init, t_end, dt)
t[0] = t_init
# time-vector
for m in xrange(0, M):
t[m] = m * dt
# spatial-vector
for j in xrange(0, N):
x[j] = j * dx
# definition of the solution u(x,t) to u_t = k * u_xx
u = np.zeros((N, M+1)) # array to store values of the solution
# Finite Difference Scheme:
u[:,0] = x * (x - 1) #initial condition
for m in xrange(0, M):
for j in xrange(1, N-1):
if j == 1:
u[j-1,m] = 0 # Boundary condition
elif j == N-1:
u[j+1,m] = 0 # Boundary Condition
else:
u[j,m+1] = u[j,m] + s * (u[j+1,m] -
2 * u[j,m] + u[j-1,m])
Das ist das, was ich geschrieben habe, um zu versuchen, und zeichnen ein 3D-Oberflächendiagramm:
# for 3D graph
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, t, u, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
ich diese Störung erhalte, wenn ich den Code ausführen, um die Grafik zu zeichnen: " ValueError: Formkonflikt: Zwei oder mehr Arrays haben auf Achse 1 inkompatible Dimensionen. "
Bitte, jede und alle Hilfe ist sehr gut geeignet. Ich denke, der Fehler kommt auf, weil ich u
als Nx(M+1)
Matrix definiert habe, aber es ist notwendig, das ursprüngliche Programm auszuführen. Ich bin mir nicht sicher, wie ich das korrigieren kann, damit die Grafik korrekt dargestellt wird. Vielen Dank!
Vielen Dank, das hat den Trick gemacht – Javier