各位論壇的大神,小弟本科畢業(yè)論文,老師給的模型是這樣一個含間隙的二自由度碰撞系統(tǒng),研究它的分叉與混沌:左右各兩個小球,各自連接著一個非線性的彈簧和阻尼器,加上激勵力
具體的我上傳了圖片,還有附件。
問題描述完畢,我現(xiàn)在遇到的問題是:要在matlab里考慮這兩個小球的碰撞,老師說要把時間步設(shè)置為1e-6pi,計算時間為500pi,并且去掉前面200pi的時間。但是!這個根本算不了哇,我這個電腦算這么多的話得算到猴年馬月去了,然后我自就把時間縮短到50pi,時間步改為1e-3pi,但是計算起來也費時間,我現(xiàn)在就想問問各位:
1.這個問題必須要這么長的時間嗎?有什么辦法可以縮減一下?
2.怎樣判斷這兩個小球碰撞上了? 我寫的代碼是:if abs(delta-abs(x(1,n+1)-x(2,n+1)))<=10^(-2) delta是間隙的距離。x(1,n+1)是第n+1步時第一個球的位置,x(2,n+1)是第n+1步時第二個球的位置。不知道這樣寫對不對。
昨晚算的結(jié)果我截了圖,傳附件了。 希望大哥們能幫小弟看看。
對了,還有我自己編的matlab代碼:
第一個dyfun函數(shù),用于存放控制方程
function f=dyfun(x,y)
f(1)=y(3);
f(2)=y(4);
f(3)=-0.01*y(3)*0.1-y(1)*1^2-0.01*y(1)^3+10*0.01*cos(x*2);
f(4)=-0.01*y(4)*0.15-y(2)*1.5^2-0.012*y(2)^3+3*0.01*cos(x*2);
f=f( : );
end
--------------------------------------------------------------------------------------------------
第二個函數(shù),自己編寫的4階R-K方法,因為ode45里面我不知道怎么添加判斷條件,判斷兩個小球是否撞上了。
function[t,x]=narunge4s(dyfun,tspan,x0,h)
delta=input('delta=');
t=tspan(1):h:tspan(2);
x=zeros(length(x0),length(t));
x(:,1)=x0(: );
for n=1: (length(t)-1)
k1=feval(dyfun,t(n),x(:,n));
k2=feval(dyfun,t(n)+h/2,x(:,n)+h/2*k1);
k3=feval(dyfun,t(n)+h/2,x(:,n)+h/2*k2);
k4=feval(dyfun,t(n+1),x(:,n)+h*k3);
x(:,n+1)=x(:,n)+(h/6)*(k1+2*k2+2*k3+k4);
%下面這三行是由碰撞過程中動量守恒和恢復(fù)系數(shù)得到的
% lanbda=n1/n2 此處取做1
% q+p=x(3,n+1)+x(4,n+1);
% q-p=-0.8*(x(3,n+1)-x(4,n+1));
if abs(delta-abs(x(1,n+1)-x(2,n+1)))<=10^(-2)
%這就是判斷是否碰撞的語句,不知道對不對
q=(x(3,n+1)+x(4,n+1)-0.8*(x(3,n+1)-x(4,n+1)))/2;
p=(x(3,n+1)+x(4,n+1)+0.8*(x(3,n+1)+x(4,n+1)))/2;
x(3,n+1)=q;
x(4,n+1)=p; 這就是判斷是否碰撞的語句,不知道對不對
% stop=input('stop=');
end
n
% 這是為了一邊計算一邊看圖,隔100個點畫一次
if mod(n,100)==0
figure(1);
plot(t(1:n),x(1,1:n),'r',t(1:n),x(2,1:n),'r-.');
legend('x(1)','x(2)');
hold on
xlabel('x(1)');
ylabel('x(2)');
figure(2);
plot(x(1,1:n),x(3,1:n),'r');
xlabel('x(1)');
ylabel('dx(1)/dt');
title('The 1st')
figure(3);
plot(x(2,1:n),x(4,1:n),'r-')
xlabel('x(2)');
ylabel('dx(2)/dt');
title('The 2nd')
hold on
end
end
-------------------------------------------------------------------------------------------------
主程序,調(diào)用之前的計算。
clc
clear all
[t,x]=marunge4s(@dyfun,[0 50*pi],[0 0.5 0 0],10^-4*pi);
![求幫助。£P(guān)于利用matlab模擬二自由度含間隙碰撞系統(tǒng)的問題,本科畢業(yè)論文!。。。]()
論文模型.PNG
![求幫助!關(guān)于利用matlab模擬二自由度含間隙碰撞系統(tǒng)的問題,本科畢業(yè)論文。。。。-1]()
兩個小球的位移-時間圖.PNG
![求幫助。£P(guān)于利用matlab模擬二自由度含間隙碰撞系統(tǒng)的問題,本科畢業(yè)論文。。。。-2]()
第二個小球的位移-速度相圖.PNG |