Matlab优化拟合曲线
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab优化拟合曲线相关的知识,希望对你有一定的参考价值。
分享一下使用非线性函数对数据进行拟合。非线性函数假定是标准指数衰减曲线,
y(t)=Aexp(−λt)
其中,y(t) 是时间 t 时的响应,A 和 λ 是要拟合的参数。对曲线进行拟合是指找出能够使误差平方和最小化的参数 A 和 λ,误差平方和为目标函数
创建样本数据
本文基于 A=40 和 λ=0.5 且带正态分布伪随机误差的模型创建人工数据。
编写目标函数
编写一个函数,该函数可接受参数 A 和 lambda 以及数据 tdata 和 ydata,并返回模型 y(t) 的误差平方和。将要优化的所有变量(A 和 lambda)置入单个向量变量 (x)。将目标函数保存为 func.m 的文件。
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 的函数:
fun = @(x)func(x,tdata,ydata);
求最优拟合参数
从随机正参数集 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 on
plot(tdata,yfit,r);
xlabel(tdata)
ylabel(Response Data)
title(原始数据和拟合数据)
legend(原始数据,拟合数据)
hold off
以上是关于Matlab优化拟合曲线的主要内容,如果未能解决你的问题,请参考以下文章