**:
根據條件
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 多...