【问题标题】:Math Graph to Equation数学图到方程
【发布时间】:2019-07-29 13:05:56
【问题描述】:

是否有工具可以将方程的图形表示转换为该方程? (近似数学方程的图形表示)

【问题讨论】:

  • 图形是“图形结构”还是“光栅图像”?
  • 提问到提问?什么是提问?电子题?
  • a) 图形化为 x-y 轴图 b) 问题类型:sin(x)*x^3+3 等
  • @Alex:不是每个人都以英语为母语,你知道的,对吧?
  • 这里实际上有几个可能的问题域(即使在澄清之后)。您是否知道答案是由一小部分(或至少合理的小)基本功能组成的?你需要一个精确的解决方案,还是一个体面的近似值?输入数据是否精确,或者可能包含一些噪声或测量误差?已经提出的解决方案在某些情况下都是正确的,而在其他情况下则不正确。

标签: math graph


【解决方案1】:

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

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

【讨论】:

  • @aioobe:任何连续函数都可以通过多项式非常接近,无论是三角函数还是它们的更差组合。对于大多数函数,尤其是可以绘制的函数,一个高次多项式应该足够好。因此,即使实际方程可能不同,多项式也会给出非常好的图形近似值。见:mathworld.wolfram.com/WeierstrassApproximationTheorem.html
  • 嗯,你听说过Runge's phenomenon吗?当然,一个高次多项式会“解决”它,但它可能仍然不是您想要的。
  • @Moron:不是任何连续函数。例如,y=sin(1/x) 在开区间0 < x < 1 上是连续的,但不能用多项式逼近,因为它有无限数量的转折点。您最多只能说“任何看起来像多项式的函数都可以用多项式来近似”。
  • @Mike:任何在有界区间上连续的函数都可以用多项式逼近。由于我们正在谈论具有开始和结束 x 坐标的图形,我相信这仍然适用。我本来可以更清楚,但我链接到的页面应该消除对此的怀疑。
  • 我想这取决于你如何定义近似值。
【解决方案2】:

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

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

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

这是用于生成此拟合的代码。它使用 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()

【讨论】:

  • +1 用于解释。只是想指出,在某些情况下,还有其他方法(例如最大似然估计)更准确。请参阅本文以获得很好的介绍性解释scribd.com/doc/7372377/…
  • @nico - 你说得对,MLE 在某些情况下更准确,但不是这个。最小二乘法是一种准确、常见、快速和简单的线性方法,对于需要定义“曲线拟合”的问题,它是正确的选择。无论如何,虽然我通常和你一样认为正态分布被过度使用,但这是一个合理的假设,在这种情况下,最小二乘法和 MLE 是一回事。
  • 使用任何拟合方法都需要您猜测(或一组猜测)解决方案将具有何种功能形式。因此,这种方法在某些情况下很有用,而在其他情况下则无效。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多