求助各位仁兄!怎么样用lsqcurverfit进行分段函数的参数求解!
有一个函数,其函数曲线的模式是一个迟滞曲线,即分成来回两端。怎么样能进行整体的参数优化。而不是分成两端。大概程序如下:
主函数:global xs;
global ffs;
data=xlsread('D:\wjt\资料\其他\nsxyhjffzq');
xdata=data(:,1);
ydata=data(:,2);
=min(xdata);
xdata=';
x0=;
=lsqcurvefit(@fun_he,x0,xdata,ydata)
调用函数:
ffs=xdata(end-1);
xs=xdata(1);
loc=xdata(end-3);
xdata=xdata(1:loc);
F=ffs+(xdata-xs)./(x(1)*(1+ffs/x(1))-(xdata-xs))*(x(2)+ffs);
ffs=xdata(end);
xs=xdata(end-2);
xdata=xdata(loc:2*loc-1);
F=ffs+(xdata-xs)./(x(1)*(1-ffs/x(1))+(xdata-xs))*(x(2)-ffs);
出现问题:
??? Error using ==> D:\matlab6.1\toolbox\optim\private\lsqncommon
User supplied function failed with the following error:
Index exceeds matrix dimensions.
Error in ==> D:\matlab6.1\toolbox\optim\lsqcurvefit.m
On line 129==> = ...
Error in ==> D:\matlab6.1\work\ffzq\friction_para.m
On line 20==> =lsqcurvefit(@fun_he,x0,xdata,ydata)
本人认为在分段后,=lsqcurvefit(@fun_he,x0,xdata,ydata)这个命令中的xdata,ydata不再对应!
多谢帮助!! 没太看懂你的程序
调用函数:
ffs=xdata(end-1);
xs=xdata(1);
loc=xdata(end-3);
xdata=xdata(1:loc);
F=ffs+(xdata-xs)./(x(1)*(1+ffs/x(1))-(xdata-xs))*(x(2)+ffs);
ffs=xdata(end);
xs=xdata(end-2);
xdata=xdata(loc:2*loc-1);
F=ffs+(xdata-xs)./(x(1)*(1-ffs/x(1))+(xdata-xs))*(x(2)-ffs);
这一段是什么?不像是函数 这是两个函数。其中的几个参数跟整个的实验数据有关,即:ffs,xs的值为:在第一段函数时,等于实验数据的开头两个数,而对于第二段函数,等于实验数据中间的两个数。 原帖由 nsxyhjffzq 于 2006-8-30 20:55 发表
这是两个函数。其中的几个参数跟整个的实验数据有关,即:ffs,xs的值为:在第一段函数时,等于实验数据的开头两个数,而对于第二段函数,等于实验数据中间的两个数。
这个需要你写成function的形式,具体自己看一下帮助吧 多谢! 想再请教一个问题:
当一个函数用lsqcurvefit去优化参数时,其优化的参数值随着给予的初始值不断的变化,因此不知怎么样能来优化该初始值。还有我的exitflag=0,这样得到的结果是不是不太行。
:@)谢谢。
页:
[1]