Coëfficienten van polynoom berekenen

Wiskunde is niet alleen een vak op school. Kom je ergens in de praktijk (bijvoorbeeld tijdens je werk) een wiskundig probleem tegen dan kun je hier om hulp vragen.
Simotion
Vast lid
Vast lid
Berichten: 32
Lid geworden op: 22 dec 2017, 21:46

Coëfficienten van polynoom berekenen

Bericht door Simotion » 22 dec 2017, 22:02

In een applicatie gebruik ik polynomen die de lineaire verplaatsing van een slave object ten opzichte van een master object weergeven.
Dus de Y-waarde in de XY-curve is de lineaire verplaatsing van het slave object, waarbij de X-waarde de lineaire verplaatsing van het masterobject is.
Dus de verplaatsing van het slave object is in functie van het masterobject.
Nu is het de bedoeling van een XY-curve te kunnen ontwikkelen voor vooropgestelde gegevens :
positie van de master en de slave bij het begin van de curve, positie van de master en slave op het einde van de curve, snelheid en acceleratie van master en slave bij het begin van de curve, snelheid en acceleratie van master en slave op het einde van de curve.
Ik ga er van uit dat positie slave tov positie master kan beschreven worden als een vijfde orde polynoom. Nu had ik graag een formule geweten om op basis van bovenstaande vooropgestelde gegevens de coëfficienten van de vijfde orde polynoom te berekenen.
Kan iemand mij daarbij helpen.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Coëfficienten van polynoom berekenen

Bericht door arie » 23 dec 2017, 22:11

Als voor de positie x van Master M geldt:



dan is (vul voor t nul in):



dus




De snelheid v is de afgeleide van positie, dus



en door opnieuw t=0 te kiezen vind je:




De versnelling a is de afgeleide van snelheid, dus



en door nogmaals t=0 te kiezen vind je:



waarbij




Je hebt nu het stelsel:







Dit is een stelsel van 3 vergelijkingen met 3 onbekenden (A, B en C), alle andere variabelen ken je.
Als je dit stelsel hebt opgelost weet je dus de positie van M als vijfdegraads functie van t.


Precies hetzelfde doe je voor de Slave S:







waaruit je G, H en I kan oplossen.


Je hebt nu een parametervergelijking van zowel de positie van de Master (xM als functie van t), als van de positie van de Slave (xS als functie van t).
Je kan deze beide nu tegen elkaar plotten.

De relatieve positie R van de Slave ten opzichte van de Master vind je door het verschil van de twee vijfdegraads polynomen te berekenen:




Is dit wat je bedoelt?

Simotion
Vast lid
Vast lid
Berichten: 32
Lid geworden op: 22 dec 2017, 21:46

Re: Coëfficienten van polynoom berekenen

Bericht door Simotion » 24 dec 2017, 21:18

Arie,

Hartelijk dank alvast voor deze heldere uiteenzetting.
Dit is bijna wat ik bedoelde.
Het komt er op neer dat ik een plot heb met in de x-as de masterpositie, en in de y-as de slave positie.
Naar je formules toe komt dat bijna op hetzelfde neer, met dat verschil dat je enkel de formules hebt voor de slave, en dat de formules niet in functie zijn van de tijd, maar in functie van de masterpositie.
Je zou dus t door x kunnen vervangen.
Alleen weet ik nu nog niet zo direct hoe ik uit de drie vergelijkingen met 3 onbekenden het beste de G, H, I waarden haal.

Simotion
Vast lid
Vast lid
Berichten: 32
Lid geworden op: 22 dec 2017, 21:46

Re: Coëfficienten van polynoom berekenen

Bericht door Simotion » 26 dec 2017, 21:14

Ik dan uiteindelijk de coëfficiënten wel uitrekenen.
Echter dit zal enkel correct zijn in de veronderstelling van Arie, dat in de Y-as van de curve een positiewaarde wordt weergegeven, en de x-as de tijdsas voorstelt.
In mijn specifieke situatie is de y-as de positive van de slave, en de x-as de positive van de master.
Als de vijfde orde polynoom van de positie van de slave in functie is van de positie van de master, kan je immers niet zomaar afleiden naar de tijd, en hieruit de formules voor snelheid en versnelling afleiden.
Dus weet ik terug niet echt hoe ik hiermee verder moet.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Coëfficienten van polynoom berekenen

