> 馆藏中心

Matlab曲线拟合lsqcurvefit函数问题?Matlab

来源:新浪爱问 编辑:王强

我只是将读取数据改成随机生成20个,结果function quxiannihez=rand(20,1);aa=size(z,1);bb=0.001*aa;cc=0.001:0.001:bb;x=cc';y=z;g=(a,x)(a(1).*sin(a(2).*x+a(3))+a(4));a0=[0.012,250,-2,511];a=lsqcurvefit(g,a0,x,y);picture=plot(x,y,'k.',x,g(a,x),'r');set(picture,'LineWidth',1.5);legend('原始数据','拟合数据');print(1,'-djpeg','C:\\Users\\Administrator\\Desktop\\拟合图像1.jpeg');disp(a)结果只是有警告,拟合效果不是很好,循环400次后,只是说效果不好(早熟),但是有值。说明程序没有问题。Solver stopped prematurely.lsqcurvefit stopped because it exceeded the function evaluation limit,options.MaxFunEvals=400(the default value).0.6868-12.1817 28.8048 0.2286所以只可能是读取出错。看你的代码应该是下面第一种,我建议用第二种方法试一下(因为我不确定'M:M'是不是会智能到没有数字的时候结束,我一般都是指定从哪个单元格到哪个单元格),指明是第几个sheet。如果还不行,打开excel看看数据对不对。num=xlsread(filename,xlRange)num=xlsread(filename,sheet,xlRange)www.179s.com防采集请勿采集本网。

  把curvefun修改了下,拟合很好。xdata = 0:1:24;ydata = [1,1。01573,1。031006579,1。045842764,1。059417803,1。071707049,。。。1。083978095,1。

function f=fun(c,x) f=((c(1)+c(2).*x+x.^2)-((c(1)+c(2).*x.^2).^2-4*x.^2).^0.5)./(2*x.^2) b=[3.5026 4.2031 4.9035 5.604 6.3045 7.005 2.2378 2.6852[c,resnorm]=lsqcurvefit(@fun,c0,x,y)

  09612949,1。107693656,1。119235824,1。130495336,。。。1。140828063,1。150160037,1。15887825,1。166932454,1。174459168,。。。1。181517668,1。

function y=subfun(a,x) y=a(1)*exp(-0.7*x)*cos(a(2)*x+a(3));这一段代码要使用点乘。function y=subfun(a,x) y=a(1).*exp(-0.7*x).*cos(a(2).*x+a(3));运行结果如下: 希望采纳,设置为满意

  188453177,1。195453166,1。201765158,1。207978284,。。。1。214114814,1。220027553,1。225871485,1。23174341];plot(xdata, ydata, '*');hold on;f = '1。

从你提供的拟合函数来看,其拟合函数是非线性函数。所以用lsqcurvefit()函数是不合理的,应用 nlinfit(()函数来解决。

  308/(1+(1。308-1)*exp(-1*1。308*0。051*x))';ezplot(f,[0 60 1 1。32]);% 我自己拟合的曲线,拟合性很好x0 = [1。308,0。051];curvefun = @(x,xdata)x(1)。

norm(fit,f)^2 fit 拟合函数值, f 原来的函数值!norm 求他们的差值,小的话就拟合效果好

  

首先把那个function改成下面 function y=myfun(x,xdata) y=x(1)*(exp(-x(4))*(x(4)./xdata))+x(2)*(xdata.^(-x(5)))+x(3);其次command Windows里的xdata和ydata长度不匹配,xdata有14个,ydata

  

首先把那个function改成下面 function y=myfun(x,xdata) y=x(1)*(exp(-x(4))*(x(4)./xdata))+x(2)*(xdata.^(-x(5)))+x(3);其次command Windows里的xdata和ydata长度不匹配,xdata有14个,ydata

/(1+(x(1)-1)*exp(-1*x(1)*x(2)*xdata));% 函数单独一个文件也一样,这样方便些。x = lsqcurvefit(curvefun, x0, xdata, ydata); % 提示出错y = curvefun(x, xdata);plot(xdata, ydata, '*',xdata,y)。

把curvefun修改了下,拟合很好。xdata=0:1:24;ydata=[1,1.01573,1.031006579,1.045842764,1.059417803,1.071707049,.1.083978095,1.09612949,1.107693656,1.119235824,1.130495336,.1.140828063,1.150160037,1.15887825,1.166932454,1.174459168,.1.181517668,1.188453177,1.195453166,1.201765158,1.207978284,.1.214114814,1.220027553,1.225871485,1.23174341];plot(xdata,ydata,'*');hold on;f='1.308/(1+(1.308-1)*exp(-1*1.308*0.051*x))';ezplot(f,[0 60 1 1.32]);我自己拟合的曲线,拟合性很好x0=[1.308,0.051];curvefun=(x,xdata)x(1)./(1+(x(1)-1)*exp(-1*x(1)*x(2)*xdata));函数单独一个文件也一样,这样方便些。x=lsqcurvefit(curvefun,x0,xdata,ydata);提示出错y=curvefun(x,xdata);plot(xdata,ydata,'*',xdata,y)内容来自www.179s.com请勿采集。

本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。本文《Matlab曲线拟合lsqcurvefit函数问题?Matlab》转载自新浪爱问,版权归原作者所有,若侵权请联系:E-MAIL:513175919@qq.com
违法违规信息请立即联系本网可获得现金奖励,TEL:1-8-2-1-0-2-3-3-3-8-1(电话仅供违法违规信息举报,侵权类信息请EMAIL。)

www.179s.com false 互联网 http://www.179s.com/n/oa6cg/oa6Cgfy97.html report 4280   把curvefun修改了下,拟合很好。xdata = 0:1:24;ydata = [1,1。01573,1。031006579,1。045842764,1。059417803,1。071707049,。。。1。083978095,1。  09612949,1。107693656,1。119235824,1。130495336,。。。1。140828063,1。150160037,1。15887825,1。166932454,1。17445916

你可能还关注

热门图片

经济金融企业管理法律法规社会民生科学教育降生活体育运动文化艺术电子数码电脑网络娱乐休闲行政地区心理分析医疗卫生