多項式軌跡 五次多項式軌跡

2021-09-01 17:45:53 字數 4084 閱讀 1712

**:

根據條件 

q(t0)=q0,q˙(t0)=v0,q¨(t0)=a0,q(t1)=q1q˙(t1)=v1q¨(t1)=a1.

q(t0)=q0,q(t1)=q1q˙(t0)=v0,q˙(t1)=v1q¨(t0)=a0,q¨(t1)=a1.

注意,這裡aiai表示多項式係數,aiai表示加速度。這裡定義t=t1−t0t=t1−t0,求得多項式係數為 

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪a0a1a2a3a4a5*****=a0v012a012t3[20h−(8v1+12v0)t−(3a0−a1)t2]12t4[−30h+(14v1+16v0)t+(3a0−2a1)t2]12t5[12h−6h(v1+v0)t+(a1−a0)t2].(1-25)

(1-25){a0=a0a1=v0a2=12a0a3=12t3[20h−(8v1+12v0)t−(3a0−a1)t2]a4=12t4[−30h+(14v1+16v0)t+(3a0−2a1)t2]a5=12t5[12h−6h(v1+v0)t+(a1−a0)t2].

圖7 五次多項式軌跡

matlab****參見examplescode資料夾下的example2_9.m檔案

%example2.9

clcclear

%軌跡定義條件

%時間t0=0;

t1=8;

%位置和速度(a)

q0=0;

q1=10;

v0=0;

v1=0;

acc0=0;

acc1=0;

%利用公式(1-25)求係數

h=q1-q0;

t=t1-t0;

a0=q0;

a1=v0;

a2=1.0/2*acc0;

a3=1.0/(2*t*t*t)*(20*h-(8*v1+12*v0)*t+(acc1-3*acc0)/(t*t));

a4=1.0/(2*t*t*t*t)*(-30*h+(14*v1+16*v0)*t+(3*acc0-2*acc1)/(t*t));

a5=1.0/(2*t*t*t*t*t)*(12*h-6*(v1+v0)*t+(acc1-acc0)/(t*t));

%軌跡生成

t=t0:0.1:t1;

%位置q=a0+a1*power((t-t0),1)+a2*power((t-t0),2)+a3*power((t-t0),3)+...

a4*power(t-t0,4)+a5*power(t-t0,5);

%速度v=a1+2*a2*power((t-t0),1)+3*a3*power((t-t0),2)+4*a4*power(t-t0,3)+...

5*a5*power(t-t0,4);

%加速度

acc=2*a2+6*a3*power((t-t0),1)+12*a4*power(t-t0,2)+20*a5*power(t-t0,3);

%繪圖subplot(3,2,1)

plot(t,q,'r');

axis([0,8,0,11])

ylabel('position')

grid on

subplot(3,2,3)

plot(t,v,'b');

axis([0,8,-1,2.5])

ylabel('velocity')

grid on

subplot(3,2,5)

plot(t,acc,'g');

xlabel('(a)');

ylabel('acceleration')

grid on

給定條件 

t0=0,q0=10,v0=0,t1=2,q1=20,v1=−10,t2=4,q2=0,v2=10,t3=8,q3=30,v3=3,t4=10,q4=40,v4=0.

t0=0,t1=2,t2=4,t3=8,t4=10,q0=10,q1=20,q2=0,q3=30,q4=40,v0=0,v1=−10,v2=10,v3=3,v4=0.

由此系列點確定的軌跡如下圖所示。

圖8 example2.7的條件用五次多項式確定的軌跡

matlab****參見examplescode資料夾下的example2_10.m檔案

%example2.10

clcclear

close('all')

%軌跡定義條件

%時間、位置和速度(a)

t_array=[0,2,4,8,10];

q_array=[10,20,0,30,40];

v_array=[0,-10,10,3,0];

%起點和終點加速度假設為0,中間點加速度都初始化為0,

acc_array=[0,0,0,0,0];

%計算軌跡

%初始位置

t=t_array(1);

q=q_array(1);

v=v_array(1);

v_array2=v_array;

acc=acc_array(1);

for k=1:length(t_array)-1

%按照式(1-23)式確定中間點的速度值

if(k>1)

dk1=(q_array(k)-q_array(k-1))/(t_array(k)-t_array(k-1));

dk2=(q_array(k+1)-q_array(k))/(t_array(k+1)-t_array(k));

if((dk2>=0 && dk1>=0) || (dk2<=0 && dk1<=0))

v_array2(k)=1.0/2.0*(dk1+dk2);

else

v_array2(k)=0;

end  

endend

for k=1:length(t_array)-1

%利用公式(1-25)求係數

%計算各段多項式的係數

h(k)=q_array(k+1)-q_array(k);

t(k)=t_array(k+1)-t_array(k);

a0(k)=q_array(k);

a1(k)=v_array2(k);

a2(k)=1.0/2*acc_array(k);

a3(k)=1.0/(2*t(k)*t(k)*t(k))*(20*h(k)-(8*v_array2(k+1)+12*v_array2(k))*t(k)+(acc_array(k+1)-3*acc_array(k))/(t(k)*t(k)));

a4(k)=1.0/(2*t(k)*t(k)*t(k)*t(k))*(-30*h(k)+(14*v_array2(k+1)+16*v_array2(k))*t(k)+(3*acc_array(k)-2*acc_array(k+1))/(t(k)*t(k)));

a5(k)=1.0/(2*t(k)*t(k)*t(k)*t(k)*t(k))*(12*h(k)-6*(v_array2(k+1)+v_array2(k))*t(k)+(acc_array(k+1)-acc_array(k))/(t(k)*t(k)));

%生成各段軌跡密化的資料點

%區域性時間座標

tau=t_array(k):t(k)/100:t_array(k+1);

%全域性時間座標,由區域性時間座標組成

t=[t,tau(2:end)];

%位置qk=a0(k)+a1(k)*power(tau-tau(k),1)+a2(k)*power(tau-tau(k),2)+a3(k)*power(tau-tau(k),3)+...

a4(k)*power(tau-tau(k),4)+a5(k)*power(tau-tau(k),5);

%全域性位置座標

q=[q,qk(2:end)];

%速度vk=a1(k)+2*a2(k)*power(tau-tau(k),1)+3*a3(k)*power(tau-tau(k),2)+4*a4(k)*power(tau-tau(k),3)+...

5*a5(k)*power(tau-tau(k),4);

v=[v,vk(2:end)];

%加速度

acck=2*a2(k)+6*a3(k)*power(tau-tau(k),1)+12*a4(k)*power(tau-tau(k),2)+20*a5(k)*power(tau-tau(k),3);

acc=[acc,acck(2:end)];

MATLAB多項式及多項式擬合

多項式均表示為陣列形式,陣列元素為多項式降冪係數 1.polyval函式 求多項式在某一點或某幾個點的值.p 1,1,1 x 2 x 1 x 1,0,1 y polyval p,x 另外求函式在某一點或某幾個點的值可以用函式feval.x 1,0,1 y feval x exp x x 注意用的乘法...

數學 多項式 多項式求逆

多項式求逆 前置知識 ntt 給定乙個多項式 f left x right 求乙個多項式 g left x right 使得 f left x right g left x right equiv 1 left bmod 998244353 right 考慮遞迴求解。假定現在已經求出了 g 0 le...

matlab多項式與非多項式擬合

擬合標準 1 原始資料向量與擬合向量之間的距離最小,該距離的度量一般使用誤差平方和表示,即均方誤差 r q y 22 2 當均方誤差最小時,說明構造的擬合向量與原始向量最為接近,這種曲線擬合的方法稱為最小二乘法 3 計算均方誤差最小時的擬合係數,可以通過微積分中求解極值的方法實現 多項式擬合 1 多...