matlab 平方和_MATLAB通过优化拟合曲线

该博客演示了如何使用MATLAB进行非线性函数拟合,以指数衰减曲线为例,通过优化误差平方和来确定最佳参数。首先,创建基于模型的人工数据,然后编写目标函数`sseval`计算误差平方和。接着,利用`fminsearch`求解器找到最优拟合参数。最后,通过绘制数据和拟合曲线检查拟合质量。
摘要由CSDN通过智能技术生成

03943f7b85a88fa5a120754aa4c0cd1a.gif

点击箭头处“蓝色字”,关注我们哦!!

此示例说明如何使用非线性函数对数据进行拟合。在本示例中,非线性函数是标准指数衰减曲线

6a8f41db96291672703f28fdfbf0184b.png

其中,y(t) 是时间 t 时的响应,A 和 λ 是要拟合的参数。对曲线进行拟合是指找出能够使误差平方和最小化的参数 A 和 λ

a975571a4695e3e110c8a77255916f9a.png

其中,时间为 ti,响应为 yi,i=1,…,n。误差平方和为目标函数。

1

创建样本数据

通常,您要通过测量获得数据。在此示例中,请基于 A=40 和 λ=0.5 且带正态分布伪随机误差的模型创建人工数据。

rng default % for reproducibility
tdata=0:0.1:10;
ydata=40*exp(-0.5*tdata)+randn(size(tdata));

2

编写目标函数

编写一个函数,该函数可接受参数 A 和 lambda 以及数据 tdata 和 ydata,并返回模型 y(t) 的误差平方和。将要优化的所有变量(A 和 lambda)置入单个向量变量 (x)。

type sseval
function sse = sseval(x,tdata,ydata)
A = x(1);
lambda = x(2);
sse = sum((ydata - A*exp(-lambda*tdata)).^2);

将此目标函数保存为 MATLAB® 路径上名为 sseval.m 的文件。

fminsearch 求解器适用于一个变量 x 的函数。但 sseval 函数包含三个变量。额外变量 tdata 和 ydata 不是要优化的变量,而是用于优化的数据。将 fminsearch 的目标函数定义为仅含有一个变量 x 的函数:

fun = @(x)sseval(x,tdata,ydata);

3

求最优拟合参数

从随机正参数集 x0 开始,使用 fminsearch 求使得目标函数值最小的参数。

x0 = rand(2,1);
bestx = fminsearch(fun,x0)
bestx = 2×1
  40.6877
   0.4984

结果 bestx 与生成数据的参数 A = 40 和 lambda = 0.5 相当接近。

检查拟合质量

要检查拟合质量,请绘制数据和生成的拟合响应曲线。根据返回的模型参数创建响应曲线。

A = bestx(1);
lambda = bestx(2);
yfit = A*exp(-lambda*tdata);
plot(tdata,ydata,'*');
hold onplot(tdata,yfit,'r');
xlabel('tdata')
ylabel('Response Data and Curve')
title('Data and Best Fitting Exponential Curve')
legend('Data','Fitted Curve')
hold off

a97ce028c3d4ca328754bb4d1434f352.png

END

e13ebb5d46f0389f70cda9d78fef1c3c.png55206117b900311567746655027236a7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值