Bericht door arie » 26 dec 2017, 21:49

Het kan zijn dat de positie van de slave y(t) GEEN FUNCTIE is van de positie van de master x(t).
Een functie is een relatie waarbij elk origineel (in ons geval x(t)) maximaal 1 beeld ofwel functiewaarde (hier y(t)) heeft.
Maar hier kan het voorkomen dat master x twee (of meer) keer op dezelfde positie komt, terwijl de slave y in dat geval een andere positie heeft.


Voorbeeld:

Noem positie, snelheid en versnelling van de master op tijdstip t resp.: x(t), x'(t) en x"(t).
Noem positie, snelheid en versnelling van de slave op tijdstip t resp.: y(t), y'(t) en y"(t).
Dan kunnen we bovenstaande formules beknopt noteren als:







Om dit stelsel op te lossen herschrijven we dit als (breng A, B en C naar links):



Stel er wordt over 7 tijdseenheden gemeten, en gegeven is:
x(0)=-1.00, x'(0)=-8.55, x"(0)=10.60, x(7)=6.77, x'(7)=14.20 en x"(7)=20.40
dan wordt ons stelsel:



ofwel



Zo'n stelsel kan je oplossen via Gauss-eliminatie, zie bijvoorbeeld
https://nl.wikipedia.org/wiki/Gauss-eliminatie

Je kan ook herleiden naar matrix-vorm:



ofwel



en dit laten uitrekenen door de computer. Copy/paste bijvoorbeeld deze regel (een iets andere schrijfwijze voor bovenstaande):
{{16807, 2401, 343}, {12005, 1372, 147}, {6860, 588, 42}}^-1 * { {-192.08},{ -51.45}, {9.80}}
naar het invoerveld van
http://www.wolframalpha.com/
en je krijgt als antwoord:



Dus A=0.01, B=-0.05 en C=-0.70
en de formule



gaat over in




Stel er is ook gegeven
y(0)=2.00, y'(0)=7.75, y"(0)=-16.80, y(7)=-5.49, y'(7)=-4.50 en y"(7)=8.40
bereken dan op dezelfde manier de formule voor y(t).

Ter controle: ik kom uit op:



Als je nu de positie van master x(t) en van slave y(t) in een grafiek uitzet, dan krijg je:

Afbeelding

De grafiek begint op t=0 in het punt (x,y)=(-1,2) en
eindigt op t=7 in het punt (x,y)=(6.77,-5.49)
zoals oorspronkelijk gedefinieerd is.
Merk op dat er voor x=1 nu 3 mogelijke waarden voor y zijn (ongeveer 4.5, 5.4 en -1.2), zodat we niet over y als functie van x kunnen spreken.


Als je het hebt over de relatieve positie van y ten opzichte van x, dus: r(t)=y(t)-x(t),
dan vind je met bovenstaande formules:



ofwel



Nu heb je (de relatieve positie van slave t.o.v. master) enerzijds als functie van tijd anderzijds (een 5e graads polynoom):

Afbeelding

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Coëfficienten van polynoom berekenen

Bericht door arie » 27 dec 2017, 14:21

Als het zo is dat de positie van de slave y een 5e graads functie is van de positie van de master x (dus y=f(x) waarbij f een 5e graads functie), dan ligt het anders.

Je kan een 5e graads functie bepalen met 6 punten op de grafiek ervan.
Twee punten zijn al gegeven:
(px0, py0) = de positie van x en y bij aanvang
(pxt, pyt) = de positie van x en y aan het einde van periode t.

De andere punten die je nodig hebt kan je benaderen uit de versnelling a en de snelheid v op die twee tijdstippen. Neem een heel kleine tijdsperiode dt, en neem aan dat daarin de versnelling constant blijft. Bereken zo bijvoorbeeld 2 extra punten naast (px0, py0) en 2 naast (pxt, pyt).

Bepaal tenslotte de vergelijking van je functie f(x)=... uit deze gegevens.


Voorbeeld:

Definieer a=versnelling, v=snelheid, p=positie.

[1] Stel gegeven:
ax0 = 10, vx0 = 2, px0 = 0
ay0 = 78.72, vy0 = 50.40, py0 = 1

Neem dt = 10^-6 = 0.000001,

Dan vinden we:
px1(dt) = 0.5*ax0*dt^2 + vx0*dt + px0 = 0.00000200000500
py1(dt) = 0.5*ay0*dt^2 + vy0*dt + py0 = 1.00005040003936

