Математический график к уравнению

Существует ли инструмент, который преобразовывает графическое представление уравнения к тому уравнению? (Графическое представление к приблизительно. математическое уравнение)

6
задан Troubadour 9 June 2010 в 11:51
поделиться

3 ответа

Общая проблема, которая может соответствовать вашему описанию, называется подгонкой кривой : у вас есть некоторые данные (которые, в вашем случае, вы читали с графика), и вы имеете в виду форму уравнения, и вы хотите найти, какие параметры вам нужны, чтобы наилучшим образом подогнать уравнение к графику.

Полезный подход к этому - аппроксимация ошибки методом наименьших квадратов . Пакет наименьших квадратов будет доступен в большинстве наборов инструментов для анализа данных.

Вот пример: предположим, что уравнение выглядит следующим образом: A * sin (2 * pi * 100.x) * x ^ B, и мне нужно найти значения A и B, которые лучше всего подходят мне (A = 10,0 и B = 3,0 в этом примере).

alt text

Вот код, использованный для создания этой подгонки. Он использует 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()
2
ответ дан 17 December 2019 в 04:42
поделиться

Я видел несколько инструментов, которые подгоняют уравнения к графикам на изображениях, но сейчас не могу вспомнить их названия. Быстрый поиск в Google выявил это коммерческое приложение: http://imagedig-2d-3d-image-digitizer.smartcode.com/info.html

1
ответ дан 17 December 2019 в 04:42
поделиться

Это сложная задача, обычно называемая интерполяцией . Для простых полиномиальных графов это простая задача. (Вы всегда можете найти «точное совпадение».) Взгляните на полиномиальную интерполяцию . Но у вас также может быть график, представляющий некоторую тригонометрическую функцию. Или как насчет экспоненциальных функций или логарифмических функций. Или, что еще хуже, комбинации! Даже для простых графиков могут быть тысячи интересных потенциальных уравнений.

Даже если вы выполните проверку всех интересных уравнений, вам все равно следует быть осторожным. Рассмотрим уравнение y = A * sin (B * x) с очень большими значениями для A и B . Как выглядит этот график? Что ж, он идет вверх и вниз между A и -A снова и снова, очень, очень быстро, и «попадает» или «почти достигает» почти во всех точках. Это «простая» формула, которая математически выглядит как хорошее приближение, но все же, скорее всего, это не то, что вам в конечном итоге нужно.

2
ответ дан 17 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: