Coëfficiënten zesde orde polynoom

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.
Plaats reactie
Simotion
Vast lid
Vast lid
Berichten: 32
Lid geworden op: 22 dec 2017, 21:46

Coëfficiënten zesde orde polynoom

Bericht door Simotion » 06 jun 2022, 15:29

Ik moet de coëfficiënten berekenen van een zesde orde polynoom.
De zesde orde polynoom stelt de positie van aan slave voor t.o.v. een master tijdens een beweging.
Master zal bewegen en de slavepositie is een functie van de masterpositie.
Snelheid, acceleratie en jerk van de beweging zijn afgeleiden van die positie.
Hierbij zijn :
s = masterpositie bij start
e = masterpositie bij het einde
xs = slavepositie bij start
xe = slavepositie bij einde
vs = slavesnelheid bij start
ve = slavesnelheid bij einde
as = slaveacceleratie bij start
ae = slaveacceleratie bij einde
js = slavejerk bij start
je = slavejerk bij einde
Vooraf gekend zijn e,s,xs,xe,vs.
Bovendien zijn de acceleraties en jerks bij start en einde 0.
[1] xs = A*s6 + B*s5 + C*s4 + D*s3 + E*s2 + F*s + G
[2] vs = 6*A*s5 + 5*B*s4 + 4*C*s3 + 3*D*s2 + 2*E*s + F
[3] as = 30*A*s4 + 20*B*s3 + 12*C*s2 + 6*D*s + 2*E
[4] js = 120*A*s3 + 60*B*s2 + 24*C*s + 6*D
[5] xe = A*e6 + B*e5 + C*e4 + D*e3 + E*e2 + F*e + G
[6] ve = 6*A*e5 + 5*B*e4 + 4*C*e3 + 3*D*e2 + 2*E*e + F
[7] ae = 30*A*e4 + 20*B*e3 + 12*C*e2 + 6*D*e + 2*E
[8] je = 120*A*e3 + 60*B*e2 + 24*C*e + 6*D

[1] xs = A*s6 + B*s5 + C*s4 + D*s3 + E*s2 + F*s + G
[2] vs = 6*A*s5 + 5*B*s4 + 4*C*s3 + 3*D*s2 + 2*E*s + F
[3] 0 = 30*A*s4 + 20*B*s3 + 12*C*s2 + 6*D*s + 2*E
[4] 0 = 120*A*s3 + 60*B*s2 + 24*C*s + 6*D
[5] xe = A*e6 + B*e5 + C*e4 + D*e3 + E*e2 + F*e + G
[6] ve = 6*A*e5 + 5*B*e4 + 4*C*e3 + 3*D*e2 + 2*E*e + F
[7] 0 = 30*A*e4 + 20*B*e3 + 12*C*e2 + 6*D*e + 2*E
[8] 0 = 120*A*e3 + 60*B*e2 + 24*C*e + 6*D

