微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 3d 曲面中绘制积分的解错误

如何解决在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?