2007年4月19日 星期四

Homework 7

%homework 7 作者:歐陽太閒 b94611001

7.1. 繪製位置


根據題目要求:
r=[a a+5 a-5]cm,a=1+10
長度起始角度 angle=[0 0 0]度
角速度 w=[0.2 0.5 0.3]rad/s(原題目的0.3多一空格)
角加速度 wa=[0, 0.1, 0.2]rad/s^2

而當時間改變時角速度變量(w0為原角速度,wa為角加速度):
delw=wa*t+w0
故將其對時間積分得
deltheta=0.5*w*(t)^2+w0*t
即為角度改變量

因此利用老師的dyad_draw列成以下script file(老師的dyad.m最後一行的vect似乎應為vec)
由於本題只要求位置,故dyad_draw中繪製速度,加速度的line部份暫以%使其成為註解
直接將各桿角速度,角加速度之參考點視為原點時:
結果如圖
程式碼如下:

%作業7.1 考慮角速度,角加速度參考點.歐陽太閒 b94611001
axis equal; %等比例
clf;
title('作業7.1 作者:歐陽太閒 b94611001 單位:cm,rad/s,rad/s^2'); %資訊
xlabel('x-axis');
ylabel('y-axis');
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(pi); %角徑轉換
for t=[1 2 3 4 5] %迴圈
% for t=[1 1.5 2 2.5 3 3.5 4 4.5 5]
delw=w1 + t.*aa; %新角速度
deltheta=0.5.*aa.*(t.^2)+ w1.*t %各桿分別的角度增加量
ang2=deltheta.*r2d; %角度增加量 = 各桿對原點所轉角度
dyad_draw(r,ang2,delw,aa);
end


以上的結果有些奇怪,因此若考量dyad_draw的各桿角度是指對原點的絕對角度,而非對前一桿的角度,
但角速度造成的角位移則是對角速度對應之原點造成角位移(否則其桿的對應原點將移動),因此在第二三桿的位移增加量上需考慮其上一桿的位

置,但角速度仍可直接計算.
而由於各桿之角速度和角加速度皆為定值,故可寫一script file如下:
結果如圖
若啟用速度,加速度繪製
結果如圖
程式碼如下:

%作業7.1 考慮角速度,角加速度參考點.歐陽太閒 b94611001
axis equal; %等比例
clf;
title('作業7.3 作者:歐陽太閒 b94611001 單位:cm,rad/s,rad/s^2'); %資訊
xlabel('x-axis');
ylabel('y-axis');
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(2*pi); %角徑轉換

for t=[1 2 3 4 5]
%固定座標系
delw=w1 + t.*aa; %各桿角速度
deltheta=0.5.*aa.*(t^2)+w1*t; %各桿分別的角度增加量
ang2(1)=(deltheta(1))*r2d; %1桿實際絕對角度
ang2(2)=ang2(1)+(deltheta(2))*r2d; %2桿實際絕對角度
ang2(3)=ang2(2)+(deltheta(3))*r2d; %3桿實際絕對角度
dyad_draw(r,ang2,delw,aa);
end


以上程式架構皆為:
1.座標定義和資訊
2.定義參數
3.以for-loop給予時間
a.分別以公式計算角速度和位移角度
b.以dyad_draw畫出
4.結束

7.2繪出三桿之結點之速度,加速度與時間t之關係


由於本程式以dyad為發展基礎,故直接採取其內對於速度加速度之定義,以以下程式求得值帶入dyad並繪製.
以下程式架構皆為:
1.座標定義和資訊
2.定義參數
3.以for-loop給予時間
a.分別以公式計算角速度和位移角度
b.以dyad求得速度,加速度,合速度,合加速度等
c.存入變數
4.以for-loop給予陣列序
a.繪製圖形
5.結束

1.利用以下程式求得各桿端速度與t之關係:
結果如圖
以下為程式碼:

%作業7.2.1 各桿加速度 歐陽太閒 b94611001
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(pi); %角徑轉換
title('作業7.2 作者:歐陽太閒 b94611001 綠,紅,粉紅分別為桿1,2,3速度'); %資訊
xlabel('x-axis');
ylabel('y-axis');

for j=[1:1:41]
t=j/10+1
delw=w1 + t.*aa; %各桿角速度
deltheta=0.5.*aa.*(t^2)+w1*t; %各桿分別的角度增加量
ang2(1)=(deltheta(1))*r2d; %1桿實際絕對角度
ang2(2)=ang2(1)+(deltheta(2))*r2d; %2桿實際絕對角度
ang2(3)=ang2(2)+(deltheta(3))*r2d; %3桿實際絕對角度
[vec,data] = dyad(r,ang2,delw,aa);%利用dyad
x=[0;cumsum(real(data(:,1)))]; %取值
y=[0;cumsum(imag(data(:,1)))];
sdata=sum(data); %將三桿值和
for k=1:length(r)
vl(k,j)=abs(data(k,2));
al(k,j)=abs(data(k,3));
%line([x0 vx],[y0 vy],'marker','s','linewidth',2);
%line([x0 ax],[y0 ay],'marker','s','color','r','linewidth',3)
end
end
for k=[1:1:40] %繪製
line([k/10+1 (k+1)/10+1],[vl(1,k) vl(1,k+1)],'color','g','linewidth',2) %桿一速度
line([k/10+1 (k+1)/10+1],[vl(2,k) vl(2,k+1)],'color','m','linewidth',2) %桿二速度
line([k/10+1 (k+1)/10+1],[vl(3,k) vl(3,k+1)],'color','r','linewidth',2) %桿三速度
end


