Python에서 무한 적분으로 정의 된 함수에 curve_fit 사용

티아고 데 안젤리 스

실제 데이터에 5 개의 매개 변수를 사용하여 2 개의 곡선을 맞추는 코드를 만들려고합니다. https://i.stack.imgur.com/Yrydc.png 여기에 표시됩니다.

첫 번째 곡선은 a, b 및 감마에만 의존합니다. 그래서 나는 curve_fit 을이 3 (작동하는)에 한 번 사용하고 두 번째 곡선에서 다시 사용하여 마지막 두 알파와 k_0을 조정하기로 결정했습니다.

문제는 두 번째가이 무한 적분으로 정의되어 제대로 코딩 할 수 없다는 것입니다. 나는 x를 기호로 취급하고 sym.integrate를 사용하여 통합하고 normaly를 quad와 통합하려고 시도했습니다. 둘 다 작동하지 않았습니다. 두 번째 경우에는 "ValueError : 두 개 이상의 요소가있는 배열의 진리 값이 모호합니다."mortes "함수에서 a.any () 또는 a.all ()"을 사용합니다.

내 코드는 다음과 같습니다.

import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import scipy.integrate as integrate
import numpy as np
import sympy as sym


#Experimental x and y data points
#Dados de SP
xData = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])

ycasos = np.array([2, 13, 65, 459, 1406, 4466, 8419, 13894, 20004, 31174, 44411, 61183, 80558, 107142, 140549, 172875, 215793, 265581, 312530, 366890, 412027, 479481, 552318, 621731, 697530, 749244, 801422, 853085, 890690, 931673, 970888, 1003429, 1034816, 1062634, 1089255])

ymortes = np.array([0, 0, 15, 84, 260, 560, 991, 1667, 2586, 3608, 4688, 6045, 7532, 9058, 10581, 12494, 14263, 15996, 17702, 19647, 21517, 23236, 25016, 26780, 28392, 29944, 31313, 32567, 33927, 35063, 36136, 37223, 37992, 38726, 39311])

#Dados do Brasil    
#xData = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45])  

#ycasos = np.array([2,9,121,1128,3912,10298,20818,36739,58973,96559,155939,233142, 347398, 498440, 672846, 850514, 1067579, 1313667, 1577004, 1839850, 2074860, 2394513, 2707877, 3012412, 3317096, 3582362, 3846153, 4123000, 4315687, 4528240, 4717991, 4906833, 5082637, 5224362, 5380635, 5535605, 5653561, 5848959, 6052786, 6290272, 6577177, 6880127, 7213155, 7465806, 7716405, 8013708])

#ymortes = np.array([])


u0 = ycasos[0]
v0 = ymortes[0]

#u(t)
def casos(x,a,b,gama):
    return u0 * (a ** (1/gama)) * np.exp(a*x) *((a + b * (u0 ** gama) * (np.exp(a*gama*x)-1)) ** (-1/gama))
    

#Plot experimental data points
plt.plot(xData, ycasos, 'bo', label='reais')
 
# Initial guess for the parameters
#initialGuess = [3.0,1.5,0.05]    
 
#Primeiro fit
copt, ccov = curve_fit(casos, xData, ycasos,bounds=(0, [1., 1., np.inf]),maxfev=100000)
a_opt = copt[0]
b_opt = copt[1]
gama_opt = copt[2]
print('Primeira etapa \n')
print('Parametros encontrados: a=%.9f, b=%.9f,gama=%.9f \n' % tuple(copt))


def integrand(t,alpha):
    return np.exp((a_opt - alpha)*t) *((a_opt + b_opt * (u0 ** gama_opt) * (np.exp(a_opt*gama_opt*t)-1)) ** (-1/gama_opt)) 


def mortes(x,k0,alpha):
    return u0 * (a_opt ** (1/gama_opt)) * k0 * integrate.quad(integrand, 0, x, args=(alpha)) + v0

