Я пытаюсь подогнать следующие данные
-0.63711376853067669 3.9220188494898451E-011
-0.63559581662374798 4.0260809194317929E-011
-0.63285142318966769 3.7912990158726701E-011
-0.62862863903207122 3.5672466225770418E-011
-0.61915221010943133 3.7041163107924007E-011
-0.60375425889771406 3.7285669699125165E-011
-0.58732715127701596 3.7394414631650330E-011
-0.57049365955914244 3.2793779625097831E-011
-0.55124131200928772 3.3971194033698993E-011
-0.53006060696473212 3.2621926101891416E-011
-0.51035174210462519 3.1395671276394652E-011
-0.48878691498652033 3.3494235593570817E-011
-0.46512080762899560 3.3900831760049202E-011
-0.44144526036934528 3.0434293196110948E-011
-0.41209308065708727 2.4384175101726714E-011
-0.37874291229989432 2.1968353922587969E-011
-0.34595367786265058 2.3395823530179207E-011
-0.31308483194132991 2.2938006752405643E-011
-0.28065779622875503 2.3677078958452214E-011
-0.24589470583567491 2.1177013468924604E-011
-0.20893039650026693 2.2047918048544178E-011
-0.17289648629802296 2.2550123367583211E-011
-0.13712730648282492 2.0960188554218161E-011
-0.10215401377673781 2.2996586055725922E-011
-6.7845096564425861E-002 2.0922405016890511E-011
-3.3994983294004487E-002 2.1451489580936361E-011
0.0000000000000000 2.1859042406659546E-011
с помощью двух экспоненциальных функций. Один (синий) должен соответствовать первой половине из них, а другой (красный) - второй половине. Проблема заключается в том, что, поскольку существует разрыв, непрерывность функции не предоставляется. Я хотел бы соответствовать второй части, требуя, чтобы красная кривая начиналась там, где синяя заканчивается (см. Рисунок ниже для большей ясности). Как я могу навязать это условие? Ограничивающих параметров недостаточно, поскольку экспоненциальное совпадение достигается посредством уравнения.
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
def dexp(x, b, c):
return np.exp( b*x + c )
fig1 = plt.figure( figsize=(10,10) )
ax1 = fig1.add_subplot(111)
data = np.genfromtxt('mwe.dat')
ax1.plot(data[:,0], data[:,1], 'k+')
half = len(data)//2
popt, pcov = curve_fit( dexp, data[:half,0], data[:half,1], maxfev=100000)
x = np.linspace( np.min( data[:half,0] ), np.max( data[:half,0] ), half )
ax1.plot( x, dexp( x, *popt), 'b--', linewidth=3)
popt, pcov = curve_fit(dexp, data[half-1:,0], data[half-1:,1])
x = np.linspace( np.min( data[half-1:,0] ), np.max( data[half-1:,0] ), half )
ax1.plot( x, dexp( x, *popt), 'r--', linewidth=3)
fig1.show()
Fit_picture