24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1968  |  回复: 7

bloomi

新虫 (初入文坛)

[求助] matlab非线性分段方程拟合 急~谢谢~已有2人参与

初学者求帮忙!
matlab非线性分段方程拟合 急~谢谢~
如图所示是一组非线性分段方程,其中待拟合参数有:T0,Ta,tm,δT,以及分段点ts。
我尝试使用lsqcurvefit进行拟合,但是代码编写有一些问题。。查阅相关资料也不太知道这种分段点就是未知参数的方程应该如何编程,希望大家给予帮助


xdata = [ 5.5000    6.5000    7.5000    8.5000    9.5000   10.5000   11.5000   12.5000 13.5000   14.5000   15.5000   16.5000   17.5000   18.5000   19.5000   20.5000   21.5000   22.5000   23.5000   24.5000    1.5000    2.5000    3.5000    4.5000];
ydata = [299.0545  300.8932  304.5193  308.6715  311.6907  315.0223  315.7924  317.1786  315.0809  313.1319  312.8464  309.4712  305.4651  304.1893  302.5152  301.9055  303.4350  299.9959  299.2613  299.7677  299.4591  298.5113  298.7621  298.6650];
x0 = [299.05  40  14  0.5  17.4];

function F = fun(x,xdata)
if xdata > x(5)
    w = 4/3*(x(3) - 5.4);
    F = a + b*cos( 3.14/w.*( xdata -c ) );
elseif xdata <= x(5)
    w = 4/3*(c - 5.4);
    k = w/3.14 * ( atan( 3.14/w*(x(5)-x(3)) ) - d/b*asin( 3.14/w*( x(5)-x(3) ) ) );
    F = a + d + ( b*cos( 3.14/w*(ee-c) ) - d ) * k/( k + xdata - ee );
end
end

[x,resnorm] = lsqcurvefit(@fun,x0,xdata,ydata);

这样运行之后会报错:
Error using feval
Output argument "F" (and maybe others)
not assigned during call to
"F:\DTC\pros\fun1012.m>fun1012".

Error in lsqcurvefit (line 203)
            initVals.F =
            feval(funfcn_x_xdata{3},xCurrent,XDATA,varargin{:});
            
Caused by:
    Failure in initial user-supplied
    objective function evaluation.
    LSQCURVEFIT cannot continue.

最后应该就是没有F的返回值了。。。我这个语句写的应该是肯定有问题但是我不太知道是什么问题。。希望能够请高人指点一下 谢谢!!!!!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
推荐用1stopt软件来做。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2014-10-13 09:56:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bloomi

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by 月只蓝 at 2014-10-13 09:56:31
推荐用1stopt软件来做。

因为要批量做,有2000多这样的方程需要拟合,(xdata ydata值不一样)所以希望写到程序里去
3楼2014-10-13 12:02:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

戴钢盔的猪头

木虫 (知名作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
bloomi: 金币+10, ★★★★★最佳答案 2014-10-15 10:09:56
分段函数最小二乘拟合目标函数导数不连续,可采用两段函数的加权加和作为拟合模型。加权因子假设分别为a和b,可设计连续光滑函数作为加权因子。这个函数需要表现出阶越性,可采用某个三角函数。三角函数都是初等函数,连续可导,故可设计加权函数满足:当t小于ts时,a=1,b=0,否则a=0,b=1。具体哪个三角函数呢?楼主自己去研究下吧,授人以鱼不如授人以渔。这个方法分两段,分多段都可以用。

[ 发自手机版 http://muchong.com/3g ]
4楼2014-10-14 15:48:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

戴钢盔的猪头

木虫 (知名作家)

【答案】应助回帖

引用回帖:
4楼: Originally posted by 戴钢盔的猪头 at 2014-10-14 15:48:59
分段函数最小二乘拟合目标函数导数不连续,可采用两段函数的加权加和作为拟合模型。加权因子假设分别为a和b,可设计连续光滑函数作为加权因子。这个函数需要表现出阶越性,可采用某个三角函数。三角函数都是初等函数 ...

补充a和b不是同一个函数,但用到同一个三角函数。

[ 发自手机版 http://muchong.com/3g ]
5楼2014-10-14 15:50:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bloomi

新虫 (初入文坛)

引用回帖:
4楼: Originally posted by 戴钢盔的猪头 at 2014-10-14 15:48:59
分段函数最小二乘拟合目标函数导数不连续,可采用两段函数的加权加和作为拟合模型。加权因子假设分别为a和b,可设计连续光滑函数作为加权因子。这个函数需要表现出阶越性,可采用某个三角函数。三角函数都是初等函数 ...

多谢您的帮助!我去研究下

[ 发自手机版 http://muchong.com/3g ]
6楼2014-10-15 10:09:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bloomi

新虫 (初入文坛)

引用回帖:
4楼: Originally posted by 戴钢盔的猪头 at 2014-10-14 15:48:59
分段函数最小二乘拟合目标函数导数不连续,可采用两段函数的加权加和作为拟合模型。加权因子假设分别为a和b,可设计连续光滑函数作为加权因子。这个函数需要表现出阶越性,可采用某个三角函数。三角函数都是初等函数 ...

问个问题。。。“当t小于ts时,a=1,b=0,否则a=0,b=1”
在这样的条件下函数还能连续光滑吗。。。
7楼2014-10-28 15:53:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

戴钢盔的猪头

木虫 (知名作家)

引用回帖:
7楼: Originally posted by bloomi at 2014-10-28 15:53:28
问个问题。。。“当t小于ts时,a=1,b=0,否则a=0,b=1”
在这样的条件下函数还能连续光滑吗。。。...

2/pi*arctan(w*x),x是实验参数(自变量),w是一个因子,越大阶越性越强,可以自行给出,尽量缩短转换带。你自己去画,再来说连不连续,可不可导。这个函数从-1阶越到1(还是有转换带的,但可以人为使之缩短到远小于采样间隔)。至于怎样阶越到0,自己去想,别再问我了。

[ 发自手机版 http://muchong.com/3g ]
8楼2014-10-28 17:39:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 bloomi 的主题更新
信息提示
请填处理意见