如何解决在 3d 曲面中绘制积分的解错误
首先,对于给您带来的不便和我生疏的英语,我深表歉意。
我正在尝试绘制积分解的图形,但我面临同样的错误“只有大小为 1 的数组可以转换为 Python 标量”。当我使用更简单的函数而不是 f(x,chi) 时,代码会正确生成图形。
有没有人知道我做错了什么?提前致谢
import numpy as np
import matplotlib.pyplot as plt
import math as m
import scipy as sp
import cmath as c
import scipy.integrate as integrate
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from scipy.special import gamma
k = 0.1
def solnum(x,chi,y):
Bk = ((2*(k))**(3/2))*((1+(1.5*abs(k))))*(gamma((1/(2*abs(k)))+(3/4))/gamma((1/(2*(k)))-(3/4)))
C = (chi/(2*(np.pi)**(0.5)))
R1 = (1/(1+(y**2)))
R21 = ((k**2)*(-((chi**2)*((x-y)**2))/4))
R22 = ((1+((k**2)*(-((chi**2)*((x-y)**2))/4)**2))**(0.5))
R23 = (R21-R22)/(k**2 - 1)
R3 = (((((1+((k**2)*(-((chi**2)*((x-y)**2))/4)**2))**(0.5))) + ((k*(-((chi**2)*((x-y)**2))/4))))**(1/k))
sn = (C*Bk*R1*R23*R3)
return sn
def f(x,chi):
j = lambda y: solnum(x,y)
resint = integrate.quad(j,-200,200)
return (resint[0])
x = np.linspace(-40.,40.,num=200)
chi = np.linspace(0.05,0.50,num=200)
x,chi = np.meshgrid(x,chi)
z = f(x,chi)
fig = plt.figure()
grafico = fig.gca(projection='3d')
surf = grafico.plot_surface(x,z)
plt.show()
错误信息:
Traceback (most recent call last):
File "c:/Users/pwadmin/Desktop/testeimpressao.py",line 51,in <module>
z = f(x,chi)
File "c:/Users/pwadmin/Desktop/testeimpressao.py",line 44,in f
resint = integrate.quad(j,200)
File "C:\ProgramData\Anaconda3\lib\site-packages\scipy\integrate\quadpack.py",line 351,in quad
retval = _quad(func,a,b,args,full_output,epsabs,epsrel,limit,File "C:\ProgramData\Anaconda3\lib\site-packages\scipy\integrate\quadpack.py",line 463,in _quad
return _quadpack._qagse(func,limit)
TypeError: only size-1 arrays can be converted to Python scalars
解决方法
我使用 numpy.vectorize 解决了这个问题
let picker = UIImagePickerController()
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
picker.delegate = self
picker.sourceType = .photoLibrary
picker.allowsEditing = true
DispatchQueue.main.async {
self.present(picker,animated: true)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。