gucansong 发表于 2006-3-31 16:27

如何进行二阶导数拟合?

请教:<BR>      我通过试验测得了位移x和力f(t)的相关数据,想根据公式:mx''+cx'+kx=f(t)作出f(t)-x的示功图。再通过二阶导数拟合f(t)-x得到相应的m、c和k。不知道用什么命令,哪位高手指点一下,很急呀!

gucansong 发表于 2006-3-31 18:33

<P>顶。。<BR></P>

happy 发表于 2006-3-31 18:43

回复:(gucansong)如何进行二阶导数拟合?

提一种想法,可行不可行自己斟酌<BR><BR>对x进行数值求导,得到x'和x",然后用最优化方法求m,c,k<BR>或者可以先对x进行拟合的到x(t),然后求得x'(t),x"(t),然后和上述方法一样求解

gucansong 发表于 2006-4-2 19:33

<P>谢谢happy!<BR>在matlab里没有直接的命令可以调用吗?这样做好麻烦哦!</P>

happy 发表于 2006-4-3 08:40

回复:(gucansong)如何进行二阶导数拟合?

<P>没见过</P>

gucansong 发表于 2006-4-5 10:27

<P>happy版主:<BR>   关于这个问题我查了很多的资料,总算找到了解决的方法了。在matlab6.5辅助优化计算与设计这本书里介绍了LSQCURVEFIT函数,利用此函数可以在最小二乘意义上解决非线性曲线拟合(数据拟合)问题。也就是说,给定输入数据x,以及观测的输出数据f,找到系数m、c、k,使得函数mx''+cx'+kx=f(t)能够最好的拟合向量值。<BR>   书中的例子代码如下,可是我运行的时候还是会出错,不知道该怎么办了,你再帮帮我!谢谢!<BR>function f=myfun(a,x)<BR>f=a(1)*x.^2+a(2)*sin(x)+a(3)*x.^3;<BR>x=;<BR>y=;<BR>a0=;<BR>=lsqcurvefit(@myfun,a0,x,y);<BR><BR>错误提示:<BR>??? Input argument 'a' is undefined.</P>
<P>Error in ==&gt; d:\MATLAB6p5p1\work\myfun1.m<BR>On line 2==&gt; f=a(1)*x.^2+a(2)*sin(x)+a(3)*x.^3;<BR><BR></P>

happy 发表于 2006-4-5 14:50

回复:(gucansong)happy版主: 关于这个问题我查...

<DIV class=quote><B>以下是引用<I>gucansong</I>在2006-4-5 10:27:56的发言:</B><BR>
<P>happy版主:<BR>   关于这个问题我查了很多的资料,总算找到了解决的方法了。在matlab6.5辅助优化计算与设计这本书里介绍了LSQCURVEFIT函数,利用此函数可以在最小二乘意义上解决非线性曲线拟合(数据拟合)问题。也就是说,给定输入数据x,以及观测的输出数据f,找到系数m、c、k,使得函数mx''+cx'+kx=f(t)能够最好的拟合向量值。<BR>   书中的例子代码如下,可是我运行的时候还是会出错,不知道该怎么办了,你再帮帮我!谢谢!<BR><FONT color=#ff0000>function f=myfun(a,x)<BR>f=a(1)*x.^2+a(2)*sin(x)+a(3)*x.^3;</FONT><BR>x=;<BR>y=;<BR>a0=;<BR>=lsqcurvefit(@myfun,a0,x,y);<BR><BR>错误提示:<BR>??? Input argument 'a' is undefined.</P>
<P>Error in ==&gt; d:\MATLAB6p5p1\work\myfun1.m<BR>On line 2==&gt; f=a(1)*x.^2+a(2)*sin(x)+a(3)*x.^3;<BR><BR></P></DIV>
<P>红色部分写在m文件中<BR>其他的在命令窗口运行,你写的没问题</P>

happy 发表于 2006-4-5 14:52

回复:(gucansong)如何进行二阶导数拟合?

程序是没问题,不过这个函数拟合的是你的函数吗?你在仔细看看

w89986581 发表于 2006-4-5 15:12

回复:(gucansong)如何进行二阶导数拟合?

<DIV class=quote><B>以下是引用<I>gucansong</I>在2006-3-31 16:27:13的发言:</B><BR>请教:<BR>      我通过试验测得了位移x和力f(t)的相关数据,想根据公式:mx''+cx'+kx=f(t)作出f(t)-x的示功图。再通过二阶导数拟合f(t)-x得到相应的m、c和k。不知道用什么命令,哪位高手指点一下,很急呀!</DIV>
<br>呵呵,你的试验运不允许先将f(t)变换到频域F(w),这样位移x的导数就变成了含有角频率w的乘积因子,这时再进行拟合。
页: [1]
查看完整版本: 如何进行二阶导数拟合?