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

时间:2015-03-02 14:37:35

标签: matlab math

我有两个点,分别为sourcetarget。我知道源的坐标(例如[-1 1]),问题在于确定目标的位置(例如[1 -1])。 enter image description here

我有一些测量值,其中一个是从目标到源的箭头角度(即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 1}}。所以对于正确的答案,我的错误函数z不会为零,我需要更改我的错误函数,我应该使用什么?

我只需要一个错误函数,theta变化超过[0 360],而asinatan的范围为[-90 90],我不能因符号函数而使用if语句。

2 个答案:

答案 0 :(得分:2)

Matlab定义sym/atan2(Y,X)

scr

如果没有,您可以使用

创建它
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));

答案 1 :(得分:1)

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是和弦的平方长度< / em>加入这两点。

当然,只需将sqrt应用于上面的表达式,就可以用长度(而不是平方长度)来定义错误;并且可以在01之间进行归一化,然后除以2