px2(2dt) = 2*ax0*dt^2 + 2*vx0*dt + px0 = 0.00000400002000
py2(2dt) = 2*ay0*dt^2 + 2*vy0*dt + py0 = 1.00010080015744

Merk op dat deze twee punten erg dicht bij (px0, py0) liggen, zeker in vergelijking met het punt (pxt, pyt) (in dit voorbeeld is (pxt, pyt) = (8, 4.2), zie over een paar regels), zodat dt voor onze benadering waarschijnlijk klein genoeg is.
Zo niet, dan kunnen we ook een kleinere dt kiezen, maar let er wel op dat je rekenmachine of computer nauwkeurig genoeg werkt (als dt = 10^-6, dan is dt^2 = 10^-12)


[2] Stel ook gegeven:
axt = -5, vxt = 3, pxt = 8
ayt = 163.48, vyt = 34.32, pyt = 4.20

Nu dienen deze a, v en p als beginsituatie in de bewegingsformules.

Kies in dit geval dt = -10^-6 = -0.000001
(we gaan vanaf het eindpunt terug in de tijd, maar als je wil kan je dt ook positief kiezen).

Dan vinden we:
px4(dt) = 0.5*axt*dt^2 + vxt*dt + pxt = 7.99999699999750
py4(dt) = 0.5*ayt*dt^2 + vyt*dt + pyt = 4.19996568008174

px3(2dt) = 2*axt*dt^2 + 2*vxt*dt + pxt = 7.99999399999000
py3(2dt) = 2*ayt*dt^2 + 2*vyt*dt + pyt = 4.19993136032696


[3] Nu hebben we onze 6 punten:
(px0,py0), (px1,py1), (px2,py2), (px3,py3), (px4,py4), (pxt,pyt)

Als we die coordinaten invullen in de nog onbekende 5e graads functie



voor elk tweetal (px, py), dan hebben we een stelsel van 6 vergelijkingen met 6 onbekenden (A t/m F) dat we net als eerder besproken kunnen oplossen.

Ik kom voor dit voorbeeld uit op:

A = 0.0400
B = -0.8600
C = 6.640
D = -21.66
E = 25.20
F = 1.000

Dus



met deze grafiek:

Afbeelding


Bedoel je dit?

Simotion
Vast lid
Vast lid
Berichten: 32
Lid geworden op: 22 dec 2017, 21:46

Re: Coëfficienten van polynoom berekenen

Bericht door Simotion » 30 dec 2017, 09:23

Arie,

Ik heb geprobeerd wat je in je laatste post voorstelde.
Als ik de bekomen formule ingeef op http://www.wolframalpha.com/ constateer ik echter dat mijn formule wellicht te lang is. Het betreft deze eindformule :
{{168070000000000.000000,240100000000.000000,343000000.000000,490000.000000,700.000000},{168070001200500.000000,240100001372.000000,343000001.470000,490000.001400,700.000001},{168070002401000.000000,240100002744.000000,343000002.940000,490000.002800,700.000002},{1000000010000000.000000,1000000008000.000000,1000000006.000000,1000000.004000,1000.000002},{1000000005000000.000000,1000000004000.000000,1000000003.000000,1000000.002000,1000.000001},{1000000000000000.000000,1000000000000.000000,1000000000.000000,1000000.000000,1000000.000000}}^-1 *{{600.000000},{ 600.000001},{600.000002},{1000.000002},{1000.000001},{1000.000000}}

Ik heb voordien geprobeerd met de eerst voorgestelde vergelijkingen waarbij positie van de slave (y) een functie is van de masterpositie (x). Hierbij is yt, vt en at respectievelijk positie, snelheid en acceleratie van de slave op het einde, en y0, vo en a0 hetzelfde voor de slave aan het begin.
Voor de master wordt dan xt, vt, at, x0, v0 en a0 gebruikt.
yt = A(xt -x0)5 + B(xt -x0)4 + C(xt -x0)3 + ½ a0 (xt -x0)2 + v0 (xt -x0) + y0
vt = 5A(xt -x0)4 + 4B(xt -x0)3 + 3C(xt -x0)2 + a0 (xt -x0) + v0
at = 20A(xt -x0)3 + 12B(xt -x0)2 + 6C(xt -x0) + a0
Bovenstaande kan ik uiteindelijk oplossen, maar het resultaat lijkt niet correct.
Ik heb namelijk formules gevonden van de motion controller fabrikant waarmee de uiteindelijk bewegingen (die gebruik maken van de xy-curves) worden uitgevoerd.
In bijlage deze functie.
Ik zou echter zelf een dergelijke functie willen opstellen, omdat ik dan weet waar alles vandaan komt en ik de functie kan aanpassen naar eigen verwachtingen en eisen. Ik had dus toch graag naar een eigen werkend resulaat gekomen.
Je laatste stelling dat de slave positie in functie is van de masterpositie was in ieder geval correct.

