基于实例讲解lsqcurvefit参数用法

本博文源于《数学建模》,旨在讲解非线性最小二乘拟合的MATLAB实现。谈到matlab中非线性最小二乘拟合,就不得不提到lsqcurvefit与lsqnonlin。博文就讲解一下lsqcurvefit如何使用

一、函数基本用法讲解

x = lsqcurvefit('fun', x0, xdata, ydata,option)
  • fun是一个预先定义的函数F(x,xdata),自变量为x和data
  • x0是非线性最小二乘法的迭代初值
  • xdata 是已知数据点
  • ydata 是已知数据点
  • option是指定具体的非线性优化方法

二、例子讲解

当提到这个函数使用时,我们可能会不知道如何在现实中操作。那么接下来就以一个例子来进行讲解

在这里插入图片描述
我们主要任务确定参数a,b,k。

2.1 确定函数fun

在matlab本地目录下右击创建curvefun1.m,比如这样
在这里插入图片描述点击文件,进行编辑,将
c ( t ) = a + b e − 0.2 k t c(t)=a+be^{-0.2kt} c(t)=a+be0.2kt
输入进去,代码应该是这样子的

function f=curvefun1(x,tdata)
f = x(1)+x(2)*exp(-0.02*x(3)*tdata)
% 其中x(1)=a,x(2)=b,x(3)=k

2.2 编写主程序

>> tdata = 100:100:1000;
>> cdata = 1e-03*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];
>> x0 = [2.3,9.09,0.05];
>> x = lsqcurvefit('curvefun1',x0,tdata,cdata)
>> f=curvefun1(x,tdata)
>> plot(tdata,cdata,'rp',tdata,f)

可以计算出

x =

    0.0070   -0.0030    0.1032


f =

  150.0045    0.0050    0.0054    0.0057    0.0059

  6100.0061    0.0063    0.0064    0.0065    0.0066



x三个值分别代表拟合的a,b,k,也就是a=0.0070 b=-0.0030 k=0.1032.函数式为:

c ( t ) = 0.007 + 0.003 ∗ e − 0.2 ∗ 0.1032 ∗ t c(t)=0.007+0.003*e^{-0.2*0.1032*t} c(t)=0.007+0.003e0.20.1032t
下面进行图形查看

2.3 观察拟合图形

在这里插入图片描述
可以看见函数图形完美经过点,说明拟合效果非常棒

三、总结

非线性二乘拟合是拟合当中一个描述函数表达式的方法。在使用lsqcurvefit有两个注意点,一个是函数图形再函数文件表示,另一个是初始化迭代参数需要合理选择。参数没选对,拟合效果可能不尽人意。但是在本例中参数调整良好,迭代快速完成,效果如图可见。真是不错的一篇文章,有这方面需求可尽管收藏!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值