2012-08-12 114 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并将其与频域中的解进行比较。