Распространенная проблема, которая может соответствовать вашему описанию, называется подгонка кривой : у вас есть некоторые данные (которые, в вашем случае, вы читали из графика), и у вас естьИмеется в виду форма уравнения, и вы хотите найти, какие параметры вам нужны, чтобы лучше всего соответствовать уравнению на графике.
Полезный подход к этому подходит для ошибки наименьших квадратов .Пакет наименьших квадратов будет доступен в большинстве наборов инструментов для анализа данных.
Вот пример: скажем, уравнение: A * sin (2 * pi * 100.x) * x ^ B, и мне нужно найтизначения A и B, которые дают мне лучшее соответствие (A = 10,0 и B = 3,0 в этом примере).
альтернативный текст http://i47.tinypic.com/k3x9fk.png
Вот код, используемый длясоздать это соответствие.Он использует Python и Scipy и модифицирован из примера здесь .)
from numpy import *
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
def my_func(x, p): # the function to fit (and also used here to generate the data)
return p[0]*sin(2*pi*100.*x)*x**p[1]
# First make some data to represent what would be read from the graph
p_true = 10., 3.0 # the parameters used to make the true data
x = arange(.5,.5+12e-2,2e-2/60)
y_true = my_func(x, p_true)
y_meas = y_true + .08*random.randn(len(x)) # add some noise to make the data as read from a graph
# Here's where you'd start for reading data from a graph
def residuals(p, y, x): # a function that returns my errors between fit and data
err = y - my_func(x, p)
return err
p0 = [8., 3.5] # some starting parameters to my function (my initial guess)
plsq = leastsq(residuals, p0, args=(y_meas, x)) # do the least squares fit
# plot the results
plt.plot(x, my_func(x, plsq[0]), x, y_meas, '.', x, y_true)
plt.title('Least-squares fit to curve')
plt.legend(['Fit', 'Graph', 'True'])
plt.show()