我正在使用atan2
(在MATLAB中)来计算角度,然后获取角度的梯度。我可以看到在pi和pi / 2之类的位置该角度不平滑,但是在图中看不到。然后,绘制角度的梯度会显示出较大的负尖峰。我可以通过设置图的界限(ylim
)来忽略这些,但这不是一个好的通用解决方案。
我可以以某种方式避免平滑度问题,还是可以在计算角度后使其平滑?
这里还有更多背景知识。我正在使用数值ODE求解器(特别是SUNDIALS CVODE)来计算二维情况下的行星轨道,因此结果是两个与时间相关的向量,我们将它们称为x
和y
。然后atan2
给我角度,角度的梯度给我角速度。我尝试使用MATLAB smoothdata
,但是并不能解决当前的问题。
除了轨道计算之外,代码只是MATLAB atan2
和gradient
,但这与该问题无关。
我需要消除角速度中的负尖峰。
答案 0 :(得分:0)
如果您知道角度梯度幅度应始终小于pi(或pi和2 pi之间的某个其他阈值),则可以按如下方式固定梯度grad
:
if grad < pi
grad = grad + 2 * pi;
elseif grad > pi
grad = grad - 2 * pi;
end
如果没有这样的保证,则需要假设坡度平滑变化,这需要更复杂的校正。