Я написал функцию для этих уравнений
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)