atan2的结果不流畅

时间:2019-01-29 17:22:17

标签: matlab gradient smoothing atan2

我正在使用atan2(在MATLAB中)来计算角度,然后获取角度的梯度。我可以看到在pi和pi / 2之类的位置该角度不平滑,但是在图中看不到。然后,绘制角度的梯度会显示出较大的负尖峰。我可以通过设置图的界限(ylim)来忽略这些,但这不是一个好的通用解决方案。 我可以以某种方式避免平滑度问题,还是可以在计算角度后使其平滑?

这里还有更多背景知识。我正在使用数值ODE求解器(特别是SUNDIALS CVODE)来计算二维情况下的行星轨道,因此结果是两个与时间相关的向量,我们将它们称为xy。然后atan2给我角度,角度的梯度给我角速度。我尝试使用MATLAB smoothdata,但是并不能解决当前的问题。

除了轨道计算之外,代码只是MATLAB atan2gradient,但这与该问题无关。

我需要消除角速度中的负尖峰。

1 个答案:

答案 0 :(得分:0)

如果您知道角度梯度幅度应始终小于pi(或pi和2 pi之间的某个其他阈值),则可以按如下方式固定梯度grad

if grad < pi
    grad = grad + 2 * pi;
elseif grad > pi
    grad = grad - 2 * pi;
end

如果没有这样的保证,则需要假设坡度平滑变化,这需要更复杂的校正。