#Segundo fit
mopt, mcov = curve_fit(mortes, xData, ymortes, bounds=(0, [np.inf, a_opt]), maxfev=100000)

print('Segunda etapa \n')
print('Parametros encontrados: k0=%.9f, alpha=%.9f \n' % tuple(mopt))


#x values for the fitted function
xFit = np.arange(0.0, float(len(xData)), 0.01)
 
#Plot the fitted function
plt.plot(xFit, casos(xFit, *copt), 'r', label='estimados')
 
plt.xlabel('t')
plt.ylabel('casos')
plt.legend()
plt.show()
스테판

적분 (integrate.quad)의 상한은 x (mortes ()의 인수)와 같은 배열이 아닌 부동 소수점이어야합니다.

이런 식으로 작동합니다.

def mortes(x,k0,alpha):
    integralRes = []
    for upBound in x: 
        integralRes.append(integrate.quad(integrand, 0, upBound, args=(alpha))[0])
        
    return u0 * (a_opt ** (1/gama_opt)) * k0 * np.array(integralRes) + v0

ps 코드 스타일의 우아한 에디션은 환영받는 것 이상입니다 (배열을 integration.quad의 상한 및 하한에 전달하는 것과 같이).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

개별 데이터 세트 문제에 적용된 curve_fit

분류에서Dev

Python의 scipy에서 curve_fit에 의한 곡선 피팅

분류에서Dev

scipy curve_fit을 사용할 때 범위 / 종속 함수에 경계를 적용 할 수 있습니까?

분류에서Dev

한 번에 scipy의`curve_fit`을 여러 번 반복

분류에서Dev

curve_fit (scipy) 동안 특정 변수에 경계를 적용하면 오류가 발생합니다.

분류에서Dev

Python에서 curve_fit을 어떻게 사용합니까?

분류에서Dev

Scipy curve_fit은 단순한 지수에 적합하지 않습니다.

분류에서Dev

두 개의 다른 방정식을 함수에 맞추기 (curve_fit)

분류에서Dev

logarithmic 함수에 맞추기 위해 curve_fit을 사용하는 파이썬

분류에서Dev

목록에있는 두 변수의 데이터를 맞추기 위해 curve_fit 사용

분류에서Dev

Rayleigh 분포 Curve_fit on python

분류에서Dev

다른 함수의 한 함수에서 로컬로 정의 된 변수를 어떻게 사용합니까?

분류에서Dev

jQuery를 사용하여 동적으로 생성 된 요소에 대한 사용자 지정 함수 호출

분류에서Dev

Python에서 정의 된 함수로 DataFrame의 지저분한 문자열 정리

분류에서Dev

* Edit * 데이터 세트에서 Plancks Law의 curve_fit에서 값 정규화

분류에서Dev

haskell의 재귀 함수 정의 내에서 재귀 적으로 빌드 된 목록에 함수 적용

분류에서Dev

클로저에서 외부 적으로 정의 된 함수를 사용할 수 있습니까?

분류에서Dev

typescript에서 부분적으로 적용된 함수를 입력하는 방법은 무엇입니까?

분류에서Dev

여러 데이터 세트에서 공유 맞춤 매개 변수를 사용하여 scipy.optimize의 curve_fit을 사용하는 방법은 무엇입니까?

분류에서Dev

Python27은 사용자 입력에 정의 된대로 적절한 get | post | delete를 호출하는 함수에 메서드를 전달합니다.

분류에서Dev

Scala의 부분적으로 적용된 함수의 실제 사례는 무엇입니까?

분류에서Dev

scipy optimize curve_fit을 사용하여 단계 위치에 변화가있는 피팅 단계 함수

분류에서Dev

Python으로 다른 함수 내에서 한 함수의 변수 사용

분류에서Dev

curve_fit을 사용하여 데이터를 포인트에 맞추기

분류에서Dev

