summaryrefslogtreecommitdiff
path: root/src/main/java/org/apache/commons/math3/complex/ComplexUtils.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/apache/commons/math3/complex/ComplexUtils.java')
-rw-r--r--src/main/java/org/apache/commons/math3/complex/ComplexUtils.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/src/main/java/org/apache/commons/math3/complex/ComplexUtils.java b/src/main/java/org/apache/commons/math3/complex/ComplexUtils.java
new file mode 100644
index 0000000..6fca857
--- /dev/null
+++ b/src/main/java/org/apache/commons/math3/complex/ComplexUtils.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.math3.complex;
+
+import org.apache.commons.math3.exception.MathIllegalArgumentException;
+import org.apache.commons.math3.exception.util.LocalizedFormats;
+import org.apache.commons.math3.util.FastMath;
+
+/**
+ * Static implementations of common {@link org.apache.commons.math3.complex.Complex} utilities
+ * functions.
+ */
+public class ComplexUtils {
+
+ /** Default constructor. */
+ private ComplexUtils() {}
+
+ /**
+ * Creates a complex number from the given polar representation.
+ *
+ * <p>The value returned is <code>r&middot;e<sup>i&middot;theta</sup></code>, computed as <code>
+ * r&middot;cos(theta) + r&middot;sin(theta)i</code>
+ *
+ * <p>If either <code>r</code> or <code>theta</code> is NaN, or <code>theta</code> is infinite,
+ * {@link Complex#NaN} is returned.
+ *
+ * <p>If <code>r</code> is infinite and <code>theta</code> is finite, infinite or NaN values may
+ * be returned in parts of the result, following the rules for double arithmetic.
+ *
+ * <pre>
+ * Examples:
+ * <code>
+ * polar2Complex(INFINITY, &pi;/4) = INFINITY + INFINITY i
+ * polar2Complex(INFINITY, 0) = INFINITY + NaN i
+ * polar2Complex(INFINITY, -&pi;/4) = INFINITY - INFINITY i
+ * polar2Complex(INFINITY, 5&pi;/4) = -INFINITY - INFINITY i </code></pre>
+ *
+ * @param r the modulus of the complex number to create
+ * @param theta the argument of the complex number to create
+ * @return <code>r&middot;e<sup>i&middot;theta</sup></code>
+ * @throws MathIllegalArgumentException if {@code r} is negative.
+ * @since 1.1
+ */
+ public static Complex polar2Complex(double r, double theta)
+ throws MathIllegalArgumentException {
+ if (r < 0) {
+ throw new MathIllegalArgumentException(LocalizedFormats.NEGATIVE_COMPLEX_MODULE, r);
+ }
+ return new Complex(r * FastMath.cos(theta), r * FastMath.sin(theta));
+ }
+
+ /**
+ * Convert an array of primitive doubles to an array of {@code Complex} objects.
+ *
+ * @param real Array of numbers to be converted to their {@code Complex} equivalent.
+ * @return an array of {@code Complex} objects.
+ * @since 3.1
+ */
+ public static Complex[] convertToComplex(double[] real) {
+ final Complex c[] = new Complex[real.length];
+ for (int i = 0; i < real.length; i++) {
+ c[i] = new Complex(real[i], 0);
+ }
+
+ return c;
+ }
+}