MATLAB中使用出错 lsqcurvefit函数进行非线性拟合出现错误,求教

这是被拟合函数式 function [ F ] = myfun5( x,xdata )
F=x(1)*(1-xdata./x(2))-x(3)*(x(2)-xdata.*(1-log(xdata./x(2))));
>> x0=[0,0,0];
>> [x,resnorm,residual]=lsqcurvefit(@myfun5,x0,xdata,ydata)
错误使用 snls (line 47)
Objective function is returning undefined values at initial point. lsqcurvefit cannot continue.

出错 lsqncommon (line 149)
[xC,FVAL,LAMBDA,JACOB,EXITFLAG,OUTPUT,msgData]=...

出错 lsqcurvefit (line 252)
[xCurrent,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...
数据没什么错误,换其他的函数可以拟合 可能是输入函数错误 或者是拟合方法错误 求教

function [ F ] = myfun5( x,xdata )中F不是返回值,不用[],直接是function F = myfun5( x,xdata )追问

貌似不是这个问题啊 修改过之后问题依旧存在

追答

可不可以把xdata,ydata传上来,

追问

xdata与ydata 数据大概各有60个数据 太多了没法上传啊

追答

每个给几组就行了,总共就三个未知量,

追问

xdata=[29.49 30.20 31.47 32.18 33.33 34.54 35.22 36.69 37.38 38.02 ]
ydata=[0.993 0.997 0.962 0.947 0.896 0.753 0.646 0.466 0.395 0.330 ]

追答

被拟合函数function F= myfun5(x,xdata)
F=x(1)*(1-xdata./x(2))-x(3)*(x(2)-xdata.*(1-log(xdata./x(2))));

x0=[1,1,1];
[x,resnorm,residual]=lsqcurvefit(@myfun5,x0,xdata,ydata);
和你给的初值有关系,因为都取0的话F函数log(x)中第一次迭代是要出现inf的

温馨提示:内容为网友见解,仅供参考
无其他回答

MATLAB中使用出错 lsqcurvefit函数进行非线性拟合出现错误,求教
function [ F ] = myfun5( x,xdata )中F不是返回值,不用[],直接是function F = myfun5( x,xdata )

matlab中一段lsqcurvefit的拟合程序,为什么老是报错!~
你的错误有二,一,lsqcurvefit函数用于非线性拟合,即求解器不适用于一元二次函数,二,定义内联函数有错,因为x是数组,故需用点 fun=inline('a(1)+a(2)*x+a(3).*x^2','a','x');剩下的都对!要是用多项式拟合,还是用polyfit函数比较好 x=[11 12 13 14 15 16 17 18 19 20];y...

matlab中使用lsqcurvefit函数拟合老是报错,求高手帮忙
首先建立以个函数文件,代码如下面两行,保存到工作空间,文件名一定要是fun(因为下面的函数文件我命名为fun了)function H=fun(abc,t)H=abc(1)*t+abc(2)+abc(3)*sin(abc(4)*t+abc(5));接着是主程序,包括下面全部,改一下数据,下面是数据,我这里是随便写的 t=linspace(0, 3 , 1...

matlab lsqcurvefit拟合结果不正确
注意:函数x+y=0与函数0.1x+0.1y=0完全等价 如果你固定其中一个系数,那么另外一个系数就能完全确定了,比如 function F=test(a,x)F=a*x(:,1)+x(:,2);lsqcurvefit(@test,0.1,z,zeros(50,1))得到的结果就是1了

关于MATLAB中使用lsqcurvefit函数出错
根据错误提示,内存没有a这个变量。应该是a=lsqcurvefit(f,a0,x,y)没有执行成功。也不知道你的y1是什么。你得把问题说清楚。

关于MATLAB中使用lsqcurvefit函数出错
你的a没有定义,初值赋值错了,a只有两个参数,你给了三个初值 x=[0.3 0.5 0.7 0.9 1.1 1.3 1.5];y=[0.3985 0.6598 0.9147 1.1611 1.3971 1.6212 1.8325];a0=[0 0];fun=inline('a(1).*x+a(2).*sin(x)','a','x');a=lsqcurvefit(fun,a0,x,y)...

matlab里lsqcurvefit函数提示lsqcurvefit已停止,因为超出函数求值限制如 ...
出现这个信息的提示,说明在处理数据过程中出现了NaN值,所以lsqcurvefit函数会停止运行。处理措施:1、改变或调整x0的初值;2、改变或调整lp(下限值)和up(上限值)的大小;3、对原数据与拟合数据进行相关系数的计算,R²是否正常(一般接近于1)。

matlab 使用lsqcurvefit函数出错 望好心人指教,不胜感激
function f = nihehanshu(a,t) f = (a(1)\/a(2))^a(1)*t.^(a(1)-1).*exp(-t*a(1)\/a(2))\/gamma(a(1)); %矩阵对应元素计算,要加点 --- t = [1.26,1.58,2,2.51,3.16,3.98,5.01,6.31,7.94,10,12.59,15.85,19.95,25.12,31.62]; y = [0.0012,0...

matlab lsqcurvefit 出错:Function value and YDATA sizes are not equ...
拟合函数写错了,形式参数 x 和 a 的顺序搞反了,应该是:f = @(a,x) a(1)+a(2).\/(x+a(3));另外,拟合问题往往和初值的选择有很大关系,例如你现在选择的 a0=[1 1 1] 就可能会陷入局部最优,因而得不到正确结果。

lsqcurvefit函数进行非线性拟合出现错误,提示:错误使用 snls
手机版 我的知道 lsqcurvefit函数进行非线性拟合出现错误,提示:错误使用 snls clearcloseallclc%experimentdataloadexperiment.txt%'etest'representtheengineeringstrain,while'ptest‘representengineeringstressetest=experiment(:,2);ptest=experiment(:,1);... clearclose allclc%experiment dataload experiment.txt% ...

相似回答