Matlab绘制余弦波

问题描述 投票:0回答:1

在我的项目中,我使用通用余弦函数来拟合数据:

cos_fun = @(p, theta) p(1) + p(2) * cos(theta - p(3))

p = nlinfit(x,y,cos_fun,[1 1 0])

结果,p具有三个值,分别是y偏移,幅度和相位。

我可以使用这三个参数绘制平滑的余弦曲线吗?

matlab trigonometry
1个回答
0
投票

(编辑中的待定)

您可以构造凸误差函数以使用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(),以获得最小化所选误差函数的参数。由于p0SSEh相对于SAEh都是凸的,因此无需多次执行并保存最佳的,因为对于每个p,您都会得到相同的答案。

p0
© www.soinside.com 2019 - 2024. All rights reserved.