基于反三角函数的成本函数

Cost function based on inverse trigonometric functions

我有两个点,分别命名为 sourcetarget。我知道源的坐标(例如 [-1 1]),问题是确定目标的位置(例如 [1 -1])。

我有一些测量值,其中之一是从目标指向源的箭头角度(即 135 deg)。

为了找到目标的位置,我定义了一个误差函数来最小化;我正在使用梯度下降算法,所以我有一个符号误差函数,例如;

syms xs ys xt yt
z(xs,ys,xt,yt) = theta - asin((ys - yt)/((xs - xt)^2 + (ys - yt)^2)^.5);

其中theta为测量角度,135 deg(对于理想解z,误差为零,135 - 135 = 0

还有其他测量值,我计算了这些误差函数的雅可比行列式并将误差最小化。

无论如何,问题在于此示例中的 theta135 deg,但据我们所知,asin 的输出是 [-90 90],对于此示例,它是asin(1/2^.5) = 45 deg。所以对于正确的答案,我的错误函数 z 不会为零,我需要更改我的错误函数,我应该使用什么?

我只需要一个误差函数,让我的 theta[0 360] 范围内变化,而 asinatan 的范围是 [-90 90],我可以由于符号函数,不要使用 if 语句。

Matlab 定义 sym/atan2(Y,X)

如果没有,您可以使用

创建它
function [ theta ] = atan2( dy,dx )
%ATAN2 Four Quadrant Arc Tangent Function
%
    if dx>0
        theta = atan(dy/dx);
    elseif dx<0
        theta = atan(dy/dx)+sign(dy)*pi;
    else
        theta = sign(dy)*pi/2;
    end

end

终于可以像

一样使用它了
z = theta - atan2(ys - yt, xs - xt);

正如@LuisMendo 指出的那样。

更新 Wikipedia 提到

atan2(y,x) = 2*atan(y/(sqrt(x^2+y^2)+x));

phi表示箭头从源到目标的角度。您需要一个非负且单峰的误差函数,仅 theta==phi 的值为零。

函数满足此条件

z = (cos(theta) - cos(phi))^2 + (sin(theta) - sin(phi))^2;

或等效地,使用 xsysxtyt 而不是 phi

z = (cos(theta) - (xs-xt)/((xs - xt)^2 + (ys - yt)^2)^.5)^2 + ...
    (sin(theta) - (ys-yt)/((xs - xt)^2 + (ys - yt)^2)^.5)^2;

这个误差函数有以下解释:如果角度thetaphi表示为单位圆中的点,z就是的平方长度连接这两点的和弦

当然,可以通过简单地将 sqrt 应用于上面的表达式来根据长度(而不是平方长度)来定义误差;并且可以通过除以 201 之间归一化。