在 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)
        }
    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...