Математический график для уравнения - PullRequest
6 голосов
/ 09 июня 2010

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

Ответы [ 3 ]

2 голосов
/ 09 июня 2010

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

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

Вот пример: скажем, уравнение: 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()
2 голосов
/ 09 июня 2010

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

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

1 голос
/ 09 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...