Почему функция, содержащая «scipy.integration», дает неверные результаты вместе с правильными? - PullRequest
0 голосов
/ 08 января 2019

Я написал функцию для этих уравнений

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

Y = целочислен ного 1 (е (г) * (1-х / г) ^ 2) / integral2 (е (г))

с интегралом 1 от x до бесконечности и интегралом 2 от 0 до бесконечности

Позже я хочу соответствовать в соответствии с функцией, но в настоящее время я использую ее только для создания Y для выбранных данных x.

Однако, при построении графика с использованием определенных значений для переменных rp и sp (rp: 20,74, sp: 0,053)) значения Y полностью отклоняются от фактической кривой для низких значений x: значения Y уменьшаются почти до 0 для х меньше, чем около 0,6.

При изменении переменных, например, для rp: 20,74 и SP: 0,53 это работает.

График кривой с выбросами можно найти здесь , а график кривой без каких-либо выбросов (rp: 20,74 и sp: 0,53) можно найти здесь

Я предполагаю, что это связано с моим кодом соответственно тому, как я использую интегралы, но я не могу выяснить, в чем ошибка.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...