Board logo

标题: 用过matlab拟合曲线的请进来 [打印本页]

作者: jiejiedog    时间: 2005-12-7 23:06     标题: 用过matlab拟合曲线的请进来

拟合曲线有哪些现成指令可以用?
书上只介绍了降次排列的多项式系数,用的是最小二乘法。
结果是Y=a0*X^2+a1*X+a2的形式,
现在我要求是写成Y=a*(U-b)^2的形式,只有两个参数。
怎么才能实现这个功能?有现成的指令可以用么?还是用最小二乘法编程序?
本人的matlab是盗版的,当时安装时候没有安装documentation。
热心人请介绍一下关于曲线拟合的指令集,谢谢!rose.gif
作者: jiejiedog    时间: 2005-12-8 01:44

想用最小二乘法算Y=a*(x-b)^2的参数a和b,有人能给点建议,提供算法或者代码么?
作者: 驴子    时间: 2005-12-8 11:20

你就没自己在google上找过?
还和我说找不到

用最小二乘法 和 matlab 找找
作者: NewGhost    时间: 2005-12-8 14:18

装了Matlab不装文档,怎么活啊?
我给你传算了:)
作者: ASDF    时间: 2005-12-8 14:57

i do not understand why don`t you rewritten the equations Y=a*(U-b)^2 just to the form Y=a*U.^2-2*a*b*U+a*b*b.  then you can calculate the a, b from these three terms. and then use polyfit .Although 3 eqs 2 parameters, leads to overdetermined problem, if the deviations are not so big, it will be in tolerance.
definitely you can also write a m-function (or for state space s-function) with LSQ or RLS algorithm. there are lots of papers about that in internet. and not so complicated. for estimate the parameter of a transfer function you can also use toolbox Ident.  just enter ident in the command line, you will see it.
but anyway parameter estimation or curve fitting are really boring and chanllenging work.  it needs time to get good at it.

[ Last edited by ASDF on 2005-12-8 at 16:14 ]
作者: ASDF    时间: 2005-12-8 15:10

the function in matlab is   ....polyfit.....
the general idea of LSQ is just based on the form

Y=phi*theta
Y and phi are the measurement matrix
theta is the parameters matrix

start from a initial value of theta, we get
Y_head=phi(t_0)*theta(t_0)
minimize the deviation Error=Y-Y_head, we get the estimated theta(t_1) for the next time step,, and so on.  so generally you should rewrite the equations in the form of Y_head=phi(t_0)*theta(t_0), firstly . even for the ODE or PDE equations, you should also discretize them as the first step of the estimation process.
作者: jiejiedog    时间: 2005-12-9 08:47

回答楼上的,polyfit只能提供降次的,事实证明误差很大。
找到一个曲线拟合的好函数,lsqcurvefit。
不过还是谢谢!:)
作者: 驴子    时间: 2005-12-9 10:06

Originally posted by jiejiedog at 2005-12-9 09:47 AM:
回答楼上的,polyfit只能提供降次的,事实证明误差很大。
找到一个曲线拟合的好函数,lsqcurvefit。
不过还是谢谢!:)

回家后上msn找我
我传你一个带文档的matlab
作者: yangyinjiao    时间: 2008-8-18 02:58

我一直用的是ployfit ,去试试lsqcurvefit看看:)
作者: totti.12    时间: 2008-8-18 06:10

如果只是为了得到较好拟合曲线的未知参数,可以使用cftool
作者: 一溜烟    时间: 2008-8-18 10:21

拟合曲线的基本思路是把函数用某种算子展开,比如fourierreihe就是用harmonische  Schwingung展开。楼主用到的polynom拟合是用泰勒级数展开,用二阶polynom即是用一条可上下左右移动并形状可变的抛物线来近似实际值,移动目的是使误差平方最小(最小二乘法)。用来拟合的抛物线不一定要有实数解!

针对楼主y=a(X-b)^2 的规定其实已经限定了抛物线只能左右移动(b),形状可变(a),但不可上下移动而且与横轴有且只有一个交点(因为没有常数项),这个规定大大限制了结果的准确性,因为只能用特定的抛物线来拟合,加了这个条件导致了五楼所说的方程组ueberbestimmt。 可能针对楼主的应用没有常数项也可以。不过就我个人接触过的应用,没有常数项,不论用泰勒级数还是fouriereihe,都没法得到可以通用的拟合算法。不是通用算法,估计也就没有已经写好的matlab命令。

至于最小二乘法命令的问题,以前做DA的时候也碰到过这样的问题,找了半天最后觉得还是自己写个matlab function比较保险,反正最小二乘法的数学推导也不是很麻烦。而且自己编程序可以自由选择加什么样的gewichtung。matlab命令对不重要的应用还成,不过做大程序的时候如果没搞清楚matlab具体算法总是会出些小问题。

[ 本帖最后由 一溜烟 于 2008-8-18 12:23 编辑 ]
作者: 仙林小童    时间: 2008-8-18 10:31

最新版的matlab里面好像有curvenfit的工具箱,我做DA的时候用过。似乎可以选择公式和参数。
作者: jiejiedog    时间: 2008-8-18 11:49

the problem was solved 2 years ago. 3x




欢迎光临 人在德国 社区 (http://csuchen.de/bbs/) Powered by Discuz! 7.2