Skip to content
Merged
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 86 additions & 18 deletions exercises/complex-numbers/description.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,97 @@
# Description

A complex number is a number in the form `a + b * i` where `a` and `b` are real and `i` satisfies `i^2 = -1`.
A **complex number** is expressed in the form `z = a + b * i`, where:

`a` is called the real part and `b` is called the imaginary part of `z`.
The conjugate of the number `a + b * i` is the number `a - b * i`.
The absolute value of a complex number `z = a + b * i` is a real number `|z| = sqrt(a^2 + b^2)`. The square of the absolute value `|z|^2` is the result of multiplication of `z` by its complex conjugate.
- `a` is the **real part** (a real number),

The sum/difference of two complex numbers involves adding/subtracting their real and imaginary parts separately:
`(a + i * b) + (c + i * d) = (a + c) + (b + d) * i`,
`(a + i * b) - (c + i * d) = (a - c) + (b - d) * i`.
- `b` is the **imaginary part** (also a real number), and

Multiplication result is by definition
`(a + i * b) * (c + i * d) = (a * c - b * d) + (b * c + a * d) * i`.
- `i` is the **imaginary unit** satisfying `i^2 = -1`.

The reciprocal of a non-zero complex number is
`1 / (a + i * b) = a/(a^2 + b^2) - b/(a^2 + b^2) * i`.
## Key Properties

Dividing a complex number `a + i * b` by another `c + i * d` gives:
`(a + i * b) / (c + i * d) = (a * c + b * d)/(c^2 + d^2) + (b * c - a * d)/(c^2 + d^2) * i`.
### Conjugate

Raising e to a complex exponent can be expressed as `e^(a + i * b) = e^a * e^(i * b)`, the last term of which is given by Euler's formula `e^(i * b) = cos(b) + i * sin(b)`.
The conjugate of the complex number `z = a + b * i` is given by:

Implement the following operations:
```plaintext
z̅ = a - b * i
```

- addition, subtraction, multiplication and division of two complex numbers,
- conjugate, absolute value, exponent of a given complex number.
### Absolute Value

Assume the programming language you are using does not have an implementation of complex numbers.
The absolute value (or modulus) of `z` is defined as:

```plaintext
|z| = sqrt(a^2 + b^2)
```

### Sqaure

The square of the absolute value, `|z|²`, can be computed as the product of `z` and its conjugate:

```plaintext
|z|² = z * z̅ = a² + b²
```

## Operations on Complex Numbers

### Addition

The sum of two complex numbers `z₁ = a + b * i` and `z₂ = c + d * i` is computed by adding their real and imaginary parts separately:

```plaintext
z₁ + z₂ = (a + c) + (b + d) * i
```

### Subtraction

The difference of two complex numbers is obtained by subtracting their respective parts:

```plaintext
z₁ - z₂ = (a - c) + (b - d) * i
```

### Multiplication

The product of two complex numbers is defined as:

```plaintext
z₁ * z₂ = (a + b * i) * (c + d * i) = (a * c - b * d) + (b * c + a * d) * i
```

### Reciprocal

The reciprocal of a non-zero complex number is given by:

```plaintext
1 / z = 1 / (a + b * i) = a / (a² + b²) - b / (a² + b²) * i
```

### Division

The division of one complex number by another is given by:

```plaintext
z₁ / z₂ = z₁ * (1 / z₂) = (a + b * i) / (c + d * i) = (a * c + b * d) / (c² + d²) + (b * c - a * d) / (c² + d²) * i
```

### Exponentiation

Raising _e_ (the base of the natural logarithm) to a complex exponent can be expressed using Euler's formula:

```plaintext
e^(a + b * i) = e^a * e^(b * i) = e^a * (cos(b) + i * sin(b))
```

## Implementation Requirements

Given that you should not use built-in support for complex numbers, implement the following operations:

- **addition** of two complex numbers
- **subtraction** of two complex numbers
- **multiplication** of two complex numbers
- **division** of two complex numbers
- **conjugate** of a complex number
- **absolute value** of a complex number
- **exponentiation** of _e_ (the base of the natural logarithm) to a complex number