|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
有一个函数,其函数曲线的模式是一个迟滞曲线,即分成来回两端。怎么样能进行整体的参数优化。而不是分成两端。
大概程序如下:
主函数:global xs;
global ffs;
data=xlsread('D:\wjt\资料\其他\nsxyhjffzq');
xdata=data(:,1);
ydata=data(:,2);
[xs2,loc]=min(xdata);
xdata=[xdata' loc xs2 ydata(1) ydata(loc)]';
x0=[3000,5];
[x,resnorm]=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 ==> [x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...
Error in ==> D:\matlab6.1\work\ffzq\friction_para.m
On line 20 ==> [x,resnorm]=lsqcurvefit(@fun_he,x0,xdata,ydata)
本人认为在分段后,[x,resnorm]=lsqcurvefit(@fun_he,x0,xdata,ydata)这个命令中的xdata,ydata不再对应!
多谢帮助!! |
|