Ik doe achtereenvolgens [5]-[1]
xe-xs = A*(e6-s6) + B*(e5-s5) + C*(e4-s4) + D*(e3-s3)+ E*(e2-s2) + F*(e-s)
, dit delen door (e-s)
xe-xs/(e-s) = A*(e5+e4s+e3s2+e2s3+es4+s5) + B*(e4+e3s+e2s2+es3+s4) + C*(e3+e2s+es2+s3) + D*(e2+es+s2)+ E*(e+s) + F
, dan hiervan [2] aftrekken,
((xe-xs)/(e-s))-vs = A*(e5+e4s+e3s2+e2s3+es4-5s5) + B*(e4+e3s+e2s2+es3-4s4) + C*(e3+e2s+es2-3s3) + D*(e2+es-2s2) + E*(e-s)
((xe-xs)/(e-s))-vs = A*(e4+2e3s+3e2s2+4es3+5s4)*(e-s) + B*(e3+2e2s+3es2+4s3)*(e-s) + C*(e2+2es+3s2)*(e-s) + D*(e+2s)*(e-s) + E*(e-s)
, dan delen door (e-s)
((xe-xs)/(e-s)2)-(vs/(e-s)) = A*(e4+2e3s+3e2s2+4es3+5s4) + B*(e3+2e2s+3es2+4s3) + C*(e2+2es+3s2) + D*(e+2s) + E
, hiervan [3]/2 aftrekken
((xe-xs)/(e-s)2)-(vs/(e-s)) = A*(e4+2e3s+3e2s2+4es3+5s4) - A*15s4 + B*(e3+2e2s+3es2+4s3) -B*10s3 + C*(e2+2es+3s2) - C*6s2 + D*(e+2s) - D*3s
((xe-xs)/(e-s)2)-(vs/(e-s)) = A*(e3+3e2s+6es2+10s3)*(e-s) + B*(e2+3es+6s2)*(e-s) + C*(e+3s)*(e-s) + D*(e-s)
, delen door (e-s)
((xe-xs)/(e-s)3)-(vs/(e-s)2) = A*(e3+3e2s+6es2+10s3) + B*(e2+3es+6s2) + C*(e+3s) + D
, hiervan [4]/6 aftrekken
((xe-xs)/(e-s)3)-(vs/(e-s)2) = A*(e3+3e2s+6es2+10s3)- A*20s3 + B*(e2+3es+6s2) - B*10s2 + C*(e+3s) - C*4s
((xe-xs)/(e-s)3)-(vs/(e-s)2) = A*(e2+4es+10s2)*(e-s) + B*(e+4s)*(e-s) + C*(e-s)
, dan delen door (e-s)
((xe-xs)/(e-s)4)-(vs/(e-s)3) = A*(e2+4es+10s2) + B*(e+4s) + C
, dan vermenigvuldigen met 2 en hiervan [8]-[4] hiervan aftrekken (0 = A*10*(e2+es+s2) + B*5*(e+s) + C*2)
(2*(xe-xs)/(e-s)4)-(2*vs/(e-s)3) = A*(2e2+8es+20s2) - A*10*(e2+es+s2) + B(2e+8s) - B*5*(e+s)
(2*(xe-xs)/(e-s)5)-(2*vs/(e-s)4) = -A*2*(4e + 5s) - B*3
de andere vergelijking met enkel A en B term is te vinden door (3*[8]-[4])-[7]-[3]-[4]
0 = A*(15e2-15s2) + B*(5e-5s) B = - A*(15e2-15s2)/ (5e-5s)
B = - A*3*(e+s)
Uit de twee vergelijkingen met enkel A en B kan je A en B afleiden :
A = (2*(xe-xs)/(e-s)6)-(2*vs/(e-s)5)
B = - A*3*(e+s)
Uit tussenliggende vergelijking met enkel A,B en C kan je C afleiden:
C = -A*5*(e2+es+s2) - B*5/2*(e+s)
De coëfficiënten D,E,F,G kan je dan halen uit de basisvergelijkingen [1] tot [4]
Bovenstaande werkt prima zolang de master startpositie (s) 0 is. Als ik die verschillend van 0 maak klopt het resultaat niet meer. Als ik de curves voor positie, snelheid, acceleratie en jerk bekijk in functie van masterpositie zou als ik de masterstartpositie verhoog, maar het verschil tussen master start en eindpositie hetzelfde houd, de curves enkel mogen verschuiven langs de master as, maar dit is niet het geval.
Maak ik toch ergens een fout in hoe ik de vergelijkingen omvorm?

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

Re: Coëfficiënten zesde orde polynoom

Bericht door arie » 06 jun 2022, 19:34

Simotion schreef: ...
Uit de twee vergelijkingen met enkel A en B kan je A en B afleiden :
A = (2*(xe-xs)/(e-s)6)-(2*vs/(e-s)5)
B = - A*3*(e+s)
Uit tussenliggende vergelijking met enkel A,B en C kan je C afleiden:
C = -A*5*(e2+es+s2) - B*5/2*(e+s)
De coëfficiënten D,E,F,G kan je dan halen uit de basisvergelijkingen [1] tot [4]
...
Als ik een getalvoorbeeld maak:
s=12.0;
e=50.0;
xs=8;
vs=1;
xe=32;
dan lijkt dit te kloppen: A, B, C en D heb ik gecontroleerd, E, F en G zullen dan ook correct zijn.
Ik kom met bovenstaande getallen uit op:
A = -9.29943261133 E-9,
B = 1.72969446571 E-6,
C = -0.000117265845229,
D = 0.00345938893141,
E = -0.0502169361012,
F = 1.35584122657,
G = -4.98769080337,
ve = 0.263157894737
('ve' is de 8e onbekende)

