使用 Sage Math 绘制 3D 表面
Plotting 3D Surface with Sage Math
我正在尝试使用 SageMath Cloud 绘制 3D 表面,但我遇到了一些麻烦,因为 matplotlib 的文档似乎不是很详尽并且缺少示例。无论如何,我编写的程序是绘制我从解析方法得到的热方程解。
案例是:
Heat Equation
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from sympy import *
from math import *
x = np.linspace(-8, 8, 100)
t = np.linspace(-8, 8, 100)
n = symbols('n', integer=True)
X, T = np.meshgrid(x, t)
an = float(2 / 10) * integrate(50 * sin(radians((2 * n + 1) * pi * x / 20)), (x, 0, 10))
Z = summation(an * e**(2 * n + 1 / 20)**2*pi**2*t * sin(radians((2 * n + 1) * pi * x / 20)), (n, 0, oo))
fig = plt.figure()
ax = fig.gca(projection = '3d')
surf = ax.plot_surface(X, T, Z,
rstride = 3,
cstride = 3,
cmap = cm.coolwarm,
linewidth = 0.5,
antialiased = True)
fig.colorbar(surf,
shrink=0.8,
aspect=16,
orientation = 'vertical')
ax.view_init(elev=60, azim=50)
ax.dist=8
plt.show()
当我 运行 绘制图形的代码时出现此错误:“第 7-7 行中的错误
追溯(最近一次通话):
文件“/projects/sage/sage-7.3/local/lib/python2.7/site-packages/smc_sagews/sage_server.py”,第 968 行,在执行中
exec compile(block+'\n', '', 'single') in namespace, locals
文件“”,第 1 行,位于
文件“/projects/sage/sage-7.3/local/lib/python2.7/site-packages/numpy/core/function_base.py”,第 93 行,linspace
dt = result_type(开始,停止,浮动(num))
类型错误:数据类型不理解
非常感谢您的帮助。我认为错误出现是因为我定义了 x = np.linspace(-8, 8, 100)
和 t = np.linspace(-8, 8, 100)
但是有必要制作原始程序 运行。我不确定如何更正此问题以便正确绘制图表。谢谢!
你的代码有这两行问题:
an = float(2 / 10) * integrate(50 * sin(radians((2 * n + 1) * pi * x / 20)), (x, 0, 10))
Z = summation(an * e**(2 * n + 1 / 20)**2*pi**2*t * sin(radians((2 * n + 1) * pi * x / 20)), (n, 0, oo))
我建议您首先使用简单的 for 循环计算 Z 的其他一些简单值,以确认一切正常。尝试用此替换 2 行:
# begin simple calculation for Z
# offered just for example
Z = []
y = symbols('y') # declare symbol for integration
for ix,ea in enumerate(x):
ans = integrate(y * sin(ea / 20), (y, 0, x[ix])) # integrate y from y=0 to y=x(ix)
Z.append(ans)
Z = np.array(Z, dtype=float) # convert Z to array
# end of simple calculation for Z
当你运行它时,你应该得到一些情节。对于 Z 的预期值,您可以使用简单的 for 循环更好地计算它们。
我正在尝试使用 SageMath Cloud 绘制 3D 表面,但我遇到了一些麻烦,因为 matplotlib 的文档似乎不是很详尽并且缺少示例。无论如何,我编写的程序是绘制我从解析方法得到的热方程解。
案例是: Heat Equation
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from sympy import *
from math import *
x = np.linspace(-8, 8, 100)
t = np.linspace(-8, 8, 100)
n = symbols('n', integer=True)
X, T = np.meshgrid(x, t)
an = float(2 / 10) * integrate(50 * sin(radians((2 * n + 1) * pi * x / 20)), (x, 0, 10))
Z = summation(an * e**(2 * n + 1 / 20)**2*pi**2*t * sin(radians((2 * n + 1) * pi * x / 20)), (n, 0, oo))
fig = plt.figure()
ax = fig.gca(projection = '3d')
surf = ax.plot_surface(X, T, Z,
rstride = 3,
cstride = 3,
cmap = cm.coolwarm,
linewidth = 0.5,
antialiased = True)
fig.colorbar(surf,
shrink=0.8,
aspect=16,
orientation = 'vertical')
ax.view_init(elev=60, azim=50)
ax.dist=8
plt.show()
当我 运行 绘制图形的代码时出现此错误:“第 7-7 行中的错误 追溯(最近一次通话): 文件“/projects/sage/sage-7.3/local/lib/python2.7/site-packages/smc_sagews/sage_server.py”,第 968 行,在执行中 exec compile(block+'\n', '', 'single') in namespace, locals 文件“”,第 1 行,位于 文件“/projects/sage/sage-7.3/local/lib/python2.7/site-packages/numpy/core/function_base.py”,第 93 行,linspace dt = result_type(开始,停止,浮动(num)) 类型错误:数据类型不理解
非常感谢您的帮助。我认为错误出现是因为我定义了 x = np.linspace(-8, 8, 100)
和 t = np.linspace(-8, 8, 100)
但是有必要制作原始程序 运行。我不确定如何更正此问题以便正确绘制图表。谢谢!
你的代码有这两行问题:
an = float(2 / 10) * integrate(50 * sin(radians((2 * n + 1) * pi * x / 20)), (x, 0, 10))
Z = summation(an * e**(2 * n + 1 / 20)**2*pi**2*t * sin(radians((2 * n + 1) * pi * x / 20)), (n, 0, oo))
我建议您首先使用简单的 for 循环计算 Z 的其他一些简单值,以确认一切正常。尝试用此替换 2 行:
# begin simple calculation for Z
# offered just for example
Z = []
y = symbols('y') # declare symbol for integration
for ix,ea in enumerate(x):
ans = integrate(y * sin(ea / 20), (y, 0, x[ix])) # integrate y from y=0 to y=x(ix)
Z.append(ans)
Z = np.array(Z, dtype=float) # convert Z to array
# end of simple calculation for Z
当你运行它时,你应该得到一些情节。对于 Z 的预期值,您可以使用简单的 for 循环更好地计算它们。