登录论坛

查看完整版本 : [MATLAB基础] 曲线拟合求助


lincsu
2010-05-17, 02:27
coeff是所求的未知系数,一共三个参数
xdata=【0:0.001:3】。。。。1x3001
ydata=不规则的数据,请见附件,长度1x3001
是一个公式求出来的数值
附件是matlab中.mat文件,下载后可以改成.mat后缀

求解的曲线是:
F=coeff(3)^2./((coeff(2)-xdata.^2).^2+(coeff(1)*xdata).^2);

非常感谢,我使用了:
coeff0 = [5; 8; 0.00001]; % Starting guess
[coeff,resnorm] = lsqcurvefit(@myfun,coeff0,xdata,ydata)

function F = myfun(coeff,xdata)
F=coeff(3)^2./((coeff(2)-xdata.^2).^2+(coeff(1)*xdata).^2);

但是一直出错:
??? Error using ==> optim\private\snls at 304
lsqcurvefit cannot continue: user function is returning Inf or NaN values.

Error in ==> optim\private\lsqncommon at 221
[x,FVAL,LAMBDA,JACOB,EXITFLAG,OUTPUT,msg]=...

Error in ==> lsqcurvefit at 182
[x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...

Error in ==> white_noise_to_color at 25
[coeff,resnorm] = lsqcurvefit(@myfun,coeff0,omega,S_FF)

lincsu
2010-05-17, 06:33
初始值好像设置有问题,但是怎么找到合适的初始值 呢?

lincsu
2010-05-17, 06:35
slgu兄可否帮忙看看,我看到你回答的上面一个醉酒酒精问题,我这个类似,但是我怎么知道初始值

slgu
2010-05-17, 10:23
数据文件打不开,我就很难帮你了。
另外,第一个系数以coeff(1)^2出现似乎不合常规。

lincsu
2010-05-17, 10:31
您好,数据文件下载后,解压缩,
然后会发现一个txt文件,吧txt文件改成.mat文件就能读出来,是一个matlab数据文件,可否给我您的邮箱什么?我传给您

非常感谢

lincsu
2010-05-17, 10:45
请查看这个附件,上传不了excel文件,附件是txt,吧后缀名字改成xlxs的excel文件就可以看到数据
非常感谢

slgu
2010-05-17, 11:11
[email protected]
最好用excel格式。

slgu
2010-05-17, 19:28
你提供的模型可能不恰当,请用该模型进行拟合:
fx=@(b,x)b(1)*exp(b(2)*x+b(3)*x.^2+b(4)*x.^3+b(5)*x.^4);
请运行下列小程序:
clear,clc
x=[...]';%清输入x数据
y=[...]';%请输入y数据
b=[2.5540354806*10^(-41), 2653.32513908, -30459.7660992, 153943.375849, -292083.699481]
fx=@(b,x)b(1)*exp(b(2)*x+b(3)*x.^2+b(4)*x.^3+b(5)*x.^4);
b=lsqcurvefit(fx,b,x,y)
b=nlinfit(x,y,fx,b)
n=length(x)
SSy=var(y)*(n-1)
y1=fx(b,x);
q=(y-y1)'*(y-y1)
rsquare=(SSy-q)/SSy
figure(1),clf
plot(x,y,'ko')
hold on
plot(x,y1,'linewidth',2)
legend('data','fit','location','best')
axis tight