2010-06-09 4 views
6

Existe-t-il un outil qui convertit une représentation graphique d'une équation en cette équation? (Représentation graphique à l'équation mathématique approximative)Graphique mathématique à l'équation

+0

graphique comme dans « la structure graphique » ou dans « l'image raster »? –

+0

Question d'equestion? Qu'est-ce qu'une question? Question électronique? –

+0

a) Graphique sous forme de graphique de l'axe x-y b) Type d'éqe: sin (x) * x^3 + 3 etc – Mathie

Répondre

2

Ceci est un problème délicat, généralement appelé interpolation. Pour les graphiques polynomiaux simples, c'est un problème facile. (Vous pouvez toujours trouver un "match exact".) Jetez un oeil à polynomial interpolation. Mais vous pourriez aussi avoir un graphique qui représente une fonction trigonométrique. Ou que diriez-vous des fonctions exponentielles ou des fonctions logarithmiques. Ou pire, des combinaisons! Même pour les graphiques simples, il peut y avoir des milliers d'équations potentielles intéressantes.

Même si vous faites vérifiez toutes les équations intéressantes, vous devez toujours faire attention. Considérons l'équation y = A * sin(B*x), avec des valeurs extrêmement grandes pour A et B. À quoi ressemble ce graphique? Eh bien, il va de haut en bas entre A et -A encore et encore, vraiment très vite, et "hits" ou "presque hits" à peu près tous les points. C'est une formule «simple», qui ressemble mathématiquement à une bonne approximation, mais ce n'est probablement pas quelque chose que l'on voudrait à la fin.

+0

@aioobe: Toute fonction continue peut être approchée de très près par des polynômes, qu'ils soient trigonométriques ou pires.Un polynôme de haut degré devrait être assez bon pour la plupart des fonctions, en particulier celles qui peuvent être représentées graphiquement. Donc, même si l'équation réelle peut être différente, les polynômes donneront une très bonne approximation du graphique. Voir: http://mathworld.wolfram.com/WeierstrassApproximationTheorem.html –

+1

Eh bien, avez-vous entendu parler de [phénomène de Runge] (http://en.wikipedia.org/wiki/Runge%27s_phenomenon)? Bien sûr, un polynôme de haut degré va le "résoudre" mais ce ne sera probablement pas ce que vous cherchez. – aioobe

+0

@Moron: Pas de fonction continue. Par exemple, 'y = sin (1/x)' est continu sur l'intervalle ouvert '0

2

curve fitting: vous avez des données (dans votre cas, vous avez lu dans un graphique) faites attention à une forme d'équation et vous voulez trouver les paramètres dont vous avez besoin pour ajuster au mieux l'équation au graphique. Une approche utile à cette erreur est least squares. Un paquet de moindres carrés sera disponible dans la plupart des trousses d'outils d'analyse de données. Voici un exemple: Dites que l'équation est A * sin (2 * pi * 100.x) * x^B, et j'ai besoin de trouver les valeurs de A et B qui me donnent le meilleur ajustement (A = 10.0 et B = 3,0 dans cet exemple).

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

Voici le code utilisé pour générer cette forme. Il utilise Python et Scipy et est modifié à partir d'un exemple 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() 
+0

+1 pour l'effort d'explication. Je veux juste souligner qu'il existe d'autres méthodes comme l'extimation du maximum de vraisemblance qui sont plus précises dans certains cas. Voir ce document pour une bonne introduction http://www.scribd.com/doc/7372377/Tutorial-on-Maximum-Likelihood-Estimation – nico

+1

@nico - Vous avez raison de dire que MLE est plus précis dans certains cas, mais pas celui-là. Les moindres carrés sont un doublage précis, commun, rapide et facile, et sont le bon choix pour une question où j'ai besoin de définir «ajustement de courbe». Quoi qu'il en soit, bien que je sois habituellement avec vous en pensant que les distributions normales sont sur-utilisées, voici une hypothèse raisonnable, et pour ce cas, les moindres carrés et MLE sont la même chose. – tom10

+0

L'utilisation de n'importe quelle approche d'ajustement nécessite que vous ayez une estimation (ou un ensemble de suppositions) quant à la forme fonctionnelle de la solution. En conséquence, cette approche est utile dans certains cas et pas dans d'autres. – dmckee

Questions connexes