python - 绘制 f(x,y,t) dt 积分的 3D 图的问题
问题描述
我已经定义了一个函数 I(a,b) = integral f(a,b,t) dt 并想绘制它以查看它如何依赖于变量 a 和 b。我首先编写了一个绘制 y = I(k,x) 的程序,它工作得很好,但我想看看它是如何依赖于这两个变量的,所以我尝试编写一个以 3D 绘制它的程序。
该程序适用于三角函数和多项式等更简单的函数,但是当我尝试绘制 I(x,y) 时,它只会给我一个错误“具有多个元素的数组的真值不明确。使用 a.any()或 a.all()"
这是代码,我最初编写了自己的程序来近似积分,但后来使用了 scipy
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import numpy as np
import scipy.integrate as integrate
def integral(x,y):
return integrate.quad(lambda t: np.sqrt((x**2 + y**2 - 2*x*y*np.cos(np.pi*t*(np.sqrt(1/x**3) - np.sqrt(1/y**3))))/(x**3*y**3)), 0, np.sqrt(x**3*y**3))
X = np.arange(0.1,5,0.1)
Y = np.arange(0.1,5,0.1)
X,Y = np.meshgrid(X, Y)
Z = integral(X,Y)
fig = plt.figure()
ax = plt.axes(projection="3d")
ax.plot_wireframe(X, Y, Z, color='green')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
cmap='winter', edgecolor='none')
ax.set_title('copper');
plt.show()
'''
解决方案
scipy.integrate.quad
返回一个元组。你只想要第一个值。您还需要对函数进行矢量化。
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate
def integral(x,y):
return integrate.quad(lambda t: np.sqrt((x**2 + y**2 - 2*x*y*np.cos(np.pi*t*(np.sqrt(1/x**3) - np.sqrt(1/y**3))))/(x**3*y**3)), 0, np.sqrt(x**3*y**3))[0]
X = np.arange(0.1,5,0.1)
Y = np.arange(0.1,5,0.1)
X,Y = np.meshgrid(X, Y)
Z = np.vectorize(integral)(X,Y)
fig = plt.figure()
ax = plt.axes(projection="3d")
ax.plot_wireframe(X, Y, Z, color='green')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
cmap='winter', norm=plt.Normalize(np.nanmin(Z), np.nanmax(Z)), edgecolor='none')
plt.show()
推荐阅读
- arrays - Flutter:解析没有名称的json数组
- xamarin - 如何在 Xamarin App Shell 中获取当前的 Shell 内容页面引用?
- spring - Kafka Streams - 缺少源主题
- sql - 如何在单个表中应用合并
- r - 如何解决R中循环EM算法中的错误
- node.js - 如何在谷歌浏览器中连接到 Angular、nodejs http://localhost:4200
- javascript - 如何让动态 ReactJS 组件高度匹配,内容对齐?
- sql - SQL如何计算两个表之间的关系数并包含零?
- r - 在 R 中使用 ggplot() 为数据点提供不同的符号
- microsoft-graph-api - 所有站点都是 Microsoft Graph 中根站点的子站点吗?