2010-06-09 11 views
6

Gibt es ein Werkzeug, das eine grafische Darstellung einer Gleichung in diese Gleichung umwandelt? (Grafische Darstellung zu einer ungefähren mathematischen Gleichung)Mathematischer Graph zu Gleichung

+0

Graphical wie in „Graphenstruktur“ oder als in „Rasterbild“? –

+0

equestion to equestion? Was ist eine Frage? Elektronische Frage? –

+0

a) Grafisch als x-y-Achsen-Graph b) Entsprechungstyp: sin (x) * x^3 + 3 etc. – Mathie

Antwort

2

Dies ist ein kniffliges Problem, das normalerweise als interpolation bezeichnet wird. Für einfache polynomische Graphen ist es ein einfaches Problem. (Sie können immer eine "genaue Übereinstimmung" finden.) Werfen Sie einen Blick auf polynomial interpolation. Aber Sie könnten auch einen Graphen haben, der eine trigonometrische Funktion darstellt. Oder wie wäre es mit Exponentialfunktionen oder logarithmischen Funktionen? Oder schlimmer, Kombinationen! Selbst für einfache Graphen kann es Tausende interessanter Potentialgleichungen geben.

Auch wenn Sie tun überprüfen Sie alle interessanten Gleichungen, sollten Sie dennoch vorsichtig sein. Betrachten Sie die Gleichung y = A * sin(B*x), mit extrem großen Werten für A und B. Wie sieht dieses Diagramm aus? Nun, es geht rauf und runter zwischen A und -A immer wieder, wirklich sehr schnell, und "hits" oder "fast hits" fast alle Punkte. Es ist eine "einfache" Formel, die mathematisch wie eine gute Annäherung aussieht, aber es ist immer noch wahrscheinlich nicht etwas, was Sie am Ende wollen.

+0

@aioobe: Jede stetige Funktion kann durch Polynome sehr nah angenähert werden, sei es trigonometrisch oder eine schlechtere Kombination von ihnen.Ein Polynom hohen Grades sollte für die meisten Funktionen gut genug sein, insbesondere solche, die graphisch dargestellt werden können. Obwohl die tatsächliche Gleichung anders sein kann, werden die Polynome eine sehr gute Annäherung an den Graphen ergeben. Siehe: http://mathworld.wolfram.com/WeierrassApproximationTheorem.html –

+1

Nun, haben Sie von [Runges Phänomen] (http://en.wikipedia.org/wiki/Runge%27s_phenomenon) gehört? Sicher, ein hochgradiges Polynom wird es "lösen", aber es wird wahrscheinlich immer noch nicht das sein, wonach Sie suchen. – aioobe

+0

@Moron: Keine kontinuierliche Funktion. Zum Beispiel ist "y = sin (1/x)" kontinuierlich über das offene Intervall "0

2

Ein häufiges Problem, das Ihre Beschreibung passen könnte heißt curve fitting: Sie haben einige Daten (die, in Ihrem Fall, haben Sie aus einem Diagramm gelesen) und Sie haben beachten Sie eine Form einer Gleichung, und Sie möchten herausfinden, welche Parameter Sie am besten zu der Grafik passen.

Ein nützlicher Ansatz dazu ist passend zu least squares Fehler. Ein Paket der kleinsten Quadrate wird in den meisten Datenanalyse-Toolkits verfügbar sein.

Hier ist ein Beispiel: Sagen wir die Gleichung ist A * sin (2 * pi * 100.x) * x^B, und ich muss die Werte von A und B finden, die mir am besten passen (A = 10.0 und B = 3,0 in diesem Beispiel).

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

Hier ist der Code verwendet, um diese Passform zu erzeugen. Es verwendet Python und Scipy und aus einem dem Beispiel here modifiziert.)

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 für die Mühe der Erklärung. Ich möchte nur darauf hinweisen, dass es andere Methoden wie die Maximum-Likelihout-Eximation gibt, die in einigen Fällen genauer sind. Sehen Sie dieses Papier für eine nette einleitende Erklärung http://www.scribd.com/doc/7372377/Tutorial-on-Maximum-Likelihood-Estimation – nico

+1

@nico - Sie haben Recht, dass MLE in einigen Fällen genauer ist, aber nicht dieses. Least Squares ist ein präziser, gebräuchlicher, schneller und einfacher Liner und die richtige Wahl für eine Frage, bei der ich "Kurvenanpassung" definieren muss. Wie auch immer, obwohl ich normalerweise mit Ihnen daran denke, dass normale Verteilungen überstrapaziert werden, ist es hier eine vernünftige Annahme, und für diesen Fall sind die kleinsten Quadrate und MLE dasselbe. – tom10

+0

Bei der Verwendung eines geeigneten Ansatzes müssen Sie eine Schätzung (oder eine Reihe von Annahmen) darüber haben, welche funktionale Form die Lösung haben soll. Dementsprechend ist dieser Ansatz in einigen Fällen nützlich und nicht in anderen. – dmckee