Matlab atan2的结果不平滑

Matlab atan2的结果不平滑,matlab,gradient,smoothing,atan2,Matlab,Gradient,Smoothing,Atan2,我使用atan2(在MATLAB中)计算角度,然后取角度的梯度。我可以看到角度在像pi和pi/2这样的地方是不平滑的,但在绘图中是不可见的。然后,绘制角度的梯度显示大的负尖峰。我可以通过设置绘图的限制(ylim)来忽略这些,但这不是一个好的通用解决方案。 我是否可以通过某种方式避免平滑度问题,或者在计算后平滑角度 下面是一些更多的背景。我使用数值ODE解算器(特别是Sundals CVODE)在二维情况下计算行星轨道,因此结果是两个时间相关的向量,我们称它们为x和y。然后,atan2给出了角度,

我使用atan2(在MATLAB中)计算角度,然后取角度的梯度。我可以看到角度在像pi和pi/2这样的地方是不平滑的,但在绘图中是不可见的。然后,绘制角度的梯度显示大的负尖峰。我可以通过设置绘图的限制(
ylim
)来忽略这些,但这不是一个好的通用解决方案。 我是否可以通过某种方式避免平滑度问题,或者在计算后平滑角度

下面是一些更多的背景。我使用数值ODE解算器(特别是Sundals CVODE)在二维情况下计算行星轨道,因此结果是两个时间相关的向量,我们称它们为
x
y
。然后,
atan2
给出了角度,角度的梯度给出了角速度。我尝试了MATLAB
smoothdata
,但它并没有解决眼前的问题

除了轨道的计算外,代码只是MATLAB
atan2
gradient
,但这与这个问题无关


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

如果你知道你的角梯度大小应该总是小于π(或π和两π之间的其他阈值),那么你可以修正梯度,
梯度,如下所示:

if grad < pi
    grad = grad + 2 * pi;
elseif grad > pi
    grad = grad - 2 * pi;
end
如果梯度pi
梯度=梯度-2*pi;
结束

如果你没有这样的保证,那么你需要假设梯度变化平稳,这需要更复杂的校正。

你能给我们看一些代码和你的曲线图吗?没有具体的例子很难理解(参见)。还要注意,
atan2
返回介于
-pi
pi
之间的值。你可能在寻找吗?事实上,尖峰是否发生在角度从-pi翻转到pi的位置?您应该绘制角度图以验证这一点。如果不是这样,请发布代码并上传您的绘图,以便我们可以看到它!非常感谢所有回应的人。我将在这句话中添加一些数据、图表和代码。注意,t是时间向量,q1和q2是笛卡尔坐标。θ1是角度,θ1点是角速度;等等θ1=atan2(q2,q1);%θ2=平滑数据(θ1);θ1点=梯度(θ1,t(端点)/长度(t));%θ1点d=差值(θ1)*长度(t)/t(结束);%θ2点=平滑数据(θ1点);yyaxis(“左”);ax=gca;ax.YColor='r';图(t,θ1,'r-');ylim([-pi,pi]);ylabel('\theta','Color','r');yyaxis(“右”);ax=gca;ax.YColor='b';图(t,θ点,'b-');ylim([18.5,19]);%f01 ylabel(“\thetaDot”、“Color”、“b”)的特殊情况;网格(“开”);网格(“次要”);xlabel('t');%图例('\theta','Location','best');%图例('\theta','\dot{\theta}','Location','best');图例('\theta','\thetadot','Location','best');标题(strep(nameOrbit,.txt,'Data2');nameFig=strrep(nameOrbit,.txt',Data2');nameFig=[DataDir,'\',nameFig];savefig(fh,nameFig);saveas(fh,nameFig,'jpeg');关闭(fh);我真的很想附加所有数据和所有代码,但是数据太大了,代码需要拆分,接口丢失了新行。我正在努力学习堆栈溢出的基础知识。