Simotion schreef: ...
Bovenstaande werkt prima zolang de master startpositie (s) 0 is. Als ik die verschillend van 0 maak klopt het resultaat niet meer. Als ik de curves voor positie, snelheid, acceleratie en jerk bekijk in functie van masterpositie zou als ik de masterstartpositie verhoog, maar het verschil tussen master start en eindpositie hetzelfde houd, de curves enkel mogen verschuiven langs de master as, maar dit is niet het geval.
Maak ik toch ergens een fout in hoe ik de vergelijkingen omvorm?
Ben je wellicht vergeten de slave start- en eindpositie met de master mee te verschuiven?

Als ik in bovenstaande de posities met 12 verlaag, krijg ik:
s=0.0;
e=38.0;
xs=-4;
vs=1;
xe=20;
en dit geeft:
A = -9.29943261133 E-9,
B = 1.06013531769 E-6,
C = -3.35709517269 E-5,
D = 0,
E = 0,
F = 1.00000000000,
G = -4.00000000000,
ve = 0.263157894737

De slave-getallen als functie van s:
slavex(s)={ A*s^6 + B*s^5 + C*s^4 + D*s^3 + E*s^2 + F*s + G }
slavev(s)={ 6*A*s^5 + 5*B*s^4 + 4*C*s^3 + 3*D*s^2 + 2*E*s + F }
slavea(s)={ 30*A*s^4 + 20*B*s^3 + 12*C*s^2 + 6*D*s + 2*E }
slavej(s)={ 120*A*s^3 + 60*B*s^2 + 24*C*s + 6*D }
kunnen we nu voor beide gevallen bekijken.

Alle posities zijn bij mij in het tweede geval 12 eenheden richting negatief verschoven, de overige parameters (snelheid, versnelling, jerk) blijven identiek.


Hier nog mijn programma-code, mocht je die kunnen gebruiken:

Code: Selecteer alles

slavex(s)={ A*s^6 + B*s^5 + C*s^4 + D*s^3 + E*s^2 + F*s + G }
slavev(s)={ 6*A*s^5 + 5*B*s^4 + 4*C*s^3 + 3*D*s^2 + 2*E*s + F }
slavea(s)={ 30*A*s^4 + 20*B*s^3 + 12*C*s^2 + 6*D*s + 2*E }
slavej(s)={ 120*A*s^3 + 60*B*s^2 + 24*C*s + 6*D }

\\ MAIN:
{
s=12.0;
e=50.0;

xs=8;
vs=1;
xe=32;

M=[ s^6,     s^5,    s^4,    s^3,   s^2, s, 1,  0;
    6*s^5,   5*s^4,  4*s^3,  3*s^2, 2*s, 1, 0,  0;
    30*s^4,  20*s^3, 12*s^2, 6*s,   2,   0, 0,  0;
    120*s^3, 60*s^2, 24*s,   6,     0,   0, 0,  0;
    e^6,     e^5,    e^4,    e^3,   e^2, e, 1,  0;
    6*e^5,   5*e^4,  4*e^3,  3*e^2, 2*e, 1, 0, -1;
    30*e^4,  20*e^3, 12*e^2, 6*e,   2,   0, 0,  0;
    120*e^3, 60*e^2, 24*e,   6,     0,   0, 0,  0  ];

v=[xs,vs,0,0,xe,0,0,0];

w=M^-1*v~;

print(w);

A=w[1];
B=w[2];
C=w[3];
D=w[4];
E=w[5];
F=w[6];
G=w[7];

for(s=12,50,print(slavex(s),"   ",slavev(s),"   ",slavea(s),"   ",slavej(s)));
}
Vector w = [A, B, C, D, E, F, G, ve] = het product van de inverse van M maal de vector v.
Vector v bevat de gegeven constanten links van de gelijktekens in het stelsel.

Plaats reactie