为什么包含“ scipy.integration”的函数会产生一些错误的结果以及正确的结果?

时间:2019-01-08 14:35:52

标签: python-3.x scipy

我为these equations 写了一个函数

  

f(r)= 1 / r(-1/2 *((ln(r / rp)/ sp)^ 2)

     

Y =积分1(f(r)*(1-x / r)^ 2)/积分2(f(r))

     

从x到无穷大的整数1和从0到无穷大的整数2

稍后我想根据功能进行调整,但目前我仅使用它为选定的x数据创建Y。

但是,当使用变量rp和sp的某些值(rp:20.74,sp:0.053)进行绘图时,Y的值与x值较低的实际曲线完全偏离:Y的值几乎降为0 x小于约0.6。

更改变量时,例如到rp:20.74和sp:0.53。

可以找到带有离群值的曲线图here,可以找到没有离群值(rp:20.74和sp:0.53)的曲线图here

我认为它与我使用积分的方式分别与我的代码有关,但是我无法找出错误所在。

import numpy as np
import scipy.integrate
import scipy.optimize
import matplotlib.pyplot as plt

def func(x,rp,sp):
    #Funktion für Kurvenfit
    fn_up = lambda r,rdex : (1/r*np.exp(-1/2*((np.log(r/rp))/sp)**2))*((1-(rdex/r))**2)
    fn_low = lambda r : (1/r*np.exp(-1/2*((np.log(r/rp))/sp)**2))
    num_up = np.asarray([scipy.integrate.quad(fn_up, _x, np.inf,args=(_x,))[0] for _x in x])
    num_low = np.asarray([scipy.integrate.quad(fn_low, 0, np.inf)[0]])
    Kd=num_up/num_low
    return Kd

rp=20.74
sp=0.053
R = np.arange(0.,40.,0.25)
Kd = func(R,rp,sp)

0 个答案:

没有答案