Hieronder de gevonden functie :
FUNCTION FCCalcCamPoly5Order : ARRAY[0..5] OF LREAL

VAR_INPUT
leadingRangeStartPoint : LREAL; //leading value at range start point
leadingRangeEndPoint : LREAL; //leading value at range end point
followingRangeStartPoint : LREAL; //following value at range start point
followingRangeEndPoint : LREAL; //following value at range end point
followingRangeStartDerivation1 : LREAL; //velocity at range start point
followingRangeEndDerivation1 : LREAL; //velocity at range end point
followingRangeStartDerivation2 : LREAL; //acceleration at range start point
followingRangeEndDerivation2 : LREAL; //acceleration at range end point
END_VAR

VAR
xa : LREAL;
xe : LREAL;
xae : LREAL;
ya : LREAL;
ye : LREAL;
va : LREAL;
ve : LREAL;
aa : LREAL;
ae : LREAL;
xe2 : LREAL;
xe3 : LREAL;
xe4 : LREAL;
xe5 : LREAL;
xa2 : LREAL;
xa3 : LREAL;
xa4 : LREAL;
xa5 : LREAL;
xae5 : LREAL;
END_VAR;

xa := leadingRangeStartPoint;
xe := leadingRangeEndPoint;
ya := followingRangeStartPoint;
ye := followingRangeEndPoint;
va := followingRangeStartDerivation1;
ve := followingRangeEndDerivation1;
aa := followingRangeStartDerivation2;
ae := followingRangeEndDerivation2;

xae := xa-xe;
xae5 := xae * xae * xae * xae * xae;

xe2 := xe * xe;
xe3 := xe2 * xe;
xe4 := xe3 * xe;
xe5 := xe4 * xe;

xa2 := xa * xa;
xa3 := xa2 * xa;
xa4 := xa3 * xa;
xa5 := xa4 * xa;

IF (leadingRangeStartPoint <> leadingRangeEndPoint) THEN
FCCalcCamPoly5Order[0] := -1/2*(2*xa5*xe*ve-2*xa*va*xe5-10*ya*xe4*xa+2*ya*xe5+20*ya*xa2*xe3+xa2*aa*xe5+10*xa2*va*xe4+xa4*xe3*aa-20*xa3*xe2*ye-2*xa5*ye-xa5*xe2*ae-10*xa4*xe2*ve+10*xa4*xe*ye+2*xa4*xe3*ae+8*xa3*xe3*ve-xa3*xe4*ae-2*xa3*xe4*aa-8*xa3*xe3*va)/xae5;
FCCalcCamPoly5Order[1] := 1/2*(16*xa2*xe3*va+10*xa*xe4*va-xa2*xe4*aa-4*xe3*xa3*aa-16*xe2*xa3*ve+xe2*xa4*ae+4*xe3*xa3*ae-10*xe*xa4*ve-24*xe2*xa3*va+3*xe2*xa4*aa-2*xe*xa5*ae+60*xa2*xe2*ya-60*xa2*xe2*ye+2*xa*xe5*aa-3*xa2*xe4*ae+24*xa2*xe3*ve-2*xe5*va+2*xa5*ve)/xae5;
FCCalcCamPoly5Order[2] := -1/2*(-60*xe2*xa*ye+60*xe2*xa*ya+36*xe3*xa*va+4*xe4*xa*aa-3*xe4*xa*ae+24*xe3*xa*ve-24*xa3*xe*va+8*xa3*xe2*ae-36*xa3*xe*ve+12*xa2*xe2*ve-8*xa2*xe3*aa+60*xa2*xe*ya-60*xa2*xe*ye-12*xa2*xe2*va-xa5*ae+3*xa4*xe*aa-4*xa4*xe*ae+xe5*aa)/xae5;
FCCalcCamPoly5Order[3] := 1/2*(xa4*aa-3*xa4*ae-8*xa3*va-12*xa3*ve+4*xa3*xe*aa-28*xa2*xe*ve-32*xa2*xe*va-8*xa2*xe2*aa+8*xa2*xe2*ae+20*xa2*ya-20*xa2*ye+32*xa*xe2*ve+80*xa*xe*ya-4*xa*xe3*ae-80*xa*xe*ye+28*xa*xe2*va-20*xe2*ye+20*xe2*ya+12*xe3*va-xe4*ae+8*xe3*ve+3*xe4*aa)/xae5;
FCCalcCamPoly5Order[4] := -1/2*(-3*xa3*ae+2*xa3*aa-14*xa2*va-16*xa2*ve-xa2*xe*aa+4*xa2*xe*ae-30*xa*ye+30*xa*ya-2*xa*xe*va-4*xa*xe2*aa+xa*xe2*ae+2*xa*xe*ve+14*xe2*ve+3*xe3*aa+16*xe2*va+30*xe*ya-2*xe3*ae-30*xe*ye)/xae5;
FCCalcCamPoly5Order[5] := 1/2*(-12*ye+12*ya-xa2*ae-6*xa*ve+2*xa*xe*ae+xe2*aa+6*xe*va+xa2*aa-6*xa*va+6*xe*ve-2*xe*xa*aa-xe2*ae)/xae5;
ELSE
FCCalcCamPoly5Order[0] := 0;
FCCalcCamPoly5Order[1] := 0;
FCCalcCamPoly5Order[2] := 0;
FCCalcCamPoly5Order[3] := 0;
FCCalcCamPoly5Order[4] := 0;
FCCalcCamPoly5Order[5] := 0;
END_IF;

