2012-08-12 67 views
-1

我有一個數組求解線性方程質量彈簧系統

X=[ 0.1000 0.0844 0.0434 -0.0090 -0.0559 -0.0831 -0.0832 -0.0574 -0.0152 0.029] 

其示出的位置。相對於該位置的時間序列是

T= [0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000] 

和我有質量彈簧方程mx’’ + c x’ + kx = 0,其中x’’是x的二次導數,這是我採用dx=diff(x.2)dt2=diff(t,2)找到,並且x’dx=diff(x)發現和dt=(diff)

問題是我已經實現了代碼來找到ck的值在使用A=x\b的公式中。

我以xx=dx./dt; xx2=dx2./dt2;

使用式A=x\b獲得的值執行的代碼是用於ckNanNan和,因爲我dt2=diff(t,2)出來是零。我甚至增加了零,使大小等於xxxx2,但我能做些什麼來使填充的大小與零相等,因爲我認爲這造成了很多問題。

我有一種方法,我可以插入並獲得大小相等的diff,因爲diff正在減少n-1的大小,正確嗎?關於dt2可以做些什麼:它是好的還是應該是dt2=dt^.2,因爲它已經全部爲零。

以下是我的代碼。

x=[ 0.1000 0.0844 0.0434 -0.0090 -0.0559 -0.0831 -0.0832 -0.0574 -0.0152 0.029]'; 
t= [0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000]'; 
dx=diff(x); 
dt=diff(t); 
dx2=diff(x,2); 
dt2=diff(t,2); % this comes out zero 
xx=dx./dt; 

xx2=dx2./dt2; 
% padding zeros to make size equal 

xx2=padarray(xx2,size(x)-size(xx2),'post'); 
xx=padarray(xx,size(x)-size(xx),'post'); 
mass=100; 
gh=horzcat(xx,x); 
A=gh\(m*xx2) 
+3

ehm,你的'xx2 = diff(x,2)./ diff(t,2)'是令人尷尬的。您應該通過有限差分來回顧二階導數的定義及其近似。 – 2012-08-12 21:58:09

回答

0

只是c和k?那麼m呢?你也不需要嗎?

這是一個同質的ODE。該陣列告訴你零時間初始位移是多少,但速度又如何?你需要兩個初始條件。你是否會假定速度在開始時爲零?或者你會選擇基於你擁有的兩點計算第一個差異?

我建議繪製這些值,看看它們的樣子,並嘗試根據所觀察的結果對常量進行有根據的猜測。你知道這個ODE的封閉表格解決方案;您可能能夠根據您提供的數據來分辨這些值應該是什麼。

做完之後,我建議根據計算出的差異在多個點上爲未知數編寫一個矩陣解。這會將問題轉化爲常量的最小二乘解。可能是因爲一組常量在每個時間點都不能滿足方程。

另一種方法是對數據進行FFT並將其與頻域中的解進行比較。