# Ermitteln einer Funktionsgleichung



## Cona (19. Jan 2005)

moin...

Ich benötige ein Möglichkeit um aus einer Messung eine mathematische Funktion zu erhalten. Gemessen wird ein Verhältnis (Intensität von _x_/Summen aller Intensitäten) in Abhängigkeit des Anteils von _x_ in einer Mischung. Da es sich beim gesuchten Zusammenhang in der Regel nicht um einen linearen Zusammenhang handelt habe ich leider keine Ahnung wie eine derartige Regression programmiert werden kann.

Die Funktion wird später benötigt um nicht bekannte Verhältnisse zu berechnen.
Von der Funktion ist bekannt:
1. Sie geht durch 0;0
2. Sie geht durch 1;1
3. Sie ist stetig und es sind keine Wende / Extrempunkte vorhanden

Der Zusammenhang ist wahrscheinlich logarithmisch oder exponentiell (ist die Regel), in seltenen Fällen auch linear möglich.

Hat einer einen Tip wo ich Info's zur Problemlösung finden kann, oder evtl. schonmal ähnliches programmiert?
Sehr hilfreich wäre auch der Name eines Algorithmus zur nicht-linearen Regression (sowas wie Newton Approximation zur Berechnung von Nullstellen), da ich kein Mathematiker bin habe ich keinen Plan wie man sowas "manuell" löst.

Ich wäre für jeden Ansatz sehr, sehr dankbar.
mfg Cona

Beispiel für Messwerte:

*x* --------> *f(x)*
0,0 ------> 0,0000000000
0,1 ------> 0,0277777778
0,2 ------> 0,0362794288
0,3 ------> 0,0593220339
0,4 ------> 0,0831435080
0,5 ------> 0,1093560146
0,6 ------> 0,1501901141
0,7 ------> 0,1974333662
0,8 ------> 0,3037790698
0,9 ------> 0,4382352941
1,0 ------> 1,0000000000


----------



## Wildcard (19. Jan 2005)

Man kann anhand der Messwerte weitere Werte interpolieren, aber die dazugehörige Funktion errechnen???
Wüsste jetzt nicht wie so etwas gehen könnte.


----------



## Kerberus (19. Jan 2005)

Falls du einen Taschenrechner, wie zum Beipsiel TR-89 hast, kann es sein, dass dieser Regressionen zu Verfügung stellt. Könntest versuchen anstelle von Werten Variablen einzusetzen, so, dass er dir eine Gleichung angibt....


----------



## Guest (19. Jan 2005)

Wildcard hat gesagt.:
			
		

> Man kann anhand der Messwerte weitere Werte interpolieren, aber die dazugehörige Funktion errechnen???
> Wüsste jetzt nicht wie so etwas gehen könnte.


Whow schnell Antworten, hat man nicht oft in Foren!

Na dann erstmal danke.

So eine Arte Interpolation bräucht ich ja um von einem gemessen Intensitätsverhältniss auf die unbekannte Zusammensetzung zurück zu rechnen (Die gesuchte Funktion ist die Kalibrierung). Das Problem ist, dass die Kalibrierung möglichst gespeichert / geladen werden kann, hier würde sich die Funktionsgleichung anbieten.

mfg Cona

*Nochmal genauere Beschreibung des Problems:*

Es handelt sich um quantitative Analysen von Pulvermischungen.

Die Mischungen werden mit einem Pulverdiffraktometer analysiert, die Ergebnisse stehen in Dateien zur Verfügung.
Für ein System aus bekannten Komponenten kann aus Intensitäten der Stoffmengenanteil der Komponenten berechnet werden.

Aus Mischungen mit bekannten Stoffmangenanteilen der Komponenten wird eine Kalibrationkurve (die ist gesucht) erstellt.

Die Ergebnissdateien des Pulverdiffraktometers (bei großen Versuchsreihen sehr viele) werden eingelesen, der Stoffmengenanteil der Komponenten soll dann aus den eingelesen Daten berechnet und in Form einer *.csv oder *.txt aufgegeben werden (alle Messungen einer Versuchsreihe in einer Datei).


----------



## Wildcard (19. Jan 2005)

Vor ein paar Jahren hab ich mal ein kleines Prog geschrieben das in diese Richtung geht.
Man erstellt eine Messwerttabelle und gibt Werte ein die Interpoliert werden sollen.
Das Prog liefert dann einen Graph, und die gesuchten interpolierten Werte. Meinst du das nützt dir was?