END_FUNCTION

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Coëfficienten van polynoom berekenen

Bericht door arie » 30 dec 2017, 18:24

Simotion schreef: ... Je laatste stelling dat de slave positie in functie is van de masterpositie was in ieder geval correct ...
Dan kunnen we mijn eerste post schrappen en verder gaan met de laatste.

Simotion schreef: ...
Nu is het de bedoeling van een XY-curve te kunnen ontwikkelen voor vooropgestelde gegevens :
positie van de master en de slave bij het begin van de curve,
positie van de master en slave op het einde van de curve,
snelheid en acceleratie van master en slave bij het begin van de curve,
snelheid en acceleratie van master en slave op het einde van de curve.
...
In je programma zie ik echter maar 8 variabelen.
Wat zijn precies de getalswaarden van je probleem?:

positie van de master aan begin = px0 =
positie van de slave aan begin = py0 =
positie van de master aan eind = pxt =
positie van de slave aan eind = pyt =

snelheid van master aan begin = vx0 =
acceleratie van master aan begin = ax0 =
snelheid van slave aan begin = vy0 =
acceleratie van slave aan begin = ay0 =

snelheid van master aan eind = vxt =
acceleratie van master aan eind = axt =
snelheid van slave aan eind = vyt =
acceleratie van slave aan eind = ayt =

Simotion
Vast lid
Vast lid
Berichten: 32
Lid geworden op: 22 dec 2017, 21:46

Re: Coëfficienten van polynoom berekenen

Bericht door Simotion » 30 dec 2017, 21:06

Arie,


positie van de master aan begin = px0 = 700 (mm)
positie van de slave aan begin = py0 = 600 (mm)
positie van de master aan eind = pxt = 1000 (mm)
positie van de slave aan eind = pyt = 1000 (mm)

snelheid van master aan begin = vx0 = 100 mm/sec
acceleratie van master aan begin = ax0 = 0
snelheid van slave aan begin = vy0 = 1 (factor tov master : 1 = zelfde snelheid als master)
acceleratie van slave aan begin = ay0 = 0

snelheid van master aan eind = vxt = 100 mm/sec
acceleratie van master aan eind = axt = 0
snelheid van slave aan eind = vyt = 1 (factor tov master : 1 = zelfde snelheid als master)
acceleratie van slave aan eind = ayt = 0

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Coëfficienten van polynoom berekenen

Bericht door arie » 30 dec 2017, 23:10

Heb je wellicht meer informatie over de posities/bewegingen?

Bij aanvang hebben master en slave dezelfde snelheid (100 mm/s) en is er geen versnelling.
Slave ligt echter 100 mm achter bij master.

