在我的项目中,我使用通用余弦函数来拟合数据:
cos_fun = @(p, theta) p(1) + p(2) * cos(theta - p(3))
p = nlinfit(x,y,cos_fun,[1 1 0])
结果,p
具有三个值,分别是y偏移,幅度和相位。
我可以使用这三个参数绘制平滑的余弦曲线吗?
(编辑中的待定)
您可以构造凸误差函数以使用fminsearch()
作为卑鄙的手段来最小化并返回全局最优值。例如,平方误差总和或绝对误差总和将为fminsearch()
。
convex
当然,对于相同的参数,它们会给您带来不同的错误。
% Generate Example Data
sigma = 0.5;
Xdata = [repmat(1:10,1,4)].';
Ydata = cos(Xdata)+sigma*randn(length(Xdata),1);
% Function Evaluation
cos_fun=@(p,x) p(1) + p(2).*cos(x-p(3));
% Error Functions
SSEh =@(p) sum((cos_fun(p,Xdata)-Ydata).^2); % sum of squared error
SAEh =@(p) sum(abs(cos_fun(p,Xdata)-Ydata)); % sum of absolute error
但是您在给定参数% Test
SSEh([1 1 0])
SAEh([1 1 0])
的初始猜测后调用fminsearch()
,以获得最小化所选误差函数的参数。由于p0
和SSEh
相对于SAEh
都是凸的,因此无需多次执行并保存最佳的,因为对于每个p
,您都会得到相同的答案。
p0