Ich versuche, abschnittsweise lineare fit zu passen, wie in Bild 1 für ein Datum gezeigt gesetztWie wird stückweise lineare Anpassung in Python angewendet?
Diese Zahl wurde durch das Setzen auf den Linien erhalten. Ich versuchte, eine stückweise lineare Anpassung mit dem Code anwenden:
from scipy import optimize
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11, 12, 13, 14, 15])
y = np.array([5, 7, 9, 11, 13, 15, 28.92, 42.81, 56.7, 70.59, 84.47, 98.36, 112.25, 126.14, 140.03])
def linear_fit(x, a, b):
return a * x + b
fit_a, fit_b = optimize.curve_fit(linear_fit, x[0:5], y[0:5])[0]
y_fit = fit_a * x[0:7] + fit_b
fit_a, fit_b = optimize.curve_fit(linear_fit, x[6:14], y[6:14])[0]
y_fit = np.append(y_fit, fit_a * x[6:14] + fit_b)
figure = plt.figure(figsize=(5.15, 5.15))
figure.clf()
plot = plt.subplot(111)
ax1 = plt.gca()
plot.plot(x, y, linestyle = '', linewidth = 0.25, markeredgecolor='none', marker = 'o', label = r'\textit{y_a}')
plot.plot(x, y_fit, linestyle = ':', linewidth = 0.25, markeredgecolor='none', marker = '', label = r'\textit{y_b}')
plot.set_ylabel('Y', labelpad = 6)
plot.set_xlabel('X', labelpad = 6)
figure.savefig('test.pdf', box_inches='tight')
plt.close()
Aber das gab ich von der Form, in Abb Beschlag. 2, habe ich versucht, mit den Werten zu spielen, aber keine Änderung kann ich nicht die Passform der oberen Zeile richtig bekommen. Die wichtigste Voraussetzung für mich ist, wie ich Python dazu bringen kann, den Gradientenwechselpunkt zu bekommen. Im Wesentlichen Ich möchte Python erkennen und passen zwei lineare Anpassungen in den entsprechenden Bereich. Wie kann das in Python gemacht werden?
Duplizieren von http://stackoverflow.com/questions/35579419/fitting-a-curve-with-a-pivot-point-python –