Aan het eind hebben master en slave allebei nog steeds een snelheid van 100 mm/s en geen versnelling,
maar nu hebben ze dezelfde positie.

Ergens in het traject moet de slave dus zijn gaan versnellen, waardoor hij zijn snelheid vergroot en hij de master kan gaan inhalen, en vervolgens moet hij zijn gaan remmen (negatieve versnelling) waardoor zijn snelheid weer terug naar 100 mm/s gaat.

Zolang we niet weten waar en hoe dit gebeurt, kunnen we geen x-y-plot maken...

Simotion
Vast lid
Vast lid
Berichten: 32
Lid geworden op: 22 dec 2017, 21:46

Re: Coëfficienten van polynoom berekenen

Bericht door Simotion » 31 dec 2017, 15:37

Arie,

Je analyse klopt inderdaad voor de gegeven data.
Het is echter de bedoeling om code te hebben die de coëfficiënten berekend van een vijfde orde
polynoom, die de positie weergeeft van een slave ten opzichte van de positie van een master.
Gekend daarbij zijn reeds de slave beginpositie, master beginpositie, slave beginsnelheid, slave beginacceleratie, slave eindpositie, master eindepositie, slave eindsnelheid en slave eindacceleratie.
Ik moet zeggen dat ik ondertussen reeds de functie 'FUNCTION FCCalcCamPoly5Order ' van de fabrikant heb verkregen die in principe doet wat hierboven gesteld is.
In de functie kan je zien hoe de gekende factoren (beginpositie, etc.) uiteindelijk de coëfficiënten van de vijfde orde polynoom bepalen.
Ik had echter graag zelf tot formules gekomen die dan hetzelfde resultaat opleveren.
Dan weet ik hoe men tot alles komt.
Maar belangrijker is nog dat mijn uiteindelijke doel is om de eindpositie van de master in deze functie niet als vooraf gekend te stellen. Daartegenover staat dan dat de maximale acceleratie van de slave opgegeven is. Dit omdat in de praktijk een afstand meestal nog kan bijgepast worden, maar de maximale acceleratie van een slave (mechanisch) beperkt is.
De praktische toepassing van deze functie moet immers zijn dat de motion controller 'at runtime' een xy-curve kan berekenen om de slave een (vooraf gekende) offset te geven tov de master. Ik had hierboven net gesteld dat de master eindpositie een bekomen resultaat moet zijn, maar dat de maximum acceleratie van de slave opgegeven wordt.
In deze situatie zou je dus met volgende bekenden vooraf zitten :
master beginpositie, slave beginsnelheid, slave beginacceleratie, slave eindsnelheid, slave eindacceleratie, maximum acceleratie van de slave gedurende het volledige traject, offset van de slave tov de master op het einde van het traject (slave eindpositie - master eindpositie).
De slave snelheid wordt voorgesteld als factor x de mastersnelheid (slave snelheid 1 : snelheid slave = snelheid master). De mastersnelheid is in een dergelijke xy-curve van geen belang, omdat dit puur of positieverhoudingen gaan van master en slave, en de slave snelheid en acceleratie volgen dan in verhouding tot de mastersnelheid en acceleratie.
Deze xy-curves zijn wat men in de elecronische aandrijftechniek 'cam-curves' noemt.

Simotion
Vast lid
Vast lid
Berichten: 32
Lid geworden op: 22 dec 2017, 21:46

Re: Coëfficienten van polynoom berekenen

Bericht door Simotion » 08 jan 2018, 19:46

Omdat ik in de voorgaande reactie nogal ver gegaan ben zou ik in eerste instantie zelf willen komen tot bepaling van de coëfficiënten voor een vijfdeorde polynoom.
Waarbij de polynoom de positie van de slave weergeeft tov de positie van de master.
Bekend zijn dus beginpositie van de master en de slave, eindpositie van de master en de slave (absolute posities in mm).
Beginsnelheid en eindsnelheid van de slave tov de master (1= zelfde snelheid als master),
beginaccleratie van de slave en eindacceleratie van de slave (eerste afgeleide van bovengenoemde snelheden).
Mocht ik dit al tot een correcte berekening komen, dan is de eerste stap al gezet.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Coëfficienten van polynoom berekenen

Bericht door arie » 09 jan 2018, 08:55

