关于lsqcurvefit拟合的问题-matlab

我使用lsqcurvefit函数,对一系列的数据进行方程拟合最优值,但是提示Localminimumpossible.lsqcurvefitstoppedbecauset... 我使用lsqcurvefit函数,对一系列的数据进行方程拟合最优值,但是提示
Local minimum possible.

lsqcurvefit stopped because the final change in the sum of squares relative to
its initial value is less than the default value of the function tolerance.

<stopping criteria details>

可以运行出结果,但是感觉不太对。
请问怎样解决?
附近中有我的数据和代码,谢谢、
所用公式为
result=-G + aG+r0*exp(e0(1/(15+46.02)-1/(T+46.02)))
想要拟合得到a、r0、e0。G、T、result已知,在数据中分别是第一、二、三列。
谢谢

我的代码:
clc
clear
getfilename=ls('.\*.xls'); %读取文件列表
filename=cellstr(getfilename); %转换为cell格式
num_of_files=length(filename);
paras0=[3;3;200];
result=[];
paras1=[];
for i=1:num_of_files
database(i)=struct('Name',filename(i),'Data',xlsread(filename{i}));
b=database(i).Name;
b_name=cellstr(b);
dat=database(i).Data;
[x,y]=size(dat);
xdata=[];
ydata=[];
%设置输入参数xdata和输出参数ydata
xdata(:,1) = dat(:,1); %xdata第一列为GPP
xdata(:,2) = dat(:,2); %xdata第二列为空气温度Ta
ydata(:,1) = dat(:,3); %ydata为输出的参量NEE
%进行拟合计算
paras=lsqcurvefit(@myfun,paras0,xdata,ydata);
paras1=paras';
%设置输出值
result_name(i,1)=b_name;
result=[result;paras1]; %#ok<AGROW>

end
xlswrite('结果.xls',result);
xlswrite('结果顺序.xls',result_name);
function f=myfun(paras,xdata)
f = -xdata(:,1)+paras(1).*xdata(:,1)+paras(2).*exp(paras(3)*(1/61.02-1./(xdata(:,2)+46.02)));
我的数据:
2.13984
29.80419
-2.13984

1.895173
29.22398
-1.89517

2.085606
28.32292
-2.0856

2.159606
27.75833
-2.1596

2.707552
26.92917
-2.70755

3.215198
26.74896
-3.2152
展开
 我来答
lhmhz
高粉答主

2014-08-29 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7263 获赞数:17001

向TA提问 私信TA
展开全部
从你提供的拟合函数来看,其拟合函数是非线性函数。所以用lsqcurvefit()函数是不合理的,应用 nlinfit(()函数来解决。
追问
lsqcurvefit不就是非线性曲线拟合吗?nlinfit这个是什么拟合呢?谢谢
追答
lsqcurvefit()解决非线性最小二乘问题。
nlinfit()解决非线性最小二乘回归问题。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式