----------



## Cona (19. Jan 2005)

Kerberus hat gesagt.:
			
		

> Falls du einen Taschenrechner, wie zum Beipsiel TR-89 hast, kann es sein, dass dieser Regressionen zu Verfügung stellt. Könntest versuchen anstelle von Werten Variablen einzusetzen, so, dass er dir eine Gleichung angibt....


Das Programm soll als eigenständiges Programm laufen und möglichst alle nötigen Funktionen zur Verfügung stellen. Die Benutzeroberfläche, das Einlesen der Ergebnissdateien, die Berechnung und Ausgabe der Ergebnisse ist schon fertig (bisher habe ich die Regression mit Maple gemacht). Es fehlt halt "nur" noch die Kalibration  :x .

Cona


----------



## Cona (19. Jan 2005)

@Wildcard:

könnte sein.

Wie hast du das in etwa umgesetzt?


----------



## Wildcard (19. Jan 2005)

Ist wie gesagt ein paar Jahre her.
Schau mal hier
Ich glaube ich habe damals mit der Fourier-Entwicklung und dem gausschen Eliminationsverfahren
gearbeitet, bin mir aber nicht mehr sicher. Das ganze ist allerdings nicht ganz leicht.
Hab das Prog gerade wieder gefunden. Wenn du meinst du kannst damit was anfangen, registrier dich,
schick mir ne PN mit deiner E-mail adresse, dann kannst du dir ansehen ob's was nützt.


----------



## Cona (19. Jan 2005)

Ich habe mir auch schon ein paar Gedanken gemacht:

Es gibt drei mögliche Funktionsgleichungen:

f(_x_) = a*_x_ + b
f(_x_) = a*e^(b*_x_) + c
f(_x_) = a*ln(_x_+b) + c
Der Test welche Funktion die gewählt werden kann sollte recht einfach sein:

Es werden einfach die Differenzen aller _y_ Werte und die Differenz der entsprechnenden _x_ Werte geteilt und verglichen (Steigung der Funktion).
 Steigung ~ konstant => Gleichung 1
Steigung wächst => Gleichung 2
Steigung fällt => Gleichung 3
Nun sollen die Parameter der Gleichung angenähert werden. 
Nach jedem Iterationsschritt wird die Fehlerquadratsumme mit den erhaltenen Parametern berechnet und falls die Abweichung zu groß ist werden die Parameter erneut verfeinert.
Die so ermittelten Parameter sollen zurückgegeben werden.

Für die Anpassung der Parameter ist ein Algorithmus nötig für den Ich leider keinen Ansatz habe (ausser für den linearen Fall, dass ist recht einfach und steht in jeder Formelsammlung, selbst ein bestimmtes Microsoft-Produkt kann das sehr gut )


----------



## Wildcard (19. Jan 2005)

Du willst am Ende wissen welche Funktion die richtige ist?
Warum dann nicht einfach die x-werte für die gemessen wurde in die Funktionen einsetzten,
die Ergebnisse mit den Messwerten vergleichen, und die Funktion mit der kleinsten Abweichung wählen?


----------



## Cona (19. Jan 2005)

> und die Funktion mit der kleinsten Abweichung wählen?


Dazu sind ja die Parameter a, b und c nötig. Die sollen ja ermittelt werden.

Ich habe mir gerade mal den Wikipedia Link angeschaut und festgestellt, dass Interpolation nicht das ist nach dem ich suche sondern "Regression" (naja bin ja kein Mathematiker)


----------



## Bleiglanz (20. Jan 2005)

genau

kennst du die methode der kleinsten Quadrate von Gauss

sagen wir, a*x + b soll bestmöglich interpoliert werden

=> berechne SUMMME_alle_i     ((a*x_i+b - Y_Messwert)^2) 

dann a,b so wählen, dass diese Summe minimal; wenn man das ausrechnet kommen einfache Formeln raus.


für die komplexeren Funktionen geht das nicht (weil da keine schönen Formeln rauskommen)

=> ist ein sog. nichtlineares Minimum-Problem für die (a,b,c) (minimale Quadratsumme)

aber für den zweiten Fall (ohne konstanten Term) gehts doch:

y=a*e(b*x) => ln nehmen

ln y = lna + (b*x) ist eine Geradengleichung (Y := lny)

mach jetzt die kleinsten Quadrate mit den Messwerten lny_1,...ln_y2 usw.


----------