2.各桿端加速度與t之關係
結果如圖
以下為程式碼:

%作業7.2.2 各桿加速度 歐陽太閒 b94611001
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(pi); %角徑轉換
title('作業7.2 作者:歐陽太閒 b94611001 綠,紅,粉紅分別為桿1,2,3加速度'); %資訊
xlabel('x-axis');
ylabel('y-axis');

for j=[1:1:41]
t=j/10+1
delw=w1 + t.*aa; %各桿角速度
deltheta=0.5.*aa.*(t^2)+w1*t; %各桿分別的角度增加量
ang2(1)=(deltheta(1))*r2d; %1桿實際絕對角度
ang2(2)=ang2(1)+(deltheta(2))*r2d; %2桿實際絕對角度
ang2(3)=ang2(2)+(deltheta(3))*r2d; %3桿實際絕對角度
[vec,data] = dyad(r,ang2,delw,aa);%利用dyad
x=[0;cumsum(real(data(:,1)))]; %取值
y=[0;cumsum(imag(data(:,1)))];
sdata=sum(data); %將三桿值和
for k=1:length(r)
vl(k,j)=abs(data(k,2)); %取速度
al(k,j)=abs(data(k,3)); %取加速度
end
end
for k=[1:1:40] %繪製
line([k/10+1 (k+1)/10+1],[al(1,k) al(1,k+1)],'color','g','linewidth',2) %桿一加速度
line([k/10+1 (k+1)/10+1],[al(2,k) al(2,k+1)],'color','m','linewidth',2) %桿二加速度
line([k/10+1 (k+1)/10+1],[al(3,k) al(3,k+1)],'color','r','linewidth',2) %桿三加速度
end


3.合速度及合加速度與t之關係:
結果如圖
以下為程式碼:

%作業7.2.3 各桿加速度 歐陽太閒 b94611001
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(pi); %角徑轉換
title('作業7.2 作者:歐陽太閒 b94611001 綠色為合速度'); %資訊
xlabel('x-axis');
ylabel('y-axis');
for j=[1:1:401]
t=j/100+1
delw=w1 + t.*aa; %各桿角速度
deltheta=0.5.*aa.*(t^2)+w1*t; %各桿分別的角度增加量
ang2(1)=(deltheta(1))*r2d; %1桿實際絕對角度
ang2(2)=ang2(1)+(deltheta(2))*r2d; %2桿實際絕對角度
ang2(3)=ang2(2)+(deltheta(3))*r2d; %3桿實際絕對角度
[vec,data] = dyad(r,ang2,delw,aa);%利用dyad
x=[0;cumsum(real(data(:,1)))]; %取值
y=[0;cumsum(imag(data(:,1)))];
sdata=sum(data); %將三桿值和
vv(j)=[abs(sdata(2))]; %取速度加速度絕對值
a2(j)=[abs(sdata(3))];
end
for k=[1:1:400] %繪製
line([k/100+1 (k+1)/100+1],[vv(k) vv(k+1)], 'marker','d','color','g','linewidth',3) %合速度
line([k/100+1 (k+1)/100+1],[a2(k) a2(k+1)], 'marker','d','color','m','linewidth',3) %合加速度
end


7.3動畫
本動畫利用7.1的程式修改而成,提高程式碼的重複利用率.
連結於此
採取1~5秒動作

以下為程式碼:

%作業7.3 動畫 歐陽太閒 b94611001
axis equal; %等比例
clf;
title('作業7.3 作者:歐陽太閒 b94611001 單位:cm,rad/s,rad/s^2'); %資訊
xlabel('x-axis');
ylabel('y-axis');
a=1+10; %1+10
r=[a a+5 a-5]; %各桿長
ang=[0 0 0]; %預設角度
w1=[0.2 0.5 0.3]; %角速度
aa=[0 0.1 0.2]; %角加速度
r2d=180/(pi); %角徑轉換

for t=[1:0.1:5]
pause(0.1);%時間間隔
clf;
axis([-40 40 -40 40]); %固定座標系
delw=w1 + t.*aa; %各桿角速度
deltheta=0.5.*aa.*(t^2)+w1*t; %各桿分別的角度增加量
ang2(1)=(deltheta(1))*r2d; %1桿實際絕對角度
ang2(2)=ang2(1)+(deltheta(2))*r2d; %2桿實際絕對角度
ang2(3)=ang2(2)+(deltheta(3))*r2d; %3桿實際絕對角度
dyad_draw(r,ang2,delw,aa);
end


以上程式架構為:
1.座標定義和資訊
2.定義參數
3.以for-loop給予時間
a.延時清除
b.分別以公式計算角速度和位移角度
c.以dyad_draw畫出
4.結束

心得:本次作業在期中考期間,時間較緊迫,但是在程式寫作和分析時題目仍相當有內涵,故花費了較以往作業更長的時間,而本次作業讓我們了解
到關於具有角速度,角加速度的自由擺動桿之運動分析,而利用老師提供的dyad和dyad_draw乃節省了大量的時間,免去重複開發和除錯的痛苦.

2 則留言:

Tom Redic 提到...

每桿之速度及加速度應是對應其與前一桿之相對運動而言,如此才能算出其絕對速度。所以如dyad之函數仍然考慮以對應前一桿之相對運動。

th86 提到...

所以仍應考慮桿對整個坐標系的相對運動(第二種),得出的結果才利于分析,謝謝您的指教