数学图形到方程

时间:2010-06-09 11:39:55

标签: math graph

是否有工具将等式的图形表示转换为该等式? (图形表​​示为aprox。数学方程式)

3 个答案:

答案 0 :(得分:2)

这是一个棘手的问题,通常称为interpolation。对于简单的多项式图,这是一个简单的问题。 (你总能找到“完全匹配”。)看看polynomial interpolation。但是你也可以有一个代表一些三角函数的图形。或指数函数或对数函数如何。或者更糟,组合!即使对于简单的图形,也可能存在数千个有趣的潜在方程式。

即使你检查所有有趣的方程,你仍然应该小心。考虑等式y = A * sin(B*x)AB的值非常大。该图表如何显示?好吧,它在A-A之间一次又一次地上下移动,非常快,并且几乎所有点都“点击”或“几乎命中”。这是一个“简单”的公式,在数学上看起来像一个很好的近似,但它最有可能不是你想要的最终。

答案 1 :(得分:2)

一个可能适合您描述的常见问题称为curve fitting:您有一些数据(在您的情况下,您已从图中读取)并且您考虑了一个等式的形式,并且您想要找到最适合图表方程式所需的参数。

一种有用的方法是适合least squares错误。大多数数据分析工具包中都提供了最小二乘法包。

这是一个例子:假设方程是A * sin(2 * pi * 100.x)* x ^ B,我需要找到A和B的值,这些值给出了最合适的值(A = 10.0和在这个例子中B = 3.0)。

alt text http://i47.tinypic.com/k3x9fk.png

以下是用于生成此拟合的代码。它使用Python和Scipy,并从示例here进行了修改。)

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 :(得分:1)

我见过一些工具可以将图形拟合到图像中,但我现在还记不起它们的名字。谷歌快速搜索出现了这个商业应用程序:http://imagedig-2d-3d-image-digitizer.smartcode.com/info.html