# Quadratische Funktion anhand von 3 Stützpunkte bestimmen



## hubert (28 Juni 2018)

Hallo Zusammen,

habe folgendes kleines Problem. 
Ich soll anhand von drei Stützpunkte P(X1/Y1); P(X2/Y2); P(X3/Y3) eine quadratische Funktionsgleichung "f(x) = ax² + bx  + x" bestimmen. 
Dies sollte in einer SPS (Siemens SCL) gemacht werden. Hat schon jemand von euch dies in einer Steuerung umgesetzt?
Auf eine Blatt Papier ist das ja wieder einfach zu berechen. aber wie ich diese FÃ¤lle in einer SPS umsetze, da fehlt mir momentan der Ansatz.
Vielleicht hat ja einer von euch einen Ansatz.


----------



## Heinileini (28 Juni 2018)

Meinst Du "f(x) = ax² + bx + *c*"?
Und Du willst nicht x ermitteln für den Fall, dass ax² + bx + c = 0 ist, sondern Du willst a und b und c berechnen?
Gewährst Du uns mal einen Blick auf Dein einfaches Blatt Papier?


----------



## flyingsee (28 Juni 2018)

Du hast 2 unbekannte und 3 Gleichungen. 

Und wenn jetzt auf meinem Papier nicht zuviel geschmiert habe isses gar nicht so schwer umzustellen.

Versuch es so gut wie möglich zu vereinfachen um Rechenoperationen zu sparen und gut ist.


----------



## Thruser (28 Juni 2018)

Hallo,

