nsxyhjffzq 发表于 2006-8-29 10:07

求助各位仁兄!怎么样用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不再对应!
多谢帮助!!

frogfish 发表于 2006-8-29 12:14

没太看懂你的程序

调用函数:
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);


这一段是什么?不像是函数

nsxyhjffzq 发表于 2006-8-30 20:55

这是两个函数。其中的几个参数跟整个的实验数据有关,即:ffs,xs的值为:在第一段函数时,等于实验数据的开头两个数,而对于第二段函数,等于实验数据中间的两个数。

happy 发表于 2006-8-30 20:59

原帖由 nsxyhjffzq 于 2006-8-30 20:55 发表
这是两个函数。其中的几个参数跟整个的实验数据有关,即:ffs,xs的值为:在第一段函数时,等于实验数据的开头两个数,而对于第二段函数,等于实验数据中间的两个数。

这个需要你写成function的形式,具体自己看一下帮助吧

nsxyhjffzq 发表于 2006-8-31 09:24

多谢!

nsxyhjffzq 发表于 2006-8-31 10:33

想再请教一个问题:

当一个函数用lsqcurvefit去优化参数时,其优化的参数值随着给予的初始值不断的变化,因此不知怎么样能来优化该初始值。还有我的exitflag=0,这样得到的结果是不是不太行。

:@)谢谢。
页: [1]
查看完整版本: 求助各位仁兄!怎么样用lsqcurverfit进行分段函数的参数求解!