这个例子展示了如何将非线性函数拟合到数据上。对于这个例子,非线性函数是标准的指数衰减曲线
在哪里 响应是否及时 , 和 是要匹配的参数。拟合曲线意味着寻找参数 和 使误差平方和最小化
时代在哪里 答案是 .误差平方和是目标函数。
通常,你会从测量中获得数据。对于本例,创建基于模型的人工数据 和 ,具有正态分布伪随机误差。
rng默认的%的再现性tdata = 0:0.1:10;Ydata = 40*exp(-0.5*tdata) + randn(size(tdata))); / /输出
编写一个接受参数的函数一个
和λ
和数据tdata
和ydata
,并返回模型的误差平方和
.将所有变量进行优化(一个
和λ
)在单个向量变量(x
).有关更多信息,请参见多变量最小函数.
类型sseval
函数sse = sseval(x,tdata,ydata);λ= x (2);sse = sum((ydata - A*exp(-lambda*tdata)).^2);
将这个目标函数保存为一个名为sseval.m
在您的MATLAB®路径。
的fminsearch
求解器适用于单变量函数,x
.然而,sseval
函数有三个变量。额外的变量tdata
和ydata
不是要优化的变量,而是要优化的数据。定义的目标函数fminsearch
作为…的函数x
独自一人:
有趣= @ (x) sseval (x, tdata ydata);
获取关于包含额外参数的信息,例如tdata
和ydata
,请参阅参数化功能.
从一组随机的正参数开始x0
,并fminsearch
找出最小化目标函数的参数。
x0 =兰德(2,1);x0, bestx = fminsearch(有趣)
bestx =2×140.6877 - 0.4984
结果bestx
与生成数据的参数相当接近,= 40
和λ= 0.5
.
为了检查拟合的质量,绘制数据和得到的拟合响应曲线。根据模型的返回参数创建响应曲线。
一个= bestx (1);λ= bestx (2);yfit = * exp(λ* tdata);情节(tdata ydata,‘*’);持有在情节(tdata yfit,“r”);包含(“tdata”) ylabel (“响应数据和曲线”)标题(数据与最佳拟合指数曲线)传说(“数据”,的拟合曲线)举行从