2013-06-18 74 views
-1

我想知道如何从Matlab中的sqrt获得正面和负面的解决方案。Matlab中的double sqrt解决方案?

例如,如果我有:

sin(a) = sqrt(1-cos(a)^2); 
+0

那么,什么是这一切脏活你期望在这个例子中得到的结果是什么? –

回答

0

当调用sqrt(x)或同等函数时,MATLAB(以及我所知道的所有其他编程语言)仅返回principal square rootx

你会怎么写x数学的平方根,是

s = ±√x 

这仅仅是写整个解决方案的简写设置

s = {+√x -√x} 

在MATLAB中,你会把它写成与最后一种情况相同,但是语法略有不同,但是语法略有不同,但是

s = [+sqrt(x) -sqrt(x)] 

从而可以更加有效地计算,如果你 “分解出的” sqrt

s = sqrt(x) * [1 -1] 

因此,对于你的情况,

s = sqrt(1-cos(a)^2) * [1 -1] 

,或者,如果你愿意的话,

s = sin(acos(a)) * [1 -1] 

这是一个稍微慢点,但也许更可读(实际上也更精确一点)。

现在当然,如果你能以某种方式找到其商数结果在您的余弦值的成分,那么你就不会要处理当然....

1

docs不说具体的关于总是只提供正平方根,但它似乎是一个合理的假设在这种情况下,你可以得到负方什么很容易地像这样:

p = sqrt(1-cos(a)^2); 
n = -sqrt(1-cos(a)^2); 

BTW分配给sin(a)就像是要创建一个名为sin变量,它会隐藏sin功能导致许多possib le错误,所以我强烈建议选择一个不同的变量名称。

+0

对不起,也许我是以错误的方式提出的。 我正在研究一个机器人的逆向运动学,并且已经有了cos_a(不是a!)的值 我必须找到 sin_a的值。 为了表明它们不是函数而是变量,我重写了它们,感谢Dan的注释。 – Spyros

0

sqrt不解决方程式,只给出数值输出。您需要根据需要制定公式,然后您可以使用sqrt(...)-1*sqrt(...)来给出正面和负面的输出结果。