Heb je ook een getalvoorbeeld, dus:
master beginpositie =
master eindepositie =
slave beginpositie =
slave beginsnelheid =
slave beginacceleratie =
slave eindpositie =
slave eindsnelheid =
slave eindacceleratie =
en het resultaat van de functie FCCalcCamPoly5Order op die getallen, dat wil zeggen de 5e graads polynoom die FCCalcCamPoly5Order voor deze getallen geeft.

Simotion
Vast lid
Vast lid
Berichten: 32
Lid geworden op: 22 dec 2017, 21:46

Re: Coëfficienten van polynoom berekenen

Bericht door Simotion » 09 jan 2018, 22:18

Hieronder 3 voorbeelden met de coëfficiënten ingegeven in de functie FCCalcCamPoly5Order.
Onmiddellijk na iedere x staat zijn macht. Coëfficiënten die nul zijn, zijn weggelaten.
Verder : posities zijn ingegeven als absolute positie in mm. Snelheid van de slave als de verhouding tot
de master (1 = slave snelheid gelijk aan master snelheid, 0 = slave staat stil, 0.5 = slave halve snelheid van master). Acceleratie 0 = geen versnelling.

Voorbeeld 1 : slave accelereert van stilstand naar de constante mastersnelheid
master beginpositie = 0
master eindepositie = 200
slave beginpositie = 0
slave beginsnelheid = 0
slave beginacceleratie = 0
slave eindpositie = 100
slave eindsnelheid = 1
slave eindacceleratie = 0
y = -0.000000062500000 x4 + 0.00002500000000 x3

Voorbeeld 2 : slave die dezelfde constante snelheid als de master heeft accelereert en deccelereert
om vervolgens terug dezelfde constante snelheid als de master aan te nemen. Hierbij is het positieverschil
tussen master en slave weggewerkt
master beginpositie = 700
master eindepositie = 1000
slave beginpositie = 600
slave beginsnelheid = 1
slave beginacceleratie = 0
slave eindpositie = 1000
slave eindsnelheid = 1
slave eindacceleratie = 0
y = 0.000000000246914 x5 -0.000001049382716 x4 + 0.001765432099 x3 -1.469135802 x2 + 605.9382716 x -98765.43210

Voorbeeld 3 : slave die dezelfde constante snelheid als de master heeft deccelereert tot stilstand
master beginpositie = 1500
master eindepositie = 1700
slave beginpositie = 1500
slave beginsnelheid = 1
slave beginacceleratie = 0
slave eindpositie = 1600
slave eindsnelheid = 0
slave eindacceleratie = 0
y = 0.000000062500000 x4 -0.0004000000000 x3 + 0.9562500000 x2 -1011.500000 x + 400781.2500

Ik had nog een tijdsgrafiek willen bijvoegen, maar een afbeelding als bijlage doorsturen lukt niet op dit forum.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: Coëfficienten van polynoom berekenen

Bericht door arie » 11 jan 2018, 12:26

Als de master een constante snelheid heeft dan is de positie van de master een lineaire functie van tijd:



Omdat we naar relatieve snelheden kijken, kunnen we de snelheid v arbitrair op 1 mm/s stellen.
Als we ook nog de positie op t=0 gelijk aan 0 stellen, dan wordt de x-as (= positie van de master) gelijk aan de tijdas.

In je tweede voorbeeld is dit:





Positie is een 5e graads functie van tijd (dit was gegeven), snelheid is de afgeleide van die functie, en versnelling is de afgeleide van snelheid:








Hieruit halen we de 6 vergelijkingen met 6 onbekenden:
we weten van de slave:
- xs, vs, as: positie, snelheid en acceleratie aan de start (dus als t=700)
- xe, ve, ae: positie, snelheid en acceleratie aan het eind (dus als t=1000).
met gegeven ts (starttijd) en te (eindtijd) krijgen we het stelsel:













waaruit we A t/m F kunnen oplossen als eerder beschreven.


Voorbeeld:

In jouw voorbeeld 2:













ofwel in matrixvorm:



dus:



en dit levert:



Dit zijn precies de getallen die je functie FCCalcCamPoly5Order geeft.


PS:
De versnelling is (waarbij we A t/m D nu kennen):



De extreme waarden van deze functie vind je door de afgeleide nul te stellen:



met de abc-formule kom ik in voorbeeld 2 uit op:
t1 = 763.39745962...
t2 = 936.60254037...

Plaats reactie