matlab函数拟合

f=@(c,t)c(1)+c(2).*log10(t);%参数中,c(1)代表a,c(2)代表bbeta0=[0.5;0.2];beta=lsqcurvefit(f,be... f=@(c,t) c(1)+c(2).*log10(t); % 参数中,c(1)代表a,c(2)代表b
beta0=[0.5;0.2];
beta=lsqcurvefit(f,beta0,t,y);
coefit=nlinfit(t,y,f,beta);
yfit=f(coefit,t);

数据:t=0.0
0.3333333333333144
0.6666666666666856
1.0
1.3333333333333144
1.6666666666666856
2.0
2.3333333333333144
2.6666666666666856
3.0

y=0.7000000000000455
5.5
5.5
5.400000000000034
5.300000000000011
5.2000000000000455
5.100000000000023
4.900000000000034
4.7000000000000455
4.600000000000023
错误使用 snls (line 47)
Objective function is returning undefined values at initial point. lsqcurvefit cannot continue
展开
 我来答
lhmhz
高粉答主

2017-10-14 · 专注matlab等在各领域中的应用。
lhmhz
采纳数:7264 获赞数:17010

向TA提问 私信TA
展开全部

问题出在,t=0时,Log10(t)是无穷大,所以运行程序出现警告。处理方法,人为地加一个最小量,即

t=[eps 0.3333333333333144  0.6666666666666856 1.0 ......]

程序修改后代码

t=[eps 0.3333333333333144  0.6666666666666856 1.0 ......]';

y=[0.7000000000000455 5.5 5.5 5.400000000000034 5.300000000000011 ......]';

[coefit,yfit]=f_mbpclft(t,y)   %f_mbpclft()自定义函数就是你给的内容

运行结果

飞跃梦想华
2017-10-14 · TA获得超过333个赞
知道小有建树答主
回答量:388
采纳率:89%
帮助的人:107万
展开全部
你看不出log10(0)=-inf吗?这是你原始数据的问题;t=0这个点不能要,或者分开处理。
还有这明明是一个线性拟合问题,用最小二乘拟合妥妥的(把log10(t)看成一个自变量),为什么非要用非线性拟合?为了说明你高超的技术吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式