When working with sparse matrices in Julia, it is often necessary to construct matrices with multiple diagonals. In this article, we will explore three different ways to construct non-square sparse matrices with multiple diagonals in Julia.

## Method 1: Using the `spdiagm` function

The `spdiagm` function in Julia allows us to construct a sparse matrix with specified diagonals. We can pass an array of values for each diagonal, and the function will create a sparse matrix with those diagonals.

```
using SparseArrays
# Define the values for each diagonal
diagonals = [1, 2, 3]
# Construct the sparse matrix
A = spdiagm(diagonals, [-1, 0, 1], 4, 4)
```

In this example, we are constructing a 4×4 sparse matrix with three diagonals. The values for each diagonal are specified in the `diagonals` array, and the corresponding positions of the diagonals are specified in the second argument of the `spdiagm` function.

## Method 2: Using the `spdiag` function

The `spdiag` function in Julia allows us to construct a sparse matrix with a single diagonal. We can then combine multiple sparse matrices with single diagonals to create a sparse matrix with multiple diagonals.

```
using SparseArrays
# Define the values for each diagonal
diagonals = [1, 2, 3]
# Construct the sparse matrices with single diagonals
A1 = spdiag(diagonals[1], 4, 4)
A2 = spdiag(diagonals[2], 4, 4)
A3 = spdiag(diagonals[3], 4, 4)
# Combine the sparse matrices to create a matrix with multiple diagonals
A = A1 + A2 + A3
```

In this example, we are constructing three sparse matrices with single diagonals using the `spdiag` function. We then combine these sparse matrices using the addition operator to create a sparse matrix with multiple diagonals.

## Method 3: Using the `sparse` function

The `sparse` function in Julia allows us to construct a sparse matrix by specifying the non-zero values and their positions. We can use this function to construct a sparse matrix with multiple diagonals by specifying the values and positions of the diagonals.

```
using SparseArrays
# Define the values for each diagonal
diagonals = [1, 2, 3]
# Define the positions of the diagonals
positions = [-1, 0, 1]
# Construct the sparse matrix
A = sparse([diagonals[1]; diagonals[2]; diagonals[3]], [positions[1]; positions[2]; positions[3]], 4, 4)
```

In this example, we are constructing a sparse matrix with three diagonals using the `sparse` function. We specify the values and positions of the diagonals as separate arrays.

After exploring these three methods, we can conclude that the best option depends on the specific requirements of the problem. If we know the values and positions of the diagonals beforehand, the `spdiagm` function provides a concise and efficient way to construct the sparse matrix. However, if we need more flexibility in constructing the matrix, the `spdiag` and `sparse` functions allow us to specify the values and positions of the diagonals separately.