我有一个数组
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)
1}}由dt=(diff)
和c
找到。
问题是我已使用k
实现了代码,以便在等式中找到A=x\b
和xx=dx./dt; xx2=dx2./dt2;
的值。
我使用A=x\b
使用公式Nan
获得的值为Nan
和c
k
和dt2=diff(t,2)
,因为我的xx
出来了零。我甚至添加了零来使xx2
和diff
的大小相等,但是我可以做些什么来使大小等于用零填充,因为我认为这会导致很多问题。 / p>
我有一种方法可以插入并获得diff
的大小相等,因为dt2
正在将大小减小n-1,对吗?关于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)
,因为它将全部归零。
以下是我的代码。
{{1}}
答案 0 :(得分:0)
只是c和k?我呢?你也不需要吗?
这是一个同质的ODE。数组告诉你初始位移在零时刻是什么,但速度怎么样?你需要两个初始条件。你是否会假设一开始速度为零?或者你会选择根据你得到的两个点来计算第一个差异吗?
我建议绘制值,看看它们的样子,并根据你观察到的内容尝试对常数进行有根据的猜测。你知道这个ODE的封闭形式解决方案;您可能能够根据您给出的数据来判断值应该是什么。
完成之后,我建议根据多个点的计算差异为未知数编写矩阵解决方案。这将把问题转化为常数的最小二乘解。可能是一组常数在每个时间点都不满足等式。
另一种方法是对数据进行FFT并将其与频域中的解决方案进行比较。