前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab优化拟合曲线

Matlab优化拟合曲线

作者头像
用户9925864
发布2022-07-27 08:35:32
6950
发布2022-07-27 08:35:32
举报
文章被收录于专栏:算法工程师的学习日志

分享一下使用非线性函数对数据进行拟合。非线性函数假定是标准指数衰减曲线,

y(t)=Aexp(−λt)

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

创建样本数据

本文基于 A=40 和 λ=0.5 且带正态分布伪随机误差的模型创建人工数据。

编写目标函数

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

代码语言:javascript
复制
function sse = func(x,tdata,ydata)
A = x(1);
lambda = x(2);
sse = sum((ydata - A*exp(-lambda*tdata)).^2);

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

代码语言:javascript
复制
fun = @(x)func(x,tdata,ydata);

求最优拟合参数

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

代码语言:javascript
复制
x0 = rand(2,1);
bestx = fminsearch(fun,x0)
bestx = 2×1

   40.6877
    0.4984
代码语言:javascript
复制
结果 bestx 与生成数据的参数 A = 40 和 lambda = 0.5 相当接近。

检查拟合质量

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

代码语言:javascript
复制
A = bestx(1);
lambda = bestx(2);
yfit = A*exp(-lambda*tdata);
plot(tdata,ydata,'*');
hold on
plot(tdata,yfit,'r');
xlabel('tdata')
ylabel('Response Data')
title('原始数据和拟合数据')
legend('原始数据','拟合数据')
hold off
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建样本数据
  • 编写目标函数
  • 求最优拟合参数
  • 检查拟合质量
相关产品与服务
数据库一体机 TData
数据库一体机 TData 是融合了高性能计算、热插拔闪存、Infiniband 网络、RDMA 远程直接存取数据的数据库解决方案,为用户提供高可用、易扩展、高性能的数据库服务,适用于 OLAP、 OLTP 以及混合负载等各种应用场景下的极限性能需求,支持 Oracle、SQL Server、MySQL 和 PostgreSQL 等各种主流数据库。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档