Pandas 및 Curve_fit 오류를 사용한 외삽 func ()는 3 개의 위치 인수를 사용하지만 4 개가 주어졌습니다.

분류에서Dev

Curve_fitting 데이터 (나는 params 값에 가깝지만 curve_fit은 최적의 매개 변수를 찾을 수 없다고 말합니다)

분류에서Dev

Python에서 고정 된 수의 유효한 사용자 항목으로 사전을 만드는 방법은 무엇입니까?

분류에서Dev

정렬 된 함수에서 사용자 정의 클래스 / 함수를 키로 사용

분류에서Dev

동적으로 생성 된 JS 함수에 사용자 지정 속성 할당

Related 관련 기사

  1. 1

    개별 데이터 세트 문제에 적용된 curve_fit

  2. 2

    Python의 scipy에서 curve_fit에 의한 곡선 피팅

  3. 3

    scipy curve_fit을 사용할 때 범위 / 종속 함수에 경계를 적용 할 수 있습니까?

  4. 4

    한 번에 scipy의`curve_fit`을 여러 번 반복

  5. 5

    curve_fit (scipy) 동안 특정 변수에 경계를 적용하면 오류가 발생합니다.

  6. 6

    Python에서 curve_fit을 어떻게 사용합니까?

  7. 7

    Scipy curve_fit은 단순한 지수에 적합하지 않습니다.

  8. 8

    두 개의 다른 방정식을 함수에 맞추기 (curve_fit)

  9. 9

    logarithmic 함수에 맞추기 위해 curve_fit을 사용하는 파이썬

  10. 10

    목록에있는 두 변수의 데이터를 맞추기 위해 curve_fit 사용

  11. 11

    Rayleigh 분포 Curve_fit on python

  12. 12

    다른 함수의 한 함수에서 로컬로 정의 된 변수를 어떻게 사용합니까?

  13. 13

    jQuery를 사용하여 동적으로 생성 된 요소에 대한 사용자 지정 함수 호출

  14. 14

    Python에서 정의 된 함수로 DataFrame의 지저분한 문자열 정리

  15. 15

    * Edit * 데이터 세트에서 Plancks Law의 curve_fit에서 값 정규화

  16. 16

    haskell의 재귀 함수 정의 내에서 재귀 적으로 빌드 된 목록에 함수 적용

  17. 17

    클로저에서 외부 적으로 정의 된 함수를 사용할 수 있습니까?

  18. 18

    typescript에서 부분적으로 적용된 함수를 입력하는 방법은 무엇입니까?

  19. 19

    여러 데이터 세트에서 공유 맞춤 매개 변수를 사용하여 scipy.optimize의 curve_fit을 사용하는 방법은 무엇입니까?

  20. 20

    Python27은 사용자 입력에 정의 된대로 적절한 get | post | delete를 호출하는 함수에 메서드를 전달합니다.

  21. 21

    Scala의 부분적으로 적용된 함수의 실제 사례는 무엇입니까?

  22. 22

    scipy optimize curve_fit을 사용하여 단계 위치에 변화가있는 피팅 단계 함수

  23. 23

    Python으로 다른 함수 내에서 한 함수의 변수 사용

  24. 24

    curve_fit을 사용하여 데이터를 포인트에 맞추기

  25. 25

    Pandas 및 Curve_fit 오류를 사용한 외삽 func ()는 3 개의 위치 인수를 사용하지만 4 개가 주어졌습니다.

  26. 26

    Curve_fitting 데이터 (나는 params 값에 가깝지만 curve_fit은 최적의 매개 변수를 찾을 수 없다고 말합니다)

  27. 27

    Python에서 고정 된 수의 유효한 사용자 항목으로 사전을 만드는 방법은 무엇입니까?

  28. 28

    정렬 된 함수에서 사용자 정의 클래스 / 함수를 키로 사용

  29. 29

    동적으로 생성 된 JS 함수에 사용자 지정 속성 할당

뜨겁다태그

보관