我有一个数组求解线性方程质量弹簧系统
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)
。
问题是我已经实现了代码来找到c
和k
的值在使用A=x\b
的公式中。
我以xx=dx./dt; xx2=dx2./dt2;
使用式A=x\b
获得的值执行的代码是用于c
和k
Nan
Nan
和,因为我dt2=diff(t,2)
出来是零。我甚至增加了零,使大小等于xx
和xx2
,但我能做些什么来使填充的大小与零相等,因为我认为这造成了很多问题。
我有一种方法,我可以插入并获得大小相等的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)
ehm,你的'xx2 = diff(x,2)./ diff(t,2)'是令人尴尬的。您应该通过有限差分来回顾二阶导数的定义及其近似。 – 2012-08-12 21:58:09