wenn Du es Dir ganz einfach machen willst siehst Du Dir diese Seite (https://www.arndt-bruenner.de/mathe/10/parabeldurchdreipunkte.htm) an. Dort sind schon die allgemeinen Gleichungen für a, b und c angegeben.

Oder Du siehst Dir generell erst einmal Seiten zur Polynominterpolation an (z.B. https://de.wikipedia.org/wiki/Polynominterpolation). Dort findest Du verschiedene Ansätze. Du hast hier ja speziell die quadratische interpolation.

Dann brauch man nur noch nach dem gewünschten Lösungsansatz als Programm suchen und dieses entsprechend Deiner Programmiersprache anpassen.

Gruß


----------



## hubert (28 Juni 2018)

Hallo Zusammen,

danke schon mal für die Lösungsansätze. 
Es hat also noch niemand direkt in einer SPS gemacht.
Der rechnerischen Ansatz handschriftlüch wäre.




Bin auf jeden Tipp hilfreich.


----------



## RedCali (28 Juni 2018)

nimm doch den Ansatz den Thruser gepostet hat von der Arnd Brünner Seite (hast du dir den überhaupt angesehen?):


```
a = (x[SUB]1[/SUB](y[SUB]2[/SUB]-y[SUB]3[/SUB])+x[SUB]2[/SUB](y[SUB]3[/SUB]-y[SUB]1[/SUB])+x[SUB]3[/SUB](y[SUB]1[/SUB]-y[SUB]2[/SUB]))/((x[SUB]1[/SUB]-x[SUB]2[/SUB])(x[SUB]1[/SUB]-x[SUB]3[/SUB])(x[SUB]3[/SUB]-x[SUB]2[/SUB]))
b = (x[SUB]1[/SUB]²(y[SUB]2[/SUB]-y[SUB]3[/SUB])+x[SUB]2[/SUB]²(y[SUB]3[/SUB]-y[SUB]1[/SUB])+x[SUB]3[/SUB]²(y[SUB]1[/SUB]-y[SUB]2[/SUB]))/((x[SUB]1[/SUB]-x[SUB]2[/SUB])(x[SUB]1[/SUB]-x[SUB]3[/SUB])(x[SUB]2[/SUB]-x[SUB]3[/SUB]))
c = (x[SUB]1[/SUB]²(x[SUB]2[/SUB]y[SUB]3[/SUB]-x[SUB]3[/SUB]y[SUB]2[/SUB])+x[SUB]1[/SUB](x[SUB]3[/SUB]²y[SUB]2[/SUB]-x[SUB]2[/SUB]²y[SUB]3[/SUB])+x[SUB]2[/SUB]x[SUB]3[/SUB]y[SUB]1[/SUB](x[SUB]2[/SUB]-x[SUB]3[/SUB]))/((x[SUB]1[/SUB]-x[SUB]2[/SUB])(x[SUB]1[/SUB]-x[SUB]3[/SUB])(x[SUB]2[/SUB]-x[SUB]3[/SUB]))
```
Der Ansatz macht genau das was du händisch gemacht hast 
Ich würde bei dem Ansatz nur noch einzelne Therme zuvor separat rechnen und in Temporäre Variablen legen, da einige Terme mehrfach vorkommen.


----------



## RedCali (28 Juni 2018)

quasi so:



```
z1 = x1(y2-y3)
z2 = x2(y3-y1)
z3 = x3(y1-y2)
nenner = (x1-x2)(x1-x3)(x2-x3)


a = (-1.0)(z1+z2+z3)/(nenner)
b = (x1z1+x2z2+x3z3)/(nenner)
c = (x1²(x2y3-x3y2)+x1(x3²y2-x2²y3)+x2x3y1(x2-x3))/(nenner)
```


----------



## hubert (28 Juni 2018)

Hallo RedCali,

ja habe mir die Formel schon etwas angeschaut aber leider nicht im Detail.
Aber nun habe ich sie mir aber schon etwas genau angeschaut und das wäre genau das, was ich eigentlich bräuchte, wenn es sich um eine quadratische Gleichung handelt.
Habe mir aber zusätzlich noch deine Umformung angeschaut, dabei ist mir aufgefallen, dass der "Nenner" bei der Bestimmung von "a" unterschiedlich zu "b" und "c" ist.



```
a = (x[SUB]1[/SUB](y[SUB]2[/SUB]-y[SUB]3[/SUB])+x[SUB]2[/SUB](y[SUB]3[/SUB]-y[SUB]1[/SUB])+x[SUB]3[/SUB](y[SUB]1[/SUB]-y[SUB]2[/SUB]))/((x[SUB]1[/SUB]-x[SUB]2[/SUB])(x[SUB]1[/SUB]-x[SUB]3[/SUB])[B][U](x[SUB]3[/SUB]-x[SUB]2[/SUB])[/U][/B])
b = (x[SUB]1[/SUB]²(y[SUB]2[/SUB]-y[SUB]3[/SUB])+x[SUB]2[/SUB]²(y[SUB]3[/SUB]-y[SUB]1[/SUB])+x[SUB]3[/SUB]²(y[SUB]1[/SUB]-y[SUB]2[/SUB]))/((x[SUB]1[/SUB]-x[SUB]2[/SUB])(x[SUB]1[/SUB]-x[SUB]3[/SUB])[B](x[SUB]2[/SUB]-x[SUB]3[/SUB])[/B])
c = (x[SUB]1[/SUB]²(x[SUB]2[/SUB]y[SUB]3[/SUB]-x[SUB]3[/SUB]y[SUB]2[/SUB])+x[SUB]1[/SUB](x[SUB]3[/SUB]²y[SUB]2[/SUB]-x[SUB]2[/SUB]²y[SUB]3[/SUB])+x[SUB]2[/SUB]x[SUB]3[/SUB]y[SUB]1[/SUB](x[SUB]2[/SUB]-x[SUB]3[/SUB]))/((x[SUB]1[/SUB]-x[SUB]2[/SUB])(x[SUB]1[/SUB]-x[SUB]3[/SUB])[B](x[SUB]2[/SUB]-x[SUB]3[/SUB])[/B])
```

Hab die Anteile mal "fett geschrieben und unterstrichen" bzw. "fett geschrieben". Ist das ein Tippfehler von Arndt Brünner oder ist es egal?
Bei deiner Vereinfachung bei "a" komme ich mit dem "-1.0" nicht so ganz mit. Möchte es schon versehen.

Danke auf jedenfalls schon mal für deine Unterstützung. Auf sowas wäre ich nicht direkt gekommen.


----------



## RedCali (28 Juni 2018)

im Nenner die minus aus dem letzten Term "raus" ziehen - deswegen mal minus "eins" 
Die habe ich zuvor ausgeklammert und bei "a" dann vorne angehängt damit der Nenner gleich wird - Nenner Berechnung nur einmal notwendig dadurch ;-)
Einfach nur Einsparung von Rechenzeit....


----------



## hubert (28 Juni 2018)

Hallo RedCali,
habe jetzt etwas gebraucht aber es dann doch verstanden. Das Ergbnis aus dem Nenner ist ja vom Vorzeichen betrachtet unterschiedlich zu den andern beiden. Damit du nun zum selben Ergbnis kommst, musst du mal "minus" ein nehmen. Wie das aber jetzt mathematisch niedergelegt ist, stehe ich gerade auf dem Schlauch.
Aber danke für dein Super Erklärung und Vereinfachung *ACK*.

Hat dieses Gleichungssystem auch einen Namen? Also irgend eine Mathematiker ist doch auf diese Formel gekommen.
Kannte das auf jedenfalls noch nicht.


----------



## RedCali (28 Juni 2018)

im letzten Term des "Nenners" von "A" eine "-1" ausklammern - damit wird der Nenner gleich zu denen von "B" und "C"
Das ausklammern muss man aber wieder rückgängig machen - deswegen "A" wieder mal "-1"


----------



## hubert (29 Juni 2018)

Hallo RedCali,

das diese Berechungssatz auch eine Namen, also von einem Mathematiker?
Den es gibt ja viele Möglichkeiten so Gleichungssysteme zu lösen. Nur dieser Ansatz ist mir noch nicht untergekommen.


----------



## RedCali (29 Juni 2018)

"-1" ausklammern --> Algebra
Das ist grundlegende Mathematik - auch das Gleichung's Lösen fällt in den Bereich.
Dein Händischer Ansatz war alles korrekt, aber eben nur mit konkreten Zahlen - anstatt dessen sind das die gemeingültigen Gleichungen nur eben ohne Zahlenwerte.

Der Lösungsansatz beruht auf dem Gaus-schen Elimination verfahren: https://de.wikipedia.org/wiki/Gaußsches_Eliminationsverfahren
Hat aber mit dem Ausklammern der "-1" nichts zu tun, das bleibt Algebra...

Mit einem "Matlab" würde man hier ehr im Bereich Matrizen Rechnung schauen....


----------



## Thruser (29 Juni 2018)

Hallo,

habe mir das alles noch einmal angesehen. Die verlinkte Seite zeigt ja nur die spezielle Form für 3 Stützstellen -> quadratische Gleichung bzw. 2. Ordnung.

Was Du da auf dem Papier machst ist ja das gaußsche Eliminationsverfahren: https://de.wikipedia.org/wiki/Gaußsches_Eliminationsverfahren

Bei Wikipedia findest Du da Pseudocode den Du nur noch umsetzen mußt. Für die Matrix ein 2-dimensionales Array nehmen.

Eine Erweiterung ist dann Gauß Jordan: https://de.wikipedia.org/wiki/Gauß-Jordan-Algorithmus

Dazu findet man auch viele Programmbeispiele.

Damit könntest Du die Koeffizienten eines Polynom belibieger Ordung berechnen.

Gruß


----------

