2011-06-08 57 views
0

有一个公式,我需要用我的应用程序:here隔离实数复数在java中

部分SQRT(5-25),可正可负,当然,当负我们得到了java不能处理的虚部。

我四处搜寻找到一个复杂的类来处理,但只发现基本操作(+ - * /)。

我怎样才能在Java解决这个知道我只需要得到真正的一部分吗?(虚有没有意义)

我精确我开发的Android平台

(一张贴在堆栈,因为它是关于在java中的应用,但如果它属于math.se,告诉我)

+0

我认为它会抛出一些异常,当它遇到一个负面...也可以使用try catch来处理它,只需将它转换为+ ve也不常用方式找到它的平方根... – ngesh 2011-06-08 10:00:02

+0

真实部分是真实的想象,如果不是,那么你将能够采取两个并通过邮局发送给我。 – 2011-06-08 10:08:09

回答

2

您可以简单地计算以前的东西:

plot 25-20 +((2Pi0。3²)/(Pi10²)的Sqrt [2 * 980(1+(Pi10²)/(Pi10²))] T)2 0-38

情节25-20 +((2 *0.3² )/(10 2)的Sqrt [2 * 980(1 + 1)] T)2 0-38

25 - 20 + 4 * 0.0000081 * 3920 * T^2为0〜38(我有一些因素是错误的,但你明白了)

只是应用基本的数学常量,并应用第二个双目公式后删除中间(虚部)。

与复数无关。

+0

谢谢,我没有简单的实现我可以在pow2的范围之外得到平方根。 – eephyne 2011-06-08 10:22:48

+0

如果它必须尽快做尽可能少的计算(例如,不要为2)写入1+(10²pi/10²pi),则公式越容易成为优化器。 – rurouni 2011-06-08 10:23:40

+0

为什么这是工作在负数的平方根但不积极(即使我不需要这样做的积极)? – eephyne 2011-06-08 10:35:48

2

取一般复数的平方根可以用实数的基本算术运算(加上实数的平方根): (一种技术是利用De Moivre定理:可以写出任何复数a + bi 10例为其中

r = sqrt(a^2 + b^2), cos θ = a/r, sin θ = b/r 

更新:公式是渊源由于欧拉,而棣莫弗定理是

(a + ib)ⁿ = rⁿ(cos nθ + i sin nθ) 
0

你感到困惑的数学。 -25的平方根是25 *( - 1)的平方根,即25 *的平方根的平方根,即5i。该数字的实数部分为0.

如果您想要5,只需检查数字的符号是否“扎根”,如果是负数,则更改它。

+0

这是一个负实数而不是一般复数的平方根。 – 2011-06-08 10:02:23

+0

你是对的,但公式说sqrt(5-25),这是我* sqrt(20)。 – duffymo 2011-06-08 10:03:40

0

整数的平方根将成为整数或实数为零的复数。负整数的平方根的实部为零。总是。

所以......

public double realPartOfSquareRoot(int i) { 
    return (i > 0) Math.sqrt(i) : 0; 
} 

但我怎么解决这个问题?如果我将squareroot替换为0,我得不到一个好结果。我是否假设虚构部分对公式的其余部分做了一些真正的事情。

我希望是这样! (丢弃虚部的想法对我来说没有多大意义......但我认为你有充分的理由这样做。)

真正的答案是找到一个Java库,它将执行复杂的算术。我从来没有需要使用它,但第一个要检查的应该是Apache Commons Maths库。

+0

但我怎么解决这个问题,如果我用0代替squareroot,我没有得到好的结果,所以我想虚部做了一些与真正的公式 – eephyne 2011-06-08 10:09:57

0

说“Java无法处理它”是不正确的。从平方根返回双精度的语言不能处理它,但如果你有一个Complex类,这不是问题。 Python有一个内置的;使用Java编写一个很容易。